root / snf-cyclades-app / synnefo / ui / static / snf / js / ui / web / ui_feedback_view.js @ 6201f0e3
History | View | Annotate | Download (6.6 kB)
1 | 00469232 | Kostas Papadimitriou | // Copyright 2011 GRNET S.A. All rights reserved.
|
---|---|---|---|
2 | 00469232 | Kostas Papadimitriou | //
|
3 | 00469232 | Kostas Papadimitriou | // Redistribution and use in source and binary forms, with or
|
4 | 00469232 | Kostas Papadimitriou | // without modification, are permitted provided that the following
|
5 | 00469232 | Kostas Papadimitriou | // conditions are met:
|
6 | 00469232 | Kostas Papadimitriou | //
|
7 | 00469232 | Kostas Papadimitriou | // 1. Redistributions of source code must retain the above
|
8 | 00469232 | Kostas Papadimitriou | // copyright notice, this list of conditions and the following
|
9 | 00469232 | Kostas Papadimitriou | // disclaimer.
|
10 | 00469232 | Kostas Papadimitriou | //
|
11 | 00469232 | Kostas Papadimitriou | // 2. Redistributions in binary form must reproduce the above
|
12 | 00469232 | Kostas Papadimitriou | // copyright notice, this list of conditions and the following
|
13 | 00469232 | Kostas Papadimitriou | // disclaimer in the documentation and/or other materials
|
14 | 00469232 | Kostas Papadimitriou | // provided with the distribution.
|
15 | 00469232 | Kostas Papadimitriou | //
|
16 | 00469232 | Kostas Papadimitriou | // THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS
|
17 | 00469232 | Kostas Papadimitriou | // OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
18 | 00469232 | Kostas Papadimitriou | // WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
19 | 00469232 | Kostas Papadimitriou | // PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR
|
20 | 00469232 | Kostas Papadimitriou | // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
21 | 00469232 | Kostas Papadimitriou | // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
22 | 00469232 | Kostas Papadimitriou | // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
|
23 | 00469232 | Kostas Papadimitriou | // USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
|
24 | 00469232 | Kostas Papadimitriou | // AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
25 | 00469232 | Kostas Papadimitriou | // LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
26 | 00469232 | Kostas Papadimitriou | // ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
27 | 00469232 | Kostas Papadimitriou | // POSSIBILITY OF SUCH DAMAGE.
|
28 | 00469232 | Kostas Papadimitriou | //
|
29 | 00469232 | Kostas Papadimitriou | // The views and conclusions contained in the software and
|
30 | 00469232 | Kostas Papadimitriou | // documentation are those of the authors and should not be
|
31 | 00469232 | Kostas Papadimitriou | // interpreted as representing official policies, either expressed
|
32 | 00469232 | Kostas Papadimitriou | // or implied, of GRNET S.A.
|
33 | 00469232 | Kostas Papadimitriou | //
|
34 | 00469232 | Kostas Papadimitriou | |
35 | 8d08f18a | Kostas Papadimitriou | ;(function(root){
|
36 | 8d08f18a | Kostas Papadimitriou | |
37 | 8d08f18a | Kostas Papadimitriou | // root
|
38 | 8d08f18a | Kostas Papadimitriou | var root = root;
|
39 | 8d08f18a | Kostas Papadimitriou | |
40 | 8d08f18a | Kostas Papadimitriou | // setup namepsaces
|
41 | 8d08f18a | Kostas Papadimitriou | var snf = root.synnefo = root.synnefo || {};
|
42 | 8d08f18a | Kostas Papadimitriou | var api = snf.api = snf.api || {};
|
43 | 8d08f18a | Kostas Papadimitriou | var models = snf.models = snf.models || {}
|
44 | 8d08f18a | Kostas Papadimitriou | var storage = snf.storage = snf.storage || {};
|
45 | 8d08f18a | Kostas Papadimitriou | var ui = snf.ui = snf.ui || {};
|
46 | 8d08f18a | Kostas Papadimitriou | var util = snf.util = snf.util || {};
|
47 | 8d08f18a | Kostas Papadimitriou | |
48 | 8d08f18a | Kostas Papadimitriou | var views = snf.views = snf.views || {}
|
49 | 8d08f18a | Kostas Papadimitriou | |
50 | 8d08f18a | Kostas Papadimitriou | // shortcuts
|
51 | 8d08f18a | Kostas Papadimitriou | var bb = root.Backbone;
|
52 | 8d08f18a | Kostas Papadimitriou | |
53 | 8d08f18a | Kostas Papadimitriou | views.FeedbackView = views.Overlay.extend({ |
54 | 8d08f18a | Kostas Papadimitriou | |
55 | 8d08f18a | Kostas Papadimitriou | view_id: "feedback_view", |
56 | 8d08f18a | Kostas Papadimitriou | content_selector: "#feedback-overlay-content", |
57 | 8d08f18a | Kostas Papadimitriou | css_class: 'overlay-feedback overlay-info', |
58 | 8d08f18a | Kostas Papadimitriou | overlay_id: "feedback-overlay", |
59 | 8d08f18a | Kostas Papadimitriou | |
60 | 8d08f18a | Kostas Papadimitriou | subtitle: "", |
61 | 8d08f18a | Kostas Papadimitriou | title: "Send feedback", |
62 | 8d08f18a | Kostas Papadimitriou | |
63 | 8d08f18a | Kostas Papadimitriou | initialize: function(options) { |
64 | 8d08f18a | Kostas Papadimitriou | views.FeedbackView.__super__.initialize.apply(this, arguments); |
65 | 8d08f18a | Kostas Papadimitriou | |
66 | 8d08f18a | Kostas Papadimitriou | _.bindAll(this, 'submit_form', 'show_error', 'show_success'); |
67 | 8d08f18a | Kostas Papadimitriou | |
68 | 8d08f18a | Kostas Papadimitriou | this.submit = this.$("span.submit"); |
69 | 8d08f18a | Kostas Papadimitriou | this.text = this.$("textarea.feedback-message"); |
70 | 8d08f18a | Kostas Papadimitriou | this.text_row = this.$("div.form-field"); |
71 | 8d08f18a | Kostas Papadimitriou | this.messages = this.$(".messages").hide(); |
72 | 8d08f18a | Kostas Papadimitriou | this.error = this.$("p.error-message"); |
73 | 8d08f18a | Kostas Papadimitriou | this.success = this.$("p.success-message"); |
74 | 8d08f18a | Kostas Papadimitriou | this.form = this.$(".form"); |
75 | 8d08f18a | Kostas Papadimitriou | this.sending = this.$(".sending-message"); |
76 | 8d08f18a | Kostas Papadimitriou | |
77 | 8d08f18a | Kostas Papadimitriou | this.init_handlers();
|
78 | 8d08f18a | Kostas Papadimitriou | }, |
79 | 8d08f18a | Kostas Papadimitriou | |
80 | 8d08f18a | Kostas Papadimitriou | init_handlers: function() { |
81 | 8d08f18a | Kostas Papadimitriou | this.submit.click(this.submit_form); |
82 | 8d08f18a | Kostas Papadimitriou | }, |
83 | 8d08f18a | Kostas Papadimitriou | |
84 | 8d08f18a | Kostas Papadimitriou | get_message: function() { |
85 | 8d08f18a | Kostas Papadimitriou | var text = _(this.text.val()).trim(); |
86 | 8d08f18a | Kostas Papadimitriou | return text;
|
87 | 8d08f18a | Kostas Papadimitriou | }, |
88 | 8d08f18a | Kostas Papadimitriou | |
89 | 8d08f18a | Kostas Papadimitriou | validate: function() { |
90 | 8d08f18a | Kostas Papadimitriou | var msg = this.get_message(); |
91 | 8d08f18a | Kostas Papadimitriou | if (msg == "") { |
92 | 8d08f18a | Kostas Papadimitriou | this.text_row.addClass("error"); |
93 | 8d08f18a | Kostas Papadimitriou | return false; |
94 | 8d08f18a | Kostas Papadimitriou | } else {
|
95 | 8d08f18a | Kostas Papadimitriou | this.text_row.removeClass("error"); |
96 | 8d08f18a | Kostas Papadimitriou | return true; |
97 | 8d08f18a | Kostas Papadimitriou | } |
98 | 8d08f18a | Kostas Papadimitriou | }, |
99 | 8d08f18a | Kostas Papadimitriou | |
100 | 8d08f18a | Kostas Papadimitriou | submit_form: function() { |
101 | 8d08f18a | Kostas Papadimitriou | if (this.validate()) { |
102 | 8d08f18a | Kostas Papadimitriou | this.show_sending();
|
103 | 8d08f18a | Kostas Papadimitriou | this.send_message(this.get_message(), {}); |
104 | 8d08f18a | Kostas Papadimitriou | } else {}
|
105 | 8d08f18a | Kostas Papadimitriou | }, |
106 | 8d08f18a | Kostas Papadimitriou | |
107 | 8d08f18a | Kostas Papadimitriou | send_message: function(msg, extra) { |
108 | 8d08f18a | Kostas Papadimitriou | var extra = extra || {};
|
109 | 8d08f18a | Kostas Papadimitriou | |
110 | 8d08f18a | Kostas Papadimitriou | var data = {
|
111 | 5af5920c | Kostas Papadimitriou | 'feedback_msg': msg,
|
112 | 5af5920c | Kostas Papadimitriou | 'feedback_data': this.get_feedback_data() || "" |
113 | 8d08f18a | Kostas Papadimitriou | } |
114 | 8d08f18a | Kostas Papadimitriou | |
115 | 8d08f18a | Kostas Papadimitriou | var opts = {
|
116 | 5af5920c | Kostas Papadimitriou | 'url': synnefo.config.feedback_post_url,
|
117 | 8d08f18a | Kostas Papadimitriou | 'data': $.param(data), |
118 | 8d08f18a | Kostas Papadimitriou | 'success': this.show_success, |
119 | 8d08f18a | Kostas Papadimitriou | 'error': this.show_error, |
120 | 9ce969a7 | Kostas Papadimitriou | 'no_skip': true, |
121 | 9ce969a7 | Kostas Papadimitriou | 'display': false, |
122 | 8d08f18a | Kostas Papadimitriou | 'handles_error': true |
123 | 8d08f18a | Kostas Papadimitriou | } |
124 | 8d08f18a | Kostas Papadimitriou | api.sync('create', undefined, opts); |
125 | 8d08f18a | Kostas Papadimitriou | }, |
126 | 8d08f18a | Kostas Papadimitriou | |
127 | 8d08f18a | Kostas Papadimitriou | get_feedback_data: function() { |
128 | 8d08f18a | Kostas Papadimitriou | if (this.collect_data) return JSON.stringify(_.extend({}, snf.collect_user_data(),this.extra_data)); |
129 | 8d08f18a | Kostas Papadimitriou | }, |
130 | 8d08f18a | Kostas Papadimitriou | |
131 | 8d08f18a | Kostas Papadimitriou | onOpen: function() { |
132 | 9ce969a7 | Kostas Papadimitriou | var self = this; |
133 | 8d08f18a | Kostas Papadimitriou | var point = this.text.val().length; |
134 | 8d08f18a | Kostas Papadimitriou | this.text.show().focus().setCursorPosition(point);
|
135 | 9ce969a7 | Kostas Papadimitriou | |
136 | 9ce969a7 | Kostas Papadimitriou | this.$(".closeme").unbind("click"); |
137 | 9ce969a7 | Kostas Papadimitriou | this.$(".closeme").bind("click", function(){ |
138 | 9ce969a7 | Kostas Papadimitriou | self.hide("reset")
|
139 | 9ce969a7 | Kostas Papadimitriou | }); |
140 | 8d08f18a | Kostas Papadimitriou | }, |
141 | 8d08f18a | Kostas Papadimitriou | |
142 | 8d08f18a | Kostas Papadimitriou | show_form: function() { |
143 | 8d08f18a | Kostas Papadimitriou | this.form.show();
|
144 | 8d08f18a | Kostas Papadimitriou | this.messages.hide();
|
145 | 8d08f18a | Kostas Papadimitriou | this.text.focus();
|
146 | 8d08f18a | Kostas Papadimitriou | }, |
147 | 8d08f18a | Kostas Papadimitriou | |
148 | 8d08f18a | Kostas Papadimitriou | show_sending: function() { |
149 | 8d08f18a | Kostas Papadimitriou | this.form.hide();
|
150 | 8d08f18a | Kostas Papadimitriou | this.messages.show();
|
151 | 8d08f18a | Kostas Papadimitriou | this.error.hide();
|
152 | 8d08f18a | Kostas Papadimitriou | this.success.hide();
|
153 | 8d08f18a | Kostas Papadimitriou | this.sending.show();
|
154 | 8d08f18a | Kostas Papadimitriou | }, |
155 | 8d08f18a | Kostas Papadimitriou | |
156 | 8d08f18a | Kostas Papadimitriou | show_error: function() { |
157 | 8d08f18a | Kostas Papadimitriou | this.form.hide();
|
158 | 8d08f18a | Kostas Papadimitriou | this.messages.show();
|
159 | 8d08f18a | Kostas Papadimitriou | this.error.show();
|
160 | 8d08f18a | Kostas Papadimitriou | this.success.hide();
|
161 | 8d08f18a | Kostas Papadimitriou | this.sending.hide();
|
162 | 8d08f18a | Kostas Papadimitriou | }, |
163 | 8d08f18a | Kostas Papadimitriou | |
164 | 8d08f18a | Kostas Papadimitriou | show_success: function() { |
165 | 8d08f18a | Kostas Papadimitriou | this.form.hide();
|
166 | 8d08f18a | Kostas Papadimitriou | this.messages.show();
|
167 | 8d08f18a | Kostas Papadimitriou | this.error.hide();
|
168 | 8d08f18a | Kostas Papadimitriou | this.success.show();
|
169 | 8d08f18a | Kostas Papadimitriou | this.sending.hide();
|
170 | 8d08f18a | Kostas Papadimitriou | }, |
171 | edd1d565 | Kostas Papadimitriou | |
172 | 9ce969a7 | Kostas Papadimitriou | hide: function(reset_error_state) { |
173 | 9ce969a7 | Kostas Papadimitriou | // trigger api reset
|
174 | 9ce969a7 | Kostas Papadimitriou | if (reset_error_state === "reset") { |
175 | 9ce969a7 | Kostas Papadimitriou | // report error feedback form
|
176 | 9ce969a7 | Kostas Papadimitriou | if (snf.api.error_state == snf.api.STATES.ERROR) {
|
177 | 9ce969a7 | Kostas Papadimitriou | snf.api.trigger("reset");
|
178 | 9ffd10ce | Kostas Papadimitriou | ui.main.error_view.displaying_error = false;
|
179 | 9ffd10ce | Kostas Papadimitriou | ui.main.error_view.is_visible = false;
|
180 | 9ce969a7 | Kostas Papadimitriou | } |
181 | 9ce969a7 | Kostas Papadimitriou | } |
182 | 9ffd10ce | Kostas Papadimitriou | ui.main.error_view.is_visible = false;
|
183 | edd1d565 | Kostas Papadimitriou | views.FeedbackView.__super__.hide.apply(this);
|
184 | edd1d565 | Kostas Papadimitriou | }, |
185 | 8d08f18a | Kostas Papadimitriou | |
186 | 8d08f18a | Kostas Papadimitriou | show: function(data, collect_data, extra_data, cb) { |
187 | 9ffd10ce | Kostas Papadimitriou | // proxy error view visibility to avoid showing
|
188 | 9ffd10ce | Kostas Papadimitriou | // errors while user sees feedback overlay
|
189 | 9ffd10ce | Kostas Papadimitriou | ui.main.error_view.is_visible = true;
|
190 | 9ffd10ce | Kostas Papadimitriou | |
191 | 8d08f18a | Kostas Papadimitriou | this.data = data || ""; |
192 | 8d08f18a | Kostas Papadimitriou | this.cb = cb || function () {}; |
193 | 8d08f18a | Kostas Papadimitriou | this.collect_data = collect_data || false; |
194 | 8d08f18a | Kostas Papadimitriou | this.extra_data = extra_data || {};
|
195 | 8d08f18a | Kostas Papadimitriou | |
196 | 8d08f18a | Kostas Papadimitriou | views.FeedbackView.__super__.show.apply(this, arguments); |
197 | 8d08f18a | Kostas Papadimitriou | this.text.val(data);
|
198 | 8d08f18a | Kostas Papadimitriou | this.show_form();
|
199 | 8d08f18a | Kostas Papadimitriou | } |
200 | 8d08f18a | Kostas Papadimitriou | }); |
201 | 8d08f18a | Kostas Papadimitriou | })(this); |