Statistics
| Branch: | Tag: | Revision:

root / ui / templates / machines.html @ 5593ab62

History | View | Annotate | Download (31.2 kB)

1 edda4d30 Markos Gogoulos
{% load i18n %}
2 edda4d30 Markos Gogoulos
3 e5b0ba20 Vangelis Koukis
<div id="machines" class="separator"></div>
4 e55b8703 Christodoulos Psaltis
5 d165dbb4 Christodoulos Psaltis
<!-- the create button -->
6 6902f72e clopy
<div id="createcontainer">
7 5ef04f85 Constantinos Venetsanopoulos
    <span id="createbody">{% trans "Start by creating a new Virtual Machine:" %}</span><br />
8 6902f72e clopy
    <a id="create" rel="#wizard" href="#">{% trans "Create New +" %}</a>
9 6902f72e clopy
</div>
10 d165dbb4 Christodoulos Psaltis
11 d165dbb4 Christodoulos Psaltis
<!-- changing between standard/list view -->
12 e55b8703 Christodoulos Psaltis
<div id="view-select">
13 aa1e0cab Markos Gogoulos
    <a id="standard" href="/machines/standard"></a>
14 aa1e0cab Markos Gogoulos
    <a id="list" href="/machines/list"></a>
15 aa1e0cab Markos Gogoulos
    <a id="single" href="#"></a>
16 e55b8703 Christodoulos Psaltis
</div>
17 e55b8703 Christodoulos Psaltis
18 ef38afe9 Christodoulos Psaltis
<div id="emptymachineslist">
19 ef38afe9 Christodoulos Psaltis
    <h1 id="welcomeheader">{% trans "Welcome to the ocean!" %}</h1>
20 ef38afe9 Christodoulos Psaltis
    <br />
21 ef38afe9 Christodoulos Psaltis
    <span class="welcomebody">{% trans "From this panel you will be able to manage your Virtual Machines (VMs). If you don't know what a VM is: take the " %}<a href="#">{% trans "tour" %}</a>.</span>
22 ef38afe9 Christodoulos Psaltis
    <br />
23 ef38afe9 Christodoulos Psaltis
    <br />
24 ef38afe9 Christodoulos Psaltis
    <span class="welcomebody">{% trans "The panel is currently empty, because you don't have any VMs yet. You can start by creating your new VM by clicking the blue button on the right. The wizard will guide you through the hole process." %}</span>
25 ef38afe9 Christodoulos Psaltis
    <br />
26 ef38afe9 Christodoulos Psaltis
    <br />
27 5ef04f85 Constantinos Venetsanopoulos
    <span class="welcomefooter">{% trans "For more information or help, click " %}<a href="#">{% trans "here" %}</a>.</span>
28 6902f72e clopy
</div>
29 6902f72e clopy
30 cc7c5902 Dimitris Moraitis
<!-- the form -->
31 cc7c5902 Dimitris Moraitis
<form action="#">
32 cc7c5902 Dimitris Moraitis
        <!-- scrollable root element -->
33 cc7c5902 Dimitris Moraitis
        <div class="modal" id="wizard">
34 cc7c5902 Dimitris Moraitis
                <!-- status bar -->
35 cc7c5902 Dimitris Moraitis
                <ul id="status">
36 ef38afe9 Christodoulos Psaltis
                        <li class="active">
37 ef38afe9 Christodoulos Psaltis
                <span class="headernumber" class="first">1</span>
38 ef38afe9 Christodoulos Psaltis
                <div class="headerbody first">{% trans "Image" %}</div>
39 ef38afe9 Christodoulos Psaltis
            </li>
40 ef38afe9 Christodoulos Psaltis
                        <li>
41 ef38afe9 Christodoulos Psaltis
                <span class="headernumber">2</span>
42 ef38afe9 Christodoulos Psaltis
                <div class="headerbody">{% trans "Flavor" %}</div>
43 ef38afe9 Christodoulos Psaltis
            </li>
44 ef38afe9 Christodoulos Psaltis
                        <li class="third">
45 ef38afe9 Christodoulos Psaltis
                <span class="headernumber">3</span>
46 ef38afe9 Christodoulos Psaltis
                <div class="headerbody">{% trans "Name" %}</div>
47 ef38afe9 Christodoulos Psaltis
            </li>
48 cc7c5902 Dimitris Moraitis
                </ul>
49 cc7c5902 Dimitris Moraitis
                <!-- scrollable items -->
50 cc7c5902 Dimitris Moraitis
                <div class="items">
51 cc7c5902 Dimitris Moraitis
                        <!-- pages -->
52 cc7c5902 Dimitris Moraitis
                        <div class="page">
53 cf0eb36b Markos Gogoulos
                <h2>{% trans "Select an OS" %}</h2>
54 94adeabb Mike Muzurakis
                <hr class="topruler" />
55 cc7c5902 Dimitris Moraitis
                <ul class="tabs">
56 94adeabb Mike Muzurakis
                    <li><a href="#">{% trans "system images" %}</a></li>
57 cf93419a Mike Muzurakis
                    <li><a href="#">{% trans "custom images" %}</a></li>
58 cc7c5902 Dimitris Moraitis
                </ul>
59 89976b6c Christodoulos Psaltis
                <div class="panes">
60 ec06b07c Dimitris Moraitis
                            <li id="image-template" style="display:none">
61 ec06b07c Dimitris Moraitis
                                    <label for="image.id"> 
62 9b1b6f3a Christodoulos Psaltis
                            <a>
63 94adeabb Mike Muzurakis
                                <div class="image-container">
64 94adeabb Mike Muzurakis
                                    <div class="image">
65 3091ead5 Mike Muzurakis
                                        <input class="radio" type="radio" name="image-id" id="image-id" />
66 94adeabb Mike Muzurakis
                                        <img src="" class="image-logo"/>
67 94adeabb Mike Muzurakis
                                        <strong class="image-title">image.title</strong>
68 94adeabb Mike Muzurakis
                                        <br />
69 94adeabb Mike Muzurakis
                                        <span class="description">image.description</span> 
70 cf93419a Mike Muzurakis
                                        <span id="size" class="size">?? MB</span><span class="size"> MB</span>                         
71 94adeabb Mike Muzurakis
                                    </div>
72 94adeabb Mike Muzurakis
                                </div>  
73 9b1b6f3a Christodoulos Psaltis
                            </a>
74 ec06b07c Dimitris Moraitis
                                    </label>
75 ec06b07c Dimitris Moraitis
                            </li>
76 ec06b07c Dimitris Moraitis
                    <ul class="pane" id="standard-images">
77 cc7c5902 Dimitris Moraitis
                                            <!-- standard images -->
78 cc7c5902 Dimitris Moraitis
                                    </ul>
79 ec06b07c Dimitris Moraitis
                    <ul class="pane" id="custom-images">
80 cc7c5902 Dimitris Moraitis
                                            <!-- custom images -->
81 cc7c5902 Dimitris Moraitis
                    </ul>
82 cc7c5902 Dimitris Moraitis
                </div>
83 94adeabb Mike Muzurakis
                <hr class="bottomruler" />
84 cf0eb36b Markos Gogoulos
                                <button type="button" class="prev" id="cancel">{% trans "Cancel" %}</button>
85 94adeabb Mike Muzurakis
                                <button type="button" class="next right">{% trans "Next" %}</button>
86 cc7c5902 Dimitris Moraitis
            </div>
87 cc7c5902 Dimitris Moraitis
                        <div class="page">
88 94adeabb Mike Muzurakis
                                <h2>{% trans "Select CPUs, RAM and Disk Size" %}</h2>
89 94adeabb Mike Muzurakis
                <hr class="topruler" />
90 cc7c5902 Dimitris Moraitis
                <ul>
91 94adeabb Mike Muzurakis
                    <li id="machinetype">
92 c376783b Markos Gogoulos
                        <div class="machine-type">
93 94adeabb Mike Muzurakis
                            <label for="small" id="small">
94 c376783b Markos Gogoulos
                                <input type="radio" id="small" name="machine-type" value="small" checked="true" />
95 afa2ebd2 Mike Muzurakis
                                <span class="typebody" id="small-body">{% trans "small" %}</span>
96 cc7c5902 Dimitris Moraitis
                            </label>
97 cc7c5902 Dimitris Moraitis
                        </div>
98 c376783b Markos Gogoulos
                        <div class="machine-type">      
99 94adeabb Mike Muzurakis
                            <label for="medium" id="medium">
100 c376783b Markos Gogoulos
                                <input type="radio" id="medium" name="machine-type" value="medium" />                  
