root / snf-cyclades-app / synnefo / ui / static / snf / js / ui / web / ui_invitations_view.js @ 375a9cb5
History | View | Annotate | Download (15.5 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 | 1e827d67 | Kostas Papadimitriou | ;(function(root){
|
36 | 1e827d67 | Kostas Papadimitriou | |
37 | 1e827d67 | Kostas Papadimitriou | // root
|
38 | 1e827d67 | Kostas Papadimitriou | var root = root;
|
39 | 1e827d67 | Kostas Papadimitriou | |
40 | 1e827d67 | Kostas Papadimitriou | // setup namepsaces
|
41 | 1e827d67 | Kostas Papadimitriou | var snf = root.synnefo = root.synnefo || {};
|
42 | 1e827d67 | Kostas Papadimitriou | var api = snf.api = snf.api || {};
|
43 | 1e827d67 | Kostas Papadimitriou | var models = snf.models = snf.models || {}
|
44 | 1e827d67 | Kostas Papadimitriou | var storage = snf.storage = snf.storage || {};
|
45 | 1e827d67 | Kostas Papadimitriou | var ui = snf.ui = snf.ui || {};
|
46 | 1e827d67 | Kostas Papadimitriou | var util = snf.util = snf.util || {};
|
47 | 1e827d67 | Kostas Papadimitriou | |
48 | 1e827d67 | Kostas Papadimitriou | var views = snf.views = snf.views || {}
|
49 | 1e827d67 | Kostas Papadimitriou | |
50 | 1e827d67 | Kostas Papadimitriou | // shortcuts
|
51 | 1e827d67 | Kostas Papadimitriou | var bb = root.Backbone;
|
52 | 1e827d67 | Kostas Papadimitriou | |
53 | 1e827d67 | Kostas Papadimitriou | views.InvitationsView = views.Overlay.extend({ |
54 | 1e827d67 | Kostas Papadimitriou | |
55 | 1e827d67 | Kostas Papadimitriou | view_id: "invitations_view", |
56 | 1e827d67 | Kostas Papadimitriou | content_selector: "#invitations-overlay-content", |
57 | 1e827d67 | Kostas Papadimitriou | css_class: 'overlay-invitations overlay-info', |
58 | 1e827d67 | Kostas Papadimitriou | overlay_id: "invitations-overlay", |
59 | 1e827d67 | Kostas Papadimitriou | |
60 | 1e827d67 | Kostas Papadimitriou | subtitle: "", |
61 | 123fd2f5 | Kostas Papadimitriou | title: "Invite friends", |
62 | 1e827d67 | Kostas Papadimitriou | |
63 | 1e827d67 | Kostas Papadimitriou | initialize: function(options) { |
64 | 1e827d67 | Kostas Papadimitriou | views.InvitationsView.__super__.initialize.apply(this, arguments); |
65 | 1e827d67 | Kostas Papadimitriou | |
66 | 1e827d67 | Kostas Papadimitriou | _.bindAll(this);
|
67 | 1e827d67 | Kostas Papadimitriou | |
68 | 1e827d67 | Kostas Papadimitriou | this.entry_tpl = this.$(".form-entry-tpl"); |
69 | 1e827d67 | Kostas Papadimitriou | this.form_entries = this.$(".form-entries"); |
70 | 1e827d67 | Kostas Papadimitriou | this.add = this.$(".add-new-invitation"); |
71 | 1e827d67 | Kostas Papadimitriou | this.remove = this.$(".remove-invitation"); |
72 | 1e827d67 | Kostas Papadimitriou | this.send = this.$(".send-invitations"); |
73 | 1e827d67 | Kostas Papadimitriou | this.top_info = this.$(".top-info"); |
74 | 1e827d67 | Kostas Papadimitriou | this.sent = this.$(".invitations-sent-cont"); |
75 | 1e827d67 | Kostas Papadimitriou | this.sent_pages = this.$(".invitations-sent-pages"); |
76 | 1e827d67 | Kostas Papadimitriou | this.sent_tpl = this.$(".invitation-sent-tpl"); |
77 | 1e827d67 | Kostas Papadimitriou | this.entry_tpl.hide();
|
78 | 1e827d67 | Kostas Papadimitriou | |
79 | 1e827d67 | Kostas Papadimitriou | this.inv_sent_per_page = 9; |
80 | 1e827d67 | Kostas Papadimitriou | |
81 | 1e827d67 | Kostas Papadimitriou | this.init_handlers();
|
82 | 123fd2f5 | Kostas Papadimitriou | |
83 | 123fd2f5 | Kostas Papadimitriou | this.invitations_retrieved = false; |
84 | 123fd2f5 | Kostas Papadimitriou | this.loading_invitations = this.$(".loading-invitations"); |
85 | 1e827d67 | Kostas Papadimitriou | }, |
86 | 1e827d67 | Kostas Papadimitriou | |
87 | 1e827d67 | Kostas Papadimitriou | init_handlers: function() { |
88 | 1e827d67 | Kostas Papadimitriou | var self = this; |
89 | 123fd2f5 | Kostas Papadimitriou | this.add.click(function(){ |
90 | 123fd2f5 | Kostas Papadimitriou | self.add_new_entry().find("input.name").focus();
|
91 | 123fd2f5 | Kostas Papadimitriou | }); |
92 | 1e827d67 | Kostas Papadimitriou | this.send.click(this.send_entries); |
93 | 1e827d67 | Kostas Papadimitriou | this.remove.live('click', function() { |
94 | 1e827d67 | Kostas Papadimitriou | return self.remove_entry($(this).parent().parent()); |
95 | 1e827d67 | Kostas Papadimitriou | }); |
96 | 123fd2f5 | Kostas Papadimitriou | |
97 | 1e827d67 | Kostas Papadimitriou | }, |
98 | 1e827d67 | Kostas Papadimitriou | |
99 | 1e827d67 | Kostas Papadimitriou | remove_entry: function(entry) { |
100 | 1e827d67 | Kostas Papadimitriou | if (entry.hasClass("sending")) { return }; |
101 | 1e827d67 | Kostas Papadimitriou | entry.remove(); |
102 | 1e827d67 | Kostas Papadimitriou | this.fix_entries();
|
103 | 1e827d67 | Kostas Papadimitriou | }, |
104 | 1e827d67 | Kostas Papadimitriou | |
105 | 1e827d67 | Kostas Papadimitriou | add_new_entry: function() { |
106 | 1e827d67 | Kostas Papadimitriou | var new_entry = this.create_form_entry().show() |
107 | 123fd2f5 | Kostas Papadimitriou | |
108 | 123fd2f5 | Kostas Papadimitriou | var name = "inv-entry-" + this.get_entries().length; |
109 | 123fd2f5 | Kostas Papadimitriou | new_entry.find("input.name").attr("name", "name-" + name); |
110 | 123fd2f5 | Kostas Papadimitriou | new_entry.find("input.email").attr("name", "email-" + name); |
111 | 123fd2f5 | Kostas Papadimitriou | |
112 | 123fd2f5 | Kostas Papadimitriou | var self = this; |
113 | 123fd2f5 | Kostas Papadimitriou | new_entry.find("input").bind("keydown", function(e){ |
114 | 123fd2f5 | Kostas Papadimitriou | e.keyCode = e.keyCode || e.which; |
115 | 123fd2f5 | Kostas Papadimitriou | if (e.keyCode == 13) { self.send_entries() }; |
116 | 123fd2f5 | Kostas Papadimitriou | }) |
117 | 123fd2f5 | Kostas Papadimitriou | |
118 | 1e827d67 | Kostas Papadimitriou | this.form_entries.append(new_entry).show();
|
119 | 1e827d67 | Kostas Papadimitriou | this.fix_entries();
|
120 | 123fd2f5 | Kostas Papadimitriou | return new_entry;
|
121 | 1e827d67 | Kostas Papadimitriou | }, |
122 | 1e827d67 | Kostas Papadimitriou | |
123 | 1e827d67 | Kostas Papadimitriou | show_entry_error: function(entry, error) { |
124 | 1e827d67 | Kostas Papadimitriou | entry.find(".send-error").text(error)
|
125 | 1e827d67 | Kostas Papadimitriou | entry.find(".send-error").show();
|
126 | 1e827d67 | Kostas Papadimitriou | entry.addClass("error");
|
127 | 1e827d67 | Kostas Papadimitriou | entry.find("input").attr("disabled", false); |
128 | 1e827d67 | Kostas Papadimitriou | }, |
129 | 1e827d67 | Kostas Papadimitriou | |
130 | 1e827d67 | Kostas Papadimitriou | get_entry_data: function(entry) { |
131 | 1e827d67 | Kostas Papadimitriou | var data = {name: entry.find("input.name").val(), email:entry.find("input.email").val()}; |
132 | 1e827d67 | Kostas Papadimitriou | return data;
|
133 | 1e827d67 | Kostas Papadimitriou | }, |
134 | 1e827d67 | Kostas Papadimitriou | |
135 | 1e827d67 | Kostas Papadimitriou | entry_is_valid: function(entry) { |
136 | 1e827d67 | Kostas Papadimitriou | var data = this.get_entry_data(entry); |
137 | 1e827d67 | Kostas Papadimitriou | |
138 | 123fd2f5 | Kostas Papadimitriou | if (data.name == "" && data.email == "") { |
139 | 123fd2f5 | Kostas Papadimitriou | return false; |
140 | 123fd2f5 | Kostas Papadimitriou | } |
141 | 123fd2f5 | Kostas Papadimitriou | |
142 | 1e827d67 | Kostas Papadimitriou | entry.find(".send-error").hide();
|
143 | 1e827d67 | Kostas Papadimitriou | entry.removeClass("error");
|
144 | 1e827d67 | Kostas Papadimitriou | entry.find("input").removeClass("has-errors"); |
145 | 1e827d67 | Kostas Papadimitriou | |
146 | 1e827d67 | Kostas Papadimitriou | error = false;
|
147 | 1e827d67 | Kostas Papadimitriou | if (!data.name || data.name.split(" ").length == 1) { |
148 | 1e827d67 | Kostas Papadimitriou | error = "Invalid name";
|
149 | 1e827d67 | Kostas Papadimitriou | entry.find("input.name").addClass("has-errors"); |
150 | 123fd2f5 | Kostas Papadimitriou | entry.find("input.name").focus();
|
151 | 1e827d67 | Kostas Papadimitriou | } |
152 | 1e827d67 | Kostas Papadimitriou | |
153 | 1e827d67 | Kostas Papadimitriou | var reg = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/; |
154 | 1e827d67 | Kostas Papadimitriou | if (!data.email || reg.test(data.email) == false) { |
155 | 1e827d67 | Kostas Papadimitriou | error = "Invalid email";
|
156 | 1e827d67 | Kostas Papadimitriou | entry.find("input.email").addClass("has-errors"); |
157 | 123fd2f5 | Kostas Papadimitriou | entry.find("input.email").focus();
|
158 | 1e827d67 | Kostas Papadimitriou | } |
159 | 1e827d67 | Kostas Papadimitriou | |
160 | 1e827d67 | Kostas Papadimitriou | if (error) { this.show_entry_error(entry, error) }; |
161 | 1e827d67 | Kostas Papadimitriou | return error
|
162 | 1e827d67 | Kostas Papadimitriou | }, |
163 | 1e827d67 | Kostas Papadimitriou | |
164 | 1e827d67 | Kostas Papadimitriou | send_entries: function() { |
165 | 1e827d67 | Kostas Papadimitriou | var self = this; |
166 | 1e827d67 | Kostas Papadimitriou | this.form_entries.find(".form-entry").each(function(index, el) { self.entry_is_valid($(el)) }); |
167 | 1e827d67 | Kostas Papadimitriou | var entries_to_send = this.form_entries.find(".form-entry:not(.error):not(.sending)"); |
168 | 123fd2f5 | Kostas Papadimitriou | |
169 | 123fd2f5 | Kostas Papadimitriou | entries = _.filter(entries_to_send, function(e){
|
170 | 123fd2f5 | Kostas Papadimitriou | var data = self.get_entry_data($(e)); |
171 | 123fd2f5 | Kostas Papadimitriou | if (data.name == "" && data.email == "") { |
172 | 123fd2f5 | Kostas Papadimitriou | return false; |
173 | 123fd2f5 | Kostas Papadimitriou | } |
174 | 123fd2f5 | Kostas Papadimitriou | return true; |
175 | 123fd2f5 | Kostas Papadimitriou | }) |
176 | 123fd2f5 | Kostas Papadimitriou | this._send_entries(entries);
|
177 | 1e827d67 | Kostas Papadimitriou | }, |
178 | 1e827d67 | Kostas Papadimitriou | |
179 | 1e827d67 | Kostas Papadimitriou | _send_entries: function(entries) { |
180 | 1e827d67 | Kostas Papadimitriou | $(entries).addClass("sending").find("input").attr("disabled", true); |
181 | 1e827d67 | Kostas Papadimitriou | var self = this; |
182 | 1e827d67 | Kostas Papadimitriou | _.each(entries, function(e) {
|
183 | 1e827d67 | Kostas Papadimitriou | var e = $(e); |
184 | 1e827d67 | Kostas Papadimitriou | var data = self.get_entry_data(e);
|
185 | 1e827d67 | Kostas Papadimitriou | self.send_invitation(data.name, |
186 | 1e827d67 | Kostas Papadimitriou | data.email, |
187 | 1e827d67 | Kostas Papadimitriou | _.bind(self.invitation_send, this, e),
|
188 | 1e827d67 | Kostas Papadimitriou | _.bind(self.invitation_failed, this, e));
|
189 | 1e827d67 | Kostas Papadimitriou | }); |
190 | 1e827d67 | Kostas Papadimitriou | }, |
191 | 1e827d67 | Kostas Papadimitriou | |
192 | 1e827d67 | Kostas Papadimitriou | invitation_send: function(entry, data) { |
193 | 1e827d67 | Kostas Papadimitriou | entry.removeClass("sending");
|
194 | 123fd2f5 | Kostas Papadimitriou | if (data.errors && data.errors.length > 0) { |
195 | 123fd2f5 | Kostas Papadimitriou | this.show_entry_error($(entry), data.errors[0].msg); |
196 | 1e827d67 | Kostas Papadimitriou | return;
|
197 | 1e827d67 | Kostas Papadimitriou | } else {
|
198 | 1e827d67 | Kostas Papadimitriou | entry.remove(); |
199 | 1e827d67 | Kostas Papadimitriou | this.show_send_success(entry.find("input.name").val(), data); |
200 | 1e827d67 | Kostas Papadimitriou | } |
201 | 1e827d67 | Kostas Papadimitriou | }, |
202 | 1e827d67 | Kostas Papadimitriou | |
203 | 1e827d67 | Kostas Papadimitriou | show_send_success: function(to, data) { |
204 | 123fd2f5 | Kostas Papadimitriou | var msg = 'Invitation to <span class="email">' + to + '</span> was sent.'; |
205 | 1e827d67 | Kostas Papadimitriou | var msg_el = $('<div class="msg">{0}</div>'.format(msg)); |
206 | 1e827d67 | Kostas Papadimitriou | |
207 | 1e827d67 | Kostas Papadimitriou | this.top_info.append(msg_el);
|
208 | 1e827d67 | Kostas Papadimitriou | |
209 | 1e827d67 | Kostas Papadimitriou | window.setTimeout(function(){
|
210 | 1e827d67 | Kostas Papadimitriou | msg_el.fadeOut(600, function(){$(this).remove()}); |
211 | 123fd2f5 | Kostas Papadimitriou | }, 5000);
|
212 | 1e827d67 | Kostas Papadimitriou | |
213 | 1e827d67 | Kostas Papadimitriou | this.fix_entries();
|
214 | 1e827d67 | Kostas Papadimitriou | this.reset_invitations_sent();
|
215 | 1e827d67 | Kostas Papadimitriou | }, |
216 | 1e827d67 | Kostas Papadimitriou | |
217 | 1e827d67 | Kostas Papadimitriou | invitation_failed: function(entry) { |
218 | 1e827d67 | Kostas Papadimitriou | entry.removeClass("sending");
|
219 | 1e827d67 | Kostas Papadimitriou | this.show_entry_error(entry, "Cannot send email, please try again later"); |
220 | 1e827d67 | Kostas Papadimitriou | }, |
221 | 1e827d67 | Kostas Papadimitriou | |
222 | 1e827d67 | Kostas Papadimitriou | send_invitation: function(name, email, success, fail) { |
223 | 1e827d67 | Kostas Papadimitriou | var url = snf.config.invitations_url;
|
224 | 1e827d67 | Kostas Papadimitriou | var payload = {name_1: name, email_1: email, csrftoken: $.cookie('csrftoken')}; |
225 | 1e827d67 | Kostas Papadimitriou | params = { |
226 | 1e827d67 | Kostas Papadimitriou | success: success,
|
227 | 1e827d67 | Kostas Papadimitriou | error: fail,
|
228 | 1e827d67 | Kostas Papadimitriou | url: url,
|
229 | 1e827d67 | Kostas Papadimitriou | data: $.param(payload), |
230 | 1e827d67 | Kostas Papadimitriou | skip_api_error: true |
231 | 1e827d67 | Kostas Papadimitriou | } |
232 | 1e827d67 | Kostas Papadimitriou | snf.api.sync("create", undefined, params); |
233 | 1e827d67 | Kostas Papadimitriou | }, |
234 | 1e827d67 | Kostas Papadimitriou | |
235 | 1e827d67 | Kostas Papadimitriou | get_entries: function() { |
236 | 1e827d67 | Kostas Papadimitriou | return this.form_entries.find(".form-entry"); |
237 | 1e827d67 | Kostas Papadimitriou | }, |
238 | 1e827d67 | Kostas Papadimitriou | |
239 | 1e827d67 | Kostas Papadimitriou | fix_entries: function() { |
240 | 1e827d67 | Kostas Papadimitriou | this.$(".remove-invitation").hide(); |
241 | 1e827d67 | Kostas Papadimitriou | if (this.get_entries().length == 0) { |
242 | 1e827d67 | Kostas Papadimitriou | this.add_new_entry();
|
243 | 123fd2f5 | Kostas Papadimitriou | this.add_new_entry();
|
244 | 1e827d67 | Kostas Papadimitriou | } |
245 | 1e827d67 | Kostas Papadimitriou | |
246 | 1e827d67 | Kostas Papadimitriou | if (this.get_entries().length > 1) { |
247 | 1e827d67 | Kostas Papadimitriou | this.$(".remove-invitation").show(); |
248 | 1e827d67 | Kostas Papadimitriou | } |
249 | 1e827d67 | Kostas Papadimitriou | this.$(".form-entry:first-child label").show(); |
250 | 1e827d67 | Kostas Papadimitriou | this.$(".form-entry:not(:first-child) label").hide(); |
251 | 1e827d67 | Kostas Papadimitriou | }, |
252 | 123fd2f5 | Kostas Papadimitriou | |
253 | 1e827d67 | Kostas Papadimitriou | show: function() { |
254 | 1e827d67 | Kostas Papadimitriou | views.InvitationsView.__super__.show.apply(this, arguments); |
255 | 1e827d67 | Kostas Papadimitriou | this.current_page = 0; |
256 | 123fd2f5 | Kostas Papadimitriou | this.reset_sent();
|
257 | 1e827d67 | Kostas Papadimitriou | this.reset();
|
258 | 1e827d67 | Kostas Papadimitriou | |
259 | 1e827d67 | Kostas Papadimitriou | this.add_new_entry();
|
260 | 1e827d67 | Kostas Papadimitriou | this.add_new_entry();
|
261 | 123fd2f5 | Kostas Papadimitriou | |
262 | 123fd2f5 | Kostas Papadimitriou | if (this.invitations_retrieved) { |
263 | 123fd2f5 | Kostas Papadimitriou | this.loading_invitations.hide();
|
264 | 123fd2f5 | Kostas Papadimitriou | } |
265 | 123fd2f5 | Kostas Papadimitriou | }, |
266 | 123fd2f5 | Kostas Papadimitriou | |
267 | 123fd2f5 | Kostas Papadimitriou | reset_sent: function() { |
268 | 123fd2f5 | Kostas Papadimitriou | this.reset_invitations_sent();
|
269 | 123fd2f5 | Kostas Papadimitriou | this.add_invitations_sent([]);
|
270 | 1e827d67 | Kostas Papadimitriou | }, |
271 | 1e827d67 | Kostas Papadimitriou | |
272 | 1e827d67 | Kostas Papadimitriou | create_form_entry: function() { |
273 | 1e827d67 | Kostas Papadimitriou | return this.entry_tpl.clone().removeClass("form-entry-tpl").addClass("form-entry").removeClass("hidden"); |
274 | 1e827d67 | Kostas Papadimitriou | }, |
275 | 1e827d67 | Kostas Papadimitriou | |
276 | 1e827d67 | Kostas Papadimitriou | reset: function() { |
277 | 1e827d67 | Kostas Papadimitriou | this.get_entries().remove();
|
278 | 1e827d67 | Kostas Papadimitriou | this.add_new_entry();
|
279 | 1e827d67 | Kostas Papadimitriou | }, |
280 | 1e827d67 | Kostas Papadimitriou | |
281 | 1e827d67 | Kostas Papadimitriou | new_invitation_sent_el: function() { |
282 | 1e827d67 | Kostas Papadimitriou | return this.sent_tpl.clone().removeClass("invitation-sent-tpl").addClass("invitation-sent"); |
283 | 1e827d67 | Kostas Papadimitriou | }, |
284 | 1e827d67 | Kostas Papadimitriou | |
285 | 1e827d67 | Kostas Papadimitriou | show_invitations_sent_error: function() { |
286 | 1e827d67 | Kostas Papadimitriou | this.sent.hide();
|
287 | 1e827d67 | Kostas Papadimitriou | this.$(".invitations-sent-error").show(); |
288 | 1e827d67 | Kostas Papadimitriou | }, |
289 | 1e827d67 | Kostas Papadimitriou | |
290 | 1e827d67 | Kostas Papadimitriou | reset_invitations_sent: function() { |
291 | 1e827d67 | Kostas Papadimitriou | var self = this; |
292 | 1e827d67 | Kostas Papadimitriou | var url = snf.config.invitations_url;
|
293 | 1e827d67 | Kostas Papadimitriou | params = { |
294 | 1e827d67 | Kostas Papadimitriou | success: function(data) { |
295 | 123fd2f5 | Kostas Papadimitriou | self.invitations_retrieved = true;
|
296 | 123fd2f5 | Kostas Papadimitriou | self.loading_invitations.hide(); |
297 | 123fd2f5 | Kostas Papadimitriou | |
298 | 1e827d67 | Kostas Papadimitriou | if (!data || !data.invitations) {
|
299 | 1e827d67 | Kostas Papadimitriou | self.show_invitations_sent_error(); |
300 | 1e827d67 | Kostas Papadimitriou | } else {
|
301 | 1e827d67 | Kostas Papadimitriou | self.sent.empty(); |
302 | 1e827d67 | Kostas Papadimitriou | self.add_invitations_sent(data.invitations); |
303 | 1e827d67 | Kostas Papadimitriou | } |
304 | 1e827d67 | Kostas Papadimitriou | |
305 | 1e827d67 | Kostas Papadimitriou | //data.invitations_left = 0;
|
306 | 1e827d67 | Kostas Papadimitriou | self.$(".description .left").text(data.invitations_left); |
307 | 1e827d67 | Kostas Papadimitriou | if(data.invitations_left > 0) { |
308 | 1e827d67 | Kostas Papadimitriou | self.$(".invitations-form").show(); |
309 | 1e827d67 | Kostas Papadimitriou | self.$(".description .left").removeClass("none"); |
310 | 1e827d67 | Kostas Papadimitriou | self.el.removeClass("none-left");
|
311 | 1e827d67 | Kostas Papadimitriou | } else {
|
312 | 1e827d67 | Kostas Papadimitriou | self.$(".invitations-form").hide(); |
313 | 1e827d67 | Kostas Papadimitriou | self.$(".description .left").addClass("none"); |
314 | 1e827d67 | Kostas Papadimitriou | self.el.addClass("none-left");
|
315 | 1e827d67 | Kostas Papadimitriou | } |
316 | 1e827d67 | Kostas Papadimitriou | }, |
317 | 1e827d67 | Kostas Papadimitriou | error: _.bind(this.show_invitations_sent_error, this), |
318 | 1e827d67 | Kostas Papadimitriou | url: url,
|
319 | 1e827d67 | Kostas Papadimitriou | skip_api_error: true |
320 | 1e827d67 | Kostas Papadimitriou | } |
321 | 1e827d67 | Kostas Papadimitriou | |
322 | 1e827d67 | Kostas Papadimitriou | snf.api.sync("read", undefined, params); |
323 | 1e827d67 | Kostas Papadimitriou | }, |
324 | 123fd2f5 | Kostas Papadimitriou | |
325 | 123fd2f5 | Kostas Papadimitriou | resend_succeed: function(inv, el) { |
326 | 123fd2f5 | Kostas Papadimitriou | el.find(".status.sent").removeClass("hidden").hide(); |
327 | 123fd2f5 | Kostas Papadimitriou | el.find(".status.resend").removeClass("hidden").show(); |
328 | 123fd2f5 | Kostas Papadimitriou | el.find(".status.sending").removeClass("hidden").hide(); |
329 | 123fd2f5 | Kostas Papadimitriou | |
330 | 123fd2f5 | Kostas Papadimitriou | var msg = $('<div class="msg success">Invitation has been resent to <span class="email">{0}</span>.</div>'.format(inv.target)); |
331 | 123fd2f5 | Kostas Papadimitriou | this.$(".resent-info").append(msg); |
332 | 123fd2f5 | Kostas Papadimitriou | setTimeout(function(){ $(msg).fadeOut(600)}, 5000); |
333 | 123fd2f5 | Kostas Papadimitriou | }, |
334 | 123fd2f5 | Kostas Papadimitriou | |
335 | 123fd2f5 | Kostas Papadimitriou | resend_failed: function(inv, el) { |
336 | 123fd2f5 | Kostas Papadimitriou | el.find(".status.sent").removeClass("hidden").hide(); |
337 | 123fd2f5 | Kostas Papadimitriou | el.find(".status.resend").removeClass("hidden").show(); |
338 | 123fd2f5 | Kostas Papadimitriou | el.find(".status.sending").removeClass("hidden").hide(); |
339 | 123fd2f5 | Kostas Papadimitriou | |
340 | 123fd2f5 | Kostas Papadimitriou | var msg = $('<div class="msg err-msg">Resend to <span class="email">{0}</span> failed.</div>'.format(inv.target)); |
341 | 123fd2f5 | Kostas Papadimitriou | this.$(".resent-info").append(msg); |
342 | 123fd2f5 | Kostas Papadimitriou | setTimeout(function(){ $(msg).fadeOut(600)}, 5000); |
343 | 123fd2f5 | Kostas Papadimitriou | }, |
344 | 123fd2f5 | Kostas Papadimitriou | |
345 | 123fd2f5 | Kostas Papadimitriou | resend_invitation: function(id, el, inv) { |
346 | 123fd2f5 | Kostas Papadimitriou | var self = this; |
347 | 123fd2f5 | Kostas Papadimitriou | var inv = inv;
|
348 | 123fd2f5 | Kostas Papadimitriou | var id = id;
|
349 | 123fd2f5 | Kostas Papadimitriou | var el = el;
|
350 | 123fd2f5 | Kostas Papadimitriou | |
351 | 123fd2f5 | Kostas Papadimitriou | el.find(".status.sent").removeClass("hidden").hide(); |
352 | 123fd2f5 | Kostas Papadimitriou | el.find(".status.resend").removeClass("hidden").hide(); |
353 | 123fd2f5 | Kostas Papadimitriou | el.find(".status.sending").removeClass("hidden").show(); |
354 | 123fd2f5 | Kostas Papadimitriou | |
355 | 123fd2f5 | Kostas Papadimitriou | var url = snf.config.invitations_url + "/resend/"; |
356 | 123fd2f5 | Kostas Papadimitriou | var payload = "invid=" + id; |
357 | 123fd2f5 | Kostas Papadimitriou | params = { |
358 | 123fd2f5 | Kostas Papadimitriou | success: function(data) { |
359 | 123fd2f5 | Kostas Papadimitriou | self.resend_succeed(inv, el); |
360 | 123fd2f5 | Kostas Papadimitriou | }, |
361 | 123fd2f5 | Kostas Papadimitriou | error: function() { |
362 | 123fd2f5 | Kostas Papadimitriou | self.resend_failed(inv, el); |
363 | 123fd2f5 | Kostas Papadimitriou | }, |
364 | 123fd2f5 | Kostas Papadimitriou | data: payload,
|
365 | 123fd2f5 | Kostas Papadimitriou | url: url,
|
366 | 123fd2f5 | Kostas Papadimitriou | skip_api_error: true |
367 | 123fd2f5 | Kostas Papadimitriou | } |
368 | 123fd2f5 | Kostas Papadimitriou | |
369 | 123fd2f5 | Kostas Papadimitriou | snf.api.sync("create", undefined, params); |
370 | 123fd2f5 | Kostas Papadimitriou | }, |
371 | 1e827d67 | Kostas Papadimitriou | |
372 | 1e827d67 | Kostas Papadimitriou | add_invitations_sent: function(invs) { |
373 | 123fd2f5 | Kostas Papadimitriou | var self = this; |
374 | 1e827d67 | Kostas Papadimitriou | _.each(invs, _.bind(function(inv) {
|
375 | 1e827d67 | Kostas Papadimitriou | var el = this.new_invitation_sent_el(); |
376 | 123fd2f5 | Kostas Papadimitriou | var invitation = inv;
|
377 | 123fd2f5 | Kostas Papadimitriou | |
378 | 1e827d67 | Kostas Papadimitriou | el.find(".name").text(inv.targetname);
|
379 | 1e827d67 | Kostas Papadimitriou | el.find(".email").text(inv.target);
|
380 | 123fd2f5 | Kostas Papadimitriou | |
381 | 123fd2f5 | Kostas Papadimitriou | el.find(".status.sent").removeClass("hidden").show(); |
382 | 123fd2f5 | Kostas Papadimitriou | el.find(".status.resend").removeClass("hidden").hide(); |
383 | 123fd2f5 | Kostas Papadimitriou | el.find(".status.sending").removeClass("hidden").hide(); |
384 | 123fd2f5 | Kostas Papadimitriou | |
385 | 1e827d67 | Kostas Papadimitriou | if (!inv.accepted) {
|
386 | 123fd2f5 | Kostas Papadimitriou | el.find(".status.resend").show();
|
387 | 123fd2f5 | Kostas Papadimitriou | el.find(".status.sent").hide();
|
388 | 123fd2f5 | Kostas Papadimitriou | el.find(".status.sending").hide();
|
389 | 1e827d67 | Kostas Papadimitriou | } |
390 | 123fd2f5 | Kostas Papadimitriou | |
391 | 123fd2f5 | Kostas Papadimitriou | el.find(".status.resend").click(function(){ |
392 | 123fd2f5 | Kostas Papadimitriou | self.resend_invitation(invitation.id, el, invitation); |
393 | 123fd2f5 | Kostas Papadimitriou | }) |
394 | 123fd2f5 | Kostas Papadimitriou | |
395 | 1e827d67 | Kostas Papadimitriou | el.removeClass("hidden");
|
396 | 1e827d67 | Kostas Papadimitriou | this.sent.append(el);
|
397 | 1e827d67 | Kostas Papadimitriou | }, this));
|
398 | 1e827d67 | Kostas Papadimitriou | this.update_pagination();
|
399 | 1e827d67 | Kostas Papadimitriou | this.sent_pages.trigger("setPage", this.current_page || 0); |
400 | 1e827d67 | Kostas Papadimitriou | }, |
401 | 123fd2f5 | Kostas Papadimitriou | |
402 | 123fd2f5 | Kostas Papadimitriou | onOpen: function() { |
403 | 123fd2f5 | Kostas Papadimitriou | views.InvitationsView.__super__.onOpen.apply(this, arguments); |
404 | 123fd2f5 | Kostas Papadimitriou | setTimeout(function(){$(this.$("input.name:visible").get(0)).focus()}, 100); |
405 | 123fd2f5 | Kostas Papadimitriou | }, |
406 | 1e827d67 | Kostas Papadimitriou | |
407 | 1e827d67 | Kostas Papadimitriou | inv_sent_per_page: 5, |
408 | 1e827d67 | Kostas Papadimitriou | update_pagination: function() { |
409 | 1e827d67 | Kostas Papadimitriou | this.sent.css({minHeight:this.inv_sent_per_page * 35 + "px"}) |
410 | 123fd2f5 | Kostas Papadimitriou | this.sent_pages.pagination(this.sent.children().length, |
411 | 123fd2f5 | Kostas Papadimitriou | {items_per_page:this.inv_sent_per_page, callback: this.page_cb}); |
412 | 1e827d67 | Kostas Papadimitriou | }, |
413 | 1e827d67 | Kostas Papadimitriou | |
414 | 1e827d67 | Kostas Papadimitriou | page_cb: function(index, pager) { |
415 | 1e827d67 | Kostas Papadimitriou | this.current_page = index;
|
416 | 1e827d67 | Kostas Papadimitriou | var start = index * this.inv_sent_per_page; |
417 | 1e827d67 | Kostas Papadimitriou | var end = start + this.inv_sent_per_page -1; |
418 | 1e827d67 | Kostas Papadimitriou | var items = this.sent.children(); |
419 | 1e827d67 | Kostas Papadimitriou | items.hide().removeClass("last");
|
420 | 1e827d67 | Kostas Papadimitriou | for (var i = start; i<=end; i++) { |
421 | 1e827d67 | Kostas Papadimitriou | $(items.get(i)).show();
|
422 | 1e827d67 | Kostas Papadimitriou | } |
423 | 1e827d67 | Kostas Papadimitriou | $(items.get(end)).addClass("last"); |
424 | 1e827d67 | Kostas Papadimitriou | return false; |
425 | 1e827d67 | Kostas Papadimitriou | } |
426 | 1e827d67 | Kostas Papadimitriou | |
427 | 1e827d67 | Kostas Papadimitriou | }); |
428 | 1e827d67 | Kostas Papadimitriou | })(this);
|