diff --git a/assets/js/src/newsletter_editor/components/content.js b/assets/js/src/newsletter_editor/components/content.js index b9b1f970a6..da848e0fbc 100644 --- a/assets/js/src/newsletter_editor/components/content.js +++ b/assets/js/src/newsletter_editor/components/content.js @@ -43,12 +43,16 @@ define([ } }; + Module.getBody = function() { + return JSON.stringify({ + content: App._contentContainer.toJSON(), + globalStyles: App.getGlobalStyles().toJSON(), + }); + }; + Module.toJSON = function() { return _.extend({ - body: JSON.stringify({ - content: App._contentContainer.toJSON(), - globalStyles: App.getGlobalStyles().toJSON(), - }), + body: Module.getBody(), }, App.getNewsletter().toJSON()); }; @@ -62,6 +66,7 @@ define([ App.getBlockTypeModel = Module.getBlockTypeModel; App.getBlockTypeView = Module.getBlockTypeView; App.toJSON = Module.toJSON; + App.getBody = Module.getBody; App.getNewsletter = Module.getNewsletter; Module.newsletter = new Module.NewsletterModel(_.omit(_.clone(options.newsletter), ['body'])); diff --git a/assets/js/src/newsletter_editor/components/save.js b/assets/js/src/newsletter_editor/components/save.js index 5fc97f5d45..e24dab7868 100644 --- a/assets/js/src/newsletter_editor/components/save.js +++ b/assets/js/src/newsletter_editor/components/save.js @@ -42,6 +42,16 @@ define([ }); }; + Module.saveTemplate = function(options) { + return MailPoet.Ajax.post({ + endpoint: 'newsletterTemplates', + action: 'save', + data: _.extend(options || {}, { + body: App.getBody(), + }), + }); + }; + Module.SaveView = Marionette.LayoutView.extend({ getTemplate: function() { return templates.save; }, events: { @@ -94,6 +104,15 @@ define([ templateDescription = this.$('.mailpoet_save_as_template_description').val(); console.log('Saving template with ', templateName, templateDescription); + Module.saveTemplate({ + name: templateName, + description: templateDescription, + }).done(function() { + console.log('Template saved', arguments); + }).fail(function() { + // TODO: Handle error messages + console.log('Template save failed', arguments); + }); this.hideOptionContents(); }, diff --git a/tests/javascript/newsletter_editor/components/save.spec.js b/tests/javascript/newsletter_editor/components/save.spec.js index 932ceebdfe..43bf735726 100644 --- a/tests/javascript/newsletter_editor/components/save.spec.js +++ b/tests/javascript/newsletter_editor/components/save.spec.js @@ -94,6 +94,27 @@ define([ view.$('.mailpoet_save_show_options').click(); expect(view.$('.mailpoet_save_options')).to.not.have.$class('mailpoet_hidden'); }); + + it('triggers template saving when clicked on save as template button', function() { + var mock = sinon.mock({ post: function() {} }).expects('post').once().returns(jQuery.Deferred()); + EditorApplication.getBody = sinon.stub(); + var module = SaveInjector({ + 'mailpoet': { + Ajax: { + post: mock, + } + }, + 'newsletter_editor/App': EditorApplication, + }); + var view = new (module.SaveView)(); + view.render(); + + view.$('.mailpoet_save_as_template_name').val('A sample template'); + view.$('.mailpoet_save_as_template_description').val('Sample template description'); + view.$('.mailpoet_save_as_template').click(); + + mock.verify(); + }); }); }); });