Statistics
| Branch: | Tag: | Revision:

root / ui / templates / machines_icon.html @ 8b471ee6

History | View | Annotate | Download (34.7 kB)

1 a5bc3755 Vangelis Koukis
<!--
2 a5bc3755 Vangelis Koukis
Copyright 2011 GRNET S.A. All rights reserved.
3 a5bc3755 Vangelis Koukis

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 a5bc3755 Vangelis Koukis

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 a5bc3755 Vangelis Koukis

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 a5bc3755 Vangelis Koukis

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 a5bc3755 Vangelis Koukis

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 a5bc3755 Vangelis Koukis
36 42f67a2a Dimitris Moraitis
{% load i18n %}
37 42f67a2a Dimitris Moraitis
38 42f67a2a Dimitris Moraitis
<!-- the standard view -->
39 f533f224 Vangelis Koukis
<div id="machinesview-icon" class="standard">
40 14f61457 Mike Muzurakis
    <div class="machine-container" id="machine-container-template" style="display:none">
41 c9f5ed3f Christodoulos Psaltis
        <div class="machine" id="machine-template">
42 5c5b3e58 Christodoulos Psaltis
            <div class='connect-border' title='{% trans 'Connect  machine' %}'></div>
43 5c5b3e58 Christodoulos Psaltis
            <div class='connect-arrow' title='{% trans 'Connect  machine' %}'></div>
44 aae6187b Mike Muzurakis
            <img class="logo" src="" />
45 aae6187b Mike Muzurakis
            <div class="machine-details">
46 aae6187b Mike Muzurakis
                <div href="#" class="name">
47 aae6187b Mike Muzurakis
                    <h5 class="namecontainer editable">
48 aae6187b Mike Muzurakis
                        <span class="name">node.name</span><span class="rename"></span>
49 aae6187b Mike Muzurakis
                        <div class="editbuttons" style="display:none">
50 aae6187b Mike Muzurakis
                            <div class="save"></div>
51 aae6187b Mike Muzurakis
                            <div class="cancel"></div>
52 aae6187b Mike Muzurakis
                        </div>
53 aae6187b Mike Muzurakis
                    </h5>
54 aae6187b Mike Muzurakis
                </div>
55 aae6187b Mike Muzurakis
                <a href="#" class="ip">
56 aae6187b Mike Muzurakis
                    <h5>{% trans "IP" %}: <span class="public">node.public_ip</span></h5>
57 aae6187b Mike Muzurakis
                </a>
58 aae6187b Mike Muzurakis
            </div>
59 aae6187b Mike Muzurakis
            <div class="info">
60 aae6187b Mike Muzurakis
                <div class="info-header">
61 aae6187b Mike Muzurakis
                    <div class="info-label">{% trans "info" %}</div>
62 aae6187b Mike Muzurakis
                    <div class="toggler down"></div>
63 aae6187b Mike Muzurakis
                </div>
64 aae6187b Mike Muzurakis
            </div>
65 aae6187b Mike Muzurakis
            <div class="info-content">
66 aae6187b Mike Muzurakis
                <div class="metadata-container">
67 aae6187b Mike Muzurakis
                    <div class="vm-details metadata-column">
68 aae6187b Mike Muzurakis
                        {% trans "CPUs" %}: <span class="cpu-data">1</span><br />
69 aae6187b Mike Muzurakis
                        {% trans "RAM" %}: <span class="ram-data">2048</span> (MB)<br />
70 aae6187b Mike Muzurakis
                        {% trans "System Disk" %}: <span class="disk-data">20</span> (GB) <br /><br />
71 aae6187b Mike Muzurakis
                        {% trans "Image" %}: <span class="image-data">Debian</span><br />
72 aae6187b Mike Muzurakis
                        {% trans "Image Size" %}: <span class="image-size-data">2.3</span> (GB)
73 aae6187b Mike Muzurakis
                    </div>
74 aae6187b Mike Muzurakis
                    <div class="vm-stats metadata-column">
75 aae6187b Mike Muzurakis
                        {% trans "CPU" %} <img src="static/cpu-bar.png" class="metadata-bar" /><br />
76 aae6187b Mike Muzurakis
                        {% trans "RAM" %} <img src="static/ram-bar.png" class="metadata-bar" /><br />
77 aae6187b Mike Muzurakis
                        {% trans "S.Disk" %} <img src="static/cpu-bar.png" class="metadata-bar" /><br />
78 aae6187b Mike Muzurakis
                        {% trans "Net" %} <img src="static/net-bar.png" class="metadata-bar" /><br /><br />
79 aae6187b Mike Muzurakis
                        {% trans "details" %}
80 aae6187b Mike Muzurakis
                    </div>
81 aae6187b Mike Muzurakis
                    <div class="vm-metadata metadata-column">
82 aae6187b Mike Muzurakis
                        <div class="metadata-left">
83 aae6187b Mike Muzurakis
                            {% trans "Metadata" %}: <br />
84 aae6187b Mike Muzurakis
                            (<span class="metadata-count">0</span>)
85 aae6187b Mike Muzurakis
                        </div>
86 aae6187b Mike Muzurakis
                        <div class="metadata-keys-container">
87 aae6187b Mike Muzurakis
                            <div class="scrollable vertical">
88 aae6187b Mike Muzurakis
                                <div class="items">
89 aae6187b Mike Muzurakis
                                </div>
90 aae6187b Mike Muzurakis
                            </div>
91 aae6187b Mike Muzurakis
                            <div class="metadata-actions">
92 aae6187b Mike Muzurakis
                                <div class="prev"></div>
93 aae6187b Mike Muzurakis
                                <div class="next"></div>
94 aae6187b Mike Muzurakis
                            </div>
95 aae6187b Mike Muzurakis
                        </div>
96 aae6187b Mike Muzurakis
                        <a href="#" class="manage-metadata">{% trans "Manage Tags" %}</a>
97 aae6187b Mike Muzurakis
                    </div>
98 aae6187b Mike Muzurakis
                </div>
99 aae6187b Mike Muzurakis
            </div>
100 aae6187b Mike Muzurakis
            <div class="state">
101 aae6187b Mike Muzurakis
                <div class="status">{% trans "Running" %}</div>
102 aae6187b Mike Muzurakis
                <div class="indicators">
103 aae6187b Mike Muzurakis
                    <div class="indicator1"></div>
104 aae6187b Mike Muzurakis
                    <div class="indicator2"></div>
105 aae6187b Mike Muzurakis
                    <div class="indicator3"></div>
106 aae6187b Mike Muzurakis
                    <div class="indicator4"></div>
107 aae6187b Mike Muzurakis
                </div>
108 a583aa29 Kostas Papadimitriou
                <div class="action-indicator" style="display:none"></div>
109 aae6187b Mike Muzurakis
                <img class="spinner" style="display:none" src="static/icons/indicators/medium/progress.gif" />
110 aae6187b Mike Muzurakis
                <img class="wave" style="display:none" src="static/icons/indicators/medium/wave.gif" />
111 aae6187b Mike Muzurakis
            </div>
112 14f61457 Mike Muzurakis
            <div class="actions">
113 72872ba2 Christodoulos Psaltis
                <div class="action-container start">
114 72872ba2 Christodoulos Psaltis
                    <a href="#" class="action-start">{% trans "Start" %}</a>
115 72872ba2 Christodoulos Psaltis
                    <div class="confirm_single">
116 72872ba2 Christodoulos Psaltis
                        <button class="yes">{% trans "Confirm" %}</button>
117 72872ba2 Christodoulos Psaltis
                        <button class="no">X</button>
118 72872ba2 Christodoulos Psaltis
                    </div>
119 72872ba2 Christodoulos Psaltis
                </div>
120 72872ba2 Christodoulos Psaltis
                <div class="action-container reboot">
