Statistics
| Branch: | Tag: | Revision:

root / ui / templates / home.html @ 6b1c18d5

History | View | Annotate | Download (28.6 kB)

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

4 a5bc3755 Vangelis Koukis
Redistribution and use in source and binary forms, with or
5 a5bc3755 Vangelis Koukis
without modification, are permitted provided that the following
6 a5bc3755 Vangelis Koukis
conditions are met:
7 a5bc3755 Vangelis Koukis

8 a5bc3755 Vangelis Koukis
  1. Redistributions of source code must retain the above
9 a5bc3755 Vangelis Koukis
     copyright notice, this list of conditions and the following
10 a5bc3755 Vangelis Koukis
     disclaimer.
11 a5bc3755 Vangelis Koukis

12 a5bc3755 Vangelis Koukis
  2. Redistributions in binary form must reproduce the above
13 a5bc3755 Vangelis Koukis
     copyright notice, this list of conditions and the following
14 a5bc3755 Vangelis Koukis
     disclaimer in the documentation and/or other materials
15 a5bc3755 Vangelis Koukis
     provided with the distribution.
16 a5bc3755 Vangelis Koukis

17 a5bc3755 Vangelis Koukis
THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS
18 a5bc3755 Vangelis Koukis
OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
19 a5bc3755 Vangelis Koukis
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
20 a5bc3755 Vangelis Koukis
PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR
21 a5bc3755 Vangelis Koukis
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
22 a5bc3755 Vangelis Koukis
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
23 a5bc3755 Vangelis Koukis
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
24 a5bc3755 Vangelis Koukis
USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
25 a5bc3755 Vangelis Koukis
AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
26 a5bc3755 Vangelis Koukis
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
27 a5bc3755 Vangelis Koukis
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
28 a5bc3755 Vangelis Koukis
POSSIBILITY OF SUCH DAMAGE.
29 a5bc3755 Vangelis Koukis

30 a5bc3755 Vangelis Koukis
The views and conclusions contained in the software and
31 a5bc3755 Vangelis Koukis
documentation are those of the authors and should not be
32 a5bc3755 Vangelis Koukis
interpreted as representing official policies, either expressed
33 a5bc3755 Vangelis Koukis
or implied, of GRNET S.A.
34 a5bc3755 Vangelis Koukis
-->
35 a5bc3755 Vangelis Koukis
36 4ea5cc44 Mike Muzurakis
<html>
37 4ea5cc44 Mike Muzurakis
38 d7f0ad6e provetza
{% load i18n %}
39 cc7c5902 Dimitris Moraitis
<!DOCTYPE html>
40 cc7c5902 Dimitris Moraitis
<head>
41 a226ff9f Christodoulos Psaltis
    <title>~okeanos</title>
42 f533f224 Vangelis Koukis
    <!-- include the Tools -->
43 146b6003 Dimitris Moraitis
    <!-- jquery tools minified for deployment-->
44 01864f44 Dimitris Moraitis
    <script src="static/jquery.tools.min.js"></script>
45 f533f224 Vangelis Koukis
    <!-- jquery tools source for JS debugging -->
46 01864f44 Dimitris Moraitis
    <!--
47 f533f224 Vangelis Koukis
    <script src="http://flowplayer.org/tools/download/1.2.5/jquery-1.4.2.js"></script>
48 f533f224 Vangelis Koukis
    <script src="http://flowplayer.org/tools/download/1.2.5/tabs/tabs.js"></script>
49 f533f224 Vangelis Koukis
    <script src="http://flowplayer.org/tools/download/1.2.5/scrollable/scrollable.js"></script>
50 f533f224 Vangelis Koukis
    <script src="http://flowplayer.org/tools/download/1.2.5/overlay/overlay.js"></script>
51 f533f224 Vangelis Koukis
    <script src="http://flowplayer.org/tools/download/1.2.5/rangeinput/rangeinput.js"></script>
52 f533f224 Vangelis Koukis
    <script src="http://flowplayer.org/tools/download/1.2.5/toolbox/toolbox.expose.js"></script>
53 01864f44 Dimitris Moraitis
    -->
54 fb66080c Dimitris Moraitis
    <script src="static/jquery.cookie.js"></script>
55 aff0be51 Kostas Papadimitriou
    <script src="static/jquery.client.js"></script>
56 d2f03cb3 Mike Muzurakis
    <script src="static/json2.js"></script>
57 a4531705 Christodoulos Psaltis
    <script src="static/jquery.dataTables.min.js"></script>
58 19e01943 Kostas Papadimitriou
    <script src="static/invitations.js"></script>
59 7b7e768e Christodoulos Psaltis
    <script src="static/synnefo.js"></script>
60 19e01943 Kostas Papadimitriou
61 f533f224 Vangelis Koukis
    <link rel="stylesheet" type="text/css" href="static/main.css"/>
62 a226ff9f Christodoulos Psaltis
    <!--[if IE]><style type="text/css" media="all">@import url(static/ie.css);</style><![endif]-->
63 42f67a2a Dimitris Moraitis
    <script>
64 a657c49e Kostas Papadimitriou
        // empty object for console to avoid errors in browsers that don't support it
65 2b837adf Kostas Papadimitriou
        if (!window.console) {window.console = {}; window.console.log = window.console.info = window.console.debug =
66 2b837adf Kostas Papadimitriou
            window.console.error = function() {}};
67 a657c49e Kostas Papadimitriou

68 f533f224 Vangelis Koukis
        //populate available image icons array
69 f533f224 Vangelis Koukis
        var os_icons = {{image_icons|safe}};
70 f533f224 Vangelis Koukis

71 eae0a59a Dimitris Moraitis
        // timeout value from settings.py
72 d36493ce Dimitris Moraitis
        var TIMEOUT = {{timeout}};
73 7b03c69d Dimitris Moraitis
        var UPDATE_INTERVAL = {{update_interval}};
74 8e5122dd Kostas Papadimitriou
        var LOGOUT_REDIRECT = undefined;
75 54417a11 Kostas Papadimitriou
        var INVITATIONS_URL = "{% url invitations %}";
76 67921b5c Kostas Papadimitriou
        var INVITATIONS_TITLE = "{% trans "Invite people" %}";
77 9040e9fe Kostas Papadimitriou
        var APP_DEBUG = {% if DEBUG %}true{% else %}false{% endif %};
78 54417a11 Kostas Papadimitriou
        var FEEDBACK_URL = "{% url feedback %}";
79 f860d8a3 Vangelis Koukis
        var FEEDBACK_TITLE = "{% trans "Send feedback" %}";
80 3df307d7 Christodoulos Psaltis

