root / snf-cyclades-app / synnefo / ui / static / snf / js / synnefo.js @ 2c239b28
History | View | Annotate | Download (15.2 kB)
1 | a5bc3755 | Vangelis Koukis | //
|
---|---|---|---|
2 | a5bc3755 | Vangelis Koukis | // Copyright 2011 GRNET S.A. All rights reserved.
|
3 | 72872ba2 | Christodoulos Psaltis | //
|
4 | a5bc3755 | Vangelis Koukis | // Redistribution and use in source and binary forms, with or
|
5 | a5bc3755 | Vangelis Koukis | // without modification, are permitted provided that the following
|
6 | a5bc3755 | Vangelis Koukis | // conditions are met:
|
7 | 72872ba2 | Christodoulos Psaltis | //
|
8 | a5bc3755 | Vangelis Koukis | // 1. Redistributions of source code must retain the above
|
9 | a5bc3755 | Vangelis Koukis | // copyright notice, this list of conditions and the following
|
10 | a5bc3755 | Vangelis Koukis | // disclaimer.
|
11 | 72872ba2 | Christodoulos Psaltis | //
|
12 | a5bc3755 | Vangelis Koukis | // 2. Redistributions in binary form must reproduce the above
|
13 | a5bc3755 | Vangelis Koukis | // copyright notice, this list of conditions and the following
|
14 | a5bc3755 | Vangelis Koukis | // disclaimer in the documentation and/or other materials
|
15 | a5bc3755 | Vangelis Koukis | // provided with the distribution.
|
16 | 72872ba2 | Christodoulos Psaltis | //
|
17 | a5bc3755 | Vangelis Koukis | // THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS
|
18 | a5bc3755 | Vangelis Koukis | // OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
19 | a5bc3755 | Vangelis Koukis | // WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
20 | a5bc3755 | Vangelis Koukis | // PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR
|
21 | a5bc3755 | Vangelis Koukis | // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
22 | a5bc3755 | Vangelis Koukis | // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
23 | a5bc3755 | Vangelis Koukis | // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
|
24 | a5bc3755 | Vangelis Koukis | // USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
|
25 | a5bc3755 | Vangelis Koukis | // AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
26 | a5bc3755 | Vangelis Koukis | // LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
27 | a5bc3755 | Vangelis Koukis | // ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
28 | a5bc3755 | Vangelis Koukis | // POSSIBILITY OF SUCH DAMAGE.
|
29 | 72872ba2 | Christodoulos Psaltis | //
|
30 | a5bc3755 | Vangelis Koukis | // The views and conclusions contained in the software and
|
31 | a5bc3755 | Vangelis Koukis | // documentation are those of the authors and should not be
|
32 | a5bc3755 | Vangelis Koukis | // interpreted as representing official policies, either expressed
|
33 | a5bc3755 | Vangelis Koukis | // or implied, of GRNET S.A.
|
34 | a5bc3755 | Vangelis Koukis | //
|
35 | 22afb635 | Vangelis Koukis | var API_URL = "/api/v1.1"; |
36 | f533f224 | Vangelis Koukis | var changes_since = 0, deferred = 0, update_request = false, load_request = false, pending_actions = []; |
37 | f533f224 | Vangelis Koukis | var flavors = [], images = [], servers = [], disks = [], cpus = [], ram = [];
|
38 | f533f224 | Vangelis Koukis | var networks = [], networks_changes_since = 0; |
39 | 9eefb3a2 | Kostas Papadimitriou | var error_timeout = 20000; |
40 | 7991d0c5 | Kostas Papadimitriou | var last_request = {};
|
41 | 7991d0c5 | Kostas Papadimitriou | |
42 | 7991d0c5 | Kostas Papadimitriou | |
43 | 54417a11 | Kostas Papadimitriou | Object.prototype.toString = function(o){ |
44 | 54417a11 | Kostas Papadimitriou | |
45 | 54417a11 | Kostas Papadimitriou | var parse = function(_o){ |
46 | 54417a11 | Kostas Papadimitriou | var a = [], t;
|
47 | 54417a11 | Kostas Papadimitriou | for(var p in _o){ |
48 | 54417a11 | Kostas Papadimitriou | if(_o.hasOwnProperty(p)){
|
49 | 54417a11 | Kostas Papadimitriou | t = _o[p]; |
50 | 54417a11 | Kostas Papadimitriou | if(t && typeof t == "object"){ |
51 | 54417a11 | Kostas Papadimitriou | a[a.length]= p + ":{ " + arguments.callee(t).join(", ") + "}"; |
52 | 54417a11 | Kostas Papadimitriou | } |
53 | 54417a11 | Kostas Papadimitriou | else {
|
54 | 54417a11 | Kostas Papadimitriou | if(typeof t == "string"){ |
55 | 54417a11 | Kostas Papadimitriou | a[a.length] = [ p+ ": \"" + t.toString() + "\"" ]; |
56 | 54417a11 | Kostas Papadimitriou | } |
57 | 54417a11 | Kostas Papadimitriou | else{
|
58 | 54417a11 | Kostas Papadimitriou | a[a.length] = [ p+ ": " + t.toString()];
|
59 | 54417a11 | Kostas Papadimitriou | } |
60 | 54417a11 | Kostas Papadimitriou | } |
61 | 54417a11 | Kostas Papadimitriou | } |
62 | 54417a11 | Kostas Papadimitriou | } |
63 | 54417a11 | Kostas Papadimitriou | return a;
|
64 | 54417a11 | Kostas Papadimitriou | |
65 | 54417a11 | Kostas Papadimitriou | } |
66 | 54417a11 | Kostas Papadimitriou | return "{" + parse(o).join(", ") + "}"; |
67 | 54417a11 | Kostas Papadimitriou | |
68 | 54417a11 | Kostas Papadimitriou | } |
69 | a583aa29 | Kostas Papadimitriou | |
70 | 3c08f055 | Kostas Papadimitriou | function msg_box(user_config) { |
71 | 3c08f055 | Kostas Papadimitriou | var defaults = {'title':'Info message', 'content': 'this is an info message', 'ajax': false, 'extra':false}; |
72 | 3c08f055 | Kostas Papadimitriou | var config = $.extend(defaults, user_config); |
73 | 3c08f055 | Kostas Papadimitriou | |
74 | 29772683 | Kostas Papadimitriou | // prepare the error message
|
75 | 29772683 | Kostas Papadimitriou | // bring up success notification
|
76 | 29772683 | Kostas Papadimitriou | var box = $("#notification-box"); |
77 | 54417a11 | Kostas Papadimitriou | box.addClass("notification-box");
|
78 | 29772683 | Kostas Papadimitriou | box.addClass('success');
|
79 | 3c08f055 | Kostas Papadimitriou | box.addClass(config.cls || '');
|
80 | 29772683 | Kostas Papadimitriou | box.removeClass('error');
|
81 | 29772683 | Kostas Papadimitriou | |
82 | 9eefb3a2 | Kostas Papadimitriou | var sel = function(s){return $(s, box)}; |
83 | 81d11e38 | Kostas Papadimitriou | // reset texts
|
84 | 81d11e38 | Kostas Papadimitriou | sel("h3 span.header-box").html(""); |
85 | 81d11e38 | Kostas Papadimitriou | sel(".sub-text").html(""); |
86 | 81d11e38 | Kostas Papadimitriou | sel(".password-container .password").html(""); |
87 | 81d11e38 | Kostas Papadimitriou | sel("div.machine-now-building").html(""); |
88 | 81d11e38 | Kostas Papadimitriou | |
89 | 81d11e38 | Kostas Papadimitriou | // apply msg box contents
|
90 | 9ed51b7e | Kostas Papadimitriou | sel("h3 span.header-box").html(config.title);
|
91 | 29772683 | Kostas Papadimitriou | sel("div.machine-now-building").html(config.content);
|
92 | 3c08f055 | Kostas Papadimitriou | sel(".sub-text").html(config.sub_content || ''); |
93 | 29772683 | Kostas Papadimitriou | sel(".popup-header").removeClass("popup-header-error"); |
94 | 29772683 | Kostas Papadimitriou | box.removeClass("popup-border-error");
|
95 | 29772683 | Kostas Papadimitriou | sel(".popup-details").removeClass("popup-details-error"); |
96 | 29772683 | Kostas Papadimitriou | sel(".popup-separator").removeClass("popup-separator-error"); |
97 | 29772683 | Kostas Papadimitriou | |
98 | 29772683 | Kostas Papadimitriou | sel(".password-container").hide();
|
99 | 29772683 | Kostas Papadimitriou | if (config.extra) {
|
100 | 29772683 | Kostas Papadimitriou | sel(".password-container .password").html(config.extra);
|
101 | 29772683 | Kostas Papadimitriou | sel(".password-container").show();
|
102 | 29772683 | Kostas Papadimitriou | } |
103 | de44fc6c | Kostas Papadimitriou | |
104 | de44fc6c | Kostas Papadimitriou | var conf = {
|
105 | 29772683 | Kostas Papadimitriou | // some mask tweaks suitable for modal dialogs
|
106 | 29772683 | Kostas Papadimitriou | mask: '#666', |
107 | 54417a11 | Kostas Papadimitriou | top: '10px', |
108 | 29772683 | Kostas Papadimitriou | closeOnClick: false, |
109 | 29772683 | Kostas Papadimitriou | oneInstance: false, |
110 | 29772683 | Kostas Papadimitriou | load: false, |
111 | 3c08f055 | Kostas Papadimitriou | onLoad: config.onLoad || false, |
112 | de44fc6c | Kostas Papadimitriou | fixed: config.fixed || false, |
113 | 29772683 | Kostas Papadimitriou | onClose: function () { |
114 | 29772683 | Kostas Papadimitriou | // With partial refresh working properly,
|
115 | 29772683 | Kostas Papadimitriou | // it is no longer necessary to refresh the whole page
|
116 | 29772683 | Kostas Papadimitriou | // choose_view();
|
117 | 29772683 | Kostas Papadimitriou | } |
118 | de44fc6c | Kostas Papadimitriou | } |
119 | 3c08f055 | Kostas Papadimitriou | |
120 | de44fc6c | Kostas Papadimitriou | var triggers = $("a#msgbox").overlay(conf); |
121 | de44fc6c | Kostas Papadimitriou | |
122 | de44fc6c | Kostas Papadimitriou | try {
|
123 | de44fc6c | Kostas Papadimitriou | conf = $("a#msgbox").data('overlay').getConf(); |
124 | de44fc6c | Kostas Papadimitriou | conf.fixed = config.fixed || false;
|
125 | de44fc6c | Kostas Papadimitriou | } catch (err) {}
|
126 | 29772683 | Kostas Papadimitriou | $("a#msgbox").data('overlay').load(); |
127 | 29772683 | Kostas Papadimitriou | |
128 | 29772683 | Kostas Papadimitriou | var parse_data = config.parse_data || false; |
129 | 19e01943 | Kostas Papadimitriou | var load_html = config.html || false; |
130 | 19e01943 | Kostas Papadimitriou | var user_success = config.success || false; |
131 | 19e01943 | Kostas Papadimitriou | config.ajax = config.ajax || {}; |
132 | 19e01943 | Kostas Papadimitriou | |
133 | 19e01943 | Kostas Papadimitriou | // requested to show remote data in msg_box
|
134 | 3c08f055 | Kostas Papadimitriou | if (config.ajax && !$.isEmptyObject(config.ajax)) { |
135 | 19e01943 | Kostas Papadimitriou | $.ajax($.extend({ |
136 | 29772683 | Kostas Papadimitriou | url:config.ajax,
|
137 | 29772683 | Kostas Papadimitriou | success: function(data){ |
138 | 19e01943 | Kostas Papadimitriou | // we want to get our data parsed before
|
139 | 19e01943 | Kostas Papadimitriou | // placing them in content
|
140 | 29772683 | Kostas Papadimitriou | if (parse_data) {
|
141 | 29772683 | Kostas Papadimitriou | data = parse_data(data); |
142 | 29772683 | Kostas Papadimitriou | } |
143 | 29772683 | Kostas Papadimitriou | |
144 | 19e01943 | Kostas Papadimitriou | // no json response
|
145 | 19e01943 | Kostas Papadimitriou | // load html body
|
146 | 19e01943 | Kostas Papadimitriou | if (load_html) {
|
147 | 19e01943 | Kostas Papadimitriou | sel("div.machine-now-building").html(data);
|
148 | 19e01943 | Kostas Papadimitriou | } else {
|
149 | 29772683 | Kostas Papadimitriou | |
150 | 54417a11 | Kostas Papadimitriou | if (data.title) {
|
151 | 19e01943 | Kostas Papadimitriou | sel("h3 span.header-box").text(data.title);
|
152 | 54417a11 | Kostas Papadimitriou | } |
153 | 29772683 | Kostas Papadimitriou | |
154 | 19e01943 | Kostas Papadimitriou | if (data.content) {
|
155 | 19e01943 | Kostas Papadimitriou | sel("div.machine-now-building").html(data.content);
|
156 | 19e01943 | Kostas Papadimitriou | } |
157 | 19e01943 | Kostas Papadimitriou | if (data.extra) {
|
158 | 19e01943 | Kostas Papadimitriou | sel(".password-container .password").html(data.extra);
|
159 | 19e01943 | Kostas Papadimitriou | sel(".password-container").show();
|
160 | 19e01943 | Kostas Papadimitriou | } |
161 | 9ed51b7e | Kostas Papadimitriou | if (data.subinfo) {
|
162 | 9ed51b7e | Kostas Papadimitriou | sel(".sub-text").html(data.subinfo);
|
163 | 9ed51b7e | Kostas Papadimitriou | } else {
|
164 | 9ed51b7e | Kostas Papadimitriou | sel(".sub-text").html(""); |
165 | 9ed51b7e | Kostas Papadimitriou | } |
166 | 29772683 | Kostas Papadimitriou | } |
167 | 19e01943 | Kostas Papadimitriou | |
168 | 19e01943 | Kostas Papadimitriou | if (user_success) {
|
169 | 19e01943 | Kostas Papadimitriou | user_success($("div.machine-now-building")); |
170 | 19e01943 | Kostas Papadimitriou | } |
171 | 54417a11 | Kostas Papadimitriou | }, |
172 | 54417a11 | Kostas Papadimitriou | error: function(xhr, status, err) { |
173 | d3eef3ce | Kostas Papadimitriou | ajax_error(-519, "UI Error", "Machine connect", err, this); |
174 | dc12a449 | Kostas Papadimitriou | } |
175 | 19e01943 | Kostas Papadimitriou | }, config.ajax_config)); |
176 | 29772683 | Kostas Papadimitriou | } |
177 | 29772683 | Kostas Papadimitriou | return false; |
178 | 29772683 | Kostas Papadimitriou | } |
179 | 19e01943 | Kostas Papadimitriou | |
180 | 19e01943 | Kostas Papadimitriou | function show_invitations() { |
181 | 51b0ca27 | Kostas Papadimitriou | |
182 | 8d08f18a | Kostas Papadimitriou | function display_resend_success(msg) { |
183 | 8d08f18a | Kostas Papadimitriou | clear_resend_messages(); |
184 | 8d08f18a | Kostas Papadimitriou | $("#invsent .message.success").text(msg).show(); |
185 | 48c07635 | Kostas Papadimitriou | } |
186 | 48c07635 | Kostas Papadimitriou | |
187 | 8d08f18a | Kostas Papadimitriou | function display_resend_error(msg) { |
188 | 8d08f18a | Kostas Papadimitriou | clear_resend_messages(); |
189 | 8d08f18a | Kostas Papadimitriou | $("#invsent .message.errormsg").text(msg).show(); |
190 | 51b0ca27 | Kostas Papadimitriou | } |
191 | 51b0ca27 | Kostas Papadimitriou | |
192 | 51b0ca27 | Kostas Papadimitriou | // clear resent messages
|
193 | 51b0ca27 | Kostas Papadimitriou | function clear_resend_messages() { |
194 | 51b0ca27 | Kostas Papadimitriou | $("#invsent .message").hide(); |
195 | 51b0ca27 | Kostas Papadimitriou | } |
196 | 51b0ca27 | Kostas Papadimitriou | |
197 | 51b0ca27 | Kostas Papadimitriou | // register resent click handlers
|
198 | 51b0ca27 | Kostas Papadimitriou | function register_invitation_resends() { |
199 | 51b0ca27 | Kostas Papadimitriou | $(".invitations .resend-invitation").click(function() { |
200 | 51b0ca27 | Kostas Papadimitriou | var invid = $(this).attr("id"); |
201 | 51b0ca27 | Kostas Papadimitriou | |
202 | 51b0ca27 | Kostas Papadimitriou | if (invid == null) |
203 | 51b0ca27 | Kostas Papadimitriou | return;
|
204 | 51b0ca27 | Kostas Papadimitriou | |
205 | 51b0ca27 | Kostas Papadimitriou | var id = invid.split("-")[1]; |
206 | 51b0ca27 | Kostas Papadimitriou | |
207 | 51b0ca27 | Kostas Papadimitriou | if (id == null) |
208 | 51b0ca27 | Kostas Papadimitriou | return;
|
209 | 51b0ca27 | Kostas Papadimitriou | |
210 | 51b0ca27 | Kostas Papadimitriou | var child = $(this).find("img"); |
211 | 51b0ca27 | Kostas Papadimitriou | child.attr('src', '/static/progress-tiny.gif'); |
212 | 51b0ca27 | Kostas Papadimitriou | |
213 | 51b0ca27 | Kostas Papadimitriou | $.ajax({
|
214 | 51b0ca27 | Kostas Papadimitriou | type: "POST", |
215 | 51b0ca27 | Kostas Papadimitriou | url : "/invitations/resend", |
216 | 51b0ca27 | Kostas Papadimitriou | data : {invid : id}, |
217 | 51b0ca27 | Kostas Papadimitriou | success: function(msg) { |
218 | 8d08f18a | Kostas Papadimitriou | display_resend_success("Invitation has been resent");
|
219 | 51b0ca27 | Kostas Papadimitriou | child.attr('src', '/static/resend.png'); |
220 | 51b0ca27 | Kostas Papadimitriou | }, |
221 | 51b0ca27 | Kostas Papadimitriou | error : function(xhr, status, error) { |
222 | 8d08f18a | Kostas Papadimitriou | display_resend_error("Something seems to have gone wrong. " +
|
223 | 8d08f18a | Kostas Papadimitriou | "Please try again in a few minutes.");
|
224 | 51b0ca27 | Kostas Papadimitriou | child.attr('src', '/static/resend.png'); |
225 | 51b0ca27 | Kostas Papadimitriou | } |
226 | 51b0ca27 | Kostas Papadimitriou | }); |
227 | 51b0ca27 | Kostas Papadimitriou | }); |
228 | 51b0ca27 | Kostas Papadimitriou | } |
229 | 19e01943 | Kostas Papadimitriou | |
230 | 19e01943 | Kostas Papadimitriou | handle_invitations = function(el) { |
231 | 3f1e9a62 | Kostas Papadimitriou | |
232 | a697f671 | Kostas Papadimitriou | // proper class to identify the overlay block
|
233 | 19e01943 | Kostas Papadimitriou | el.addClass("invitations");
|
234 | a697f671 | Kostas Papadimitriou | |
235 | 19e01943 | Kostas Papadimitriou | var cont = el;
|
236 | 19e01943 | Kostas Papadimitriou | var form = $(el).find("form"); |
237 | f2141829 | Kostas Papadimitriou | |
238 | f2141829 | Kostas Papadimitriou | // remove garbage rows that stay in DOM between requests
|
239 | f2141829 | Kostas Papadimitriou | $(".removable-field-row:hidden").remove(); |
240 | 40a87146 | Kostas Papadimitriou | |
241 | a697f671 | Kostas Papadimitriou | // avoid buggy behaviour, close all overlays if something went wrong
|
242 | 40a87146 | Kostas Papadimitriou | try {
|
243 | a697f671 | Kostas Papadimitriou | // form is in content (form is not displayed if user has no invitations)
|
244 | a697f671 | Kostas Papadimitriou | if ($("#invform #removable-name-container-1").length) { |
245 | a697f671 | Kostas Papadimitriou | $("#invform #removable-name-container-1").dynamicField(); |
246 | a697f671 | Kostas Papadimitriou | } |
247 | 40a87146 | Kostas Papadimitriou | } catch (err) {
|
248 | 40a87146 | Kostas Papadimitriou | close_all_overlays(); |
249 | 40a87146 | Kostas Papadimitriou | } |
250 | d389b440 | Kostas Papadimitriou | |
251 | a697f671 | Kostas Papadimitriou | // we copy/paste it on the title no need to show it twice
|
252 | d389b440 | Kostas Papadimitriou | $(".invitations-left").hide(); |
253 | 51b0ca27 | Kostas Papadimitriou | |
254 | 51b0ca27 | Kostas Papadimitriou | // sending finished or first invitations view
|
255 | 51b0ca27 | Kostas Papadimitriou | $(".invitations .sending").hide(); |
256 | 51b0ca27 | Kostas Papadimitriou | $(".invitations .submit").show(); |
257 | 51b0ca27 | Kostas Papadimitriou | $(".invitations #fieldheaders").show(); |
258 | 51b0ca27 | Kostas Papadimitriou | $(".invitations #fields").show(); |
259 | a697f671 | Kostas Papadimitriou | |
260 | a697f671 | Kostas Papadimitriou | // reset title
|
261 | 54417a11 | Kostas Papadimitriou | $("#notification-box .header-box").html(""); |
262 | 67921b5c | Kostas Papadimitriou | $("#notification-box .header-box").html(window.INVITATIONS_TITLE + " " + $($(".invitations-left")[0]).text()); |
263 | 8d08f18a | Kostas Papadimitriou | |
264 | 51b0ca27 | Kostas Papadimitriou | // resend buttons
|
265 | 51b0ca27 | Kostas Papadimitriou | register_invitation_resends(); |
266 | 51b0ca27 | Kostas Papadimitriou | clear_resend_messages(); |
267 | d389b440 | Kostas Papadimitriou | |
268 | a697f671 | Kostas Papadimitriou | // handle form submit
|
269 | 19e01943 | Kostas Papadimitriou | form.submit(function(evn){
|
270 | 19e01943 | Kostas Papadimitriou | evn.preventDefault(); |
271 | 51b0ca27 | Kostas Papadimitriou | |
272 | 51b0ca27 | Kostas Papadimitriou | // sending...
|
273 | 51b0ca27 | Kostas Papadimitriou | $(".invitations .sending").show(); |
274 | 51b0ca27 | Kostas Papadimitriou | $(".invitations .submit").hide(); |
275 | 51b0ca27 | Kostas Papadimitriou | $(".invitations #fieldheaders").hide(); |
276 | 51b0ca27 | Kostas Papadimitriou | $(".invitations #fields").hide(); |
277 | a697f671 | Kostas Papadimitriou | |
278 | a697f671 | Kostas Papadimitriou | // do the post
|
279 | f2141829 | Kostas Papadimitriou | $.post(form.attr("action"), form.serialize(), function(data) { |
280 | a697f671 | Kostas Papadimitriou | // replace data
|
281 | eabbd5b7 | Kostas Papadimitriou | $(cont).html(data);
|
282 | a697f671 | Kostas Papadimitriou | |
283 | a697f671 | Kostas Papadimitriou | // append all handlers again (new html data need to redo all changes)
|
284 | eabbd5b7 | Kostas Papadimitriou | handle_invitations(cont); |
285 | f2141829 | Kostas Papadimitriou | }); |
286 | a697f671 | Kostas Papadimitriou | |
287 | 19e01943 | Kostas Papadimitriou | return false; |
288 | 19e01943 | Kostas Papadimitriou | }); |
289 | 19e01943 | Kostas Papadimitriou | } |
290 | a697f671 | Kostas Papadimitriou | |
291 | a697f671 | Kostas Papadimitriou | // first time clicked (show the msg box with /invitations content)
|
292 | de44fc6c | Kostas Papadimitriou | msg_box({ |
293 | de44fc6c | Kostas Papadimitriou | title:window.INVITATIONS_TITLE,
|
294 | de44fc6c | Kostas Papadimitriou | content:'', |
295 | de44fc6c | Kostas Papadimitriou | fixed: false, |
296 | de44fc6c | Kostas Papadimitriou | ajax:INVITATIONS_URL,
|
297 | de44fc6c | Kostas Papadimitriou | html:true, |
298 | de44fc6c | Kostas Papadimitriou | success: function(el){ |
299 | de44fc6c | Kostas Papadimitriou | handle_invitations(el) |
300 | de44fc6c | Kostas Papadimitriou | } |
301 | 19e01943 | Kostas Papadimitriou | }); |
302 | 19e01943 | Kostas Papadimitriou | } |
303 | dc12a449 | Kostas Papadimitriou | |
304 | f277a1cd | Kostas Papadimitriou | |
305 | f277a1cd | Kostas Papadimitriou | function get_short_v6(v6, parts_to_keep) { |
306 | f277a1cd | Kostas Papadimitriou | var parts = v6.split(":"); |
307 | f277a1cd | Kostas Papadimitriou | var new_parts = parts.slice(parts.length - parts_to_keep);
|
308 | f277a1cd | Kostas Papadimitriou | return new_parts.join(":"); |
309 | f277a1cd | Kostas Papadimitriou | } |
310 | f277a1cd | Kostas Papadimitriou | |
311 | f277a1cd | Kostas Papadimitriou | function fix_v6_addresses() { |
312 | f277a1cd | Kostas Papadimitriou | |
313 | f277a1cd | Kostas Papadimitriou | // what to prepend
|
314 | 99d2c273 | Kostas Papadimitriou | var match = "..."; |
315 | f277a1cd | Kostas Papadimitriou | // long ip min length
|
316 | f277a1cd | Kostas Papadimitriou | var limit = 20; |
317 | f277a1cd | Kostas Papadimitriou | // parts to show after the transformation
|
318 | f277a1cd | Kostas Papadimitriou | // (from the end)
|
319 | f277a1cd | Kostas Papadimitriou | var parts_to_keep_from_end = 4; |
320 | f277a1cd | Kostas Papadimitriou | |
321 | 8d08f18a | Kostas Papadimitriou | $(".machine .ipv6-text").each(function(index, el){ |
322 | f277a1cd | Kostas Papadimitriou | var el = $(el); |
323 | f277a1cd | Kostas Papadimitriou | var ip = $(el).text(); |
324 | f277a1cd | Kostas Papadimitriou | |
325 | f277a1cd | Kostas Papadimitriou | // transformation not applyied
|
326 | f277a1cd | Kostas Papadimitriou | // FIXME: use $.data for the condition
|
327 | f277a1cd | Kostas Papadimitriou | if (ip.indexOf(match) == -1 && ip != "pending") { |
328 | f277a1cd | Kostas Papadimitriou | |
329 | f277a1cd | Kostas Papadimitriou | // only too long ips
|
330 | f277a1cd | Kostas Papadimitriou | if (ip.length > 20) { |
331 | f277a1cd | Kostas Papadimitriou | $(el).data("ipstring", ip); |
332 | f277a1cd | Kostas Papadimitriou | $(el).text(match + get_short_v6(ip, parts_to_keep_from_end));
|
333 | f277a1cd | Kostas Papadimitriou | $(el).attr("title", ip); |
334 | 6b1c18d5 | Kostas Papadimitriou | $(el).tooltip({'tipClass':'tooltip ipv6-tip', 'position': 'center center'}); |
335 | f277a1cd | Kostas Papadimitriou | } |
336 | f277a1cd | Kostas Papadimitriou | } else {
|
337 | f277a1cd | Kostas Papadimitriou | if (ip.indexOf(match) == 0) { |
338 | f277a1cd | Kostas Papadimitriou | } else {
|
339 | f277a1cd | Kostas Papadimitriou | // not a long ip anymore
|
340 | f277a1cd | Kostas Papadimitriou | $(el).data("ipstring", undefined); |
341 | f277a1cd | Kostas Papadimitriou | $(el).css({'text-decoration':'none'}); |
342 | f277a1cd | Kostas Papadimitriou | |
343 | f277a1cd | Kostas Papadimitriou | if ($(el).data('tooltip')) { |
344 | f277a1cd | Kostas Papadimitriou | $(el).data('tooltip').show = function () {}; |
345 | f277a1cd | Kostas Papadimitriou | } |
346 | f277a1cd | Kostas Papadimitriou | } |
347 | f277a1cd | Kostas Papadimitriou | } |
348 | f277a1cd | Kostas Papadimitriou | }); |
349 | f277a1cd | Kostas Papadimitriou | } |
350 | f277a1cd | Kostas Papadimitriou | |
351 | 8d08f18a | Kostas Papadimitriou | // get stats
|
352 | 8d08f18a | Kostas Papadimitriou | function get_server_stats(serverID) { |
353 | 8d08f18a | Kostas Papadimitriou | |
354 | 8d08f18a | Kostas Papadimitriou | // do not update stats if machine in build state
|
355 | 8d08f18a | Kostas Papadimitriou | var vm = get_machine(serverID);
|
356 | 8d08f18a | Kostas Papadimitriou | if (vm.status == "BUILD" && vm.stats_timeout) { |
357 | 8d08f18a | Kostas Papadimitriou | els = get_current_view_stats_elements(vm.id); |
358 | 8d08f18a | Kostas Papadimitriou | els.cpu.img.hide(); |
359 | 8d08f18a | Kostas Papadimitriou | els.net.img.hide(); |
360 | 31279d33 | Kostas Papadimitriou | |
361 | 8d08f18a | Kostas Papadimitriou | els.cpu.busy.show(); |
362 | 8d08f18a | Kostas Papadimitriou | els.net.busy.show(); |
363 | 8d08f18a | Kostas Papadimitriou | return;
|
364 | 31279d33 | Kostas Papadimitriou | } |
365 | e9e7fe51 | Kostas Papadimitriou | |
366 | 8d08f18a | Kostas Papadimitriou | $.ajax({
|
367 | 8d08f18a | Kostas Papadimitriou | repeated: true, |
368 | 8d08f18a | Kostas Papadimitriou | url: API_URL + '/servers/' + serverID + '/stats', |
369 | 8d08f18a | Kostas Papadimitriou | cache: false, |
370 | 8d08f18a | Kostas Papadimitriou | type: "GET", |
371 | 8d08f18a | Kostas Papadimitriou | //async: false,
|
372 | 8d08f18a | Kostas Papadimitriou | dataType: "json", |
373 | 8d08f18a | Kostas Papadimitriou | timeout: TIMEOUT,
|
374 | 8d08f18a | Kostas Papadimitriou | error: function(jqXHR, textStatus, errorThrown) { |
375 | 8d08f18a | Kostas Papadimitriou | handle_api_error(-21, undefined, 'Get server stats', jqXHR, textStatus, errorThrown, this); |
376 | 8d08f18a | Kostas Papadimitriou | }, |
377 | 8d08f18a | Kostas Papadimitriou | success: function(data, textStatus, jqXHR) { |
378 | 122850c5 | Kostas Papadimitriou | //update_machine_stats(serverID, data);
|
379 | 8d08f18a | Kostas Papadimitriou | }, |
380 | e9e7fe51 | Kostas Papadimitriou | |
381 | 8d08f18a | Kostas Papadimitriou | // pass server id to ajax settings
|
382 | 8d08f18a | Kostas Papadimitriou | serverID: serverID
|
383 | 8d08f18a | Kostas Papadimitriou | }); |
384 | 8d08f18a | Kostas Papadimitriou | return false; |
385 | e9e7fe51 | Kostas Papadimitriou | } |
386 | 55e4b353 | Kostas Papadimitriou | |
387 | 55e4b353 | Kostas Papadimitriou | function get_progress_details(id) { |
388 | 55e4b353 | Kostas Papadimitriou | var vm = get_machine(id);
|
389 | 55e4b353 | Kostas Papadimitriou | var progress = vm.progress;
|
390 | 55e4b353 | Kostas Papadimitriou | |
391 | 55e4b353 | Kostas Papadimitriou | // no details for active machines
|
392 | 55e4b353 | Kostas Papadimitriou | if (!vm.status == "BUILD") { |
393 | 55e4b353 | Kostas Papadimitriou | return false; |
394 | 55e4b353 | Kostas Papadimitriou | } |
395 | 55e4b353 | Kostas Papadimitriou | |
396 | 55e4b353 | Kostas Papadimitriou | // check if images not loaded yet
|
397 | 55e4b353 | Kostas Papadimitriou | try {
|
398 | 8d08f18a | Kostas Papadimitriou | var image = synnefo.storage.images.get(vm.imageRef).attributes;
|
399 | 55e4b353 | Kostas Papadimitriou | var size = image.size;
|
400 | 55e4b353 | Kostas Papadimitriou | } catch (err) {
|
401 | 55e4b353 | Kostas Papadimitriou | // images not loaded yet (can this really happen ??)
|
402 | 55e4b353 | Kostas Papadimitriou | return;
|
403 | 55e4b353 | Kostas Papadimitriou | } |
404 | 55e4b353 | Kostas Papadimitriou | |
405 | 55e4b353 | Kostas Papadimitriou | var to_copy = size;
|
406 | 55e4b353 | Kostas Papadimitriou | var copied = (size * progress / 100).toFixed(2); |
407 | 55e4b353 | Kostas Papadimitriou | var status = "INIT" |
408 | 55e4b353 | Kostas Papadimitriou | |
409 | 55e4b353 | Kostas Papadimitriou | // apply state
|
410 | 55e4b353 | Kostas Papadimitriou | if (progress > 0) { status = "IMAGE_COPY" } |
411 | 55e4b353 | Kostas Papadimitriou | if (progress >= 100) { status = "FINISH" } |
412 | 55e4b353 | Kostas Papadimitriou | |
413 | 55e4b353 | Kostas Papadimitriou | // user information
|
414 | 8d08f18a | Kostas Papadimitriou | var msg = BUILDING_MESSAGES[status];
|
415 | 55e4b353 | Kostas Papadimitriou | |
416 | 55e4b353 | Kostas Papadimitriou | // image copy state display extended user information
|
417 | 8d08f18a | Kostas Papadimitriou | //if (status == "IMAGE_COPY") {
|
418 | 8d08f18a | Kostas Papadimitriou | //msg = msg.format(readablizeBytes(copied*(1024*1024)), readablizeBytes(to_copy*(1024*1024)), progress)
|
419 | 8d08f18a | Kostas Papadimitriou | //}
|
420 | 55e4b353 | Kostas Papadimitriou | |
421 | 55e4b353 | Kostas Papadimitriou | var progress_data = {
|
422 | 55e4b353 | Kostas Papadimitriou | 'percent': vm.progress,
|
423 | 55e4b353 | Kostas Papadimitriou | 'build_status': status,
|
424 | 55e4b353 | Kostas Papadimitriou | 'copied': copied,
|
425 | 55e4b353 | Kostas Papadimitriou | 'to_copy': size,
|
426 | 55e4b353 | Kostas Papadimitriou | 'msg': msg
|
427 | 55e4b353 | Kostas Papadimitriou | } |
428 | 55e4b353 | Kostas Papadimitriou | |
429 | 55e4b353 | Kostas Papadimitriou | return progress_data;
|
430 | 55e4b353 | Kostas Papadimitriou | } |
431 | 55e4b353 | Kostas Papadimitriou | |
432 | 55e4b353 | Kostas Papadimitriou | // display user friendly bytes amount
|
433 | 55e4b353 | Kostas Papadimitriou | function readablizeBytes(bytes) { |
434 | 55e4b353 | Kostas Papadimitriou | var s = ['bytes', 'kb', 'MB', 'GB', 'TB', 'PB']; |
435 | 55e4b353 | Kostas Papadimitriou | var e = Math.floor(Math.log(bytes)/Math.log(1024)); |
436 | 55e4b353 | Kostas Papadimitriou | return (bytes/Math.pow(1024, Math.floor(e))).toFixed(2)+" "+s[e]; |
437 | 55e4b353 | Kostas Papadimitriou | } |
438 | 55e4b353 | Kostas Papadimitriou | |
439 | 8d08f18a | Kostas Papadimitriou | // machines images utils
|
440 | 8d08f18a | Kostas Papadimitriou | function set_machine_os_image(machine, machines_view, state, os, skip_reset_states, remove_state) { |
441 | 8d08f18a | Kostas Papadimitriou | var views_map = {'single': '.single-image', 'icon': '.logo'}; |
442 | 8d08f18a | Kostas Papadimitriou | var states_map = {'on': 'state1', 'off': 'state3', 'hover': 'state4', 'click': 'state2'} |
443 | 8d08f18a | Kostas Papadimitriou | var sizes_map = {'single': 'large', 'icon': 'medium'} |
444 | 9ac432ec | Kostas Papadimitriou | |
445 | 8d08f18a | Kostas Papadimitriou | var size = sizes_map[machines_view];
|
446 | 8d08f18a | Kostas Papadimitriou | var img_selector = views_map[machines_view];
|
447 | 8d08f18a | Kostas Papadimitriou | var cls = states_map[state];
|
448 | 8fa1cbc9 | Kostas Papadimitriou | if (os === "unknown") { os = synnefo.config.unknown_os } |
449 | d42817ee | Olga Brani | |
450 | 7970aa87 | Kostas Papadimitriou | var new_img = 'url("' + synnefo.config.machines_icons_url + size + '/' + os + '-sprite.png")'; |
451 | 9ac432ec | Kostas Papadimitriou | |
452 | 8d08f18a | Kostas Papadimitriou | var el = $(img_selector, machine); |
453 | 8d08f18a | Kostas Papadimitriou | var current_img = el.css("backgroundImage"); |
454 | 8d08f18a | Kostas Papadimitriou | if (os == undefined){ |
455 | 8d08f18a | Kostas Papadimitriou | new_img = current_img; |
456 | 8d08f18a | Kostas Papadimitriou | } |
457 | 8d08f18a | Kostas Papadimitriou | |
458 | 8d08f18a | Kostas Papadimitriou | // os changed
|
459 | 8d08f18a | Kostas Papadimitriou | el.css("backgroundImage", new_img);
|
460 | 8d08f18a | Kostas Papadimitriou | |
461 | 8d08f18a | Kostas Papadimitriou | // reset current state
|
462 | 8d08f18a | Kostas Papadimitriou | if (skip_reset_states === undefined) |
463 | 8d08f18a | Kostas Papadimitriou | { |
464 | 8d08f18a | Kostas Papadimitriou | el.removeClass("single-image-state1");
|
465 | 8d08f18a | Kostas Papadimitriou | el.removeClass("single-image-state2");
|
466 | 8d08f18a | Kostas Papadimitriou | el.removeClass("single-image-state3");
|
467 | 8d08f18a | Kostas Papadimitriou | el.removeClass("single-image-state4");
|
468 | 8d08f18a | Kostas Papadimitriou | } |
469 | 8d08f18a | Kostas Papadimitriou | |
470 | 8d08f18a | Kostas Papadimitriou | if (remove_state !== undefined) |
471 | 8d08f18a | Kostas Papadimitriou | { |
472 | 8d08f18a | Kostas Papadimitriou | remove_state = "single-image-" + states_map[remove_state];
|
473 | 8d08f18a | Kostas Papadimitriou | el.removeClass(remove_state); |
474 | 8d08f18a | Kostas Papadimitriou | return;
|
475 | 8d08f18a | Kostas Papadimitriou | } |
476 | 8d08f18a | Kostas Papadimitriou | |
477 | 8d08f18a | Kostas Papadimitriou | // set proper state
|
478 | 8d08f18a | Kostas Papadimitriou | el.addClass("single-image-" + cls);
|
479 | 8d08f18a | Kostas Papadimitriou | } |
480 | 8d08f18a | Kostas Papadimitriou | |
481 | 8d08f18a | Kostas Papadimitriou | // return machine entry from serverID
|
482 | 8d08f18a | Kostas Papadimitriou | function get_machine(serverID) { |
483 | 8d08f18a | Kostas Papadimitriou | return synnefo.storage.vms.get(serverID).attributes;
|
484 | 9ac432ec | Kostas Papadimitriou | } |