121 72872ba2 Christodoulos Psaltis
                    <a href="#" class="action-reboot">{% trans "Reboot" %}</a>
122 72872ba2 Christodoulos Psaltis
                    <div class="confirm_single">
123 72872ba2 Christodoulos Psaltis
                        <button class="yes">{% trans "Confirm" %}</button>
124 72872ba2 Christodoulos Psaltis
                        <button class="no">X</button>
125 72872ba2 Christodoulos Psaltis
                    </div>
126 72872ba2 Christodoulos Psaltis
                </div>
127 72872ba2 Christodoulos Psaltis
                <div class="action-container shutdown">
128 72872ba2 Christodoulos Psaltis
                    <a href="#" class="action-shutdown">{% trans "Shutdown" %}</a>
129 72872ba2 Christodoulos Psaltis
                    <div class="confirm_single">
130 72872ba2 Christodoulos Psaltis
                        <button class="yes">{% trans "Confirm" %}</button>
131 72872ba2 Christodoulos Psaltis
                        <button class="no">X</button>
132 72872ba2 Christodoulos Psaltis
                    </div>
133 72872ba2 Christodoulos Psaltis
                </div>
134 72872ba2 Christodoulos Psaltis
                <div class="action-container console">
135 72872ba2 Christodoulos Psaltis
                    <a href="#" class="action-console">{% trans "Console" %}</a>
136 72872ba2 Christodoulos Psaltis
                    <div class="confirm_single">
137 72872ba2 Christodoulos Psaltis
                        <button class="yes">{% trans "Confirm" %}</button>
138 72872ba2 Christodoulos Psaltis
                        <button class="no">X</button>
139 72872ba2 Christodoulos Psaltis
                    </div>
140 72872ba2 Christodoulos Psaltis
                </div>
141 72872ba2 Christodoulos Psaltis
                <div class="action-container destroy">
142 72872ba2 Christodoulos Psaltis
                    <a href="#" class="action-destroy">{% trans "Destroy" %}</a>
143 72872ba2 Christodoulos Psaltis
                    <div class="confirm_single">
144 72872ba2 Christodoulos Psaltis
                        <button class="yes">{% trans "Confirm" %}</button>
145 72872ba2 Christodoulos Psaltis
                        <button class="no">X</button>
146 72872ba2 Christodoulos Psaltis
                    </div>
147 72872ba2 Christodoulos Psaltis
                </div>
148 f533f224 Vangelis Koukis
            </div>
149 09d3fbbf Mike Muzurakis
            <div class="action_error" align="center">
150 9e53fd01 Christodoulos Psaltis
                {% trans "<span>Error</span> on" %} <span class="action">{% trans "error action" %}</span>
151 f533f224 Vangelis Koukis
                <span class="code"></span>
152 09d3fbbf Mike Muzurakis
                <span class="message"></span>
153 09d3fbbf Mike Muzurakis
                <button class="details">{% trans "Details" %}</button>
154 09d3fbbf Mike Muzurakis
            </div>
155 879748ec Markos Gogoulos
        </div>
156 c2464ef2 Christodoulos Psaltis
        <div class="separator"></div>
157 42f67a2a Dimitris Moraitis
    </div>
158 7a3f7b8f Mike Muzurakis
    <div class="running"><div class="large-spinner"></div></div>
159 f533f224 Vangelis Koukis
    <div class="terminated" style="display:none;"></div>
160 42f67a2a Dimitris Moraitis
</div>
161 42f67a2a Dimitris Moraitis
162 42f67a2a Dimitris Moraitis
<script>
163 bb253902 Dimitris Moraitis
CONFIRMBOX_OFFSET = 200;
164 31e549f5 Christodoulos Psaltis

165 a583aa29 Kostas Papadimitriou
init_action_indicator_handlers('icon');
166 a583aa29 Kostas Papadimitriou

167 1310d4f0 Christodoulos Psaltis
// actions on machine mouseover
168 38d99960 Christodoulos Psaltis
$("#machinesview-icon.standard .machine").live('mouseover', function() {
169 206e04ae Christodoulos Psaltis
    // show connect button only if the machine is active
170 206e04ae Christodoulos Psaltis
    if ($(this).find('.status').text() == STATUSES['ACTIVE']) {
171 206e04ae Christodoulos Psaltis
        $(this).find("div.connect-arrow").show();
172 206e04ae Christodoulos Psaltis
        $(this).find("div.connect-border").show();
173 206e04ae Christodoulos Psaltis
    }
174 38d99960 Christodoulos Psaltis
});
175 38d99960 Christodoulos Psaltis

176 1310d4f0 Christodoulos Psaltis
// actions on machine mouseout
177 38d99960 Christodoulos Psaltis
$("#machinesview-icon.standard .machine").live('mouseout', function() {
178 0a6b3683 Christodoulos Psaltis
    // hide connect button
179 ba16aed0 Christodoulos Psaltis
    $(this).find("div.connect-arrow").hide();
180 38d99960 Christodoulos Psaltis
    $(this).find("div.connect-border").hide();
181 38d99960 Christodoulos Psaltis
});
182 38d99960 Christodoulos Psaltis

183 1310d4f0 Christodoulos Psaltis
// actions on connect arrow border mouseover
184 1310d4f0 Christodoulos Psaltis
$("#machinesview-icon.standard .running div.connect-border").live('mouseover', function() {
185 1310d4f0 Christodoulos Psaltis
    $(this).next().addClass('border-hover');
186 1310d4f0 Christodoulos Psaltis
});
187 1310d4f0 Christodoulos Psaltis

188 1310d4f0 Christodoulos Psaltis
// actions on connect arrow border mouseout
189 1310d4f0 Christodoulos Psaltis
$("#machinesview-icon.standard .running div.connect-border").live('mouseout', function() {
190 1310d4f0 Christodoulos Psaltis
    $(this).next().removeClass('border-hover');
191 1310d4f0 Christodoulos Psaltis
});
192 1310d4f0 Christodoulos Psaltis

193 31e549f5 Christodoulos Psaltis
// open console on machine logo click
194 31e549f5 Christodoulos Psaltis
$("#machinesview-icon.standard .running img.logo").live('click', function(){
195 31e549f5 Christodoulos Psaltis
    $(this).parent().parent().find("a.action-console").click();
196 31e549f5 Christodoulos Psaltis
    return false;
197 31e549f5 Christodoulos Psaltis
});
198 31e549f5 Christodoulos Psaltis

199 31e549f5 Christodoulos Psaltis
// open console on connect arrow click
200 31e549f5 Christodoulos Psaltis
$("#machinesview-icon.standard .running div.connect-arrow").live('click', function(){
201 31e549f5 Christodoulos Psaltis
    $(this).parent().parent().find("a.action-console").click();
202 31e549f5 Christodoulos Psaltis
    return false;
203 31e549f5 Christodoulos Psaltis
});
204 0a6b3683 Christodoulos Psaltis

205 1310d4f0 Christodoulos Psaltis
// open console on connect arrow border click
206 1310d4f0 Christodoulos Psaltis
$("#machinesview-icon.standard .running div.connect-border").live('click', function(){
207 1310d4f0 Christodoulos Psaltis
    $(this).parent().parent().find("a.action-console").click();
208 1310d4f0 Christodoulos Psaltis
    return false;
209 1310d4f0 Christodoulos Psaltis
});
210 1310d4f0 Christodoulos Psaltis

