1{% extends "base_grid_template.html" %}
5 <title> {{ user }} {{ project }} {{ session }} - TiledViz</title>
7 <title>TiledViz</title>
9 <meta name="viewport" content="width=device-width,initial-scale=1">
12{% block additional_scripts_css %}
14 <link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='css/style.css')}}">
15 <link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='css/base.css')}}">
16 <!-- <link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='css/grid.css')}}"> -->
19 <link rel="stylesheet"
20 href="https://unpkg.com/postitall@1.1.0/dist/jquery.postitall.css">
22 <!-- Actions Icons -->
23 <link rel="stylesheet"
24 href="https://fonts.googleapis.com/icon?family=Material+Icons">
26 <!--Some variables here-->
27 <script type="text/javascript" charset="utf-8">
28 my_user = "{{ user }}";
29 my_project = "{{ project }}";
30 my_session = "{{ session }}";
31 my_description = "{{ description }}";
32 my_geometry = {{ json_geom|tojson }};
34 <script type="text/javascript" charset="utf-8">
35 json_data = {{ json_data|tojson }};
37 <script type="text/javascript" charset="utf-8">
38 json_config = {{ json_config|tojson }};
39 json_actions = {{ json_actions|tojson }};
40 helpPath = "{{ helpPath }}";
42 <script type="text/javascript" charset="utf-8">
43 jsDataTab = json_data.nodes;
45 <script type="text/javascript" charset="utf-8">
46 Tags = {{ json_Tags|tojson }};
50 <!-- <script type="text/javascript" src="{{ url_for('static', filename='js/menu_config.js') }}"></script> -->
51 <!-- <script type="text/javascript" src="{{ url_for('static', filename='js/menu_options.js') }}"></script> -->
54 <script type="text/javascript"
55 src="https://unpkg.com/postitall@1.1.0/dist/jquery.postitall.js"></script>
58 <script src="https://cdnjs.cloudflare.com/ajax/libs/FileSaver.js/2.0.2/FileSaver.min.js"
59 integrity="sha512-k8F8QynmFNURwbUJC8drKA+fo3YfNvjqKzStdydD6au+MzvxBoRnxH8E31RJXwDY9DrnEiPhh9wBoDSIxhkyHQ=="
60 crossorigin="anonymous"></script>
62 <!-- Canvas to Blob : save pictures -->
63 <script src="https://cdnjs.cloudflare.com/ajax/libs/javascript-canvas-to-blob/3.29.0/js/canvas-to-blob.min.js"
64 integrity="sha512-zkt2aBQ0jhSXjI6VhJegNqBN3Kqlbi7PxpxOpELGoKtRGSuPOVGvetuTixdhQSuRefsFKroRgWRwQDpRcMd3+A=="
65 crossorigin="anonymous" referrerpolicy="no-referrer"></script>
67 <!-- Waypoints : optimize non visible tiles -->
68 <script src="https://cdnjs.cloudflare.com/ajax/libs/waypoints/4.0.1/noframework.waypoints.min.js"
69 integrity="sha256-XJuslujM3cGzRZGiSi/KNSdk58uORO/mmrEQNjVtb5k="
70 crossorigin="anonymous"></script>
72 <!-- q : promise/deference for pictures -->
73 <script src="https://cdnjs.cloudflare.com/ajax/libs/q.js/1.5.1/q.min.js"
74 integrity="sha256-URAm3POAyTpcU8ACdb2iIjMWFuTai4/fCdXdeqGN3h8="
75 crossorigin="anonymous"></script>
77 <!-- QRcodes : lib with correction -->
78 <!-- <script type="text/javascript" -->
79 <!-- src="https://combinatronics.com/davidshimjs/qrcodejs/master/qrcode.js"></script> -->
80 <script type="text/javascript" src="{{ url_for('static', filename='dist/js/qrcode.js')}}"></script>
82 <!-- Test Anonymous connection -->
83 {% if is_client_active %}
84 <script type="text/javascript" charset="utf-8">
88 <script type="text/javascript" charset="utf-8">
92 <!-- <script type="text/javascript" src="{{ url_for('static', filename='dist/js/debug_tablette.js')}}"></script> -->
96<div class="main-legend-zone">
97 <div class="legend-zone" id="legend"><h1>Working on {{ session }}</h1>
99 <div class="notif-zone" id="notifications" style="font-size: 40px">Test notifications
101 <form id="gotoGrid" action="/grid" method="post">
102 <input type="hidden" name="csrf_token" value="{{ csrf_token() }}"/>
103 <input type="text" id="gGnewroom" name="new room" value="{{ session }}">
104 <input type="submit" id="gGsubmit" value='Submit'>
106 {% if is_client_active %}
108 <a class="btn btn-large btn-info" href="/" style="font-size: 40px">Home</a>
110 <div id="allsessions">
111 <a class="btn btn-large btn-info " href="/allsessions" style="font-size: 40px">Sessions</a>
113 <div id="editsession">
114 <a class="btn btn-large btn-info" href="/editsession?message=%7B"oldsessionname"%3A"{{ session }}"%7D" style="font-size: 40px">Editsession</a>
117 <a class="btn btn-large btn-info" href="/editnodes?message=%7B"oldsessionname"%3A"{{ session }}"%7D" style="font-size: 40px">Editnodes</a>
119 {# Show invite button only for owner/admin #}
120 {% if isadmin or (project_role in ['owner','admin']) %}
121 <div class="join-zone" id="join">
122 <span id="join-clients" style="font-size: 30px"></span>
123 <button type="button" class="btn btn-primary" data-bs-toggle="modal" data-bs-target="#inviteModal" style="font-size: 40px">
131<!-- <form action='/grid' method="post"> -->
132<!-- <input type="text" name="new room" value="{{ session }}"> -->
133<!-- <input type="submit" value='Submit'> -->
136<!--Modal definition! -->
137<div id="inviteModal" class="modal fade" tabindex="-1" role="dialog"
138 aria-labelledby="inviteModalLabel" aria-hidden="true" style="font-size: 40px">
139 <div class="modal-dialog modal-dialog-centered modal-xl" style="--bs-modal-bg: darkgrey" >
140 <div class="modal-content">
141 <div class="modal-header">
142 <h0 class="modal-title">Invite another member to join</h0>
143 <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
145 <div class="modal-body">
148 <h1> Configure the new client:</h1>
150 <div class="column btn-group" data-toggle="buttons-radio">
151 <button id="active_new_client" type="checkbox" class="btn btn-secondary btn-selected">Active</button>
152 <button id="passive_new_client" type="checkbox" class="btn btn-secondary">Passive</button>
155 <div class="form-group"
156 <h1 for="invitee_name">Invitee Name:</h1>
157 <input type="text" class="form-control" id="invitee_name"
158 placeholder="Enter invitee's username" style="font-size: 40px">>
161 <div class="form-group">
162 <h1 for="max_uses">Maximum Uses:</h1>
163 <input type="number" class="form-control" id="max_uses" min="1" value="1" style="font-size: 50px">
166 <button id="getUrl" class="btn btn-grey btn-primary" style="font-size: 30px">Generate invite link</button>
169 <div class="input-group">
170 <input type="text" class="form-control" placeholder="Invite link will appear here..."
171 id="custom-url" style="font-size: 40px">
172 <span class="input-group-btn">
173 <button class="btn btn-default" type="button" id="copy-button"
174 data-toggle="tooltip" data-placement="button"
175 title="Copy to Clipboard"> Copy
181 <div id="invite-error" class="alert alert-danger" style="display: none;"></div>
183 <div class="modal-footer">
184 <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Close</button>
192<section id="primaryparent">
195 <!-- TODO: <script type="text/javascript" src="../dico.js"></script> -->
196 <script type="text/javascript">
197 // Config through json_config by session from Flask
198 //var configItems = json_config.cssProperties;
199 var configColors = json_config.colors;
200 var configJsonData = json_config.jsonData;
201 var configBehaviour = json_config.behaviour;
202 var configTagsBehaviour = json_config.tagBehaviour;
203 var configCSS = json_config.cssProperties;
205 var configLanguage = json_config.language;
207 <script type="text/javascript">
208 touchok=true; //('ontouchstart' in window || navigator.maxTouchPoints);
209 document.body.setAttribute('style','overflow:hidden;');
211 <script type="text/javascript" src="{{ url_for('static', filename='js/colorNameToHex.js')}}"></script>
212 <script type="text/javascript" src="{{ url_for('static', filename='js/Location.js')}}"></script>
213 <script type="text/javascript" src="{{ url_for('static', filename='js/Tile.js')}}"></script>
214 <script type="text/javascript" src="{{ url_for('static', filename='js/Mesh.js')}}"></script>
215 <script type="text/javascript" src="{{ url_for('static', filename='js/Stickers.js')}}"></script>
216 <script type="text/javascript" src="{{ url_for('static', filename='js/QRcodes.js')}}"></script>
217 <script type="text/javascript" src="{{ url_for('static', filename='js/ZoomNodes.js')}}"></script>
218 <script type="text/javascript" src="{{ url_for('static', filename='js/ColorTheme.js')}}"></script>
219 <script type="text/javascript" src="{{ url_for('static', filename='js/Menu.js')}}"></script>
220 <script type="text/javascript" src="{{ url_for('static', filename='js/grid.js') }}"></script>
221 <div id=helpSupport style='display:none'></div>
222 {% if is_client_active %}
223 <iframe content="text/html;charset=UTF-8" id="helpframe" scrolling="auto"
224 src="{{ url_for('static', filename=helpPath) }}" height="50%" width="20%"></iframe>
225 <script type="text/javascript">
226 $('#helpSupport').append($('#helpframe'));
228 <script type="text/javascript">
229 $('#gGsubmit').on("click",function() {
230 new_room=$('#gGnewroom').val();
231 cdata ={"room":my_session, "NewRoom": new_room }
232 socket.emit("deploy_Session", cdata);
234 $('.main-legend-zone').append("<div id=primarySliderLabel "+
235 "style='background-image: none; color: white; background-color: black; font-size: 80px; padding: 20px; padding-top: 5px; padding-bottom: 5px;'>"+
236 "Primary Zoom</div>");
237 $('#primarySliderLabel').css({
240 left : parseInt($('#gGsubmit').position().left),
241 top: 10+parseInt($('#gGsubmit').css("height")),
247 backgroundColor: "rgba(0, 0, 0, 0.5)"
250 $('#primarySliderLabel').append("<input id=primarySlider type='range' name=primarySlider "+
251 "min="+window.devicePixelRatio*50+" max="+8*window.devicePixelRatio*100+" value= " + 100 + ">");
253 $('#primarySlider').css({
255 top: parseInt($('#primarySliderLabel').css("top"))+parseInt($('#primarySliderLabel').css("height"))/2,
256 width: parseInt($('header').css("width")) - (parseInt($('#primarySliderLabel').css("left"))+parseInt($('#primarySliderLabel').css("width"))),
257 //padding : parseInt($('#primarySliderLabel').css("height"))/2,
260 $('#primarySlider').change(function () {
261 var val = ($(this).val() - $(this).attr('min')) / ($(this).attr('max') - $(this).attr('min'));
263 $(this).css('background-image',
264 '-webkit-gradient(linear, left top, right top, '
265 + 'color-stop(' + val + ', rgb(255, 0, 0)), '
266 + 'color-stop(' + val + ', rgb(0, 255, 0))'
271 var valPrimary = ($("#primarySlider").val() - $("#primarySlider").attr('min')) / ($("#primarySlider").attr('max') - $("#primarySlider").attr('min'));
272 $('#primarySlider').css('background-image',
273 '-webkit-gradient(linear, left top, right top, '
274 + 'color-stop(' + valPrimary + ', rgb(255, 0, 0)), '
275 + 'color-stop(' + valPrimary + ', rgb(0, 255, 0))'
279 $('#primarySlider').off("click").on({
281 var newZoom = $('#primarySlider').val();
282 if (Math.abs(newZoom - 100) < 6) newZoom=100;
284 var ratio = newZoom/100;
285 $('#primaryparent').css("-moz-transform","scale("+ratio+")").css("-webkit-transform","scale("+ratio+")").css("transform-origin", "0 0 0");
286 //style="transform: scale(1);transform-origin: 0px 0px 0px;"
290 $('#primarySliderLabel').hide();
291 $('#primarySlider').hide();
295 <script type="text/javascript">
296 buildAtEndComplete=false;
297 function buildAtEnd() {
298 setTimeout(function() {
299 if (typeof mesh == "undefined")
302 var Nodes=mesh.getNodes();
303 console.log("Init htmlNodes")
305 Nodes[O].init_htmlNode();
306 buildAtEndComplete=true;
310 executeAtEndComplete=false;
311 function executeAtEnd() {
312 setTimeout(function() {
313 if (typeof mesh == "undefined")
316 // if (not buildAtEndComplete) {
320 var Nodes=mesh.getNodes();
321 console.log("Build nodes menus")
323 Nodes[O].buildmenu();
324 console.log("Init zoom nodes")
326 Nodes[O].init_zoomnode();
327 me.init_click_zoomNode();
328 executeAtEndComplete=true;
329 $("#notifications").html("All init completed.")
333 if (document.readyState == 'complete') {
337 console.log("Not already complete : "+document.readyState)
338 document.onreadystatechange = function () {
339 if (document.readyState === "complete") {
340 console.log("Wait for conplete : "+document.readyState)