101 afa2ebd2 Mike Muzurakis
                                <span class="typebody" id="medium-body">{% trans "medium" %}</span>
102 cc7c5902 Dimitris Moraitis
                            </label>
103 cc7c5902 Dimitris Moraitis
                        </div>
104 c376783b Markos Gogoulos
                        <div class="machine-type">
105 94adeabb Mike Muzurakis
                            <label for="large" id="large">
106 c376783b Markos Gogoulos
                                <input type="radio" id="large" name="machine-type" value="large" />
107 afa2ebd2 Mike Muzurakis
                                <span class="typebody" id="large-body">{% trans "large" %}</span>
108 cc7c5902 Dimitris Moraitis
                            </label>
109 cc7c5902 Dimitris Moraitis
                        </div>
110 c376783b Markos Gogoulos
                        <div class="machine-type">
111 94adeabb Mike Muzurakis
                            <label for="custom" id="custom">
112 c376783b Markos Gogoulos
                                <input type="radio" name="machine-type" id="custom" value="large" />
113 afa2ebd2 Mike Muzurakis
                                <span class="typebody" id="custom-body">{% trans "custom" %}</span>
114 cc7c5902 Dimitris Moraitis
                            </label>
115 cc7c5902 Dimitris Moraitis
                        </div>
116 cc7c5902 Dimitris Moraitis
                    </li>
117 94adeabb Mike Muzurakis
                    <div id="page2-container">
118 94adeabb Mike Muzurakis
                        <li class="slider-container">
119 94adeabb Mike Muzurakis
                                        <label><strong class="sliders">CPUs</strong></label>
120 94adeabb Mike Muzurakis
                            <input type="range" id="cpu" style="display:none" />
121 94adeabb Mike Muzurakis
                            <input type="text" class="range" id="cpu-indicator" />
122 94adeabb Mike Muzurakis
                                        <span class="units">cores</span>
123 94adeabb Mike Muzurakis
                        </li>
124 94adeabb Mike Muzurakis
                        <li class="slider-container">
125 94adeabb Mike Muzurakis
                                        <label><strong class="sliders">RAM</strong></label>
126 94adeabb Mike Muzurakis
                            <input type="range" id="ram" style="display:none" />
127 94adeabb Mike Muzurakis
                            <input type="text" class="range" id="ram-indicator" />
128 94adeabb Mike Muzurakis
                                        <span class="units">MB</span>
129 94adeabb Mike Muzurakis
                        </li>
130 94adeabb Mike Muzurakis
                        <li class="slider-container">
131 94adeabb Mike Muzurakis
                                    <label><strong class="sliders">Size</strong></label>
132 94adeabb Mike Muzurakis
                            <input type="range" id="storage" style="display:none" />
133 94adeabb Mike Muzurakis
                            <input type="text" class="range" id="storage-indicator" />
134 94adeabb Mike Muzurakis
                                        <span class="units">GB</span>
135 94adeabb Mike Muzurakis
                        </li>
136 94adeabb Mike Muzurakis
                        <li>
137 94adeabb Mike Muzurakis
                            <div class="cost">
138 99721d83 Mike Muzurakis
                                <span> {% trans "Your wallet:" %} 10,000 Credits </span> | <span>{% trans "This setup will cost you:" %}<input type="text" id="credits-indicator" value="20" class="range" disabled="disabled" /> {% trans "C/hour" %}</span>
139 94adeabb Mike Muzurakis
                            </div>
140 94adeabb Mike Muzurakis
                        </li>
141 94adeabb Mike Muzurakis
                    </div>
142 cc7c5902 Dimitris Moraitis
                </ul>
143 94adeabb Mike Muzurakis
                <hr class="bottomruler" />
144 94adeabb Mike Muzurakis
                                <button type="button" class="prev">{% trans "Back" %}</button>
145 94adeabb Mike Muzurakis
                                <button type="button" class="next right">{% trans "Next" %}</button>
146 cc7c5902 Dimitris Moraitis
            </div>
147 cc7c5902 Dimitris Moraitis
                        <div class="page">
148 cf0eb36b Markos Gogoulos
                                <h2>{% trans "Confirm your settings" %}</h2>
149 94adeabb Mike Muzurakis
                <hr class="topruler" />
150 94adeabb Mike Muzurakis
                <ul id="page3-container">
151 afa2ebd2 Mike Muzurakis
                    <li class="required" id="label-name">
152 cc7c5902 Dimitris Moraitis
                        <label>
153 94adeabb Mike Muzurakis
                            <strong>Name:</strong>
154 cae67343 Mike Muzurakis
                            <input type="text" class="text" name="machine_name" id="name" value="My Ubuntu 10.04 x86_64 server"/>
155 cc7c5902 Dimitris Moraitis
                        </label>
156 cc7c5902 Dimitris Moraitis
                    </li>
157 cc7c5902 Dimitris Moraitis
                    <li>
158 94adeabb Mike Muzurakis
                        <span>{% trans "Image:" %}</span> <span id="machine_image-label">Ubuntu 10.04 x86_64 server</span>
159 cc7c5902 Dimitris Moraitis
                    </li>
160 cc7c5902 Dimitris Moraitis
                    <li>
161 94adeabb Mike Muzurakis
                        <span>{% trans "CPUs:" %}</span> <span id="machine_cpu-label">2</span> <span>{% trans "cores" %}</span>
162 cc7c5902 Dimitris Moraitis
                    </li>
163 cc7c5902 Dimitris Moraitis
                    <li>
164 94adeabb Mike Muzurakis
                        <span>{% trans "RAM:" %}</span> <span id="machine_ram-label">1024</span><span>MB</span>
165 cc7c5902 Dimitris Moraitis
                    </li>
166 cc7c5902 Dimitris Moraitis
                    <li>
167 94adeabb Mike Muzurakis
                        <span>{% trans "System Disk:" %}</span> <span id="machine_storage-label">10</span><span>GB</span>
168 cc7c5902 Dimitris Moraitis
                    </li>
169 cc7c5902 Dimitris Moraitis
                    <li>
170 94adeabb Mike Muzurakis
                        <span>{% trans "Cost per Hour:" %}</span> <span>40 {% trans "credits" %}</span>
171 cc7c5902 Dimitris Moraitis
                    </li>
172 cc7c5902 Dimitris Moraitis
                    <li>
173 94adeabb Mike Muzurakis
                        <span>{% trans "Credits in Wallet:" %}</span> <span>10.000</span>
174 cc7c5902 Dimitris Moraitis
                    </li>
175 cc7c5902 Dimitris Moraitis
                </ul>
176 94adeabb Mike Muzurakis
                <hr class="bottomruler" />
177 94adeabb Mike Muzurakis
                                <button type="button" class="prev">{% trans "Back" %}</button>
178 cf0eb36b Markos Gogoulos
                                <button type="button" class="next right" id="start">{% trans "Create VM" %}</button>        
179 cc7c5902 Dimitris Moraitis
            </div>
180 cc7c5902 Dimitris Moraitis
                </div>
181 cc7c5902 Dimitris Moraitis
        </div>
182 cc7c5902 Dimitris Moraitis
</form>
183 cc7c5902 Dimitris Moraitis
184 339712cb Christodoulos Psaltis
<!-- base notification for error/success reporting -->
185 f58ec963 Christodoulos Psaltis
<a id="notification" rel="#error-success" href="#"></a>
186 d165dbb4 Christodoulos Psaltis
187 f58ec963 Christodoulos Psaltis
<div class="modal" id="error-success">
188 f58ec963 Christodoulos Psaltis
    <h3>{% trans "Error!/Success!" %}</h3>
189 038383b1 Dimitris Moraitis
    <div><p>{% trans "More details about the result"%}</p></div>
190 cc7c5902 Dimitris Moraitis
</div>
191 cc7c5902 Dimitris Moraitis
192 71eade6b Christodoulos Psaltis
<!-- metadata scrollable -->
193 71eade6b Christodoulos Psaltis
<div>
194 71eade6b Christodoulos Psaltis
    <!-- root element for scrollable -->
195 71eade6b Christodoulos Psaltis
    <div id="metadata-wizard">
196 71eade6b Christodoulos Psaltis
197 71eade6b Christodoulos Psaltis
        <!-- root element for the items -->
198 71eade6b Christodoulos Psaltis
        <div class="items">
199 71eade6b Christodoulos Psaltis
            <div class="page" id="edit-dialog">
200 71eade6b Christodoulos Psaltis
                <div class='container'>
201 71eade6b Christodoulos Psaltis
                    <h3>