211 beef1f05 Mike Muzurakis
//hide the all of the info contents
212 f533f224 Vangelis Koukis
$("#machinesview-icon.standard .info-content").hide();
213 beef1f05 Mike Muzurakis
//toggle the component with class info-content
214 0f47e121 Christodoulos Psaltis
$("#machinesview-icon.standard div.info-header").live('click', function() {
215 69cebe8a Christodoulos Psaltis
    if ($(this).find('.toggler').hasClass('up')) {
216 69cebe8a Christodoulos Psaltis
        $(this).find('.toggler').removeClass('up');
217 0be864b6 Christodoulos Psaltis
        $(this).find('.toggler').addClass('down');
218 8e88c3fe Christodoulos Psaltis
        $(this).find('.info-label').removeClass('darker');
219 e5b6f8f8 Christodoulos Psaltis
        $(this).parent().parent().removeClass('light-background');
220 69cebe8a Christodoulos Psaltis
    } else {
221 0be864b6 Christodoulos Psaltis
        $(this).find('.toggler').removeClass('down');
222 69cebe8a Christodoulos Psaltis
        $(this).find('.toggler').addClass('up');
223 8e88c3fe Christodoulos Psaltis
        $(this).find('.info-label').addClass('darker');
224 0f47e121 Christodoulos Psaltis
        $(this).parent().parent().addClass('light-background');
225 69cebe8a Christodoulos Psaltis
    }
226 826ba503 Mike Muzurakis
    $(this).parent().parent().find(".info-content").slideToggle(600);
227 0a8e39b4 Mike Muzurakis
    return false;
228 beef1f05 Mike Muzurakis
});
229 beef1f05 Mike Muzurakis

230 beef1f05 Mike Muzurakis
// intercept manage metadata click
231 f533f224 Vangelis Koukis
$("#machinesview-icon.standard a.manage-metadata").live('click', function() {
232 339712cb Christodoulos Psaltis
    // get server name and server ID
233 9a3c23db Christodoulos Psaltis
    var serverID = $(this).closest('.machine-container').attr("id");
234 9a3c23db Christodoulos Psaltis
    var serverName = $(this).closest('.machine').find("span.name").text();
235 4629cc1f Christodoulos Psaltis
    // set server name to all related metadata dialogs
236 f533f224 Vangelis Koukis
    $("#metadata-wizard div.machine-name").text(serverName);
237 00ee3189 Christodoulos Psaltis
    if ($(this).closest('.machine-container').parent().hasClass('terminated')) {
238 f533f224 Vangelis Koukis
        $("#metadata-wizard div#on-off").text('off');
239 f533f224 Vangelis Koukis
    } else {
240 f533f224 Vangelis Koukis
        $("#metadata-wizard div#on-off").text('on');
241 f533f224 Vangelis Koukis
    }
242 4629cc1f Christodoulos Psaltis
    // set server id to all related metadata dialogs
243 f533f224 Vangelis Koukis
    $("#metadata-wizard p").text(serverID);
244 71eade6b Christodoulos Psaltis
    show_metadata_wizard();
245 ef7770cf Dimitris Moraitis
    return false;
246 339712cb Christodoulos Psaltis
});
247 339712cb Christodoulos Psaltis

248 a70a9116 Mike Muzurakis
//initiate machine renaming
249 f533f224 Vangelis Koukis
$("#machinesview-icon.standard .rename, #machinesview-icon.standard h5.editable span.name").live('click', function() {
250 380c0520 Dimitris Moraitis
    $(this).parent().find('.name').html("<input type=\"text\" class=\"nametextbox\" value=\"" +
251 f533f224 Vangelis Koukis
                                        $(this).parent().find('.name').text() +
252 f533f224 Vangelis Koukis
                                        "\" / ><span class=\"oldValue\">" +
253 134a9f26 Christodoulos Psaltis
                                        $(this).parent().find('.name').text() + "</span>");
254 c64c04ec Dimitris Moraitis
    $(this).parent().find('.rename').hide();
255 c64c04ec Dimitris Moraitis
    $(this).parent().find(".editbuttons").fadeIn();
256 96bb1d47 Christodoulos Psaltis
    $(this).parent().find(".nametextbox").focus().select();
257 3f198846 Dimitris Moraitis
    $(this).parent().removeClass('editable');
258 86c97ac3 Christodoulos Psaltis

259 86c97ac3 Christodoulos Psaltis
    //submit wizard by pressing enter on the name textbox
260 380c0520 Dimitris Moraitis
    $(".nametextbox").keydown(function (e) {
261 f533f224 Vangelis Koukis
        if ((e.which && e.which == 13) || (e.keyCode && e.keyCode == 13)) {
262 380c0520 Dimitris Moraitis
            $(this).parent().parent().find('div.editbuttons div.save').click();
263 f533f224 Vangelis Koukis
            return false;
264 f533f224 Vangelis Koukis
        } else if ((e.which && e.which == 27) || (e.keyCode && e.keyCode == 27)) {
265 380c0520 Dimitris Moraitis
            $(this).parent().parent().find('div.editbuttons div.cancel').click();
266 f533f224 Vangelis Koukis
            return true;
267 f533f224 Vangelis Koukis
        }
268 86c97ac3 Christodoulos Psaltis
    });
269 3f198846 Dimitris Moraitis
    return false;
270 0d4faeb8 Mike Muzurakis
});
271 0d4faeb8 Mike Muzurakis

272 a70a9116 Mike Muzurakis
//rename machine
273 f533f224 Vangelis Koukis
$("#machinesview-icon.standard .editbuttons .save").live('click', function() {
274 14f61457 Mike Muzurakis
    serverID = $(this).closest('.machine-container').attr("id");
275 a70a9116 Mike Muzurakis
    serverName = $(this).parent().parent().find('.name').find('.nametextbox').val();
276 2b10d496 Mike Muzurakis
    if (serverName.trim() == ''){
277 2b10d496 Mike Muzurakis
        return false;
278 2b10d496 Mike Muzurakis
    }
279 a70a9116 Mike Muzurakis
    $(this).parent().parent().find('.name').html($(this).parent().parent().find('.nametextbox').val());
280 a70a9116 Mike Muzurakis
    $(this).parent().parent().find(".editbuttons").fadeOut("fast");
281 a70a9116 Mike Muzurakis
    $(this).parent().parent().find(".rename").fadeIn("slow");
282 380c0520 Dimitris Moraitis
    $(this).parent().parent().addClass('editable');
283 73715544 Christodoulos Psaltis
    rename(serverID, serverName);
284 a70a9116 Mike Muzurakis
    return false;
285 a70a9116 Mike Muzurakis
});
286 a70a9116 Mike Muzurakis

287 0d4faeb8 Mike Muzurakis
//cancel renaming
288 f533f224 Vangelis Koukis
$("#machinesview-icon.standard .editbuttons .cancel").live('click', function() {
289 f533f224 Vangelis Koukis
    $(this).parent().parent().find('.name').html($(this).parent().parent().find('.oldValue').text());
290 c64c04ec Dimitris Moraitis
    $(this).parent().parent().find(".editbuttons").hide();
291 c64c04ec Dimitris Moraitis
    $(this).parent().parent().find(".rename").fadeIn();
292 3f198846 Dimitris Moraitis
    $(this).parent().parent().addClass('editable');
293 f533f224 Vangelis Koukis
    return false;
294 0d4faeb8 Mike Muzurakis
});
295 0d4faeb8 Mike Muzurakis