81 3df307d7 Christodoulos Psaltis
        // server statuses and transitions
82 f533f224 Vangelis Koukis
        var STATUSES = {
83 f533f224 Vangelis Koukis
            'UNKNOWN'   : '{% trans "Unknown" %}',
84 eae0a59a Dimitris Moraitis
            'BUILD'     : '{% trans "Building" %}',
85 f533f224 Vangelis Koukis
            'REBOOT'    : '{% trans "Rebooting" %}',
86 eae0a59a Dimitris Moraitis
            'STOPPED'   : '{% trans "Stopped" %}',
87 f533f224 Vangelis Koukis
            'ACTIVE'    : '{% trans "Running" %}',
88 f533f224 Vangelis Koukis
            'ERROR'     : '{% trans "Error" %}'
89 f533f224 Vangelis Koukis
        };
90 f533f224 Vangelis Koukis

91 f533f224 Vangelis Koukis
        var TRANSITIONS = {
92 f533f224 Vangelis Koukis
            'Shutting down' : '{% trans "Shutting down" %}',
93 f533f224 Vangelis Koukis
            'Rebooting'     : '{% trans "Rebooting" %}',
94 f533f224 Vangelis Koukis
            'Starting'      : '{% trans "Starting" %}',
95 3df307d7 Christodoulos Psaltis
            'Destroying'    : '{% trans "Destroying" %}',
96 f459a610 Christodoulos Psaltis
            'Connecting'    : '{% trans "Connecting" %}',   // used only in networks
97 f459a610 Christodoulos Psaltis
            'Disconnecting' : '{% trans "Disconnecting" %}' // used only in networks
98 eae0a59a Dimitris Moraitis
        };
99 f533f224 Vangelis Koukis

100 3df307d7 Christodoulos Psaltis
        // Server statuses and transitions that should be displayed as active or inactive
101 f533f224 Vangelis Koukis
        var ACTIVE_STATES = [
102 f533f224 Vangelis Koukis
            '{% trans "Building" %}',
103 f533f224 Vangelis Koukis
            '{% trans "Rebooting" %}',
104 f533f224 Vangelis Koukis
            '{% trans "Running" %}',
105 f533f224 Vangelis Koukis
            '{% trans "Shutting down" %}',
106 f533f224 Vangelis Koukis
            '{% trans "Rebooting" %}',
107 f533f224 Vangelis Koukis
            '{% trans "Destroying" %}'
108 f533f224 Vangelis Koukis
        ];
109 f533f224 Vangelis Koukis

110 f533f224 Vangelis Koukis
        var INACTIVE_STATES = [
111 f533f224 Vangelis Koukis
            '{% trans "Unknown" %}',
112 f533f224 Vangelis Koukis
            '{% trans "Stopped" %}',
113 f533f224 Vangelis Koukis
            '{% trans "Error" %}',
114 f533f224 Vangelis Koukis
            '{% trans "Starting" %}',
115 f533f224 Vangelis Koukis
        ];
116 f533f224 Vangelis Koukis

117 3df307d7 Christodoulos Psaltis
        // Network statuses and transitions
118 3df307d7 Christodoulos Psaltis
        var NET_STATES = {
119 3ad6f576 Christodoulos Psaltis
            'ACTIVE'        : '{% trans "Private network" %}',  // this comes from the API
120 3ad6f576 Christodoulos Psaltis
            'DELETED'       : '{% trans "Deleted" %}',          // this comes from the API
121 3df307d7 Christodoulos Psaltis
            'Destroying'    : '{% trans "Destroying" %}',
122 3df307d7 Christodoulos Psaltis
            'Connecting'    : '{% trans "Connecting" %}',
123 3df307d7 Christodoulos Psaltis
            'Disconnecting' : '{% trans "Disconnecting" %}'
124 3df307d7 Christodoulos Psaltis
        };
125 3df307d7 Christodoulos Psaltis

126 eae0a59a Dimitris Moraitis
        var ERRORS = {
127 eae0a59a Dimitris Moraitis
            // error message header
128 f533f224 Vangelis Koukis
            'HEADER' : '{% trans "Error" %}',
129 eae0a59a Dimitris Moraitis
            // default
130 146b6003 Dimitris Moraitis
            'DEFAULT' : '{% trans "Could not contact the service. Please check your network connectivity and try again." %}',
131 eae0a59a Dimitris Moraitis
            // bad request
132 eae0a59a Dimitris Moraitis
            '400' : '{% trans "Malformed request." %}',
133 eae0a59a Dimitris Moraitis
            // not found
134 eae0a59a Dimitris Moraitis
            '404' : '{% trans "Your request has failed. Resource not found." %}',
135 eae0a59a Dimitris Moraitis
            // internal server error
136 ccd40764 Markos Gogoulos
            '500' : '{% trans "There has been an Internal Error. Our administrators have been notified." %}',
137 ccd40764 Markos Gogoulos
            // service unavailable
138 ccd40764 Markos Gogoulos
            '501' : '{% trans "This server has not been implemented yet." %}',
139 eae0a59a Dimitris Moraitis
            // service unavailable
140 f533f224 Vangelis Koukis
            '502' : '{% trans "Bad Gateway error." %}',
141 f533f224 Vangelis Koukis
            // service unavailable
142 a5093da5 Markos Gogoulos
            '503' : '{% trans "This service is unavailable right now, please try again later." %}',
143 80a8f602 Christodoulos Psaltis
            // no server handshake
144 80a8f602 Christodoulos Psaltis
            '0' : '{% trans "Could not contact the server." %}',
145 e2ccad35 Dimitris Moraitis
            // no images found
146 146b6003 Dimitris Moraitis
            'NO_IMAGES' : '{% trans "Cannot show the Create machine wizard: No images found." %}',
147 e2ccad35 Dimitris Moraitis
            // no flavors found
148 f533f224 Vangelis Koukis
            'NO_FLAVORS' : '{% trans "Cannot show the Create machine wizard: No machine configurations found." %}',
149 f533f224 Vangelis Koukis
            // error box title
150 f533f224 Vangelis Koukis
            'GENERIC_POPUP_HEADER' : '{% trans "Something seems to have gone wrong :( Here is what happened:" %}',
151 f533f224 Vangelis Koukis
            // no advanced details
152 f533f224 Vangelis Koukis
            'NO_DETAILS' : '{% trans "Νο advanced details provided" %}'
153 eae0a59a Dimitris Moraitis
        };
154 f533f224 Vangelis Koukis

