From 7689919f19ff786792aa647c69bc129a1a25a309 Mon Sep 17 00:00:00 2001 From: sw00 Date: Sun, 4 Oct 2015 23:52:20 -0300 Subject: create draft_button component that listens to `draft:save`, `draft:saved` --- web-ui/app/js/mail_view/ui/draft_button.js | 41 ++++++++++++++++++++++ web-ui/app/js/mixins/with_mail_edit_base.js | 4 ++- web-ui/test/spec/mail_view/ui/draft_button.spec.js | 40 +++++++++++++++++++++ 3 files changed, 84 insertions(+), 1 deletion(-) create mode 100644 web-ui/app/js/mail_view/ui/draft_button.js create mode 100644 web-ui/test/spec/mail_view/ui/draft_button.spec.js (limited to 'web-ui') diff --git a/web-ui/app/js/mail_view/ui/draft_button.js b/web-ui/app/js/mail_view/ui/draft_button.js new file mode 100644 index 00000000..1a89c414 --- /dev/null +++ b/web-ui/app/js/mail_view/ui/draft_button.js @@ -0,0 +1,41 @@ +/* +* Copyright (c) 2014 ThoughtWorks, Inc. +* +* Pixelated is free software: you can redistribute it and/or modify +* it under the terms of the GNU Affero General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* Pixelated is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU Affero General Public License for more details. +* +* You should have received a copy of the GNU Affero General Public License +* along with Pixelated. If not, see . +*/ +'use strict'; + +define([ + 'flight/lib/component', + 'page/events', +], +function (defineComponent, events) { + return defineComponent(draftButton); + + function draftButton() { + this.enableButton = function () { + this.$node.prop('disabled', false); + }; + + this.disableButton = function () { + this.$node.prop('disabled', true); + }; + + this.after('initialize', function(){ + this.disableButton(); + this.on(document, events.mail.saveDraft, this.disableButton); + this.on(document, events.mail.draftSaved, this.enableButton); + }); + } +}); diff --git a/web-ui/app/js/mixins/with_mail_edit_base.js b/web-ui/app/js/mixins/with_mail_edit_base.js index 2434df92..b4a2b0c8 100644 --- a/web-ui/app/js/mixins/with_mail_edit_base.js +++ b/web-ui/app/js/mixins/with_mail_edit_base.js @@ -23,9 +23,10 @@ define( 'page/events', 'views/i18n', 'mail_view/ui/send_button', + 'mail_view/ui/draft_button', 'flight/lib/utils' ], - function(viewHelper, Recipients, DraftSaveStatus, events, i18n, SendButton, utils) { + function(viewHelper, Recipients, DraftSaveStatus, events, i18n, SendButton, DraftButton, utils) { 'use strict'; function withMailEditBase() { @@ -94,6 +95,7 @@ define( this.on(this.select('draftButton'), 'click', this.buildAndSaveDraft); this.on(this.select('trashButton'), 'click', this.trashMail); SendButton.attachTo(this.select('sendButton')); + DraftButton.attachTo(this.select('draftButton')); this.warnSendButtonOfRecipients(); }; diff --git a/web-ui/test/spec/mail_view/ui/draft_button.spec.js b/web-ui/test/spec/mail_view/ui/draft_button.spec.js new file mode 100644 index 00000000..e1e968de --- /dev/null +++ b/web-ui/test/spec/mail_view/ui/draft_button.spec.js @@ -0,0 +1,40 @@ +/* global Pixelated */ + +describeComponent('mail_view/ui/draft_button', function(){ + 'use strict'; + + describe('draft save button', function(){ + beforeEach(function(){ + this.setupComponent(''); + }); + + describe('after initialize', function(){ + it('should be enabled', function(){ + expect(this.$node).toBeDisabled(); + }); + }); + + describe('when enabled', function(){ + beforeEach(function(){ + this.$node.prop('disabled', false); + }); + + it('should be disabled when saving draft message', function(){ + $(document).trigger(Pixelated.events.mail.saveDraft, {}); + expect(this.$node).toBeDisabled(); + }); + }); + + describe('when disabled', function(){ + beforeEach(function(){ + this.$node.prop('disabled', true); + }); + + it('should be enabled when draft message has been saved', function(){ + $(document).trigger(Pixelated.events.mail.draftSaved, {}); + expect(this.$node).not.toBeDisabled(); + }); + }); + + }); +}); -- cgit v1.2.3