296 f533f224 Vangelis Koukis
// intercept reboot click
297 72872ba2 Christodoulos Psaltis
$("#machinesview-icon.standard div.actions a.action-reboot").live('click', function() {
298 72872ba2 Christodoulos Psaltis
    // get server id and server name from DOM
299 72872ba2 Christodoulos Psaltis
    var serverID = $(this).closest("div.machine-container").attr("id");
300 72872ba2 Christodoulos Psaltis
    var serverName = $(this).closest("div.machine").find("div.name span.name").text();
301 267403ca Dimitris Moraitis
    var found = false;
302 72872ba2 Christodoulos Psaltis
    // show/hide proper menus
303 72872ba2 Christodoulos Psaltis
    $(this).parent().parent().find('a').removeClass('selected');
304 aa0534a7 Dimitris Moraitis
    $(this).addClass('selected');
305 72872ba2 Christodoulos Psaltis
    $(this).parent().parent().addClass('display');
306 72872ba2 Christodoulos Psaltis
    $(this).closest("div.machine").find('.action_error').hide();
307 72872ba2 Christodoulos Psaltis
    // if there is already a pending action for this server replace it
308 72872ba2 Christodoulos Psaltis
    for (i=0; i<pending_actions.length; i++) {
309 db269618 Christodoulos Psaltis
        if (pending_actions[i][1] == serverID) {
310 267403ca Dimitris Moraitis
            pending_actions[i][0] = reboot;
311 267403ca Dimitris Moraitis
            found = true
312 267403ca Dimitris Moraitis
        }
313 267403ca Dimitris Moraitis
    }
314 72872ba2 Christodoulos Psaltis
    // no pending action for this server was found, so let's just add it to the list
315 72872ba2 Christodoulos Psaltis
    if (!found)
316 267403ca Dimitris Moraitis
        pending_actions.push([reboot, serverID, serverName])
317 72872ba2 Christodoulos Psaltis
    // pass the proper action to update confirmation boxes
318 a70fb308 Christodoulos Psaltis
    update_confirmations();
319 42f67a2a Dimitris Moraitis
    return false;
320 42f67a2a Dimitris Moraitis
});
321 42f67a2a Dimitris Moraitis

322 42f67a2a Dimitris Moraitis
// intercept shutdown click
323 72872ba2 Christodoulos Psaltis
$("#machinesview-icon.standard div.actions a.action-shutdown").live('click', function() {
324 72872ba2 Christodoulos Psaltis
    // get server id and server name from DOM
325 72872ba2 Christodoulos Psaltis
    var serverID = $(this).closest("div.machine-container").attr("id");
326 72872ba2 Christodoulos Psaltis
    var serverName = $(this).closest("div.machine").find("div.name span.name").text();
327 267403ca Dimitris Moraitis
    var found = false;
328 72872ba2 Christodoulos Psaltis
    // show/hide proper menus
329 72872ba2 Christodoulos Psaltis
    $(this).parent().parent().find('a').removeClass('selected');
330 aa0534a7 Dimitris Moraitis
    $(this).addClass('selected');
331 72872ba2 Christodoulos Psaltis
    $(this).parent().parent().addClass('display');
332 72872ba2 Christodoulos Psaltis
    $(this).closest("div.machine").find('.action_error').hide();
333 72872ba2 Christodoulos Psaltis
    // if there is already a pending action for this server replace it
334 72872ba2 Christodoulos Psaltis
    for (i=0; i<pending_actions.length; i++) {
335 db269618 Christodoulos Psaltis
        if (pending_actions[i][1] == serverID) {
336 267403ca Dimitris Moraitis
            pending_actions[i][0] = shutdown;
337 267403ca Dimitris Moraitis
            found = true
338 267403ca Dimitris Moraitis
        }
339 267403ca Dimitris Moraitis
    }
340 72872ba2 Christodoulos Psaltis
    // no pending action for this server was found, so let's just add it to the list
341 72872ba2 Christodoulos Psaltis
    if (!found)
342 267403ca Dimitris Moraitis
        pending_actions.push([shutdown, serverID, serverName])
343 a70fb308 Christodoulos Psaltis
    update_confirmations();
344 42f67a2a Dimitris Moraitis
    return false;
345 42f67a2a Dimitris Moraitis
});
346 eae0a59a Dimitris Moraitis

347 42f67a2a Dimitris Moraitis
// intercept start click
348 72872ba2 Christodoulos Psaltis
$("#machinesview-icon.standard div.actions a.action-start").live('click', function() {
349 72872ba2 Christodoulos Psaltis
    // get server id and server name from DOM
350 72872ba2 Christodoulos Psaltis
    var serverID = $(this).closest("div.machine-container").attr("id");
351 72872ba2 Christodoulos Psaltis
    var serverName = $(this).closest("div.machine").find("div.name span.name").text();
352 267403ca Dimitris Moraitis
    var found = false;
353 72872ba2 Christodoulos Psaltis
    // show/hide proper menus
354 72872ba2 Christodoulos Psaltis
    $(this).parent().parent().find('a').removeClass('selected');
355 aa0534a7 Dimitris Moraitis
    $(this).addClass('selected');
356 72872ba2 Christodoulos Psaltis
    $(this).parent().parent().addClass('display');
357 72872ba2 Christodoulos Psaltis
    $(this).closest("div.machine").find('.action_error').hide();
358 72872ba2 Christodoulos Psaltis
    // if there is already a pending action for this server replace it
359 72872ba2 Christodoulos Psaltis
    for (i=0; i<pending_actions.length; i++) {
360 db269618 Christodoulos Psaltis
        if (pending_actions[i][1] == serverID) {
361 267403ca Dimitris Moraitis
            pending_actions[i][0] = start;
362 267403ca Dimitris Moraitis
            found = true
363 267403ca Dimitris Moraitis
        }
364 267403ca Dimitris Moraitis
    }
365 72872ba2 Christodoulos Psaltis
    // no pending action for this server was found, so let's just add it to the list
366 72872ba2 Christodoulos Psaltis
    if (!found)
367 267403ca Dimitris Moraitis
        pending_actions.push([start, serverID, serverName])
368 a70fb308 Christodoulos Psaltis
    update_confirmations();
369 267403ca Dimitris Moraitis
    return false;
370 267403ca Dimitris Moraitis
});
371 267403ca Dimitris Moraitis

372 b02144c8 Vangelis Koukis
// intercept console click
373 72872ba2 Christodoulos Psaltis
$("#machinesview-icon.standard div.actions a.action-console").live('click', function() {
374 72872ba2 Christodoulos Psaltis
    // get server id and server name from DOM
375 72872ba2 Christodoulos Psaltis
    var serverID = $(this).closest("div.machine-container").attr("id");
376 72872ba2 Christodoulos Psaltis
    var serverName = $(this).closest("div.machine").find("div.name span.name").text();
377 b02144c8 Vangelis Koukis
    var found = false;
378 72872ba2 Christodoulos Psaltis
    // show/hide proper menus
379 72872ba2 Christodoulos Psaltis
    $(this).parent().parent().find('a').removeClass('selected');
380 b02144c8 Vangelis Koukis
    $(this).addClass('selected');
381 72872ba2 Christodoulos Psaltis
    $(this).parent().parent().addClass('display');
382 72872ba2 Christodoulos Psaltis
    $(this).closest("div.machine").find('.action_error').hide();
383 72872ba2 Christodoulos Psaltis
    // if there is already a pending action for this server replace it
384 72872ba2 Christodoulos Psaltis
    for (i=0; i<pending_actions.length; i++) {
385 db269618 Christodoulos Psaltis
        if (pending_actions[i][1] == serverID) {
386 fb3eec11 Christodoulos Psaltis
            pending_actions[i][0] = open_console;
387 b02144c8 Vangelis Koukis
            found = true
388 b02144c8 Vangelis Koukis
        }
389 b02144c8 Vangelis Koukis
    }
390 72872ba2 Christodoulos Psaltis
    // no pending action for this server was found, so let's just add it to the list
391 72872ba2 Christodoulos Psaltis
    if (!found)
392 fb3eec11 Christodoulos Psaltis
        pending_actions.push([open_console, serverID, serverName])
393 a70fb308 Christodoulos Psaltis
    update_confirmations();
394 b02144c8 Vangelis Koukis
    return false;
395 b02144c8 Vangelis Koukis
});
396 b02144c8 Vangelis Koukis