202 71eade6b Christodoulos Psaltis
                        <label>{% trans "Tags for machine:" %}</label>
203 71eade6b Christodoulos Psaltis
                        <span>Server name</span>
204 71eade6b Christodoulos Psaltis
                        <p style='display:none;'>hidden server id</p>
205 71eade6b Christodoulos Psaltis
                    </h3>
206 71eade6b Christodoulos Psaltis
                    <hr class="topruler" />
207 71eade6b Christodoulos Psaltis
                    <hr class="fatruler" />
208 71eade6b Christodoulos Psaltis
                    <div class="content">
209 71eade6b Christodoulos Psaltis
                        <ul class="meta-template" style="display:none">
210 71eade6b Christodoulos Psaltis
                            <li>
211 71eade6b Christodoulos Psaltis
                                <label>{% trans "Key" %}</label>
212 71eade6b Christodoulos Psaltis
                                <button type="button" class="remove">{% trans "remove x" %}</button>
213 71eade6b Christodoulos Psaltis
                                <hr class="meta-separator">
214 71eade6b Christodoulos Psaltis
                                <p>{% trans "Value" %}</p>
215 71eade6b Christodoulos Psaltis
                                <button type="button" class="edit">{% trans "edit" %}</button>
216 3a68225a Christodoulos Psaltis
                                <button type="button" class="cancel">{% trans "cancel" %}</button>
217 3a68225a Christodoulos Psaltis
                                <button type="button" class="save">{% trans "save" %}</button>
218 71eade6b Christodoulos Psaltis
                            </li>
219 71eade6b Christodoulos Psaltis
                        </ul>
220 71eade6b Christodoulos Psaltis
                        <ul class="meta-list">
221 71eade6b Christodoulos Psaltis
                        </ul>
222 71eade6b Christodoulos Psaltis
                    </div>
223 71eade6b Christodoulos Psaltis
                </div>
224 5110d813 Christodoulos Psaltis
                <button type="button" class="close">{% trans "Close" %}</button>
225 71eade6b Christodoulos Psaltis
                <button type="button" class="create next browse right">{% trans "Create New+" %}</button>
226 71eade6b Christodoulos Psaltis
                <div class="bottomruler"></div>
227 71eade6b Christodoulos Psaltis
            </div>
228 71eade6b Christodoulos Psaltis
            <div class="page" id="add-dialog">
229 71eade6b Christodoulos Psaltis
                <div class='container'>
230 71eade6b Christodoulos Psaltis
                    <h3>
231 71eade6b Christodoulos Psaltis
                        <label>{% trans "Tags for machine:" %}</label>
232 71eade6b Christodoulos Psaltis
                        <span>Server name</span>
233 71eade6b Christodoulos Psaltis
                        <p style='display:none;'>hidden server id</p>
234 71eade6b Christodoulos Psaltis
                    </h3>
235 71eade6b Christodoulos Psaltis
                    <hr class="topruler" />
236 71eade6b Christodoulos Psaltis
                    <hr class="fatruler" />
237 71eade6b Christodoulos Psaltis
                    <div class="content">
238 71eade6b Christodoulos Psaltis
                        <label class="meta-key">{% trans "Key:" %}</label>
239 71eade6b Christodoulos Psaltis
                        <input type="text" maxlength="15" class="key" value="{% trans 'max 15 characters' %}"/>
240 71eade6b Christodoulos Psaltis
                        <hr class="meta-separator">
241 71eade6b Christodoulos Psaltis
                        <label class="meta-value">{% trans "Value:" %}</label>
242 71eade6b Christodoulos Psaltis
                        <textarea class="value">{% trans "max 150 characters" %}</textarea>
243 71eade6b Christodoulos Psaltis
                    </div>
244 71eade6b Christodoulos Psaltis
                </div>
245 71eade6b Christodoulos Psaltis
                <button type="button" class="cancel prev browse left">{% trans "Cancel" %}</button>
246 71eade6b Christodoulos Psaltis
                <button type="button" class="save">{% trans "Save" %}</button>
247 71eade6b Christodoulos Psaltis
                <div class="bottomruler"></div>
248 71eade6b Christodoulos Psaltis
            </div>
249 a7ccb6f9 Christodoulos Psaltis
        </div>
250 339712cb Christodoulos Psaltis
    </div>
251 339712cb Christodoulos Psaltis
</div>
252 339712cb Christodoulos Psaltis
253 71eade6b Christodoulos Psaltis
<a id="metadata-scrollable" href="#" rel="#metadata-wizard"></a>
254 d165dbb4 Christodoulos Psaltis
255 42f67a2a Dimitris Moraitis
<div id="machinesview"></div>
256 42f67a2a Dimitris Moraitis
257 267403ca Dimitris Moraitis
<div class="confirm_multiple">
258 3d286f84 Dimitris Moraitis
    <p>{% trans "Your actions will affect" %} <span class="actionLen">XX</span> {% trans "machines" %}</p>
259 2cd96cc7 Vangelis Koukis
    <button class="yes">{% trans "Confirm All" %}</button>
260 2cd96cc7 Vangelis Koukis
        <button class="no">{% trans "Cancel All" %}</button>
261 d725fb12 Christodoulos Psaltis
</div>
262 31343277 Christodoulos Psaltis
263 5b147126 Christodoulos Psaltis
<div id="machines" class="separator"></div>
264 5b147126 Christodoulos Psaltis
265 cc7c5902 Dimitris Moraitis
<script>
266 f1d5a1b8 Mike Muzurakis

267 afa2ebd2 Mike Muzurakis
//add hover to labels
268 afa2ebd2 Mike Muzurakis
$('span.typebody').mouseover(function() {
269 cf93419a Mike Muzurakis
    $(this).addClass('typehover');
270 afa2ebd2 Mike Muzurakis
});
271 afa2ebd2 Mike Muzurakis
$('span.typebody').mouseout(function() {
272 cf93419a Mike Muzurakis
    $(this).removeClass('typehover');
273 afa2ebd2 Mike Muzurakis
});
274 afa2ebd2 Mike Muzurakis

275 a64e74f0 Markos Gogoulos
// return value from metadata key "OS", if it exists
276 a64e74f0 Markos Gogoulos
function os_icon(metadata) {
277 a64e74f0 Markos Gogoulos
    if (!metadata) {
278 a64e74f0 Markos Gogoulos
        return 'unknown';
279 a64e74f0 Markos Gogoulos
    }
280 a64e74f0 Markos Gogoulos

281 a64e74f0 Markos Gogoulos
    if (metadata.values.OS == undefined || metadata.values.OS == '') {
282 a64e74f0 Markos Gogoulos
        return 'unknown';
283 a64e74f0 Markos Gogoulos
    } else {
284 d4e4f434 Mike Muzurakis
        if (UrlExists("static/machines/" + metadata.values.OS + '-on.png')) {
285 d4e4f434 Mike Muzurakis
            return metadata.values.OS;
286 d4e4f434 Mike Muzurakis
        } else {
287 d4e4f434 Mike Muzurakis
            return 'unknown';
288 d4e4f434 Mike Muzurakis
        }
289 a64e74f0 Markos Gogoulos
    }
290 a64e74f0 Markos Gogoulos
} 
291 a64e74f0 Markos Gogoulos

292 d4e4f434 Mike Muzurakis
//helper function to check file existance
293 d4e4f434 Mike Muzurakis
function UrlExists(url)
294 d4e4f434 Mike Muzurakis
{
295 d4e4f434 Mike Muzurakis
    var http = new XMLHttpRequest();
296 d4e4f434 Mike Muzurakis
    http.open('HEAD', url, false);
297 d4e4f434 Mike Muzurakis
    http.send();
298 d4e4f434 Mike Muzurakis
    return http.status!=404;
299 d4e4f434 Mike Muzurakis
}
300 d4e4f434 Mike Muzurakis

301 fb66080c Dimitris Moraitis
// switch to list view
302 9b1b6f3a Christodoulos Psaltis
$("a#list").click(function(){
303 9b1b6f3a Christodoulos Psaltis
    list_view(); 
304 9b1b6f3a Christodoulos Psaltis
    return false;
305 9b1b6f3a Christodoulos Psaltis
});
306 fb66080c Dimitris Moraitis

307 9b1b6f3a Christodoulos Psaltis
// switch to standard view
308 9b1b6f3a Christodoulos Psaltis
$("a#standard").click(function(){
309 9b1b6f3a Christodoulos Psaltis
    standard_view();
310 9b1b6f3a Christodoulos Psaltis
    return false;
311 9b1b6f3a Christodoulos Psaltis
});
312 38e2c5ed Christodoulos Psaltis

