Statistics
| Branch: | Tag: | Revision:

root / snf-cyclades-app / synnefo / ui / static / snf / js / ui / web / ui_public_keys_view.js @ 9fd7a7a8

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