155 eae0a59a Dimitris Moraitis
        var SUCCESS = {
156 f533f224 Vangelis Koukis
            'HEADER' : '{% trans "Success" %}',
157 146b6003 Dimitris Moraitis
            'DEFAULT' : '{% trans "Your request has been succefully executed." %}',
158 f533f224 Vangelis Koukis
            'PASSWORD' : '{% trans "Password:" %}',
159 aa0801aa Markos Gogoulos
            'CREATE_VM_SUCCESS' : '{% trans "Success" %}',
160 f533f224 Vangelis Koukis
            'CREATE_VM_SUCCESS_ONE' : '{% trans "Your new machine is now buidling... (this might take a few minutes)" %}',
161 def71253 Markos Gogoulos
            'CREATE_VM_SUCCESS_TWO' : '{% trans "Write down your password now:" %}',
162 f533f224 Vangelis Koukis
            'CREATE_VM_SUCCESS_THREE' : '{% trans "You will need this later to connect to your machine." %}',
163 f533f224 Vangelis Koukis
            'CREATE_VM_SUCCESS_FOUR' : '{% trans "After closing this window you will NOT be able to retrieve it again." %}'
164 eae0a59a Dimitris Moraitis
        };
165 f533f224 Vangelis Koukis

166 b495fe50 Mike Muzurakis
        var VARIOUS = {
167 b495fe50 Mike Muzurakis
            'CONFIRM' : '{% trans "Confirm" %}',
168 372f6c81 Mike Muzurakis
            'CANCEL' : '{% trans "Cancel" %}',
169 d6872a51 Christodoulos Psaltis
            'APPLY' : '{% trans "Apply" %}',
170 d6872a51 Christodoulos Psaltis
            'OFF' : '{% trans "Off" %}',
171 d6872a51 Christodoulos Psaltis
            'ON' : '{% trans "On" %}'
172 b495fe50 Mike Muzurakis
        };
173 b495fe50 Mike Muzurakis

174 f533f224 Vangelis Koukis
        // ajax error checking