313 bd8b1d60 Christodoulos Psaltis
// launch VM creation wizard
314 8fd5c3a5 Christodoulos Psaltis
$("a#create").click(function(){
315 146b6003 Dimitris Moraitis
    // launch wizard only if images and flavors are found
316 146b6003 Dimitris Moraitis
    if (images.length > 0  && flavors.length > 0) {
317 a3e418b1 Markos Gogoulos
        $("#wizard").scrollable().begin();
318 a3e418b1 Markos Gogoulos
        $("#wizard").show();
319 146b6003 Dimitris Moraitis
        $('a#create').data('overlay').load()   
320 146b6003 Dimitris Moraitis
    } else if (images.length == 0 ) {
321 146b6003 Dimitris Moraitis
        ajax_error('NO_IMAGES');
322 146b6003 Dimitris Moraitis
        return false;   
323 146b6003 Dimitris Moraitis
    } else if (flavors.length == 0) {
324 146b6003 Dimitris Moraitis
        ajax_error('NO_FLAVORS');
325 146b6003 Dimitris Moraitis
        return false;
326 146b6003 Dimitris Moraitis
    }
327 ec06b07c Dimitris Moraitis
});
328 ec06b07c Dimitris Moraitis

329 f124656b Christodoulos Psaltis
// create wizard overlay
330 f124656b Christodoulos Psaltis
$(function() { 
331 4e5d5e70 Christodoulos Psaltis
    $("a#create").overlay({
332 f124656b Christodoulos Psaltis
        mask: '#000', 
333 f124656b Christodoulos Psaltis
        effect: 'default', 
334 f124656b Christodoulos Psaltis
        top: '5%', 
335 f124656b Christodoulos Psaltis
        oneInstance: false,
336 f974b570 Dimitris Moraitis
        closeOnClick: false
337 f124656b Christodoulos Psaltis
    });
338 f124656b Christodoulos Psaltis
});
339 f124656b Christodoulos Psaltis

340 bd8b1d60 Christodoulos Psaltis
// wizard
341 71eade6b Christodoulos Psaltis
$(function() {    
342 bd8b1d60 Christodoulos Psaltis
    var root = $("#wizard").scrollable();
343 bd8b1d60 Christodoulos Psaltis
    var api = root.scrollable();
344 bd8b1d60 Christodoulos Psaltis
    // rangeinput with default configuration
345 bd8b1d60 Christodoulos Psaltis
    // validation logic is done inside the onBeforeSeek callback
346 bd8b1d60 Christodoulos Psaltis
    api.onBeforeSeek(function(event, i) {
347 bd8b1d60 Christodoulos Psaltis
            // we are going 1 step backwards so no need for validation
348 bd8b1d60 Christodoulos Psaltis
            if (api.getIndex() < i) {
349 bd8b1d60 Christodoulos Psaltis
             // 1. get current page
350 bd8b1d60 Christodoulos Psaltis
                     var page = root.find(".page").eq(api.getIndex()),
351 bd8b1d60 Christodoulos Psaltis
                         // 2. .. and all required fields inside the page
352 bd8b1d60 Christodoulos Psaltis
                         inputs = page.find(".required :input").removeClass("error"),
353 bd8b1d60 Christodoulos Psaltis
                         // 3. .. which are empty
354 bd8b1d60 Christodoulos Psaltis
                         empty = inputs.filter(function() {
355 bd8b1d60 Christodoulos Psaltis
                                return $(this).val().replace(/\s*/g, '') == '';
356 bd8b1d60 Christodoulos Psaltis
                         });
357 bd8b1d60 Christodoulos Psaltis
                     // if there are empty fields, then
358 bd8b1d60 Christodoulos Psaltis
                    if (empty.length) {
359 bd8b1d60 Christodoulos Psaltis
                            // add a CSS class name "error" for empty & required fields
360 bd8b1d60 Christodoulos Psaltis
                            empty.addClass("error");
361 bd8b1d60 Christodoulos Psaltis
                            // cancel seeking of the scrollable by returning false
362 bd8b1d60 Christodoulos Psaltis
                            return false;
363 bd8b1d60 Christodoulos Psaltis
                    // everything is good
364 bd8b1d60 Christodoulos Psaltis
                    } 
365 29f0a240 Mike Muzurakis
            } 
366 71642965 Dimitris Moraitis
        // update confirm step
367 20fae095 Christodoulos Psaltis
        if (api.getIndex()==0) {
368 20fae095 Christodoulos Psaltis
            var image = $("input[type=radio][name=image-id]:checked");
369 b335768e Markos Gogoulos
            var imageRef = image.length ? image[0].id : false
370 b335768e Markos Gogoulos
            if (imageRef) {
371 b335768e Markos Gogoulos
                var imageName = $("label[for=" + imageRef + "] .image-title").text();
372 20fae095 Christodoulos Psaltis
                $("#machine_image-label")[0].textContent = imageName;
373 20fae095 Christodoulos Psaltis
                $("input[type=text][name=machine_name]")[0].value = "My " + imageName + " server";
374 20fae095 Christodoulos Psaltis
            }
375 42f67a2a Dimitris Moraitis
        } else if (api.getIndex()==1) {
376 20fae095 Christodoulos Psaltis
            $("#machine_cpu-label")[0].textContent = $("#cpu-indicator")[0].value;
377 20fae095 Christodoulos Psaltis
            $("#machine_ram-label")[0].textContent = $("#ram-indicator")[0].value;
378 20fae095 Christodoulos Psaltis
            $("#machine_storage-label")[0].textContent = $("#storage-indicator")[0].value;
379 29f0a240 Mike Muzurakis
        }   
380 bd8b1d60 Christodoulos Psaltis
    });
381 9066781c Mike Muzurakis
    api.onSeek(function(event, i) {
382 9066781c Mike Muzurakis
            // update status bar
383 9066781c Mike Muzurakis
            $("#status li").removeClass("active").eq(i).addClass("active");
384 9066781c Mike Muzurakis
    });
385 bd8b1d60 Christodoulos Psaltis
    // if tab is pressed on the next button seek to next page
386 f87e79a4 Mike Muzurakis
    $(root).live('keydown', function (e) {
387 f87e79a4 Mike Muzurakis
       if ( e.keyCode == 9 ){
388 f87e79a4 Mike Muzurakis
           if(e.preventDefault) {
389 f87e79a4 Mike Muzurakis
               e.preventDefault();
390 f87e79a4 Mike Muzurakis
           }
391 29f0a240 Mike Muzurakis
           api.next();
392 f87e79a4 Mike Muzurakis
        }
393 bd8b1d60 Christodoulos Psaltis
    });
394 88bdf273 Mike Muzurakis
    //submit wizard by pressing enter on the name textbox
395 cae67343 Mike Muzurakis
    $("#name").keypress(function (e) {
396 cae67343 Mike Muzurakis
                if ((e.which && e.which == 13) || (e.keyCode && e.keyCode == 13)) {
397 cae67343 Mike Muzurakis
                        $('#start').click();
398 cae67343 Mike Muzurakis
                        return false;
399 cae67343 Mike Muzurakis
                } else {
400 cae67343 Mike Muzurakis
                        return true;
401 cae67343 Mike Muzurakis
                }
402 cae67343 Mike Muzurakis
    });
403 71642965 Dimitris Moraitis
});
404 cc7c5902 Dimitris Moraitis

405 bd8b1d60 Christodoulos Psaltis
// disable sliders in flavor selection
406 cc7c5902 Dimitris Moraitis
function disableSliders() {
407 cc7c5902 Dimitris Moraitis
    $("#cpu").attr('disabled',true);
408 cc7c5902 Dimitris Moraitis
    $("#ram").attr('disabled',true);
409 cc7c5902 Dimitris Moraitis
    $("#storage").attr('disabled',true);
410 cc7c5902 Dimitris Moraitis
}
411 cc7c5902 Dimitris Moraitis

412 afa2ebd2 Mike Muzurakis
//update radio button when clicking on text
413 afa2ebd2 Mike Muzurakis
$("#small-body").live('click' ,function() { 
414 afa2ebd2 Mike Muzurakis
    $(this).parent().find("#small").click();
415 afa2ebd2 Mike Muzurakis
});
416 afa2ebd2 Mike Muzurakis
$("#medium-body").live('click' ,function() { 
417 afa2ebd2 Mike Muzurakis
    $(this).parent().find("#medium").click();
418 afa2ebd2 Mike Muzurakis
});
419 afa2ebd2 Mike Muzurakis
$("#large-body").live('click' ,function() { 
420 afa2ebd2 Mike Muzurakis
    $(this).parent().find("#large").click();
421 afa2ebd2 Mike Muzurakis
});
422 afa2ebd2 Mike Muzurakis
$("#custom-body").live('click' ,function() { 
423 afa2ebd2 Mike Muzurakis
    $(this).parent().find("#custom").click();
424 afa2ebd2 Mike Muzurakis
});
425 afa2ebd2 Mike Muzurakis