397 b02144c8 Vangelis Koukis

398 f3632e8d Christodoulos Psaltis
// intercept destroy click
399 72872ba2 Christodoulos Psaltis
$("#machinesview-icon.standard div.actions a.action-destroy").live('click', function() {
400 72872ba2 Christodoulos Psaltis
    // get server id and server name from DOM
401 72872ba2 Christodoulos Psaltis
    var serverID = $(this).closest("div.machine-container").attr("id");
402 72872ba2 Christodoulos Psaltis
    var serverName = $(this).closest("div.machine").find("div.name span.name").text();
403 f3632e8d Christodoulos Psaltis
    var found = false;
404 72872ba2 Christodoulos Psaltis
    // show/hide proper menus
405 72872ba2 Christodoulos Psaltis
    $(this).parent().parent().find('a').removeClass('selected');
406 f3632e8d Christodoulos Psaltis
    $(this).addClass('selected');
407 72872ba2 Christodoulos Psaltis
    $(this).parent().parent().addClass('display');
408 72872ba2 Christodoulos Psaltis
    $(this).closest("div.machine").find('.action_error').hide();
409 72872ba2 Christodoulos Psaltis
    // if there is already a pending action for this server replace it
410 72872ba2 Christodoulos Psaltis
    for (i=0; i<pending_actions.length; i++) {
411 db269618 Christodoulos Psaltis
        if (pending_actions[i][1] == serverID) {
412 c5ffb0de Christodoulos Psaltis
            pending_actions[i][0] = destroy;
413 f3632e8d Christodoulos Psaltis
            found = true
414 f3632e8d Christodoulos Psaltis
        }
415 f3632e8d Christodoulos Psaltis
    }
416 72872ba2 Christodoulos Psaltis
    // no pending action for this server was found, so let's just add it to the list
417 72872ba2 Christodoulos Psaltis
    if (!found)
418 f3632e8d Christodoulos Psaltis
        pending_actions.push([destroy, serverID, serverName])
419 a70fb308 Christodoulos Psaltis
    update_confirmations();
420 f3632e8d Christodoulos Psaltis
    return false;
421 16e27b76 Markos Gogoulos
});
422 16e27b76 Markos Gogoulos

423 a70fb308 Christodoulos Psaltis
$("#machinesview-icon.standard div.confirm_single button.yes").live('click', function(){
424 15a09a33 Christodoulos Psaltis
    var serverID = $(this).closest("div.machine-container").attr("id");
425 15a09a33 Christodoulos Psaltis
    // if there is a pending action for this server execute it
426 15a09a33 Christodoulos Psaltis
    for (i=0; i<pending_actions.length; i++) {
427 267403ca Dimitris Moraitis
        if (pending_actions[i][1]==serverID){
428 a1a31201 Dimitris Moraitis
            action = pending_actions.splice(i,1)[0]; // extract action
429 198e13aa Christodoulos Psaltis
            // change the status text in cases where no api state exists
430 198e13aa Christodoulos Psaltis
            if (action[0] == start) {
431 15a09a33 Christodoulos Psaltis
                $(this).closest("div.machine").find('.status').text(TRANSITIONS['Starting']);
432 15a09a33 Christodoulos Psaltis
                $(this).closest("div.machine").find('.state').removeClass().addClass('state starting-state');
433 15a09a33 Christodoulos Psaltis
                $(this).closest("div.machine").find('.spinner').show();
434 198e13aa Christodoulos Psaltis
            } else if (action[0] == shutdown) {
435 15a09a33 Christodoulos Psaltis
                $(this).closest("div.machine").find('.status').text(TRANSITIONS['Shutting down']);
436 15a09a33 Christodoulos Psaltis
                $(this).closest("div.machine").find('.state').removeClass().addClass('state shutting-state');
437 15a09a33 Christodoulos Psaltis
                $(this).closest("div.machine").find('.spinner').show();
438 66edd851 Christodoulos Psaltis
            } else if (action[0] == reboot) {
439 15a09a33 Christodoulos Psaltis
                $(this).closest("div.machine").find('.status').text(TRANSITIONS['Rebooting']);
440 15a09a33 Christodoulos Psaltis
                $(this).closest("div.machine").find('.state').removeClass().addClass('state rebooting-state');
441 15a09a33 Christodoulos Psaltis
                $(this).closest("div.machine").find('.spinner').show();
442 66edd851 Christodoulos Psaltis
            }  else if (action[0] == destroy) {
443 15a09a33 Christodoulos Psaltis
                $(this).closest("div.machine").find('.status').text(TRANSITIONS['Destroying']);
444 15a09a33 Christodoulos Psaltis
                $(this).closest("div.machine").find('.state').removeClass().addClass('state destroying-state');
445 15a09a33 Christodoulos Psaltis
                $(this).closest("div.machine").find('.spinner').show();
446 f533f224 Vangelis Koukis
            }
447 198e13aa Christodoulos Psaltis
            action[0]([action[1]]); // execute action
448 267403ca Dimitris Moraitis
        }
449 267403ca Dimitris Moraitis
    }
450 267403ca Dimitris Moraitis
    $(this).parent().hide();
451 15a09a33 Christodoulos Psaltis
    $(this).closest('div.actions').find('a').removeClass('selected');
452 15a09a33 Christodoulos Psaltis
    $(this).closest("div.machine").children('.state').children('.spinner').show()
453 15a09a33 Christodoulos Psaltis
    $(this).closest("div.machine").children('div.actions').removeClass('display');
454 f533f224 Vangelis Koukis
    update_confirmations();
455 42f67a2a Dimitris Moraitis
    return false;
456 42f67a2a Dimitris Moraitis
});
457 42f67a2a Dimitris Moraitis

458 a70fb308 Christodoulos Psaltis
$("#machinesview-icon.standard div.confirm_single button.no").live('click', function(){
459 267403ca Dimitris Moraitis
    // remove the action from the pending list
460 72872ba2 Christodoulos Psaltis
    var serverID = $(this).closest("div.machine-container").attr("id");
461 f533f224 Vangelis Koukis

462 72872ba2 Christodoulos Psaltis
    $(this).closest('div.action-container').children('a').removeClass('selected');
463 72872ba2 Christodoulos Psaltis
    $(this).closest('div.actions').removeClass('display');
464 72872ba2 Christodoulos Psaltis
    for (i=0; i<pending_actions.length; i++) { // if there is a pending action for this server remove it
465 db269618 Christodoulos Psaltis
        if (pending_actions[i][1] == serverID) {
466 267403ca Dimitris Moraitis
            pending_actions.splice(i,1);
467 267403ca Dimitris Moraitis
        }
468 267403ca Dimitris Moraitis
    }
469 267403ca Dimitris Moraitis
    $(this).parent().hide();
470 f533f224 Vangelis Koukis
    update_confirmations();
471 267403ca Dimitris Moraitis
    return false;
472 267403ca Dimitris Moraitis
});
473 267403ca Dimitris Moraitis

474 f533f224 Vangelis Koukis
$("#machinesview-icon.standard div.action_error .details").live('click', function(){
475 695e1b21 Dimitris Moraitis
    // remove the action from the pending list
476 038383b1 Dimitris Moraitis
    ajax_error($(this).parent().children('.code').text(), undefined, $(this).parent().children('.action').text(), $(this).parent().children('.message').text());
477 695e1b21 Dimitris Moraitis
    $(this).parent().hide();
478 695e1b21 Dimitris Moraitis
});
479 695e1b21 Dimitris Moraitis

