Statistics
| Branch: | Tag: | Revision:

root / ui / static / snf / js / ui / web / ui_single_view.js @ c62c6b91

History | View | Annotate | Download (11.8 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 = snf.util || {};
12 8d08f18a Kostas Papadimitriou
13 8d08f18a Kostas Papadimitriou
    var views = snf.views = snf.views || {}
14 8d08f18a Kostas Papadimitriou
15 8d08f18a Kostas Papadimitriou
    // shortcuts
16 8d08f18a Kostas Papadimitriou
    var bb = root.Backbone;
17 75331d54 Kostas Papadimitriou
    var hasKey = Object.prototype.hasOwnProperty;
18 75331d54 Kostas Papadimitriou
19 8d08f18a Kostas Papadimitriou
    views.SingleDetailsView = views.VMDetailsView.extend({
20 8d08f18a Kostas Papadimitriou
    
21 8d08f18a Kostas Papadimitriou
        view_id: "vm_details_single",
22 8d08f18a Kostas Papadimitriou
        el_sel: '.machine-details',
23 8d08f18a Kostas Papadimitriou
        
24 8d08f18a Kostas Papadimitriou
        selectors: {
25 8d08f18a Kostas Papadimitriou
            'cpu': '.machine-detail.cpus',
26 8d08f18a Kostas Papadimitriou
            'ram': '.machine-detail.ram',
27 8d08f18a Kostas Papadimitriou
            'disk': '.machine-detail.disk',
28 8d08f18a Kostas Papadimitriou
            'image_name': '.machine-detail.image-name',
29 8d08f18a Kostas Papadimitriou
            'image_size': '.machine-detail.image-size'
30 8d08f18a Kostas Papadimitriou
        }
31 8d08f18a Kostas Papadimitriou
    
32 8d08f18a Kostas Papadimitriou
    })
33 8d08f18a Kostas Papadimitriou
34 8d08f18a Kostas Papadimitriou
    // VMs single view
35 8d08f18a Kostas Papadimitriou
    views.SingleView = views.VMListView.extend({
36 8d08f18a Kostas Papadimitriou
        
37 8d08f18a Kostas Papadimitriou
        // view id (this could be used to identify 
38 8d08f18a Kostas Papadimitriou
        // the view object from global context
39 8d08f18a Kostas Papadimitriou
        view_id: 'vm_single',
40 8d08f18a Kostas Papadimitriou
41 8d08f18a Kostas Papadimitriou
        el: '#machinesview-single',
42 23a3bb8e Kostas Papadimitriou
        id_tpl: 'single-vm-',
43 23a3bb8e Kostas Papadimitriou
        link_id_tpl: 'single-vm-at-',
44 8d08f18a Kostas Papadimitriou
45 8d08f18a Kostas Papadimitriou
        hide_actions: false,
46 8d08f18a Kostas Papadimitriou
47 8d08f18a Kostas Papadimitriou
        selectors: {
48 8d08f18a Kostas Papadimitriou
            'vms': '.single-container',
49 75331d54 Kostas Papadimitriou
            'vm': '#single-vm-',
50 8d08f18a Kostas Papadimitriou
            'view': '#machinesview-single',
51 23a3bb8e Kostas Papadimitriou
            'tpl': 'div.single-container#machine-container-template',
52 8d08f18a Kostas Papadimitriou
            'spinner': '.large-spinner',
53 75331d54 Kostas Papadimitriou
            'vm_spinner': '#single-vm-{0} .state .spinner',
54 75331d54 Kostas Papadimitriou
            'vm_wave': '#single-vm-{0} img.wave',
55 8d08f18a Kostas Papadimitriou
            'vm_cont_active': '#machinesview-single',
56 8d08f18a Kostas Papadimitriou
            'vm_cont_terminated': '#machinesview-single'
57 8d08f18a Kostas Papadimitriou
        },
58 8d08f18a Kostas Papadimitriou
        
59 8d08f18a Kostas Papadimitriou
        initialize: function() {
60 8d08f18a Kostas Papadimitriou
            this.current_vm = 0;
61 8d08f18a Kostas Papadimitriou
            
62 8d08f18a Kostas Papadimitriou
            // button selectors
63 8d08f18a Kostas Papadimitriou
            this.prev_button = this.$(".controls .previous");
64 8d08f18a Kostas Papadimitriou
            this.next_button = this.$(".controls .next");
65 8d08f18a Kostas Papadimitriou
            this.menu = $("#single-servers-list");
66 8d08f18a Kostas Papadimitriou
67 8d08f18a Kostas Papadimitriou
            views.SingleView.__super__.initialize.apply(this, arguments);
68 c343513e Kostas Papadimitriou
            this.update_current_vm();
69 8d08f18a Kostas Papadimitriou
        },
70 8d08f18a Kostas Papadimitriou
71 8d08f18a Kostas Papadimitriou
        // overload show function
72 2ab5aa9a Kostas Papadimitriou
        show: function() {
73 2ab5aa9a Kostas Papadimitriou
            views.SingleView.__super__.show.apply(this, arguments);
74 8d08f18a Kostas Papadimitriou
            this.log.debug("showing");
75 8d08f18a Kostas Papadimitriou
            this.$(".column3").show();
76 2ab5aa9a Kostas Papadimitriou
            this.show_vm_menu();
77 2ab5aa9a Kostas Papadimitriou
            this.show_current();
78 8d08f18a Kostas Papadimitriou
        },
79 8d08f18a Kostas Papadimitriou
80 8d08f18a Kostas Papadimitriou
        show_vm: function(vm) {
81 513eafb4 Kostas Papadimitriou
            if (!vm) { return };
82 8d08f18a Kostas Papadimitriou
            this.current_vm_instance = vm;
83 8d08f18a Kostas Papadimitriou
            this.show_vm_menu();
84 8d08f18a Kostas Papadimitriou
            this.show_current();
85 8d08f18a Kostas Papadimitriou
            this.update_layout();
86 8d08f18a Kostas Papadimitriou
        },
87 8d08f18a Kostas Papadimitriou
88 8d08f18a Kostas Papadimitriou
        // identify vm model instance id based on DOM element
89 8d08f18a Kostas Papadimitriou
        vm_id_for_element: function(el) {
90 8d08f18a Kostas Papadimitriou
            return el.attr('id').replace("single-vm-", "");
91 8d08f18a Kostas Papadimitriou
        },
92 8d08f18a Kostas Papadimitriou
        
93 8d08f18a Kostas Papadimitriou
        // set generic view handlers
94 8d08f18a Kostas Papadimitriou
        set_handlers: function() {
95 8d08f18a Kostas Papadimitriou
            this.prev_button.click(_.bind(function(ev){
96 122850c5 Kostas Papadimitriou
                storage.vms.reset_pending_actions();
97 8d08f18a Kostas Papadimitriou
                ev.preventDefault();
98 8d08f18a Kostas Papadimitriou
                this.show_prev();
99 8d08f18a Kostas Papadimitriou
            }, this));
100 8d08f18a Kostas Papadimitriou
101 8d08f18a Kostas Papadimitriou
            this.next_button.click(_.bind(function(ev){
102 122850c5 Kostas Papadimitriou
                storage.vms.reset_pending_actions();
103 8d08f18a Kostas Papadimitriou
                ev.preventDefault();
104 8d08f18a Kostas Papadimitriou
                this.show_next();
105 8d08f18a Kostas Papadimitriou
            }, this));
106 8d08f18a Kostas Papadimitriou
        },  
107 8d08f18a Kostas Papadimitriou
108 8d08f18a Kostas Papadimitriou
        update_current_vm: function() {
109 8d08f18a Kostas Papadimitriou
            try {
110 8d08f18a Kostas Papadimitriou
                this.current_vm_instance = storage.vms.at(this.current_vm);
111 1f7ea2f5 Kostas Papadimitriou
                this.current_vm_instance.start_stats_update(true);
112 2c9bfad1 Kostas Papadimitriou
                storage.vms.stop_stats_update([this.current_vm_instance]);
113 8d08f18a Kostas Papadimitriou
            } catch (err) {
114 8d08f18a Kostas Papadimitriou
                this.log.debug("Cannot select current vm instance for: {0}".format(this.current_vm));
115 643de8c0 Kostas Papadimitriou
                this.current_vm_instance = undefined;
116 643de8c0 Kostas Papadimitriou
                this.current_vm = 0;
117 8d08f18a Kostas Papadimitriou
            }
118 8d08f18a Kostas Papadimitriou
        },
119 8d08f18a Kostas Papadimitriou
120 8d08f18a Kostas Papadimitriou
        show_next: function() {
121 8d08f18a Kostas Papadimitriou
            this.current_vm++;
122 404ccab2 Kostas Papadimitriou
            if (this.current_vm >= storage.vms.models.length) {
123 8d08f18a Kostas Papadimitriou
                this.current_vm = 0;
124 8d08f18a Kostas Papadimitriou
            }
125 404ccab2 Kostas Papadimitriou
126 8d08f18a Kostas Papadimitriou
            this.update_current_vm();
127 404ccab2 Kostas Papadimitriou
            this.show_current();
128 8d08f18a Kostas Papadimitriou
            this.__update_layout();
129 8d08f18a Kostas Papadimitriou
        },
130 8d08f18a Kostas Papadimitriou
131 8d08f18a Kostas Papadimitriou
        show_prev: function() {
132 8d08f18a Kostas Papadimitriou
            this.current_vm--;
133 8d08f18a Kostas Papadimitriou
            if (this.current_vm < 0) {
134 8d08f18a Kostas Papadimitriou
                this.current_vm = storage.vms.length - 1;
135 8d08f18a Kostas Papadimitriou
            }
136 8d08f18a Kostas Papadimitriou
            this.update_current_vm();
137 404ccab2 Kostas Papadimitriou
            this.show_current();
138 8d08f18a Kostas Papadimitriou
            this.__update_layout();
139 8d08f18a Kostas Papadimitriou
        },
140 8d08f18a Kostas Papadimitriou
141 8d08f18a Kostas Papadimitriou
        post_remove_vm: function(vm) {
142 8d08f18a Kostas Papadimitriou
            // current vm removed or does not exist after an update
143 8d08f18a Kostas Papadimitriou
            this.show_vm_menu();
144 8d08f18a Kostas Papadimitriou
            if (!this.current_vm_instance || this.current_vm_instance.id == vm.id) {
145 8d08f18a Kostas Papadimitriou
                this.show_next();
146 8d08f18a Kostas Papadimitriou
            } else {
147 8d08f18a Kostas Papadimitriou
                this.show_current();
148 8d08f18a Kostas Papadimitriou
            }
149 8d08f18a Kostas Papadimitriou
        },
150 8d08f18a Kostas Papadimitriou
        
151 8d08f18a Kostas Papadimitriou
        // stuff to do when a new vm has been created.
152 8d08f18a Kostas Papadimitriou
        // - create vm subviews
153 8d08f18a Kostas Papadimitriou
        post_add: function(vm) {
154 2ab5aa9a Kostas Papadimitriou
            this.show_vm_menu();
155 2ab5aa9a Kostas Papadimitriou
            this.show_current();
156 2ab5aa9a Kostas Papadimitriou
157 8d08f18a Kostas Papadimitriou
            // rename views index
158 8d08f18a Kostas Papadimitriou
            this.stats_views = this.stats_views || {};
159 8d08f18a Kostas Papadimitriou
            this.connect_views = this.connect_views || {};
160 8d08f18a Kostas Papadimitriou
            this.tags_views = this.tags_views || {};
161 8d08f18a Kostas Papadimitriou
            this.details_views = this.details_views || {};
162 8d08f18a Kostas Papadimitriou
            this.action_views = this.action_views || {};
163 6a3a5bf7 Kostas Papadimitriou
            this.action_error_views = this.action_error_views || {};
164 8d08f18a Kostas Papadimitriou
165 8d08f18a Kostas Papadimitriou
            //this.stats_views[vm.id] = new views.IconStatsView(vm, this);
166 8d08f18a Kostas Papadimitriou
167 8d08f18a Kostas Papadimitriou
            // same as icon view
168 8d08f18a Kostas Papadimitriou
            this.action_views[vm.id] = new views.VMActionsView(vm, this, this.vm(vm), this.hide_actions);
169 8d08f18a Kostas Papadimitriou
            this.stats_views[vm.id] = new views.VMStatsView(vm, this, {stats_type: 'series'});
170 550d9733 Kostas Papadimitriou
            this.connect_views[vm.id] = new views.IconVMConnectView(vm, this);
171 8d08f18a Kostas Papadimitriou
            this.tags_views[vm.id] = new views.VMTagsView(vm, this, true, 20, 10, 35);
172 8d08f18a Kostas Papadimitriou
            this.details_views[vm.id] = new views.SingleDetailsView(vm, this);
173 6a3a5bf7 Kostas Papadimitriou
            this.action_error_views[vm.id] = new views.VMActionErrorView(vm, this);
174 44dd6b92 Kostas Papadimitriou
            
175 44dd6b92 Kostas Papadimitriou
            if (storage.vms.models.length > 1) { this.vm(vm).hide(); };
176 8d08f18a Kostas Papadimitriou
        },
177 8d08f18a Kostas Papadimitriou
178 8d08f18a Kostas Papadimitriou
        post_update_vm: function(vm) {
179 8d08f18a Kostas Papadimitriou
        },
180 8d08f18a Kostas Papadimitriou
        
181 8d08f18a Kostas Papadimitriou
        // vm specific event handlers
182 8d08f18a Kostas Papadimitriou
        set_vm_handlers: function(vm) {
183 8d08f18a Kostas Papadimitriou
            var el = this.vm(vm);
184 8d08f18a Kostas Papadimitriou
        },
185 8d08f18a Kostas Papadimitriou
        
186 8d08f18a Kostas Papadimitriou
        // handle selected vm
187 8d08f18a Kostas Papadimitriou
        show_current: function() {
188 8d08f18a Kostas Papadimitriou
            var index = this.current_vm;
189 2ab5aa9a Kostas Papadimitriou
            var vm = storage.vms.at(index);
190 2ab5aa9a Kostas Papadimitriou
191 8d08f18a Kostas Papadimitriou
            this.$(".server-name").removeClass("column3-selected");
192 8d08f18a Kostas Papadimitriou
            
193 2ab5aa9a Kostas Papadimitriou
            if (vm) {
194 2ab5aa9a Kostas Papadimitriou
                this.vm(vm).show();
195 2ab5aa9a Kostas Papadimitriou
            };
196 2ab5aa9a Kostas Papadimitriou
197 2ab5aa9a Kostas Papadimitriou
            _.each(storage.vms.models, function(vmo){
198 2ab5aa9a Kostas Papadimitriou
                if (vm && (vm.id != vmo.id)) {
199 75331d54 Kostas Papadimitriou
                    if (!hasKey.call(this._vm_els, vmo.id)) { return };
200 2ab5aa9a Kostas Papadimitriou
                    this.vm(vmo).hide();
201 2ab5aa9a Kostas Papadimitriou
                }
202 8d08f18a Kostas Papadimitriou
            }, this)
203 8d08f18a Kostas Papadimitriou
204 8d08f18a Kostas Papadimitriou
            if (!vm) {
205 8d08f18a Kostas Papadimitriou
                // empty list
206 8d7e1e38 Kostas Papadimitriou
                this.$(".column3").hide();
207 8d08f18a Kostas Papadimitriou
                return;
208 8d08f18a Kostas Papadimitriou
            }
209 8d7e1e38 Kostas Papadimitriou
            this.$(".column3").show();
210 8d08f18a Kostas Papadimitriou
211 8d08f18a Kostas Papadimitriou
212 23a3bb8e Kostas Papadimitriou
            $("#" + this.link_id_tpl + this.current_vm).addClass("column3-selected");
213 44660f58 Kostas Papadimitriou
            try {
214 44660f58 Kostas Papadimitriou
                this.update_details(vm);
215 44660f58 Kostas Papadimitriou
            } catch (err) {};
216 8d08f18a Kostas Papadimitriou
        },
217 8d08f18a Kostas Papadimitriou
218 8d08f18a Kostas Papadimitriou
        show_vm_menu: function() {
219 8d08f18a Kostas Papadimitriou
            this.menu.find(".server-name").remove();
220 8d08f18a Kostas Papadimitriou
221 8d08f18a Kostas Papadimitriou
            _.each(storage.vms.models, function(vm, index) {
222 23a3bb8e Kostas Papadimitriou
                this.menu.append('<div class="server-name" id="'+this.link_id_tpl + index +'">' + 
223 8d08f18a Kostas Papadimitriou
                               util.truncate(vm.get("name"),16)+'</div>');
224 8d08f18a Kostas Papadimitriou
                if (this.current_vm_instance && vm.id == this.current_vm_instance.id) {
225 8d08f18a Kostas Papadimitriou
                    this.current_vm = index;
226 8d08f18a Kostas Papadimitriou
                }
227 8d08f18a Kostas Papadimitriou
            }, this);
228 8d08f18a Kostas Papadimitriou
            
229 8d08f18a Kostas Papadimitriou
            var self = this;
230 8d08f18a Kostas Papadimitriou
            this.menu.find(".server-name").click(function(ev) {
231 8d08f18a Kostas Papadimitriou
                ev.preventDefault();
232 8d08f18a Kostas Papadimitriou
                var id = $(this).attr("id").replace("single-vm-at-", "");
233 8d08f18a Kostas Papadimitriou
                self.current_vm = id;
234 8d08f18a Kostas Papadimitriou
                self.update_current_vm();
235 8d08f18a Kostas Papadimitriou
                self.show_current();
236 8d08f18a Kostas Papadimitriou
            })
237 8d08f18a Kostas Papadimitriou
        },
238 8d08f18a Kostas Papadimitriou
239 8d08f18a Kostas Papadimitriou
        // generic stuff to do on each view update
240 8d08f18a Kostas Papadimitriou
        // called once after each vm has been updated
241 8d08f18a Kostas Papadimitriou
        update_layout: function() {
242 8d08f18a Kostas Papadimitriou
            this.update_current_vm();
243 8d08f18a Kostas Papadimitriou
            fix_v6_addresses();
244 8d08f18a Kostas Papadimitriou
        },
245 8d08f18a Kostas Papadimitriou
246 8d08f18a Kostas Papadimitriou
        // update vm details
247 8d08f18a Kostas Papadimitriou
        update_details: function(vm) {
248 8d08f18a Kostas Papadimitriou
            var el = this.vm(vm);
249 44660f58 Kostas Papadimitriou
            if (vm != this.current_vm_instance) { return };
250 44660f58 Kostas Papadimitriou
251 8d08f18a Kostas Papadimitriou
            // truncate name
252 8d08f18a Kostas Papadimitriou
            el.find(".machine-detail.name").text(util.truncate(vm.get("name"), 35));
253 8d08f18a Kostas Papadimitriou
            // set ips
254 29074c9d Kostas Papadimitriou
            el.find(".machine-detail.ipv4.ipv4-text").text(vm.get_addresses().ip4 || "not set");
255 8d08f18a Kostas Papadimitriou
            // TODO: fix ipv6 truncates and tooltip handler
256 29074c9d Kostas Papadimitriou
            el.find(".machine-detail.ipv6.ipv6-text").text(vm.get_addresses().ip6 || "not set");
257 8d08f18a Kostas Papadimitriou
            // set the state (i18n ??)
258 8d08f18a Kostas Papadimitriou
            el.find(".state-label").text(STATE_TEXTS[vm.state()]);
259 8d08f18a Kostas Papadimitriou
            // set state class
260 8d08f18a Kostas Papadimitriou
            el.find(".state").removeClass().addClass(views.SingleView.STATE_CLASSES[vm.state()].join(" "));
261 8d08f18a Kostas Papadimitriou
            // os icon
262 8d08f18a Kostas Papadimitriou
            el.find(".single-image").css({'background-image': "url(" + this.get_vm_icon_path(vm, "medium") + ")"});
263 8d08f18a Kostas Papadimitriou
            
264 8d08f18a Kostas Papadimitriou
            el.removeClass("connectable");
265 8d08f18a Kostas Papadimitriou
            if (vm.is_connectable()) {
266 8d08f18a Kostas Papadimitriou
                el.addClass("connectable");
267 8d08f18a Kostas Papadimitriou
            }
268 8d08f18a Kostas Papadimitriou
269 8d08f18a Kostas Papadimitriou
            if (vm.get('status') == 'BUILD') {
270 8d08f18a Kostas Papadimitriou
                // update bulding progress
271 b4372e4d Kostas Papadimitriou
                el.find("span.build-progress").show().text(vm.get("progress_message"));
272 8d08f18a Kostas Papadimitriou
            } else {
273 8d08f18a Kostas Papadimitriou
                // hide building progress
274 8d08f18a Kostas Papadimitriou
                el.find("span.build-progress").hide();
275 8d08f18a Kostas Papadimitriou
            }
276 8d08f18a Kostas Papadimitriou
277 8d08f18a Kostas Papadimitriou
            if (vm.state() == "DESTROY") {
278 8d08f18a Kostas Papadimitriou
                el.find("span.build-progress").show().text("Terminating...");
279 8d08f18a Kostas Papadimitriou
            }
280 8d08f18a Kostas Papadimitriou
281 8d08f18a Kostas Papadimitriou
            icon_state = vm.is_active() ? "on" : "off";
282 8d08f18a Kostas Papadimitriou
            set_machine_os_image(el, "single", icon_state, this.get_vm_icon_os(vm));
283 8d08f18a Kostas Papadimitriou
            
284 8d08f18a Kostas Papadimitriou
            // update subviews
285 8d08f18a Kostas Papadimitriou
            this.action_views[vm.id].update_layout();
286 8d08f18a Kostas Papadimitriou
            this.stats_views[vm.id].update_layout();
287 8d08f18a Kostas Papadimitriou
            this.connect_views[vm.id].update_layout();
288 8d08f18a Kostas Papadimitriou
            this.tags_views[vm.id].update_layout();
289 8d08f18a Kostas Papadimitriou
            this.details_views[vm.id].update_layout();
290 8d08f18a Kostas Papadimitriou
        },
291 8d08f18a Kostas Papadimitriou
            
292 8d08f18a Kostas Papadimitriou
        get_vm_icon_os: function(vm) {
293 8d08f18a Kostas Papadimitriou
            var os = vm.get_os();
294 8d08f18a Kostas Papadimitriou
            var icons = window.os_icons || views.SingleView.VM_OS_ICONS;
295 8d08f18a Kostas Papadimitriou
            if (icons.indexOf(os) == -1) {
296 8d08f18a Kostas Papadimitriou
                os = "unknown";
297 8d08f18a Kostas Papadimitriou
            }
298 8d08f18a Kostas Papadimitriou
            return os;
299 8d08f18a Kostas Papadimitriou
        },
300 8d08f18a Kostas Papadimitriou
301 8d08f18a Kostas Papadimitriou
        // TODO: move to views.utils (the method and the VM_OS_ICON vars)
302 8d08f18a Kostas Papadimitriou
        get_vm_icon_path: function(vm, icon_type) {
303 8d08f18a Kostas Papadimitriou
            var os = vm.get_os();
304 8d08f18a Kostas Papadimitriou
            var icons = window.os_icons || views.SingleView.VM_OS_ICONS;
305 8d08f18a Kostas Papadimitriou
306 8d08f18a Kostas Papadimitriou
            if (icons.indexOf(os) == -1) {
307 8d08f18a Kostas Papadimitriou
                os = "unknown";
308 8d08f18a Kostas Papadimitriou
            }
309 8d08f18a Kostas Papadimitriou
310 c62c6b91 Kostas Papadimitriou
            return views.SingleView.VM_OS_ICON_TPLS()[icon_type].format(os);
311 8d08f18a Kostas Papadimitriou
        }
312 8d08f18a Kostas Papadimitriou
    })
313 8d08f18a Kostas Papadimitriou
314 c62c6b91 Kostas Papadimitriou
    views.SingleView.VM_OS_ICON_TPLS = function() {
315 c62c6b91 Kostas Papadimitriou
        return {
316 c62c6b91 Kostas Papadimitriou
            "medium": snf.config.machines_icons_url + "large/{0}-sprite.png"
317 c62c6b91 Kostas Papadimitriou
        }
318 8d08f18a Kostas Papadimitriou
    }
319 8d08f18a Kostas Papadimitriou
320 8d08f18a Kostas Papadimitriou
    views.SingleView.VM_OS_ICONS = window.os_icons || [];
321 8d08f18a Kostas Papadimitriou
322 8d08f18a Kostas Papadimitriou
    views.SingleView.STATE_CLASSES = {
323 8d08f18a Kostas Papadimitriou
        'UNKNOWN':          ['state', 'error-state'],
324 8d08f18a Kostas Papadimitriou
        'BUILD':            ['state', 'build-state'],
325 8d08f18a Kostas Papadimitriou
        'REBOOT':           ['state', 'rebooting-state'],
326 8d08f18a Kostas Papadimitriou
        'STOPPED':          ['state', 'terminated-state'],
327 8d08f18a Kostas Papadimitriou
        'ACTIVE':           ['state', 'running-state'],
328 8d08f18a Kostas Papadimitriou
        'ERROR':            ['state', 'error-state'],
329 643de8c0 Kostas Papadimitriou
        'DELETED':           ['state', 'destroying-state'],
330 8d08f18a Kostas Papadimitriou
        'DESTROY':          ['state', 'destroying-state'],
331 8d08f18a Kostas Papadimitriou
        'BUILD_INIT':       ['state', 'build-state'], 
332 8d08f18a Kostas Papadimitriou
        'BUILD_COPY':       ['state', 'build-state'],
333 8d08f18a Kostas Papadimitriou
        'BUILD_FINAL':      ['state', 'build-state'],
334 8d08f18a Kostas Papadimitriou
        'SHUTDOWN':         ['state', 'shutting-state'],
335 8d08f18a Kostas Papadimitriou
        'START':            ['state', 'starting-state'],
336 8d08f18a Kostas Papadimitriou
        'CONNECT':          ['state', 'connecting-state'],
337 8d08f18a Kostas Papadimitriou
        'DISCONNECT':       ['state', 'disconnecting-state']
338 8d08f18a Kostas Papadimitriou
    };
339 8d08f18a Kostas Papadimitriou
340 8d08f18a Kostas Papadimitriou
})(this);