426 afa2ebd2 Mike Muzurakis
//select image div on radio button select
427 afa2ebd2 Mike Muzurakis
$('.radio').live('click' ,function() {           
428 afa2ebd2 Mike Muzurakis
    $(this).parents("div").find(".image").removeClass('selecteddiv');
429 afa2ebd2 Mike Muzurakis
    if($(this).is(':checked'))  {
430 afa2ebd2 Mike Muzurakis
        $(this).parent().addClass('selecteddiv');
431 afa2ebd2 Mike Muzurakis
    }
432 9066781c Mike Muzurakis
    
433 afa2ebd2 Mike Muzurakis
});
434 afa2ebd2 Mike Muzurakis

435 695e1b21 Dimitris Moraitis
// validate cpu input box
436 695e1b21 Dimitris Moraitis
$("#cpu-indicator").live('change',function(){
437 695e1b21 Dimitris Moraitis
    var v = Number(this.value);
438 695e1b21 Dimitris Moraitis
    var i = cpus.indexOf(v);
439 695e1b21 Dimitris Moraitis
    if (isNaN(v)) {
440 695e1b21 Dimitris Moraitis
        $(this).value = cpus[0];
441 695e1b21 Dimitris Moraitis
        $("#cpu").data('rangeinput').setValue(0);
442 695e1b21 Dimitris Moraitis
    } else if (i == -1) {
443 695e1b21 Dimitris Moraitis
        for (var j=0; j < cpus.length; j++)
444 695e1b21 Dimitris Moraitis
            if (v<cpus[j])
445 695e1b21 Dimitris Moraitis
                break;
446 695e1b21 Dimitris Moraitis
        $("#cpu").data('rangeinput').setValue(j);
447 695e1b21 Dimitris Moraitis
    } else {
448 695e1b21 Dimitris Moraitis
        $("#cpu").data('rangeinput').setValue(i);
449 695e1b21 Dimitris Moraitis
    }   
450 695e1b21 Dimitris Moraitis
    return false;
451 695e1b21 Dimitris Moraitis
});
452 695e1b21 Dimitris Moraitis

453 695e1b21 Dimitris Moraitis
// validate ram input box
454 695e1b21 Dimitris Moraitis
$("#ram-indicator").live('change',function(){
455 695e1b21 Dimitris Moraitis
    var v = Number(this.value);
456 695e1b21 Dimitris Moraitis
    var i = ram.indexOf(v);
457 695e1b21 Dimitris Moraitis
    if (isNaN(v)) {
458 695e1b21 Dimitris Moraitis
        $(this).value = cpus[0];
459 695e1b21 Dimitris Moraitis
        $("#ram").data('rangeinput').setValue(0);
460 695e1b21 Dimitris Moraitis
    } else if (i == -1) {
461 695e1b21 Dimitris Moraitis
        for (var j=0; j < ram.length; j++)
462 695e1b21 Dimitris Moraitis
            if (v<ram[j])
463 695e1b21 Dimitris Moraitis
                break;
464 695e1b21 Dimitris Moraitis
        $("#ram").data('rangeinput').setValue(j);
465 695e1b21 Dimitris Moraitis
    } else {
466 695e1b21 Dimitris Moraitis
        $("#ram").data('rangeinput').setValue(i);
467 695e1b21 Dimitris Moraitis
    }   
468 695e1b21 Dimitris Moraitis
    return false;
469 695e1b21 Dimitris Moraitis
});
470 695e1b21 Dimitris Moraitis

471 695e1b21 Dimitris Moraitis
// validate storage input box
472 695e1b21 Dimitris Moraitis
$("#storage-indicator").live('change',function(){
473 695e1b21 Dimitris Moraitis
    var v = Number(this.value);
474 695e1b21 Dimitris Moraitis
    var i = disks.indexOf(v);
475 695e1b21 Dimitris Moraitis
    if (isNaN(v)) {
476 695e1b21 Dimitris Moraitis
        $(this).value = disks[0];
477 695e1b21 Dimitris Moraitis
        $("#storage").data('rangeinput').setValue(0);
478 695e1b21 Dimitris Moraitis
    } else if (i == -1) {
479 695e1b21 Dimitris Moraitis
        for (var j=0; j < disks.length; j++)
480 695e1b21 Dimitris Moraitis
            if (v<disks[j])
481 695e1b21 Dimitris Moraitis
                break;
482 695e1b21 Dimitris Moraitis
        $("#storage").data('rangeinput').setValue(j);
483 695e1b21 Dimitris Moraitis
    } else {
484 695e1b21 Dimitris Moraitis
        $("#storage").data('rangeinput').setValue(i);
485 695e1b21 Dimitris Moraitis
    }   
486 695e1b21 Dimitris Moraitis
    return false;
487 695e1b21 Dimitris Moraitis
});
488 695e1b21 Dimitris Moraitis

489 bd8b1d60 Christodoulos Psaltis
// selecting the small size
490 8fd5c3a5 Christodoulos Psaltis
$("#small").click(function(){
491 71642965 Dimitris Moraitis
    $("#cpu").data('rangeinput').setValue(0);
492 71642965 Dimitris Moraitis
    $("#ram").data('rangeinput').setValue(0);
493 71642965 Dimitris Moraitis
    $("#storage").data('rangeinput').setValue(0);
494 68a49035 Dimitris Moraitis
    $("#cpu-indicator")[0].value = cpus[0];
495 68a49035 Dimitris Moraitis
    $("#ram-indicator")[0].value = ram[0];
496 68a49035 Dimitris Moraitis
    $("#storage-indicator")[0].value = disks[0];
497 94adeabb Mike Muzurakis
    $("#small").addClass("active");
498 94adeabb Mike Muzurakis
    $("#medium").removeClass("active");    
499 94adeabb Mike Muzurakis
    $("#large").removeClass("active");    
500 94adeabb Mike Muzurakis
    $("#custom").removeClass("active");    
501 cc7c5902 Dimitris Moraitis
});
502 cc7c5902 Dimitris Moraitis

503 bd8b1d60 Christodoulos Psaltis
// selecting the medium size
504 8fd5c3a5 Christodoulos Psaltis
$("#medium").click(function(){
505 71642965 Dimitris Moraitis
    $("#cpu").data('rangeinput').setValue(1);
506 71642965 Dimitris Moraitis
    $("#ram").data('rangeinput').setValue(1);
507 71642965 Dimitris Moraitis
    $("#storage").data('rangeinput').setValue(1);
508 68a49035 Dimitris Moraitis
    $("#cpu-indicator")[0].value = cpus[1];
509 68a49035 Dimitris Moraitis
    $("#ram-indicator")[0].value = ram[1];
510 94adeabb Mike Muzurakis
    $("#storage-indicator")[0].value = disks[1];  
511 94adeabb Mike Muzurakis
    $("#medium").addClass("active");  
512 94adeabb Mike Muzurakis
    $("#small").removeClass("active");    
513 94adeabb Mike Muzurakis
    $("#large").removeClass("active");    
514 94adeabb Mike Muzurakis
    $("#custom").removeClass("active");  
515 cc7c5902 Dimitris Moraitis
});
516 cc7c5902 Dimitris Moraitis

517 bd8b1d60 Christodoulos Psaltis
// selecting the large size
518 8fd5c3a5 Christodoulos Psaltis
$("#large").click(function(){
519 71642965 Dimitris Moraitis
    $("#cpu").data('rangeinput').setValue(2);
520 71642965 Dimitris Moraitis
    $("#ram").data('rangeinput').setValue(2);
521 71642965 Dimitris Moraitis
    $("#storage").data('rangeinput').setValue(2);
522 68a49035 Dimitris Moraitis
    $("#cpu-indicator")[0].value = cpus[2];
523 68a49035 Dimitris Moraitis
    $("#ram-indicator")[0].value = ram[2];
524 94adeabb Mike Muzurakis
    $("#storage-indicator")[0].value = disks[2];   
525 94adeabb Mike Muzurakis
    $("#large").addClass("active"); 
526 94adeabb Mike Muzurakis
    $("#medium").removeClass("active");    
527 94adeabb Mike Muzurakis
    $("#small").removeClass("active");    
528 94adeabb Mike Muzurakis
    $("#custom").removeClass("active");  
529 cc7c5902 Dimitris Moraitis
});
530 cc7c5902 Dimitris Moraitis

