root / snf-cyclades-app / synnefo / ui / static / snf / js / ui / web / ui_main_view.js @ 643fe7e3
History | View | Annotate | Download (41.7 kB)
1 | 00469232 | Kostas Papadimitriou | // Copyright 2011 GRNET S.A. All rights reserved.
|
---|---|---|---|
2 | 00469232 | Kostas Papadimitriou | //
|
3 | 00469232 | Kostas Papadimitriou | // Redistribution and use in source and binary forms, with or
|
4 | 00469232 | Kostas Papadimitriou | // without modification, are permitted provided that the following
|
5 | 00469232 | Kostas Papadimitriou | // conditions are met:
|
6 | 00469232 | Kostas Papadimitriou | //
|
7 | 00469232 | Kostas Papadimitriou | // 1. Redistributions of source code must retain the above
|
8 | 00469232 | Kostas Papadimitriou | // copyright notice, this list of conditions and the following
|
9 | 00469232 | Kostas Papadimitriou | // disclaimer.
|
10 | 00469232 | Kostas Papadimitriou | //
|
11 | 00469232 | Kostas Papadimitriou | // 2. Redistributions in binary form must reproduce the above
|
12 | 00469232 | Kostas Papadimitriou | // copyright notice, this list of conditions and the following
|
13 | 00469232 | Kostas Papadimitriou | // disclaimer in the documentation and/or other materials
|
14 | 00469232 | Kostas Papadimitriou | // provided with the distribution.
|
15 | 00469232 | Kostas Papadimitriou | //
|
16 | 00469232 | Kostas Papadimitriou | // THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS
|
17 | 00469232 | Kostas Papadimitriou | // OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
18 | 00469232 | Kostas Papadimitriou | // WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
19 | 00469232 | Kostas Papadimitriou | // PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR
|
20 | 00469232 | Kostas Papadimitriou | // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
21 | 00469232 | Kostas Papadimitriou | // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
22 | 00469232 | Kostas Papadimitriou | // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
|
23 | 00469232 | Kostas Papadimitriou | // USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
|
24 | 00469232 | Kostas Papadimitriou | // AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
25 | 00469232 | Kostas Papadimitriou | // LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
26 | 00469232 | Kostas Papadimitriou | // ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
27 | 00469232 | Kostas Papadimitriou | // POSSIBILITY OF SUCH DAMAGE.
|
28 | 00469232 | Kostas Papadimitriou | //
|
29 | 00469232 | Kostas Papadimitriou | // The views and conclusions contained in the software and
|
30 | 00469232 | Kostas Papadimitriou | // documentation are those of the authors and should not be
|
31 | 00469232 | Kostas Papadimitriou | // interpreted as representing official policies, either expressed
|
32 | 00469232 | Kostas Papadimitriou | // or implied, of GRNET S.A.
|
33 | 00469232 | Kostas Papadimitriou | //
|
34 | 00469232 | Kostas Papadimitriou | |
35 | 8d08f18a | Kostas Papadimitriou | ;(function(root){
|
36 | 8d08f18a | Kostas Papadimitriou | |
37 | 8d08f18a | Kostas Papadimitriou | // root
|
38 | 8d08f18a | Kostas Papadimitriou | var root = root;
|
39 | 8d08f18a | Kostas Papadimitriou | |
40 | 8d08f18a | Kostas Papadimitriou | // setup namepsaces
|
41 | 8d08f18a | Kostas Papadimitriou | var snf = root.synnefo = root.synnefo || {};
|
42 | 8d08f18a | Kostas Papadimitriou | var models = snf.models = snf.models || {}
|
43 | 8d08f18a | Kostas Papadimitriou | var storage = snf.storage = snf.storage || {};
|
44 | 8d08f18a | Kostas Papadimitriou | var ui = snf.ui = snf.ui || {};
|
45 | 8d08f18a | Kostas Papadimitriou | |
46 | 8d08f18a | Kostas Papadimitriou | var views = snf.views = snf.views || {}
|
47 | 8d08f18a | Kostas Papadimitriou | |
48 | 8d08f18a | Kostas Papadimitriou | // shortcuts
|
49 | 8d08f18a | Kostas Papadimitriou | var bb = root.Backbone;
|
50 | 8d08f18a | Kostas Papadimitriou | var util = snf.util;
|
51 | 8d08f18a | Kostas Papadimitriou | |
52 | 1e882dd7 | Kostas Papadimitriou | // generic details overlay view.
|
53 | 1e882dd7 | Kostas Papadimitriou | views.DetailsView = views.Overlay.extend({ |
54 | 1e882dd7 | Kostas Papadimitriou | view_id: "details_view", |
55 | 1e882dd7 | Kostas Papadimitriou | |
56 | 1e882dd7 | Kostas Papadimitriou | content_selector: "#details-overlay", |
57 | 1e882dd7 | Kostas Papadimitriou | css_class: 'overlay-api-info overlay-info', |
58 | 1e882dd7 | Kostas Papadimitriou | overlay_id: "overlay-details", |
59 | 1e882dd7 | Kostas Papadimitriou | |
60 | 1e882dd7 | Kostas Papadimitriou | subtitle: "", |
61 | 1e882dd7 | Kostas Papadimitriou | title: "Details", |
62 | 1e882dd7 | Kostas Papadimitriou | |
63 | 1e882dd7 | Kostas Papadimitriou | show: function(title, msg, content) { |
64 | 1e882dd7 | Kostas Papadimitriou | this.title = title;
|
65 | 1e882dd7 | Kostas Papadimitriou | this.msg = msg;
|
66 | 1e882dd7 | Kostas Papadimitriou | this.content = content;
|
67 | 1e882dd7 | Kostas Papadimitriou | views.DetailsView.__super__.show.apply(this);
|
68 | 1e882dd7 | Kostas Papadimitriou | }, |
69 | 1e882dd7 | Kostas Papadimitriou | |
70 | 1e882dd7 | Kostas Papadimitriou | beforeOpen: function() { |
71 | 1e882dd7 | Kostas Papadimitriou | this.set_title(this.title); |
72 | 1e882dd7 | Kostas Papadimitriou | if (!this.msg) { |
73 | 1e882dd7 | Kostas Papadimitriou | this.$(".description.intro").hide() |
74 | 1e882dd7 | Kostas Papadimitriou | } else {
|
75 | 1e882dd7 | Kostas Papadimitriou | this.$(".description.intro").html(this.msg).show(); |
76 | 1e882dd7 | Kostas Papadimitriou | } |
77 | 1e882dd7 | Kostas Papadimitriou | |
78 | 1e882dd7 | Kostas Papadimitriou | if (!this.content) { |
79 | 1e882dd7 | Kostas Papadimitriou | this.$(".description.subinfo").hide() |
80 | 1e882dd7 | Kostas Papadimitriou | } else {
|
81 | 1e882dd7 | Kostas Papadimitriou | this.$(".description.subinfo").html(this.content).show(); |
82 | 1e882dd7 | Kostas Papadimitriou | }; |
83 | 1e882dd7 | Kostas Papadimitriou | } |
84 | 1e882dd7 | Kostas Papadimitriou | |
85 | 1e882dd7 | Kostas Papadimitriou | }); |
86 | 1e882dd7 | Kostas Papadimitriou | |
87 | a6b9836b | Kostas Papadimitriou | views.SuspendedVMView = views.FeedbackView.extend({ |
88 | a6b9836b | Kostas Papadimitriou | view_id: "suspended_info_view", |
89 | a6b9836b | Kostas Papadimitriou | |
90 | a6b9836b | Kostas Papadimitriou | css_class: 'overlay-api-info overlay-error non-critical', |
91 | a6b9836b | Kostas Papadimitriou | overlay_id: "overlay-api-info", |
92 | a6b9836b | Kostas Papadimitriou | |
93 | a6b9836b | Kostas Papadimitriou | subtitle: "", |
94 | a6b9836b | Kostas Papadimitriou | title: "VM Suspended", |
95 | a6b9836b | Kostas Papadimitriou | |
96 | a6b9836b | Kostas Papadimitriou | beforeOpen: function() { |
97 | a6b9836b | Kostas Papadimitriou | views.SuspendedVMView.__super__.beforeOpen.apply(this);
|
98 | d1892661 | Kostas Papadimitriou | $(this.$(".form-field label")[0]).html($("#suspended-vm-overlay .description").html()) |
99 | a6b9836b | Kostas Papadimitriou | }, |
100 | a6b9836b | Kostas Papadimitriou | |
101 | a6b9836b | Kostas Papadimitriou | show: function(vm, data, collect_data, extra_data, cb) { |
102 | a6b9836b | Kostas Papadimitriou | this.vm = vm;
|
103 | a6b9836b | Kostas Papadimitriou | data = "Suspended VM Details";
|
104 | a6b9836b | Kostas Papadimitriou | data += "\n====================";
|
105 | a6b9836b | Kostas Papadimitriou | data += "\nID: " + vm.id;
|
106 | a6b9836b | Kostas Papadimitriou | data += "\nName: " + vm.get('name'); |
107 | 46987d1c | Kostas Papadimitriou | var public_ips = vm.get_public_ips();
|
108 | 46987d1c | Kostas Papadimitriou | _.each(public_ips, function(ip) {
|
109 | 46987d1c | Kostas Papadimitriou | data += "\nPublic IP{0}: {1}".format(ip.get('type'), ip.get('ip_address')); |
110 | 46987d1c | Kostas Papadimitriou | }); |
111 | a6b9836b | Kostas Papadimitriou | data += "\n\n";
|
112 | a6b9836b | Kostas Papadimitriou | views.SuspendedVMView.__super__.show.call(this, data, collect_data, extra_data, cb);
|
113 | a6b9836b | Kostas Papadimitriou | } |
114 | a6b9836b | Kostas Papadimitriou | |
115 | a6b9836b | Kostas Papadimitriou | }); |
116 | a6b9836b | Kostas Papadimitriou | |
117 | 978648f4 | Kostas Papadimitriou | views.ApiInfoView = views.Overlay.extend({ |
118 | 978648f4 | Kostas Papadimitriou | view_id: "api_info_view", |
119 | 978648f4 | Kostas Papadimitriou | |
120 | 978648f4 | Kostas Papadimitriou | content_selector: "#api-info-overlay", |
121 | 978648f4 | Kostas Papadimitriou | css_class: 'overlay-api-info overlay-info', |
122 | 978648f4 | Kostas Papadimitriou | overlay_id: "overlay-api-info", |
123 | 978648f4 | Kostas Papadimitriou | |
124 | 978648f4 | Kostas Papadimitriou | subtitle: "", |
125 | 978648f4 | Kostas Papadimitriou | title: "API Access", |
126 | 978648f4 | Kostas Papadimitriou | |
127 | 978648f4 | Kostas Papadimitriou | beforeOpen: function() { |
128 | 978648f4 | Kostas Papadimitriou | var cont = this.$(".copy-content p"); |
129 | afe9ca75 | Kostas Papadimitriou | var token = snf.user.get_token();
|
130 | 978648f4 | Kostas Papadimitriou | |
131 | 978648f4 | Kostas Papadimitriou | cont.html("");
|
132 | 978648f4 | Kostas Papadimitriou | cont.text(token); |
133 | 9cc27975 | Kostas Papadimitriou | |
134 | 9cc27975 | Kostas Papadimitriou | this.cont = cont;
|
135 | 9cc27975 | Kostas Papadimitriou | this.token = token;
|
136 | 9cc27975 | Kostas Papadimitriou | try { delete this.clip; } catch (err) {}; |
137 | 9cc27975 | Kostas Papadimitriou | }, |
138 | 978648f4 | Kostas Papadimitriou | |
139 | 9cc27975 | Kostas Papadimitriou | onOpen: function() { |
140 | 9cc27975 | Kostas Papadimitriou | views.ApiInfoView.__super__.onOpen(this, arguments); |
141 | 9cc27975 | Kostas Papadimitriou | this.clip = new snf.util.ClipHelper(this.cont.parent(), this.token); |
142 | 978648f4 | Kostas Papadimitriou | }, |
143 | 978648f4 | Kostas Papadimitriou | |
144 | 978648f4 | Kostas Papadimitriou | onClose: function() { |
145 | 978648f4 | Kostas Papadimitriou | var cont = this.$(".copy-content p"); |
146 | 85f1cd1e | Kostas Papadimitriou | var token = snf.user.token;
|
147 | 978648f4 | Kostas Papadimitriou | cont.html("");
|
148 | 978648f4 | Kostas Papadimitriou | } |
149 | 978648f4 | Kostas Papadimitriou | }); |
150 | 978648f4 | Kostas Papadimitriou | |
151 | dc020cf6 | Kostas Papadimitriou | // TODO: implement me
|
152 | dc020cf6 | Kostas Papadimitriou | views.NoticeView = views.Overlay.extend({}); |
153 | 8d08f18a | Kostas Papadimitriou | |
154 | 8d08f18a | Kostas Papadimitriou | views.MultipleActionsView = views.View.extend({ |
155 | 8d08f18a | Kostas Papadimitriou | view_id: "multiple_actions", |
156 | 8d08f18a | Kostas Papadimitriou | |
157 | 8d08f18a | Kostas Papadimitriou | _actions: {},
|
158 | 8d08f18a | Kostas Papadimitriou | el: '#multiple_actions_container', |
159 | 8d08f18a | Kostas Papadimitriou | |
160 | 8d08f18a | Kostas Papadimitriou | initialize: function() { |
161 | 8d08f18a | Kostas Papadimitriou | this.actions = {};
|
162 | 101e6604 | Kostas Papadimitriou | this.ns_config = {};
|
163 | 101e6604 | Kostas Papadimitriou | |
164 | 8d08f18a | Kostas Papadimitriou | views.MultipleActionsView.__super__.initialize.call(this);
|
165 | 101e6604 | Kostas Papadimitriou | |
166 | 101e6604 | Kostas Papadimitriou | this.ns_tpl = this.$(".confirm_multiple_actions-template").clone() |
167 | 122850c5 | Kostas Papadimitriou | |
168 | 8d08f18a | Kostas Papadimitriou | this.init_handlers();
|
169 | 8d08f18a | Kostas Papadimitriou | this.update_layout();
|
170 | 8d08f18a | Kostas Papadimitriou | |
171 | 8d08f18a | Kostas Papadimitriou | // for heavy resize/scroll window events
|
172 | 8d08f18a | Kostas Papadimitriou | // do it `like a boss`
|
173 | 122850c5 | Kostas Papadimitriou | this.fix_position = _.throttle(this.fix_position, 100); |
174 | 2506f741 | Kostas Papadimitriou | this.update_layout = _.throttle(this.update_layout, 100); |
175 | 8d08f18a | Kostas Papadimitriou | this.show_limit = 1; |
176 | 101e6604 | Kostas Papadimitriou | |
177 | 101e6604 | Kostas Papadimitriou | this.init_ns("vms", { |
178 | 101e6604 | Kostas Papadimitriou | msg_tpl:"Your actions will affect 1 machine", |
179 | 101e6604 | Kostas Papadimitriou | msg_tpl_plural:"Your actions will affect {0} machines", |
180 | 101e6604 | Kostas Papadimitriou | actions_msg: {confirm: "Confirm all", cancel: "Cancel all"}, |
181 | 101e6604 | Kostas Papadimitriou | limit: 1, |
182 | 101e6604 | Kostas Papadimitriou | cancel_all: function() { snf.storage.vms.reset_pending_actions(); }, |
183 | 101e6604 | Kostas Papadimitriou | do_all: function() { snf.storage.vms.do_all_pending_actions(); } |
184 | 101e6604 | Kostas Papadimitriou | }); |
185 | 101e6604 | Kostas Papadimitriou | |
186 | 101e6604 | Kostas Papadimitriou | this.init_ns("nets", { |
187 | 101e6604 | Kostas Papadimitriou | msg_tpl:"Your actions will affect 1 private network", |
188 | 101e6604 | Kostas Papadimitriou | msg_tpl_plural:"Your actions will affect {0} private networks", |
189 | 101e6604 | Kostas Papadimitriou | actions_msg: {confirm: "Confirm all", cancel: "Cancel all"}, |
190 | 101e6604 | Kostas Papadimitriou | limit: 1, |
191 | 3c446f85 | Kostas Papadimitriou | cancel_all: function(actions, config) { |
192 | 3c446f85 | Kostas Papadimitriou | _.each(actions, function(action, id) {
|
193 | 3c446f85 | Kostas Papadimitriou | action.model.actions.reset_pending(); |
194 | 3c446f85 | Kostas Papadimitriou | }); |
195 | 3c446f85 | Kostas Papadimitriou | }, |
196 | 3c446f85 | Kostas Papadimitriou | do_all: function(actions, config) { |
197 | 3c446f85 | Kostas Papadimitriou | _.each(actions, function(action, id) {
|
198 | 3c446f85 | Kostas Papadimitriou | var action_method = "do_{0}".format(action.actions[0]); |
199 | 3c446f85 | Kostas Papadimitriou | action.model[action_method].apply(action.model); |
200 | 3c446f85 | Kostas Papadimitriou | }); |
201 | 3c446f85 | Kostas Papadimitriou | } |
202 | 101e6604 | Kostas Papadimitriou | }); |
203 | 101e6604 | Kostas Papadimitriou | |
204 | 101e6604 | Kostas Papadimitriou | this.init_ns("reboots", { |
205 | 101e6604 | Kostas Papadimitriou | msg_tpl:"1 machine needs to be rebooted for changes to apply.", |
206 | 101e6604 | Kostas Papadimitriou | msg_tpl_plural:"{0} machines needs to be rebooted for changes to apply.", |
207 | 101e6604 | Kostas Papadimitriou | actions_msg: {confirm: "Reboot all", cancel: "Cancel all"}, |
208 | 101e6604 | Kostas Papadimitriou | limit: 0, |
209 | 101e6604 | Kostas Papadimitriou | cancel_all: function() { snf.storage.vms.reset_reboot_required(); }, |
210 | 101e6604 | Kostas Papadimitriou | do_all: function() { snf.storage.vms.do_all_reboots(); } |
211 | 101e6604 | Kostas Papadimitriou | }); |
212 | 3c446f85 | Kostas Papadimitriou | |
213 | 3c446f85 | Kostas Papadimitriou | this.init_ns("ips", { |
214 | 3c446f85 | Kostas Papadimitriou | msg_tpl:"Your actions will affect 1 IP address.", |
215 | 3c446f85 | Kostas Papadimitriou | msg_tpl_plural:"{0} actions will affect {0} IP addresses.", |
216 | 3c446f85 | Kostas Papadimitriou | actions_msg: {confirm: "Confirm all", cancel: "Cancel all"}, |
217 | 3c446f85 | Kostas Papadimitriou | limit: 1, |
218 | 3c446f85 | Kostas Papadimitriou | cancel_all: function(actions, config) { |
219 | 3c446f85 | Kostas Papadimitriou | _.each(actions, function(action, id) {
|
220 | 3c446f85 | Kostas Papadimitriou | action.model.actions.reset_pending(); |
221 | 3c446f85 | Kostas Papadimitriou | }); |
222 | 3c446f85 | Kostas Papadimitriou | }, |
223 | 3c446f85 | Kostas Papadimitriou | do_all: function(actions, config) { |
224 | 3c446f85 | Kostas Papadimitriou | _.each(actions, function(action, id) {
|
225 | 3c446f85 | Kostas Papadimitriou | var action_method = "do_{0}".format(action.actions[0]); |
226 | 3c446f85 | Kostas Papadimitriou | action.model[action_method].apply(action.model); |
227 | 3c446f85 | Kostas Papadimitriou | }); |
228 | 3c446f85 | Kostas Papadimitriou | } |
229 | 3c446f85 | Kostas Papadimitriou | }); |
230 | 3c446f85 | Kostas Papadimitriou | |
231 | 3c446f85 | Kostas Papadimitriou | |
232 | 3c446f85 | Kostas Papadimitriou | this.init_ns("keys", { |
233 | 3c446f85 | Kostas Papadimitriou | msg_tpl:"Your actions will affect 1 public key.", |
234 | 3c446f85 | Kostas Papadimitriou | msg_tpl_plural:"{0} actions will affect {0} public keys.", |
235 | 3c446f85 | Kostas Papadimitriou | actions_msg: {confirm: "Confirm all", cancel: "Cancel all"}, |
236 | 3c446f85 | Kostas Papadimitriou | limit: 1, |
237 | 3c446f85 | Kostas Papadimitriou | cancel_all: function(actions, config) { |
238 | 3c446f85 | Kostas Papadimitriou | _.each(actions, function(action, id) {
|
239 | 3c446f85 | Kostas Papadimitriou | action.model.actions.reset_pending(); |
240 | 3c446f85 | Kostas Papadimitriou | }); |
241 | 3c446f85 | Kostas Papadimitriou | }, |
242 | 3c446f85 | Kostas Papadimitriou | do_all: function(actions, config) { |
243 | 3c446f85 | Kostas Papadimitriou | _.each(actions, function(action, id) {
|
244 | 3c446f85 | Kostas Papadimitriou | var action_method = "do_{0}".format(action.actions[0]); |
245 | 3c446f85 | Kostas Papadimitriou | action.model[action_method].apply(action.model); |
246 | 3c446f85 | Kostas Papadimitriou | }); |
247 | 3c446f85 | Kostas Papadimitriou | } |
248 | 3c446f85 | Kostas Papadimitriou | |
249 | 3c446f85 | Kostas Papadimitriou | }); |
250 | 101e6604 | Kostas Papadimitriou | }, |
251 | 101e6604 | Kostas Papadimitriou | |
252 | 101e6604 | Kostas Papadimitriou | init_ns: function(ns, params) { |
253 | 101e6604 | Kostas Papadimitriou | this.actions[ns] = {};
|
254 | 101e6604 | Kostas Papadimitriou | var nsconf = this.ns_config[ns] = params || {}; |
255 | 101e6604 | Kostas Papadimitriou | nsconf.cont = $(this.$("#conirm_multiple_cont_template").clone()); |
256 | 101e6604 | Kostas Papadimitriou | nsconf.cont.attr("id", "confirm_multiple_cont_" + ns); |
257 | 101e6604 | Kostas Papadimitriou | $(this.el).find(".ns-confirms-cont").append(nsconf.cont).addClass(ns); |
258 | 101e6604 | Kostas Papadimitriou | $(this.el).find(".ns-confirms-cont").append(nsconf.cont).addClass("confirm-ns"); |
259 | 101e6604 | Kostas Papadimitriou | nsconf.cont.find(".msg button.yes").text(
|
260 | 101e6604 | Kostas Papadimitriou | nsconf.actions_msg.confirm).click(_.bind(this.do_all, this, ns)); |
261 | 101e6604 | Kostas Papadimitriou | nsconf.cont.find(".msg button.no").text(
|
262 | 101e6604 | Kostas Papadimitriou | nsconf.actions_msg.cancel).click(_.bind(this.cancel_all, this, ns)); |
263 | 101e6604 | Kostas Papadimitriou | }, |
264 | 101e6604 | Kostas Papadimitriou | |
265 | 101e6604 | Kostas Papadimitriou | do_all: function(ns) { |
266 | 3c446f85 | Kostas Papadimitriou | this.ns_config[ns].do_all.apply(this, [this.actions[ns], this.ns_config[ns]]); |
267 | 101e6604 | Kostas Papadimitriou | }, |
268 | 101e6604 | Kostas Papadimitriou | |
269 | 101e6604 | Kostas Papadimitriou | cancel_all: function(ns) { |
270 | 3c446f85 | Kostas Papadimitriou | this.ns_config[ns].cancel_all.apply(this, [this.actions[ns], this.ns_config[ns]]); |
271 | 3c446f85 | Kostas Papadimitriou | }, |
272 | 3c446f85 | Kostas Papadimitriou | |
273 | 3c446f85 | Kostas Papadimitriou | register_actions_ns: function(store, ns) { |
274 | 3c446f85 | Kostas Papadimitriou | store.bind("action:set-pending", function(action, actions, model) { |
275 | 3c446f85 | Kostas Papadimitriou | this.handle_action_add(ns, model, [action]);
|
276 | 3c446f85 | Kostas Papadimitriou | }, this);
|
277 | 3c446f85 | Kostas Papadimitriou | store.bind("action:unset-pending", function(action, actions, model) { |
278 | 3c446f85 | Kostas Papadimitriou | this.handle_action_remove(ns, model, action);
|
279 | 3c446f85 | Kostas Papadimitriou | }, this);
|
280 | 3c446f85 | Kostas Papadimitriou | store.bind("action:reset-pending", function(actions, model) { |
281 | 3c446f85 | Kostas Papadimitriou | _.each(actions.actions, function(action) {
|
282 | 3c446f85 | Kostas Papadimitriou | this.handle_action_remove(ns, model, action);
|
283 | 3c446f85 | Kostas Papadimitriou | }, this);
|
284 | 3c446f85 | Kostas Papadimitriou | }, this);
|
285 | 8d08f18a | Kostas Papadimitriou | }, |
286 | 8d08f18a | Kostas Papadimitriou | |
287 | 8d08f18a | Kostas Papadimitriou | init_handlers: function() { |
288 | 122850c5 | Kostas Papadimitriou | var self = this; |
289 | 122850c5 | Kostas Papadimitriou | |
290 | 8d08f18a | Kostas Papadimitriou | $(window).resize(_.bind(function(){ |
291 | 8d08f18a | Kostas Papadimitriou | this.fix_position();
|
292 | 8d08f18a | Kostas Papadimitriou | }, this));
|
293 | 122850c5 | Kostas Papadimitriou | |
294 | 8d08f18a | Kostas Papadimitriou | $(window).scroll(_.bind(function(){ |
295 | 8d08f18a | Kostas Papadimitriou | this.fix_position();
|
296 | 8d08f18a | Kostas Papadimitriou | }, this));
|
297 | b1e6a2de | Kostas Papadimitriou | |
298 | 426e1fb9 | Kostas Papadimitriou | storage.vms.bind("change:pending_action",
|
299 | 426e1fb9 | Kostas Papadimitriou | _.bind(this.handle_action_add, this, "vms")); |
300 | 426e1fb9 | Kostas Papadimitriou | storage.vms.bind("change:reboot_required",
|
301 | 426e1fb9 | Kostas Papadimitriou | _.bind(this.handle_action_add, this, "reboots")); |
302 | 3c446f85 | Kostas Papadimitriou | |
303 | 3c446f85 | Kostas Papadimitriou | var ns_map = {
|
304 | 3c446f85 | Kostas Papadimitriou | 'ips': storage.floating_ips,
|
305 | 3c446f85 | Kostas Papadimitriou | 'keys': storage.keys,
|
306 | 3c446f85 | Kostas Papadimitriou | 'nets': storage.networks
|
307 | 3c446f85 | Kostas Papadimitriou | } |
308 | 3c446f85 | Kostas Papadimitriou | _.each(ns_map, function(store, ns) {
|
309 | 3c446f85 | Kostas Papadimitriou | this.register_actions_ns(store, ns);
|
310 | 3c446f85 | Kostas Papadimitriou | }, this);
|
311 | 3c446f85 | Kostas Papadimitriou | }, |
312 | 3c446f85 | Kostas Papadimitriou | |
313 | 3c446f85 | Kostas Papadimitriou | handle_action_remove: function(type, model, action) { |
314 | 3c446f85 | Kostas Papadimitriou | var actions = this.actions[type]; |
315 | 3c446f85 | Kostas Papadimitriou | var model_actions = actions[model.id] && actions[model.id].actions;
|
316 | 3c446f85 | Kostas Papadimitriou | if (!model_actions) { return } |
317 | 3c446f85 | Kostas Papadimitriou | actions[model.id].actions = _.without(model_actions, action); |
318 | 3c446f85 | Kostas Papadimitriou | if (actions[model.id].actions.length == 0) { |
319 | 3c446f85 | Kostas Papadimitriou | delete actions[model.id];
|
320 | 3c446f85 | Kostas Papadimitriou | } |
321 | 3c446f85 | Kostas Papadimitriou | this.update_layout();
|
322 | 8d08f18a | Kostas Papadimitriou | }, |
323 | b1e6a2de | Kostas Papadimitriou | |
324 | 101e6604 | Kostas Papadimitriou | handle_action_add: function(type, model, action) { |
325 | 101e6604 | Kostas Papadimitriou | var actions = this.actions[type]; |
326 | 101e6604 | Kostas Papadimitriou | |
327 | 3c446f85 | Kostas Papadimitriou | if (type == "keys") { |
328 | 3c446f85 | Kostas Papadimitriou | actions[model.id] = {model: model, actions: action}; |
329 | 3c446f85 | Kostas Papadimitriou | } |
330 | 3c446f85 | Kostas Papadimitriou | |
331 | 3c446f85 | Kostas Papadimitriou | if (type == "ips") { |
332 | 3c446f85 | Kostas Papadimitriou | actions[model.id] = {model: model, actions: action}; |
333 | 3c446f85 | Kostas Papadimitriou | } |
334 | 3c446f85 | Kostas Papadimitriou | |
335 | 101e6604 | Kostas Papadimitriou | if (type == "nets") { |
336 | 3c446f85 | Kostas Papadimitriou | actions[model.id] = {model: model, actions: action}; |
337 | 8d08f18a | Kostas Papadimitriou | } |
338 | 8d08f18a | Kostas Papadimitriou | |
339 | 101e6604 | Kostas Papadimitriou | if (type == "vms") { |
340 | 101e6604 | Kostas Papadimitriou | _.each(actions, function(action) {
|
341 | 101e6604 | Kostas Papadimitriou | if (action.model.id == model.id) {
|
342 | 101e6604 | Kostas Papadimitriou | delete actions[action]
|
343 | 101e6604 | Kostas Papadimitriou | } |
344 | 101e6604 | Kostas Papadimitriou | }); |
345 | 101e6604 | Kostas Papadimitriou | |
346 | 101e6604 | Kostas Papadimitriou | var actobject = {};
|
347 | 101e6604 | Kostas Papadimitriou | actobject[action] = [[]]; |
348 | 101e6604 | Kostas Papadimitriou | actions[model.id] = {model: model, actions: actobject}; |
349 | 101e6604 | Kostas Papadimitriou | if (typeof action == "undefined") { |
350 | 101e6604 | Kostas Papadimitriou | delete actions[model.id]
|
351 | 101e6604 | Kostas Papadimitriou | } |
352 | 101e6604 | Kostas Papadimitriou | } |
353 | 8d08f18a | Kostas Papadimitriou | |
354 | 101e6604 | Kostas Papadimitriou | if (type == "reboots") { |
355 | 101e6604 | Kostas Papadimitriou | _.each(actions, function(action) {
|
356 | 101e6604 | Kostas Papadimitriou | if (action.model.id == model.id) {
|
357 | 101e6604 | Kostas Papadimitriou | delete actions[action]
|
358 | 101e6604 | Kostas Papadimitriou | } |
359 | 101e6604 | Kostas Papadimitriou | }); |
360 | 101e6604 | Kostas Papadimitriou | var actobject = {};
|
361 | 101e6604 | Kostas Papadimitriou | actobject['reboot'] = [[]];
|
362 | 101e6604 | Kostas Papadimitriou | actions[model.id] = {model: model, actions: actobject}; |
363 | 101e6604 | Kostas Papadimitriou | if (!action) {
|
364 | 101e6604 | Kostas Papadimitriou | delete actions[model.id]
|
365 | 101e6604 | Kostas Papadimitriou | } |
366 | 101e6604 | Kostas Papadimitriou | } |
367 | 101e6604 | Kostas Papadimitriou | |
368 | 8d08f18a | Kostas Papadimitriou | this.update_layout();
|
369 | 8d08f18a | Kostas Papadimitriou | }, |
370 | 122850c5 | Kostas Papadimitriou | |
371 | 101e6604 | Kostas Papadimitriou | update_actions_content: function(ns) { |
372 | 101e6604 | Kostas Papadimitriou | var conf = this.ns_config[ns]; |
373 | 101e6604 | Kostas Papadimitriou | conf.cont.find(".details").empty();
|
374 | 101e6604 | Kostas Papadimitriou | conf.cont.find(".msg p").text(""); |
375 | 101e6604 | Kostas Papadimitriou | |
376 | 101e6604 | Kostas Papadimitriou | var count = 0; |
377 | 101e6604 | Kostas Papadimitriou | var actionscount = 0; |
378 | 101e6604 | Kostas Papadimitriou | _.each(this.actions[ns], function(actions, model_id) { |
379 | 101e6604 | Kostas Papadimitriou | count++; |
380 | 101e6604 | Kostas Papadimitriou | _.each(actions.actions, function(params, act_name){
|
381 | 3c446f85 | Kostas Papadimitriou | if (_.isString(params)) {
|
382 | 3c446f85 | Kostas Papadimitriou | actionscount++; |
383 | 3c446f85 | Kostas Papadimitriou | return
|
384 | 3c446f85 | Kostas Papadimitriou | } |
385 | 101e6604 | Kostas Papadimitriou | if (params && params.length) {
|
386 | 101e6604 | Kostas Papadimitriou | actionscount += params.length; |
387 | 101e6604 | Kostas Papadimitriou | } else {
|
388 | 101e6604 | Kostas Papadimitriou | actionscount++; |
389 | 101e6604 | Kostas Papadimitriou | } |
390 | 101e6604 | Kostas Papadimitriou | }) |
391 | 101e6604 | Kostas Papadimitriou | this.total_confirm_actions++;
|
392 | 101e6604 | Kostas Papadimitriou | }); |
393 | 101e6604 | Kostas Papadimitriou | |
394 | 101e6604 | Kostas Papadimitriou | var limit = conf.limit;
|
395 | 101e6604 | Kostas Papadimitriou | if (ui.main.current_view.view_id == "vm_list") { |
396 | 101e6604 | Kostas Papadimitriou | limit = 0;
|
397 | 101e6604 | Kostas Papadimitriou | } |
398 | 8d08f18a | Kostas Papadimitriou | |
399 | 101e6604 | Kostas Papadimitriou | if (actionscount > limit) {
|
400 | 101e6604 | Kostas Papadimitriou | conf.cont.show(); |
401 | 101e6604 | Kostas Papadimitriou | this.confirm_ns_open++;
|
402 | 101e6604 | Kostas Papadimitriou | } else {
|
403 | 101e6604 | Kostas Papadimitriou | conf.cont.hide(); |
404 | 101e6604 | Kostas Papadimitriou | } |
405 | 101e6604 | Kostas Papadimitriou | |
406 | 101e6604 | Kostas Papadimitriou | var msg = count > 1 ? conf.msg_tpl_plural : conf.msg_tpl; |
407 | 101e6604 | Kostas Papadimitriou | conf.cont.find(".msg p").text(msg.format(count));
|
408 | 8d08f18a | Kostas Papadimitriou | |
409 | 101e6604 | Kostas Papadimitriou | return conf.cont;
|
410 | 8d08f18a | Kostas Papadimitriou | }, |
411 | 8d08f18a | Kostas Papadimitriou | |
412 | 8d08f18a | Kostas Papadimitriou | fix_position: function() { |
413 | 8d08f18a | Kostas Papadimitriou | $('.confirm_multiple').removeClass('fixed'); |
414 | 8d08f18a | Kostas Papadimitriou | if (($(this.el).offset().top +$(this.el).height())> ($(window).scrollTop() + $(window).height())) { |
415 | 8d08f18a | Kostas Papadimitriou | $('.confirm_multiple').addClass('fixed'); |
416 | 8d08f18a | Kostas Papadimitriou | } |
417 | 8d08f18a | Kostas Papadimitriou | }, |
418 | 8d08f18a | Kostas Papadimitriou | |
419 | 8d08f18a | Kostas Papadimitriou | update_layout: function() { |
420 | 101e6604 | Kostas Papadimitriou | this.confirm_ns_open = 0; |
421 | 101e6604 | Kostas Papadimitriou | this.total_confirm_actions = 0; |
422 | 122850c5 | Kostas Papadimitriou | |
423 | 101e6604 | Kostas Papadimitriou | $(this.el).show(); |
424 | 101e6604 | Kostas Papadimitriou | $(this.el).find("#conirm_multiple_cont_template").hide(); |
425 | 101e6604 | Kostas Papadimitriou | $(this.el).find(".confirm-ns").show(); |
426 | 101e6604 | Kostas Papadimitriou | |
427 | 101e6604 | Kostas Papadimitriou | _.each(this.ns_config, _.bind(function(params, key) { |
428 | 101e6604 | Kostas Papadimitriou | this.update_actions_content(key);
|
429 | 101e6604 | Kostas Papadimitriou | }, this));
|
430 | 101e6604 | Kostas Papadimitriou | |
431 | 101e6604 | Kostas Papadimitriou | if (this.confirm_ns_open > 0) { |
432 | 8d08f18a | Kostas Papadimitriou | $(this.el).show(); |
433 | 101e6604 | Kostas Papadimitriou | this.$(".confirm-all-cont").hide(); |
434 | 101e6604 | Kostas Papadimitriou | this.$(".ns-confirms-cont").show(); |
435 | 8d08f18a | Kostas Papadimitriou | } else {
|
436 | 8d08f18a | Kostas Papadimitriou | $(this.el).hide(); |
437 | 101e6604 | Kostas Papadimitriou | this.$(".confirm-all-cont").hide(); |
438 | 101e6604 | Kostas Papadimitriou | this.$(".ns-confirms-cont").hide(); |
439 | 8d08f18a | Kostas Papadimitriou | } |
440 | 122850c5 | Kostas Papadimitriou | |
441 | 8d08f18a | Kostas Papadimitriou | $(window).trigger("resize"); |
442 | 8d08f18a | Kostas Papadimitriou | } |
443 | 8d08f18a | Kostas Papadimitriou | }) |
444 | 8d08f18a | Kostas Papadimitriou | |
445 | 8d08f18a | Kostas Papadimitriou | // menu wrapper view
|
446 | 8d08f18a | Kostas Papadimitriou | views.SelectView = views.View.extend({ |
447 | 8d08f18a | Kostas Papadimitriou | |
448 | 38dc3895 | Kostas Papadimitriou | initialize: function(view, router) { |
449 | 8d08f18a | Kostas Papadimitriou | this.parent = view;
|
450 | 38dc3895 | Kostas Papadimitriou | this.router = router;
|
451 | 8d08f18a | Kostas Papadimitriou | this.pane_view_selector = $(".css-tabs"); |
452 | 8d08f18a | Kostas Papadimitriou | this.machine_view_selector = $("#view-select"); |
453 | 8d08f18a | Kostas Papadimitriou | this.el = $(".css-tabs"); |
454 | 8d08f18a | Kostas Papadimitriou | this.title = $(".tab-name"); |
455 | 8d08f18a | Kostas Papadimitriou | |
456 | 8d08f18a | Kostas Papadimitriou | this.set_handlers();
|
457 | 8d08f18a | Kostas Papadimitriou | this.update_layout();
|
458 | 8d08f18a | Kostas Papadimitriou | |
459 | 8d08f18a | Kostas Papadimitriou | views.SelectView.__super__.initialize.apply(this, arguments); |
460 | 8d08f18a | Kostas Papadimitriou | }, |
461 | 8d08f18a | Kostas Papadimitriou | |
462 | 8d08f18a | Kostas Papadimitriou | clear_active: function() { |
463 | 8d08f18a | Kostas Papadimitriou | this.pane_view_selector.find("a").removeClass("active"); |
464 | 8d08f18a | Kostas Papadimitriou | this.machine_view_selector.find("a").removeClass("activelink"); |
465 | 8d08f18a | Kostas Papadimitriou | }, |
466 | 8d08f18a | Kostas Papadimitriou | |
467 | 8d08f18a | Kostas Papadimitriou | // intercept menu links
|
468 | 8d08f18a | Kostas Papadimitriou | set_handlers: function() { |
469 | 8d08f18a | Kostas Papadimitriou | var self = this; |
470 | 8d08f18a | Kostas Papadimitriou | this.pane_view_selector.find("a").hover(function(){ |
471 | 4e8e2834 | Kostas Papadimitriou | self.title.text($(this).data("hover-title")); |
472 | 8d08f18a | Kostas Papadimitriou | }, function(){
|
473 | 8d08f18a | Kostas Papadimitriou | self.title.text(self.parent.get_title()); |
474 | 8d08f18a | Kostas Papadimitriou | }); |
475 | 8d08f18a | Kostas Papadimitriou | |
476 | 8d08f18a | Kostas Papadimitriou | this.pane_view_selector.find("a#machines_view_link").click(_.bind(function(ev){ |
477 | 8d08f18a | Kostas Papadimitriou | ev.preventDefault(); |
478 | 38dc3895 | Kostas Papadimitriou | this.router.vms_index();
|
479 | 8d08f18a | Kostas Papadimitriou | }, this))
|
480 | 8d08f18a | Kostas Papadimitriou | this.pane_view_selector.find("a#networks_view_link").click(_.bind(function(ev){ |
481 | 8d08f18a | Kostas Papadimitriou | ev.preventDefault(); |
482 | 38dc3895 | Kostas Papadimitriou | this.router.networks_view();
|
483 | 8d08f18a | Kostas Papadimitriou | }, this))
|
484 | f0c38b0e | Kostas Papadimitriou | this.pane_view_selector.find("a#ips_view_link").click(_.bind(function(ev){ |
485 | 8d08f18a | Kostas Papadimitriou | ev.preventDefault(); |
486 | f0c38b0e | Kostas Papadimitriou | this.router.ips_view();
|
487 | f0c38b0e | Kostas Papadimitriou | }, this))
|
488 | f0c38b0e | Kostas Papadimitriou | this.pane_view_selector.find("a#public_keys_view_link").click(_.bind(function(ev){ |
489 | f0c38b0e | Kostas Papadimitriou | ev.preventDefault(); |
490 | f0c38b0e | Kostas Papadimitriou | this.router.public_keys_view();
|
491 | 8d08f18a | Kostas Papadimitriou | }, this))
|
492 | 8d08f18a | Kostas Papadimitriou | |
493 | 8d08f18a | Kostas Papadimitriou | this.machine_view_selector.find("a#machines_view_icon_link").click(_.bind(function(ev){ |
494 | 8d08f18a | Kostas Papadimitriou | ev.preventDefault(); |
495 | 8d08f18a | Kostas Papadimitriou | var d = $.now(); |
496 | 38dc3895 | Kostas Papadimitriou | this.router.vms_icon_view();
|
497 | 8d08f18a | Kostas Papadimitriou | }, this))
|
498 | 8d08f18a | Kostas Papadimitriou | this.machine_view_selector.find("a#machines_view_list_link").click(_.bind(function(ev){ |
499 | 8d08f18a | Kostas Papadimitriou | ev.preventDefault(); |
500 | 38dc3895 | Kostas Papadimitriou | this.router.vms_list_view();
|
501 | 8d08f18a | Kostas Papadimitriou | }, this))
|
502 | 8d08f18a | Kostas Papadimitriou | this.machine_view_selector.find("a#machines_view_single_link").click(_.bind(function(ev){ |
503 | 8d08f18a | Kostas Papadimitriou | ev.preventDefault(); |
504 | 38dc3895 | Kostas Papadimitriou | this.router.vms_single_view();
|
505 | 8d08f18a | Kostas Papadimitriou | }, this))
|
506 | 8d08f18a | Kostas Papadimitriou | }, |
507 | 8d08f18a | Kostas Papadimitriou | |
508 | 8d08f18a | Kostas Papadimitriou | update_layout: function() { |
509 | 8d08f18a | Kostas Papadimitriou | this.clear_active();
|
510 | 8d08f18a | Kostas Papadimitriou | |
511 | 8d08f18a | Kostas Papadimitriou | var pane_index = this.parent.pane_ids[this.parent.current_view_id]; |
512 | 8d08f18a | Kostas Papadimitriou | $(this.pane_view_selector.find("a")).removeClass("active"); |
513 | 8d08f18a | Kostas Papadimitriou | $(this.pane_view_selector.find("a").get(pane_index)).addClass("active"); |
514 | 8d08f18a | Kostas Papadimitriou | |
515 | 8d08f18a | Kostas Papadimitriou | if (this.parent.current_view && this.parent.current_view.vms_view) { |
516 | 8d08f18a | Kostas Papadimitriou | |
517 | 8d08f18a | Kostas Papadimitriou | if (storage.vms.length > 0) { |
518 | 8d08f18a | Kostas Papadimitriou | this.machine_view_selector.show();
|
519 | 8d08f18a | Kostas Papadimitriou | var machine_index = this.parent.views_ids[this.parent.current_view_id]; |
520 | 8d08f18a | Kostas Papadimitriou | $(this.machine_view_selector.find("a").get(machine_index)).addClass("activelink"); |
521 | 8d08f18a | Kostas Papadimitriou | } else {
|
522 | 8d08f18a | Kostas Papadimitriou | this.machine_view_selector.hide();
|
523 | 8d08f18a | Kostas Papadimitriou | } |
524 | 8d08f18a | Kostas Papadimitriou | } else {
|
525 | 8d08f18a | Kostas Papadimitriou | this.machine_view_selector.hide();
|
526 | 8d08f18a | Kostas Papadimitriou | } |
527 | 8d08f18a | Kostas Papadimitriou | |
528 | 8d08f18a | Kostas Papadimitriou | } |
529 | 8d08f18a | Kostas Papadimitriou | }); |
530 | 8d08f18a | Kostas Papadimitriou | |
531 | 8d08f18a | Kostas Papadimitriou | views.MainView = views.View.extend({ |
532 | 8d08f18a | Kostas Papadimitriou | el: 'body', |
533 | 8d08f18a | Kostas Papadimitriou | view_id: 'main', |
534 | 8d08f18a | Kostas Papadimitriou | |
535 | 8d08f18a | Kostas Papadimitriou | // FIXME: titles belong to SelectView
|
536 | 8d08f18a | Kostas Papadimitriou | views_titles: {
|
537 | 8d08f18a | Kostas Papadimitriou | 'icon': 'machines', 'single': 'machines', |
538 | 8d08f18a | Kostas Papadimitriou | 'list': 'machines', 'networks': 'networks', |
539 | cff6b795 | Vangelis Koukis | 'ips': 'IP addresses', |
540 | f0c38b0e | Kostas Papadimitriou | 'public-keys': 'public keys' |
541 | 8d08f18a | Kostas Papadimitriou | }, |
542 | 8d08f18a | Kostas Papadimitriou | |
543 | 8d08f18a | Kostas Papadimitriou | // indexes registry
|
544 | f0c38b0e | Kostas Papadimitriou | views_indexes: {
|
545 | f0c38b0e | Kostas Papadimitriou | 0: 'icon', |
546 | f0c38b0e | Kostas Papadimitriou | 2: 'single', |
547 | f0c38b0e | Kostas Papadimitriou | 1: 'list', |
548 | f0c38b0e | Kostas Papadimitriou | 3: 'networks', |
549 | f0c38b0e | Kostas Papadimitriou | 4: 'ips', |
550 | f0c38b0e | Kostas Papadimitriou | 5: 'public-keys' |
551 | f0c38b0e | Kostas Papadimitriou | }, |
552 | f0c38b0e | Kostas Papadimitriou | |
553 | f0c38b0e | Kostas Papadimitriou | views_pane_indexes: {
|
554 | f0c38b0e | Kostas Papadimitriou | 0: 'single', |
555 | f0c38b0e | Kostas Papadimitriou | 1: 'networks', |
556 | f0c38b0e | Kostas Papadimitriou | 2: 'ips', |
557 | f0c38b0e | Kostas Papadimitriou | 3: 'public-keys' |
558 | f0c38b0e | Kostas Papadimitriou | }, |
559 | 8d08f18a | Kostas Papadimitriou | |
560 | 8d08f18a | Kostas Papadimitriou | // views classes registry
|
561 | f0c38b0e | Kostas Papadimitriou | views_classes: {
|
562 | f0c38b0e | Kostas Papadimitriou | 'icon': views.IconView,
|
563 | f0c38b0e | Kostas Papadimitriou | 'single': views.SingleView,
|
564 | f0c38b0e | Kostas Papadimitriou | 'list': views.ListView,
|
565 | f0c38b0e | Kostas Papadimitriou | 'networks': views.NetworksPaneView,
|
566 | f0c38b0e | Kostas Papadimitriou | 'ips': views.IpsPaneView,
|
567 | f0c38b0e | Kostas Papadimitriou | 'public-keys': views.PublicKeysPaneView
|
568 | f0c38b0e | Kostas Papadimitriou | }, |
569 | 8d08f18a | Kostas Papadimitriou | |
570 | 8d08f18a | Kostas Papadimitriou | // view ids
|
571 | f0c38b0e | Kostas Papadimitriou | views_ids: {'icon':0, 'single':2, 'list':1, 'networks':3, 'ips':4, 'public-keys': 5}, |
572 | 8d08f18a | Kostas Papadimitriou | |
573 | 8d08f18a | Kostas Papadimitriou | // on which pane id each view exists
|
574 | 8d08f18a | Kostas Papadimitriou | // machine views (icon,single,list) are all on first pane
|
575 | f0c38b0e | Kostas Papadimitriou | pane_ids: {'icon':0, 'single':0, 'list':0, 'networks':1, 'ips':2, 'public-keys': 3}, |
576 | 8d08f18a | Kostas Papadimitriou | |
577 | 8d08f18a | Kostas Papadimitriou | initialize: function(show_view) { |
578 | 8d08f18a | Kostas Papadimitriou | if (!show_view) { show_view = 'icon' }; |
579 | 38dc3895 | Kostas Papadimitriou | |
580 | 38dc3895 | Kostas Papadimitriou | this.router = snf.router;
|
581 | e673a761 | Kostas Papadimitriou | this.empty_hidden = true; |
582 | 8d08f18a | Kostas Papadimitriou | // fallback to browser error reporting (true for debug)
|
583 | 8d08f18a | Kostas Papadimitriou | this.skip_errors = true |
584 | 8d08f18a | Kostas Papadimitriou | |
585 | 8d08f18a | Kostas Papadimitriou | // reset views
|
586 | 8d08f18a | Kostas Papadimitriou | this.views = {};
|
587 | 8d08f18a | Kostas Papadimitriou | |
588 | 23a3bb8e | Kostas Papadimitriou | this.el = $("#app"); |
589 | 8d08f18a | Kostas Papadimitriou | // reset main view status
|
590 | 8d08f18a | Kostas Papadimitriou | this._loaded = false; |
591 | 8d08f18a | Kostas Papadimitriou | this.status = "Initializing..."; |
592 | 8d08f18a | Kostas Papadimitriou | |
593 | 8d08f18a | Kostas Papadimitriou | // initialize handlers
|
594 | 8d08f18a | Kostas Papadimitriou | this.init_handlers();
|
595 | 8d08f18a | Kostas Papadimitriou | |
596 | 8d08f18a | Kostas Papadimitriou | // identify initial view from user cookies
|
597 | 8d08f18a | Kostas Papadimitriou | // this view will be visible after loading of
|
598 | 8d08f18a | Kostas Papadimitriou | // main view
|
599 | 8d08f18a | Kostas Papadimitriou | this.initial_view = this.session_view(); |
600 | 8d08f18a | Kostas Papadimitriou | |
601 | 8d08f18a | Kostas Papadimitriou | views.MainView.__super__.initialize.call(this);
|
602 | b1e6a2de | Kostas Papadimitriou | |
603 | b1e6a2de | Kostas Papadimitriou | $(window).focus(_.bind(this.handle_window_focus, this, "focus")); |
604 | b1e6a2de | Kostas Papadimitriou | $(window).blur(_.bind(this.handle_window_focus, this, "out")); |
605 | b1e6a2de | Kostas Papadimitriou | |
606 | b1e6a2de | Kostas Papadimitriou | this.focused = true; |
607 | b1e6a2de | Kostas Papadimitriou | }, |
608 | b1e6a2de | Kostas Papadimitriou | |
609 | b1e6a2de | Kostas Papadimitriou | handle_window_focus: function(focus) { |
610 | b1e6a2de | Kostas Papadimitriou | if (!snf.config.delay_on_blur) { return }; |
611 | b1e6a2de | Kostas Papadimitriou | |
612 | b1e6a2de | Kostas Papadimitriou | if (focus === "focus") { |
613 | b1e6a2de | Kostas Papadimitriou | this.focused = true; |
614 | 1cc6e94f | Kostas Papadimitriou | this.set_interval_timeouts();
|
615 | b1e6a2de | Kostas Papadimitriou | } else {
|
616 | b1e6a2de | Kostas Papadimitriou | this.focused = false; |
617 | 1cc6e94f | Kostas Papadimitriou | this.set_interval_timeouts();
|
618 | b1e6a2de | Kostas Papadimitriou | } |
619 | b1e6a2de | Kostas Papadimitriou | }, |
620 | b1e6a2de | Kostas Papadimitriou | |
621 | b1e6a2de | Kostas Papadimitriou | set_interval_timeouts: function(time) { |
622 | 6db98d7c | Kostas Papadimitriou | _.each(this._fetchers, _.bind(function(fetcher){ |
623 | b1e6a2de | Kostas Papadimitriou | if (!fetcher) { return }; |
624 | 1cc6e94f | Kostas Papadimitriou | if (this.focused) { |
625 | 1cc6e94f | Kostas Papadimitriou | fetcher.interval = fetcher.normal_interval; |
626 | 792f3a20 | Kostas Papadimitriou | fetcher.stop(false).start(true); |
627 | 1cc6e94f | Kostas Papadimitriou | } else {
|
628 | 1cc6e94f | Kostas Papadimitriou | fetcher.interval = fetcher.maximum_interval; |
629 | 792f3a20 | Kostas Papadimitriou | fetcher.stop(false).start(false); |
630 | 1cc6e94f | Kostas Papadimitriou | } |
631 | 1cc6e94f | Kostas Papadimitriou | |
632 | 1cc6e94f | Kostas Papadimitriou | }, this));
|
633 | 8d08f18a | Kostas Papadimitriou | }, |
634 | 8d08f18a | Kostas Papadimitriou | |
635 | 8d08f18a | Kostas Papadimitriou | vms_handlers_registered: false, |
636 | 8d08f18a | Kostas Papadimitriou | |
637 | 8d08f18a | Kostas Papadimitriou | // register event handlers
|
638 | 8d08f18a | Kostas Papadimitriou | //
|
639 | 8d08f18a | Kostas Papadimitriou | // vms storage events to identify if vms list
|
640 | 8d08f18a | Kostas Papadimitriou | // is empty and display empty view if user viewing
|
641 | 8d08f18a | Kostas Papadimitriou | // a machine view
|
642 | 8d08f18a | Kostas Papadimitriou | //
|
643 | 8d08f18a | Kostas Papadimitriou | // api/ui error event handlers
|
644 | 8d08f18a | Kostas Papadimitriou | init_handlers: function() { |
645 | 8d08f18a | Kostas Papadimitriou | // vm handlers
|
646 | 8d08f18a | Kostas Papadimitriou | storage.vms.bind("remove", _.bind(this.check_empty, this)); |
647 | 8d08f18a | Kostas Papadimitriou | storage.vms.bind("add", _.bind(this.check_empty, this)); |
648 | e673a761 | Kostas Papadimitriou | storage.vms.bind("change:status", _.bind(this.check_empty, this)); |
649 | 8d08f18a | Kostas Papadimitriou | storage.vms.bind("reset", _.bind(this.check_empty, this)); |
650 | 426e1fb9 | Kostas Papadimitriou | storage.quotas.bind("change", _.bind(this.update_create_buttons_status, this)); |
651 | 6db98d7c | Kostas Papadimitriou | // additionally check quotas the first time they get fetched
|
652 | ab3df8df | Kostas Papadimitriou | storage.quotas.bind("add", _.bind(this.update_create_buttons_status, this)); |
653 | 8d08f18a | Kostas Papadimitriou | |
654 | 8d08f18a | Kostas Papadimitriou | }, |
655 | 8d08f18a | Kostas Papadimitriou | |
656 | edd1d565 | Kostas Papadimitriou | handle_api_error_state: function(state) { |
657 | 9ce969a7 | Kostas Papadimitriou | if (snf.api.error_state === snf.api.STATES.ERROR) {
|
658 | edd1d565 | Kostas Papadimitriou | this.stop_intervals();
|
659 | edd1d565 | Kostas Papadimitriou | } else {
|
660 | edd1d565 | Kostas Papadimitriou | if (this.intervals_stopped) { |
661 | edd1d565 | Kostas Papadimitriou | this.update_intervals();
|
662 | edd1d565 | Kostas Papadimitriou | } |
663 | edd1d565 | Kostas Papadimitriou | } |
664 | 8d08f18a | Kostas Papadimitriou | }, |
665 | 6a3a5bf7 | Kostas Papadimitriou | |
666 | 9ce969a7 | Kostas Papadimitriou | handle_api_error: function(args) { |
667 | 9ce969a7 | Kostas Papadimitriou | if (arguments.length == 1) { arguments = _.toArray(arguments[0])}; |
668 | 9ce969a7 | Kostas Papadimitriou | |
669 | 9ce969a7 | Kostas Papadimitriou | if (!_.last(arguments).display) { |
670 | 9ce969a7 | Kostas Papadimitriou | return;
|
671 | 9ce969a7 | Kostas Papadimitriou | } |
672 | 9ce969a7 | Kostas Papadimitriou | |
673 | 8d08f18a | Kostas Papadimitriou | this.error_state = true; |
674 | 8d08f18a | Kostas Papadimitriou | |
675 | 8d08f18a | Kostas Papadimitriou | var xhr = arguments[0]; |
676 | 9ce969a7 | Kostas Papadimitriou | var args = util.parse_api_error.apply(util, arguments); |
677 | 8d08f18a | Kostas Papadimitriou | |
678 | 108dd5bd | Kostas Papadimitriou | // force logout if UNAUTHORIZED request arrives
|
679 | 3a7e5b0f | Kostas Papadimitriou | if (args.code == 401) { snf.auth_client.redirect_to_login(); return }; |
680 | 108dd5bd | Kostas Papadimitriou | |
681 | 0b416fc7 | Kostas Papadimitriou | var error_entry = [args.ns, args.code, args.message,
|
682 | 0b416fc7 | Kostas Papadimitriou | args.api_message, args.type, |
683 | 0b416fc7 | Kostas Papadimitriou | args.details, args]; |
684 | dc020cf6 | Kostas Papadimitriou | this.error_view.show_error.apply(this.error_view, error_entry); |
685 | 8d08f18a | Kostas Papadimitriou | }, |
686 | 8d08f18a | Kostas Papadimitriou | |
687 | 9ffd10ce | Kostas Papadimitriou | handle_ui_error: function(data) { |
688 | 9ffd10ce | Kostas Papadimitriou | var msg = data.msg, code = data.code, err_obj = data.error;
|
689 | 9ffd10ce | Kostas Papadimitriou | error = msg + "<br /><br />" + snf.util.stacktrace().replace("at", "<br /><br />at"); |
690 | 9ffd10ce | Kostas Papadimitriou | params = { title: "UI error", extra_details: data.extra }; |
691 | 52a432c7 | Kostas Papadimitriou | delete data.extra.allow_close;
|
692 | 9ffd10ce | Kostas Papadimitriou | params.allow_close = data.extra.allow_close === undefined ? true : data.extra.allow_close; |
693 | 0b416fc7 | Kostas Papadimitriou | this.error_view.show_error("UI", -1, msg, undefined, |
694 | 0b416fc7 | Kostas Papadimitriou | "JS Exception", error, params);
|
695 | 8d08f18a | Kostas Papadimitriou | }, |
696 | 8d08f18a | Kostas Papadimitriou | |
697 | 8d08f18a | Kostas Papadimitriou | init_overlays: function() { |
698 | 8d08f18a | Kostas Papadimitriou | this.create_vm_view = new views.CreateVMView(); |
699 | 978648f4 | Kostas Papadimitriou | this.api_info_view = new views.ApiInfoView(); |
700 | 1e882dd7 | Kostas Papadimitriou | this.details_view = new views.DetailsView(); |
701 | a6b9836b | Kostas Papadimitriou | this.suspended_view = new views.SuspendedVMView(); |
702 | 8d08f18a | Kostas Papadimitriou | //this.notice_view = new views.NoticeView();
|
703 | 8d08f18a | Kostas Papadimitriou | }, |
704 | 8d08f18a | Kostas Papadimitriou | |
705 | 8d08f18a | Kostas Papadimitriou | show_loading_view: function() { |
706 | 8d08f18a | Kostas Papadimitriou | $("#container #content").hide(); |
707 | 8d08f18a | Kostas Papadimitriou | $("#loading-view").show(); |
708 | 8d08f18a | Kostas Papadimitriou | }, |
709 | 8d08f18a | Kostas Papadimitriou | |
710 | 8d08f18a | Kostas Papadimitriou | hide_loading_view: function() { |
711 | 8d08f18a | Kostas Papadimitriou | $("#container #content").show(); |
712 | 8d08f18a | Kostas Papadimitriou | $("#loading-view").hide(); |
713 | 8d08f18a | Kostas Papadimitriou | $(".css-panes").show(); |
714 | 8d08f18a | Kostas Papadimitriou | }, |
715 | 8d08f18a | Kostas Papadimitriou | |
716 | 426e1fb9 | Kostas Papadimitriou | items_to_load: 6, |
717 | 8d08f18a | Kostas Papadimitriou | completed_items: 0, |
718 | 8d08f18a | Kostas Papadimitriou | check_status: function(loaded) { |
719 | 8d08f18a | Kostas Papadimitriou | this.completed_items++;
|
720 | 8d08f18a | Kostas Papadimitriou | // images, flavors loaded
|
721 | 8d08f18a | Kostas Papadimitriou | if (this.completed_items == this.items_to_load) { |
722 | 336ddd59 | Kostas Papadimitriou | this.update_status("layout", 1); |
723 | 75331d54 | Kostas Papadimitriou | var self = this; |
724 | 75331d54 | Kostas Papadimitriou | window.setTimeout(function(){
|
725 | 75331d54 | Kostas Papadimitriou | self.after_load(); |
726 | 60491a38 | Kostas Papadimitriou | }, 10)
|
727 | 8d08f18a | Kostas Papadimitriou | } |
728 | 8d08f18a | Kostas Papadimitriou | }, |
729 | 336ddd59 | Kostas Papadimitriou | |
730 | 336ddd59 | Kostas Papadimitriou | load_missing_images: function(cb) { |
731 | 336ddd59 | Kostas Papadimitriou | synnefo.storage.vms.load_missing_images(cb); |
732 | 336ddd59 | Kostas Papadimitriou | }, |
733 | 8d08f18a | Kostas Papadimitriou | |
734 | 8d08f18a | Kostas Papadimitriou | load_nets_and_vms: function() { |
735 | 8d08f18a | Kostas Papadimitriou | var self = this; |
736 | 336ddd59 | Kostas Papadimitriou | this.update_status("vms", 0); |
737 | 8d08f18a | Kostas Papadimitriou | storage.vms.fetch({refresh:true, update:false, success: function(){ |
738 | 336ddd59 | Kostas Papadimitriou | self.load_missing_images(function(){
|
739 | 336ddd59 | Kostas Papadimitriou | self.update_status("vms", 1); |
740 | 336ddd59 | Kostas Papadimitriou | self.update_status("layout", 0); |
741 | 336ddd59 | Kostas Papadimitriou | self.check_status(); |
742 | 336ddd59 | Kostas Papadimitriou | }); |
743 | 8d08f18a | Kostas Papadimitriou | }}); |
744 | 9ce969a7 | Kostas Papadimitriou | |
745 | 336ddd59 | Kostas Papadimitriou | this.update_status("networks", 0); |
746 | 7dff818c | Kostas Papadimitriou | $.when([
|
747 | 7dff818c | Kostas Papadimitriou | storage.networks.fetch({refresh: true}), |
748 | 7dff818c | Kostas Papadimitriou | storage.floating_ips.fetch({refresh: true}), |
749 | 7dff818c | Kostas Papadimitriou | storage.subnets.fetch({refresh: true}), |
750 | 7dff818c | Kostas Papadimitriou | storage.ports.fetch({refresh: true}) |
751 | 7dff818c | Kostas Papadimitriou | ]).done(function() {
|
752 | 7dff818c | Kostas Papadimitriou | self.update_status("networks", 1); |
753 | 7dff818c | Kostas Papadimitriou | self.check_status(); |
754 | 7dff818c | Kostas Papadimitriou | }) |
755 | 8d08f18a | Kostas Papadimitriou | }, |
756 | 6db98d7c | Kostas Papadimitriou | |
757 | 6db98d7c | Kostas Papadimitriou | _fetchers: {},
|
758 | 6db98d7c | Kostas Papadimitriou | init_interval: function(key, collection) { |
759 | 6db98d7c | Kostas Papadimitriou | if (this._fetchers[key]) { return } |
760 | 1cc6e94f | Kostas Papadimitriou | var fetcher_params = [snf.config.update_interval,
|
761 | 1cc6e94f | Kostas Papadimitriou | snf.config.update_interval_increase || 500,
|
762 | 1cc6e94f | Kostas Papadimitriou | snf.config.fast_interval || snf.config.update_interval/2,
|
763 | 1cc6e94f | Kostas Papadimitriou | snf.config.update_interval_increase_after_calls || 4,
|
764 | 1cc6e94f | Kostas Papadimitriou | snf.config.update_interval_max || 20000,
|
765 | 1cc6e94f | Kostas Papadimitriou | true,
|
766 | a2b39c54 | Kostas Papadimitriou | {is_recurrent: true}, |
767 | a2b39c54 | Kostas Papadimitriou | key]; |
768 | 6db98d7c | Kostas Papadimitriou | var fetcher = collection.get_fetcher.apply(collection, _.clone(fetcher_params));
|
769 | 6db98d7c | Kostas Papadimitriou | this._fetchers[key] = fetcher;
|
770 | 6db98d7c | Kostas Papadimitriou | collection.fetch(); |
771 | 6db98d7c | Kostas Papadimitriou | |
772 | 6db98d7c | Kostas Papadimitriou | }, |
773 | 6db98d7c | Kostas Papadimitriou | |
774 | 6db98d7c | Kostas Papadimitriou | init_intervals: function() { |
775 | 6db98d7c | Kostas Papadimitriou | _.each({ |
776 | 6db98d7c | Kostas Papadimitriou | 'networks': storage.networks,
|
777 | 6db98d7c | Kostas Papadimitriou | 'vms': storage.vms,
|
778 | 6db98d7c | Kostas Papadimitriou | 'quotas': storage.quotas,
|
779 | 6db98d7c | Kostas Papadimitriou | 'ips': storage.floating_ips,
|
780 | 6db98d7c | Kostas Papadimitriou | 'subnets': storage.subnets,
|
781 | 6db98d7c | Kostas Papadimitriou | 'ports': storage.ports,
|
782 | 6db98d7c | Kostas Papadimitriou | 'keys': storage.keys
|
783 | 6db98d7c | Kostas Papadimitriou | }, function(col, name) {
|
784 | 6db98d7c | Kostas Papadimitriou | this.init_interval(name, col)
|
785 | 6db98d7c | Kostas Papadimitriou | }, this);
|
786 | 8d08f18a | Kostas Papadimitriou | }, |
787 | 8d08f18a | Kostas Papadimitriou | |
788 | 8d08f18a | Kostas Papadimitriou | stop_intervals: function() { |
789 | 6db98d7c | Kostas Papadimitriou | _.each(this._fetchers, function(fetcher) { |
790 | 6db98d7c | Kostas Papadimitriou | fetcher.stop(); |
791 | 6db98d7c | Kostas Papadimitriou | }); |
792 | edd1d565 | Kostas Papadimitriou | this.intervals_stopped = true; |
793 | 8d08f18a | Kostas Papadimitriou | }, |
794 | 8d08f18a | Kostas Papadimitriou | |
795 | 8d08f18a | Kostas Papadimitriou | update_intervals: function() { |
796 | 6db98d7c | Kostas Papadimitriou | _.each(this._fetchers, function(fetcher) { |
797 | 6db98d7c | Kostas Papadimitriou | fetcher.stop(); |
798 | 6db98d7c | Kostas Papadimitriou | fetcher.start(); |
799 | 6db98d7c | Kostas Papadimitriou | }) |
800 | edd1d565 | Kostas Papadimitriou | this.intervals_stopped = false; |
801 | 8d08f18a | Kostas Papadimitriou | }, |
802 | 8d08f18a | Kostas Papadimitriou | |
803 | 8d08f18a | Kostas Papadimitriou | after_load: function() { |
804 | 60491a38 | Kostas Papadimitriou | var self = this; |
805 | 8d08f18a | Kostas Papadimitriou | this.init_intervals();
|
806 | 8d08f18a | Kostas Papadimitriou | this.update_intervals();
|
807 | 336ddd59 | Kostas Papadimitriou | this.update_status("layout", 0); |
808 | 75331d54 | Kostas Papadimitriou | |
809 | 75331d54 | Kostas Papadimitriou | // bypass update_hidden_views in initial view
|
810 | 75331d54 | Kostas Papadimitriou | // rendering to force all views to get render
|
811 | 75331d54 | Kostas Papadimitriou | // on their creation
|
812 | 75331d54 | Kostas Papadimitriou | var uhv = snf.config.update_hidden_views;
|
813 | 75331d54 | Kostas Papadimitriou | snf.config.update_hidden_views = true;
|
814 | 38dc3895 | Kostas Papadimitriou | this.initialize_views();
|
815 | 60491a38 | Kostas Papadimitriou | snf.config.update_hidden_views = uhv; |
816 | 75331d54 | Kostas Papadimitriou | |
817 | 60491a38 | Kostas Papadimitriou | window.setTimeout(function() {
|
818 | 60491a38 | Kostas Papadimitriou | self.load_initialize_overlays(); |
819 | 60491a38 | Kostas Papadimitriou | }, 20);
|
820 | 60491a38 | Kostas Papadimitriou | }, |
821 | 60491a38 | Kostas Papadimitriou | |
822 | 60491a38 | Kostas Papadimitriou | load_initialize_overlays: function() { |
823 | 8d08f18a | Kostas Papadimitriou | this.init_overlays();
|
824 | 8d08f18a | Kostas Papadimitriou | // display initial view
|
825 | 8d08f18a | Kostas Papadimitriou | this.loaded = true; |
826 | 38dc3895 | Kostas Papadimitriou | |
827 | 38dc3895 | Kostas Papadimitriou | // application start point
|
828 | 38dc3895 | Kostas Papadimitriou | |
829 | 122850c5 | Kostas Papadimitriou | this.check_empty();
|
830 | 9fd7a7a8 | Kostas Papadimitriou | this.show_initial_view();
|
831 | 8d08f18a | Kostas Papadimitriou | }, |
832 | 8d08f18a | Kostas Papadimitriou | |
833 | 8d08f18a | Kostas Papadimitriou | load: function() { |
834 | 30b6f316 | Kostas Papadimitriou | if (synnefo.config.use_glance) {
|
835 | 30b6f316 | Kostas Papadimitriou | synnefo.glance.register(); |
836 | 30b6f316 | Kostas Papadimitriou | } |
837 | 8d08f18a | Kostas Papadimitriou | this.error_view = new views.ErrorView(); |
838 | ab3df8df | Kostas Papadimitriou | this.vm_resize_view = new views.VmResizeView(); |
839 | f0c38b0e | Kostas Papadimitriou | |
840 | 1516800a | Kostas Papadimitriou | // api request error handling
|
841 | 1516800a | Kostas Papadimitriou | synnefo.api.bind("error", _.bind(this.handle_api_error, this)); |
842 | 1516800a | Kostas Papadimitriou | synnefo.api.bind("change:error_state", _.bind(this.handle_api_error_state, this)); |
843 | 1516800a | Kostas Papadimitriou | synnefo.ui.bind("error", _.bind(this.handle_ui_error, this)); |
844 | 1516800a | Kostas Papadimitriou | |
845 | 81cfb7ee | Kostas Papadimitriou | this.feedback_view = new views.FeedbackView(); |
846 | 0228bc47 | Kostas Papadimitriou | |
847 | 30b6f316 | Kostas Papadimitriou | if (synnefo.config.use_glance) {
|
848 | 0228bc47 | Kostas Papadimitriou | this.custom_images_view = new views.CustomImagesOverlay(); |
849 | 0228bc47 | Kostas Papadimitriou | } |
850 | 8b71ea92 | Kostas Papadimitriou | |
851 | 8d08f18a | Kostas Papadimitriou | var self = this; |
852 | 8d08f18a | Kostas Papadimitriou | // initialize overlay views
|
853 | 8d08f18a | Kostas Papadimitriou | |
854 | 8d08f18a | Kostas Papadimitriou | // display loading message
|
855 | 8d08f18a | Kostas Papadimitriou | this.show_loading_view();
|
856 | 8d08f18a | Kostas Papadimitriou | // sync load initial data
|
857 | 336ddd59 | Kostas Papadimitriou | this.update_status("images", 0); |
858 | 8d08f18a | Kostas Papadimitriou | storage.images.fetch({refresh:true, update:false, success: function(){ |
859 | 336ddd59 | Kostas Papadimitriou | self.update_status("images", 1); |
860 | 614fb66b | Kostas Papadimitriou | self.check_status(); |
861 | 614fb66b | Kostas Papadimitriou | self.load_nets_and_vms(); |
862 | 8d08f18a | Kostas Papadimitriou | }}); |
863 | 336ddd59 | Kostas Papadimitriou | this.update_status("flavors", 0); |
864 | 8d08f18a | Kostas Papadimitriou | storage.flavors.fetch({refresh:true, update:false, success:function(){ |
865 | 336ddd59 | Kostas Papadimitriou | self.update_status("flavors", 1); |
866 | 8d08f18a | Kostas Papadimitriou | self.check_status() |
867 | 8d08f18a | Kostas Papadimitriou | }}); |
868 | 426e1fb9 | Kostas Papadimitriou | |
869 | 426e1fb9 | Kostas Papadimitriou | this.update_status("resources", 0); |
870 | 426e1fb9 | Kostas Papadimitriou | storage.resources.fetch({refresh:true, update:false, success: function(){ |
871 | 426e1fb9 | Kostas Papadimitriou | self.update_status("resources", 1); |
872 | 426e1fb9 | Kostas Papadimitriou | self.update_status("quotas", 0); |
873 | 426e1fb9 | Kostas Papadimitriou | self.check_status(); |
874 | 426e1fb9 | Kostas Papadimitriou | storage.quotas.fetch({refresh:true, update:true, success: function() { |
875 | 426e1fb9 | Kostas Papadimitriou | self.update_status("quotas", 1); |
876 | 426e1fb9 | Kostas Papadimitriou | self.update_status("layout", 1); |
877 | 426e1fb9 | Kostas Papadimitriou | self.check_status() |
878 | 426e1fb9 | Kostas Papadimitriou | }}) |
879 | 426e1fb9 | Kostas Papadimitriou | }}) |
880 | 8d08f18a | Kostas Papadimitriou | }, |
881 | 8d08f18a | Kostas Papadimitriou | |
882 | 336ddd59 | Kostas Papadimitriou | update_status: function(ns, state) { |
883 | 336ddd59 | Kostas Papadimitriou | var el = $("#loading-view .header."+ns); |
884 | 336ddd59 | Kostas Papadimitriou | if (state == 0) { |
885 | 336ddd59 | Kostas Papadimitriou | el.removeClass("off").addClass("on"); |
886 | 336ddd59 | Kostas Papadimitriou | } |
887 | 336ddd59 | Kostas Papadimitriou | if (state == 1) { |
888 | 336ddd59 | Kostas Papadimitriou | el.removeClass("on").addClass("done"); |
889 | 336ddd59 | Kostas Papadimitriou | } |
890 | 8d08f18a | Kostas Papadimitriou | }, |
891 | 8d08f18a | Kostas Papadimitriou | |
892 | 8d08f18a | Kostas Papadimitriou | initialize_views: function() { |
893 | 38dc3895 | Kostas Papadimitriou | this.select_view = new views.SelectView(this, this.router); |
894 | 8d08f18a | Kostas Papadimitriou | this.empty_view = new views.EmptyView(); |
895 | 8d08f18a | Kostas Papadimitriou | this.metadata_view = new views.MetadataView(); |
896 | 8d08f18a | Kostas Papadimitriou | this.multiple_actions_view = new views.MultipleActionsView(); |
897 | 8d08f18a | Kostas Papadimitriou | |
898 | 8d08f18a | Kostas Papadimitriou | this.add_view("icon"); |
899 | 8d08f18a | Kostas Papadimitriou | this.add_view("list"); |
900 | 8d08f18a | Kostas Papadimitriou | this.add_view("single"); |
901 | 8d08f18a | Kostas Papadimitriou | this.add_view("networks"); |
902 | f0c38b0e | Kostas Papadimitriou | this.add_view("ips"); |
903 | f0c38b0e | Kostas Papadimitriou | this.add_view("public-keys"); |
904 | 8d08f18a | Kostas Papadimitriou | |
905 | 8d08f18a | Kostas Papadimitriou | this.init_menu();
|
906 | 8d08f18a | Kostas Papadimitriou | }, |
907 | 8d08f18a | Kostas Papadimitriou | |
908 | 8d08f18a | Kostas Papadimitriou | init_menu: function() { |
909 | 8b71ea92 | Kostas Papadimitriou | $(".usermenu .feedback").click(_.bind(function(e){ |
910 | 8b71ea92 | Kostas Papadimitriou | e.preventDefault(); |
911 | 8d08f18a | Kostas Papadimitriou | this.feedback_view.show();
|
912 | 8d08f18a | Kostas Papadimitriou | }, this));
|
913 | 8d08f18a | Kostas Papadimitriou | }, |
914 | 8d08f18a | Kostas Papadimitriou | |
915 | 8d08f18a | Kostas Papadimitriou | // initial view based on user cookie
|
916 | 8d08f18a | Kostas Papadimitriou | show_initial_view: function() { |
917 | 8d08f18a | Kostas Papadimitriou | this.set_vm_view_handlers();
|
918 | 8d08f18a | Kostas Papadimitriou | this.hide_loading_view();
|
919 | 38dc3895 | Kostas Papadimitriou | bb.history.start(); |
920 | 85f1cd1e | Kostas Papadimitriou | this.trigger("ready"); |
921 | 8d08f18a | Kostas Papadimitriou | }, |
922 | 8d08f18a | Kostas Papadimitriou | |
923 | 8d08f18a | Kostas Papadimitriou | show_vm_details: function(vm) { |
924 | cbf7b384 | Kostas Papadimitriou | if (vm) {
|
925 | cbf7b384 | Kostas Papadimitriou | this.router.vm_details_view(vm.id);
|
926 | cbf7b384 | Kostas Papadimitriou | } |
927 | 8d08f18a | Kostas Papadimitriou | }, |
928 | 426e1fb9 | Kostas Papadimitriou | |
929 | 426e1fb9 | Kostas Papadimitriou | update_create_buttons_status: function() { |
930 | 426e1fb9 | Kostas Papadimitriou | var nets = storage.quotas.get('cyclades.network.private'); |
931 | 426e1fb9 | Kostas Papadimitriou | var vms = storage.quotas.get('cyclades.vm'); |
932 | 426e1fb9 | Kostas Papadimitriou | |
933 | 426e1fb9 | Kostas Papadimitriou | if (!nets || !vms) { return } |
934 | 426e1fb9 | Kostas Papadimitriou | |
935 | 426e1fb9 | Kostas Papadimitriou | if (!nets.can_consume()) {
|
936 | 426e1fb9 | Kostas Papadimitriou | $("#networks-pane a.createbutton").addClass("disabled"); |
937 | 426e1fb9 | Kostas Papadimitriou | } else {
|
938 | 426e1fb9 | Kostas Papadimitriou | $("#networks-pane a.createbutton").removeClass("disabled"); |
939 | 426e1fb9 | Kostas Papadimitriou | } |
940 | 426e1fb9 | Kostas Papadimitriou | |
941 | 426e1fb9 | Kostas Papadimitriou | if (!vms.can_consume()) {
|
942 | 426e1fb9 | Kostas Papadimitriou | $("#createcontainer #create").addClass("disabled"); |
943 | 426e1fb9 | Kostas Papadimitriou | } else {
|
944 | 426e1fb9 | Kostas Papadimitriou | $("#createcontainer #create").removeClass("disabled"); |
945 | 426e1fb9 | Kostas Papadimitriou | } |
946 | 426e1fb9 | Kostas Papadimitriou | }, |
947 | 8d08f18a | Kostas Papadimitriou | |
948 | 8d08f18a | Kostas Papadimitriou | set_vm_view_handlers: function() { |
949 | 38dc3895 | Kostas Papadimitriou | var self = this; |
950 | 38dc3895 | Kostas Papadimitriou | $("#createcontainer #create").click(function(e){ |
951 | 38dc3895 | Kostas Papadimitriou | e.preventDefault(); |
952 | cbf7b384 | Kostas Papadimitriou | if ($(this).hasClass("disabled")) { return } |
953 | 38dc3895 | Kostas Papadimitriou | self.router.vm_create_view(); |
954 | cbf7b384 | Kostas Papadimitriou | }); |
955 | 8d08f18a | Kostas Papadimitriou | }, |
956 | 8d08f18a | Kostas Papadimitriou | |
957 | 8d08f18a | Kostas Papadimitriou | check_empty: function() { |
958 | 8d08f18a | Kostas Papadimitriou | if (!this.loaded) { return } |
959 | 8d08f18a | Kostas Papadimitriou | if (storage.vms.length == 0) { |
960 | df8fe961 | Kostas Papadimitriou | this.show_view("machines"); |
961 | 38dc3895 | Kostas Papadimitriou | this.router.show_welcome();
|
962 | e673a761 | Kostas Papadimitriou | this.empty_hidden = false; |
963 | 8d08f18a | Kostas Papadimitriou | } else {
|
964 | 8d08f18a | Kostas Papadimitriou | this.hide_empty();
|
965 | 8d08f18a | Kostas Papadimitriou | } |
966 | 8d08f18a | Kostas Papadimitriou | }, |
967 | 8d08f18a | Kostas Papadimitriou | |
968 | 8d08f18a | Kostas Papadimitriou | show_empty: function() { |
969 | e673a761 | Kostas Papadimitriou | if (!this.empty_hidden) { return }; |
970 | 8d08f18a | Kostas Papadimitriou | $("#machines-pane-top").addClass("empty"); |
971 | 8d08f18a | Kostas Papadimitriou | |
972 | 8d08f18a | Kostas Papadimitriou | this.$(".panes").hide(); |
973 | 8d08f18a | Kostas Papadimitriou | this.$("#machines-pane").show(); |
974 | 8d08f18a | Kostas Papadimitriou | |
975 | 8d08f18a | Kostas Papadimitriou | this.hide_views([]);
|
976 | e673a761 | Kostas Papadimitriou | this.empty_hidden = false; |
977 | 8d08f18a | Kostas Papadimitriou | this.empty_view.show();
|
978 | e673a761 | Kostas Papadimitriou | this.select_view.update_layout();
|
979 | e673a761 | Kostas Papadimitriou | this.empty_hidden = false; |
980 | 8d08f18a | Kostas Papadimitriou | }, |
981 | 8d08f18a | Kostas Papadimitriou | |
982 | 8d08f18a | Kostas Papadimitriou | hide_empty: function() { |
983 | e673a761 | Kostas Papadimitriou | if (this.empty_hidden) { return }; |
984 | 8d08f18a | Kostas Papadimitriou | $("#machines-pane-top").removeClass("empty"); |
985 | 8d08f18a | Kostas Papadimitriou | |
986 | e673a761 | Kostas Papadimitriou | this.empty_view.hide(true); |
987 | 38dc3895 | Kostas Papadimitriou | this.router.vms_index();
|
988 | e673a761 | Kostas Papadimitriou | this.empty_hidden = true; |
989 | e673a761 | Kostas Papadimitriou | this.select_view.update_layout();
|
990 | 8d08f18a | Kostas Papadimitriou | }, |
991 | 8d08f18a | Kostas Papadimitriou | |
992 | 8d08f18a | Kostas Papadimitriou | get_title: function(view_id) { |
993 | 8d08f18a | Kostas Papadimitriou | var view_id = view_id || this.current_view_id; |
994 | 8d08f18a | Kostas Papadimitriou | return this.views_titles[view_id]; |
995 | 8d08f18a | Kostas Papadimitriou | }, |
996 | 8d08f18a | Kostas Papadimitriou | |
997 | 8d08f18a | Kostas Papadimitriou | // return class object for the given view or false if
|
998 | 8d08f18a | Kostas Papadimitriou | // the view is not registered
|
999 | 8d08f18a | Kostas Papadimitriou | get_class_for_view: function (view_id) { |
1000 | 8d08f18a | Kostas Papadimitriou | if (!this.views_classes[view_id]) { |
1001 | 8d08f18a | Kostas Papadimitriou | return false; |
1002 | 8d08f18a | Kostas Papadimitriou | } |
1003 | 8d08f18a | Kostas Papadimitriou | return this.views_classes[view_id]; |
1004 | 8d08f18a | Kostas Papadimitriou | }, |
1005 | 8d08f18a | Kostas Papadimitriou | |
1006 | 8d08f18a | Kostas Papadimitriou | view: function(view_id) { |
1007 | 8d08f18a | Kostas Papadimitriou | return this.views[view_id]; |
1008 | 8d08f18a | Kostas Papadimitriou | }, |
1009 | 8d08f18a | Kostas Papadimitriou | |
1010 | 8d08f18a | Kostas Papadimitriou | add_view: function(view_id) { |
1011 | 8d08f18a | Kostas Papadimitriou | if (!this.views[view_id]) { |
1012 | 8d08f18a | Kostas Papadimitriou | var cls = this.get_class_for_view(view_id); |
1013 | 8d08f18a | Kostas Papadimitriou | if (this.skip_errors) { |
1014 | 8d08f18a | Kostas Papadimitriou | this.views[view_id] = new cls(); |
1015 | 8d08f18a | Kostas Papadimitriou | $(this.views[view_id]).bind("resize", _.bind(function() { |
1016 | d1a7ce9c | Kostas Papadimitriou | window.forcePositionFooter(); |
1017 | 8d08f18a | Kostas Papadimitriou | this.multiple_actions_view.fix_position();
|
1018 | 8d08f18a | Kostas Papadimitriou | }, this));
|
1019 | 8d08f18a | Kostas Papadimitriou | } else {
|
1020 | 8d08f18a | Kostas Papadimitriou | // catch ui errors
|
1021 | 8d08f18a | Kostas Papadimitriou | try {
|
1022 | 8d08f18a | Kostas Papadimitriou | this.views[view_id] = new cls(); |
1023 | 8d08f18a | Kostas Papadimitriou | $(this.views[view_id]).bind("resize", _.bind(function() { |
1024 | 8d08f18a | Kostas Papadimitriou | window.positionFooter(); |
1025 | 8d08f18a | Kostas Papadimitriou | this.multiple_actions_view.fix_position();
|
1026 | 8d08f18a | Kostas Papadimitriou | }, this));
|
1027 | 9ffd10ce | Kostas Papadimitriou | } catch (err) {snf.ui.trigger_error(-1, "Cannot add view", err)} |
1028 | 8d08f18a | Kostas Papadimitriou | } |
1029 | 8d08f18a | Kostas Papadimitriou | } else {
|
1030 | 8d08f18a | Kostas Papadimitriou | } |
1031 | 8d08f18a | Kostas Papadimitriou | |
1032 | 8d08f18a | Kostas Papadimitriou | if (this.views[view_id].vms_view) { |
1033 | 8d08f18a | Kostas Papadimitriou | this.views[view_id].metadata_view = this.metadata_view; |
1034 | 8d08f18a | Kostas Papadimitriou | } |
1035 | 8d08f18a | Kostas Papadimitriou | return this.views[view_id]; |
1036 | 8d08f18a | Kostas Papadimitriou | }, |
1037 | 8d08f18a | Kostas Papadimitriou | |
1038 | 8d08f18a | Kostas Papadimitriou | hide_views: function(skip) { |
1039 | 8d08f18a | Kostas Papadimitriou | _.each(this.views, function(view) { |
1040 | 8d08f18a | Kostas Papadimitriou | if (skip.indexOf(view) === -1) { |
1041 | f0c38b0e | Kostas Papadimitriou | view.hide(); |
1042 | 8d08f18a | Kostas Papadimitriou | } |
1043 | 8d08f18a | Kostas Papadimitriou | }, this)
|
1044 | 8d08f18a | Kostas Papadimitriou | }, |
1045 | 8d08f18a | Kostas Papadimitriou | |
1046 | 8d08f18a | Kostas Papadimitriou | get: function(view_id) { |
1047 | 8d08f18a | Kostas Papadimitriou | return this.views[view_id]; |
1048 | 8d08f18a | Kostas Papadimitriou | }, |
1049 | 8d08f18a | Kostas Papadimitriou | |
1050 | 8d08f18a | Kostas Papadimitriou | session_view: function() { |
1051 | 8d08f18a | Kostas Papadimitriou | if (this.pane_view_from_session() > 0) { |
1052 | 8d08f18a | Kostas Papadimitriou | return this.views_pane_indexes[this.pane_view_from_session()]; |
1053 | 8d08f18a | Kostas Papadimitriou | } else {
|
1054 | 8d08f18a | Kostas Papadimitriou | return this.views_indexes[this.machine_view_from_session()]; |
1055 | 8d08f18a | Kostas Papadimitriou | } |
1056 | 8d08f18a | Kostas Papadimitriou | }, |
1057 | 8d08f18a | Kostas Papadimitriou | |
1058 | 8d08f18a | Kostas Papadimitriou | pane_view_from_session: function() { |
1059 | 8d08f18a | Kostas Papadimitriou | return $.cookie("pane_view") || 0; |
1060 | 8d08f18a | Kostas Papadimitriou | }, |
1061 | 8d08f18a | Kostas Papadimitriou | |
1062 | 8d08f18a | Kostas Papadimitriou | machine_view_from_session: function() { |
1063 | 8d08f18a | Kostas Papadimitriou | return $.cookie("machine_view") || 0; |
1064 | 8d08f18a | Kostas Papadimitriou | }, |
1065 | 8d08f18a | Kostas Papadimitriou | |
1066 | 8d08f18a | Kostas Papadimitriou | update_session: function() { |
1067 | 8d08f18a | Kostas Papadimitriou | $.cookie("pane_view", this.pane_ids[this.current_view_id]); |
1068 | 8d08f18a | Kostas Papadimitriou | if (this.current_view.vms_view) { |
1069 | 8d08f18a | Kostas Papadimitriou | $.cookie("machine_view", this.views_ids[this.current_view_id]); |
1070 | 8d08f18a | Kostas Papadimitriou | } |
1071 | 8d08f18a | Kostas Papadimitriou | }, |
1072 | 8d08f18a | Kostas Papadimitriou | |
1073 | 8d08f18a | Kostas Papadimitriou | identify_view: function(view_id) { |
1074 | 8d08f18a | Kostas Papadimitriou | // machines view_id is an alias to
|
1075 | 8d08f18a | Kostas Papadimitriou | // one of the 3 machines view
|
1076 | 8d08f18a | Kostas Papadimitriou | // identify which one (if no cookie set defaults to icon)
|
1077 | 8d08f18a | Kostas Papadimitriou | if (view_id == "machines") { |
1078 | 8d08f18a | Kostas Papadimitriou | var index = this.machine_view_from_session(); |
1079 | 8d08f18a | Kostas Papadimitriou | view_id = this.views_indexes[index];
|
1080 | 8d08f18a | Kostas Papadimitriou | } |
1081 | 8d08f18a | Kostas Papadimitriou | return view_id;
|
1082 | 8d08f18a | Kostas Papadimitriou | }, |
1083 | 8d08f18a | Kostas Papadimitriou | |
1084 | 8d08f18a | Kostas Papadimitriou | // switch to current view pane
|
1085 | 8d08f18a | Kostas Papadimitriou | // if differs from the visible one
|
1086 | 8d08f18a | Kostas Papadimitriou | show_view_pane: function() { |
1087 | 8d08f18a | Kostas Papadimitriou | if (this.current_view.pane != this.current_pane) { |
1088 | 8d08f18a | Kostas Papadimitriou | $(this.current_view.pane).show(); |
1089 | 8d08f18a | Kostas Papadimitriou | $(this.current_pane).hide(); |
1090 | 8d08f18a | Kostas Papadimitriou | this.current_pane = this.current_view.pane; |
1091 | 8d08f18a | Kostas Papadimitriou | } |
1092 | 8d08f18a | Kostas Papadimitriou | }, |
1093 | 75331d54 | Kostas Papadimitriou | |
1094 | 8d08f18a | Kostas Papadimitriou | show_view: function(view_id) { |
1095 | 75331d54 | Kostas Papadimitriou | //var d = new Date;
|
1096 | 75331d54 | Kostas Papadimitriou | var ret = this._show_view(view_id); |
1097 | 75331d54 | Kostas Papadimitriou | //console.log((new Date)-d)
|
1098 | 75331d54 | Kostas Papadimitriou | return ret;
|
1099 | 75331d54 | Kostas Papadimitriou | }, |
1100 | 75331d54 | Kostas Papadimitriou | |
1101 | 75331d54 | Kostas Papadimitriou | _show_view: function(view_id) { |
1102 | 9ffd10ce | Kostas Papadimitriou | // same view, visible
|
1103 | 9ffd10ce | Kostas Papadimitriou | // get out of here asap
|
1104 | 9ffd10ce | Kostas Papadimitriou | if (this.current_view && |
1105 | 9ffd10ce | Kostas Papadimitriou | this.current_view.id == view_id &&
|
1106 | 9ffd10ce | Kostas Papadimitriou | this.current_view.visible()) {
|
1107 | 9ffd10ce | Kostas Papadimitriou | return;
|
1108 | 9ffd10ce | Kostas Papadimitriou | } |
1109 | 9ffd10ce | Kostas Papadimitriou | |
1110 | 9ffd10ce | Kostas Papadimitriou | // choose proper view_id
|
1111 | 9ffd10ce | Kostas Papadimitriou | view_id = this.identify_view(view_id);
|
1112 | 9ffd10ce | Kostas Papadimitriou | |
1113 | 9ffd10ce | Kostas Papadimitriou | // add/create view and update current view
|
1114 | 9ffd10ce | Kostas Papadimitriou | var view = this.add_view(view_id); |
1115 | 9ffd10ce | Kostas Papadimitriou | |
1116 | 9ffd10ce | Kostas Papadimitriou | // set current view
|
1117 | 9ffd10ce | Kostas Papadimitriou | this.current_view = view;
|
1118 | 9ffd10ce | Kostas Papadimitriou | this.current_view_id = view_id;
|
1119 | 9ffd10ce | Kostas Papadimitriou | |
1120 | 9ffd10ce | Kostas Papadimitriou | // hide all other views
|
1121 | 9ffd10ce | Kostas Papadimitriou | this.hide_views([this.current_view]); |
1122 | 9ffd10ce | Kostas Papadimitriou | |
1123 | 9ffd10ce | Kostas Papadimitriou | // FIXME: depricated
|
1124 | 9ffd10ce | Kostas Papadimitriou | $(".large-spinner").remove(); |
1125 | 9ffd10ce | Kostas Papadimitriou | |
1126 | 9ffd10ce | Kostas Papadimitriou | storage.vms.reset_pending_actions(); |
1127 | f0c38b0e | Kostas Papadimitriou | //storage.networks.reset_pending_actions();
|
1128 | 9ffd10ce | Kostas Papadimitriou | storage.vms.stop_stats_update(); |
1129 | 9ffd10ce | Kostas Papadimitriou | |
1130 | 9ffd10ce | Kostas Papadimitriou | // show current view
|
1131 | 9ffd10ce | Kostas Papadimitriou | this.show_view_pane();
|
1132 | f0c38b0e | Kostas Papadimitriou | view.show(true);
|
1133 | 9ffd10ce | Kostas Papadimitriou | |
1134 | 9ffd10ce | Kostas Papadimitriou | // update menus
|
1135 | 9ffd10ce | Kostas Papadimitriou | if (this.select_view) { |
1136 | 9ffd10ce | Kostas Papadimitriou | this.select_view.update_layout();
|
1137 | 9ffd10ce | Kostas Papadimitriou | } |
1138 | f0c38b0e | Kostas Papadimitriou | |
1139 | f0c38b0e | Kostas Papadimitriou | var update_layout = this.current_view.__update_layout; |
1140 | f0c38b0e | Kostas Papadimitriou | update_layout && update_layout.call(this.current_view);
|
1141 | 9ffd10ce | Kostas Papadimitriou | |
1142 | 9ffd10ce | Kostas Papadimitriou | // update cookies
|
1143 | 9ffd10ce | Kostas Papadimitriou | this.update_session();
|
1144 | 9ffd10ce | Kostas Papadimitriou | |
1145 | 9ffd10ce | Kostas Papadimitriou | // machines view subnav
|
1146 | 9ffd10ce | Kostas Papadimitriou | if (this.current_view.vms_view) { |
1147 | 9ffd10ce | Kostas Papadimitriou | $("#machines-pane").show(); |
1148 | 9ffd10ce | Kostas Papadimitriou | } else {
|
1149 | 9ffd10ce | Kostas Papadimitriou | $("#machines-pane").hide(); |
1150 | 9ffd10ce | Kostas Papadimitriou | } |
1151 | 9ffd10ce | Kostas Papadimitriou | |
1152 | 9ffd10ce | Kostas Papadimitriou | // fix footer position
|
1153 | 9ffd10ce | Kostas Papadimitriou | // TODO: move footer handlers in
|
1154 | 9ffd10ce | Kostas Papadimitriou | // main view (from home.html)
|
1155 | 9ffd10ce | Kostas Papadimitriou | if (window.positionFooter) {
|
1156 | 9ffd10ce | Kostas Papadimitriou | window.positionFooter(); |
1157 | 9ffd10ce | Kostas Papadimitriou | } |
1158 | 8d08f18a | Kostas Papadimitriou | |
1159 | 9ffd10ce | Kostas Papadimitriou | // trigger view change event
|
1160 | 9ffd10ce | Kostas Papadimitriou | this.trigger("view:change", this.current_view.view_id); |
1161 | 2c5adb8a | Kostas Papadimitriou | this.select_view.title.text(this.get_title()); |
1162 | 9ffd10ce | Kostas Papadimitriou | $(window).trigger("view:change"); |
1163 | 9ffd10ce | Kostas Papadimitriou | return view;
|
1164 | 8d08f18a | Kostas Papadimitriou | }, |
1165 | 8d08f18a | Kostas Papadimitriou | |
1166 | 8d08f18a | Kostas Papadimitriou | reset_vm_actions: function() { |
1167 | 8d08f18a | Kostas Papadimitriou | |
1168 | 8d08f18a | Kostas Papadimitriou | }, |
1169 | 8d08f18a | Kostas Papadimitriou | |
1170 | 8d08f18a | Kostas Papadimitriou | // identify current view
|
1171 | 8d08f18a | Kostas Papadimitriou | // based on views element visibility
|
1172 | 8d08f18a | Kostas Papadimitriou | current_view_id: function() { |
1173 | 8d08f18a | Kostas Papadimitriou | var found = false; |
1174 | 8d08f18a | Kostas Papadimitriou | _.each(this.views, function(key, value) { |
1175 | 8d08f18a | Kostas Papadimitriou | if (value.visible()) {
|
1176 | 8d08f18a | Kostas Papadimitriou | found = value; |
1177 | 8d08f18a | Kostas Papadimitriou | } |
1178 | 8d08f18a | Kostas Papadimitriou | }) |
1179 | 8d08f18a | Kostas Papadimitriou | return found;
|
1180 | 8d08f18a | Kostas Papadimitriou | } |
1181 | 8d08f18a | Kostas Papadimitriou | |
1182 | 8d08f18a | Kostas Papadimitriou | }); |
1183 | 8d08f18a | Kostas Papadimitriou | |
1184 | 8d08f18a | Kostas Papadimitriou | snf.ui.main = new views.MainView();
|
1185 | b61dc01f | Kostas Papadimitriou | |
1186 | 92a063bf | Kostas Papadimitriou | snf.ui.init = function() { |
1187 | 66be390b | Kostas Papadimitriou | if (snf.config.handle_window_exceptions) {
|
1188 | 66be390b | Kostas Papadimitriou | window.onerror = function(msg, file, line) { |
1189 | 52a432c7 | Kostas Papadimitriou | snf.ui.trigger_error("CRITICAL", msg, {}, { file:file + ":" + line, allow_close: true }); |
1190 | 66be390b | Kostas Papadimitriou | }; |
1191 | 66be390b | Kostas Papadimitriou | } |
1192 | 92a063bf | Kostas Papadimitriou | snf.ui.main.load(); |
1193 | 92a063bf | Kostas Papadimitriou | } |
1194 | 92a063bf | Kostas Papadimitriou | |
1195 | 8d08f18a | Kostas Papadimitriou | })(this); |