Statistics
| Branch: | Tag: | Revision:

root / ui / templates / machines.html @ 67679131

History | View | Annotate | Download (21.6 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 6902f72e clopy
<div id="emptymachineslist"><h1 id="welcomeheader">{% trans "Welcome to the ocean!" %}</h1><br />
19 09ec6db2 clopy
    <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><br /><br />
20 09ec6db2 clopy
    <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><br /><br />
21 5ef04f85 Constantinos Venetsanopoulos
    <span class="welcomefooter">{% trans "For more information or help, click " %}<a href="#">{% trans "here" %}</a>.</span>
22 6902f72e clopy
</div>
23 6902f72e clopy
24 cc7c5902 Dimitris Moraitis
<!-- the form -->
25 cc7c5902 Dimitris Moraitis
<form action="#">
26 cc7c5902 Dimitris Moraitis
        <!-- scrollable root element -->
27 cc7c5902 Dimitris Moraitis
        <div class="modal" id="wizard">
28 cc7c5902 Dimitris Moraitis
                <!-- status bar -->
29 cc7c5902 Dimitris Moraitis
                <ul id="status">
30 afa2ebd2 Mike Muzurakis
                        <li class="active"><span class="headernumber" class="first">1</span><div class="headerbody first">{% trans "Image" %}</div></li>
31 94adeabb Mike Muzurakis
                        <li><span class="headernumber">2</span><div class="headerbody">{% trans "Flavor" %}</div></li>
32 cf93419a Mike Muzurakis
                        <li class="third"><span class="headernumber">3</span><div class="headerbody">{% trans "Name" %}</div></li>
33 cc7c5902 Dimitris Moraitis
                </ul>
34 cc7c5902 Dimitris Moraitis
                <!-- scrollable items -->
35 cc7c5902 Dimitris Moraitis
                <div class="items">
36 cc7c5902 Dimitris Moraitis
                        <!-- pages -->
37 cc7c5902 Dimitris Moraitis
                        <div class="page">
38 cf0eb36b Markos Gogoulos
                <h2>{% trans "Select an OS" %}</h2>
39 94adeabb Mike Muzurakis
                <hr class="topruler" />
40 cc7c5902 Dimitris Moraitis
                <ul class="tabs">
41 94adeabb Mike Muzurakis
                    <li><a href="#">{% trans "system images" %}</a></li>
42 cf93419a Mike Muzurakis
                    <li><a href="#">{% trans "custom images" %}</a></li>
43 cc7c5902 Dimitris Moraitis
                </ul>
44 89976b6c Christodoulos Psaltis
                <div class="panes">
45 ec06b07c Dimitris Moraitis
                            <li id="image-template" style="display:none">
46 ec06b07c Dimitris Moraitis
                                    <label for="image.id"> 
47 9b1b6f3a Christodoulos Psaltis
                            <a>
48 94adeabb Mike Muzurakis
                                <div class="image-container">
49 94adeabb Mike Muzurakis
                                    <div class="image">
50 3091ead5 Mike Muzurakis
                                        <input class="radio" type="radio" name="image-id" id="image-id" />
51 94adeabb Mike Muzurakis
                                        <img src="" class="image-logo"/>
52 94adeabb Mike Muzurakis
                                        <strong class="image-title">image.title</strong>
53 94adeabb Mike Muzurakis
                                        <br />
54 94adeabb Mike Muzurakis
                                        <span class="description">image.description</span> 
55 cf93419a Mike Muzurakis
                                        <span id="size" class="size">?? MB</span><span class="size"> MB</span>                         
56 94adeabb Mike Muzurakis
                                    </div>
57 94adeabb Mike Muzurakis
                                </div>  
58 9b1b6f3a Christodoulos Psaltis
                            </a>
59 ec06b07c Dimitris Moraitis
                                    </label>
60 ec06b07c Dimitris Moraitis
                            </li>
61 ec06b07c Dimitris Moraitis
                    <ul class="pane" id="standard-images">
62 cc7c5902 Dimitris Moraitis
                                            <!-- standard images -->
63 cc7c5902 Dimitris Moraitis
                                    </ul>
64 ec06b07c Dimitris Moraitis
                    <ul class="pane" id="custom-images">
65 cc7c5902 Dimitris Moraitis
                                            <!-- custom images -->
66 cc7c5902 Dimitris Moraitis
                    </ul>
67 cc7c5902 Dimitris Moraitis
                </div>
68 94adeabb Mike Muzurakis
                <hr class="bottomruler" />
69 cf0eb36b Markos Gogoulos
                                <button type="button" class="prev" id="cancel">{% trans "Cancel" %}</button>
70 94adeabb Mike Muzurakis
                                <button type="button" class="next right">{% trans "Next" %}</button>
71 cc7c5902 Dimitris Moraitis
            </div>
72 cc7c5902 Dimitris Moraitis
                        <div class="page">
73 94adeabb Mike Muzurakis
                                <h2>{% trans "Select CPUs, RAM and Disk Size" %}</h2>
74 94adeabb Mike Muzurakis
                <hr class="topruler" />
75 cc7c5902 Dimitris Moraitis
                <ul>
76 94adeabb Mike Muzurakis
                    <li id="machinetype">
77 c376783b Markos Gogoulos
                        <div class="machine-type">
78 94adeabb Mike Muzurakis
                            <label for="small" id="small">
79 c376783b Markos Gogoulos
                                <input type="radio" id="small" name="machine-type" value="small" checked="true" />
80 afa2ebd2 Mike Muzurakis
                                <span class="typebody" id="small-body">{% trans "small" %}</span>
81 cc7c5902 Dimitris Moraitis
                            </label>
82 cc7c5902 Dimitris Moraitis
                        </div>
83 c376783b Markos Gogoulos
                        <div class="machine-type">      
84 94adeabb Mike Muzurakis
                            <label for="medium" id="medium">
85 c376783b Markos Gogoulos
                                <input type="radio" id="medium" name="machine-type" value="medium" />                  
86 afa2ebd2 Mike Muzurakis
                                <span class="typebody" id="medium-body">{% trans "medium" %}</span>
87 cc7c5902 Dimitris Moraitis
                            </label>
88 cc7c5902 Dimitris Moraitis
                        </div>
89 c376783b Markos Gogoulos
                        <div class="machine-type">
90 94adeabb Mike Muzurakis
                            <label for="large" id="large">
91 c376783b Markos Gogoulos
                                <input type="radio" id="large" name="machine-type" value="large" />
92 afa2ebd2 Mike Muzurakis
                                <span class="typebody" id="large-body">{% trans "large" %}</span>
93 cc7c5902 Dimitris Moraitis
                            </label>
94 cc7c5902 Dimitris Moraitis
                        </div>
95 c376783b Markos Gogoulos
                        <div class="machine-type">
96 94adeabb Mike Muzurakis
                            <label for="custom" id="custom">
97 c376783b Markos Gogoulos
                                <input type="radio" name="machine-type" id="custom" value="large" />
98 afa2ebd2 Mike Muzurakis
                                <span class="typebody" id="custom-body">{% trans "custom" %}</span>
99 cc7c5902 Dimitris Moraitis
                            </label>
100 cc7c5902 Dimitris Moraitis
                        </div>
101 cc7c5902 Dimitris Moraitis
                    </li>
102 94adeabb Mike Muzurakis
                    <div id="page2-container">
103 94adeabb Mike Muzurakis
                        <li class="slider-container">
104 94adeabb Mike Muzurakis
                                        <label><strong class="sliders">CPUs</strong></label>
105 94adeabb Mike Muzurakis
                            <input type="range" id="cpu" style="display:none" />
106 94adeabb Mike Muzurakis
                            <input type="text" class="range" id="cpu-indicator" />
107 94adeabb Mike Muzurakis
                                        <span class="units">cores</span>
108 94adeabb Mike Muzurakis
                        </li>
109 94adeabb Mike Muzurakis
                        <li class="slider-container">
110 94adeabb Mike Muzurakis
                                        <label><strong class="sliders">RAM</strong></label>
111 94adeabb Mike Muzurakis
                            <input type="range" id="ram" style="display:none" />
112 94adeabb Mike Muzurakis
                            <input type="text" class="range" id="ram-indicator" />
113 94adeabb Mike Muzurakis
                                        <span class="units">MB</span>
114 94adeabb Mike Muzurakis
                        </li>
115 94adeabb Mike Muzurakis
                        <li class="slider-container">
116 94adeabb Mike Muzurakis
                                    <label><strong class="sliders">Size</strong></label>
117 94adeabb Mike Muzurakis
                            <input type="range" id="storage" style="display:none" />
118 94adeabb Mike Muzurakis
                            <input type="text" class="range" id="storage-indicator" />
119 94adeabb Mike Muzurakis
                                        <span class="units">GB</span>
120 94adeabb Mike Muzurakis
                        </li>
121 94adeabb Mike Muzurakis
                        <li>
122 94adeabb Mike Muzurakis
                            <div class="cost">
123 cf93419a 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" /> {% trans "C/hour" %}</span>
124 94adeabb Mike Muzurakis
                            </div>
125 94adeabb Mike Muzurakis
                        </li>
126 94adeabb Mike Muzurakis
                    </div>
127 cc7c5902 Dimitris Moraitis
                </ul>
128 94adeabb Mike Muzurakis
                <hr class="bottomruler" />
129 94adeabb Mike Muzurakis
                                <button type="button" class="prev">{% trans "Back" %}</button>
130 94adeabb Mike Muzurakis
                                <button type="button" class="next right">{% trans "Next" %}</button>
131 cc7c5902 Dimitris Moraitis
            </div>
132 cc7c5902 Dimitris Moraitis
                        <div class="page">
133 cf0eb36b Markos Gogoulos
                                <h2>{% trans "Confirm your settings" %}</h2>
134 94adeabb Mike Muzurakis
                <hr class="topruler" />
135 94adeabb Mike Muzurakis
                <ul id="page3-container">
136 afa2ebd2 Mike Muzurakis
                    <li class="required" id="label-name">
137 cc7c5902 Dimitris Moraitis
                        <label>
138 94adeabb Mike Muzurakis
                            <strong>Name:</strong>
139 cae67343 Mike Muzurakis
                            <input type="text" class="text" name="machine_name" id="name" value="My Ubuntu 10.04 x86_64 server"/>
140 cc7c5902 Dimitris Moraitis
                        </label>
141 cc7c5902 Dimitris Moraitis
                    </li>
142 cc7c5902 Dimitris Moraitis
                    <li>
143 94adeabb Mike Muzurakis
                        <span>{% trans "Image:" %}</span> <span id="machine_image-label">Ubuntu 10.04 x86_64 server</span>
144 cc7c5902 Dimitris Moraitis
                    </li>
145 cc7c5902 Dimitris Moraitis
                    <li>
146 94adeabb Mike Muzurakis
                        <span>{% trans "CPUs:" %}</span> <span id="machine_cpu-label">2</span> <span>{% trans "cores" %}</span>
147 cc7c5902 Dimitris Moraitis
                    </li>
148 cc7c5902 Dimitris Moraitis
                    <li>
149 94adeabb Mike Muzurakis
                        <span>{% trans "RAM:" %}</span> <span id="machine_ram-label">1024</span><span>MB</span>
150 cc7c5902 Dimitris Moraitis
                    </li>
151 cc7c5902 Dimitris Moraitis
                    <li>
152 94adeabb Mike Muzurakis
                        <span>{% trans "System Disk:" %}</span> <span id="machine_storage-label">10</span><span>GB</span>
153 cc7c5902 Dimitris Moraitis
                    </li>
154 cc7c5902 Dimitris Moraitis
                    <li>
155 94adeabb Mike Muzurakis
                        <span>{% trans "Cost per Hour:" %}</span> <span>40 {% trans "credits" %}</span>
156 cc7c5902 Dimitris Moraitis
                    </li>
157 cc7c5902 Dimitris Moraitis
                    <li>
158 94adeabb Mike Muzurakis
                        <span>{% trans "Credits in Wallet:" %}</span> <span>10.000</span>
159 cc7c5902 Dimitris Moraitis
                    </li>
160 cc7c5902 Dimitris Moraitis
                </ul>
161 94adeabb Mike Muzurakis
                <hr class="bottomruler" />
162 94adeabb Mike Muzurakis
                                <button type="button" class="prev">{% trans "Back" %}</button>
163 cf0eb36b Markos Gogoulos
                                <button type="button" class="next right" id="start">{% trans "Create VM" %}</button>        
164 cc7c5902 Dimitris Moraitis
            </div>
165 cc7c5902 Dimitris Moraitis
                </div>
166 cc7c5902 Dimitris Moraitis
        </div>
167 cc7c5902 Dimitris Moraitis
</form>
168 cc7c5902 Dimitris Moraitis
169 339712cb Christodoulos Psaltis
<!-- base notification for error/success reporting -->
170 f58ec963 Christodoulos Psaltis
<a id="notification" rel="#error-success" href="#"></a>
171 d165dbb4 Christodoulos Psaltis
172 f58ec963 Christodoulos Psaltis
<div class="modal" id="error-success">
173 f58ec963 Christodoulos Psaltis
    <h3>{% trans "Error!/Success!" %}</h3>
174 038383b1 Dimitris Moraitis
    <div><p>{% trans "More details about the result"%}</p></div>
175 cc7c5902 Dimitris Moraitis
</div>
176 cc7c5902 Dimitris Moraitis
177 d165dbb4 Christodoulos Psaltis
178 339712cb Christodoulos Psaltis
<a id="meta-editor-1" rel="#editor-1" href="#"></a>
179 339712cb Christodoulos Psaltis
180 295800ec Christodoulos Psaltis
<div class="meta-modal" id="editor-1">
181 339712cb Christodoulos Psaltis
    <h3>
182 339712cb Christodoulos Psaltis
        <label>{% trans "Metadata for machine:" %}<label>
183 339712cb Christodoulos Psaltis
        <span></span>
184 339712cb Christodoulos Psaltis
    </h3>
185 339712cb Christodoulos Psaltis
    <hr class="topruler" />
186 295800ec Christodoulos Psaltis
    <hr class="fatruler" />
187 295800ec Christodoulos Psaltis
    <div class="content">
188 339712cb Christodoulos Psaltis
        <ul>
189 339712cb Christodoulos Psaltis
            <li class="meta-template">
190 339712cb Christodoulos Psaltis
                <label>{% trans "Metadata key" %}</label>
191 339712cb Christodoulos Psaltis
                <button type="button" class="remove">{% trans "remove x" %}</button>
192 339712cb Christodoulos Psaltis
                <hr class="meta-separator">
193 339712cb Christodoulos Psaltis
                <p>{% trans "Metadata value" %}</p>
194 339712cb Christodoulos Psaltis
                <button type="button" class="edit">{% trans "edit" %}</button>
195 339712cb Christodoulos Psaltis
            </li>
196 339712cb Christodoulos Psaltis
        </ul>
197 339712cb Christodoulos Psaltis
    </div>
198 339712cb Christodoulos Psaltis
    <button type="button" class="create">{% trans "Create New+" %}</button>
199 0c1f14ed Christodoulos Psaltis
    <div class="bottomruler" /> 
200 339712cb Christodoulos Psaltis
</div>
201 339712cb Christodoulos Psaltis
202 339712cb Christodoulos Psaltis
<a id="meta-editor-2" rel="#editor-2" href="#"></a>
203 339712cb Christodoulos Psaltis
204 295800ec Christodoulos Psaltis
<div class="meta-modal" id="editor-2">
205 339712cb Christodoulos Psaltis
    <h3>
206 339712cb Christodoulos Psaltis
        <label>{% trans "Metadata for machine:" %}<label>
207 339712cb Christodoulos Psaltis
        <span></span>
208 339712cb Christodoulos Psaltis
    </h3>
209 339712cb Christodoulos Psaltis
    <hr class="topruler" />
210 339712cb Christodoulos Psaltis
    <hr class="fatruler" />
211 295800ec Christodoulos Psaltis
    <div class="content">
212 295800ec Christodoulos Psaltis
        <label class="meta-key">{% trans "Key:" %}</label>
213 295800ec Christodoulos Psaltis
        <input type="text" maxlength="15" class="key" value="max 15 characters"/>
214 295800ec Christodoulos Psaltis
        <hr class="meta-separator">
215 295800ec Christodoulos Psaltis
        <label class="meta-value">{% trans "Value:" %}</label>
216 295800ec Christodoulos Psaltis
        <input type="text" maxlength="150" class="value" value="max 150 characters"/>
217 295800ec Christodoulos Psaltis
    </div>
218 67679131 Christodoulos Psaltis
    <button type="button" class="cancel">{% trans "Cancel" %}</button>
219 67679131 Christodoulos Psaltis
    <button type="button" class="save">{% trans "Save" %}</button>
220 0c1f14ed Christodoulos Psaltis
    <div class="bottomruler" /> 
221 d165dbb4 Christodoulos Psaltis
</div>
222 d165dbb4 Christodoulos Psaltis
223 42f67a2a Dimitris Moraitis
<div id="machinesview"></div>
224 42f67a2a Dimitris Moraitis
225 267403ca Dimitris Moraitis
<div class="confirm_multiple">
226 3d286f84 Dimitris Moraitis
    <p>{% trans "Your actions will affect" %} <span class="actionLen">XX</span> {% trans "machines" %}</p>
227 2cd96cc7 Vangelis Koukis
    <button class="yes">{% trans "Confirm All" %}</button>
228 2cd96cc7 Vangelis Koukis
        <button class="no">{% trans "Cancel All" %}</button>
229 d725fb12 Christodoulos Psaltis
</div>
230 31343277 Christodoulos Psaltis
231 5b147126 Christodoulos Psaltis
<div id="machines" class="separator"></div>
232 5b147126 Christodoulos Psaltis
233 cc7c5902 Dimitris Moraitis
<script>
234 afa2ebd2 Mike Muzurakis
//add hover to labels
235 afa2ebd2 Mike Muzurakis
$('span.typebody').mouseover(function() {
236 cf93419a Mike Muzurakis
    $(this).addClass('typehover');
237 afa2ebd2 Mike Muzurakis
});
238 afa2ebd2 Mike Muzurakis
$('span.typebody').mouseout(function() {
239 cf93419a Mike Muzurakis
    $(this).removeClass('typehover');
240 afa2ebd2 Mike Muzurakis
});
241 afa2ebd2 Mike Muzurakis

242 a64e74f0 Markos Gogoulos
// return value from metadata key "OS", if it exists
243 a64e74f0 Markos Gogoulos
function os_icon(metadata) {
244 a64e74f0 Markos Gogoulos
    if (!metadata) {
245 a64e74f0 Markos Gogoulos
        return 'unknown';
246 a64e74f0 Markos Gogoulos
    }
247 a64e74f0 Markos Gogoulos

248 a64e74f0 Markos Gogoulos
    if (metadata.values.OS == undefined || metadata.values.OS == '') {
249 a64e74f0 Markos Gogoulos
        return 'unknown';
250 a64e74f0 Markos Gogoulos
    } else {
251 a64e74f0 Markos Gogoulos
        return metadata.values.OS;
252 a64e74f0 Markos Gogoulos
    }
253 a64e74f0 Markos Gogoulos
} 
254 a64e74f0 Markos Gogoulos

255 fb66080c Dimitris Moraitis
// switch to list view
256 9b1b6f3a Christodoulos Psaltis
$("a#list").click(function(){
257 9b1b6f3a Christodoulos Psaltis
    list_view(); 
258 9b1b6f3a Christodoulos Psaltis
    return false;
259 9b1b6f3a Christodoulos Psaltis
});
260 fb66080c Dimitris Moraitis

261 9b1b6f3a Christodoulos Psaltis
// switch to standard view
262 9b1b6f3a Christodoulos Psaltis
$("a#standard").click(function(){
263 9b1b6f3a Christodoulos Psaltis
    standard_view();
264 9b1b6f3a Christodoulos Psaltis
    return false;
265 9b1b6f3a Christodoulos Psaltis
});
266 38e2c5ed Christodoulos Psaltis

267 bd8b1d60 Christodoulos Psaltis
// launch VM creation wizard
268 8fd5c3a5 Christodoulos Psaltis
$("a#create").click(function(){
269 146b6003 Dimitris Moraitis
    // launch wizard only if images and flavors are found
270 146b6003 Dimitris Moraitis
    if (images.length > 0  && flavors.length > 0) {
271 a3e418b1 Markos Gogoulos
        $("#wizard").scrollable().begin();
272 a3e418b1 Markos Gogoulos
        $("#wizard").show();
273 146b6003 Dimitris Moraitis
        $('a#create').data('overlay').load()   
274 146b6003 Dimitris Moraitis
    } else if (images.length == 0 ) {
275 146b6003 Dimitris Moraitis
        ajax_error('NO_IMAGES');
276 146b6003 Dimitris Moraitis
        return false;   
277 146b6003 Dimitris Moraitis
    } else if (flavors.length == 0) {
278 146b6003 Dimitris Moraitis
        ajax_error('NO_FLAVORS');
279 146b6003 Dimitris Moraitis
        return false;
280 146b6003 Dimitris Moraitis
    }
281 ec06b07c Dimitris Moraitis
});
282 ec06b07c Dimitris Moraitis

283 f124656b Christodoulos Psaltis
// create wizard overlay
284 f124656b Christodoulos Psaltis
$(function() { 
285 4e5d5e70 Christodoulos Psaltis
    $("a#create").overlay({
286 f124656b Christodoulos Psaltis
        mask: '#000', 
287 f124656b Christodoulos Psaltis
        effect: 'default', 
288 f124656b Christodoulos Psaltis
        top: '5%', 
289 f124656b Christodoulos Psaltis
        oneInstance: false,
290 f974b570 Dimitris Moraitis
        closeOnClick: false
291 f124656b Christodoulos Psaltis
    });
292 f124656b Christodoulos Psaltis
});
293 f124656b Christodoulos Psaltis

294 bd8b1d60 Christodoulos Psaltis
// wizard
295 bd8b1d60 Christodoulos Psaltis
$(function() {
296 bd8b1d60 Christodoulos Psaltis
    var root = $("#wizard").scrollable();
297 bd8b1d60 Christodoulos Psaltis
    var api = root.scrollable();
298 bd8b1d60 Christodoulos Psaltis
    // rangeinput with default configuration
299 bd8b1d60 Christodoulos Psaltis
    // validation logic is done inside the onBeforeSeek callback
300 bd8b1d60 Christodoulos Psaltis
    api.onBeforeSeek(function(event, i) {
301 bd8b1d60 Christodoulos Psaltis
            // we are going 1 step backwards so no need for validation
302 bd8b1d60 Christodoulos Psaltis
            if (api.getIndex() < i) {
303 bd8b1d60 Christodoulos Psaltis
             // 1. get current page
304 bd8b1d60 Christodoulos Psaltis
                     var page = root.find(".page").eq(api.getIndex()),
305 bd8b1d60 Christodoulos Psaltis
                         // 2. .. and all required fields inside the page
306 bd8b1d60 Christodoulos Psaltis
                         inputs = page.find(".required :input").removeClass("error"),
307 bd8b1d60 Christodoulos Psaltis
                         // 3. .. which are empty
308 bd8b1d60 Christodoulos Psaltis
                         empty = inputs.filter(function() {
309 bd8b1d60 Christodoulos Psaltis
                                return $(this).val().replace(/\s*/g, '') == '';
310 bd8b1d60 Christodoulos Psaltis
                         });
311 bd8b1d60 Christodoulos Psaltis
                     // if there are empty fields, then
312 bd8b1d60 Christodoulos Psaltis
                    if (empty.length) {
313 bd8b1d60 Christodoulos Psaltis
                            // add a CSS class name "error" for empty & required fields
314 bd8b1d60 Christodoulos Psaltis
                            empty.addClass("error");
315 bd8b1d60 Christodoulos Psaltis
                            // cancel seeking of the scrollable by returning false
316 bd8b1d60 Christodoulos Psaltis
                            return false;
317 bd8b1d60 Christodoulos Psaltis
                    // everything is good
318 bd8b1d60 Christodoulos Psaltis
                    } 
319 bd8b1d60 Christodoulos Psaltis
            }
320 bd8b1d60 Christodoulos Psaltis
            // update status bar
321 bd8b1d60 Christodoulos Psaltis
            $("#status li").removeClass("active").eq(i).addClass("active");
322 71642965 Dimitris Moraitis
        // update confirm step
323 20fae095 Christodoulos Psaltis
        if (api.getIndex()==0) {
324 20fae095 Christodoulos Psaltis
            var image = $("input[type=radio][name=image-id]:checked");
325 b335768e Markos Gogoulos
            var imageRef = image.length ? image[0].id : false
326 b335768e Markos Gogoulos
            if (imageRef) {
327 b335768e Markos Gogoulos
                var imageName = $("label[for=" + imageRef + "] .image-title").text();
328 20fae095 Christodoulos Psaltis
                $("#machine_image-label")[0].textContent = imageName;
329 20fae095 Christodoulos Psaltis
                $("input[type=text][name=machine_name]")[0].value = "My " + imageName + " server";
330 20fae095 Christodoulos Psaltis
            }
331 42f67a2a Dimitris Moraitis
        } else if (api.getIndex()==1) {
332 20fae095 Christodoulos Psaltis
            $("#machine_cpu-label")[0].textContent = $("#cpu-indicator")[0].value;
333 20fae095 Christodoulos Psaltis
            $("#machine_ram-label")[0].textContent = $("#ram-indicator")[0].value;
334 20fae095 Christodoulos Psaltis
            $("#machine_storage-label")[0].textContent = $("#storage-indicator")[0].value;
335 9b1b6f3a Christodoulos Psaltis
        }    
336 bd8b1d60 Christodoulos Psaltis
    });
337 bd8b1d60 Christodoulos Psaltis
    // if tab is pressed on the next button seek to next page
338 f87e79a4 Mike Muzurakis
    $(root).live('keydown', function (e) {
339 f87e79a4 Mike Muzurakis
       if ( e.keyCode == 9 ){
340 f87e79a4 Mike Muzurakis
           if(e.preventDefault) {
341 f87e79a4 Mike Muzurakis
               e.preventDefault();
342 f87e79a4 Mike Muzurakis
           }
343 f87e79a4 Mike Muzurakis
           api.next();
344 f87e79a4 Mike Muzurakis
        }
345 bd8b1d60 Christodoulos Psaltis
    });
346 cae67343 Mike Muzurakis
    $("#name").keypress(function (e) {
347 cae67343 Mike Muzurakis
                if ((e.which && e.which == 13) || (e.keyCode && e.keyCode == 13)) {
348 cae67343 Mike Muzurakis
                        $('#start').click();
349 cae67343 Mike Muzurakis
                        return false;
350 cae67343 Mike Muzurakis
                } else {
351 cae67343 Mike Muzurakis
                        return true;
352 cae67343 Mike Muzurakis
                }
353 cae67343 Mike Muzurakis
    });
354 71642965 Dimitris Moraitis
});
355 cc7c5902 Dimitris Moraitis

356 bd8b1d60 Christodoulos Psaltis
// disable sliders in flavor selection
357 cc7c5902 Dimitris Moraitis
function disableSliders() {
358 cc7c5902 Dimitris Moraitis
    $("#cpu").attr('disabled',true);
359 cc7c5902 Dimitris Moraitis
    $("#ram").attr('disabled',true);
360 cc7c5902 Dimitris Moraitis
    $("#storage").attr('disabled',true);
361 cc7c5902 Dimitris Moraitis
}
362 cc7c5902 Dimitris Moraitis

363 afa2ebd2 Mike Muzurakis
//update radio button when clicking on text
364 afa2ebd2 Mike Muzurakis
$("#small-body").live('click' ,function() { 
365 afa2ebd2 Mike Muzurakis
    $(this).parent().find("#small").click();
366 afa2ebd2 Mike Muzurakis
});
367 afa2ebd2 Mike Muzurakis
$("#medium-body").live('click' ,function() { 
368 afa2ebd2 Mike Muzurakis
    $(this).parent().find("#medium").click();
369 afa2ebd2 Mike Muzurakis
});
370 afa2ebd2 Mike Muzurakis
$("#large-body").live('click' ,function() { 
371 afa2ebd2 Mike Muzurakis
    $(this).parent().find("#large").click();
372 afa2ebd2 Mike Muzurakis
});
373 afa2ebd2 Mike Muzurakis
$("#custom-body").live('click' ,function() { 
374 afa2ebd2 Mike Muzurakis
    $(this).parent().find("#custom").click();
375 afa2ebd2 Mike Muzurakis
});
376 afa2ebd2 Mike Muzurakis

377 afa2ebd2 Mike Muzurakis
//select image div on radio button select
378 afa2ebd2 Mike Muzurakis
$('.radio').live('click' ,function() {           
379 afa2ebd2 Mike Muzurakis
    $(this).parents("div").find(".image").removeClass('selecteddiv');
380 afa2ebd2 Mike Muzurakis
    if($(this).is(':checked'))  {
381 afa2ebd2 Mike Muzurakis
        $(this).parent().addClass('selecteddiv');
382 afa2ebd2 Mike Muzurakis
    }
383 afa2ebd2 Mike Muzurakis
});
384 afa2ebd2 Mike Muzurakis

385 267403ca Dimitris Moraitis
// confirm all actions
386 267403ca Dimitris Moraitis
$("div.confirm_multiple .yes").live('click', function(){
387 a1a31201 Dimitris Moraitis
    while(pending_actions.length > 0){ // if there is a pending action for this server execute it
388 a1a31201 Dimitris Moraitis
        action = pending_actions.pop(); // extract action
389 2f86374f Dimitris Moraitis
        var serverID = action[1];
390 990772be Dimitris Moraitis
        if ($.cookie("list") != '1') { // standard view
391 198e13aa Christodoulos Psaltis
            $('#' + serverID + ' .selected').removeClass('selected');
392 198e13aa Christodoulos Psaltis
            $('#' + serverID + ' .display').removeClass('display');
393 198e13aa Christodoulos Psaltis
            if (action[0] == shutdown) {
394 198e13aa Christodoulos Psaltis
                $('#' + serverID + ' .status').text('Shutting down');
395 198e13aa Christodoulos Psaltis
            } else if (action[0] == start) {
396 198e13aa Christodoulos Psaltis
                $('#' + serverID + ' .status').text('Starting');
397 66edd851 Christodoulos Psaltis
            } else if (action[0] == reboot) {
398 66edd851 Christodoulos Psaltis
                $('#' + serverID + ' .status').text('Rebooting');
399 66edd851 Christodoulos Psaltis
            } else if (action[0] == destroy) {
400 66edd851 Christodoulos Psaltis
                $('#' + serverID + ' .status').text('Destroying');
401 198e13aa Christodoulos Psaltis
            }
402 198e13aa Christodoulos Psaltis
            $('#' + serverID + ' .spinner').show();
403 990772be Dimitris Moraitis
        } else { // list view
404 695e1b21 Dimitris Moraitis
            osIcon = $('#'+serverID).parent().parent().find('.list-logo');
405 695e1b21 Dimitris Moraitis
            osIcon.attr('os',osIcon.attr('src'));
406 695e1b21 Dimitris Moraitis
            osIcon.attr('src','static/progress.gif');
407 1704ae25 Christodoulos Psaltis
            if (action[0] == shutdown) {
408 1704ae25 Christodoulos Psaltis
                $('#' + serverID).parent().parent().find('span.status').text('Shutting down');
409 1704ae25 Christodoulos Psaltis
            } else if (action[0] == start) {
410 1704ae25 Christodoulos Psaltis
                $('#' + serverID).parent().parent().find('span.status').text('Starting');
411 66edd851 Christodoulos Psaltis
            } else if (action[0] == reboot) {
412 66edd851 Christodoulos Psaltis
                $('#' + serverID).parent().parent().find('span.status').text('Rebooting');
413 66edd851 Christodoulos Psaltis
            } else if (action[0] == destroy) {
414 66edd851 Christodoulos Psaltis
                $('#' + serverID).parent().parent().find('span.status').text('Destroying');
415 1704ae25 Christodoulos Psaltis
            }
416 990772be Dimitris Moraitis
        }
417 a1a31201 Dimitris Moraitis
        action[0]([serverID]); // execute action
418 a1a31201 Dimitris Moraitis
    }
419 a1a31201 Dimitris Moraitis
    update_confirmations();    
420 267403ca Dimitris Moraitis
});
421 267403ca Dimitris Moraitis

422 267403ca Dimitris Moraitis
// cancel all actions
423 267403ca Dimitris Moraitis
$("div.confirm_multiple .no").live('click', function(){
424 267403ca Dimitris Moraitis
    pending_actions = [];
425 aa0534a7 Dimitris Moraitis
    $('.machine .selected').removeClass('selected');
426 aa0534a7 Dimitris Moraitis
    $('.machine .display').removeClass('display');
427 267403ca Dimitris Moraitis
    update_confirmations();
428 267403ca Dimitris Moraitis
});
429 267403ca Dimitris Moraitis

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

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

466 695e1b21 Dimitris Moraitis

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

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

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

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

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

539 bd8b1d60 Christodoulos Psaltis
// exit the wizard
540 8fd5c3a5 Christodoulos Psaltis
$("#cancel").click(function(){
541 b6270d15 Christodoulos Psaltis
    $("a#create").overlay().close();
542 cc7c5902 Dimitris Moraitis
});
543 cc7c5902 Dimitris Moraitis

544 bd8b1d60 Christodoulos Psaltis
// starting a new VM through the wizard
545 8fd5c3a5 Christodoulos Psaltis
$("#start").click(function(){
546 b335768e Markos Gogoulos
    var imageRef = $('input[type=radio][name=image-id]:checked')[0].id.replace('img-radio-','');   
547 b335768e Markos Gogoulos
    var flavorRef = identify_flavor($("#cpu-indicator")[0].value, $("#storage-indicator")[0].value, $("#ram-indicator")[0].value);
548 20fae095 Christodoulos Psaltis
    var machineName = $('input[name=machine_name]')[0].value;
549 0971fa71 Markos Gogoulos

550 0971fa71 Markos Gogoulos
    create_vm(machineName, imageRef, flavorRef);
551 71642965 Dimitris Moraitis

552 42f67a2a Dimitris Moraitis
    $('a#create').data('overlay').close();
553 2f86374f Dimitris Moraitis
    $("#emptymachineslist").hide();
554 2f86374f Dimitris Moraitis

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

557 ec06b07c Dimitris Moraitis
    $("#wizard").hide();
558 cc7c5902 Dimitris Moraitis
});
559 cc7c5902 Dimitris Moraitis

560 bd528b3b Christodoulos Psaltis
// basic functions executed on page load
561 d134b632 Dimitris Moraitis
if (images.length > 0) {
562 d134b632 Dimitris Moraitis
    // populate image list
563 d134b632 Dimitris Moraitis
    update_wizard_images();
564 d134b632 Dimitris Moraitis
}
565 d134b632 Dimitris Moraitis
if (flavors.length > 0) {
566 d134b632 Dimitris Moraitis
    // configure flavors
567 d134b632 Dimitris Moraitis
    update_wizard_flavors(); 
568 d134b632 Dimitris Moraitis
}
569 bd528b3b Christodoulos Psaltis
// create tabs for main menu
570 bd528b3b Christodoulos Psaltis
$("ul.tabs").tabs("div.panes ul");
571 bd528b3b Christodoulos Psaltis
572 8400e1a5 Markos Gogoulos
</script>