531 bd8b1d60 Christodoulos Psaltis
// selecting the custom flavor enables the sliders
532 8fd5c3a5 Christodoulos Psaltis
$("#custom").click(function(){
533 bd8b1d60 Christodoulos Psaltis
    $("#cpu").attr('disabled',false);
534 bd8b1d60 Christodoulos Psaltis
    $("#ram").attr('disabled',false);
535 bd8b1d60 Christodoulos Psaltis
    $("#storage").attr('disabled',false);
536 bd8b1d60 Christodoulos Psaltis
    $("strong.sliders").style = 'color: #778899;';
537 9cb2ca3b Mike Muzurakis
    $("#custom input").attr('checked', 'checked');                
538 94adeabb Mike Muzurakis
    $("#custom").addClass("active"); 
539 94adeabb Mike Muzurakis
    $("#medium").removeClass("active");    
540 94adeabb Mike Muzurakis
    $("#large").removeClass("active");    
541 94adeabb Mike Muzurakis
    $("#small").removeClass("active");  
542 bd8b1d60 Christodoulos Psaltis
});
543 bd8b1d60 Christodoulos Psaltis

544 99721d83 Mike Muzurakis
//when textbox gains focus, add selection in css
545 99721d83 Mike Muzurakis
$('#cpu-indicator').focus(function() {
546 99721d83 Mike Muzurakis
    $(this).addClass('selectedrange');
547 99721d83 Mike Muzurakis
});
548 99721d83 Mike Muzurakis
$('#ram-indicator').focus(function() {
549 99721d83 Mike Muzurakis
    $(this).addClass('selectedrange');
550 99721d83 Mike Muzurakis
});
551 99721d83 Mike Muzurakis
$('#storage-indicator').focus(function() {
552 99721d83 Mike Muzurakis
    $(this).addClass('selectedrange');
553 99721d83 Mike Muzurakis
});
554 99721d83 Mike Muzurakis

555 99721d83 Mike Muzurakis
//when textbox loses focus, clear selection in css
556 99721d83 Mike Muzurakis
$('#cpu-indicator').blur(function() {
557 99721d83 Mike Muzurakis
    $(this).removeClass('selectedrange');
558 99721d83 Mike Muzurakis
});
559 99721d83 Mike Muzurakis
$('#ram-indicator').blur(function() {
560 99721d83 Mike Muzurakis
    $(this).removeClass('selectedrange');
561 99721d83 Mike Muzurakis
});
562 99721d83 Mike Muzurakis
$('#storage-indicator').blur(function() {
563 99721d83 Mike Muzurakis
    $(this).removeClass('selectedrange');
564 99721d83 Mike Muzurakis
});
565 99721d83 Mike Muzurakis

566 bd8b1d60 Christodoulos Psaltis
// exit the wizard
567 8fd5c3a5 Christodoulos Psaltis
$("#cancel").click(function(){
568 b6270d15 Christodoulos Psaltis
    $("a#create").overlay().close();
569 cc7c5902 Dimitris Moraitis
});
570 cc7c5902 Dimitris Moraitis

571 bd8b1d60 Christodoulos Psaltis
// starting a new VM through the wizard
572 8fd5c3a5 Christodoulos Psaltis
$("#start").click(function(){
573 b335768e Markos Gogoulos
    var imageRef = $('input[type=radio][name=image-id]:checked')[0].id.replace('img-radio-','');   
574 b335768e Markos Gogoulos
    var flavorRef = identify_flavor($("#cpu-indicator")[0].value, $("#storage-indicator")[0].value, $("#ram-indicator")[0].value);
575 20fae095 Christodoulos Psaltis
    var machineName = $('input[name=machine_name]')[0].value;
576 5d3c8f3f Mike Muzurakis
    if (jQuery.trim(machineName) == ''){
577 5d3c8f3f Mike Muzurakis
        return false;
578 5d3c8f3f Mike Muzurakis
    }
579 0971fa71 Markos Gogoulos
    create_vm(machineName, imageRef, flavorRef);
580 71642965 Dimitris Moraitis

581 42f67a2a Dimitris Moraitis
    $('a#create').data('overlay').close();
582 2f86374f Dimitris Moraitis

583 2f86374f Dimitris Moraitis
    try{console.warn('creating ' + $("input[name=machine_name]")[0].value)} catch(err){}
584 285a1fa8 Dimitris Moraitis

585 ec06b07c Dimitris Moraitis
    $("#wizard").hide();
586 cc7c5902 Dimitris Moraitis
});
587 cc7c5902 Dimitris Moraitis

588 71eade6b Christodoulos Psaltis
// metadata wizard
589 71eade6b Christodoulos Psaltis
$(function() {
590 71eade6b Christodoulos Psaltis
        // initialize scrollable
591 71eade6b Christodoulos Psaltis
    $("#metadata-wizard").scrollable();
592 71eade6b Christodoulos Psaltis
    // create wizard overlay
593 71eade6b Christodoulos Psaltis
    $("a#metadata-scrollable").overlay({
594 c902e956 Christodoulos Psaltis
        mask: '#000',
595 c902e956 Christodoulos Psaltis
        effect: 'default',
596 c902e956 Christodoulos Psaltis
        top: '10%',
597 c902e956 Christodoulos Psaltis
        closeOnClick: false,
598 c902e956 Christodoulos Psaltis
        oneInstance: false,
599 08cc1924 Christodoulos Psaltis
        load: false,
600 71eade6b Christodoulos Psaltis
        onClose: function(){
601 71eade6b Christodoulos Psaltis
            // reset input areas
602 191ee58e Christodoulos Psaltis
            reset_metadata_input();
603 eeb57422 Mike Muzurakis
            serverID = $("#edit-dialog h3 p").text();
604 eeb57422 Mike Muzurakis
            get_metadata(serverID);
605 08cc1924 Christodoulos Psaltis
        }
606 c902e956 Christodoulos Psaltis
    });
607 71eade6b Christodoulos Psaltis
});
608 71eade6b Christodoulos Psaltis

609 71eade6b Christodoulos Psaltis
// bring up metadata scrollable
610 71eade6b Christodoulos Psaltis
function show_metadata_wizard() {
611 5186eb04 Christodoulos Psaltis
    // get metadata for current server and fill the dialog
612 0cc1c6d4 Christodoulos Psaltis
    serverID = $("#edit-dialog h3 p").text();
613 5186eb04 Christodoulos Psaltis
    get_metadata(serverID);
614 71eade6b Christodoulos Psaltis
    $("#metadata-wizard").scrollable().begin();
615 71eade6b Christodoulos Psaltis
    $("#metadata-wizard").show();
616 71eade6b Christodoulos Psaltis
    $("a#metadata-scrollable").data('overlay').load();
617 c902e956 Christodoulos Psaltis
    return false; 
618 c902e956 Christodoulos Psaltis
}
619 c902e956 Christodoulos Psaltis

620 191ee58e Christodoulos Psaltis
function reset_metadata_input() {
621 191ee58e Christodoulos Psaltis
    // reset input areas
622 191ee58e Christodoulos Psaltis
    $("#metadata-wizard input.key").removeClass("input-enabled");
623 191ee58e Christodoulos Psaltis
    $("#metadata-wizard input.key")[0].value = 'max 15 characters';
624 191ee58e Christodoulos Psaltis
    $("#metadata-wizard textarea.value").removeClass("input-enabled");
625 191ee58e Christodoulos Psaltis
    $("#metadata-wizard textarea.value")[0].value = 'max 150 characters';
626 191ee58e Christodoulos Psaltis
}
627 191ee58e Christodoulos Psaltis

