Statistics
| Branch: | Tag: | Revision:

root / ui / static / snf / js / ui / web / ui_networks_view.js @ c72a830d

History | View | Annotate | Download (33.4 kB)

1 8d08f18a Kostas Papadimitriou
;(function(root){
2 8d08f18a Kostas Papadimitriou
    
3 8d08f18a Kostas Papadimitriou
    // root
4 8d08f18a Kostas Papadimitriou
    var root = root;
5 8d08f18a Kostas Papadimitriou
    
6 8d08f18a Kostas Papadimitriou
    // setup namepsaces
7 8d08f18a Kostas Papadimitriou
    var snf = root.synnefo = root.synnefo || {};
8 8d08f18a Kostas Papadimitriou
    var models = snf.models = snf.models || {}
9 8d08f18a Kostas Papadimitriou
    var storage = snf.storage = snf.storage || {};
10 8d08f18a Kostas Papadimitriou
    var ui = snf.ui = snf.ui || {};
11 8d08f18a Kostas Papadimitriou
    var util = snf.util || {};
12 8d08f18a Kostas Papadimitriou
    var views = snf.views = snf.views || {}
13 8d08f18a Kostas Papadimitriou
14 8d08f18a Kostas Papadimitriou
    // shortcuts
15 8d08f18a Kostas Papadimitriou
    var bb = root.Backbone;
16 8d08f18a Kostas Papadimitriou
    
17 8d08f18a Kostas Papadimitriou
    // logging
18 8d08f18a Kostas Papadimitriou
    var logger = new snf.logging.logger("SNF-VIEWS");
19 8d08f18a Kostas Papadimitriou
    var debug = _.bind(logger.debug, logger);
20 8d08f18a Kostas Papadimitriou
    
21 8d08f18a Kostas Papadimitriou
    
22 8d08f18a Kostas Papadimitriou
    views.NetworkConnectVMsOverlay = views.Overlay.extend({
23 8d08f18a Kostas Papadimitriou
        title: "Connect machine",
24 8d08f18a Kostas Papadimitriou
        overlay_id: "overlay-select-vms",
25 8d08f18a Kostas Papadimitriou
        content_selector: "#network-vms-select-content",
26 8d08f18a Kostas Papadimitriou
        css_class: "overlay-info",
27 8d08f18a Kostas Papadimitriou
28 8d08f18a Kostas Papadimitriou
        initialize: function() {
29 8d08f18a Kostas Papadimitriou
            views.NetworkConnectVMsOverlay.__super__.initialize.apply(this);
30 8d08f18a Kostas Papadimitriou
            this.list = this.$(".vms-list ul");
31 8d08f18a Kostas Papadimitriou
            this.empty_message = this.$(".empty-message");
32 8d08f18a Kostas Papadimitriou
        },
33 8d08f18a Kostas Papadimitriou
        
34 8d08f18a Kostas Papadimitriou
        init_handlers: function() {
35 8d08f18a Kostas Papadimitriou
            var self = this;
36 8d08f18a Kostas Papadimitriou
            this.list.find("li").click(function(){
37 8d08f18a Kostas Papadimitriou
                $(this).toggleClass("selected");
38 8d08f18a Kostas Papadimitriou
            });
39 8d08f18a Kostas Papadimitriou
40 8d08f18a Kostas Papadimitriou
            this.el.find(".create").click(_.bind(function() {
41 8d08f18a Kostas Papadimitriou
                this.submit();
42 8d08f18a Kostas Papadimitriou
            }, this));
43 8d08f18a Kostas Papadimitriou
        },
44 8d08f18a Kostas Papadimitriou
45 8d08f18a Kostas Papadimitriou
        reset: function() {
46 8d08f18a Kostas Papadimitriou
            this.list.find("li").remove();
47 8d08f18a Kostas Papadimitriou
        },
48 8d08f18a Kostas Papadimitriou
49 8d08f18a Kostas Papadimitriou
        beforeOpen: function() {
50 8d08f18a Kostas Papadimitriou
            this.reset();
51 8d08f18a Kostas Papadimitriou
            this.update_layout();
52 8d08f18a Kostas Papadimitriou
        },
53 8d08f18a Kostas Papadimitriou
        
54 8d08f18a Kostas Papadimitriou
        vm: function(vm) {
55 8d08f18a Kostas Papadimitriou
            if (vm.id) { var id = vm.id } else {var id = vm}
56 8d08f18a Kostas Papadimitriou
            return this.list.find(".vm-" + id);
57 8d08f18a Kostas Papadimitriou
        },
58 8d08f18a Kostas Papadimitriou
59 8d08f18a Kostas Papadimitriou
        get_selected: function() {
60 8d08f18a Kostas Papadimitriou
            return this.list.find(".selected").map(function() {return $(this).data('vm')})
61 8d08f18a Kostas Papadimitriou
        },
62 8d08f18a Kostas Papadimitriou
63 8d08f18a Kostas Papadimitriou
        update_layout: function() {
64 3450cf0d Kostas Papadimitriou
            if (this.vms.length == 0) {
65 8d08f18a Kostas Papadimitriou
                this.empty_message.show();
66 8d08f18a Kostas Papadimitriou
            } else {
67 8d08f18a Kostas Papadimitriou
                this.empty_message.hide();
68 8d08f18a Kostas Papadimitriou
            }
69 3450cf0d Kostas Papadimitriou
70 8d08f18a Kostas Papadimitriou
            _.each(this.vms, _.bind(function(vm){
71 8d08f18a Kostas Papadimitriou
                var html = '<li class="vm option options-object vm-{0}">' +
72 8d08f18a Kostas Papadimitriou
                           '<div class="options-object-cont">' +
73 8d08f18a Kostas Papadimitriou
                           '{2}' + 
74 8d08f18a Kostas Papadimitriou
                           '<span class="title">{1}</span>' + 
75 8d08f18a Kostas Papadimitriou
                           '<span class="value">{3}</span></div>' + 
76 8d08f18a Kostas Papadimitriou
                           '</li>';
77 8d08f18a Kostas Papadimitriou
                var el = $(html.format(vm.id, 
78 8d08f18a Kostas Papadimitriou
                                       util.truncate(vm.get("name"), 23), 
79 8d08f18a Kostas Papadimitriou
                                       snf.ui.helpers.vm_icon_tag(vm, "small", {'class':'os'}),
80 8d08f18a Kostas Papadimitriou
                                       vm.get_os()
81 8d08f18a Kostas Papadimitriou
                                      ))
82 8d08f18a Kostas Papadimitriou
                el.data({vm:vm,vm_id:vm.id})
83 8d08f18a Kostas Papadimitriou
                this.list.append(el);
84 8d08f18a Kostas Papadimitriou
85 8d08f18a Kostas Papadimitriou
                vm.bind("remove", function(){ el.remove()})
86 8d08f18a Kostas Papadimitriou
                vm.bind("change:name", function(i,v){el.find(".title").text(v)})
87 8d08f18a Kostas Papadimitriou
            }, this));
88 8d08f18a Kostas Papadimitriou
89 8d08f18a Kostas Papadimitriou
            this.init_handlers();
90 8d08f18a Kostas Papadimitriou
            this.set_selected();
91 8d08f18a Kostas Papadimitriou
        },
92 8d08f18a Kostas Papadimitriou
93 8d08f18a Kostas Papadimitriou
        set_selected: function() {
94 8d08f18a Kostas Papadimitriou
            _.each(this.selected, _.bind(function(el){
95 8d08f18a Kostas Papadimitriou
                this.vm(el).addClass("selected");
96 8d08f18a Kostas Papadimitriou
            }, this));
97 8d08f18a Kostas Papadimitriou
        },
98 8d08f18a Kostas Papadimitriou
99 8d08f18a Kostas Papadimitriou
        show_vms: function(network, vms, selected, callback) {
100 8d08f18a Kostas Papadimitriou
            this.network = network;
101 8d08f18a Kostas Papadimitriou
            this.reset();
102 8d08f18a Kostas Papadimitriou
            this.set_subtitle(network.get("name"));
103 8d08f18a Kostas Papadimitriou
            this.vms = vms;
104 8d08f18a Kostas Papadimitriou
            this.selected = selected;
105 8d08f18a Kostas Papadimitriou
            this.cb = callback;
106 8d08f18a Kostas Papadimitriou
            this.show();
107 8d08f18a Kostas Papadimitriou
        },
108 8d08f18a Kostas Papadimitriou
109 8d08f18a Kostas Papadimitriou
        submit: function() {
110 8d08f18a Kostas Papadimitriou
            this.cb(this.get_selected());
111 8d08f18a Kostas Papadimitriou
        }
112 8d08f18a Kostas Papadimitriou
    })
113 8d08f18a Kostas Papadimitriou
114 8d08f18a Kostas Papadimitriou
    views.NetworkActionsView = views.View.extend({
115 8d08f18a Kostas Papadimitriou
        
116 8d08f18a Kostas Papadimitriou
        initialize: function(view, net, el, opts) {
117 8d08f18a Kostas Papadimitriou
            this.parent = view
118 8d08f18a Kostas Papadimitriou
            this.network = net;
119 8d08f18a Kostas Papadimitriou
            this.el = el;
120 8d08f18a Kostas Papadimitriou
            
121 8d08f18a Kostas Papadimitriou
            this.actions = this.$(".actions");
122 8d08f18a Kostas Papadimitriou
            this.selected = undefined;
123 8d08f18a Kostas Papadimitriou
124 8d08f18a Kostas Papadimitriou
            this.destroy = this.$(".actions .destroy a");
125 8d08f18a Kostas Papadimitriou
            this.connect = this.$(".actions .add");
126 8d08f18a Kostas Papadimitriou
127 8d08f18a Kostas Papadimitriou
            this.init_handlers();
128 8d08f18a Kostas Papadimitriou
            this.update_layout();
129 8d08f18a Kostas Papadimitriou
        },
130 8d08f18a Kostas Papadimitriou
131 8d08f18a Kostas Papadimitriou
        init_handlers: function() {
132 8d08f18a Kostas Papadimitriou
            this.connect.click(_.bind(function(e){
133 8d08f18a Kostas Papadimitriou
                e.preventDefault();
134 8d08f18a Kostas Papadimitriou
            }))
135 8d08f18a Kostas Papadimitriou
        },
136 8d08f18a Kostas Papadimitriou
137 8d08f18a Kostas Papadimitriou
        update_layout: function() {
138 8d08f18a Kostas Papadimitriou
        }
139 8d08f18a Kostas Papadimitriou
    });
140 8d08f18a Kostas Papadimitriou
141 8d08f18a Kostas Papadimitriou
    views.NetworkCreateView = views.Overlay.extend({
142 8d08f18a Kostas Papadimitriou
        view_id: "network_create_view",
143 8d08f18a Kostas Papadimitriou
        content_selector: "#networks-create-content",
144 8d08f18a Kostas Papadimitriou
        css_class: 'overlay-networks-create overlay-info',
145 8d08f18a Kostas Papadimitriou
        overlay_id: "network-create-overlay",
146 8d08f18a Kostas Papadimitriou
147 8d08f18a Kostas Papadimitriou
        title: "Create new private network",
148 8d08f18a Kostas Papadimitriou
        subtitle: "Networks",
149 8d08f18a Kostas Papadimitriou
150 8d08f18a Kostas Papadimitriou
        initialize: function(options) {
151 8d08f18a Kostas Papadimitriou
            views.NetworkCreateView.__super__.initialize.apply(this);
152 8d08f18a Kostas Papadimitriou
153 8d08f18a Kostas Papadimitriou
            this.create_button = this.$("form .form-action.create");
154 8d08f18a Kostas Papadimitriou
            this.text = this.$(".network-create-name");
155 8d08f18a Kostas Papadimitriou
            this.form = this.$("form");
156 8d08f18a Kostas Papadimitriou
            this.init_handlers();
157 8d08f18a Kostas Papadimitriou
        },
158 8d08f18a Kostas Papadimitriou
159 8d08f18a Kostas Papadimitriou
        init_handlers: function() {
160 8d08f18a Kostas Papadimitriou
            this.create_button.click(_.bind(function(e){
161 8d08f18a Kostas Papadimitriou
                this.submit();
162 8d08f18a Kostas Papadimitriou
            }, this));
163 8d08f18a Kostas Papadimitriou
164 8d08f18a Kostas Papadimitriou
            this.form.submit(_.bind(function(e){
165 8d08f18a Kostas Papadimitriou
                e.preventDefault();
166 8d08f18a Kostas Papadimitriou
                this.submit;
167 8d08f18a Kostas Papadimitriou
                return false;
168 8d08f18a Kostas Papadimitriou
            }, this))
169 8d08f18a Kostas Papadimitriou
170 8d08f18a Kostas Papadimitriou
            this.text.keypress(_.bind(function(e){
171 8d08f18a Kostas Papadimitriou
                if (e.which == 13) {this.submit()};
172 8d08f18a Kostas Papadimitriou
            },this))
173 8d08f18a Kostas Papadimitriou
        },
174 8d08f18a Kostas Papadimitriou
175 8d08f18a Kostas Papadimitriou
        submit: function() {
176 8d08f18a Kostas Papadimitriou
            if (this.validate()) {
177 8d08f18a Kostas Papadimitriou
                this.create();
178 8d08f18a Kostas Papadimitriou
            };
179 8d08f18a Kostas Papadimitriou
        },
180 8d08f18a Kostas Papadimitriou
        
181 8d08f18a Kostas Papadimitriou
        validate: function() {
182 8d08f18a Kostas Papadimitriou
            // sanitazie
183 8d08f18a Kostas Papadimitriou
            var t = this.text.val();
184 8d08f18a Kostas Papadimitriou
            t = t.replace(/^\s+|\s+$/g,"");
185 8d08f18a Kostas Papadimitriou
            this.text.val(t);
186 8d08f18a Kostas Papadimitriou
187 8d08f18a Kostas Papadimitriou
            if (this.text.val() == "") {
188 8d08f18a Kostas Papadimitriou
                this.text.closest(".form-field").addClass("error");
189 8d08f18a Kostas Papadimitriou
                this.text.focus();
190 8d08f18a Kostas Papadimitriou
                return false;
191 8d08f18a Kostas Papadimitriou
            } else {
192 8d08f18a Kostas Papadimitriou
                return true;
193 8d08f18a Kostas Papadimitriou
            }
194 8d08f18a Kostas Papadimitriou
        },
195 8d08f18a Kostas Papadimitriou
196 8d08f18a Kostas Papadimitriou
        create: function() {
197 8d08f18a Kostas Papadimitriou
            this.create_button.addClass("in-progress");
198 8d08f18a Kostas Papadimitriou
            snf.storage.networks.create(this.text.val(), _.bind(function(){
199 8d08f18a Kostas Papadimitriou
                this.hide();
200 8d08f18a Kostas Papadimitriou
            }, this));
201 8d08f18a Kostas Papadimitriou
        },
202 8d08f18a Kostas Papadimitriou
203 8d08f18a Kostas Papadimitriou
        beforeOpen: function() {
204 8d08f18a Kostas Papadimitriou
            this.create_button.removeClass("in-progress")
205 95072bf0 Kostas Papadimitriou
            this.text.closest(".form-field").removeClass("error");
206 8d08f18a Kostas Papadimitriou
            this.text.val("");
207 8d08f18a Kostas Papadimitriou
            this.text.show();
208 8d08f18a Kostas Papadimitriou
            this.text.focus();
209 8d08f18a Kostas Papadimitriou
        },
210 8d08f18a Kostas Papadimitriou
211 8d08f18a Kostas Papadimitriou
        onOpen: function() {
212 8d08f18a Kostas Papadimitriou
            this.text.focus();
213 8d08f18a Kostas Papadimitriou
        }
214 8d08f18a Kostas Papadimitriou
    });
215 8d08f18a Kostas Papadimitriou
216 8d08f18a Kostas Papadimitriou
    views.NetworkVMView = views.View.extend({
217 8d08f18a Kostas Papadimitriou
218 8d08f18a Kostas Papadimitriou
        initialize: function(vm, parent, firewall_controls, el) {
219 8d08f18a Kostas Papadimitriou
            this.firewall_controls = firewall_controls || false;
220 8d08f18a Kostas Papadimitriou
            this.vm = vm;
221 8d08f18a Kostas Papadimitriou
            // parent view di
222 8d08f18a Kostas Papadimitriou
            this.parent = parent;
223 8d08f18a Kostas Papadimitriou
            // TODO make it better
224 8d08f18a Kostas Papadimitriou
            this.el = el || this.parent.vm(vm);
225 8d08f18a Kostas Papadimitriou
226 8d08f18a Kostas Papadimitriou
            this.init_layout();
227 8d08f18a Kostas Papadimitriou
            this.update_layout();
228 8d08f18a Kostas Papadimitriou
229 8d08f18a Kostas Papadimitriou
            this.disconnect = this.$(".action-disconnect");
230 8d08f18a Kostas Papadimitriou
            this.confirm_el = this.$(".confirm_single");
231 8d08f18a Kostas Papadimitriou
            this.cancel = this.$("button.no");
232 8d08f18a Kostas Papadimitriou
            this.confirm = this.$("button.yes");
233 8d08f18a Kostas Papadimitriou
            this.details = this.$(".action-details");
234 9b059b7e Kostas Papadimitriou
            this.vm_connect = this.$(".machine-connect");
235 8d08f18a Kostas Papadimitriou
236 8d08f18a Kostas Papadimitriou
            this.init_handlers();
237 9b059b7e Kostas Papadimitriou
            this.connect_overlay = new views.VMConnectView();
238 8d08f18a Kostas Papadimitriou
            
239 8d08f18a Kostas Papadimitriou
            this.firewall_view = undefined;
240 8d08f18a Kostas Papadimitriou
            if (this.firewall_controls) {
241 8d08f18a Kostas Papadimitriou
                this.firewall_view = new views.FirewallEditView(this.vm, this.parent.network, this);
242 8d08f18a Kostas Papadimitriou
            }
243 8d08f18a Kostas Papadimitriou
244 8d08f18a Kostas Papadimitriou
        },
245 8d08f18a Kostas Papadimitriou
        
246 8d08f18a Kostas Papadimitriou
        init_handlers: function() {
247 8d08f18a Kostas Papadimitriou
            if (!this.parent.network.is_public()) {
248 8d08f18a Kostas Papadimitriou
                this.disconnect.click(_.bind(function(e){
249 8d08f18a Kostas Papadimitriou
                    e.preventDefault();
250 101e6604 Kostas Papadimitriou
                    this.parent.network.get("actions").add("disconnect", this.vm.id);
251 101e6604 Kostas Papadimitriou
                    this.parent.network.get("actions").remove("destroy");
252 8d08f18a Kostas Papadimitriou
                }, this));
253 8d08f18a Kostas Papadimitriou
                this.cancel.click(_.bind(function(e){
254 101e6604 Kostas Papadimitriou
                    this.parent.network.get("actions").remove("disconnect", this.vm.id);
255 8d08f18a Kostas Papadimitriou
                    e.preventDefault()
256 8d08f18a Kostas Papadimitriou
                }, this));
257 8d08f18a Kostas Papadimitriou
                this.confirm.click(_.bind(function(e){
258 8d08f18a Kostas Papadimitriou
                    e.preventDefault()
259 8d08f18a Kostas Papadimitriou
                    this.disconnect_vm();
260 8d08f18a Kostas Papadimitriou
                    this.confirm_el.hide();
261 8d08f18a Kostas Papadimitriou
                    this.disconnect.removeClass("selected");
262 8d08f18a Kostas Papadimitriou
                }, this));
263 8d08f18a Kostas Papadimitriou
264 8d08f18a Kostas Papadimitriou
                snf.ui.main.bind("view:change", _.bind(function(v) {
265 8d08f18a Kostas Papadimitriou
                    if (v == "networks" ){ return }
266 8d08f18a Kostas Papadimitriou
                    this.confirm_el.hide();
267 8d08f18a Kostas Papadimitriou
                    this.disconnect.removeClass("selected");
268 8d08f18a Kostas Papadimitriou
                }, this));
269 8d08f18a Kostas Papadimitriou
270 8d08f18a Kostas Papadimitriou
                this.$(".remove-icon").click(_.bind(function(){
271 101e6604 Kostas Papadimitriou
                    this.parent.network.get("actions").add("disconnect", this.vm.id);
272 101e6604 Kostas Papadimitriou
                    this.parent.network.get("actions").remove("destroy");
273 9b059b7e Kostas Papadimitriou
                }, this));
274 9b059b7e Kostas Papadimitriou
275 9b059b7e Kostas Papadimitriou
                this.vm_connect.click(_.bind(function() {
276 9b059b7e Kostas Papadimitriou
                    this.connect_overlay.show(this.vm);
277 9b059b7e Kostas Papadimitriou
                }, this));
278 101e6604 Kostas Papadimitriou
                
279 101e6604 Kostas Papadimitriou
                this.parent.network.bind("change:actions", _.bind(function(model, action){
280 101e6604 Kostas Papadimitriou
                    if (this.parent.network.get("actions").contains("disconnect", this.vm.id)) {
281 101e6604 Kostas Papadimitriou
                        this.confirm_disconnect();
282 101e6604 Kostas Papadimitriou
                    } else {
283 101e6604 Kostas Papadimitriou
                        this.cancel_disconnect();
284 101e6604 Kostas Papadimitriou
                    }
285 101e6604 Kostas Papadimitriou
                }, this));
286 8d08f18a Kostas Papadimitriou
            }
287 8d08f18a Kostas Papadimitriou
            
288 8d08f18a Kostas Papadimitriou
            var vm = this.vm;
289 8d08f18a Kostas Papadimitriou
            this.details.click(function(){
290 8d08f18a Kostas Papadimitriou
                snf.ui.main.show_vm_details(vm);
291 101e6604 Kostas Papadimitriou
            });
292 101e6604 Kostas Papadimitriou
293 101e6604 Kostas Papadimitriou
        },
294 8d08f18a Kostas Papadimitriou
295 101e6604 Kostas Papadimitriou
        cancel_disconnect: function() {
296 101e6604 Kostas Papadimitriou
            this.confirm_el.hide();
297 101e6604 Kostas Papadimitriou
            this.disconnect.removeClass("selected");
298 101e6604 Kostas Papadimitriou
            this.$(".net-vm-actions a").removeClass("visible");
299 8d08f18a Kostas Papadimitriou
        },
300 8d08f18a Kostas Papadimitriou
301 8d08f18a Kostas Papadimitriou
        confirm_disconnect: function() {
302 8d08f18a Kostas Papadimitriou
            this.confirm_el.show();
303 8d08f18a Kostas Papadimitriou
            this.disconnect.addClass("selected");
304 101e6604 Kostas Papadimitriou
            this.$(".net-vm-actions a").addClass("visible");
305 8d08f18a Kostas Papadimitriou
        },
306 8d08f18a Kostas Papadimitriou
307 8d08f18a Kostas Papadimitriou
        init_layout: function() {
308 8d08f18a Kostas Papadimitriou
            if (!this.firewall_controls) { return };
309 8d08f18a Kostas Papadimitriou
        },
310 8d08f18a Kostas Papadimitriou
311 8d08f18a Kostas Papadimitriou
        update_layout: function() {
312 8d08f18a Kostas Papadimitriou
            this.$(".vm-name").text(snf.util.truncate(this.vm.get("name"), 40));
313 8d08f18a Kostas Papadimitriou
            this.$("img.logo").attr("src", ui.helpers.vm_icon_path(this.vm, "medium"));
314 8d08f18a Kostas Papadimitriou
315 8d08f18a Kostas Papadimitriou
            if (this.firewall_view) {
316 8d08f18a Kostas Papadimitriou
                this.$(".ipv4-text").text(this.vm.get_addresses().ip4);
317 8d08f18a Kostas Papadimitriou
                this.$(".ipv6-text").text(this.vm.get_addresses().ip6);
318 8d08f18a Kostas Papadimitriou
            }
319 8d08f18a Kostas Papadimitriou
320 8d08f18a Kostas Papadimitriou
            if (this.firewall_view) {
321 8d08f18a Kostas Papadimitriou
                this.firewall_view.update_layout();
322 8d08f18a Kostas Papadimitriou
            }
323 8d08f18a Kostas Papadimitriou
        },
324 8d08f18a Kostas Papadimitriou
325 8d08f18a Kostas Papadimitriou
        disconnect_vm: function() {
326 8d08f18a Kostas Papadimitriou
            this.$("a.selected").removeClass("selected");
327 8d08f18a Kostas Papadimitriou
            this.parent.network.remove_vm(this.vm);
328 8d08f18a Kostas Papadimitriou
        },
329 8d08f18a Kostas Papadimitriou
330 8d08f18a Kostas Papadimitriou
        update_firewall_layout: function() {
331 8d08f18a Kostas Papadimitriou
        }
332 8d08f18a Kostas Papadimitriou
333 8d08f18a Kostas Papadimitriou
334 8d08f18a Kostas Papadimitriou
    })
335 8d08f18a Kostas Papadimitriou
336 8d08f18a Kostas Papadimitriou
    views.NetworkModelRenameView = views.View.extend({
337 8d08f18a Kostas Papadimitriou
        initialize: function(parent, network) {
338 8d08f18a Kostas Papadimitriou
            this.parent = parent;
339 8d08f18a Kostas Papadimitriou
            this.network = network;
340 8d08f18a Kostas Papadimitriou
            this.el = this.parent.el.find(".name-div");
341 8d08f18a Kostas Papadimitriou
342 8d08f18a Kostas Papadimitriou
            this.icon = this.$(".rename-network");
343 8d08f18a Kostas Papadimitriou
            this.save = this.$("span.save");
344 8d08f18a Kostas Papadimitriou
            this.cancel = this.$("span.cancel");
345 8d08f18a Kostas Papadimitriou
            this.buttons = this.$(".editbuttons");
346 8d08f18a Kostas Papadimitriou
            this.name = this.$("span.name");
347 8d08f18a Kostas Papadimitriou
            this.editing = false;
348 8d08f18a Kostas Papadimitriou
            this.init_handlers();
349 8d08f18a Kostas Papadimitriou
            this.update_layout();
350 8d08f18a Kostas Papadimitriou
        },
351 8d08f18a Kostas Papadimitriou
352 8d08f18a Kostas Papadimitriou
        init_handlers: function() {
353 8d08f18a Kostas Papadimitriou
            this.icon.click(_.bind(function(){
354 8d08f18a Kostas Papadimitriou
                this.editing = true;
355 8d08f18a Kostas Papadimitriou
                this.update_layout();
356 8d08f18a Kostas Papadimitriou
            }, this));
357 8d08f18a Kostas Papadimitriou
            this.cancel.click(_.bind(function(){
358 8d08f18a Kostas Papadimitriou
                this.editing = false;
359 8d08f18a Kostas Papadimitriou
                this.update_layout();
360 8d08f18a Kostas Papadimitriou
            }, this));
361 8d08f18a Kostas Papadimitriou
            this.save.click(_.bind(function(){
362 8d08f18a Kostas Papadimitriou
                this.submit();
363 8d08f18a Kostas Papadimitriou
            }, this))
364 8d08f18a Kostas Papadimitriou
        },
365 8d08f18a Kostas Papadimitriou
        
366 8d08f18a Kostas Papadimitriou
        submit: function() {
367 8d08f18a Kostas Papadimitriou
            var value = _(this.input.val()).trim();
368 8d08f18a Kostas Papadimitriou
            if (value == "") { return }
369 8d08f18a Kostas Papadimitriou
370 8d08f18a Kostas Papadimitriou
            this.network.rename(value, _.bind(function(){
371 8d08f18a Kostas Papadimitriou
                this.editing = false;
372 8d08f18a Kostas Papadimitriou
                this.update_layout();
373 8d08f18a Kostas Papadimitriou
            }, this));
374 8d08f18a Kostas Papadimitriou
        },
375 8d08f18a Kostas Papadimitriou
376 8d08f18a Kostas Papadimitriou
        create_input: function() {
377 8d08f18a Kostas Papadimitriou
            this.input = $('<input type="text" class="network-rename-input" />');
378 8d08f18a Kostas Papadimitriou
            this.input.val(this.network.get("name"));
379 8d08f18a Kostas Papadimitriou
            this.el.append(this.input);
380 8d08f18a Kostas Papadimitriou
            this.input.focus();
381 5939efeb Kostas Papadimitriou
            this.input.bind("keydown", _.bind(function(ev){
382 5939efeb Kostas Papadimitriou
                ev.keyCode = ev.keyCode || ev.which;
383 5939efeb Kostas Papadimitriou
                if (ev.keyCode == 13) { this.submit(); };
384 5939efeb Kostas Papadimitriou
                if (ev.keyCode == 27) {this.editing = false; this.update_layout()};
385 8d08f18a Kostas Papadimitriou
            }, this));
386 8d08f18a Kostas Papadimitriou
        },
387 8d08f18a Kostas Papadimitriou
388 8d08f18a Kostas Papadimitriou
        remove_input: function() {
389 8d08f18a Kostas Papadimitriou
            if (!this.input) { return }
390 8d08f18a Kostas Papadimitriou
            this.input.remove();
391 8d08f18a Kostas Papadimitriou
        },
392 8d08f18a Kostas Papadimitriou
393 8d08f18a Kostas Papadimitriou
        update_layout: function() {
394 8d08f18a Kostas Papadimitriou
            if (this.editing) {
395 8d08f18a Kostas Papadimitriou
                if (this.buttons.is(":visible")) { return }
396 8d08f18a Kostas Papadimitriou
                this.icon.hide();
397 8d08f18a Kostas Papadimitriou
                this.buttons.show();
398 8d08f18a Kostas Papadimitriou
                this.create_input();
399 8d08f18a Kostas Papadimitriou
                this.name.hide();
400 8d08f18a Kostas Papadimitriou
            } else {
401 8d08f18a Kostas Papadimitriou
                this.buttons.hide();
402 8d08f18a Kostas Papadimitriou
                this.remove_input();
403 8d08f18a Kostas Papadimitriou
                this.name.show();
404 8d08f18a Kostas Papadimitriou
                this.icon.show();
405 8d08f18a Kostas Papadimitriou
            }
406 8d08f18a Kostas Papadimitriou
        }
407 8d08f18a Kostas Papadimitriou
    })
408 8d08f18a Kostas Papadimitriou
409 8d08f18a Kostas Papadimitriou
    views.FirewallEditView = views.View.extend({
410 8d08f18a Kostas Papadimitriou
        initialize: function(vm, network, parent) {
411 8d08f18a Kostas Papadimitriou
            this.parent = parent;
412 8d08f18a Kostas Papadimitriou
            this.vm = vm;
413 8d08f18a Kostas Papadimitriou
            this.network = network;
414 8d08f18a Kostas Papadimitriou
            this.el = this.parent.el;
415 8d08f18a Kostas Papadimitriou
416 8d08f18a Kostas Papadimitriou
            views.FirewallEditView.__super__.initialize.apply(this);
417 8d08f18a Kostas Papadimitriou
418 8d08f18a Kostas Papadimitriou
            // elements
419 8d08f18a Kostas Papadimitriou
            this.toggler = this.$(".firewall-toggle");
420 8d08f18a Kostas Papadimitriou
            this.indicator = this.$(".machines-label span");
421 8d08f18a Kostas Papadimitriou
            this.progress = this.$(".network-progress-indicator");
422 8d08f18a Kostas Papadimitriou
            this.content = this.$(".firewall-content");
423 8d08f18a Kostas Papadimitriou
            this.inputs = this.$("input[type=radio]");
424 8d08f18a Kostas Papadimitriou
            this.labels = this.$("span.checkbox-legends, label.checkbox-legends");
425 8d08f18a Kostas Papadimitriou
            this.apply = this.$(".firewall-apply");
426 8d08f18a Kostas Papadimitriou
427 8d08f18a Kostas Papadimitriou
            this.$(".firewall-content").hide();
428 8d08f18a Kostas Papadimitriou
            this.$(".firewall-content input[type=radio]").attr("name", "firewall-opt-for-{0}".format(this.vm.id))
429 8d08f18a Kostas Papadimitriou
            var mode = this.vm.firewall_profile(this.network.id);
430 8d08f18a Kostas Papadimitriou
            this.$(".firewall-content input[value={0}]".format(mode)).attr("checked", true);
431 8d08f18a Kostas Papadimitriou
432 8d08f18a Kostas Papadimitriou
            this.init_handlers();
433 8d08f18a Kostas Papadimitriou
            this.update_layout();
434 8d08f18a Kostas Papadimitriou
        },
435 8d08f18a Kostas Papadimitriou
        
436 8d08f18a Kostas Papadimitriou
        _get_selected: function() {
437 8d08f18a Kostas Papadimitriou
            return this.inputs.filter(":checked");
438 8d08f18a Kostas Papadimitriou
        },
439 8d08f18a Kostas Papadimitriou
440 8d08f18a Kostas Papadimitriou
        reset_selected: function() {
441 8d08f18a Kostas Papadimitriou
        },
442 8d08f18a Kostas Papadimitriou
443 8d08f18a Kostas Papadimitriou
        submit: function() {
444 8d08f18a Kostas Papadimitriou
        },
445 8d08f18a Kostas Papadimitriou
446 8d08f18a Kostas Papadimitriou
        reset_value: function() {
447 8d08f18a Kostas Papadimitriou
            this.inputs.filter("[value={0}]".format(this.vm.firewall_profile(this.network.id))).attr("checked");
448 8d08f18a Kostas Papadimitriou
        },
449 8d08f18a Kostas Papadimitriou
450 8d08f18a Kostas Papadimitriou
        init_handlers: function() {
451 8d08f18a Kostas Papadimitriou
            this.toggler.click(_.bind(function(){
452 8d08f18a Kostas Papadimitriou
                cont = this.content;
453 8d08f18a Kostas Papadimitriou
                if (cont.is(":visible")) {
454 8d08f18a Kostas Papadimitriou
                    this.hide_firewall();
455 8d08f18a Kostas Papadimitriou
                    this.reset_value();
456 8d08f18a Kostas Papadimitriou
                } else {
457 8d08f18a Kostas Papadimitriou
                    this.show_firewall();
458 8d08f18a Kostas Papadimitriou
                }
459 8d08f18a Kostas Papadimitriou
460 8d08f18a Kostas Papadimitriou
                $(window).trigger("resize");
461 8d08f18a Kostas Papadimitriou
            }, this))
462 9ce969a7 Kostas Papadimitriou
            
463 8d08f18a Kostas Papadimitriou
            this.apply.click(_.bind(function(){
464 8d08f18a Kostas Papadimitriou
                this.apply.addClass("in-progress");
465 9ce969a7 Kostas Papadimitriou
                
466 9ce969a7 Kostas Papadimitriou
                // make the api call
467 9ce969a7 Kostas Papadimitriou
                this.vm.set_firewall(this.network.id, this.value(), 
468 9ce969a7 Kostas Papadimitriou
                // complete
469 9ce969a7 Kostas Papadimitriou
                _.bind(function() {
470 9ce969a7 Kostas Papadimitriou
                    // complete callback
471 9ce969a7 Kostas Papadimitriou
                    this.apply.removeClass("in-progress");
472 9ce969a7 Kostas Papadimitriou
                }, this), 
473 9ce969a7 Kostas Papadimitriou
                // error
474 9ce969a7 Kostas Papadimitriou
                _.bind(function(){
475 9ce969a7 Kostas Papadimitriou
                    this.vm.remove_pending_firewall(this.network.id, this.value());
476 8d08f18a Kostas Papadimitriou
                }, this));
477 8d08f18a Kostas Papadimitriou
                this.hide_firewall();
478 8d08f18a Kostas Papadimitriou
            }, this))
479 8d08f18a Kostas Papadimitriou
480 8d08f18a Kostas Papadimitriou
            this.inputs.change(_.bind(function(){
481 8d08f18a Kostas Papadimitriou
                this.update_selected();
482 8d08f18a Kostas Papadimitriou
            }, this))
483 8d08f18a Kostas Papadimitriou
            
484 8d08f18a Kostas Papadimitriou
            var self = this;
485 8d08f18a Kostas Papadimitriou
            this.$(".checkbox-legends").click(function(el) {
486 8d08f18a Kostas Papadimitriou
                var el = $(this);
487 8d08f18a Kostas Papadimitriou
                el.prev().click();
488 8d08f18a Kostas Papadimitriou
                self.update_selected();
489 8d08f18a Kostas Papadimitriou
            })
490 8d08f18a Kostas Papadimitriou
        },
491 8d08f18a Kostas Papadimitriou
492 8d08f18a Kostas Papadimitriou
        update_selected: function() {
493 8d08f18a Kostas Papadimitriou
            this.update_layout();
494 8d08f18a Kostas Papadimitriou
        },
495 8d08f18a Kostas Papadimitriou
496 8d08f18a Kostas Papadimitriou
        show_firewall: function() {
497 8d08f18a Kostas Papadimitriou
            this.content.slideDown(100, function(){$(window).trigger("resize")});
498 8d08f18a Kostas Papadimitriou
            this.toggler.addClass("open");
499 8d08f18a Kostas Papadimitriou
        },
500 8d08f18a Kostas Papadimitriou
501 8d08f18a Kostas Papadimitriou
        hide_firewall: function() {
502 8d08f18a Kostas Papadimitriou
            this.content.slideUp(100, function(){$(window).trigger("resize")});
503 8d08f18a Kostas Papadimitriou
            this.toggler.removeClass("open");
504 8d08f18a Kostas Papadimitriou
        },
505 8d08f18a Kostas Papadimitriou
506 8d08f18a Kostas Papadimitriou
        value: function() {
507 8d08f18a Kostas Papadimitriou
            return this._get_selected().val();
508 8d08f18a Kostas Papadimitriou
        },
509 8d08f18a Kostas Papadimitriou
510 8d08f18a Kostas Papadimitriou
        update_layout: function() {
511 8d08f18a Kostas Papadimitriou
            if (this.value() == this.vm.firewall_profile(this.network.id)) {
512 8d08f18a Kostas Papadimitriou
                this.apply.hide();
513 8d08f18a Kostas Papadimitriou
            } else {
514 8d08f18a Kostas Papadimitriou
                this.apply.show();
515 8d08f18a Kostas Papadimitriou
            }
516 8d08f18a Kostas Papadimitriou
517 8d08f18a Kostas Papadimitriou
            profile = this.vm.firewall_profile(this.network.id);
518 8d08f18a Kostas Papadimitriou
            if (this.vm.has_firewall(this.network.id)) {
519 8d08f18a Kostas Papadimitriou
                this.$(".firewall-toggle .label span").text("On");
520 8d08f18a Kostas Papadimitriou
                this.$(".firewall-toggle .label span").removeClass("firewall-off");
521 8d08f18a Kostas Papadimitriou
                this.$(".firewall-toggle .label span").addClass("firewall-on");
522 8d08f18a Kostas Papadimitriou
            } else {
523 8d08f18a Kostas Papadimitriou
                this.$(".firewall-toggle .label span").text("Off");
524 8d08f18a Kostas Papadimitriou
                this.$(".firewall-toggle .label span").removeClass("firewall-on");
525 8d08f18a Kostas Papadimitriou
                this.$(".firewall-toggle .label span").addClass("firewall-off");
526 8d08f18a Kostas Papadimitriou
            }
527 8d08f18a Kostas Papadimitriou
            
528 8d08f18a Kostas Papadimitriou
            this.$("span.checkbox-legends").removeClass("current");
529 8d08f18a Kostas Papadimitriou
            this.inputs.filter("[value={0}]".format(this.vm.firewall_profile(this.network.id))).next().addClass("current");
530 8d08f18a Kostas Papadimitriou
531 8d08f18a Kostas Papadimitriou
            var firewalling = this.vm.firewall_pending(this.network.id);
532 8d08f18a Kostas Papadimitriou
            var el = this.el;
533 8d08f18a Kostas Papadimitriou
            
534 8d08f18a Kostas Papadimitriou
            if (firewalling) {
535 8d08f18a Kostas Papadimitriou
                el.find("button").addClass("in-progress").show();
536 8d08f18a Kostas Papadimitriou
                el.find(".network-progress-indicator").show();
537 8d08f18a Kostas Papadimitriou
            } else {
538 8d08f18a Kostas Papadimitriou
                el.find("button").removeClass("in-progress");
539 8d08f18a Kostas Papadimitriou
                el.find(".network-progress-indicator").hide();
540 8d08f18a Kostas Papadimitriou
            }
541 8d08f18a Kostas Papadimitriou
        }
542 8d08f18a Kostas Papadimitriou
    })
543 8d08f18a Kostas Papadimitriou
544 8d08f18a Kostas Papadimitriou
    views.NetworkModelView = views.View.extend({
545 8d08f18a Kostas Papadimitriou
        
546 8d08f18a Kostas Papadimitriou
        firewall: false,
547 8d08f18a Kostas Papadimitriou
548 8d08f18a Kostas Papadimitriou
        initialize: function(network, view) {
549 8d08f18a Kostas Papadimitriou
            this.parent_view = view;
550 8d08f18a Kostas Papadimitriou
            this.network = network;
551 7b389cf5 Kostas Papadimitriou
            this.is_public = network.is_public();
552 7b389cf5 Kostas Papadimitriou
553 8d08f18a Kostas Papadimitriou
            this.init_vm_handlers();
554 8d08f18a Kostas Papadimitriou
555 7b389cf5 Kostas Papadimitriou
            this.view_id = "networks_view_" + network.id;
556 8d08f18a Kostas Papadimitriou
            views.NetworkModelView.__super__.initialize.call(this);
557 8d08f18a Kostas Papadimitriou
558 8d08f18a Kostas Papadimitriou
            this.vm_views = {};
559 8d08f18a Kostas Papadimitriou
560 8d08f18a Kostas Papadimitriou
            this.el = this.create_el();
561 8d08f18a Kostas Papadimitriou
562 8d08f18a Kostas Papadimitriou
            // element helpers
563 8d08f18a Kostas Papadimitriou
            this.vms_list = this.$(".machines-list");
564 8d08f18a Kostas Papadimitriou
            this.vms_list_toggler = this.$(".list-toggle");
565 8d08f18a Kostas Papadimitriou
            
566 8d08f18a Kostas Papadimitriou
            this.init_handlers();
567 8d08f18a Kostas Papadimitriou
            this.update_vms();
568 8d08f18a Kostas Papadimitriou
            this.update_layout();
569 8d08f18a Kostas Papadimitriou
570 8d08f18a Kostas Papadimitriou
            this.hide_vm_list();
571 8d08f18a Kostas Papadimitriou
            this.vms_list.hide();
572 8d08f18a Kostas Papadimitriou
573 8d08f18a Kostas Papadimitriou
            this.rename_view = undefined;
574 8d08f18a Kostas Papadimitriou
            if (!this.network.is_public()) {
575 8d08f18a Kostas Papadimitriou
                this.rename_view = new views.NetworkModelRenameView(this, network);
576 8d08f18a Kostas Papadimitriou
            }
577 8d08f18a Kostas Papadimitriou
        },
578 8d08f18a Kostas Papadimitriou
579 8d08f18a Kostas Papadimitriou
        show_vm_list: function() {
580 8d08f18a Kostas Papadimitriou
            if (this.vms_empty()) { return }
581 8d08f18a Kostas Papadimitriou
            this.vms_list_toggler.addClass("open");
582 8d08f18a Kostas Papadimitriou
            this.vms_list.slideDown(function(){
583 8d08f18a Kostas Papadimitriou
                $(window).trigger("resize");
584 8d08f18a Kostas Papadimitriou
            }).closest(".network").addClass("expand");
585 8d08f18a Kostas Papadimitriou
            this.$(".empty-network-slot").show();
586 6a5168a3 Kostas Papadimitriou
            this.vms_visible = true;
587 8d08f18a Kostas Papadimitriou
        },
588 8d08f18a Kostas Papadimitriou
589 8d08f18a Kostas Papadimitriou
        hide_vm_list: function() {
590 8d08f18a Kostas Papadimitriou
            this.vms_list_toggler.removeClass("open");
591 8d08f18a Kostas Papadimitriou
            this.vms_list.slideUp(function(){
592 8d08f18a Kostas Papadimitriou
                $(window).trigger("resize");
593 8d08f18a Kostas Papadimitriou
            }).closest(".network").removeClass("expand");
594 8d08f18a Kostas Papadimitriou
            this.$(".empty-network-slot").hide();
595 6a5168a3 Kostas Papadimitriou
            this.vms_visible = false;
596 8d08f18a Kostas Papadimitriou
        },
597 6a5168a3 Kostas Papadimitriou
        
598 8c923194 Kostas Papadimitriou
        // fix left border position
599 8c923194 Kostas Papadimitriou
        fix_left_border: function() {
600 6a5168a3 Kostas Papadimitriou
            if (!this.vms_visible) { return };
601 6a5168a3 Kostas Papadimitriou
            
602 8c923194 Kostas Papadimitriou
            var imgheight = 2783;
603 6a5168a3 Kostas Papadimitriou
            var opened_vm_height = 133 + 20;
604 6a5168a3 Kostas Papadimitriou
            var closed_vm_height = 61 + 20;
605 6a5168a3 Kostas Papadimitriou
            var additional_height = 25;
606 6a5168a3 Kostas Papadimitriou
607 6a5168a3 Kostas Papadimitriou
            if (!this.is_public) { 
608 6a5168a3 Kostas Papadimitriou
                imgheight = 2700;
609 6a5168a3 Kostas Papadimitriou
                additional_height = 65;
610 6a5168a3 Kostas Papadimitriou
            };
611 6a5168a3 Kostas Papadimitriou
            
612 8c923194 Kostas Papadimitriou
            var contents = this.$(".network-contents");
613 6a5168a3 Kostas Papadimitriou
            var last_vm = this.$(".network-machine:last .cont-toggler.open").length;
614 6a5168a3 Kostas Papadimitriou
            var last_vm_height = closed_vm_height;
615 6a5168a3 Kostas Papadimitriou
            if (last_vm > 0){
616 6a5168a3 Kostas Papadimitriou
                last_vm_height = opened_vm_height;
617 6a5168a3 Kostas Papadimitriou
            }
618 6a5168a3 Kostas Papadimitriou
619 6a5168a3 Kostas Papadimitriou
            var vms_opened = this.$(".network-machine .cont-toggler.open").length;
620 6a5168a3 Kostas Papadimitriou
            var vms_closed = this.$(".network-machine").length - vms_opened;
621 6a5168a3 Kostas Papadimitriou
622 6a5168a3 Kostas Papadimitriou
            var calc_height = (vms_opened * opened_vm_height) + (vms_closed * closed_vm_height) + additional_height; 
623 6a5168a3 Kostas Papadimitriou
            var bgpos = imgheight - calc_height + last_vm_height - 30;
624 8c923194 Kostas Papadimitriou
            this.$(".network-contents").css({'background-position':'33px ' + (-bgpos) + 'px'});
625 8c923194 Kostas Papadimitriou
        },
626 8c923194 Kostas Papadimitriou
627 8c923194 Kostas Papadimitriou
628 8d08f18a Kostas Papadimitriou
        init_handlers: function() {
629 8d08f18a Kostas Papadimitriou
            var self = this;
630 8d08f18a Kostas Papadimitriou
631 8d08f18a Kostas Papadimitriou
            this.vms_list_toggler.click(_.bind(function(){
632 8d08f18a Kostas Papadimitriou
                if (this.vms_list.is(":visible")) {
633 8d08f18a Kostas Papadimitriou
                    this.hide_vm_list();
634 8d08f18a Kostas Papadimitriou
                } else {
635 6a5168a3 Kostas Papadimitriou
                    this.fix_left_border();
636 8d08f18a Kostas Papadimitriou
                    this.show_vm_list();
637 8d08f18a Kostas Papadimitriou
                }
638 8d08f18a Kostas Papadimitriou
639 8d08f18a Kostas Papadimitriou
                this.check_empty_vms();
640 8d08f18a Kostas Papadimitriou
            }, this));
641 8d08f18a Kostas Papadimitriou
642 8d08f18a Kostas Papadimitriou
            this.$(".action-add").click(_.bind(function(e){
643 8d08f18a Kostas Papadimitriou
                e.preventDefault();
644 101e6604 Kostas Papadimitriou
                this.network.get("actions").remove("destroy");
645 8d08f18a Kostas Papadimitriou
                this.show_connect_vms();
646 8d08f18a Kostas Papadimitriou
            }, this))
647 8d08f18a Kostas Papadimitriou
648 8d08f18a Kostas Papadimitriou
            this.$(".add-icon").click(_.bind(function(e){
649 8d08f18a Kostas Papadimitriou
                e.preventDefault();
650 8d08f18a Kostas Papadimitriou
                this.show_connect_vms();
651 8d08f18a Kostas Papadimitriou
            }, this))
652 8d08f18a Kostas Papadimitriou
653 8d08f18a Kostas Papadimitriou
            this.$(".net-actions .destroy a").click(_.bind(function(e){
654 8d08f18a Kostas Papadimitriou
                e.preventDefault();
655 101e6604 Kostas Papadimitriou
                self.network.get("actions").add("destroy");
656 101e6604 Kostas Papadimitriou
                self.network.get("actions").remove_all("disconnect");
657 8d08f18a Kostas Papadimitriou
            }, this));
658 8d08f18a Kostas Papadimitriou
659 101e6604 Kostas Papadimitriou
            self.network.bind("change:actions", _.bind(function(net, action) {
660 101e6604 Kostas Papadimitriou
                if (this.network.get("actions").contains("destroy")) {
661 101e6604 Kostas Papadimitriou
                    this.confirm_destroy();
662 101e6604 Kostas Papadimitriou
                } else {
663 101e6604 Kostas Papadimitriou
                    this.cancel_destroy();
664 101e6604 Kostas Papadimitriou
                }
665 101e6604 Kostas Papadimitriou
            }, this))
666 101e6604 Kostas Papadimitriou
667 8d08f18a Kostas Papadimitriou
            this.$(".net-actions button.no").click(function(e){
668 8d08f18a Kostas Papadimitriou
                e.preventDefault();
669 101e6604 Kostas Papadimitriou
                self.network.get("actions").remove("destroy");
670 8d08f18a Kostas Papadimitriou
            });
671 8d08f18a Kostas Papadimitriou
672 8d08f18a Kostas Papadimitriou
            this.$(".net-actions button.yes").click(function(e){
673 8d08f18a Kostas Papadimitriou
                e.preventDefault();
674 8d08f18a Kostas Papadimitriou
                var el = $(this);
675 8d08f18a Kostas Papadimitriou
                el.closest(".confirm_single").hide();
676 8d08f18a Kostas Papadimitriou
                el.parent().parent().find(".selected").removeClass("selected");
677 101e6604 Kostas Papadimitriou
                self.network.call('destroy', {}, function(){
678 8d08f18a Kostas Papadimitriou
                    el.closest(".confirm_single").removeClass("in-progress");
679 8d08f18a Kostas Papadimitriou
                });
680 8d08f18a Kostas Papadimitriou
                el.closest(".confirm_single").addClass("in-progress");
681 8d08f18a Kostas Papadimitriou
            });
682 8d08f18a Kostas Papadimitriou
683 8d08f18a Kostas Papadimitriou
            snf.ui.main.bind("view:change", _.bind(function(v) {
684 8d08f18a Kostas Papadimitriou
                if (v == "networks" ){ return }
685 8d08f18a Kostas Papadimitriou
                this.$(".confirm_single").hide();
686 8d08f18a Kostas Papadimitriou
                this.$("a.selected").removeClass("selected");
687 8d08f18a Kostas Papadimitriou
            }, this));
688 8c923194 Kostas Papadimitriou
689 8c923194 Kostas Papadimitriou
            $(window).bind("resize", _.bind(function() {
690 8c923194 Kostas Papadimitriou
                this.fix_left_border();
691 8c923194 Kostas Papadimitriou
            }, this));
692 8d08f18a Kostas Papadimitriou
        },
693 8d08f18a Kostas Papadimitriou
694 8d08f18a Kostas Papadimitriou
        show_connect_vms: function() {
695 8d08f18a Kostas Papadimitriou
            this.$(".confirm_single").hide();
696 8d08f18a Kostas Papadimitriou
            this.$("a.selected").removeClass("selected");
697 8d08f18a Kostas Papadimitriou
            var vms = this.network.get_connectable_vms();
698 8d08f18a Kostas Papadimitriou
            this.parent_view.connect_machines_view.show_vms(this.network,
699 8d08f18a Kostas Papadimitriou
                                                            vms, [], 
700 8d08f18a Kostas Papadimitriou
                                                            _.bind(this.connect_vms, this));
701 8d08f18a Kostas Papadimitriou
        },
702 8d08f18a Kostas Papadimitriou
703 101e6604 Kostas Papadimitriou
        cancel_destroy: function() {
704 101e6604 Kostas Papadimitriou
            this.$(".net-actions .destroy .confirm_single").hide();
705 101e6604 Kostas Papadimitriou
            this.$(".net-actions .destroy a.selected").removeClass("selected");
706 101e6604 Kostas Papadimitriou
            this.$(".net-actions a").removeClass("visible");
707 101e6604 Kostas Papadimitriou
        },
708 101e6604 Kostas Papadimitriou
709 8d08f18a Kostas Papadimitriou
        confirm_destroy: function() {
710 8d08f18a Kostas Papadimitriou
            this.$(".destroy .confirm_single").show();
711 8d08f18a Kostas Papadimitriou
            this.$(".destroy a").addClass("selected");
712 101e6604 Kostas Papadimitriou
            this.$(".net-actions a").addClass("visible");
713 8d08f18a Kostas Papadimitriou
        },
714 8d08f18a Kostas Papadimitriou
715 8d08f18a Kostas Papadimitriou
        connect_vms: function(vms) {
716 8d08f18a Kostas Papadimitriou
            _.each(vms, _.bind(function(vm){
717 8d08f18a Kostas Papadimitriou
                this.network.add_vm(vm);
718 8d08f18a Kostas Papadimitriou
            }, this));
719 8d08f18a Kostas Papadimitriou
720 8d08f18a Kostas Papadimitriou
            this.parent_view.connect_machines_view.hide();
721 8d08f18a Kostas Papadimitriou
        },
722 8d08f18a Kostas Papadimitriou
723 8d08f18a Kostas Papadimitriou
        create_el: function() {
724 8d08f18a Kostas Papadimitriou
            var el = this.$(this.tpl).clone().attr("id", "network-" + this.network.id)
725 8d08f18a Kostas Papadimitriou
            return el;
726 8d08f18a Kostas Papadimitriou
        },
727 8d08f18a Kostas Papadimitriou
728 8d08f18a Kostas Papadimitriou
        init_vm_handlers: function() {
729 8d08f18a Kostas Papadimitriou
            storage.vms.bind("add", _.bind(this.vm_added_handler, this, "add"));
730 8d08f18a Kostas Papadimitriou
            storage.vms.bind("network:connect", _.bind(this.vm_changed_handler, this, "connect"));
731 8d08f18a Kostas Papadimitriou
            storage.vms.bind("change", _.bind(this.vm_changed_handler, this, "change"));
732 8d08f18a Kostas Papadimitriou
            storage.vms.bind("reset", _.bind(this.vm_changed_handler, this, "reset"));
733 8d08f18a Kostas Papadimitriou
            storage.vms.bind("remove", _.bind(this.vm_removed_handler, this, "remove"));
734 8d08f18a Kostas Papadimitriou
            storage.vms.bind("network:disconnect", _.bind(this.vm_removed_handler, this, "disconnect"));
735 8d08f18a Kostas Papadimitriou
        },
736 8d08f18a Kostas Papadimitriou
737 8d08f18a Kostas Papadimitriou
        get_vm_id: function(vm) {
738 8d08f18a Kostas Papadimitriou
            return this.vm_id_tpl.format(this.network.id, vm.id)
739 8d08f18a Kostas Papadimitriou
        },
740 8d08f18a Kostas Papadimitriou
741 8d08f18a Kostas Papadimitriou
        vm: function(vm) {
742 8d08f18a Kostas Papadimitriou
            return $(this.get_vm_id(vm))
743 8d08f18a Kostas Papadimitriou
        },
744 8d08f18a Kostas Papadimitriou
745 8d08f18a Kostas Papadimitriou
        vm_added_handler: function(action, vm) {
746 8d08f18a Kostas Papadimitriou
            if (!this.network.contains_vm(vm)) { return }
747 8d08f18a Kostas Papadimitriou
            this.add_or_update_vm(vm);
748 8d08f18a Kostas Papadimitriou
            this.update_layout();
749 6a5168a3 Kostas Papadimitriou
            this.fix_left_border();
750 8d08f18a Kostas Papadimitriou
        },
751 8d08f18a Kostas Papadimitriou
752 8d08f18a Kostas Papadimitriou
        vm_changed_handler: function(action, vms, model, changes) {
753 8d08f18a Kostas Papadimitriou
            var vms = vms || [];
754 8d08f18a Kostas Papadimitriou
            // reset or change
755 8d08f18a Kostas Papadimitriou
            if (action == "reset") {
756 8d08f18a Kostas Papadimitriou
                vms = vms;
757 8d08f18a Kostas Papadimitriou
            } else {
758 8d08f18a Kostas Papadimitriou
                if (!_.isArray(vms)) {
759 8d08f18a Kostas Papadimitriou
                    vms = [vms]
760 8d08f18a Kostas Papadimitriou
                }
761 8d08f18a Kostas Papadimitriou
            }
762 8d08f18a Kostas Papadimitriou
763 8d08f18a Kostas Papadimitriou
            if (action == "connect") {
764 8d08f18a Kostas Papadimitriou
                vms = [model];
765 8d08f18a Kostas Papadimitriou
            }
766 8d08f18a Kostas Papadimitriou
            
767 8d08f18a Kostas Papadimitriou
            _.each(vms, _.bind(function(vm) {
768 8d08f18a Kostas Papadimitriou
                if (!this.network.contains_vm(vm)) { return }
769 8d08f18a Kostas Papadimitriou
                this.add_or_update_vm(vm);
770 8d08f18a Kostas Papadimitriou
            }, this));
771 8d08f18a Kostas Papadimitriou
            this.update_layout();
772 8d08f18a Kostas Papadimitriou
        },
773 8d08f18a Kostas Papadimitriou
774 8d08f18a Kostas Papadimitriou
        vm_removed_handler: function(action, vm, model) {
775 8d08f18a Kostas Papadimitriou
            if (action == "disconnect") { vm = model };
776 6a5168a3 Kostas Papadimitriou
            this.fix_left_border();
777 8d08f18a Kostas Papadimitriou
            this.remove_vm(vm);
778 8d08f18a Kostas Papadimitriou
            this.update_layout();
779 8d08f18a Kostas Papadimitriou
        },
780 8d08f18a Kostas Papadimitriou
781 8d08f18a Kostas Papadimitriou
        remove_vm: function(vm) {
782 8d08f18a Kostas Papadimitriou
            if (this.vm(vm).length) {
783 8d08f18a Kostas Papadimitriou
                this.vm(vm).remove();
784 8d08f18a Kostas Papadimitriou
                try {
785 8d08f18a Kostas Papadimitriou
                    delete this.vm_views[vm.id]
786 8d08f18a Kostas Papadimitriou
                } catch (err) {
787 8d08f18a Kostas Papadimitriou
                }
788 8d08f18a Kostas Papadimitriou
            }
789 8d08f18a Kostas Papadimitriou
        },
790 8c923194 Kostas Papadimitriou
        
791 8c923194 Kostas Papadimitriou
        create_vm: function(vm) {
792 8c923194 Kostas Papadimitriou
            vm_el = $(this.vm_tpl).clone().attr({id:this.get_vm_id(vm).replace("#","")});
793 8c923194 Kostas Papadimitriou
            this.vms_list.append(vm_el);
794 8c923194 Kostas Papadimitriou
            this.post_vm_add(vm);
795 8c923194 Kostas Papadimitriou
796 8c923194 Kostas Papadimitriou
            if (!this.vm_views[vm.id]) {
797 8c923194 Kostas Papadimitriou
                vm_view = this.vm_views[vm.id] = new views.NetworkVMView(vm, this, this.firewall, vm_el);
798 8c923194 Kostas Papadimitriou
            }
799 8c923194 Kostas Papadimitriou
        },
800 8d08f18a Kostas Papadimitriou
801 8d08f18a Kostas Papadimitriou
        add_or_update_vm: function(vm) {
802 8d08f18a Kostas Papadimitriou
            if (!vm || !this.network.contains_vm(vm)) { return };
803 8d08f18a Kostas Papadimitriou
804 8d08f18a Kostas Papadimitriou
            var vm_el = this.vm(vm);
805 8d08f18a Kostas Papadimitriou
            var vm_view = this.vm_views[vm.id];
806 8d08f18a Kostas Papadimitriou
807 8d08f18a Kostas Papadimitriou
            if (vm_el.length == 0) {
808 8c923194 Kostas Papadimitriou
                this.create_vm(vm);
809 8d08f18a Kostas Papadimitriou
            }
810 8d08f18a Kostas Papadimitriou
            
811 8d08f18a Kostas Papadimitriou
            if (vm_view) { vm_view.update_layout() };
812 8d08f18a Kostas Papadimitriou
813 8d08f18a Kostas Papadimitriou
            this.update_vm(vm);
814 8d08f18a Kostas Papadimitriou
            this.post_vm_update(vm);
815 8d08f18a Kostas Papadimitriou
        },
816 8d08f18a Kostas Papadimitriou
        update_vm: function(vm){},
817 8d08f18a Kostas Papadimitriou
        post_vm_add: function(vm){},
818 8d08f18a Kostas Papadimitriou
        post_vm_update: function(vm){},
819 8d08f18a Kostas Papadimitriou
820 8d08f18a Kostas Papadimitriou
        update_vms: function(vms) {
821 8d08f18a Kostas Papadimitriou
            if (!vms) { vms = this.network.vms.list() };
822 8d08f18a Kostas Papadimitriou
            _.each(vms, _.bind(function(vm){
823 8d08f18a Kostas Papadimitriou
                this.add_or_update_vm(vm);
824 8d08f18a Kostas Papadimitriou
            }, this));
825 8d08f18a Kostas Papadimitriou
        },
826 8d08f18a Kostas Papadimitriou
827 8d08f18a Kostas Papadimitriou
        check_empty_vms: function() {
828 8d08f18a Kostas Papadimitriou
            if (this.network.vms.get().length == 0) {
829 8d08f18a Kostas Papadimitriou
                this.hide_vm_list();
830 8d08f18a Kostas Papadimitriou
            }
831 8d08f18a Kostas Papadimitriou
        },
832 8d08f18a Kostas Papadimitriou
833 8d08f18a Kostas Papadimitriou
        vms_empty: function() {
834 8d08f18a Kostas Papadimitriou
            return this.network.vms.get().length == 0;
835 8d08f18a Kostas Papadimitriou
        },
836 8d08f18a Kostas Papadimitriou
837 8d08f18a Kostas Papadimitriou
        remove: function() {
838 8d08f18a Kostas Papadimitriou
            $(this.el).remove();
839 8d08f18a Kostas Papadimitriou
        },
840 8d08f18a Kostas Papadimitriou
841 8d08f18a Kostas Papadimitriou
        update_layout: function() {
842 8d08f18a Kostas Papadimitriou
            // has vms ???
843 8d08f18a Kostas Papadimitriou
            this.check_empty_vms(this.network.vms.list());
844 8d08f18a Kostas Papadimitriou
845 8d08f18a Kostas Papadimitriou
            // is expanded ???
846 8d08f18a Kostas Papadimitriou
            //
847 8d08f18a Kostas Papadimitriou
            // whats the network status ???
848 8d08f18a Kostas Papadimitriou
            //
849 8d08f18a Kostas Papadimitriou
            this.$(".machines-count").text(this.network.vms.get().length);
850 8d08f18a Kostas Papadimitriou
851 8d08f18a Kostas Papadimitriou
            var net_name = this.network.get("name");
852 8d08f18a Kostas Papadimitriou
            if (net_name == "public") { net_name = "Internet" }
853 8d08f18a Kostas Papadimitriou
            this.$(".name-div span.name").text(net_name);
854 8d08f18a Kostas Papadimitriou
855 8d08f18a Kostas Papadimitriou
            if (this.rename_view) {
856 8d08f18a Kostas Papadimitriou
                this.rename_view.update_layout();
857 8d08f18a Kostas Papadimitriou
            }
858 8d08f18a Kostas Papadimitriou
            
859 8d08f18a Kostas Papadimitriou
            this.$(".net-status").text(this.network.state_message());
860 8d08f18a Kostas Papadimitriou
861 8d08f18a Kostas Papadimitriou
            if (this.network.in_progress())  {
862 8d08f18a Kostas Papadimitriou
                this.$(".spinner").show();
863 8d08f18a Kostas Papadimitriou
                this.$(".network-indicator").addClass("in-progress");
864 8d08f18a Kostas Papadimitriou
            } else {
865 8d08f18a Kostas Papadimitriou
                this.$(".spinner").hide();
866 8d08f18a Kostas Papadimitriou
                this.$(".network-indicator").removeClass("in-progress");
867 8d08f18a Kostas Papadimitriou
            }
868 25b225a5 Kostas Papadimitriou
869 25b225a5 Kostas Papadimitriou
            if (this.network.get("state") == "DESTROY") {
870 25b225a5 Kostas Papadimitriou
                this.$(".spinner").show();
871 25b225a5 Kostas Papadimitriou
                this.$(".state").addClass("destroying-state");
872 25b225a5 Kostas Papadimitriou
            }
873 8d08f18a Kostas Papadimitriou
        }
874 8d08f18a Kostas Papadimitriou
    })
875 8d08f18a Kostas Papadimitriou
876 8d08f18a Kostas Papadimitriou
    views.PublicNetworkView = views.NetworkModelView.extend({
877 8d08f18a Kostas Papadimitriou
        firewall: true,
878 8d08f18a Kostas Papadimitriou
        tpl: "#public-template",
879 8d08f18a Kostas Papadimitriou
        vm_tpl: "#public-machine-template",
880 8d08f18a Kostas Papadimitriou
        vm_id_tpl: "#network-{0}-vm-{1}",
881 8d08f18a Kostas Papadimitriou
882 8d08f18a Kostas Papadimitriou
        update_vm: function(vm) {
883 8d08f18a Kostas Papadimitriou
        }
884 8d08f18a Kostas Papadimitriou
    })
885 8d08f18a Kostas Papadimitriou
    
886 8d08f18a Kostas Papadimitriou
    views.PrivateNetworkView = views.NetworkModelView.extend({
887 8d08f18a Kostas Papadimitriou
        tpl: "#private-template",
888 8d08f18a Kostas Papadimitriou
        vm_tpl: "#private-machine-template",
889 8d08f18a Kostas Papadimitriou
        vm_id_tpl: "#network-{0}-vm-{1}"
890 8d08f18a Kostas Papadimitriou
    })
891 8d08f18a Kostas Papadimitriou
892 8d08f18a Kostas Papadimitriou
    views.NetworksView = views.View.extend({
893 8d08f18a Kostas Papadimitriou
        
894 8d08f18a Kostas Papadimitriou
        view_id: "networks",
895 8d08f18a Kostas Papadimitriou
        pane: "#networks-pane",
896 8d08f18a Kostas Papadimitriou
        el: "#networks-pane",
897 8d08f18a Kostas Papadimitriou
898 8d08f18a Kostas Papadimitriou
        initialize: function() {
899 8d08f18a Kostas Papadimitriou
            // elements shortcuts
900 8d08f18a Kostas Papadimitriou
            this.create_cont = this.$("#networks-createcontainer");
901 8d08f18a Kostas Papadimitriou
            this.container = this.$("#networks-container");
902 8d08f18a Kostas Papadimitriou
            this.public_list = this.$(".public-networks");
903 8d08f18a Kostas Papadimitriou
            this.private_list = this.$(".private-networks");
904 8d08f18a Kostas Papadimitriou
905 8d08f18a Kostas Papadimitriou
            views.NetworksView.__super__.initialize.call(this);
906 8d08f18a Kostas Papadimitriou
            this.init_handlers();
907 8d08f18a Kostas Papadimitriou
            this.network_views = {};
908 8d08f18a Kostas Papadimitriou
            this.update_networks(storage.networks.models);
909 8d08f18a Kostas Papadimitriou
910 8d08f18a Kostas Papadimitriou
            this.create_view = new views.NetworkCreateView();
911 8d08f18a Kostas Papadimitriou
            this.connect_machines_view = new views.NetworkConnectVMsOverlay();
912 6a5168a3 Kostas Papadimitriou
913 8d08f18a Kostas Papadimitriou
        },
914 8d08f18a Kostas Papadimitriou
        
915 8d08f18a Kostas Papadimitriou
        exists: function(net) {
916 8d08f18a Kostas Papadimitriou
            return this.network_views[net.id];
917 8d08f18a Kostas Papadimitriou
        },
918 8d08f18a Kostas Papadimitriou
919 8d08f18a Kostas Papadimitriou
        add_or_update: function(net) {
920 8d08f18a Kostas Papadimitriou
            var nv = this.exists(net);
921 8d08f18a Kostas Papadimitriou
            if (!nv) {
922 8d08f18a Kostas Papadimitriou
                nv = this.create_network_view(net)
923 8d08f18a Kostas Papadimitriou
                this.network_views[net.id] = nv;
924 8d08f18a Kostas Papadimitriou
                
925 8d08f18a Kostas Papadimitriou
                if (net.is_public()) {
926 8d08f18a Kostas Papadimitriou
                    this.public_list.append(nv.el);
927 8d08f18a Kostas Papadimitriou
                    this.public_list.show();
928 8d08f18a Kostas Papadimitriou
                } else {
929 8d08f18a Kostas Papadimitriou
                    this.private_list.append(nv.el);
930 8d08f18a Kostas Papadimitriou
                    this.private_list.show();
931 8d08f18a Kostas Papadimitriou
                }
932 8d08f18a Kostas Papadimitriou
            }
933 8d08f18a Kostas Papadimitriou
934 8d08f18a Kostas Papadimitriou
            // update vms
935 8d08f18a Kostas Papadimitriou
            // for cases where network servers list
936 8d08f18a Kostas Papadimitriou
            // get updated after vm addition and
937 8d08f18a Kostas Papadimitriou
            // vm_added_handler fails to append the
938 8d08f18a Kostas Papadimitriou
            // vm to the list
939 8d08f18a Kostas Papadimitriou
            nv.update_vms();
940 8d08f18a Kostas Papadimitriou
            nv.update_layout();
941 8d08f18a Kostas Papadimitriou
        },
942 8d08f18a Kostas Papadimitriou
        
943 8d08f18a Kostas Papadimitriou
        create_network_view: function(net) {
944 8d08f18a Kostas Papadimitriou
            if (net.is_public()) {
945 8d08f18a Kostas Papadimitriou
                return new views.PublicNetworkView(net, this);
946 8d08f18a Kostas Papadimitriou
            }
947 8d08f18a Kostas Papadimitriou
            return new views.PrivateNetworkView(net, this);
948 8d08f18a Kostas Papadimitriou
        },
949 8d08f18a Kostas Papadimitriou
        
950 8d08f18a Kostas Papadimitriou
        init_handlers: function() {
951 8d08f18a Kostas Papadimitriou
            storage.networks.bind("add", _.bind(this.network_added_handler, this, "add"));
952 8d08f18a Kostas Papadimitriou
            storage.networks.bind("change", _.bind(this.network_changed_handler, this, "change"));
953 8d08f18a Kostas Papadimitriou
            storage.networks.bind("reset", _.bind(this.network_changed_handler, this, "reset"));
954 8d08f18a Kostas Papadimitriou
            storage.networks.bind("remove", _.bind(this.network_removed_handler, this, "remove"));
955 8d08f18a Kostas Papadimitriou
956 8d08f18a Kostas Papadimitriou
            this.$("#networkscreate").click(_.bind(function(e){
957 8d08f18a Kostas Papadimitriou
                e.preventDefault();
958 8d08f18a Kostas Papadimitriou
                this.create_view.show();
959 8d08f18a Kostas Papadimitriou
            }, this));
960 8d08f18a Kostas Papadimitriou
            
961 8d08f18a Kostas Papadimitriou
        },
962 8d08f18a Kostas Papadimitriou
963 8d08f18a Kostas Papadimitriou
        update_networks: function(nets) {
964 8d08f18a Kostas Papadimitriou
            _.each(nets, _.bind(function(net){
965 8d08f18a Kostas Papadimitriou
                if (net.get("status") == "DELETED") { return }
966 8d08f18a Kostas Papadimitriou
                view = this.add_or_update(net);
967 8d08f18a Kostas Papadimitriou
            }, this));
968 8d08f18a Kostas Papadimitriou
        },
969 8d08f18a Kostas Papadimitriou
970 8d08f18a Kostas Papadimitriou
        show: function() {
971 8d08f18a Kostas Papadimitriou
            this.container.show();
972 8d08f18a Kostas Papadimitriou
            $(this.el).show();
973 8d08f18a Kostas Papadimitriou
        },
974 8d08f18a Kostas Papadimitriou
975 8d08f18a Kostas Papadimitriou
        network_added_handler: function(type, net) {
976 8d08f18a Kostas Papadimitriou
            this.update_networks([net]);
977 8d08f18a Kostas Papadimitriou
        },
978 8d08f18a Kostas Papadimitriou
979 8d08f18a Kostas Papadimitriou
        network_changed_handler: function(type, models) {
980 8d08f18a Kostas Papadimitriou
            var nets = [];
981 8d08f18a Kostas Papadimitriou
            if (type == "change") {
982 8d08f18a Kostas Papadimitriou
                nets = [models]
983 8d08f18a Kostas Papadimitriou
            } else {
984 8d08f18a Kostas Papadimitriou
                nets = models.models;
985 8d08f18a Kostas Papadimitriou
            }
986 8d08f18a Kostas Papadimitriou
987 8d08f18a Kostas Papadimitriou
            this.update_networks(nets)
988 8d08f18a Kostas Papadimitriou
        },
989 8d08f18a Kostas Papadimitriou
990 8d08f18a Kostas Papadimitriou
        network_removed_handler: function(type, net) {
991 8d08f18a Kostas Papadimitriou
            this.remove_net(net)
992 8d08f18a Kostas Papadimitriou
            if (this.private_list.find(".network").length == 0) {
993 8d08f18a Kostas Papadimitriou
                this.private_list.hide();
994 8d08f18a Kostas Papadimitriou
            }
995 8d08f18a Kostas Papadimitriou
        },
996 8d08f18a Kostas Papadimitriou
997 8d08f18a Kostas Papadimitriou
        network_added: function(net) {
998 8d08f18a Kostas Papadimitriou
            return this.network_views[net.id];
999 8d08f18a Kostas Papadimitriou
        },
1000 8d08f18a Kostas Papadimitriou
1001 8d08f18a Kostas Papadimitriou
        get_network_view: function(net) {
1002 8d08f18a Kostas Papadimitriou
            return this.network_views[net.id];
1003 8d08f18a Kostas Papadimitriou
        },
1004 8d08f18a Kostas Papadimitriou
1005 8d08f18a Kostas Papadimitriou
        remove_net: function(net) {
1006 8d08f18a Kostas Papadimitriou
            if (this.network_added(net)) {
1007 8d08f18a Kostas Papadimitriou
                var view = this.get_network_view(net);
1008 8d08f18a Kostas Papadimitriou
                view.remove();
1009 8d08f18a Kostas Papadimitriou
                delete this.network_views[net.id];
1010 8d08f18a Kostas Papadimitriou
            }
1011 8d08f18a Kostas Papadimitriou
        },
1012 8d08f18a Kostas Papadimitriou
1013 8d08f18a Kostas Papadimitriou
        __update_layout: function() {
1014 8d08f18a Kostas Papadimitriou
        }
1015 8d08f18a Kostas Papadimitriou
    });
1016 8d08f18a Kostas Papadimitriou
1017 8d08f18a Kostas Papadimitriou
})(this);