175 038383b1 Dimitris Moraitis
        function ajax_error(status, serverID, action, responseText) {
176 716c3ead Dimitris Moraitis
             // close existing overlays to begin with
177 a226ff9f Christodoulos Psaltis
            close_all_overlays();
178 716c3ead Dimitris Moraitis
            // clear old deferred calls (stops all auto-updates)
179 716c3ead Dimitris Moraitis
            clearTimeout(deferred);
180 a226ff9f Christodoulos Psaltis

181 def71253 Markos Gogoulos
            $('#error-success').addClass('error');
182 def71253 Markos Gogoulos
            $('#error-success').removeClass('success');
183 a226ff9f Christodoulos Psaltis

184 038383b1 Dimitris Moraitis
            var serverName = '';
185 f533f224 Vangelis Koukis

186 4ea5cc44 Mike Muzurakis
            if (serverID !== undefined) {
187 a8e592c7 Dimitris Moraitis
                // standard view
188 4ea5cc44 Mike Muzurakis
                serverName = $("#" + serverID).find("span.name").text();
189 4ea5cc44 Mike Muzurakis
                if (serverName === "") { // list view
190 4ea5cc44 Mike Muzurakis
                    serverName = $("#" + serverID).parent().parent().find("span.name").text();
191 a8e592c7 Dimitris Moraitis
                }
192 038383b1 Dimitris Moraitis
            }
193 f533f224 Vangelis Koukis

194 42f67a2a Dimitris Moraitis
            // prepare the error message
195 146b6003 Dimitris Moraitis
            $("#error-success h3").text(ERRORS['HEADER']);
196 4ea5cc44 Mike Muzurakis
            if (responseText !== undefined) {
197 f533f224 Vangelis Koukis
                var errors = parse_error(responseText, status), details = '';
198 4ea5cc44 Mike Muzurakis
                if (serverName) {
199 4ea5cc44 Mike Muzurakis
                    serverName = "<p>{% trans "Server" %}: " + serverName + "</p>";
200 038383b1 Dimitris Moraitis
                }
201 9040e9fe Kostas Papadimitriou

202 4ea5cc44 Mike Muzurakis
                if ((errors[0].details === undefined) || (errors[0].details === "")) {
203 f533f224 Vangelis Koukis
                    details = ERRORS["NO_DETAILS"];
204 9040e9fe Kostas Papadimitriou
                    
205 9040e9fe Kostas Papadimitriou
                    // if no details message show debug info
206 9040e9fe Kostas Papadimitriou
                    if (window.APP_DEBUG) {
207 9040e9fe Kostas Papadimitriou
                        details = responseText;
208 9040e9fe Kostas Papadimitriou
                        try {
209 9040e9fe Kostas Papadimitriou
                            console.trace();
210 9040e9fe Kostas Papadimitriou
                        } catch (err) {
211 9040e9fe Kostas Papadimitriou
                        }
212 9040e9fe Kostas Papadimitriou
                    }
213 f533f224 Vangelis Koukis
                } else {
214 f533f224 Vangelis Koukis
                    details = errors[0].details;
215 a8e592c7 Dimitris Moraitis
                }
216 f533f224 Vangelis Koukis

217 f533f224 Vangelis Koukis
                $("#error-success .machine-now-building").html(ERRORS["GENERIC_POPUP_HEADER"]);
218 f533f224 Vangelis Koukis
                $("#error-success .popup-header").addClass("popup-header-error");
219 f533f224 Vangelis Koukis
                $("#error-success").addClass("popup-border-error");
220 f533f224 Vangelis Koukis
                $("#error-success .password-container").hide();
221 f533f224 Vangelis Koukis
                $("#error-success .popup-details").addClass("popup-details-error");
222 f533f224 Vangelis Koukis
                $("#error-success .popup-separator").addClass("popup-separator-error");
223 9040e9fe Kostas Papadimitriou
                $("#error-success .popup-details").html("<p>" + 
224 9040e9fe Kostas Papadimitriou
                    (errors[0].message || ERRORS[errors[0].code] || serverID) + 
225 9040e9fe Kostas Papadimitriou
                    "</p>" + serverName + "<p>{% trans "Action" %}:" + 
226 9040e9fe Kostas Papadimitriou
                    action + "</p><p>{% trans "Code" %}: " + errors[0].code + 
227 9040e9fe Kostas Papadimitriou
                    "<p><a class='expand-details' href='#'>{% trans 'Details' %}</a><div class='more-details'>" + 
228 9040e9fe Kostas Papadimitriou
                    details + "</div></p>");
229 9040e9fe Kostas Papadimitriou

230 4ea5cc44 Mike Muzurakis
            } else if (ERRORS[status] !== undefined) {
231 4ea5cc44 Mike Muzurakis
                if (serverID === undefined) {
232 7020cb54 Markos Gogoulos
                    //eg no_images, no_flavors cases
233 7020cb54 Markos Gogoulos
                    $("#error-success .machine-now-building").html(ERRORS["GENERIC_POPUP_HEADER"]);
234 7020cb54 Markos Gogoulos
                    $("#error-success .popup-header").addClass("popup-header-error");
235 7020cb54 Markos Gogoulos
                    $("#error-success").addClass("popup-border-error");
236 7020cb54 Markos Gogoulos
                    $("#error-success .password-container").hide();
237 7020cb54 Markos Gogoulos
                    $("#error-success .popup-details").addClass("popup-details-error");
238 7020cb54 Markos Gogoulos
                    $("#error-success .popup-separator").addClass("popup-separator-error");
239 4ea5cc44 Mike Muzurakis
                    $("#error-success .popup-details").html("<p>" + ERRORS[status] + "</p>");
240 e1a023a6 Markos Gogoulos
                } else {
241 1532343a Markos Gogoulos
                    $("#error-success .machine-now-building").html(ERRORS["GENERIC_POPUP_HEADER"]);
242 1532343a Markos Gogoulos
                    $("#error-success .popup-header").addClass("popup-header-error");
243 1532343a Markos Gogoulos
                    $("#error-success").addClass("popup-border-error");
244 1532343a Markos Gogoulos
                    $("#error-success .password-container").hide();
245 1532343a Markos Gogoulos
                    $("#error-success .popup-details").addClass("popup-details-error");
246 1532343a Markos Gogoulos
                    $("#error-success .popup-separator").addClass("popup-separator-error");
247 4ea5cc44 Mike Muzurakis
                    $("#error-success .popup-details").html("<p>" + ERRORS[status] + "</p><p>" + serverName + "</p>");
248 e1a023a6 Markos Gogoulos
                }
249 eae0a59a Dimitris Moraitis
            } else {
250 266597ae Markos Gogoulos
                $("#error-success .machine-now-building").html(ERRORS["DEFAULT"]);
251 4ea5cc44 Mike Muzurakis
                $("#error-success .popup-header").addClass("popup-header-error");
252 4ea5cc44 Mike Muzurakis
                $("#error-success").addClass("popup-border-error");
253 4ea5cc44 Mike Muzurakis
                $("#error-success .password-container").hide();
254 266597ae Markos Gogoulos
                $("#error-success .popup-details").hide();
255 266597ae Markos Gogoulos
                $("#error-success .popup-separator").hide();
256 f533f224 Vangelis Koukis
            }
257 4ea5cc44 Mike Muzurakis
            $("#error-success p:first").css("padding-bottom", "10px");
258 4ea5cc44 Mike Muzurakis
            $("#error-success p:first").css("color", "#800000");
259 f533f224 Vangelis Koukis
            $("#error-success div.more-details").hide();
260 4ea5cc44 Mike Muzurakis
            $("#error-success a.expand-details").live('click', function () {
261 f533f224 Vangelis Koukis
                $(this).parent().parent().find("div.more-details").slideToggle(600);
262 f533f224 Vangelis Koukis
                return false;
263 4ea5cc44 Mike Muzurakis
            });
264 f533f224 Vangelis Koukis
            //stop the progress icon and hide the wizard
265 4ea5cc44 Mike Muzurakis
            if (action !== undefined) {
266 4ea5cc44 Mike Muzurakis
                if (action === 'Create VM') {
267 f533f224 Vangelis Koukis
                    $('#wizard #start').text('{% trans "Create VM" %}');
268 f533f224 Vangelis Koukis
                    $("#wizard").hide();
269 4ea5cc44 Mike Muzurakis
                } else if (action === 'Create network') {
270 f533f224 Vangelis Koukis
                    $('#networks-wizard').hide();
271 4ea5cc44 Mike Muzurakis
                } else if (action === 'Add server to network') {
272 f533f224 Vangelis Koukis
                    $('#add-machines-wizard').hide();
273 f533f224 Vangelis Koukis
                }
274 eae0a59a Dimitris Moraitis
            }
275 f533f224 Vangelis Koukis

276 54417a11 Kostas Papadimitriou
            
277 54417a11 Kostas Papadimitriou
            // prepare ajax call to get called when user clicks on 
278 54417a11 Kostas Papadimitriou
            // send error report button
279 54417a11 Kostas Papadimitriou
            function initialize_error_report(cont, extra_data) {
280 54417a11 Kostas Papadimitriou
                var cont = $(cont);
281 54417a11 Kostas Papadimitriou
                var sel = function(sel) {return $(sel, cont)};
282 54417a11 Kostas Papadimitriou
                var btn = sel(".send-btn");
283 54417a11 Kostas Papadimitriou
                var extra_data = extra_data;
284 54417a11 Kostas Papadimitriou

285 54417a11 Kostas Papadimitriou
                // clear previous callbacks
286 54417a11 Kostas Papadimitriou
                btn.unbind('click');
287 54417a11 Kostas Papadimitriou
                btn.click(function(){
288 54417a11 Kostas Papadimitriou
                    // wrap in its own try catch to avoid retriggering ajax_error
289 54417a11 Kostas Papadimitriou
                    try {
290 54417a11 Kostas Papadimitriou
                        var data = $.extend({'error_info': $.extend({}, extra_data)}, get_user_data());
291 54417a11 Kostas Papadimitriou
                        var payload = {'feedback-msg': "Automated error report", 'feedback-data': JSON.stringify(data)};
292 54417a11 Kostas Papadimitriou

293 d790d9b7 Kostas Papadimitriou
                        // we will close error overlay to display feedback form
294 d790d9b7 Kostas Papadimitriou
                        // set feedback pending flag to not reload the window url
295 d790d9b7 Kostas Papadimitriou
                        // unless the user is done with the feedback
296 d790d9b7 Kostas Papadimitriou
                        window.FEEDBACK_PENDING = true;
297 d790d9b7 Kostas Papadimitriou

298 d790d9b7 Kostas Papadimitriou
                        $("a#notification").overlay().close();
299 d790d9b7 Kostas Papadimitriou

300 d790d9b7 Kostas Papadimitriou
                        var errorCode = extra_data[0] || -10;
301 d790d9b7 Kostas Papadimitriou
                        var errorType = extra_data[1] || "Generic error";
302 d790d9b7 Kostas Papadimitriou
                        var errorAction = extra_data[2] || "noaction";
303 d790d9b7 Kostas Papadimitriou
                        var errorData = extra_data[3] || "";
304 d790d9b7 Kostas Papadimitriou
                            
305 d790d9b7 Kostas Papadimitriou
                        fdb_msg =   "Error report\n" +
306 d790d9b7 Kostas Papadimitriou
                                    "------------\n" + 
307 d790d9b7 Kostas Papadimitriou
                                    "Code: " + errorCode + "\n" + 
308 d790d9b7 Kostas Papadimitriou
                                    "Type: " + errorType + "\n" + 
309 d790d9b7 Kostas Papadimitriou
                                    "Action: " + errorAction + "\n" + 
310 d790d9b7 Kostas Papadimitriou
                                    "Data: " + errorData + "\n\n" + 
311 d790d9b7 Kostas Papadimitriou
                                    "Please describe the actions that triggered the error:\n";
312 d790d9b7 Kostas Papadimitriou

313 d790d9b7 Kostas Papadimitriou
                        setTimeout('show_feedback_form(fdb_msg, 1); $("#exposeMask").show();', 400);
314 54417a11 Kostas Papadimitriou
                    } catch (err) {
315 d790d9b7 Kostas Papadimitriou
                        console.log(err);
316 d790d9b7 Kostas Papadimitriou
                        sel(".send-btn").hide();
317 d790d9b7 Kostas Papadimitriou
                        sel(".errormsg").fadeIn();
318 d790d9b7 Kostas Papadimitriou
                        window.FEEDBACK_PENDING = false;
319 54417a11 Kostas Papadimitriou
                    }
320 54417a11 Kostas Papadimitriou
                });
321 54417a11 Kostas Papadimitriou
            }
322 54417a11 Kostas Papadimitriou

323 42f67a2a Dimitris Moraitis
            // bring up error notification
324 42f67a2a Dimitris Moraitis
            var triggers = $("a#notification").overlay({
325 42f67a2a Dimitris Moraitis
                // some mask tweaks suitable for modal dialogs
326 716c3ead Dimitris Moraitis
                mask: '#666',
327 42f67a2a Dimitris Moraitis
                top: 'center',
328 42f67a2a Dimitris Moraitis
                closeOnClick: false,
329 54417a11 Kostas Papadimitriou
                fixed: false,
330 42f67a2a Dimitris Moraitis
                oneInstance: false,
331 42f67a2a Dimitris Moraitis
                load: false,
332 4ea5cc44 Mike Muzurakis
                onClose: function () {
333 d790d9b7 Kostas Papadimitriou
                    // user requested feedback from error page
334 d790d9b7 Kostas Papadimitriou
                    if (!window.FEEDBACK_PENDING) {
335 d790d9b7 Kostas Papadimitriou
                        // refresh the whole page
336 d790d9b7 Kostas Papadimitriou
                       location.reload();
337 d790d9b7 Kostas Papadimitriou
                    }
338 54417a11 Kostas Papadimitriou
                },
339 54417a11 Kostas Papadimitriou
                onLoad: function() {
340 54417a11 Kostas Papadimitriou
                    initialize_error_report($(this.getOverlay()), [status, serverID, action, responseText]);
341 42f67a2a Dimitris Moraitis
                }
342 54417a11 Kostas Papadimitriou

343 42f67a2a Dimitris Moraitis
            });
344 a226ff9f Christodoulos Psaltis

345 716c3ead Dimitris Moraitis
            // we need to give the browser some time to close the old overlays before opening the new one
346 716c3ead Dimitris Moraitis
            setTimeout("$('a#notification').data('overlay').load()",400);
347 42f67a2a Dimitris Moraitis
            return false;
348 42f67a2a Dimitris Moraitis
        }
