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