summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGiovane <giovaneliberato@gmail.com>2015-09-15 16:37:24 -0300
committerGiovane <giovaneliberato@gmail.com>2015-09-15 17:06:54 -0300
commit78ece9852d5584e0681b4fffd91c704bd9919a1c (patch)
tree8ecdaa91fb1903c4d67a04614300de84171d8d4d
parent75eafc2b5dfa7fa4eaa2a1770fbfcb628727ee47 (diff)
#442 adds feedback compose box component.
-rw-r--r--web-ui/app/js/dispatchers/right_pane_dispatcher.js10
-rw-r--r--web-ui/app/js/feedback/compose_feedback.js40
-rw-r--r--web-ui/app/js/views/templates.js3
-rw-r--r--web-ui/app/templates/feedback/compose_feedback.hbs19
-rw-r--r--web-ui/test/spec/dispatchers/right_pane_dispatcher.spec.js10
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;