349 f533f224 Vangelis Koukis

350 42f67a2a Dimitris Moraitis
        // ajax success checking
351 146b6003 Dimitris Moraitis
        function ajax_success(status, password) {
352 42f67a2a Dimitris Moraitis
            // prepare the error message
353 42f67a2a Dimitris Moraitis
            // bring up success notification
354 def71253 Markos Gogoulos
            $('#error-success').addClass('success');
355 def71253 Markos Gogoulos
            $('#error-success').removeClass('error');
356 4ea5cc44 Mike Muzurakis
            if (status !== undefined && SUCCESS[status]) {
357 4ea5cc44 Mike Muzurakis
                if (password !== undefined && status === "CREATE_VM_SUCCESS") {
358 f533f224 Vangelis Koukis

359 f533f224 Vangelis Koukis
                    //stop the progress icon and hide the wizard
360 f533f224 Vangelis Koukis
                    $('#wizard #start').text('{% trans "Create VM" %}');
361 f533f224 Vangelis Koukis
                    $("#wizard").hide();
362 f533f224 Vangelis Koukis

363 97b6ee61 Markos Gogoulos
                    $("#error-success h3 span.header-box").text(SUCCESS[status]);
364 f533f224 Vangelis Koukis
                    var CREATE_VM_SUCCESS_MSG = SUCCESS["CREATE_VM_SUCCESS_THREE"] + '<br / >'
365 f533f224 Vangelis Koukis
                        + SUCCESS["CREATE_VM_SUCCESS_FOUR"];
366 f533f224 Vangelis Koukis
                    $("#error-success div.machine-now-building").html(SUCCESS["CREATE_VM_SUCCESS_ONE"]);
367 f533f224 Vangelis Koukis
                    $("#error-success .popup-header").removeClass("popup-header-error");
368 f533f224 Vangelis Koukis
                    $("#error-success").removeClass("popup-border-error");
369 f533f224 Vangelis Koukis
                    $("#error-success .popup-details").removeClass("popup-details-error");
370 f533f224 Vangelis Koukis
                    $("#error-success .popup-separator").removeClass("popup-separator-error");
371 f533f224 Vangelis Koukis
                    $("#error-success .password-container").show();
372 def71253 Markos Gogoulos

373 4ea5cc44 Mike Muzurakis
                    $("#error-success .popup-details").html("</div><div class=\"write-password-details\">" + CREATE_VM_SUCCESS_MSG + "</div>");
374 4ea5cc44 Mike Muzurakis
                    $("#error-success div.password").html("<div class=\"write-password\">" + SUCCESS["CREATE_VM_SUCCESS_TWO"] + "<div class=\"write-password-password\">" + password + "</div></div>");
375 f533f224 Vangelis Koukis
                    //$("#error-success div.write-password").html(SUCCESS["CREATE_VM_SUCCESS_TWO"]);
376 f533f224 Vangelis Koukis
                    //$("#error-success div.write-password-details").html(CREATE_VM_SUCCESS_MSG);
377 8550e831 Markos Gogoulos
                } else {
378 8550e831 Markos Gogoulos
                    $("#error-success h3").text(SUCCESS['HEADER']);
379 f533f224 Vangelis Koukis
                    $("#error-success div.popup-body-inner").text("<p>" + SUCCESS[status] + "</p>");
380 8550e831 Markos Gogoulos
                }
381 8550e831 Markos Gogoulos
            } else {
382 8550e831 Markos Gogoulos
                $("#error-success h3").text(SUCCESS['HEADER']);
383 f533f224 Vangelis Koukis
                $("#error-success div.popup-body-inner").html("<p>" + SUCCESS['DEFAULT'] + "</p>");
384 8550e831 Markos Gogoulos
            }
385 8550e831 Markos Gogoulos

386 42f67a2a Dimitris Moraitis
            var triggers = $("a#notification").overlay({
387 42f67a2a Dimitris Moraitis
                // some mask tweaks suitable for modal dialogs
388 716c3ead Dimitris Moraitis
                mask: '#666',
389 42f67a2a Dimitris Moraitis
                top: 'center',
390 42f67a2a Dimitris Moraitis
                closeOnClick: false,
391 42f67a2a Dimitris Moraitis
                oneInstance: false,
392 42f67a2a Dimitris Moraitis
                load: false,
393 4ea5cc44 Mike Muzurakis
                onClose: function () {
394 e5b0ba20 Vangelis Koukis
                    // With partial refresh working properly,
395 e5b0ba20 Vangelis Koukis
                    // it is no longer necessary to refresh the whole page
396 e5b0ba20 Vangelis Koukis
                    // choose_view();
397 42f67a2a Dimitris Moraitis
                }
398 42f67a2a Dimitris Moraitis
            });
399 42f67a2a Dimitris Moraitis
            $("a#notification").data('overlay').load();
400 42f67a2a Dimitris Moraitis
            return false;
401 42f67a2a Dimitris Moraitis
        }
