root / snf-app / synnefo / ui / static / snf / js / ui / web / ui_public_keys_view.js @ 483c9197
History | View | Annotate | Download (11.2 kB)
1 | e9392f3c | Kostas Papadimitriou | ;(function(root){
|
---|---|---|---|
2 | e9392f3c | Kostas Papadimitriou | |
3 | e9392f3c | Kostas Papadimitriou | // root
|
4 | e9392f3c | Kostas Papadimitriou | var root = root;
|
5 | e9392f3c | Kostas Papadimitriou | |
6 | e9392f3c | Kostas Papadimitriou | // setup namepsaces
|
7 | e9392f3c | Kostas Papadimitriou | var snf = root.synnefo = root.synnefo || {};
|
8 | e9392f3c | Kostas Papadimitriou | var api = snf.api = snf.api || {};
|
9 | e9392f3c | Kostas Papadimitriou | var models = snf.models = snf.models || {}
|
10 | e9392f3c | Kostas Papadimitriou | var storage = snf.storage = snf.storage || {};
|
11 | e9392f3c | Kostas Papadimitriou | var ui = snf.ui = snf.ui || {};
|
12 | e9392f3c | Kostas Papadimitriou | var util = snf.util = snf.util || {};
|
13 | e9392f3c | Kostas Papadimitriou | |
14 | e9392f3c | Kostas Papadimitriou | var views = snf.views = snf.views || {}
|
15 | e9392f3c | Kostas Papadimitriou | |
16 | e9392f3c | Kostas Papadimitriou | // shortcuts
|
17 | e9392f3c | Kostas Papadimitriou | var bb = root.Backbone;
|
18 | e9392f3c | Kostas Papadimitriou | |
19 | e9392f3c | Kostas Papadimitriou | views.PublicKeysView = views.CollectionView.extend({ |
20 | e9392f3c | Kostas Papadimitriou | collection: storage.keys,
|
21 | e9392f3c | Kostas Papadimitriou | |
22 | 3b214560 | Kostas Papadimitriou | confirm_delete_msg: 'Are you sure you want to remove this key ?', |
23 | 3b214560 | Kostas Papadimitriou | create_success_msg: 'Public key created successfully.', |
24 | ff44c486 | Kostas Papadimitriou | update_success_msg: 'Public key updated successfully.', |
25 | 3b214560 | Kostas Papadimitriou | create_failed_msg: 'Failed to create public key.', |
26 | 3b214560 | Kostas Papadimitriou | |
27 | c72a830d | Kostas Papadimitriou | |
28 | e9392f3c | Kostas Papadimitriou | initialize: function(options) { |
29 | e9392f3c | Kostas Papadimitriou | views.PublicKeysView.__super__.initialize.apply(this, arguments); |
30 | e9392f3c | Kostas Papadimitriou | this.$(".private-cont").hide(); |
31 | e9392f3c | Kostas Papadimitriou | _.bindAll(this);
|
32 | c72a830d | Kostas Papadimitriou | this.keys_limit = snf.config.userdata_keys_limit || 10000; |
33 | c26afad6 | Kostas Papadimitriou | this.bind("item:add", this.animate_on_add); |
34 | c26afad6 | Kostas Papadimitriou | }, |
35 | c26afad6 | Kostas Papadimitriou | |
36 | c26afad6 | Kostas Papadimitriou | animate_on_add: function(list, el, model) { |
37 | c26afad6 | Kostas Papadimitriou | el.hide(); |
38 | c26afad6 | Kostas Papadimitriou | el.fadeIn(400);
|
39 | e9392f3c | Kostas Papadimitriou | }, |
40 | e9392f3c | Kostas Papadimitriou | |
41 | e9392f3c | Kostas Papadimitriou | append_actions: function(el, model) { |
42 | e9392f3c | Kostas Papadimitriou | var actions = $('<div class="item-actions">' + |
43 | e9392f3c | Kostas Papadimitriou | '<div class="item-action remove">remove</div>' +
|
44 | e9392f3c | Kostas Papadimitriou | '<div class="item-action confirm-remove">' +
|
45 | e9392f3c | Kostas Papadimitriou | '<span class="text do-confirm">confirm</span>' +
|
46 | e9392f3c | Kostas Papadimitriou | '<span class="cancel-remove cancel">X</span></div>' +
|
47 | e9392f3c | Kostas Papadimitriou | '<div class="item-action edit">edit</div>' +
|
48 | e9392f3c | Kostas Papadimitriou | '<div class="item-action show">show key</div>' +
|
49 | e9392f3c | Kostas Papadimitriou | '</div>');
|
50 | e9392f3c | Kostas Papadimitriou | el.append(actions); |
51 | e9392f3c | Kostas Papadimitriou | }, |
52 | 556dcd88 | Kostas Papadimitriou | |
53 | 556dcd88 | Kostas Papadimitriou | close_private: function() { |
54 | 556dcd88 | Kostas Papadimitriou | this.$(".private-cont").hide(); |
55 | 556dcd88 | Kostas Papadimitriou | this.$(".private-cont textarea").val(""); |
56 | 556dcd88 | Kostas Papadimitriou | this.$('.private-cont [name=data]').val(""); |
57 | 556dcd88 | Kostas Papadimitriou | this.$('.private-cont [name=name]').val(""); |
58 | 556dcd88 | Kostas Papadimitriou | }, |
59 | e9392f3c | Kostas Papadimitriou | |
60 | e9392f3c | Kostas Papadimitriou | init_handlers: function() { |
61 | e9392f3c | Kostas Papadimitriou | views.PublicKeysView.__super__.init_handlers.apply(this, arguments); |
62 | e9392f3c | Kostas Papadimitriou | |
63 | e9392f3c | Kostas Papadimitriou | this.$(".add-generate").click(_.bind(this.generate_new, this, undefined)); |
64 | e9392f3c | Kostas Papadimitriou | |
65 | e9392f3c | Kostas Papadimitriou | // browser compat check
|
66 | e9392f3c | Kostas Papadimitriou | if (snf.util.canReadFile()) {
|
67 | e9392f3c | Kostas Papadimitriou | var self = this; |
68 | e9392f3c | Kostas Papadimitriou | this.form.find(".fromfile").get(0).addEventListener("change", function(e){ |
69 | e9392f3c | Kostas Papadimitriou | var f = undefined; |
70 | e9392f3c | Kostas Papadimitriou | var files = e.target.files;
|
71 | e9392f3c | Kostas Papadimitriou | if (files.length == 0) { return }; |
72 | e9392f3c | Kostas Papadimitriou | |
73 | e9392f3c | Kostas Papadimitriou | f = files[0];
|
74 | e9392f3c | Kostas Papadimitriou | var data = snf.util.readFileContents(f, _.bind(function(data) { |
75 | e9392f3c | Kostas Papadimitriou | this.form.find("textarea").val(data); |
76 | e9392f3c | Kostas Papadimitriou | }, self)); |
77 | e9392f3c | Kostas Papadimitriou | }); |
78 | e9392f3c | Kostas Papadimitriou | } |
79 | e9392f3c | Kostas Papadimitriou | |
80 | e9392f3c | Kostas Papadimitriou | var self = this; |
81 | e9392f3c | Kostas Papadimitriou | this.$(".private-cont .close-private").live("click", function(e) { |
82 | 556dcd88 | Kostas Papadimitriou | self.close_private(); |
83 | e9392f3c | Kostas Papadimitriou | }); |
84 | e9392f3c | Kostas Papadimitriou | |
85 | e9392f3c | Kostas Papadimitriou | this.$(".item-action.show, .item-action.hide").live("click", function(e) { |
86 | e9392f3c | Kostas Papadimitriou | var open = $(this).parent().parent().parent().hasClass("expanded"); |
87 | e9392f3c | Kostas Papadimitriou | if (open) {
|
88 | e9392f3c | Kostas Papadimitriou | $(this).text("show key"); |
89 | e9392f3c | Kostas Papadimitriou | $(this).addClass("show").removeClass("hide"); |
90 | e9392f3c | Kostas Papadimitriou | } else {
|
91 | e9392f3c | Kostas Papadimitriou | $(this).text("hide key"); |
92 | e9392f3c | Kostas Papadimitriou | $(this).removeClass("show").addClass("hide"); |
93 | e9392f3c | Kostas Papadimitriou | } |
94 | e9392f3c | Kostas Papadimitriou | $(this).parent().parent().parent().toggleClass("expanded"); |
95 | e9392f3c | Kostas Papadimitriou | }); |
96 | e9392f3c | Kostas Papadimitriou | }, |
97 | e9392f3c | Kostas Papadimitriou | |
98 | 556dcd88 | Kostas Papadimitriou | __save_new: function(generate_text, key) { |
99 | e9392f3c | Kostas Papadimitriou | var self = this; |
100 | 556dcd88 | Kostas Papadimitriou | storage.keys.add_crypto_key(key.public,
|
101 | e9392f3c | Kostas Papadimitriou | _.bind(function(instance, data) {
|
102 | e9392f3c | Kostas Papadimitriou | self.update_models(); |
103 | e9392f3c | Kostas Papadimitriou | this.generating = false; |
104 | e9392f3c | Kostas Papadimitriou | this.$(".add-generate").text(generate_text).removeClass( |
105 | e9392f3c | Kostas Papadimitriou | "in-progress").addClass("download"); |
106 | 556dcd88 | Kostas Papadimitriou | this.show_download_private(instance.get('name'), key.private, instance); |
107 | c1c836ec | Kostas Papadimitriou | this.enable_create();
|
108 | e9392f3c | Kostas Papadimitriou | },this),
|
109 | e9392f3c | Kostas Papadimitriou | |
110 | e9392f3c | Kostas Papadimitriou | _.bind(function() {
|
111 | e9392f3c | Kostas Papadimitriou | self.show_list_msg("error", "Cannot generate public key, please try again later."); |
112 | e9392f3c | Kostas Papadimitriou | |
113 | e9392f3c | Kostas Papadimitriou | this.generating = false; |
114 | e9392f3c | Kostas Papadimitriou | this.download_private = false; |
115 | e9392f3c | Kostas Papadimitriou | |
116 | e9392f3c | Kostas Papadimitriou | this.$(".add-generate").text(generate_text).removeClass("in-progress").removeClass("download"); |
117 | c1c836ec | Kostas Papadimitriou | this.enable_create();
|
118 | e9392f3c | Kostas Papadimitriou | }, this)
|
119 | e9392f3c | Kostas Papadimitriou | ); |
120 | e9392f3c | Kostas Papadimitriou | }, |
121 | e9392f3c | Kostas Papadimitriou | |
122 | 556dcd88 | Kostas Papadimitriou | __generate_new: function(generate_text) { |
123 | 556dcd88 | Kostas Papadimitriou | var self = this; |
124 | c72a830d | Kostas Papadimitriou | var key = storage.keys.generate_new(_.bind(this.__save_new, this, generate_text), function(xhr){ |
125 | c72a830d | Kostas Papadimitriou | var resp_error = ""; |
126 | c72a830d | Kostas Papadimitriou | // try to parse response
|
127 | c72a830d | Kostas Papadimitriou | try {
|
128 | c72a830d | Kostas Papadimitriou | json_resp = JSON.parse(xhr.responseText); |
129 | c72a830d | Kostas Papadimitriou | resp_error = json_resp.errors[json_resp.non_field_key].join("<br />");
|
130 | c72a830d | Kostas Papadimitriou | } catch (err) {}
|
131 | c72a830d | Kostas Papadimitriou | |
132 | c72a830d | Kostas Papadimitriou | var msg = "Cannot generate new key pair"; |
133 | c72a830d | Kostas Papadimitriou | if (resp_error) {
|
134 | c72a830d | Kostas Papadimitriou | msg += " ({0})".format(resp_error);
|
135 | c72a830d | Kostas Papadimitriou | } |
136 | c72a830d | Kostas Papadimitriou | self.show_list_msg("error", msg);
|
137 | 556dcd88 | Kostas Papadimitriou | self.generating = false;
|
138 | 556dcd88 | Kostas Papadimitriou | self.download_private = false;
|
139 | 556dcd88 | Kostas Papadimitriou | self.$(".add-generate").text(generate_text).removeClass( |
140 | 556dcd88 | Kostas Papadimitriou | "in-progress").addClass("download"); |
141 | c1c836ec | Kostas Papadimitriou | self.enable_create(); |
142 | 556dcd88 | Kostas Papadimitriou | }); |
143 | 556dcd88 | Kostas Papadimitriou | }, |
144 | 556dcd88 | Kostas Papadimitriou | |
145 | e9392f3c | Kostas Papadimitriou | generate_new: function() { |
146 | e9392f3c | Kostas Papadimitriou | if (this.generating) { return false }; |
147 | c1c836ec | Kostas Papadimitriou | |
148 | e9392f3c | Kostas Papadimitriou | this.$(".private-cont").hide(); |
149 | e9392f3c | Kostas Papadimitriou | this.generating = true; |
150 | e9392f3c | Kostas Papadimitriou | this.download_private = false; |
151 | c1c836ec | Kostas Papadimitriou | this.disable_create();
|
152 | e9392f3c | Kostas Papadimitriou | var generate_text = this.$(".add-generate").text(); |
153 | e9392f3c | Kostas Papadimitriou | this.$(".add-generate").text("Generating...").addClass("in-progress").removeClass("download"); |
154 | e9392f3c | Kostas Papadimitriou | |
155 | e9392f3c | Kostas Papadimitriou | window.setTimeout(_.bind(this.__generate_new, this, generate_text), 400); |
156 | e9392f3c | Kostas Papadimitriou | |
157 | e9392f3c | Kostas Papadimitriou | }, |
158 | c1c836ec | Kostas Papadimitriou | |
159 | c1c836ec | Kostas Papadimitriou | disable_create: function() { |
160 | c1c836ec | Kostas Papadimitriou | this.create_disabled = true; |
161 | c1c836ec | Kostas Papadimitriou | this.$(".collection-action.add").addClass("disabled"); |
162 | c1c836ec | Kostas Papadimitriou | }, |
163 | c1c836ec | Kostas Papadimitriou | |
164 | c1c836ec | Kostas Papadimitriou | enable_create: function() { |
165 | c1c836ec | Kostas Papadimitriou | this.create_disabled = false; |
166 | c1c836ec | Kostas Papadimitriou | this.$(".collection-action.add").removeClass("disabled"); |
167 | c1c836ec | Kostas Papadimitriou | }, |
168 | e9392f3c | Kostas Papadimitriou | |
169 | 556dcd88 | Kostas Papadimitriou | show_download_private: function(name, private) { |
170 | e9392f3c | Kostas Papadimitriou | var download_cont = this.$(".private-cont"); |
171 | e9392f3c | Kostas Papadimitriou | download_cont.show(); |
172 | 556dcd88 | Kostas Papadimitriou | download_cont.find(".key-contents textarea").val(""); |
173 | 556dcd88 | Kostas Papadimitriou | download_cont.find(".private-msg, .down-button").show();
|
174 | 556dcd88 | Kostas Papadimitriou | download_cont.find(".private-msg.copy").hide();
|
175 | 556dcd88 | Kostas Papadimitriou | download_cont.find(".private-msg.download").hide();
|
176 | 556dcd88 | Kostas Papadimitriou | download_cont.find("textarea").hide();
|
177 | 556dcd88 | Kostas Papadimitriou | download_cont.find("form").attr({action: snf.config.userdata_keys_url + '/download'}) |
178 | 556dcd88 | Kostas Papadimitriou | download_cont.find('[name=data]').val(private); |
179 | 556dcd88 | Kostas Papadimitriou | download_cont.find('[name=name]').val(name);
|
180 | e9392f3c | Kostas Papadimitriou | }, |
181 | e9392f3c | Kostas Papadimitriou | |
182 | e9392f3c | Kostas Papadimitriou | update_list_item: function(el, model) { |
183 | e9392f3c | Kostas Papadimitriou | el.find(".name").text(model.get("name")); |
184 | e9392f3c | Kostas Papadimitriou | el.find(".key-type").text(model.identify_type() || "unknown"); |
185 | e9392f3c | Kostas Papadimitriou | el.find(".publicid .param-content textarea").val(model.get("content")); |
186 | 386481eb | Kostas Papadimitriou | el.find(".fingerprint .text").text(model.get("fingerprint")); |
187 | e9392f3c | Kostas Papadimitriou | el.find(".publicid").attr("title", _(model.get("content")).truncate(1000, "...")); |
188 | e9392f3c | Kostas Papadimitriou | return el;
|
189 | e9392f3c | Kostas Papadimitriou | }, |
190 | e9392f3c | Kostas Papadimitriou | |
191 | c72a830d | Kostas Papadimitriou | update_list: function() { |
192 | c72a830d | Kostas Papadimitriou | views.PublicKeysView.__super__.update_list.apply(this, arguments); |
193 | c72a830d | Kostas Papadimitriou | this.check_limit();
|
194 | c72a830d | Kostas Papadimitriou | }, |
195 | c72a830d | Kostas Papadimitriou | |
196 | c72a830d | Kostas Papadimitriou | check_limit: function() { |
197 | c72a830d | Kostas Papadimitriou | if (snf.storage.keys.length >= this.keys_limit) { |
198 | c72a830d | Kostas Papadimitriou | this.$(".collection-action").hide(); |
199 | c72a830d | Kostas Papadimitriou | this.$(".limit-msg").show(); |
200 | c72a830d | Kostas Papadimitriou | } else {
|
201 | c72a830d | Kostas Papadimitriou | this.$(".collection-action").show(); |
202 | c72a830d | Kostas Papadimitriou | this.$(".limit-msg").hide(); |
203 | c72a830d | Kostas Papadimitriou | } |
204 | c72a830d | Kostas Papadimitriou | }, |
205 | c72a830d | Kostas Papadimitriou | |
206 | e9392f3c | Kostas Papadimitriou | update_form_from_model: function(model) { |
207 | e9392f3c | Kostas Papadimitriou | this.form.find("input.input-name").val(model.get("name")); |
208 | e9392f3c | Kostas Papadimitriou | this.form.find("textarea.input-content").val(model.get("content")); |
209 | e9392f3c | Kostas Papadimitriou | }, |
210 | e9392f3c | Kostas Papadimitriou | |
211 | e9392f3c | Kostas Papadimitriou | get_form_data: function() { |
212 | e9392f3c | Kostas Papadimitriou | return {
|
213 | e9392f3c | Kostas Papadimitriou | 'name': this.form.find("input.input-name").val(), |
214 | e9392f3c | Kostas Papadimitriou | 'content': this.form.find("textarea.input-content").val() |
215 | e9392f3c | Kostas Papadimitriou | } |
216 | e9392f3c | Kostas Papadimitriou | }, |
217 | e9392f3c | Kostas Papadimitriou | |
218 | e9392f3c | Kostas Papadimitriou | get_fields_map: function() { |
219 | e9392f3c | Kostas Papadimitriou | return {'name': "input.input-name", 'content': "textarea.input-content"}; |
220 | e9392f3c | Kostas Papadimitriou | }, |
221 | e9392f3c | Kostas Papadimitriou | |
222 | e9392f3c | Kostas Papadimitriou | validate_data: function(data) { |
223 | e9392f3c | Kostas Papadimitriou | var user_data = _.clone(data)
|
224 | e9392f3c | Kostas Papadimitriou | var errors = new snf.util.errorList(); |
225 | e9392f3c | Kostas Papadimitriou | |
226 | e9392f3c | Kostas Papadimitriou | if (!data.name || _.clean(data.name) == "") { |
227 | e9392f3c | Kostas Papadimitriou | errors.add("name", "Provide a valid public key name"); |
228 | e9392f3c | Kostas Papadimitriou | } |
229 | e9392f3c | Kostas Papadimitriou | |
230 | e9392f3c | Kostas Papadimitriou | if (!data.content || _.clean(data.content) == "") { |
231 | e9392f3c | Kostas Papadimitriou | errors.add("content", "Provide valid public key content"); |
232 | e9392f3c | Kostas Papadimitriou | return errors;
|
233 | e9392f3c | Kostas Papadimitriou | } |
234 | e9392f3c | Kostas Papadimitriou | |
235 | e9392f3c | Kostas Papadimitriou | try {
|
236 | e9392f3c | Kostas Papadimitriou | var content = snf.util.validatePublicKey(data.content);
|
237 | e9392f3c | Kostas Papadimitriou | if (content) {
|
238 | e9392f3c | Kostas Papadimitriou | this.form.find("textarea.input-content").val(content); |
239 | e9392f3c | Kostas Papadimitriou | } |
240 | e9392f3c | Kostas Papadimitriou | } catch (err) {
|
241 | e9392f3c | Kostas Papadimitriou | errors.add("content", "Invalid key content (" + err + ")"); |
242 | e9392f3c | Kostas Papadimitriou | } |
243 | e9392f3c | Kostas Papadimitriou | |
244 | e9392f3c | Kostas Papadimitriou | return errors;
|
245 | e9392f3c | Kostas Papadimitriou | }, |
246 | e9392f3c | Kostas Papadimitriou | |
247 | e9392f3c | Kostas Papadimitriou | reset: function() { |
248 | e9392f3c | Kostas Papadimitriou | this.$(".private-cont").hide(); |
249 | e9392f3c | Kostas Papadimitriou | this.$(".list-messages").empty(); |
250 | e9392f3c | Kostas Papadimitriou | this.$(".form-messages").empty(); |
251 | e9392f3c | Kostas Papadimitriou | this.$(".model-item").removeClass("expanded"); |
252 | 556dcd88 | Kostas Papadimitriou | this.close_private();
|
253 | e9392f3c | Kostas Papadimitriou | this.close_form();
|
254 | e9392f3c | Kostas Papadimitriou | } |
255 | e9392f3c | Kostas Papadimitriou | |
256 | e9392f3c | Kostas Papadimitriou | }) |
257 | e9392f3c | Kostas Papadimitriou | |
258 | e9392f3c | Kostas Papadimitriou | views.PublicKeysOverlay = views.Overlay.extend({ |
259 | e9392f3c | Kostas Papadimitriou | |
260 | e9392f3c | Kostas Papadimitriou | view_id: "public_keys_view", |
261 | e9392f3c | Kostas Papadimitriou | content_selector: "#user_public_keys", |
262 | e9392f3c | Kostas Papadimitriou | css_class: 'overlay-public-keys overlay-info', |
263 | e9392f3c | Kostas Papadimitriou | overlay_id: "user_public_keys_overlay", |
264 | e9392f3c | Kostas Papadimitriou | |
265 | e9392f3c | Kostas Papadimitriou | title: "Manage your ssh keys", |
266 | e9392f3c | Kostas Papadimitriou | subtitle: "SSH keys", |
267 | e9392f3c | Kostas Papadimitriou | |
268 | e9392f3c | Kostas Papadimitriou | initialize: function(options) { |
269 | e9392f3c | Kostas Papadimitriou | views.PublicKeysOverlay.__super__.initialize.apply(this, arguments); |
270 | e9392f3c | Kostas Papadimitriou | this.subview = new views.PublicKeysView({el:this.$(".public-keys-view")}); |
271 | 47276ec2 | Kostas Papadimitriou | |
272 | 47276ec2 | Kostas Papadimitriou | var self = this; |
273 | 47276ec2 | Kostas Papadimitriou | this.$(".previous-view-link").live('click', function(){ |
274 | 47276ec2 | Kostas Papadimitriou | self.hide(); |
275 | 47276ec2 | Kostas Papadimitriou | }) |
276 | e9392f3c | Kostas Papadimitriou | }, |
277 | e9392f3c | Kostas Papadimitriou | |
278 | 47276ec2 | Kostas Papadimitriou | show: function(view) { |
279 | 47276ec2 | Kostas Papadimitriou | this.from_view = view || undefined; |
280 | 47276ec2 | Kostas Papadimitriou | |
281 | 47276ec2 | Kostas Papadimitriou | if (this.from_view) { |
282 | 47276ec2 | Kostas Papadimitriou | this.$(".previous-view-link").show(); |
283 | 47276ec2 | Kostas Papadimitriou | } else {
|
284 | 47276ec2 | Kostas Papadimitriou | this.$(".previous-view-link").hide(); |
285 | 47276ec2 | Kostas Papadimitriou | } |
286 | 47276ec2 | Kostas Papadimitriou | |
287 | e9392f3c | Kostas Papadimitriou | this.subview.reset();
|
288 | e9392f3c | Kostas Papadimitriou | views.PublicKeysOverlay.__super__.show.apply(this, arguments); |
289 | e9392f3c | Kostas Papadimitriou | }, |
290 | 47276ec2 | Kostas Papadimitriou | |
291 | 47276ec2 | Kostas Papadimitriou | onClose: function() { |
292 | 47276ec2 | Kostas Papadimitriou | if (this.from_view) { |
293 | 47276ec2 | Kostas Papadimitriou | this.hiding = true; |
294 | 47276ec2 | Kostas Papadimitriou | this.from_view.skip_reset_on_next_open = true; |
295 | 47276ec2 | Kostas Papadimitriou | this.from_view.show();
|
296 | 47276ec2 | Kostas Papadimitriou | this.from_view = undefined; |
297 | 47276ec2 | Kostas Papadimitriou | } |
298 | 47276ec2 | Kostas Papadimitriou | }, |
299 | e9392f3c | Kostas Papadimitriou | |
300 | e9392f3c | Kostas Papadimitriou | init_handlers: function() { |
301 | e9392f3c | Kostas Papadimitriou | } |
302 | e9392f3c | Kostas Papadimitriou | |
303 | e9392f3c | Kostas Papadimitriou | }); |
304 | e9392f3c | Kostas Papadimitriou | })(this);
|
305 | e9392f3c | Kostas Papadimitriou |