diff options
-rw-r--r-- | web-ui/app/js/dispatchers/right_pane_dispatcher.js | 10 | ||||
-rw-r--r-- | web-ui/app/js/feedback/compose_feedback.js | 40 | ||||
-rw-r--r-- | web-ui/app/js/views/templates.js | 3 | ||||
-rw-r--r-- | web-ui/app/templates/feedback/compose_feedback.hbs | 19 | ||||
-rw-r--r-- | web-ui/test/spec/dispatchers/right_pane_dispatcher.spec.js | 10 |
5 files changed, 80 insertions, 2 deletions
diff --git a/web-ui/app/js/dispatchers/right_pane_dispatcher.js b/web-ui/app/js/dispatchers/right_pane_dispatcher.js index 8de89858..7de6f07a 100644 --- a/web-ui/app/js/dispatchers/right_pane_dispatcher.js +++ b/web-ui/app/js/dispatchers/right_pane_dispatcher.js @@ -23,10 +23,11 @@ define( 'mail_view/ui/reply_section', 'mail_view/ui/draft_box', 'mail_view/ui/no_message_selected_pane', + 'feedback/compose_feedback', 'page/events' ], - function(defineComponent, ComposeBox, MailView, ReplySection, DraftBox, NoMessageSelectedPane, events) { + function(defineComponent, ComposeBox, MailView, ReplySection, DraftBox, NoMessageSelectedPane, FeedbackBox, events) { 'use strict'; return defineComponent(rightPaneDispatcher); @@ -35,6 +36,7 @@ define( this.defaultAttrs({ rightPane: '#right-pane', composeBox: 'compose-box', + feedbackBox: 'feedback-box', mailView: 'mail-view', noMessageSelectedPane: 'no-message-selected-pane', replySection: 'reply-section', @@ -60,6 +62,11 @@ define( ComposeBox.attachTo(stage, {currentTag: this.attr.currentTag}); }; + this.openFeedbackBox = function() { + var stage = this.reset(this.attr.feedbackBox); + FeedbackBox.attachTo(stage); + } + this.openMail = function(ev, data) { var stage = this.reset(this.attr.mailView); MailView.attachTo(stage, data); @@ -97,6 +104,7 @@ define( this.on(document, events.dispatchers.rightPane.openComposeBox, this.openComposeBox); this.on(document, events.dispatchers.rightPane.openDraft, this.openDraft); this.on(document, events.ui.mail.open, this.openMail); + this.on(document, events.ui.feedback.open, this.openFeedbackBox); this.on(document, events.dispatchers.rightPane.openNoMessageSelected, this.openNoMessageSelectedPane); this.on(document, events.dispatchers.rightPane.selectTag, this.selectTag); this.on(document, events.ui.tag.selected, this.saveTag); diff --git a/web-ui/app/js/feedback/compose_feedback.js b/web-ui/app/js/feedback/compose_feedback.js new file mode 100644 index 00000000..6fc454e0 --- /dev/null +++ b/web-ui/app/js/feedback/compose_feedback.js @@ -0,0 +1,40 @@ +/* + * Copyright (c) 2015 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/>. + */ + +define(['flight/lib/component', 'views/templates', 'page/events', 'features'], + function (defineComponent, templates, events, features) { + 'use strict'; + + return defineComponent(function () { + this.render = function () { + this.$node.html(templates.feedback.compose_feedback()); + }; + + this.openComposeBox = function() { + var stage = this.reset('compose-box'); + this.attachTo(stage); + } + + this.after('initialize', function () { + if (features.isEnabled('feedback')) { + this.render(); + this.on(document, events.ui.feedback.open, this.openComposeBox); + } + }); + + }); +}); diff --git a/web-ui/app/js/views/templates.js b/web-ui/app/js/views/templates.js index 77864569..d0fc9893 100644 --- a/web-ui/app/js/views/templates.js +++ b/web-ui/app/js/views/templates.js @@ -61,7 +61,8 @@ define(['hbs/templates'], function (templates) { version: window.Pixelated['app/templates/page/version.hbs'] }, feedback: { - feedback: window.Pixelated['app/templates/feedback/feedback.hbs'] + feedback: window.Pixelated['app/templates/feedback/feedback.hbs'], + compose_feedback: window.Pixelated['app/templates/feedback/compose_feedback.hbs'] } }; diff --git a/web-ui/app/templates/feedback/compose_feedback.hbs b/web-ui/app/templates/feedback/compose_feedback.hbs new file mode 100644 index 00000000..42dbf47d --- /dev/null +++ b/web-ui/app/templates/feedback/compose_feedback.hbs @@ -0,0 +1,19 @@ +<button class="close-mail-button"> + <i class="fa fa-times"></i> +</button> +<div class="floatlabel"> + <label class="floatlabel" for="subject">Subject</label> + <input class="floatlabel" name="subject" type="text" id="subject" value="{{subject}}" placeholder="{{t 'Subject'}}" tabindex="1"/> +</div> +<div class="floatlabel"> + <label class="floatlabel" for="body">Body</label> + <textarea class="floatlabel" name="body" id="text-box" placeholder="{{t 'Body'}}" tabindex="2">{{body}}</textarea> +</div> + + +<div class="buttons-group columns"> + <button id="send-button" tabindex="6"><i class="fa fa-send"></i></button> + <button id="trash-button" tabindex="7">{{t 'trash-button'}}<i class="fa fa-trash-o"></i></button> + <button id="draft-button">{{t 'draft-button'}}<i class="fa fa-pencil"></i></button> + <div id="draft-save-status"></div> +</div> diff --git a/web-ui/test/spec/dispatchers/right_pane_dispatcher.spec.js b/web-ui/test/spec/dispatchers/right_pane_dispatcher.spec.js index 4187610e..f5386b85 100644 --- a/web-ui/test/spec/dispatchers/right_pane_dispatcher.spec.js +++ b/web-ui/test/spec/dispatchers/right_pane_dispatcher.spec.js @@ -53,6 +53,15 @@ describeComponent('dispatchers/right_pane_dispatcher', function () { expect(pushStateEvent).toHaveBeenTriggeredOnAndWith(document, jasmine.objectContaining({ isDisplayNoMessageSelected: true })); }); + it('listens to open feedback event and open feedback box', function () { + var feedbackBox = require('feedback/compose_feedback'); + spyOn(feedbackBox, 'attachTo'); + + this.component.trigger(document, Pixelated.events.ui.feedback.open); + + expect(feedbackBox.attachTo).toHaveBeenCalled(); + }); + }); @@ -66,6 +75,7 @@ describeComponent('dispatchers/right_pane_dispatcher', function () { }); }); + describe('on initialization', function () { var noMessageSelectedPane; |