402 42f67a2a Dimitris Moraitis
    </script>
403 cc7c5902 Dimitris Moraitis
</head>
404 cc7c5902 Dimitris Moraitis
<body>
405 f533f224 Vangelis Koukis
    <div id="container">
406 3b363b8e Christodoulos Psaltis
        <div id='header'>
407 3f545a3e Kostas Papadimitriou
            <div id='user'>
408 ce88aad7 Kostas Papadimitriou
                <div class="usermenu">
409 3f545a3e Kostas Papadimitriou
                    <div class="username">{{ request.user.uniq }}</div>
410 ce88aad7 Kostas Papadimitriou
                    <ul class="useractions">
411 f860d8a3 Vangelis Koukis
                        <li class="invitations"><a class="action" href="#">{% trans "invite friends..." %}</a></li>
412 f860d8a3 Vangelis Koukis
                        <li class="feedback"><a class="action" href="#">{% trans "send feedback..." %}</a></li>
413 d389b440 Kostas Papadimitriou
                        <li class="logout last"><a class="action" href="#">{% trans "logout" %}</a></li>
414 ce88aad7 Kostas Papadimitriou
                    </ul>
415 ce88aad7 Kostas Papadimitriou
                </div>
416 ce88aad7 Kostas Papadimitriou
                <div class="langmenu">
417 2797d46a Kostas Papadimitriou
                <a class="current_lang">en</a>
418 2797d46a Kostas Papadimitriou
                {% comment %}
419 f533f224 Vangelis Koukis
                {% get_available_languages as LANGUAGES %}
420 f533f224 Vangelis Koukis
                {% for lang in LANGUAGES %}
421 2797d46a Kostas Papadimitriou
                <a {% if  == lang.0 %}class="current_lang" {% else %}  href="/lang/?l={{lang.0}}" {% endif %}>{{lang.0}}</a>
422 ce88aad7 Kostas Papadimitriou
                    {% if not forloop.last %}<span class="sep">~</span>{% endif %}
423 ce88aad7 Kostas Papadimitriou
                    {% endfor %}
424 2797d46a Kostas Papadimitriou
                {% endcomment %}
425 ce88aad7 Kostas Papadimitriou
                </div>
426 f533f224 Vangelis Koukis
            </div>
427 f533f224 Vangelis Koukis
            <div class="header-logo">
428 f533f224 Vangelis Koukis
                <a href="/">
429 c0f6fb49 Kostas Papadimitriou
                    <img src="static/okeanos-logo-alpha.png" alt="okeanos (alpha)"/>
430 f533f224 Vangelis Koukis
                </a>
431 f533f224 Vangelis Koukis
            </div>
432 cc7c5902 Dimitris Moraitis
        </div>
433 f533f224 Vangelis Koukis
        <div id="content">
434 f533f224 Vangelis Koukis
            <div id="wrapper">
435 f533f224 Vangelis Koukis
                <!-- tabs -->
436 f533f224 Vangelis Koukis
                <div class="tab-name">{% trans "machines" %}</div>
437 f533f224 Vangelis Koukis
                <div class="tab-separator"></div>
438 f533f224 Vangelis Koukis
                <ul class="css-tabs">
439 f533f224 Vangelis Koukis
                    <li><a href="machines" title="{% trans "manage  virtual " %}" class="primary" id="machines">
440 f533f224 Vangelis Koukis
                        <img src="static/machines-icon.png" /></a></li><div class="tab-separator"></div>
441 f533f224 Vangelis Koukis
                    <li><a href="networks" title="{% trans "configure " %}" class="primary" id="networks">
442 f533f224 Vangelis Koukis
                        <img src="static/networks-icon.png" /></a></li><div class="tab-separator"></div>
443 f533f224 Vangelis Koukis
                    <li><a href="disks" title="{% trans "manage  storage " %}" class="primary" id="disks">
444 f533f224 Vangelis Koukis
                        <img src="static/disks-icon.png" /></a></li>
445 f533f224 Vangelis Koukis
                </ul>
446 f533f224 Vangelis Koukis
                <div class="css-panes">
447 e4f32f27 Mike Muzurakis
                    <div id="machines-pane" class="pane" style="display:block;"></div>
448 e4f32f27 Mike Muzurakis
                    <div id="networks-pane" class="pane"></div>
449 f533f224 Vangelis Koukis
                    <div id="disks-pane" class="pane"></div>
450 f533f224 Vangelis Koukis
                </div>
451 f533f224 Vangelis Koukis
            </div>
452 cc7c5902 Dimitris Moraitis
        </div>
453 f533f224 Vangelis Koukis
        {% include "footer.html" %}
454 cc7c5902 Dimitris Moraitis
    </div>
455 f533f224 Vangelis Koukis
456 cc7c5902 Dimitris Moraitis
    <!-- activate tabs with JavaScript -->
