diff options
author | sw00 <sett.wai@gmail.com> | 2015-10-04 23:52:20 -0300 |
---|---|---|
committer | Folker Bernitt <fbernitt@thoughtworks.com> | 2015-10-13 10:38:48 +0200 |
commit | 7689919f19ff786792aa647c69bc129a1a25a309 (patch) | |
tree | 25d9bae71a2bea781ba6296f12f37445e285066e | |
parent | 74a6870edefc9e693f314f3bae0b805ddf6e273e (diff) |
create draft_button component that listens to `draft:save`, `draft:saved`
-rw-r--r-- | web-ui/app/js/mail_view/ui/draft_button.js | 41 | ||||
-rw-r--r-- | web-ui/app/js/mixins/with_mail_edit_base.js | 4 | ||||
-rw-r--r-- | web-ui/test/spec/mail_view/ui/draft_button.spec.js | 40 |
3 files changed, 84 insertions, 1 deletions
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 <http://www.gnu.org/licenses/>. +*/ +'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('<button></button>'); + }); + + 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(); + }); + }); + + }); +}); |