480 eae0a59a Dimitris Moraitis
// update the servers list
481 f533f224 Vangelis Koukis
function update_machines_view(data) {
482 f533f224 Vangelis Koukis
    /*
483 1a49199e Dimitris Moraitis
    Go through the servers in the input data. Update existing entries, add
484 eae0a59a Dimitris Moraitis
    new ones to the list
485 cf5c41d0 Christodoulos Psaltis
    */
486 f533f224 Vangelis Koukis
    $.each(data.servers.values, function(i,server) {
487 f533f224 Vangelis Koukis
        // get DOM element, if it exists
488 f533f224 Vangelis Koukis
        existing = $('#machinesview-icon.standard #' + server.id);
489 f533f224 Vangelis Koukis
        // get server OS, if it exists
490 f533f224 Vangelis Koukis
        if (!(server.metadata == undefined)) {
491 f533f224 Vangelis Koukis
            var server_image = os_icon(server.metadata);
492 f533f224 Vangelis Koukis
        } else {
493 f533f224 Vangelis Koukis
            var server_image = "unknown"
494 f533f224 Vangelis Koukis
        }
495 f533f224 Vangelis Koukis
        // get server status message, if it exists
496 f533f224 Vangelis Koukis
        var current_message = existing.find(".status").text();
497 87feccc4 Dimitris Moraitis
        // if multiple machines exist in the DOM, delete all but one
498 87feccc4 Dimitris Moraitis
        // defensive coding - that shouldn't happen normally
499 87feccc4 Dimitris Moraitis
        while (existing.length > 1){
500 eae0a59a Dimitris Moraitis
            existing.remove();
501 eae0a59a Dimitris Moraitis
        }
502 f533f224 Vangelis Koukis
        // if server already exists in DOM, update its values
503 1a49199e Dimitris Moraitis
        if (existing.length){
504 f533f224 Vangelis Koukis
            //  if the status is deleted
505 87feccc4 Dimitris Moraitis
            if (server.status == 'DELETED') {
506 f533f224 Vangelis Koukis
                // delete server entry from the DOM
507 f533f224 Vangelis Koukis
                log_server_status_change(existing, 'DELETED');
508 d1aa78ff Mike Muzurakis
                existing.remove();
509 f533f224 Vangelis Koukis
            }
510 f533f224 Vangelis Koukis
            // if the status has changed
511 f533f224 Vangelis Koukis
            else if ( current_message != STATUSES[server.status]) {
512 f533f224 Vangelis Koukis
                /*
513 f533f224 Vangelis Koukis
                Here there are 4 possibilities:
514 f533f224 Vangelis Koukis
                    1. From an active state to an inactive one
515 f533f224 Vangelis Koukis
                    2. From an inactive state to an active one
516 f533f224 Vangelis Koukis
                    3. From an active state to a different active one
517 f533f224 Vangelis Koukis
                    4. From an inactive state to a different inactive one
518 f533f224 Vangelis Koukis
                The last two (3, 4) can be dealt with the same way
519 f533f224 Vangelis Koukis
                */
520 f533f224 Vangelis Koukis
                if (ACTIVE_STATES.indexOf(current_message) >= 0 &&
521 f533f224 Vangelis Koukis
                    INACTIVE_STATES.indexOf(STATUSES[server.status]) >= 0) {
522 f533f224 Vangelis Koukis
                    // from an active state to an inactive one
523 f533f224 Vangelis Koukis
                    log_server_status_change(existing, server.status);
524 f533f224 Vangelis Koukis
                    moved = existing.clone().appendTo("#machinesview-icon.standard .terminated");
525 f533f224 Vangelis Koukis
                    moved.find("img.logo").attr("src",'static/icons/machines/medium/' + server_image + '-off.png');
526 1a49199e Dimitris Moraitis
                    existing.remove();
527 1a49199e Dimitris Moraitis
                    existing = moved;
528 f533f224 Vangelis Koukis
                    existing.find(".status").text(STATUSES[server.status]);
529 f533f224 Vangelis Koukis
                    existing.find('.spinner').hide();
530 bc80540d Mike Muzurakis
                    if ($("div.terminated").find("div.machine-container").length > 0) {
531 bc80540d Mike Muzurakis
                        $("div.terminated").show();
532 bc80540d Mike Muzurakis
                    }
533 f533f224 Vangelis Koukis
                    existing.find(' .wave').attr('src','static/icons/indicators/medium/wave.gif').show();
534 e5e5e4de Markos Gogoulos
                    existing.find('.state').removeClass().addClass('state terminated-state');
535 f533f224 Vangelis Koukis
                    setTimeout("$('#" + server.id +" .wave').attr('src','').hide()", 3000);
536 f533f224 Vangelis Koukis
                }
537 f533f224 Vangelis Koukis
                else if (INACTIVE_STATES.indexOf(current_message) >= 0 &&
538 f533f224 Vangelis Koukis
                         ACTIVE_STATES.indexOf(STATUSES[server.status]) >= 0) {
539 f533f224 Vangelis Koukis
                    // From an inactive state to an active one
540 f533f224 Vangelis Koukis
                    log_server_status_change(existing, server.status);
541 f533f224 Vangelis Koukis
                    moved = existing.clone().appendTo("#machinesview-icon.standard .running");
542 f533f224 Vangelis Koukis
                    moved.find("img.logo").attr('src','static/icons/machines/medium/' + server_image + '-on.png');
543 198e13aa Christodoulos Psaltis
                    existing.remove();
544 198e13aa Christodoulos Psaltis
                    existing = moved;
545 f533f224 Vangelis Koukis
                    existing.find(".status").text(STATUSES[server.status]);
546 f533f224 Vangelis Koukis
                    existing.find('.spinner').hide();
547 bc80540d Mike Muzurakis
                    if ($("div.terminated").find("div.machine-container").length == 0) {
548 bc80540d Mike Muzurakis
                        $("div.terminated").hide();
549 bc80540d Mike Muzurakis
                    }
550 f533f224 Vangelis Koukis
                    existing.find(' .wave').attr('src','static/icons/indicators/medium/wave.gif').show();
551 e30babe3 Markos Gogoulos
                    existing.find('.state').removeClass().addClass('state running-state');
552 f533f224 Vangelis Koukis
                    setTimeout("$('#" + server.id +" .wave').attr('src','').hide()", 3000);
553 f533f224 Vangelis Koukis
                }
554 f533f224 Vangelis Koukis
                else {
555 f533f224 Vangelis Koukis
                    // handling active to active or inactive to inactive changes
556 f533f224 Vangelis Koukis
                    if (TRANSITIONS[current_message] && TRANSITIONS[current_message] != 'Rebooting') {
557 f533f224 Vangelis Koukis
                        // don't do anything if it is still in transition
558 d8fce384 Mike Muzurakis
                    }
559 f533f224 Vangelis Koukis
                    else if ((TRANSITIONS[current_message] == 'Rebooting' && server.status == 'ACTIVE') ||
560 f533f224 Vangelis Koukis
                             (STATUSES['BUILD'] == current_message && server.status == 'ACTIVE')) {
561 f533f224 Vangelis Koukis
                        // if it has been rebooted or just created
562 f533f224 Vangelis Koukis
                        log_server_status_change(existing, server.status);
563 f533f224 Vangelis Koukis
                        existing.find(".status").text(STATUSES[server.status]);
564 f533f224 Vangelis Koukis
                        existing.find('.spinner').hide();
565 f533f224 Vangelis Koukis
                        existing.find(' .wave').attr('src','static/icons/indicators/medium/wave.gif').show();
566 e30babe3 Markos Gogoulos
                        existing.find('.state').removeClass().addClass('state running-state');
567 f533f224 Vangelis Koukis
                        setTimeout("$('#" + server.id +" .wave').attr('src','').hide()", 3000);
568 d8fce384 Mike Muzurakis
                    }
569 f533f224 Vangelis Koukis
                    else {
570 f533f224 Vangelis Koukis
                        // in any other case just change the status and ignore spinners/waves
571 f533f224 Vangelis Koukis
                        existing.find(".status").text(STATUSES[server.status]);
572 e30babe3 Markos Gogoulos
                        existing.appendTo("#machinesview-icon.standard .running");
573 e30babe3 Markos Gogoulos
                        existing.find('.state').removeClass().addClass('state running-state');
574 f533f224 Vangelis Koukis
                    }
575 f533f224 Vangelis Koukis
                }
576 d8fce384 Mike Muzurakis
            }
577 f533f224 Vangelis Koukis
            // find and display ips
578 f533f224 Vangelis Koukis
            var ips = get_public_ips(server);
579 f533f224 Vangelis Koukis
            existing.find("a.ip span.public").text(ips['ip4']);
580 f533f224 Vangelis Koukis
        }
581 f533f224 Vangelis Koukis
        // if it doesn't exist and the server is not DELETED, make a new entry
582 f533f224 Vangelis Koukis
        else if ( server.status != 'DELETED') {
583 f533f224 Vangelis Koukis
            // clone the proper template and put basic values in
584 f533f224 Vangelis Koukis
            var machine = $("#machinesview-icon.standard #machine-container-template").clone().attr("id", server.id).fadeIn("slow");
585 f533f224 Vangelis Koukis
            machine.find(".scrollable").scrollable({vertical: true});
586 b437ff91 Mike Muzurakis
            machine.find("div.name span.name").text(server.name.substring(0,50));
587 f533f224 Vangelis Koukis
            machine.find("span.imagetag").text(server_image);
588 f533f224 Vangelis Koukis
            machine.find(".status").text(STATUSES[server.status]);
589 f533f224 Vangelis Koukis
            // check server status to select where to append the new server to
590 f533f224 Vangelis Koukis
            if (ACTIVE_STATES.indexOf(STATUSES[server.status]) >= 0 ) {
591 f533f224 Vangelis Koukis
                // append to running
592 f533f224 Vangelis Koukis
                machine.find("img.logo").attr("src","static/icons/machines/medium/"+server_image+'-on.png');
593 f533f224 Vangelis Koukis
                machine.appendTo("#machinesview-icon.standard .running");
594 eae0a59a Dimitris Moraitis
            } else {
595 f533f224 Vangelis Koukis
                // append to terminated
596 f533f224 Vangelis Koukis
                machine.find("img.logo").attr("src","static/icons/machines/medium/"+server_image+'-off.png');
597 31e549f5 Christodoulos Psaltis
                machine.appendTo("#machinesview-icon.standard .terminated");
598 4449fac0 Markos Gogoulos
                if (server.status == "STOPPED") { //if server status us stopped is a different case than status unknown/error
599 4449fac0 Markos Gogoulos
                    machine.find('.state').removeClass().addClass('state terminated-state');
600 4449fac0 Markos Gogoulos
                } else {
601 4449fac0 Markos Gogoulos
                       machine.find('.state').removeClass().addClass('state error-state');
602 4449fac0 Markos Gogoulos
                }
603 eae0a59a Dimitris Moraitis
            }
604 f533f224 Vangelis Koukis
            //show spinner if server is still building or rebooting
605 be8c2a2d Markos Gogoulos
            if (server.status == 'BUILD') {
606 97a4b51d Christodoulos Psaltis
                machine.find('.spinner').show();
607 08c6e8da Markos Gogoulos
                machine.find('.state').removeClass().addClass('state build-state');
608 e64bfe94 Markos Gogoulos
            }
609 be8c2a2d Markos Gogoulos
            if (server.status == 'REBOOT') {
610 3cdf1ded Markos Gogoulos
                machine.find('.spinner').show();
611 3cdf1ded Markos Gogoulos
                machine.find('.state').removeClass().addClass('state rebooting-state');
612 3cdf1ded Markos Gogoulos
            }
613 f533f224 Vangelis Koukis
            // find and display flavor parameters
614 f533f224 Vangelis Koukis
            var flavor_params = get_flavor_params(server.flavorRef);
615 f533f224 Vangelis Koukis
            machine.find(".cpu-data").text(flavor_params['cpus']);
616 f533f224 Vangelis Koukis
            machine.find(".ram-data").text(flavor_params['ram']);
617 f533f224 Vangelis Koukis
            machine.find(".disk-data").text(flavor_params['disk']);
618 f533f224 Vangelis Koukis
            // find and display image parameters
619 f533f224 Vangelis Koukis
            var image_params = get_image_params(server.imageRef);
620 f533f224 Vangelis Koukis
            machine.find(".image-data").text(image_params['name'].substring(0,15));
621 f533f224 Vangelis Koukis
            machine.find(".image-size-data").text(image_params['size']);
622 f533f224 Vangelis Koukis
            // find and display ips
623 f533f224 Vangelis Koukis
            var ips = get_public_ips(server);
624 f533f224 Vangelis Koukis
            machine.find("a.ip span.public").text(ips['ip4']);
625 f533f224 Vangelis Koukis
        }
626 f533f224 Vangelis Koukis
        /*
627 f533f224 Vangelis Koukis
        Do some repeated actions that include:
628 f533f224 Vangelis Koukis
            1. Update actions
629 f533f224 Vangelis Koukis
            2. Metadata list updating
630 f533f224 Vangelis Koukis
        */
631 f533f224 Vangelis Koukis
        update_iconview_actions(server.id, server.status);
632 f533f224 Vangelis Koukis
        if (!(server.metadata == undefined)) {
633 f533f224 Vangelis Koukis
                list_metadata_keys(server.id, server.metadata.values);
634 f533f224 Vangelis Koukis
        }
635 eae0a59a Dimitris Moraitis
    });
636 f533f224 Vangelis Koukis
    /*
637 f533f224 Vangelis Koukis
    Do some standard stuff, repeated each time
638 f533f224 Vangelis Koukis
    FIXME: Can these be moved to a new function?
639 f533f224 Vangelis Koukis
    */
640 7a3f7b8f Mike Muzurakis
    $("div.running > div.large-spinner").hide();
641 f533f224 Vangelis Koukis
    // show all separators and hide the last one
642 f533f224 Vangelis Koukis
    $("#machinesview-icon.standard div.machine-container div.separator").show();
643 f533f224 Vangelis Koukis
    $("#machinesview-icon.standard div.machine-container:last-child").find("div.separator").hide();
644 f533f224 Vangelis Koukis
    // the terminated div shows only when terminated machines are available
645 f533f224 Vangelis Koukis
    if ($("#machinesview-icon.standard .terminated div.name").length > 0) {
646 f533f224 Vangelis Koukis
        $("div.terminated").fadeIn("slow");
647 e5b0ba20 Vangelis Koukis
    } else {
648 f533f224 Vangelis Koukis
        $("div.terminated").fadeOut("slow");
649 bde97369 Dimitris Moraitis
    }
650 834824c1 Mike Muzurakis
    // show message in case user has no servers!
651 f533f224 Vangelis Koukis
    if ($('#machinesview-icon .machine-container').length < 2) {
652 cebcd8ea Mike Muzurakis
        showWelcome();
653 834824c1 Mike Muzurakis
    } else {
654 cebcd8ea Mike Muzurakis
        hideWelcome();
655 bde97369 Dimitris Moraitis
    }
656 309d7ed2 Dimitris Moraitis
    // set confirm box position
657 98c2ee91 Mike Muzurakis
    if (window.innerHeight - CONFIRMBOX_OFFSET < $('#machinesview-icon.standard').height()) {
658 309d7ed2 Dimitris Moraitis
        $('.confirm_multiple').addClass('fixed');
659 98c2ee91 Mike Muzurakis
    } else {
660 309d7ed2 Dimitris Moraitis
        $('.confirm_multiple').removeClass('fixed');
661 98c2ee91 Mike Muzurakis
    }
662 eae0a59a Dimitris Moraitis
}
663 eae0a59a Dimitris Moraitis

