Save newsletter before navigating away when clicked on "Next" button
This commit is contained in:
@ -65,15 +65,6 @@ define([
|
|||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
// For getting a promise after triggering save event
|
|
||||||
Module.saveAndProvidePromise = function(saveResult) {
|
|
||||||
var result = saveResult;
|
|
||||||
var promise = Module.save();
|
|
||||||
if (saveResult !== undefined) {
|
|
||||||
result.promise = promise;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
Module.getThumbnail = function(element, options) {
|
Module.getThumbnail = function(element, options) {
|
||||||
var promise = html2canvas(element, options || {});
|
var promise = html2canvas(element, options || {});
|
||||||
|
|
||||||
@ -169,7 +160,7 @@ define([
|
|||||||
},
|
},
|
||||||
save: function() {
|
save: function() {
|
||||||
this.hideOptionContents();
|
this.hideOptionContents();
|
||||||
App.getChannel().trigger('save');
|
App.getChannel().request('save');
|
||||||
},
|
},
|
||||||
beforeSave: function() {
|
beforeSave: function() {
|
||||||
// TODO: Add a loading animation instead
|
// TODO: Add a loading animation instead
|
||||||
@ -289,7 +280,10 @@ define([
|
|||||||
next: function() {
|
next: function() {
|
||||||
this.hideOptionContents();
|
this.hideOptionContents();
|
||||||
if(!this.$('.mailpoet_save_next').hasClass('button-disabled')) {
|
if(!this.$('.mailpoet_save_next').hasClass('button-disabled')) {
|
||||||
window.location.href = App.getConfig().get('urls.send');
|
Module._cancelAutosave();
|
||||||
|
Module.save().done(function(response) {
|
||||||
|
window.location.href = App.getConfig().get('urls.send');
|
||||||
|
});
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
validateNewsletter: function(jsonObject) {
|
validateNewsletter: function(jsonObject) {
|
||||||
@ -326,15 +320,18 @@ define([
|
|||||||
// may be requested
|
// may be requested
|
||||||
var AUTOSAVE_DELAY_DURATION = 1000;
|
var AUTOSAVE_DELAY_DURATION = 1000;
|
||||||
|
|
||||||
// Cancel save timer if another change happens before it completes
|
Module._cancelAutosave();
|
||||||
if (saveTimeout) clearTimeout(saveTimeout);
|
|
||||||
saveTimeout = setTimeout(function() {
|
saveTimeout = setTimeout(function() {
|
||||||
App.getChannel().trigger('save');
|
App.getChannel().request('save').always(function() {
|
||||||
clearTimeout(saveTimeout);
|
Module._cancelAutosave();
|
||||||
saveTimeout = undefined;
|
});
|
||||||
}, AUTOSAVE_DELAY_DURATION);
|
}, AUTOSAVE_DELAY_DURATION);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Module._cancelAutosave = function() {
|
||||||
|
if (saveTimeout) { clearTimeout(saveTimeout); saveTimeout = undefined; }
|
||||||
|
};
|
||||||
|
|
||||||
Module.beforeExitWithUnsavedChanges = function(e) {
|
Module.beforeExitWithUnsavedChanges = function(e) {
|
||||||
if (saveTimeout) {
|
if (saveTimeout) {
|
||||||
var message = MailPoet.I18n.t('unsavedChangesWillBeLost');
|
var message = MailPoet.I18n.t('unsavedChangesWillBeLost');
|
||||||
@ -349,13 +346,12 @@ define([
|
|||||||
};
|
};
|
||||||
|
|
||||||
App.on('before:start', function(App, options) {
|
App.on('before:start', function(App, options) {
|
||||||
var Application = App;
|
Application.save = Module.save; //saveAndProvidePromise;
|
||||||
Application.save = Module.saveAndProvidePromise;
|
|
||||||
Application.getChannel().on('autoSave', Module.autoSave);
|
Application.getChannel().on('autoSave', Module.autoSave);
|
||||||
|
|
||||||
window.onbeforeunload = Module.beforeExitWithUnsavedChanges;
|
window.onbeforeunload = Module.beforeExitWithUnsavedChanges;
|
||||||
|
|
||||||
Application.getChannel().on('save', function(saveResult) { Application.save(saveResult); });
|
Application.getChannel().reply('save', App.save);
|
||||||
});
|
});
|
||||||
|
|
||||||
App.on('start', function(App, options) {
|
App.on('start', function(App, options) {
|
||||||
|
@ -321,10 +321,7 @@ define([
|
|||||||
MailPoet.Modal.loading(true);
|
MailPoet.Modal.loading(true);
|
||||||
|
|
||||||
// save before sending
|
// save before sending
|
||||||
var saveResult = {promise: null};
|
App.getChannel().request('save').always(function() {
|
||||||
App.getChannel().trigger('save', saveResult);
|
|
||||||
|
|
||||||
saveResult.promise.always(function() {
|
|
||||||
CommunicationComponent.previewNewsletter(data).always(function() {
|
CommunicationComponent.previewNewsletter(data).always(function() {
|
||||||
MailPoet.Modal.loading(false);
|
MailPoet.Modal.loading(false);
|
||||||
}).done(function(response) {
|
}).done(function(response) {
|
||||||
|
@ -57,6 +57,8 @@ jQuery.fn.stick_in_parent = function() { return this; };
|
|||||||
global.stubChannel = function (EditorApplication, returnObject) {
|
global.stubChannel = function (EditorApplication, returnObject) {
|
||||||
var App = EditorApplication;
|
var App = EditorApplication;
|
||||||
App.getChannel = sinon.stub().returns(_.defaults(returnObject || {}, {
|
App.getChannel = sinon.stub().returns(_.defaults(returnObject || {}, {
|
||||||
|
request: function () {
|
||||||
|
},
|
||||||
trigger: function () {
|
trigger: function () {
|
||||||
},
|
},
|
||||||
on: function () {
|
on: function () {
|
||||||
|
@ -92,15 +92,6 @@ define([
|
|||||||
mock.verify();
|
mock.verify();
|
||||||
});
|
});
|
||||||
|
|
||||||
it('provides a promise if a result container is passed to save event', function() {
|
|
||||||
var spy = sinon.spy(module, 'save'),
|
|
||||||
saveResult = {promise: null};
|
|
||||||
module.saveAndProvidePromise(saveResult);
|
|
||||||
spy.restore();
|
|
||||||
expect(spy.calledOnce).to.be.true;
|
|
||||||
expect(saveResult.promise).to.be.an('object');
|
|
||||||
expect(saveResult.promise.then).to.be.a('function');
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('view', function() {
|
describe('view', function() {
|
||||||
@ -124,9 +115,9 @@ define([
|
|||||||
});
|
});
|
||||||
|
|
||||||
it('triggers newsletter saving when clicked on save button', function() {
|
it('triggers newsletter saving when clicked on save button', function() {
|
||||||
var mock = sinon.mock({ trigger: function() {} }).expects('trigger').once().withArgs('save');
|
var mock = sinon.mock({ request: function() {} }).expects('request').once().withArgs('save');
|
||||||
global.stubChannel(EditorApplication, {
|
global.stubChannel(EditorApplication, {
|
||||||
trigger: mock
|
request: mock
|
||||||
});
|
});
|
||||||
view.$('.mailpoet_save_button').click();
|
view.$('.mailpoet_save_button').click();
|
||||||
|
|
||||||
@ -177,6 +168,26 @@ define([
|
|||||||
|
|
||||||
mock.verify();
|
mock.verify();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('saves newsletter when clicked on "next" button', function() {
|
||||||
|
var spy = sinon.spy(),
|
||||||
|
module = SaveInjector({
|
||||||
|
'newsletter_editor/components/communication': {
|
||||||
|
saveNewsletter: function() {
|
||||||
|
return jQuery.Deferred();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
global.stubChannel(EditorApplication, {
|
||||||
|
trigger: spy
|
||||||
|
});
|
||||||
|
var view = new (module.SaveView)();
|
||||||
|
view.render();
|
||||||
|
|
||||||
|
view.$('.mailpoet_save_next').click();
|
||||||
|
expect(spy.withArgs('beforeEditorSave').calledOnce).to.be.true;
|
||||||
|
});
|
||||||
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
Reference in New Issue
Block a user