457 cc7c5902 Dimitris Moraitis
    <script>
458 f533f224 Vangelis Koukis

459 cc7c5902 Dimitris Moraitis
        $(function() {
460 87a29449 Dimitris Moraitis
            // check pane cookie to select the initial pane
461 87a29449 Dimitris Moraitis
            var initial = 0, pane = $.cookie("pane");
462 87a29449 Dimitris Moraitis
            if (pane > 0)
463 87a29449 Dimitris Moraitis
                initial = pane;
464 87a29449 Dimitris Moraitis
            //alert(initial);
465 f533f224 Vangelis Koukis
            $("ul.css-tabs").tabs("div.css-panes div.pane", {
466 87a29449 Dimitris Moraitis
                initialIndex: initial,
467 f533f224 Vangelis Koukis
                onBeforeClick: function(event, i) {
468 d60645d2 Mike Muzurakis
                    this.getPanes().children().remove();
469 f533f224 Vangelis Koukis
                    // get the pane to be opened
470 f533f224 Vangelis Koukis
                    var pane = this.getPanes().eq(i);
471 f533f224 Vangelis Koukis
                    //change the displaying title
472 f533f224 Vangelis Koukis
                    $(".tab-name").text(this.getTabs().eq(i).attr("href"));
473 f533f224 Vangelis Koukis
                    // load it with a page specified in the tab's href attribute
474 4ea5cc44 Mike Muzurakis
                    pane.load(this.getTabs().eq(i).attr("href"),function() {if (!i) {choose_view()}});
475 f533f224 Vangelis Koukis
                }
476 f533f224 Vangelis Koukis
            });
477 cc7c5902 Dimitris Moraitis
        });
478 f459a610 Christodoulos Psaltis

479 87a29449 Dimitris Moraitis
        // set pane cookie whenever the user clicks on a different pane
480 4ea5cc44 Mike Muzurakis
        $("ul.css-tabs a").click(function(i) {
481 87a29449 Dimitris Moraitis
            $.cookie("pane", $("ul.css-tabs a").index(this));
482 87a29449 Dimitris Moraitis
        });
483 f459a610 Christodoulos Psaltis

484 f533f224 Vangelis Koukis
        //change menu title on hover
485 f533f224 Vangelis Koukis
        $("ul.css-tabs li").hover(
486 f533f224 Vangelis Koukis
            function () {
487 f533f224 Vangelis Koukis
                if ($(this).find("a.current").length == 0) {
488 f533f224 Vangelis Koukis
                    $(this).parent().parent().find(".tab-name").text($(this).find("a").attr("href"));
489 f533f224 Vangelis Koukis
                }
490 f533f224 Vangelis Koukis
            },
491 f533f224 Vangelis Koukis
            function () {
492 f533f224 Vangelis Koukis
                $(this).parent().parent().find(".tab-name").text($(this).parent().find("a.current").attr("href"));
493 f533f224 Vangelis Koukis
            }
494 f533f224 Vangelis Koukis
        );
495 1293d3ed Mike Muzurakis

496 d681d3a6 Mike Muzurakis
        //load opera css fixes
497 d681d3a6 Mike Muzurakis
        if ($.browser.opera) {
498 d681d3a6 Mike Muzurakis
            $("<link/>", {
499 d681d3a6 Mike Muzurakis
               rel: "stylesheet",
500 d681d3a6 Mike Muzurakis
               type: "text/css",
501 d681d3a6 Mike Muzurakis
               href: "static/opera.css"
502 d681d3a6 Mike Muzurakis
            }).appendTo("head");
503 d681d3a6 Mike Muzurakis
        }
504 ce88aad7 Kostas Papadimitriou

505 ce88aad7 Kostas Papadimitriou
        $(document).ready(function(){
506 f277a1cd Kostas Papadimitriou

507 54417a11 Kostas Papadimitriou
            $(".close-msg-box").live('click', close_all_overlays);
508 01e254be Kostas Papadimitriou

509 01e254be Kostas Papadimitriou
            {% if current_lang == "el" and not DEBUG %}
510 01e254be Kostas Papadimitriou
                window.location = "/lang/?l=en";
511 01e254be Kostas Papadimitriou
            {% endif %}
512 01e254be Kostas Papadimitriou

513 19e01943 Kostas Papadimitriou
            // user menu interaction
514 ce88aad7 Kostas Papadimitriou
            var resetUserMenu = function() {
515 ce88aad7 Kostas Papadimitriou
                $(this).removeClass("hovered");
516 ce88aad7 Kostas Papadimitriou
                $(this).removeClass("active");
517 ce88aad7 Kostas Papadimitriou
            }
518 ce88aad7 Kostas Papadimitriou
            $(".usermenu").live("click", function(){
519 ce88aad7 Kostas Papadimitriou
                $(this).addClass("active");
520 ce88aad7 Kostas Papadimitriou
            });
521 ce88aad7 Kostas Papadimitriou
            $(".usermenu").bind('mouseleave', resetUserMenu);
522 ce88aad7 Kostas Papadimitriou
            $(".usermenu").live("mouseover", function(){
523 ce88aad7 Kostas Papadimitriou
                $(this).addClass("hovered");
524 ce88aad7 Kostas Papadimitriou
            });
525 af6fc929 Kostas Papadimitriou

526 0e03566f Kostas Papadimitriou
            $(".usermenu li").mouseenter(function(){$(this).addClass("hovered")})
527 0e03566f Kostas Papadimitriou
            $(".usermenu li").mouseleave(function(){$(this).removeClass("hovered")});
528 0e03566f Kostas Papadimitriou

529 af6fc929 Kostas Papadimitriou
            // bind menu actions
530 af6fc929 Kostas Papadimitriou
            $(".usermenu .logout").click(function() {
531 af6fc929 Kostas Papadimitriou
                user_session_logout();
532 af6fc929 Kostas Papadimitriou
            });
533 29772683 Kostas Papadimitriou

534 19e01943 Kostas Papadimitriou
            $(".usermenu .invitations").click(show_invitations);
535 54417a11 Kostas Papadimitriou
            $(".usermenu .feedback").click(show_feedback_form);
536 d790d9b7 Kostas Papadimitriou
                
537 ce88aad7 Kostas Papadimitriou
        });
538 cc7c5902 Dimitris Moraitis
    </script>
539 b495fe50 Mike Muzurakis
    <!-- base notification for error/success reporting -->
540 b495fe50 Mike Muzurakis
    <a id="notification" rel="#error-success" href="#"></a>