664 bb253902 Dimitris Moraitis
// reposition multiple confirmation box on window resize
665 bb253902 Dimitris Moraitis
$(window).resize(function(){
666 bb253902 Dimitris Moraitis
    if (this.innerHeight - CONFIRMBOX_OFFSET < $('#machinesview-icon').height())
667 bb253902 Dimitris Moraitis
        $('.confirm_multiple').addClass('fixed');
668 bb253902 Dimitris Moraitis
    else
669 bb253902 Dimitris Moraitis
        $('.confirm_multiple').removeClass('fixed');
670 bb253902 Dimitris Moraitis
});
671 bb253902 Dimitris Moraitis

672 fb117e42 Mike Muzurakis
// update metadata list
673 f533f224 Vangelis Koukis
function list_metadata_keys(serverID, keys) {
674 fb117e42 Mike Muzurakis
    // empty the list if it already exists
675 f533f224 Vangelis Koukis
    $("#machinesview-icon.standard div.#" +serverID).find("div.items").empty();
676 fb117e42 Mike Muzurakis
    //start counter
677 fb117e42 Mike Muzurakis
    var i=0;
678 fb117e42 Mike Muzurakis
    // show values
679 f533f224 Vangelis Koukis
    for (var key in keys) {
680 f533f224 Vangelis Koukis
        $("#machinesview-icon.standard div.#" +serverID).find(".items").append("<div class='item'>" + key + "</div>");
681 f533f224 Vangelis Koukis
        i++;
682 fb117e42 Mike Muzurakis
    }
683 fb117e42 Mike Muzurakis
    //hide the metadata controls if we have less than 3 metadata
684 fb117e42 Mike Muzurakis
    if (i <= 3) {
685 f533f224 Vangelis Koukis
        $("#machinesview-icon.standard div.#" +serverID).find(".metadata-actions").hide();
686 fb117e42 Mike Muzurakis
    }
687 461ebec9 Mike Muzurakis
    //show the metadata controls if we have more than 3 metadata
688 461ebec9 Mike Muzurakis
    if (i > 3) {
689 f533f224 Vangelis Koukis
        $("#machinesview-icon.standard div.#" +serverID).find(".metadata-actions").show();
690 461ebec9 Mike Muzurakis
    }
691 f533f224 Vangelis Koukis
    $("#machinesview-icon.standard div.#" +serverID).find(".metadata-count").text(i);
692 fb117e42 Mike Muzurakis
}
693 fb117e42 Mike Muzurakis