628 71eade6b Christodoulos Psaltis
// update metadata list
629 71eade6b Christodoulos Psaltis
function list_metadata(data) {    
630 71eade6b Christodoulos Psaltis
    // empty the list if it already exists
631 71eade6b Christodoulos Psaltis
    $("#edit-dialog div.content ul.meta-list").empty();
632 71eade6b Christodoulos Psaltis
    // get the values to show
633 71eade6b Christodoulos Psaltis
    meta = data.metadata.values;
634 71eade6b Christodoulos Psaltis
    // show values
635 71eade6b Christodoulos Psaltis
    for (key in meta) {
636 71eade6b Christodoulos Psaltis
        pair = $("ul.meta-template li").clone();
637 71eade6b Christodoulos Psaltis
        //truncate metadata
638 71eade6b Christodoulos Psaltis
        pair.find("label").text(key.substring(0,15));
639 71eade6b Christodoulos Psaltis
        if (meta[key].length > 25) {
640 71eade6b Christodoulos Psaltis
            pair.find("p").text(meta[key].substring(0,25) + "...");
641 71eade6b Christodoulos Psaltis
        } else {
642 71eade6b Christodoulos Psaltis
            pair.find("p").text(meta[key]);            
643 08cc1924 Christodoulos Psaltis
        }
644 71eade6b Christodoulos Psaltis
        pair.appendTo("#edit-dialog div.content ul.meta-list").fadeIn();
645 71eade6b Christodoulos Psaltis
    }
646 c902e956 Christodoulos Psaltis
}
647 c902e956 Christodoulos Psaltis

648 cd154238 Christodoulos Psaltis
// trapping keydown event
649 cd154238 Christodoulos Psaltis
jQuery.expr[':'].focus = function( elem ) {
650 cd154238 Christodoulos Psaltis
  return elem === document.activeElement && ( elem.type || elem.href );
651 cd154238 Christodoulos Psaltis
};
652 cd154238 Christodoulos Psaltis

653 cd154238 Christodoulos Psaltis
$('*').keydown(function (){
654 3a68225a Christodoulos Psaltis
    if ($('#add-dialog').is(":visible") && !$('#edit-dialog input').length && !($('input.key').is(':focus') || $('textarea.value').is(':focus'))){
655 cd154238 Christodoulos Psaltis
        $('input.key').focus();
656 3a68225a Christodoulos Psaltis
        $('input.key').focusin(); 
657 cd154238 Christodoulos Psaltis
    }
658 cd154238 Christodoulos Psaltis
    return true;
659 cd154238 Christodoulos Psaltis
});
660 cd154238 Christodoulos Psaltis

661 c902e956 Christodoulos Psaltis
// intercept click on remove button in metadata edit dialog
662 71eade6b Christodoulos Psaltis
$('#edit-dialog button.remove').live('click', function() { 
663 1b3857ab Christodoulos Psaltis
    // get the server id and meta key needed for the ajax call   
664 0cc1c6d4 Christodoulos Psaltis
    var serverID = $(this).closest('div.container').find('h3 p').text();
665 71ecd0bb Christodoulos Psaltis
    var meta_key = $(this).parent().find('label').text();
666 1b3857ab Christodoulos Psaltis
    // make the ajax call and list the new GET results
667 1b3857ab Christodoulos Psaltis
    delete_metadata(serverID, meta_key);
668 0943cc77 Markos Gogoulos
    return false;
669 c902e956 Christodoulos Psaltis
});
670 c902e956 Christodoulos Psaltis

671 c902e956 Christodoulos Psaltis
// intercept click on edit button in metadata edit dialog
672 3a68225a Christodoulos Psaltis
$('#edit-dialog button.edit').live('click', function(){
673 3a68225a Christodoulos Psaltis
    // show input form for tag value
674 3a68225a Christodoulos Psaltis
    $(this).parent().find('p').html("<textarea class=\"edit-meta-value\" l=\"3\">" +
675 3a68225a Christodoulos Psaltis
                                        $(this).parent().find('p').text() + 
676 3a68225a Christodoulos Psaltis
                                        "</textarea><p class=\"oldValue\">" + 
677 3a68225a Christodoulos Psaltis
                                        $(this).parent().find('p').text() + "</p>");
678 3a68225a Christodoulos Psaltis
    // show/hide the appropriate buttons
679 3a68225a Christodoulos Psaltis
    $(this).hide(); // this button (edit)
680 3a68225a Christodoulos Psaltis
    $(this).siblings().show(); // save and cancel buttons
681 3a68225a Christodoulos Psaltis

682 3a68225a Christodoulos Psaltis
    return false;
683 3a68225a Christodoulos Psaltis
});
684 3a68225a Christodoulos Psaltis

685 3a68225a Christodoulos Psaltis
// intercept click on cancel button in metadata edit dialog
686 3a68225a Christodoulos Psaltis
$('#edit-dialog button.cancel').live('click', function(){
687 5593ab62 Christodoulos Psaltis
    // put the old value and close the forms
688 3a68225a Christodoulos Psaltis
    $(this).parent().find('p').html($(this).parent().find('p.oldValue').text());
689 3a68225a Christodoulos Psaltis
    // show/hide the appropriate buttons
690 3a68225a Christodoulos Psaltis
    $(this).hide(); // this button (cancel)
691 3a68225a Christodoulos Psaltis
    $(this).next().hide(); // the save button
692 3a68225a Christodoulos Psaltis
    $(this).prev().show(); // the edit button
693 3a68225a Christodoulos Psaltis

694 3a68225a Christodoulos Psaltis
    return false;
695 3a68225a Christodoulos Psaltis
});
696 3a68225a Christodoulos Psaltis

697 3a68225a Christodoulos Psaltis
// intercept click on save button in metadata edit dialog
698 3a68225a Christodoulos Psaltis
$('#edit-dialog button.save').live('click', function(){
699 5784dfe4 Christodoulos Psaltis
    // get the updated values and the old key
700 5593ab62 Christodoulos Psaltis
    var oldKey = $(this).parent().find('label').text();
701 5593ab62 Christodoulos Psaltis
    var newValue = $(this).parent().find('textarea.edit-meta-value').val().substring(0,150);
702 5593ab62 Christodoulos Psaltis
    // put the new value and close the forms
703 5784dfe4 Christodoulos Psaltis
    $(this).parent().find('p').html(newValue);
704 5593ab62 Christodoulos Psaltis
    // update meatadata pair
705 5784dfe4 Christodoulos Psaltis
    add_metadata(serverID, newKey, newValue);
706 5784dfe4 Christodoulos Psaltis

707 3a68225a Christodoulos Psaltis
    // show/hide the appropriate buttons
708 3a68225a Christodoulos Psaltis
    $(this).hide(); // this button (save)
709 3a68225a Christodoulos Psaltis
    $(this).prev().hide(); // the cancel button
710 3a68225a Christodoulos Psaltis
    $(this).prev().prev().show(); // the edit button
711 3a68225a Christodoulos Psaltis

712 3a68225a Christodoulos Psaltis
    return false;
713 c902e956 Christodoulos Psaltis
});
714 c902e956 Christodoulos Psaltis

715 f1805aa3 Christodoulos Psaltis
// intercept create metadata key focus
716 71eade6b Christodoulos Psaltis
$("#metadata-wizard input.key").live('focusin', function() {
717 f1805aa3 Christodoulos Psaltis
    if ($(this).hasClass("input-enabled")) {
718 f1805aa3 Christodoulos Psaltis
    } else {
719 71eade6b Christodoulos Psaltis
        $("#metadata-wizard input.key").addClass("input-enabled"); 
720 f1805aa3 Christodoulos Psaltis
        $(this).addClass("input-enabled"); 
721 f1805aa3 Christodoulos Psaltis
        this.value = '';
722 f1805aa3 Christodoulos Psaltis
    }
723 f1805aa3 Christodoulos Psaltis
    return false;
724 f1805aa3 Christodoulos Psaltis
});
725 f1805aa3 Christodoulos Psaltis

726 f1805aa3 Christodoulos Psaltis
// intercept create metadata key focus out
727 71eade6b Christodoulos Psaltis
$("#metadata-wizard input.key").live('focusout', function() {
728 f1805aa3 Christodoulos Psaltis
    if (this.value == "") {
729 f1805aa3 Christodoulos Psaltis
        $(this).removeClass("input-enabled"); 
730 f1805aa3 Christodoulos Psaltis
        this.value = 'max 15 characters';
731 f1805aa3 Christodoulos Psaltis
    }
732 f1805aa3 Christodoulos Psaltis
    return false;
733 f1805aa3 Christodoulos Psaltis
});
734 f1805aa3 Christodoulos Psaltis

735 f1805aa3 Christodoulos Psaltis
// intercept create metadata key focus
736 71eade6b Christodoulos Psaltis
$("#metadata-wizard textarea.value").live('focusin', function() {
737 f1805aa3 Christodoulos Psaltis
    if ($(this).hasClass("input-enabled")) {
738 f1805aa3 Christodoulos Psaltis
    } else {
739 71eade6b Christodoulos Psaltis
        $("#metadata-wizard textarea.value").addClass("input-enabled"); 
740 f1805aa3 Christodoulos Psaltis
        $(this).addClass("input-enabled"); 
741 f1805aa3 Christodoulos Psaltis
        this.value = '';
742 f1805aa3 Christodoulos Psaltis
    }
743 f1805aa3 Christodoulos Psaltis
    return false;
744 f1805aa3 Christodoulos Psaltis
});
745 f1805aa3 Christodoulos Psaltis