541 29772683 Kostas Papadimitriou
    <a id="msgbox" rel="#notification-box" href="#"></a>
542 54417a11 Kostas Papadimitriou
    <a id="feedbackbox" rel="#feedback-form" href="#"></a>
543 b495fe50 Mike Muzurakis
544 b495fe50 Mike Muzurakis
    <div class="modal" id="error-success">
545 b495fe50 Mike Muzurakis
        <h3 class="popup-header">
546 67921b5c Kostas Papadimitriou
            <span class="header-box"></span>
547 b495fe50 Mike Muzurakis
        </h3>
548 b495fe50 Mike Muzurakis
        <div class="popup-body">
549 b495fe50 Mike Muzurakis
            <div class="popup-body-inner">
550 54417a11 Kostas Papadimitriou
                <div class="error-report">
551 67921b5c Kostas Papadimitriou
                    <div class="send-btn">{% trans "report error" %}</div>
552 67921b5c Kostas Papadimitriou
                    <div class="sending">{% trans "sending error report..." %}</div>
553 67921b5c Kostas Papadimitriou
                    <div class="errormsg">{% trans "report failed" %}</div>
554 54417a11 Kostas Papadimitriou
                    <div class="success">{% trans "report send successfully" %}</div>
555 54417a11 Kostas Papadimitriou
                </div>
556 b495fe50 Mike Muzurakis
                <div class="machine-now-building"></div>
557 b495fe50 Mike Muzurakis
                <div class="popup-separator"></div>
558 b495fe50 Mike Muzurakis
                <div class="password-container">
559 b495fe50 Mike Muzurakis
                    <div class="password-header"></div>
560 b495fe50 Mike Muzurakis
                    <div class="password"></div>
561 b495fe50 Mike Muzurakis
                </div>
562 b495fe50 Mike Muzurakis
                <div class="popup-details">
563 b495fe50 Mike Muzurakis
                    <div class="write-password"></div>
564 b495fe50 Mike Muzurakis
                    <div class="write-password-details">{% trans "More details about the result"%}</div>
565 b495fe50 Mike Muzurakis
                </div>
566 b495fe50 Mike Muzurakis
            </div>
567 b495fe50 Mike Muzurakis
        </div>
568 b495fe50 Mike Muzurakis
    </div>
569 29772683 Kostas Papadimitriou
570 54417a11 Kostas Papadimitriou
    <div class="modal" id="feedback-form" class="feedback notification-box">
571 54417a11 Kostas Papadimitriou
        <h3 class="popup-header">
572 f860d8a3 Vangelis Koukis
            <span class="header-box">{% trans "Send feedback" %}</span>
573 54417a11 Kostas Papadimitriou
        </h3>
574 54417a11 Kostas Papadimitriou
        <div class="popup-body">
575 54417a11 Kostas Papadimitriou
            <div class="popup-body-inner">
576 54417a11 Kostas Papadimitriou
                <div class="form-container">
577 54417a11 Kostas Papadimitriou
                <p class="feedback-intro">
578 ab95fd93 Vangelis Koukis
                {% blocktrans %}~okeanos is currently in alpha test and we would appreciate any kind of feedback.
579 67921b5c Kostas Papadimitriou
We welcome any suggestions, questions and bug reports you may have.{% endblocktrans %}</p>
580 54417a11 Kostas Papadimitriou
                <form id="feedback-form">
581 8ebafb71 Kostas Papadimitriou
                    <label for="feedback-msg">{% trans "Please describe your problem here, provide as many details as possible" %}</label>
582 8ebafb71 Kostas Papadimitriou
                    <div class="description"></div>
583 d790d9b7 Kostas Papadimitriou
                    <div class="empty-error-msg">{% trans "Please provide some feedback" %}</div>
584 54417a11 Kostas Papadimitriou
                    <textarea name="feedback-msg" class="feedback-text"></textarea>
585 67921b5c Kostas Papadimitriou
586 67921b5c Kostas Papadimitriou
                    <input type="checkbox" name="submit-submit-data" class='submit-data' />
587 54417a11 Kostas Papadimitriou
                    <input type="submit" value="{% trans "submit " %}" class="submit" />
588 54417a11 Kostas Papadimitriou
                    <textarea name="feedback-data" class="data-text"></textarea>
589 54417a11 Kostas Papadimitriou
                </form>
590 54417a11 Kostas Papadimitriou
            </div>
591 54417a11 Kostas Papadimitriou
592 54417a11 Kostas Papadimitriou
            <div class="message sending">{% trans "submiting your data....." %}</div>
593 54417a11 Kostas Papadimitriou
            <div class="message success">
594 54417a11 Kostas Papadimitriou
                {% trans "thank you for submiting your feedback" %}
595 54417a11 Kostas Papadimitriou
                <span class="close-msg-box"> {% trans "close feedback" %}</span></div>
596 54417a11 Kostas Papadimitriou
            <div class="message errormsg">
597 54417a11 Kostas Papadimitriou
                {% trans "some error occured submiting submiting your feedback, please try again later" %}
598 54417a11 Kostas Papadimitriou
                <span class="close-msg-box"> {% trans "close feedback" %}</span></div>
599 54417a11 Kostas Papadimitriou
            </div>
600 54417a11 Kostas Papadimitriou
            </div>
601 54417a11 Kostas Papadimitriou
        </div>
602 54417a11 Kostas Papadimitriou
    </div>
603 54417a11 Kostas Papadimitriou
604 54417a11 Kostas Papadimitriou
    <div class="modal" id="notification-box" class="notification-box">
605 29772683 Kostas Papadimitriou
        <h3 class="popup-header">
606 29772683 Kostas Papadimitriou
            <span class="header-box"></span>
607 29772683 Kostas Papadimitriou
        </h3>
608 29772683 Kostas Papadimitriou
        <div class="popup-body">
609 29772683 Kostas Papadimitriou
            <div class="popup-body-inner">
610 29772683 Kostas Papadimitriou
                <div class="machine-now-building"></div>
611 29772683 Kostas Papadimitriou
                <div class="popup-separator"></div>
612 29772683 Kostas Papadimitriou
                <div class="password-container">
613 29772683 Kostas Papadimitriou
                    <div class="password"></div>
614 29772683 Kostas Papadimitriou
                </div>
615 9ed51b7e Kostas Papadimitriou
                <div class="sub-text"></div>
616 29772683 Kostas Papadimitriou
            </div>
617 29772683 Kostas Papadimitriou
        </div>
618 29772683 Kostas Papadimitriou
    </div>
619 cc7c5902 Dimitris Moraitis
</body>
620 cc7c5902 Dimitris Moraitis
</html>