694 a1a31201 Dimitris Moraitis
// indicate that the requested action was succesfully completed
695 a1a31201 Dimitris Moraitis
function display_success(serverID) {
696 6d0a36e5 Dimitris Moraitis

697 a1a31201 Dimitris Moraitis
}
698 a1a31201 Dimitris Moraitis

699 879748ec Markos Gogoulos
// indicate that the requested action was not completed
700 038383b1 Dimitris Moraitis
function display_failure(status, serverID, action, responseText) {
701 f533f224 Vangelis Koukis
    $('#machinesview-icon.standard #'+serverID+ ' .spinner').hide();
702 f533f224 Vangelis Koukis
    $('#machinesview-icon.standard #'+serverID+ ' .action_error .action').text(action);
703 f533f224 Vangelis Koukis
    $('#machinesview-icon.standard #'+serverID+ ' .action_error .code').text(status);
704 f533f224 Vangelis Koukis
    $('#machinesview-icon.standard #'+serverID+ ' .action_error .message').text(responseText);
705 f533f224 Vangelis Koukis
    $('#machinesview-icon.standard #'+serverID+ ' .action_error').show();
706 879748ec Markos Gogoulos
}
707 879748ec Markos Gogoulos

708 339712cb Christodoulos Psaltis
// basic functions executed on page load
709 7338f38d Christodoulos Psaltis
if ( flavors.length == 0 && images.length == 0 ) {
710 7338f38d Christodoulos Psaltis
    // configure flavors, this also calls update_vms(UPDATE_INTERVAL)
711 7338f38d Christodoulos Psaltis
    update_flavors();
712 7338f38d Christodoulos Psaltis
    // populate image list
713 f533f224 Vangelis Koukis
    update_images();
714 7338f38d Christodoulos Psaltis
} else if ( flavors.length == 0 && images.length != 0 ) {
715 7338f38d Christodoulos Psaltis
    // configure flavors, this also calls update_vms(UPDATE_INTERVAL)
716 7338f38d Christodoulos Psaltis
    update_flavors();
717 7338f38d Christodoulos Psaltis
} else if ( flavors.length != 0 && images.length == 0 ) {
718 7338f38d Christodoulos Psaltis
    // populate image list
719 f533f224 Vangelis Koukis
    update_images();
720 7338f38d Christodoulos Psaltis
    update_vms(UPDATE_INTERVAL);
721 66307c9e Christodoulos Psaltis
} else {
722 66307c9e Christodoulos Psaltis
    // start updating vm list
723 66307c9e Christodoulos Psaltis
    update_vms(UPDATE_INTERVAL);
724 146b6003 Dimitris Moraitis
}
725 a7b7536a Dimitris Moraitis

726 f533f224 Vangelis Koukis
// set the label of the multiple buttons
727 f533f224 Vangelis Koukis
$('.confirm_multiple button.yes').text('Confirm All');
728 f533f224 Vangelis Koukis
$('.confirm_multiple button.no').text('Cancel All');
729 9d32dca2 Mike Muzurakis

730 64fe1ae8 Mike Muzurakis
//IE specific fixes
731 1293d3ed Mike Muzurakis
if ($.browser.msie) {
732 4f0bd9ec Mike Muzurakis
    //IE fix for machine div hover
733 1293d3ed Mike Muzurakis
    $("div.machine").live("mouseenter", function () {
734 1293d3ed Mike Muzurakis
        $(this).css("background-color","#A1C8DB");
735 fe52d18f Christodoulos Psaltis
        $(this).find("div.info-header").css("background-color","#84b7d0");
736 fe52d18f Christodoulos Psaltis
        $(this).find("div.toggler div.down").css("background-color","#84b7d0");
737 146f242d Christodoulos Psaltis
        $(this).find(".actions a").css("visibility","visible");
738 1293d3ed Mike Muzurakis
    });
739 1293d3ed Mike Muzurakis
    $("div.machine").live("mouseleave", function () {
740 1293d3ed Mike Muzurakis
        $(this).css("background-color","transparent");
741 fe52d18f Christodoulos Psaltis
        $(this).find("div.info-header").css("background-color","#A1C8DB");
742 fe52d18f Christodoulos Psaltis
        $(this).find("div.toggler div.down").css("background-color","#A1C8DB");
743 146f242d Christodoulos Psaltis
        $(this).find(".actions a").css("visibility","hidden");
744 1293d3ed Mike Muzurakis
    });
745 4f0bd9ec Mike Muzurakis
    //IE fix for green arrow hover
746 4f0bd9ec Mike Muzurakis
    $("div.connect-arrow").live("mouseenter", function () {
747 4f0bd9ec Mike Muzurakis
        $(this).addClass("connect-arrow-ie");
748 4f0bd9ec Mike Muzurakis
    });
749 4f0bd9ec Mike Muzurakis
    $("div.connect-arrow").live("mouseleave", function () {
750 4f0bd9ec Mike Muzurakis
        $(this).removeClass("connect-arrow-ie");
751 4f0bd9ec Mike Muzurakis
    });
752 1293d3ed Mike Muzurakis
}
753 2ed4ced5 Markos Gogoulos
</script>