746 f1805aa3 Christodoulos Psaltis
// intercept create metadata key focus out
747 71eade6b Christodoulos Psaltis
$("#metadata-wizard textarea.value").live('focusout', function() {
748 f1805aa3 Christodoulos Psaltis
    if (this.value == "") {
749 f1805aa3 Christodoulos Psaltis
        $(this).removeClass("input-enabled"); 
750 f1805aa3 Christodoulos Psaltis
        this.value = 'max 150 characters';
751 f1805aa3 Christodoulos Psaltis
    }
752 f1805aa3 Christodoulos Psaltis
    return false;
753 f1805aa3 Christodoulos Psaltis
});
754 f1805aa3 Christodoulos Psaltis

755 191ee58e Christodoulos Psaltis
// intercept click on cancel button in metadata add dialog
756 191ee58e Christodoulos Psaltis
$('#add-dialog button.cancel').live('click', function() {
757 191ee58e Christodoulos Psaltis
    reset_metadata_input();
758 191ee58e Christodoulos Psaltis
});
759 191ee58e Christodoulos Psaltis

760 c902e956 Christodoulos Psaltis
// intercept click on save button in metadata add dialog
761 71eade6b Christodoulos Psaltis
$('#add-dialog button.save').live('click', function() {
762 f1805aa3 Christodoulos Psaltis
    // if both fields are filled in     
763 f1805aa3 Christodoulos Psaltis
    if ($('input.key').hasClass("input-enabled") && $('textarea.value').hasClass("input-enabled")) {
764 f1805aa3 Christodoulos Psaltis
        // get the server id, meta key and meta value needed for the ajax call     
765 16e27b76 Markos Gogoulos
        var serverID = $(this).parent().find('h3 p').text();
766 16e27b76 Markos Gogoulos
        var meta_key = $(this).parent().find('input.key').attr('value');
767 7330b4c1 Dimitris Moraitis
        var meta_value = $(this).parent().find('textarea.value')[0].value;
768 16e27b76 Markos Gogoulos
        // make the ajax call and list the new GET results
769 16e27b76 Markos Gogoulos
        add_metadata(serverID, meta_key, meta_value);
770 191ee58e Christodoulos Psaltis
        // reset input areas
771 191ee58e Christodoulos Psaltis
        reset_metadata_input();
772 71eade6b Christodoulos Psaltis
        // go to previous step
773 71eade6b Christodoulos Psaltis
        $('#add-dialog button.prev').click();
774 16e27b76 Markos Gogoulos
    } else {
775 f1805aa3 Christodoulos Psaltis
        // find which field is not filled in and focus there
776 f1805aa3 Christodoulos Psaltis
        if (!$('input.key').hasClass("input-enabled")) {
777 f1805aa3 Christodoulos Psaltis
            $('input.key').focus();
778 7330b4c1 Dimitris Moraitis
            $('input.key').focusin();
779 f1805aa3 Christodoulos Psaltis
        } else {
780 7330b4c1 Dimitris Moraitis
            $('textarea.value').focus();
781 7330b4c1 Dimitris Moraitis
            $('textarea.value').focusin();
782 f1805aa3 Christodoulos Psaltis
        }
783 16e27b76 Markos Gogoulos
    }
784 0c578a28 Markos Gogoulos
    return false;
785 c902e956 Christodoulos Psaltis
});
786 c902e956 Christodoulos Psaltis

787 71eade6b Christodoulos Psaltis
// confirm all actions
788 71eade6b Christodoulos Psaltis
$("div.confirm_multiple .yes").live('click', function(){
789 71eade6b Christodoulos Psaltis
    while(pending_actions.length > 0){ // if there is a pending action for this server execute it
790 71eade6b Christodoulos Psaltis
        action = pending_actions.pop(); // extract action
791 71eade6b Christodoulos Psaltis
        var serverID = action[1];
792 71eade6b Christodoulos Psaltis
        if ($.cookie("list") != '1') { // standard view
793 71eade6b Christodoulos Psaltis
            $('#' + serverID + ' .selected').removeClass('selected');
794 71eade6b Christodoulos Psaltis
            $('#' + serverID + ' .display').removeClass('display');
795 71eade6b Christodoulos Psaltis
            if (action[0] == shutdown) {
796 71eade6b Christodoulos Psaltis
                $('#' + serverID + ' .status').text('Shutting down');
797 71eade6b Christodoulos Psaltis
            } else if (action[0] == start) {
798 71eade6b Christodoulos Psaltis
                $('#' + serverID + ' .status').text('Starting');
799 71eade6b Christodoulos Psaltis
            } else if (action[0] == reboot) {
800 71eade6b Christodoulos Psaltis
                $('#' + serverID + ' .status').text('Rebooting');
801 71eade6b Christodoulos Psaltis
            } else if (action[0] == destroy) {
802 71eade6b Christodoulos Psaltis
                $('#' + serverID + ' .status').text('Destroying');
803 71eade6b Christodoulos Psaltis
            }
804 71eade6b Christodoulos Psaltis
            $('#' + serverID + ' .spinner').show();
805 71eade6b Christodoulos Psaltis
        } else { // list view
806 71eade6b Christodoulos Psaltis
            osIcon = $('#'+serverID).parent().parent().find('.list-logo');
807 71eade6b Christodoulos Psaltis
            osIcon.attr('os',osIcon.attr('src'));
808 71eade6b Christodoulos Psaltis
            osIcon.attr('src','static/progress.gif');
809 71eade6b Christodoulos Psaltis
            if (action[0] == shutdown) {
810 71eade6b Christodoulos Psaltis
                $('#' + serverID).parent().parent().find('span.status').text('Shutting down');
811 71eade6b Christodoulos Psaltis
            } else if (action[0] == start) {
812 71eade6b Christodoulos Psaltis
                $('#' + serverID).parent().parent().find('span.status').text('Starting');
813 71eade6b Christodoulos Psaltis
            } else if (action[0] == reboot) {
814 71eade6b Christodoulos Psaltis
                $('#' + serverID).parent().parent().find('span.status').text('Rebooting');
815 71eade6b Christodoulos Psaltis
            } else if (action[0] == destroy) {
816 71eade6b Christodoulos Psaltis
                $('#' + serverID).parent().parent().find('span.status').text('Destroying');
817 71eade6b Christodoulos Psaltis
            }
818 f9015c00 Mike Muzurakis
        }
819 71eade6b Christodoulos Psaltis
        action[0]([serverID]); // execute action
820 5186eb04 Christodoulos Psaltis
    }
821 71eade6b Christodoulos Psaltis
    update_confirmations();    
822 71eade6b Christodoulos Psaltis
});
823 71eade6b Christodoulos Psaltis

824 71eade6b Christodoulos Psaltis
// cancel all actions
825 71eade6b Christodoulos Psaltis
$("div.confirm_multiple .no").live('click', function(){
826 71eade6b Christodoulos Psaltis
    pending_actions = [];
827 71eade6b Christodoulos Psaltis
    $('.machine .selected').removeClass('selected');
828 71eade6b Christodoulos Psaltis
    $('.machine .display').removeClass('display');
829 71eade6b Christodoulos Psaltis
    update_confirmations();
830 71eade6b Christodoulos Psaltis
});
831 5186eb04 Christodoulos Psaltis

832 bd528b3b Christodoulos Psaltis
// basic functions executed on page load
833 d134b632 Dimitris Moraitis
if (images.length > 0) {
834 d134b632 Dimitris Moraitis
    // populate image list
835 d134b632 Dimitris Moraitis
    update_wizard_images();
836 d134b632 Dimitris Moraitis
}
837 d134b632 Dimitris Moraitis
if (flavors.length > 0) {
838 d134b632 Dimitris Moraitis
    // configure flavors
839 d134b632 Dimitris Moraitis
    update_wizard_flavors(); 
840 d134b632 Dimitris Moraitis
}
841 bd528b3b Christodoulos Psaltis
// create tabs for main menu
842 bd528b3b Christodoulos Psaltis
$("ul.tabs").tabs("div.panes ul");
843 bd528b3b Christodoulos Psaltis
844 8400e1a5 Markos Gogoulos
</script>