From 78ece9852d5584e0681b4fffd91c704bd9919a1c Mon Sep 17 00:00:00 2001 From: Giovane Date: Tue, 15 Sep 2015 16:37:24 -0300 Subject: #442 adds feedback compose box component. --- web-ui/app/js/dispatchers/right_pane_dispatcher.js | 10 +++++- web-ui/app/js/feedback/compose_feedback.js | 40 ++++++++++++++++++++++ web-ui/app/js/views/templates.js | 3 +- web-ui/app/templates/feedback/compose_feedback.hbs | 19 ++++++++++ .../spec/dispatchers/right_pane_dispatcher.spec.js | 10 ++++++ 5 files changed, 80 insertions(+), 2 deletions(-) create mode 100644 web-ui/app/js/feedback/compose_feedback.js create mode 100644 web-ui/app/templates/feedback/compose_feedback.hbs (limited to 'web-ui') 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 . + */ + +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 @@ + +
+ + +
+
+ + +
+ + +
+ + + +
+
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; -- cgit v1.2.3