root / ui / static / snf / js / ui / web / ui_list_view.js @ 8579f4e0
History | View | Annotate | Download (12.9 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 | 8d08f18a | Kostas Papadimitriou | |
18 | 8d08f18a | Kostas Papadimitriou | views.ListMultipleActions = views.View.extend({ |
19 | 8d08f18a | Kostas Papadimitriou | |
20 | 8d08f18a | Kostas Papadimitriou | view_id: "list_actions", |
21 | 8d08f18a | Kostas Papadimitriou | |
22 | 8d08f18a | Kostas Papadimitriou | initialize: function(view) { |
23 | 8d08f18a | Kostas Papadimitriou | this.parent = view;
|
24 | 8d08f18a | Kostas Papadimitriou | this.el = this.parent.el; |
25 | 8d08f18a | Kostas Papadimitriou | |
26 | 8d08f18a | Kostas Papadimitriou | views.ListMultipleActions.__super__.initialize.call(this);
|
27 | 8d08f18a | Kostas Papadimitriou | this.set_handlers();
|
28 | 8d08f18a | Kostas Papadimitriou | this.update_layout();
|
29 | 8d08f18a | Kostas Papadimitriou | |
30 | 8d08f18a | Kostas Papadimitriou | this.selected_action = undefined; |
31 | 8d08f18a | Kostas Papadimitriou | this.available_actions = [];
|
32 | 8d08f18a | Kostas Papadimitriou | this.multi_view = synnefo.ui.main.multiple_actions_view;
|
33 | 8d08f18a | Kostas Papadimitriou | }, |
34 | 8d08f18a | Kostas Papadimitriou | |
35 | 8d08f18a | Kostas Papadimitriou | set_handlers: function() { |
36 | 122850c5 | Kostas Papadimitriou | var self = this; |
37 | 122850c5 | Kostas Papadimitriou | storage.vms.bind("change:pending_action", function() { |
38 | 122850c5 | Kostas Papadimitriou | if (!storage.vms.has_pending_actions()) {
|
39 | 122850c5 | Kostas Papadimitriou | self.parent.$(".actions a").removeClass("selected"); |
40 | 122850c5 | Kostas Papadimitriou | } |
41 | 122850c5 | Kostas Papadimitriou | }) |
42 | 122850c5 | Kostas Papadimitriou | |
43 | 122850c5 | Kostas Papadimitriou | var self = this; |
44 | 122850c5 | Kostas Papadimitriou | this.parent.$(".actions a.enabled").live('click', function() { |
45 | 122850c5 | Kostas Papadimitriou | self.parent.$(".actions a").removeClass("selected"); |
46 | 122850c5 | Kostas Papadimitriou | $(this).addClass("selected"); |
47 | 122850c5 | Kostas Papadimitriou | self.parent.select_action($(this).attr("id").replace("action-","")); |
48 | 122850c5 | Kostas Papadimitriou | }) |
49 | 8d08f18a | Kostas Papadimitriou | }, |
50 | 8d08f18a | Kostas Papadimitriou | |
51 | 8d08f18a | Kostas Papadimitriou | update_actions: function() { |
52 | 8d08f18a | Kostas Papadimitriou | actions = undefined;
|
53 | 8d08f18a | Kostas Papadimitriou | this.available_actions = [];
|
54 | 122850c5 | Kostas Papadimitriou | _.each(this.parent.get_selected_vms(), function(vm) { |
55 | 8d08f18a | Kostas Papadimitriou | if (!actions) {
|
56 | 8d08f18a | Kostas Papadimitriou | actions = vm.get_available_actions(); |
57 | 8d08f18a | Kostas Papadimitriou | return;
|
58 | 8d08f18a | Kostas Papadimitriou | } |
59 | 8d08f18a | Kostas Papadimitriou | actions = _.intersection(actions, vm.get_available_actions()); |
60 | 8d08f18a | Kostas Papadimitriou | }); |
61 | 8d08f18a | Kostas Papadimitriou | |
62 | 8d08f18a | Kostas Papadimitriou | this.available_actions = actions;
|
63 | 8d08f18a | Kostas Papadimitriou | |
64 | 8d08f18a | Kostas Papadimitriou | this.$(".actions a").removeClass("enabled"); |
65 | 8d08f18a | Kostas Papadimitriou | _.each(this.available_actions, _.bind(function(name){ |
66 | 8d08f18a | Kostas Papadimitriou | this.$("#action-" + name).addClass("enabled"); |
67 | 8d08f18a | Kostas Papadimitriou | }, this))
|
68 | 8d08f18a | Kostas Papadimitriou | }, |
69 | 8d08f18a | Kostas Papadimitriou | |
70 | 8d08f18a | Kostas Papadimitriou | update_layout: function() { |
71 | 8d08f18a | Kostas Papadimitriou | this.update_actions();
|
72 | 8d08f18a | Kostas Papadimitriou | } |
73 | 8d08f18a | Kostas Papadimitriou | }); |
74 | 8d08f18a | Kostas Papadimitriou | |
75 | 8d08f18a | Kostas Papadimitriou | // VMs list view
|
76 | 8d08f18a | Kostas Papadimitriou | views.ListView = views.VMListView.extend({ |
77 | 8d08f18a | Kostas Papadimitriou | |
78 | 8d08f18a | Kostas Papadimitriou | // view id (this could be used to identify
|
79 | 8d08f18a | Kostas Papadimitriou | // the view object from global context
|
80 | 8d08f18a | Kostas Papadimitriou | view_id: 'vm_list', |
81 | 8d08f18a | Kostas Papadimitriou | |
82 | 8d08f18a | Kostas Papadimitriou | el: '#machinesview-list', |
83 | 8d08f18a | Kostas Papadimitriou | id_tpl: 'list-vm-{0}', |
84 | 8d08f18a | Kostas Papadimitriou | link_id_tpl: 'list-vm-at-{0}', |
85 | 8d08f18a | Kostas Papadimitriou | |
86 | 8d08f18a | Kostas Papadimitriou | hide_actions: false, |
87 | 8d08f18a | Kostas Papadimitriou | |
88 | 8d08f18a | Kostas Papadimitriou | selectors: {
|
89 | 8d08f18a | Kostas Papadimitriou | 'vms': '.list-container', |
90 | 8d08f18a | Kostas Papadimitriou | 'vm': '#list-vm-{0}', |
91 | 8d08f18a | Kostas Papadimitriou | 'view': '#machinesview-list', |
92 | 8d08f18a | Kostas Papadimitriou | 'tpl': '.list-container#machine-container-template', |
93 | 8d08f18a | Kostas Papadimitriou | 'spinner': '.large-spinner', |
94 | 8d08f18a | Kostas Papadimitriou | 'vm_spinner': '#list-vm-{0} .spinner', |
95 | 8d08f18a | Kostas Papadimitriou | 'vm_wave': '#list-vm-{0} .wave', |
96 | 8d08f18a | Kostas Papadimitriou | 'os_icon': '#list-vm-{0} .os_icon', |
97 | 8d08f18a | Kostas Papadimitriou | 'vm_cont_active': '#machinesview-list', |
98 | 8d08f18a | Kostas Papadimitriou | 'vm_cont_terminated': '#machinesview-list' |
99 | 8d08f18a | Kostas Papadimitriou | }, |
100 | 8d08f18a | Kostas Papadimitriou | |
101 | 8d08f18a | Kostas Papadimitriou | initialize: function() { |
102 | 8d08f18a | Kostas Papadimitriou | this.current_vm = 0; |
103 | 8d08f18a | Kostas Papadimitriou | |
104 | 8d08f18a | Kostas Papadimitriou | // button selectors
|
105 | 8d08f18a | Kostas Papadimitriou | this.prev_button = this.$(".controls .previous"); |
106 | 8d08f18a | Kostas Papadimitriou | this.next_button = this.$(".controls .next"); |
107 | 8d08f18a | Kostas Papadimitriou | |
108 | 8d08f18a | Kostas Papadimitriou | this.actions = this.$(".actions").show(); |
109 | 8d08f18a | Kostas Papadimitriou | this.datatable_cont = this.$(".dataTables_wrapper").show(); |
110 | 8d08f18a | Kostas Papadimitriou | this.content = this.$("#machinesview_content").show(); |
111 | 8d08f18a | Kostas Papadimitriou | this.filter = this.$(".dataTables_filter").show().css({'display':'block'}); |
112 | 8d08f18a | Kostas Papadimitriou | this.table_el = this.$(".list-machines").show(); |
113 | 8d08f18a | Kostas Papadimitriou | this.select_all = $("#list-view-select-all"); |
114 | 8d08f18a | Kostas Papadimitriou | |
115 | 8d08f18a | Kostas Papadimitriou | this.actions = new views.ListMultipleActions(this); |
116 | 8d08f18a | Kostas Papadimitriou | |
117 | 8d08f18a | Kostas Papadimitriou | this.table = $("div.list table.list-machines").dataTable({ |
118 | 8d08f18a | Kostas Papadimitriou | "bInfo": false, |
119 | 8d08f18a | Kostas Papadimitriou | "bRetrieve": true, |
120 | 8d08f18a | Kostas Papadimitriou | "bPaginate": false, |
121 | 8d08f18a | Kostas Papadimitriou | "bAutoWidth": false, |
122 | 8d08f18a | Kostas Papadimitriou | "bSort": true, |
123 | 8d08f18a | Kostas Papadimitriou | "bStateSave": true, |
124 | 8d08f18a | Kostas Papadimitriou | "sScrollXInner": "500px", |
125 | 8d08f18a | Kostas Papadimitriou | "aoColumnDefs": [
|
126 | 8d08f18a | Kostas Papadimitriou | { "bSortable": false, "aTargets": [ 0 ] } |
127 | 8d08f18a | Kostas Papadimitriou | ] |
128 | 8d08f18a | Kostas Papadimitriou | }); |
129 | 8d08f18a | Kostas Papadimitriou | |
130 | 8d08f18a | Kostas Papadimitriou | this.table_data = {};
|
131 | 8d08f18a | Kostas Papadimitriou | views.ListView.__super__.initialize.apply(this, arguments); |
132 | 8d08f18a | Kostas Papadimitriou | }, |
133 | 122850c5 | Kostas Papadimitriou | |
134 | 122850c5 | Kostas Papadimitriou | reset: function() { |
135 | 122850c5 | Kostas Papadimitriou | }, |
136 | 122850c5 | Kostas Papadimitriou | |
137 | 122850c5 | Kostas Papadimitriou | hide_actions: function() { |
138 | 122850c5 | Kostas Papadimitriou | this.$(".actions a").removeClass("selected"); |
139 | 122850c5 | Kostas Papadimitriou | }, |
140 | 8d08f18a | Kostas Papadimitriou | |
141 | 8d08f18a | Kostas Papadimitriou | // overload show function
|
142 | 8d08f18a | Kostas Papadimitriou | show_view: function() { |
143 | 8d08f18a | Kostas Papadimitriou | this.log.debug("showing"); |
144 | 8d08f18a | Kostas Papadimitriou | this.sel('spinner').hide(); |
145 | 8d08f18a | Kostas Papadimitriou | this.__update_layout();
|
146 | 8d08f18a | Kostas Papadimitriou | }, |
147 | 8d08f18a | Kostas Papadimitriou | |
148 | 8d08f18a | Kostas Papadimitriou | check_vm_container: function() { |
149 | 8d08f18a | Kostas Papadimitriou | }, |
150 | 8d08f18a | Kostas Papadimitriou | |
151 | 8d08f18a | Kostas Papadimitriou | // identify vm model instance id based on DOM element
|
152 | 8d08f18a | Kostas Papadimitriou | vm_id_for_element: function(el) { |
153 | 8d08f18a | Kostas Papadimitriou | return el.attr('id').replace("list-vm-", ""); |
154 | 8d08f18a | Kostas Papadimitriou | }, |
155 | 122850c5 | Kostas Papadimitriou | |
156 | 122850c5 | Kostas Papadimitriou | reset_actions: function() { |
157 | 122850c5 | Kostas Papadimitriou | this.$(".actions a").removeClass("selected"); |
158 | 122850c5 | Kostas Papadimitriou | storage.vms.reset_pending_actions(); |
159 | 122850c5 | Kostas Papadimitriou | }, |
160 | 8d08f18a | Kostas Papadimitriou | |
161 | 8d08f18a | Kostas Papadimitriou | // set generic view handlers
|
162 | 8d08f18a | Kostas Papadimitriou | set_handlers: function() { |
163 | 8d08f18a | Kostas Papadimitriou | //init_action_indicator_handlers('list');
|
164 | 8d08f18a | Kostas Papadimitriou | |
165 | 8d08f18a | Kostas Papadimitriou | this.$(".list-vm-checkbox").live('change', _.bind(function(){ |
166 | 122850c5 | Kostas Papadimitriou | this.reset_actions();
|
167 | 8d08f18a | Kostas Papadimitriou | this.actions.update_layout();
|
168 | 8d08f18a | Kostas Papadimitriou | if (this.$("tbody input:checked").length > 0) { |
169 | 8d08f18a | Kostas Papadimitriou | this.select_all.attr("checked", true); |
170 | 8d08f18a | Kostas Papadimitriou | } else {
|
171 | 8d08f18a | Kostas Papadimitriou | this.select_all.attr("checked", false); |
172 | 8d08f18a | Kostas Papadimitriou | } |
173 | 8d08f18a | Kostas Papadimitriou | }, this))
|
174 | 8d08f18a | Kostas Papadimitriou | |
175 | 8d08f18a | Kostas Papadimitriou | var self = this; |
176 | 8d08f18a | Kostas Papadimitriou | this.select_all.click(function(){ |
177 | 8d08f18a | Kostas Papadimitriou | if ($(this).is(":checked")) { |
178 | 8d08f18a | Kostas Papadimitriou | self.$("tbody input").attr("checked", true); |
179 | 8d08f18a | Kostas Papadimitriou | } else {
|
180 | 8d08f18a | Kostas Papadimitriou | self.$("tbody input").attr("checked", false); |
181 | 8d08f18a | Kostas Papadimitriou | } |
182 | 8d08f18a | Kostas Papadimitriou | self.actions.update_layout(); |
183 | 8d08f18a | Kostas Papadimitriou | }); |
184 | 8d08f18a | Kostas Papadimitriou | }, |
185 | 8d08f18a | Kostas Papadimitriou | |
186 | 122850c5 | Kostas Papadimitriou | get_selected_vms: function() { |
187 | 122850c5 | Kostas Papadimitriou | var selected = $(this.el).find(".list-vm-checkbox:checked"); |
188 | 122850c5 | Kostas Papadimitriou | var vms = []
|
189 | 122850c5 | Kostas Papadimitriou | _.each(selected, function(el){
|
190 | 122850c5 | Kostas Papadimitriou | var id = parseInt($(el).attr("id").replace("checkbox-list-vm-", "")); |
191 | 122850c5 | Kostas Papadimitriou | vm = storage.vms.get(id); |
192 | 122850c5 | Kostas Papadimitriou | vms.push(vm); |
193 | 122850c5 | Kostas Papadimitriou | }); |
194 | 122850c5 | Kostas Papadimitriou | |
195 | 122850c5 | Kostas Papadimitriou | return vms;
|
196 | 122850c5 | Kostas Papadimitriou | }, |
197 | 122850c5 | Kostas Papadimitriou | |
198 | 122850c5 | Kostas Papadimitriou | select_action: function(action) { |
199 | 122850c5 | Kostas Papadimitriou | this.reset_actions();
|
200 | 122850c5 | Kostas Papadimitriou | this.$(".actions a#action-" + action).addClass("selected"); |
201 | 122850c5 | Kostas Papadimitriou | var vms = this.get_selected_vms(); |
202 | 122850c5 | Kostas Papadimitriou | _.each(vms, function(vm){
|
203 | 122850c5 | Kostas Papadimitriou | vm.update_pending_action(action); |
204 | 122850c5 | Kostas Papadimitriou | }) |
205 | 122850c5 | Kostas Papadimitriou | }, |
206 | 122850c5 | Kostas Papadimitriou | |
207 | 122850c5 | Kostas Papadimitriou | reset: function() { |
208 | 122850c5 | Kostas Papadimitriou | this.reset_actions();
|
209 | 122850c5 | Kostas Papadimitriou | }, |
210 | 122850c5 | Kostas Papadimitriou | |
211 | 8d08f18a | Kostas Papadimitriou | create_vm: function(vm) { |
212 | 8d08f18a | Kostas Papadimitriou | params = this.get_vm_table_data(vm);
|
213 | 8d08f18a | Kostas Papadimitriou | var index = this.table.fnAddData.call(this.table, params); |
214 | 8d08f18a | Kostas Papadimitriou | this.table_data["vm_" + vm.id] = {index: index[0], params: params}; |
215 | 8d08f18a | Kostas Papadimitriou | |
216 | 8d08f18a | Kostas Papadimitriou | // append row id
|
217 | 8d08f18a | Kostas Papadimitriou | $(this.table.fnGetNodes(index)).attr("id", this.id_tpl.format(vm.id)); |
218 | 8d08f18a | Kostas Papadimitriou | |
219 | 8d08f18a | Kostas Papadimitriou | // hide indicators on creation
|
220 | 8d08f18a | Kostas Papadimitriou | this.vm(vm).find(".spinner").hide(); |
221 | 8d08f18a | Kostas Papadimitriou | this.vm(vm).find(".wave").hide(); |
222 | 8d08f18a | Kostas Papadimitriou | this.vm(vm).find(".os_icon").show(); |
223 | 8d08f18a | Kostas Papadimitriou | |
224 | 8d08f18a | Kostas Papadimitriou | // ancestor method
|
225 | 8d08f18a | Kostas Papadimitriou | this.__set_vm_handlers(vm);
|
226 | 8d08f18a | Kostas Papadimitriou | this.set_vm_handlers(vm);
|
227 | 8d08f18a | Kostas Papadimitriou | this.post_add(vm);
|
228 | 8d08f18a | Kostas Papadimitriou | }, |
229 | 8d08f18a | Kostas Papadimitriou | |
230 | 8d08f18a | Kostas Papadimitriou | // remove vm
|
231 | 8d08f18a | Kostas Papadimitriou | remove_vm: function(vm) { |
232 | 8d08f18a | Kostas Papadimitriou | var index = this.table_data["vm_" + vm.id].index; |
233 | 8d08f18a | Kostas Papadimitriou | this.table.fnDeleteRow(index);
|
234 | 8d08f18a | Kostas Papadimitriou | delete this.table_data["vm_" + vm.id]; |
235 | 8d08f18a | Kostas Papadimitriou | this.update_data();
|
236 | 8d08f18a | Kostas Papadimitriou | }, |
237 | 8d08f18a | Kostas Papadimitriou | |
238 | 8d08f18a | Kostas Papadimitriou | update_data: function() { |
239 | 8d08f18a | Kostas Papadimitriou | var new_data = this.table.fnGetData(); |
240 | 8d08f18a | Kostas Papadimitriou | _.each(new_data, _.bind(function(row, i){
|
241 | 8d08f18a | Kostas Papadimitriou | this.table_data["vm_" + row[5]].index = i; |
242 | 8d08f18a | Kostas Papadimitriou | this.table_data["vm_" + row[5]].params = row; |
243 | 8d08f18a | Kostas Papadimitriou | }, this));
|
244 | 8d08f18a | Kostas Papadimitriou | }, |
245 | 8d08f18a | Kostas Papadimitriou | |
246 | 8d08f18a | Kostas Papadimitriou | get_vm_table_data: function(vm) { |
247 | 8d08f18a | Kostas Papadimitriou | var checkbox = '<input type="checkbox" class="' + |
248 | 8d08f18a | Kostas Papadimitriou | views.ListView.STATE_CLASSES[vm.state()].join(" ") +
|
249 | 8d08f18a | Kostas Papadimitriou | ' list-vm-checkbox" id="checkbox-' + this.id_tpl.format(vm.id) + '"/>'; |
250 | 8d08f18a | Kostas Papadimitriou | |
251 | 8d08f18a | Kostas Papadimitriou | var img = '<img class="os_icon" src="'+ this.get_vm_icon_path(vm, "small") +'" />'; |
252 | 8d08f18a | Kostas Papadimitriou | img = img + '<img src="static/icons/indicators/small/progress.gif" class="spinner" />';
|
253 | 8d08f18a | Kostas Papadimitriou | img = img + '<img src="static/icons/indicators/medium/wave.gif" class="wave" />';
|
254 | 8d08f18a | Kostas Papadimitriou | |
255 | 8d08f18a | Kostas Papadimitriou | var name = util.truncate(vm.get('name'), 20); |
256 | 8d08f18a | Kostas Papadimitriou | var flavor = vm.get_flavor().details_string();
|
257 | 8d08f18a | Kostas Papadimitriou | var status = STATE_TEXTS[vm.state()];
|
258 | 8d08f18a | Kostas Papadimitriou | |
259 | 8d08f18a | Kostas Papadimitriou | return [checkbox, img, name, flavor, status, vm.id];
|
260 | 8d08f18a | Kostas Papadimitriou | }, |
261 | 8d08f18a | Kostas Papadimitriou | |
262 | 8d08f18a | Kostas Papadimitriou | post_add: function(vm) { |
263 | 8d08f18a | Kostas Papadimitriou | }, |
264 | 8d08f18a | Kostas Papadimitriou | |
265 | 8d08f18a | Kostas Papadimitriou | // is vm in transition ??? show the progress spinner
|
266 | 8d08f18a | Kostas Papadimitriou | update_transition_state: function(vm) { |
267 | 8d08f18a | Kostas Papadimitriou | if (vm.in_transition()){
|
268 | 8d08f18a | Kostas Papadimitriou | this.sel('vm_spinner', vm.id).show(); |
269 | 8d08f18a | Kostas Papadimitriou | this.sel('vm_wave', vm.id).hide(); |
270 | 8d08f18a | Kostas Papadimitriou | this.sel('os_icon', vm.id).hide(); |
271 | 8d08f18a | Kostas Papadimitriou | } else {
|
272 | 8d08f18a | Kostas Papadimitriou | this.sel('vm_spinner', vm.id).hide(); |
273 | 8d08f18a | Kostas Papadimitriou | } |
274 | 8d08f18a | Kostas Papadimitriou | }, |
275 | 8d08f18a | Kostas Papadimitriou | |
276 | 8d08f18a | Kostas Papadimitriou | // display transition animations
|
277 | 8d08f18a | Kostas Papadimitriou | show_transition: function(vm) { |
278 | 8d08f18a | Kostas Papadimitriou | var wave = this.sel('vm_wave', vm.id); |
279 | 8d08f18a | Kostas Papadimitriou | if (!wave.length) {
|
280 | 8d08f18a | Kostas Papadimitriou | return
|
281 | 8d08f18a | Kostas Papadimitriou | } |
282 | 8d08f18a | Kostas Papadimitriou | |
283 | 8d08f18a | Kostas Papadimitriou | this.sel('vm_spinner', vm.id).hide(); |
284 | 8d08f18a | Kostas Papadimitriou | this.sel('os_icon', vm.id).hide(); |
285 | 8d08f18a | Kostas Papadimitriou | |
286 | 8d08f18a | Kostas Papadimitriou | var src = wave.attr('src'); |
287 | 8d08f18a | Kostas Papadimitriou | var self = this; |
288 | 8d08f18a | Kostas Papadimitriou | |
289 | 8d08f18a | Kostas Papadimitriou | // change src to force gif play from the first frame
|
290 | 8d08f18a | Kostas Papadimitriou | // animate for 500 ms then hide
|
291 | 8d08f18a | Kostas Papadimitriou | wave.attr('src', "").show().attr('src', src).fadeIn(500).delay(700).fadeOut(300, function() { |
292 | 8d08f18a | Kostas Papadimitriou | if (vm.in_transition()) {
|
293 | 8d08f18a | Kostas Papadimitriou | self.sel("vm_spinner", vm.id).fadeIn(200); |
294 | 8d08f18a | Kostas Papadimitriou | } else {
|
295 | 8d08f18a | Kostas Papadimitriou | self.sel("os_icon", vm.id).fadeIn(200); |
296 | 8d08f18a | Kostas Papadimitriou | } |
297 | 8d08f18a | Kostas Papadimitriou | }); |
298 | 8d08f18a | Kostas Papadimitriou | }, |
299 | 8d08f18a | Kostas Papadimitriou | |
300 | 8d08f18a | Kostas Papadimitriou | update_actions_layout: function(vm) { |
301 | 8d08f18a | Kostas Papadimitriou | }, |
302 | 8d08f18a | Kostas Papadimitriou | |
303 | 8d08f18a | Kostas Papadimitriou | post_update_vm: function(vm) { |
304 | 8d08f18a | Kostas Papadimitriou | var index = this.table_data["vm_" + vm.id].index; |
305 | 8d08f18a | Kostas Papadimitriou | params = this.get_vm_table_data(vm);
|
306 | 8d08f18a | Kostas Papadimitriou | this.table_data["vm_" + vm.id].params = params; |
307 | 8d08f18a | Kostas Papadimitriou | data = this.table.fnGetData()[index];
|
308 | 8d08f18a | Kostas Papadimitriou | |
309 | 8d08f18a | Kostas Papadimitriou | // do not recreate checkboxes and images to avoid messing
|
310 | 8d08f18a | Kostas Papadimitriou | // with user interaction
|
311 | 8d08f18a | Kostas Papadimitriou | this.table.fnUpdate(params[2], parseInt(index), 2); |
312 | 8d08f18a | Kostas Papadimitriou | this.table.fnUpdate(params[3], parseInt(index), 3); |
313 | 8d08f18a | Kostas Papadimitriou | this.table.fnUpdate(params[4], parseInt(index), 4); |
314 | 8d08f18a | Kostas Papadimitriou | |
315 | 8d08f18a | Kostas Papadimitriou | this.update_os_icon(vm);
|
316 | 8d08f18a | Kostas Papadimitriou | this.update_transition_state(vm);
|
317 | 8d08f18a | Kostas Papadimitriou | }, |
318 | 8d08f18a | Kostas Papadimitriou | |
319 | 8d08f18a | Kostas Papadimitriou | update_os_icon: function(vm) { |
320 | 8d08f18a | Kostas Papadimitriou | this.sel('os_icon', vm.id).attr('src', this.get_vm_icon_path(vm, "small")); |
321 | 8d08f18a | Kostas Papadimitriou | }, |
322 | 8d08f18a | Kostas Papadimitriou | |
323 | 8d08f18a | Kostas Papadimitriou | // vm specific event handlers
|
324 | 8d08f18a | Kostas Papadimitriou | set_vm_handlers: function(vm) { |
325 | 8d08f18a | Kostas Papadimitriou | |
326 | 8d08f18a | Kostas Papadimitriou | }, |
327 | 8d08f18a | Kostas Papadimitriou | |
328 | 8d08f18a | Kostas Papadimitriou | // generic stuff to do on each view update
|
329 | 8d08f18a | Kostas Papadimitriou | // called once after each vm has been updated
|
330 | 8d08f18a | Kostas Papadimitriou | update_layout: function() { |
331 | 8d08f18a | Kostas Papadimitriou | this.actions.update_layout();
|
332 | 8d08f18a | Kostas Papadimitriou | }, |
333 | 8d08f18a | Kostas Papadimitriou | |
334 | 8d08f18a | Kostas Papadimitriou | // update vm details
|
335 | 8d08f18a | Kostas Papadimitriou | update_details: function(vm) { |
336 | 8d08f18a | Kostas Papadimitriou | }, |
337 | 8d08f18a | Kostas Papadimitriou | |
338 | 8d08f18a | Kostas Papadimitriou | get_vm_icon_os: function(vm) { |
339 | 8d08f18a | Kostas Papadimitriou | var os = vm.get_os();
|
340 | 8d08f18a | Kostas Papadimitriou | var icons = window.os_icons || views.ListView.VM_OS_ICONS;
|
341 | 8d08f18a | Kostas Papadimitriou | if (icons.indexOf(os) == -1) { |
342 | 8d08f18a | Kostas Papadimitriou | os = "unknown";
|
343 | 8d08f18a | Kostas Papadimitriou | } |
344 | 8d08f18a | Kostas Papadimitriou | return os;
|
345 | 8d08f18a | Kostas Papadimitriou | }, |
346 | 8d08f18a | Kostas Papadimitriou | |
347 | 8d08f18a | Kostas Papadimitriou | // TODO: move to views.utils (the method and the VM_OS_ICON vars)
|
348 | 8d08f18a | Kostas Papadimitriou | get_vm_icon_path: function(vm, icon_type) { |
349 | 8d08f18a | Kostas Papadimitriou | var os = vm.get_os();
|
350 | 8d08f18a | Kostas Papadimitriou | var icons = window.os_icons || views.ListView.VM_OS_ICONS;
|
351 | 8d08f18a | Kostas Papadimitriou | |
352 | 8d08f18a | Kostas Papadimitriou | if (icons.indexOf(os) == -1) { |
353 | 8d08f18a | Kostas Papadimitriou | os = "unknown";
|
354 | 8d08f18a | Kostas Papadimitriou | } |
355 | 8d08f18a | Kostas Papadimitriou | |
356 | 8d08f18a | Kostas Papadimitriou | var st = "off"; |
357 | 8d08f18a | Kostas Papadimitriou | if (vm.is_active()) {
|
358 | 8d08f18a | Kostas Papadimitriou | st = "on"
|
359 | 8d08f18a | Kostas Papadimitriou | } |
360 | 8d08f18a | Kostas Papadimitriou | |
361 | 8d08f18a | Kostas Papadimitriou | return views.ListView.VM_OS_ICON_TPLS[icon_type].format(os, st);
|
362 | 8d08f18a | Kostas Papadimitriou | } |
363 | 8d08f18a | Kostas Papadimitriou | }) |
364 | 8d08f18a | Kostas Papadimitriou | |
365 | 8d08f18a | Kostas Papadimitriou | views.ListView.VM_OS_ICON_TPLS = { |
366 | 8d08f18a | Kostas Papadimitriou | "small": "/static/icons/machines/small/{0}-{1}.png" |
367 | 8d08f18a | Kostas Papadimitriou | } |
368 | 8d08f18a | Kostas Papadimitriou | |
369 | 8d08f18a | Kostas Papadimitriou | views.ListView.VM_OS_ICONS = window.os_icons || []; |
370 | 8d08f18a | Kostas Papadimitriou | |
371 | 8d08f18a | Kostas Papadimitriou | views.ListView.STATE_CLASSES = { |
372 | 8d08f18a | Kostas Papadimitriou | 'UNKNOWN': ['error-state'], |
373 | 8d08f18a | Kostas Papadimitriou | 'BUILD': ['build-state'], |
374 | 8d08f18a | Kostas Papadimitriou | 'REBOOT': ['rebooting-state'], |
375 | 8d08f18a | Kostas Papadimitriou | 'STOPPED': ['terminated-state'], |
376 | 8d08f18a | Kostas Papadimitriou | 'ACTIVE': ['running-state'], |
377 | 8d08f18a | Kostas Papadimitriou | 'ERROR': ['error-state'], |
378 | 8d08f18a | Kostas Papadimitriou | 'DELETE': ['destroying-state'], |
379 | 8d08f18a | Kostas Papadimitriou | 'DESTROY': ['destroying-state'], |
380 | 8d08f18a | Kostas Papadimitriou | 'BUILD_INIT': ['build-state'], |
381 | 8d08f18a | Kostas Papadimitriou | 'BUILD_COPY': ['build-state'], |
382 | 8d08f18a | Kostas Papadimitriou | 'BUILD_FINAL': ['build-state'], |
383 | 8d08f18a | Kostas Papadimitriou | 'SHUTDOWN': ['shutting-state'], |
384 | 8d08f18a | Kostas Papadimitriou | 'START': ['starting-state'], |
385 | 8d08f18a | Kostas Papadimitriou | 'CONNECT': ['connecting-state'], |
386 | 8d08f18a | Kostas Papadimitriou | 'DISCONNECT': ['disconnecting-state'] |
387 | 8d08f18a | Kostas Papadimitriou | }; |
388 | 8d08f18a | Kostas Papadimitriou | |
389 | 8d08f18a | Kostas Papadimitriou | })(this); |