root / ui / templates / home.html @ 1508a5ab
History | View | Annotate | Download (10.6 kB)
1 | d7f0ad6e | provetza | {% load i18n %} |
---|---|---|---|
2 | cc7c5902 | Dimitris Moraitis | <!DOCTYPE html>
|
3 | cc7c5902 | Dimitris Moraitis | <head>
|
4 | b303ba05 | Christodoulos Psaltis | <title>{{ project }}</title> |
5 | cc7c5902 | Dimitris Moraitis | <!-- include the Tools -->
|
6 | 146b6003 | Dimitris Moraitis | <!-- jquery tools minified for deployment-->
|
7 | 01864f44 | Dimitris Moraitis | <script src="static/jquery.tools.min.js"></script> |
8 | 146b6003 | Dimitris Moraitis | |
9 | 01864f44 | Dimitris Moraitis | <!-- jquery tools source for JS debugging -->
|
10 | 01864f44 | Dimitris Moraitis | <!--
|
11 | 146b6003 | Dimitris Moraitis | <script src="http://flowplayer.org/tools/download/1.2.5/jquery-1.4.2.js"></script>
|
12 | 146b6003 | Dimitris Moraitis | <script src="http://flowplayer.org/tools/download/1.2.5/tabs/tabs.js"></script>
|
13 | 146b6003 | Dimitris Moraitis | <script src="http://flowplayer.org/tools/download/1.2.5/scrollable/scrollable.js"></script>
|
14 | 146b6003 | Dimitris Moraitis | <script src="http://flowplayer.org/tools/download/1.2.5/overlay/overlay.js"></script>
|
15 | 146b6003 | Dimitris Moraitis | <script src="http://flowplayer.org/tools/download/1.2.5/rangeinput/rangeinput.js"></script>
|
16 | 146b6003 | Dimitris Moraitis | <script src="http://flowplayer.org/tools/download/1.2.5/toolbox/toolbox.expose.js"></script>
|
17 | 01864f44 | Dimitris Moraitis | -->
|
18 | 146b6003 | Dimitris Moraitis | |
19 | fb66080c | Dimitris Moraitis | <script src="static/jquery.cookie.js"></script> |
20 | a4531705 | Christodoulos Psaltis | <script src="static/jQueryRotate.js"></script> |
21 | a4531705 | Christodoulos Psaltis | <script src="static/jquery.dataTables.min.js"></script> |
22 | 7b7e768e | Christodoulos Psaltis | <script src="static/synnefo.js"></script> |
23 | 7b7e768e | Christodoulos Psaltis | <link rel="stylesheet" type="text/css" href="static/main.css"/> |
24 | 42f67a2a | Dimitris Moraitis | <script>
|
25 | eae0a59a | Dimitris Moraitis | // timeout value from settings.py
|
26 | d36493ce | Dimitris Moraitis | var TIMEOUT = {{timeout}};
|
27 | e5b0ba20 | Vangelis Koukis | var UPDATE_INTERVAL = {{5000}};
|
28 | eae0a59a | Dimitris Moraitis | var STATUS_MESSAGES = {
|
29 | eae0a59a | Dimitris Moraitis | 'BUILD' : '{% trans "Building" %}',
|
30 | eae0a59a | Dimitris Moraitis | 'REBOOT' : '{% trans "Rebooting" %}',
|
31 | eae0a59a | Dimitris Moraitis | 'STOPPED' : '{% trans "Stopped" %}',
|
32 | eae0a59a | Dimitris Moraitis | 'ACTIVE' : '{% trans "Running" %}',
|
33 | eae0a59a | Dimitris Moraitis | 'ERROR' : '{% trans "Error" %}'
|
34 | eae0a59a | Dimitris Moraitis | };
|
35 | eae0a59a | Dimitris Moraitis |
|
36 | eae0a59a | Dimitris Moraitis | var ERRORS = {
|
37 | eae0a59a | Dimitris Moraitis | // error message header
|
38 | 146b6003 | Dimitris Moraitis | 'HEADER' : '{% trans "Error!" %}',
|
39 | eae0a59a | Dimitris Moraitis | // default
|
40 | 146b6003 | Dimitris Moraitis | 'DEFAULT' : '{% trans "Could not contact the service. Please check your network connectivity and try again." %}',
|
41 | eae0a59a | Dimitris Moraitis | // bad request
|
42 | eae0a59a | Dimitris Moraitis | '400' : '{% trans "Malformed request." %}',
|
43 | eae0a59a | Dimitris Moraitis | // not found
|
44 | eae0a59a | Dimitris Moraitis | '404' : '{% trans "Your request has failed. Resource not found." %}',
|
45 | eae0a59a | Dimitris Moraitis | // internal server error
|
46 | ccd40764 | Markos Gogoulos | '500' : '{% trans "There has been an Internal Error. Our administrators have been notified." %}',
|
47 | ccd40764 | Markos Gogoulos | // service unavailable
|
48 | ccd40764 | Markos Gogoulos | '501' : '{% trans "This server has not been implemented yet." %}',
|
49 | eae0a59a | Dimitris Moraitis | // service unavailable
|
50 | a5093da5 | Markos Gogoulos | '503' : '{% trans "This service is unavailable right now, please try again later." %}',
|
51 | e2ccad35 | Dimitris Moraitis | // no images found
|
52 | 146b6003 | Dimitris Moraitis | 'NO_IMAGES' : '{% trans "Cannot show the Create machine wizard: No images found." %}',
|
53 | e2ccad35 | Dimitris Moraitis | // no flavors found
|
54 | 146b6003 | Dimitris Moraitis | 'NO_FLAVORS' : '{% trans "Cannot show the Create machine wizard: No machine configurations found." %}'
|
55 | eae0a59a | Dimitris Moraitis | };
|
56 | eae0a59a | Dimitris Moraitis |
|
57 | eae0a59a | Dimitris Moraitis | var SUCCESS = {
|
58 | 146b6003 | Dimitris Moraitis | 'HEADER' : '{% trans "Success!" %}',
|
59 | 146b6003 | Dimitris Moraitis | 'DEFAULT' : '{% trans "Your request has been succefully executed." %}',
|
60 | 8550e831 | Markos Gogoulos | 'CREATE_VM_SUCCESS' : '{% trans "Success!" %}',
|
61 | 8550e831 | Markos Gogoulos | 'CREATE_VM_SUCCESS_ONE' : '{% trans "Your machine is now being built." %}',
|
62 | 8550e831 | Markos Gogoulos | 'CREATE_VM_SUCCESS_TWO' : '{% trans "Please write down the following password:" %}',
|
63 | 8550e831 | Markos Gogoulos | 'CREATE_VM_SUCCESS_THREE' : '{% trans "Do not lose this! You will need it to connect to your machine, once it is ready." %}'
|
64 | eae0a59a | Dimitris Moraitis | };
|
65 | eae0a59a | Dimitris Moraitis |
|
66 | 42f67a2a | Dimitris Moraitis | // ajax error checking
|
67 | 038383b1 | Dimitris Moraitis | function ajax_error(status, serverID, action, responseText) {
|
68 | 038383b1 | Dimitris Moraitis | var serverName = '';
|
69 | 038383b1 | Dimitris Moraitis |
|
70 | 038383b1 | Dimitris Moraitis | if (serverID != undefined) {
|
71 | a8e592c7 | Dimitris Moraitis | // standard view
|
72 | a8e592c7 | Dimitris Moraitis | serverName = $("#"+serverID).find("span.name").text();
|
73 | a8e592c7 | Dimitris Moraitis | if (serverName == "") { // list view
|
74 | a8e592c7 | Dimitris Moraitis | serverName = $("#"+serverID).parent().parent().find("span.name").text();
|
75 | a8e592c7 | Dimitris Moraitis | }
|
76 | 038383b1 | Dimitris Moraitis | }
|
77 | 038383b1 | Dimitris Moraitis |
|
78 | 42f67a2a | Dimitris Moraitis | // prepare the error message
|
79 | 146b6003 | Dimitris Moraitis | $("#error-success h3").text(ERRORS['HEADER']);
|
80 | 038383b1 | Dimitris Moraitis | if (responseText != undefined){
|
81 | a8e592c7 | Dimitris Moraitis | var errors = parse_error(responseText), details = '';
|
82 | 038383b1 | Dimitris Moraitis | if (serverName){
|
83 | 038383b1 | Dimitris Moraitis | serverName="<p><strong>Server:</strong> " + serverName + "</p>";
|
84 | 038383b1 | Dimitris Moraitis | }
|
85 | a8e592c7 | Dimitris Moraitis | if (errors[0].details != undefined) {
|
86 | a8e592c7 | Dimitris Moraitis | details = "<p><strong>Details:</strong> " + errors[0].details +"</p>";
|
87 | a8e592c7 | Dimitris Moraitis | }
|
88 | a8e592c7 | Dimitris Moraitis | $("#error-success div").html("<p>"+(errors[0].message || ERRORS[errors[0].code]) +"</p>"+serverName +"<p><strong>Action:</strong> " + action + "</p><p><strong>Code</strong>: " + errors[0].code + "</p>" + details);
|
89 | 038383b1 | Dimitris Moraitis | } else if (ERRORS[status] != undefined) {
|
90 | e1a023a6 | Markos Gogoulos | if (serverID == undefined){
|
91 | e1a023a6 | Markos Gogoulos | $("#error-success p").text(ERRORS[status]);
|
92 | e1a023a6 | Markos Gogoulos | } else {
|
93 | e1a023a6 | Markos Gogoulos | $("#error-success p").html("<b>" + serverName + "</b>" + ": " + ERRORS[status]);
|
94 | e1a023a6 | Markos Gogoulos | }
|
95 | eae0a59a | Dimitris Moraitis | } else {
|
96 | 146b6003 | Dimitris Moraitis | $("#error-success p").text(ERRORS['DEFAULT']);
|
97 | eae0a59a | Dimitris Moraitis | }
|
98 | eae0a59a | Dimitris Moraitis |
|
99 | 42f67a2a | Dimitris Moraitis | // bring up error notification
|
100 | 42f67a2a | Dimitris Moraitis | var triggers = $("a#notification").overlay({
|
101 | 42f67a2a | Dimitris Moraitis | // some mask tweaks suitable for modal dialogs
|
102 | 42f67a2a | Dimitris Moraitis | mask: {
|
103 | 42f67a2a | Dimitris Moraitis | color: '#ebecff',
|
104 | 42f67a2a | Dimitris Moraitis | opacity: '0.9'
|
105 | 42f67a2a | Dimitris Moraitis | },
|
106 | 42f67a2a | Dimitris Moraitis | top: 'center',
|
107 | 42f67a2a | Dimitris Moraitis | closeOnClick: false,
|
108 | 42f67a2a | Dimitris Moraitis | oneInstance: false,
|
109 | 42f67a2a | Dimitris Moraitis | load: false,
|
110 | 42f67a2a | Dimitris Moraitis | onClose: function(){
|
111 | e5b0ba20 | Vangelis Koukis | // With partial refresh working properly,
|
112 | e5b0ba20 | Vangelis Koukis | // it is no longer necessary to refresh the whole page
|
113 | e5b0ba20 | Vangelis Koukis | // choose_view();
|
114 | 42f67a2a | Dimitris Moraitis | }
|
115 | 42f67a2a | Dimitris Moraitis | });
|
116 | 42f67a2a | Dimitris Moraitis | $("a#notification").data('overlay').load();
|
117 | 42f67a2a | Dimitris Moraitis | return false;
|
118 | 42f67a2a | Dimitris Moraitis | }
|
119 | 42f67a2a | Dimitris Moraitis |
|
120 | 42f67a2a | Dimitris Moraitis | // ajax success checking
|
121 | 146b6003 | Dimitris Moraitis | function ajax_success(status, password) {
|
122 | 42f67a2a | Dimitris Moraitis | // prepare the error message
|
123 | 42f67a2a | Dimitris Moraitis | // bring up success notification
|
124 | 8550e831 | Markos Gogoulos | if (status != undefined && SUCCESS[status]) {
|
125 | 8550e831 | Markos Gogoulos | if (password != undefined && status == "CREATE_VM_SUCCESS") {
|
126 | 8550e831 | Markos Gogoulos | $("#error-success h3").text(SUCCESS[status]);
|
127 | 8550e831 | Markos Gogoulos | var CREATE_VM_SUCCESS_MSG = SUCCESS["CREATE_VM_SUCCESS_ONE"] + '<br />'
|
128 | 8550e831 | Markos Gogoulos | + SUCCESS["CREATE_VM_SUCCESS_TWO"] + '<br /><br />' + '<b>' + password + '</b>'
|
129 | 8550e831 | Markos Gogoulos | + '<br /><br />' + SUCCESS["CREATE_VM_SUCCESS_THREE"] ;
|
130 | 038383b1 | Dimitris Moraitis | $("#error-success div").html("<p>" + CREATE_VM_SUCCESS_MSG + "</p>");
|
131 | 8550e831 | Markos Gogoulos | } else {
|
132 | 8550e831 | Markos Gogoulos | $("#error-success h3").text(SUCCESS['HEADER']);
|
133 | 038383b1 | Dimitris Moraitis | $("#error-success div").text("<p>" + SUCCESS[status] + "</p>");
|
134 | 8550e831 | Markos Gogoulos | }
|
135 | 8550e831 | Markos Gogoulos | } else {
|
136 | 8550e831 | Markos Gogoulos | $("#error-success h3").text(SUCCESS['HEADER']);
|
137 | 038383b1 | Dimitris Moraitis | $("#error-success div").html("<p>" + SUCCESS['DEFAULT'] + "</p>");
|
138 | 8550e831 | Markos Gogoulos | |
139 | 8550e831 | Markos Gogoulos | }
|
140 | 8550e831 | Markos Gogoulos | |
141 | 8550e831 | Markos Gogoulos | |
142 | 42f67a2a | Dimitris Moraitis | var triggers = $("a#notification").overlay({
|
143 | 42f67a2a | Dimitris Moraitis | // some mask tweaks suitable for modal dialogs
|
144 | 42f67a2a | Dimitris Moraitis | mask: {
|
145 | 42f67a2a | Dimitris Moraitis | color: '#ebecff',
|
146 | 42f67a2a | Dimitris Moraitis | opacity: '0.9'
|
147 | 42f67a2a | Dimitris Moraitis | },
|
148 | 42f67a2a | Dimitris Moraitis | top: 'center',
|
149 | 42f67a2a | Dimitris Moraitis | closeOnClick: false,
|
150 | 42f67a2a | Dimitris Moraitis | oneInstance: false,
|
151 | 42f67a2a | Dimitris Moraitis | load: false,
|
152 | 42f67a2a | Dimitris Moraitis | onClose: function(){
|
153 | e5b0ba20 | Vangelis Koukis | // With partial refresh working properly,
|
154 | e5b0ba20 | Vangelis Koukis | // it is no longer necessary to refresh the whole page
|
155 | e5b0ba20 | Vangelis Koukis | // choose_view();
|
156 | 42f67a2a | Dimitris Moraitis | }
|
157 | 42f67a2a | Dimitris Moraitis | });
|
158 | 42f67a2a | Dimitris Moraitis | $("a#notification").data('overlay').load();
|
159 | 42f67a2a | Dimitris Moraitis | return false;
|
160 | 42f67a2a | Dimitris Moraitis | }
|
161 | 42f67a2a | Dimitris Moraitis | </script>
|
162 | cc7c5902 | Dimitris Moraitis | </head>
|
163 | cc7c5902 | Dimitris Moraitis | <body>
|
164 | cc7c5902 | Dimitris Moraitis | <div id="wrapper"> |
165 | ec06b07c | Dimitris Moraitis | <div id='user'> |
166 | ec06b07c | Dimitris Moraitis | <a href="#">{% trans "username" %}</a> | <a href="#">{% trans "settings" %}</a> |
167 | ec06b07c | Dimitris Moraitis | {% get_available_languages as LANGUAGES %} |
168 | 421369dc | user | {% for lang in LANGUAGES %} |
169 | ec06b07c | Dimitris Moraitis | | |
170 | ec06b07c | Dimitris Moraitis | <a {% if == lang.0 %}class="current_lang" {% else %} href="/lang/?l={{lang.0}}" {% endif %}>{{lang.0}}</a> |
171 | 421369dc | user | {% endfor %} |
172 | 421369dc | user | </div>
|
173 | 3b363b8e | Christodoulos Psaltis | <div id='header'> |
174 | cc7c5902 | Dimitris Moraitis | <a href="/" class="logo"> |
175 | 3b363b8e | Christodoulos Psaltis | <img src="static/nefo.png" alt="+nefo"/> |
176 | cc7c5902 | Dimitris Moraitis | </a>
|
177 | 03b3fa7e | Christodoulos Psaltis | <div class='fatborder'></div> |
178 | cc7c5902 | Dimitris Moraitis | </div>
|
179 | cc7c5902 | Dimitris Moraitis | <!-- tabs -->
|
180 | cc7c5902 | Dimitris Moraitis | <ul class="css-tabs"> |
181 | 0dedf601 | Christodoulos Psaltis | <li><a href="machines" title="{% trans "manage virtual " %}" class="primary" id="machines"> |
182 | 0dedf601 | Christodoulos Psaltis | {% trans "machines" %}</a></li> |
183 | 0dedf601 | Christodoulos Psaltis | <li><a href="disks" title="{% trans "manage storage " %}" class="primary" id="disks"> |
184 | 0dedf601 | Christodoulos Psaltis | {% trans "disks" %}</a></li> |
185 | 0dedf601 | Christodoulos Psaltis | <li><a href="images" title="{% trans "manage images" %}" class="primary" id="images"> |
186 | 0dedf601 | Christodoulos Psaltis | {% trans "images" %}</a></li> |
187 | 0dedf601 | Christodoulos Psaltis | <li><a href="networks" title="{% trans "configure " %}" class="primary" id="networks"> |
188 | 0dedf601 | Christodoulos Psaltis | {% trans "networks" %}</a></li> |
189 | 0dedf601 | Christodoulos Psaltis | <li><a href="files" title="{% trans "your " %}" class="secondary" id="files"> |
190 | 0dedf601 | Christodoulos Psaltis | {% trans "files" %}</a></li> |
191 | 0dedf601 | Christodoulos Psaltis | <li><a href="desktops" title="{% trans "your " %}" class="secondary" id="desktops"> |
192 | 0dedf601 | Christodoulos Psaltis | {% trans "desktops" %}</a></li> |
193 | 0dedf601 | Christodoulos Psaltis | <li><a href="apps" title="{% trans "your " %}" class="secondary" id="apps"> |
194 | 0dedf601 | Christodoulos Psaltis | {% trans "apps" %}</a></li> |
195 | cc7c5902 | Dimitris Moraitis | </ul>
|
196 | 24d0c6a9 | Christodoulos Psaltis | <div class="more-tabs"><img src="static/arrow.png" id="arrow"></img></div> |
197 | cc7c5902 | Dimitris Moraitis | <div class="css-panes"> |
198 | 43df43aa | Markos Gogoulos | <div id="machines-pane" class="pane" style="display:block">{% include "machines.html" %}</div> |
199 | ec06b07c | Dimitris Moraitis | <div id="disks-pane" class="pane"></div> |
200 | ec06b07c | Dimitris Moraitis | <div id="images-pane" class="pane"></div> |
201 | ec06b07c | Dimitris Moraitis | <div id="networks-pane" class="pane"></div> |
202 | 50b398f6 | Christodoulos Psaltis | <div id="files-pane" class="pane"></div> |
203 | 50b398f6 | Christodoulos Psaltis | <div id="desktops-pane" class="pane"></div> |
204 | 50b398f6 | Christodoulos Psaltis | <div id="apps-pane" class="pane"></div> |
205 | cc7c5902 | Dimitris Moraitis | </div>
|
206 | cc7c5902 | Dimitris Moraitis | </div>
|
207 | cc7c5902 | Dimitris Moraitis | <!-- activate tabs with JavaScript -->
|
208 | cc7c5902 | Dimitris Moraitis | <script>
|
209 | cc7c5902 | Dimitris Moraitis | $(function() {
|
210 | e55b8703 | Christodoulos Psaltis | $('ul.css-tabs li').hover(function(){
|
211 | fd76a30f | Dimitris Moraitis | $(this).find('a:not(.current)').animate({top:'0px'},{queue:false,duration:150});
|
212 | e55b8703 | Christodoulos Psaltis | }, function(){
|
213 | 195e8f48 | Dimitris Moraitis | $('ul.css-tabs li a:not(.current)').animate({top:'9px'},{queue:false,duration:150});
|
214 | e55b8703 | Christodoulos Psaltis | });
|
215 | cc7c5902 | Dimitris Moraitis | });
|
216 | c3b3043d | Dimitris Moraitis |
|
217 | cc7c5902 | Dimitris Moraitis | $(function() {
|
218 | cc7c5902 | Dimitris Moraitis | $("ul.css-tabs").tabs("div.css-panes div.pane", {
|
219 | cc7c5902 | Dimitris Moraitis | onBeforeClick: function(event, i) {
|
220 | 195e8f48 | Dimitris Moraitis | $('ul.css-tabs li a').animate({top:'9px'},{queue:false,duration:150});
|
221 | cc7c5902 | Dimitris Moraitis | // get the pane to be opened
|
222 | cc7c5902 | Dimitris Moraitis | var pane = this.getPanes().eq(i);
|
223 | ec06b07c | Dimitris Moraitis | pane.text('');
|
224 | cc7c5902 | Dimitris Moraitis | // load it with a page specified in the tab's href attribute
|
225 | 42f67a2a | Dimitris Moraitis | pane.load(this.getTabs().eq(i).attr("href"),function(){if (!i) {choose_view()}});
|
226 | cc7c5902 | Dimitris Moraitis | }
|
227 | cc7c5902 | Dimitris Moraitis | });
|
228 | cc7c5902 | Dimitris Moraitis | });
|
229 | d932286d | Christodoulos Psaltis | |
230 | 37554ef1 | Dimitris Moraitis | // toggle main menu
|
231 | 24d0c6a9 | Christodoulos Psaltis | $("#arrow").click(function(event){
|
232 | 37554ef1 | Dimitris Moraitis | toggleMenu();
|
233 | 42f67a2a | Dimitris Moraitis | });
|
234 | 42f67a2a | Dimitris Moraitis | |
235 | cc7c5902 | Dimitris Moraitis | </script>
|
236 | cc7c5902 | Dimitris Moraitis | </body>
|
237 | cc7c5902 | Dimitris Moraitis | </html>
|