1 | 2 | simandl | <!DOCTYPE html> |
2 | | | <html> |
3 | | | <head> |
4 | | | <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> |
5 | | | {% block styles %} |
6 | | | {% for style in styles %} |
7 | | | <link rel="stylesheet" href="{{style}}" /> |
8 | | | {% endfor %} |
9 | | | {% endblock %} |
10 | | | {% block scripts %} |
11 | | | {% for script in scripts %} |
12 | | | <script type="text/javascript" src="{{script}}"></script> |
13 | | | {% endfor %} |
14 | | | <script> |
15 | | | var conn; |
16 | | | var connId; |
17 | | | |
18 | | | function invokeStrongEvent(control, event) |
19 | | | { |
20 | | | |
21 | | | var eventName = "on" + event.type; |
22 | | | |
23 | | | var name = $(control).attr('id'); |
24 | | | var invokedBy = connId; |
25 | | | |
26 | | | //console.log(control.style); |
27 | | | |
28 | | | $.post("{{onStrongEventLink|raw}}", {name: name, value: JSON.stringify(elementToObject(control)), event: eventName,invokedBy:invokedBy}, function(data) { |
29 | | | if (data === "reload") location.reload(); |
30 | | | }); |
31 | | | |
32 | | | |
33 | | | //console.log(event); |
34 | | | } |
35 | | | |
36 | | | function invokeEvent(control, event) |
37 | | | { |
38 | | | var val = $(control).val(); |
39 | | | if (val === "") val = $(control).text(); |
40 | | | var name = $(control).attr('id'); |
41 | | | var invokedBy = connId; |
42 | | | eventName = "on" + event.type; |
43 | | | //console.log(event); |
44 | | | $.post("{{onEventLink|raw}}", {name: name, value: val, event: eventName, invokedBy: invokedBy}, function(data) { |
45 | | | if (data === "reload") location.reload(); |
46 | | | }); |
47 | | | |
48 | | | //console.log(event); |
49 | | | } |
50 | | | |
51 | | | function connectSocket() |
52 | | | { |
53 | | | conn = new WebSocket('ws://{{httpHost}}:80'); |
54 | | | conn.onclose = function() { |
55 | | | //try to reconnect in 2 seconds |
56 | | | setTimeout(function() { |
57 | | | connectSocket(); |
58 | | | }, 2000); |
59 | | | }; |
60 | | | |
61 | | | conn.onopen = function(e) { |
62 | | | |
63 | | | conn.send('{ "connection": { "user": "{{loggedUser.username}}", "session": "{{sessionId}}"} }'); |
64 | | | //console.log("Connection established!"); |
65 | | | }; |
66 | | | |
67 | | | conn.onmessage = function(e) { |
68 | | | var result = JSON.parse(e.data); |
69 | | | |
70 | | | if (result.acceptedConnection != null) |
71 | | | { |
72 | | | connId = result.acceptedConnection; |
73 | | | return; |
74 | | | } |
75 | | | |
76 | | | var changes = JSON.parse(result.changes); |
77 | | | var invokedBy = result.invokedBy; |
78 | | | for (change in changes) |
79 | | | { |
80 | | | var objectName = changes[change].objectName; |
81 | | | switch (changes[change].type) |
82 | | | { |
83 | | | default: |
84 | | | case 4: |
85 | | | if (!$("#" + objectName).is(":focus")) |
86 | | | { |
87 | | | $("#" + objectName).replaceWith($(changes[change].data)); |
88 | | | } |
89 | | | break; |
90 | | | case 5: |
91 | | | $("#" + objectName).attr(changes[change].attrName,changes[change].data); |
92 | | | if (changes[change].attrName === "value") |
93 | | | { |
94 | | | $("#" + objectName).val(changes[change].data); |
95 | | | } |
96 | | | break; |
97 | | | case 6: |
98 | | | var criticalAttrs = ["left", "top","width","height"]; |
99 | | | if ((invokedBy === connId)&&($.inArray(changes[change].attrName, criticalAttrs) > -1)) |
100 | | | { |
101 | | | break; |
102 | | | } |
103 | | | $("#" + objectName).css(changes[change].attrName,changes[change].data); |
104 | | | break; |
105 | | | case 7: |
106 | | | $("#" + objectName + " " + changes[change].attrName).html(changes[change].data); |
107 | | | break; |
108 | | | } |
109 | | | } |
110 | | | }; |
111 | | | } |
112 | | | |
113 | | | $(document).ready(function() { |
114 | | | |
115 | | | connectSocket(); |
116 | | | }); |
117 | | | </script> |
118 | | | {% endblock %} |
119 | | | <title> |
120 | | | {% block title %} |
121 | | | {{ title }} |
122 | | | {% endblock %} |
123 | | | </title> |
124 | | | |
125 | | | </head> |
126 | | | <body style="width:100%; |
127 | | | height:100%; |
128 | | | background-color: {{workspace.backgroundColor}};"> |
129 | | | {% block body %} |
130 | | | {% block content %} |
131 | | | {% for window in workspace.windows %} |
132 | | | {{ include('@Phem/UI/Window.twig', {component: window}, with_context = false) }} |
133 | | | {% endfor %} |
134 | | | {% endblock %} |
135 | | | {% endblock %} |
136 | | | {{loggedUser.username}} |
137 | | | </body> |
138 | | | </html> |