designer.html 42 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Designer</title>
  6. <meta name="description"
  7. content="Designer Drawing Block.">
  8. <link rel="stylesheet" href="{{ static_url("style.css") }}">
  9. <link rel="stylesheet" href="{{ static_url("jquery-ui.min.css") }}">
  10. <!--[if IE]>
  11. <script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
  12. <![endif]-->
  13. </head>
  14. <body>
  15. <div id="page_info">Designer Block. Generated by BORA 0.0.1</div>
  16. {% if "background" in data %}
  17. <img src="{{ static_url( data['background'] ) }}"></img>
  18. {% else %}
  19. <img src="{{ static_url( 'background.png' ) }}"></img>
  20. {% end %}
  21. <button class="button showhide" onclick="showhide()">Show/Hide</button>
  22. {% if data['style'] %}
  23. {% for key in data['style'] %}
  24. {% if data['style'][key]['type'] == "calc" %}
  25. <div style='position: absolute; top: {{ data['style'][key]['top'] }}; left:{{
  26. data['style'][key]['left'] }}; width:{{ data['style'][key]['width'] }}px;
  27. height:{{ data['style'][key]['height'] }}px;'
  28. {% if "condition" in data['style'][key] %}
  29. data-cond="{{ data['style'][key]['condition'] }}"
  30. {% else%}position
  31. {% end%}
  32. {% if "formula" in data['style'][key] %}
  33. data-formula="{{ data['style'][key]['formula'] }}"
  34. {% else %}
  35. {% end %}
  36. {% if "lesser" in data['style'][key] %}
  37. data-lesser="{{ data['style'][key]['lesser'] }}"
  38. {% else %}
  39. {% end %}
  40. {% if "larger" in data['style'][key] %}
  41. data-larger="{{ data['style'][key]['larger'] }}"
  42. {% else %}
  43. {% end %}
  44. data-type="{{ data['style'][key]['type'] }}" class='varbox' id="{{ key }}">
  45. <p><span style="color: #000; font-size: {{ data['style'][key]['header']['size'] }}px; font-weight: {{ data['style'][key]['header']['weight'] }};" class="title">{{ data['style'][key]['header']['title'] }} </span><span style="color: #000; font-size: {{ data['style'][key]['unit']['size'] }}px; font-weight: {{ data['style'][key]['unit']['weight'] }};" class="varval"> XXX.XX <span class='unit_title' style="color: #000; font-size: {{ data['style'][key]['unit']['size'] }}px; font-weight: {{ data['style'][key]['unit']['weight'] }};" > {{ data['style'][key]['unit']['title'] }}</span></span></p>
  46. </div>
  47. {% else %}
  48. {% end %}
  49. {% if data['style'][key]['type'] == "data" %}
  50. <div style='position: absolute; top: {{ data['style'][key]['top'] }}; left:{{
  51. data['style'][key]['left'] }}; width:{{ data['style'][key]['width'] }}px;
  52. height:{{ data['style'][key]['height'] }}px;'
  53. {% if "condition" in data['style'][key] %}
  54. data-cond="{{ data['style'][key]['condition'] }}"
  55. {% else%}position
  56. {% end%}
  57. {% if "formula" in data['style'][key] %}
  58. data-formula="{{ data['style'][key]['formula'] }}"
  59. {% else %}
  60. {% end %}
  61. {% if "lesser" in data['style'][key] %}
  62. data-lesser="{{ data['style'][key]['lesser'] }}"
  63. {% else %}
  64. {% end %}
  65. {% if "larger" in data['style'][key] %}
  66. data-larger="{{ data['style'][key]['larger'] }}"
  67. {% else %}
  68. {% end %}
  69. {% if "exponential" in data['style'][key] %}
  70. data-exponential="{{ data['style'][key]['exponential'] }}"
  71. {% else %}
  72. {% end %}
  73. data-type="{{ data['style'][key]['type'] }}" class='varbox' id="{{ key }}">
  74. <p><span style="color: #000; font-size: {{ data['style'][key]['header']['size'] }}px; font-weight: {{ data['style'][key]['header']['weight'] }};" class="title">{{ data['style'][key]['header']['title'] }} </span><span style="color: #000; font-size: {{ data['style'][key]['unit']['size'] }}px; font-weight: {{ data['style'][key]['unit']['weight'] }};" class="varval"> XXX.XX <span class='unit_title' style="color: #000; font-size: {{ data['style'][key]['unit']['size'] }}px; font-weight: {{ data['style'][key]['unit']['weight'] }};" > {{ data['style'][key]['unit']['title'] }}</span></span></p>
  75. </div>
  76. {% else %}
  77. {% end %}
  78. {% if data['style'][key]['type'] == "ventil" %}
  79. <div style='position: absolute; top: {{ data['style'][key]['top'] }}; left:{{ data['style'][key]['left'] }}; width:{{ data['style'][key]['width'] }}px; height:{{ data['style'][key]['height'] }}px;' data-type="{{ data['style'][key]['type'] }}" data-off="{{ data['style'][key]['off'] }}" data-on="{{ data['style'][key]['on'] }}" class='varbox' id="{{ key }}">
  80. <img width='100%' height='100%' src='{{ static_url("ventil_inactive.png") }}'></img>
  81. </div>
  82. {% else %}
  83. {% end %}
  84. {% if data['style'][key]['type'] == "integer-to-string" %}
  85. <div style='position: absolute; top: {{ data['style'][key]['top'] }}; left:{{
  86. data['style'][key]['left'] }}; width:{{ data['style'][key]['width'] }}px;
  87. height:{{ data['style'][key]['height'] }}px;'
  88. {% if "cond" in data['style'][key] %}
  89. data-cond="{{ data['style'][key]['cond'] }}"
  90. {% else%}
  91. {% end%}
  92. data-dict="{{ data['style'][key]['dict'] }}" data-type="{{ data['style'][key]['type'] }}" class='varbox' id="{{ key }}">
  93. <p><span style="color: #000; font-size: {{ data['style'][key]['header']['size'] }}px; font-weight: {{ data['style'][key]['header']['weight'] }};" class="title">{{ data['style'][key]['header']['title'] }} </span><br /><span style="color: #000; font-size: {{ data['style'][key]['unit']['size'] }}px; font-weight: {{ data['style'][key]['unit']['weight'] }};" class="varval">??? </span></p>
  94. </div>
  95. {% else %}
  96. {% end %}
  97. {% if data['style'][key]['type'] == "header" %}
  98. <div style='position: absolute; top: {{ data['style'][key]['top'] }}; left:{{
  99. data['style'][key]['left'] }}; width:{{ data['style'][key]['width'] }}px;
  100. height:{{ data['style'][key]['height'] }}px;' data-type="{{ data['style'][key]['type'] }}" class='varbox' id="{{ key }}">
  101. <p><span style="color: #000; font-size: {{ data['style'][key]['header']['size'] }}px; font-weight: {{ data['style'][key]['header']['weight'] }};" class="title">{{ data['style'][key]['header']['title'] }} </span></p>
  102. </div>
  103. {% else %}
  104. {% end %}
  105. {% end %}
  106. {% else %}
  107. {% end %}
  108. <div id="tool-btn">
  109. <span class="info">Variable</span>
  110. <select id="varname" style="font-size:16pt;">
  111. {% if data['index'] %}
  112. {% for key in data['index'] %}
  113. {% if key != "time" %}
  114. <option value={{ key }}>{{key}}</option>
  115. {% else %}
  116. {% end %}
  117. {% end %}
  118. {% else %}
  119. {% end %}
  120. </select>
  121. <span class="info">Type</span>
  122. <select id="vartype" style="font-size:16pt;">
  123. <option value="data">data</option>
  124. <option value="ventil">ventil</option>
  125. <option value="integer-to-string">integer-to-string</option>
  126. <option value="header">header</option>
  127. <option value="calc">calc</option>
  128. </select>
  129. <span class="info">Attribute</span>
  130. <select id="varattr" style="font-size:16pt;">
  131. <option value="normal">Normal</option>
  132. <option value="virtual">Virtual</option>
  133. </select>
  134. <span class="info">Virtual ID</span>
  135. <input type="text" id="virtual_id_text" placeholder="text" style="font-size:16pt; width=100px;"/>
  136. <br /><br />
  137. <span class="info">Title</span>
  138. <input type="text" id="elem_title_text" placeholder="text" style="font-size:16pt; width=100px;"/>
  139. <input type="text" id="elem_title_size" placeholder="size" style="font-size:16pt; width=100px;"/>
  140. <input type="text" id="elem_lesser_range" placeholder="smaller than (red)" style="font-size:16pt; width=100px;"/>
  141. <input type="text" id="elem_larger_range" placeholder="larger than (red)" style="font-size:16pt; width=100px;"/>
  142. <select id="elem_title_style" style="font-size:16pt;">
  143. <option value="400">normal</option>
  144. <option value="700">bold</option>
  145. </select>
  146. <br /><br />
  147. <span class="info">Value</span>
  148. <input type="text" id="elem_unit_text" placeholder="unit" style="font-size:16pt; width=100px;"/>
  149. <input type="text" id="elem_unit_size" placeholder="size" style="font-size:16pt; width=100px;"/>
  150. <input type="text" id="elem_condition_range" placeholder="condition (red)" style="font-size:16pt; width=100px;"/>
  151. <input type="text" id="elem_formula" placeholder="Equation" style="font-size:16pt; width=100px;"/>
  152. <select id="elem_unit_style" style="font-size:16pt;">
  153. <option value="400">normal</option>
  154. <option value="700">bold</option>
  155. </select>
  156. <span class="info">Exp</span><input type="checkbox" id="elem_exponential" style="font-size:16pt; width:20px; height:20px;"/>
  157. <br /><br />
  158. <button class="button save" onclick="backup()">Backup</button>
  159. <button style="display:none;" id="buttonHighlight" class="button highlight" onclick="highlight({{ data['cache'] }})">Highlight</button>
  160. <button class="button add" onclick="add()">Add</button>
  161. <button class="button remove" onclick="myremove()">Remove</button>
  162. <button class="button save" onclick="mysave({{ data['cache'] }})">Save</button>
  163. </div>
  164. <!-- java script -->
  165. <script src="{{ static_url("jquery-1.12.3.min.js") }}"></script>
  166. <script src="{{ static_url("jquery-ui.min.js") }}"></script>
  167. <script>
  168. function backup() {
  169. $.ajax({
  170. url: '/backup/',
  171. type: 'POST',
  172. success: function (response) {
  173. alert("Backup success!");
  174. },
  175. error: function () {
  176. console.log("Error.")
  177. }
  178. });
  179. }
  180. function showhide() {
  181. console.log("Show or Hide");
  182. $("#tool-btn").toggle();
  183. }
  184. function add() {
  185. console.log("add element");
  186. title_text = $("#elem_title_text").val();
  187. title_text = title_text.trim();
  188. title_color = "#000000";
  189. //title_color = $("#elem_title_color").val();
  190. title_size = $("#elem_title_size").val();
  191. title_style = $("#elem_title_style option:selected").val();
  192. unit_text = $("#elem_unit_text").val();
  193. unit_text = unit_text.trim();
  194. unit_color = "#000";
  195. //unit_color = $("#elem_unit_color").val();
  196. unit_size = $("#elem_unit_size").val();
  197. unit_style = $("#elem_unit_style option:selected").val();
  198. data_condition = $("#elem_condition_range").val();
  199. //data_max = $("#elem_max_range").val();
  200. data_formula = $("#elem_formula").val();
  201. virtual_id = $("#virtual_id_text").val();
  202. virtual_id = virtual_id.trim();
  203. if (virtual_id == "") {
  204. virtual_id = "0";
  205. }
  206. if ($('#elem_exponential').is(":checked")) {
  207. data_exponential = true;
  208. $("#"+key).attr("data-exponential", true);
  209. } else {
  210. data_exponential = false;
  211. $("#"+key).attr("data-exponential", false);
  212. }
  213. data_lesser = $("#elem_lesser_range").val();
  214. data_larger = $("#elem_larger_range").val();
  215. varval = $( "#varname option:selected").val();
  216. varname = $("#varname option:selected").text();
  217. vartype = $("#vartype option:selected").val();
  218. varattr = $("#varattr option:selected").val();
  219. console.log("Selected");
  220. console.log(varattr);
  221. console.log(virtual_id);
  222. console.log(vartype);
  223. console.log(title_text, unit_text, varname, varval, vartype);
  224. if(($("#" + varname).length == 0) || (vartype=="header") || (vartype=="calc") || (varattr=="virtual")) {
  225. console.log("Must enter here");
  226. console.log(vartype);
  227. if (vartype == "data") {
  228. if (varattr=="virtual") {
  229. virtual_name = "virtual_" + varname + "_" + virtual_id;
  230. if ( $("#" + virtual_name).length > 0 ) {
  231. for (i = 0; i < 50; i++) {
  232. virtual_name = "virtual_" + varname + "_" + i.toString();
  233. console.log($("#" + virtual_name).length);
  234. if (!$("#" + virtual_name).length){
  235. break;
  236. }
  237. }
  238. }
  239. varname = virtual_name;
  240. }
  241. console.log("Data");
  242. html_text = "<div " +
  243. "style='position: absolute; " +
  244. "top:0; " +
  245. "left:0;' " +
  246. "class='varbox box_highlight' " +
  247. "id='" + varname +
  248. "' data-type='" + vartype +
  249. "' data-cond='" + data_condition +
  250. "' data-formula='" + data_formula +
  251. "' data-lesser='" + data_lesser +
  252. "' data-larger='" + data_larger +
  253. "' data-exponential='" + data_exponential +
  254. "'>" +
  255. "<p>" +
  256. "<span style='color: " + title_color + ";" +
  257. "font-size:" + title_size + "px; " +
  258. "font-weight: " + title_style + ";' " +
  259. "class='title'>" + title_text +
  260. " </span>" +
  261. "<span style='color: " + unit_color + "; " +
  262. "font-size:" + unit_size + "px; " +
  263. "font-weight: " + unit_style + ";' " +
  264. "class='varval'>XXX.XX </span>" +
  265. "<span class='unit_title'>" + unit_text + "</span></p>" +
  266. "</div>";
  267. } else if (vartype == "header") {
  268. console.log("Header");
  269. var clean_text = title_text.replace(/[^a-zA-Z0-9 ]/g, "")
  270. varname = "header_" + clean_text.replace(/\s+/g, '-').toLowerCase();
  271. html_text = "<div " +
  272. "style='position: absolute; " +
  273. "top:0; " +
  274. "left:0;' " +
  275. "class='varbox box_highlight' " +
  276. "id='" + varname +
  277. "' data-type='" + vartype +
  278. "' data-cond='" + data_condition +
  279. "' data-lesser='" + data_lesser +
  280. "' data-larger='" + data_larger +
  281. "'>" +
  282. "<p>" +
  283. "<span style='color: " + title_color + ";" +
  284. "font-size:" + title_size + "px; " +
  285. "font-weight: " + title_style + ";' " +
  286. "class='title'>" + title_text +
  287. " </span></p>" +
  288. "</div>";
  289. $('#varname').append($('<option>', {
  290. value: varname,
  291. text: varname
  292. }));
  293. $('#varname').val(varname);
  294. } else if (vartype == "calc") {
  295. console.log("Calc");
  296. var clean_text = virtual_id.replace(/[^a-zA-Z0-9 ]/g, "")
  297. varname = "calc_" + clean_text.replace(/\s+/g, '-').toLowerCase();
  298. html_text = "<div " +
  299. "style='position: absolute; " +
  300. "top:0; " +
  301. "left:0;' " +
  302. "class='varbox box_highlight' " +
  303. "id='" + varname +
  304. "' data-type='" + vartype +
  305. "' data-cond='" + data_condition +
  306. "' data-lesser='" + data_lesser +
  307. "' data-larger='" + data_larger +
  308. "' data-formula='" + data_formula +
  309. "'>" +
  310. "<p>" +
  311. "<span style='color: " + title_color + ";" +
  312. "font-size:" + title_size + "px; " +
  313. "font-weight: " + title_style + ";' " +
  314. "class='title'>" + title_text +
  315. " </span>" +
  316. "<span style='color: " + unit_color + "; " +
  317. "font-size:" + unit_size + "px; " +
  318. "font-weight: " + unit_style + ";' " +
  319. "class='varval'>XXX.XX </span>" +
  320. "<span class='unit_title'>" + unit_text + "</span></p>" +
  321. "</div>";
  322. $('#varname').append($('<option>', {
  323. value: varname,
  324. text: varname
  325. }));
  326. $('#varname').val(varname);
  327. } else if (vartype == "ventil") {
  328. console.log("Ventil");
  329. var token = JSON.parse(unit_text);
  330. data_on = token["on"];
  331. data_off = token["off"];
  332. html_text = "<div " +
  333. "style='position: absolute; " +
  334. "top:0; " +
  335. "left:0;' " +
  336. "class='varbox box_highlight' " +
  337. "id='" + varname +
  338. "' data-type='" + vartype +
  339. "' data-cond='" + data_condition +
  340. "' data-lesser='" + data_lesser +
  341. "' data-larger='" + data_larger +
  342. "' data-on='" + data_on +
  343. "' data-off='" + data_off +
  344. "'>" +
  345. "<img width='100%' height='100%' " +
  346. "src='{{ static_url("ventil_inactive.png") }}'></img>" +
  347. "</div>";
  348. } else if (vartype == "integer-to-string") {
  349. console.log("Integer2String");
  350. html_text = "<div " +
  351. "style='position: absolute; " +
  352. "top:0; " +
  353. "left:0;' " +
  354. "class='varbox box_highlight' " +
  355. "id='" + varname +
  356. "' data-type='" + vartype +
  357. "' data-dict='" + unit_text +
  358. "' data-cond='" + data_condition +
  359. "'>" +
  360. "<p>" +
  361. "<span style='color: " + title_color + ";" +
  362. "font-size:" + title_size + "px; " +
  363. "font-weight: " + title_style + ";' " +
  364. "class='title'>" + title_text +
  365. " </span><br />" +
  366. "<span style='color: " + unit_color + "; " +
  367. "font-size:" + unit_size + "px; " +
  368. "font-weight: " + unit_style + ";' " +
  369. "class='varval'>??? </span>" +
  370. "</p>" +
  371. "</div>";
  372. }
  373. console.log("Adding element");
  374. console.log(html_text);
  375. $( "body" ).append(html_text);
  376. $("#"+varname).draggable();
  377. $("#"+varname).resizable();
  378. }
  379. }
  380. function myremove() {
  381. varname = $("#varname option:selected").text();
  382. vartype = $("#vartype option:selected").val();
  383. if($("#" + varname).length > 0) {
  384. $("#"+varname).remove();
  385. console.log(varname +" removed.");
  386. }
  387. }
  388. function mysave(data) {
  389. console.log("saving...");
  390. varname = $("#varname option:selected").text();
  391. varattr = $("#varattr option:selected").val();
  392. console.log("debug");
  393. console.log(varattr);
  394. var position = {};
  395. for(key in data) {
  396. var tmp = {};
  397. //console.log(key);
  398. if($("#" + key).length > 0 ) {
  399. tmp["ref"] = key;
  400. tmp["left"] = $("#"+key).css("left");
  401. tmp["top"] = $("#"+key).css("top");
  402. tmp["width"] = $("#"+key).width();
  403. tmp["height"] = $("#"+key).height();
  404. tmp["type"] = $("#"+key).attr("data-type");
  405. if ( $("#"+key).attr("data-type") == "data" ) {
  406. if ( (varname == key) && (varattr == "normal") ) {
  407. tmp["condition"] = $("#elem_condtion_range").val();
  408. tmp["formula"] = $("#elem_formula").val();
  409. tmp["lesser"] = $("#elem_lesser_range").val();
  410. tmp["larger"] = $("#elem_larger_range").val();
  411. if ($('#elem_exponential').is(":checked")) {
  412. tmp["exponential"] = true;
  413. } else {
  414. tmp["exponential"] = false;
  415. }
  416. header = {};
  417. header["title"] = $("#elem_title_text").val().trim();
  418. //header["color"] = $(".title", "#"+key).css("color");
  419. header["size"] = $("#elem_title_size").val();
  420. header["weight"] = $("#elem_title_style").val();
  421. // update field
  422. $(".title", "#"+key).text(header["title"]);
  423. $(".title", "#"+key).css("font-size", header["size"] + "px");
  424. $(".title", "#"+key).css("font-weight", header["weight"]);
  425. unit = {};
  426. unit["title"] = $("#elem_unit_text").val().trim();
  427. //unit["color"] = $(".varval", "#"+key).css("color");
  428. unit["size"] = $("#elem_unit_size").val();
  429. unit["weight"] = $("#elem_unit_style").val();
  430. $(".varval", "#"+key).css("font-size", unit["size"] + "px");
  431. $(".unit_title", "#"+key).css("font-size", unit["size"] + "px");
  432. $(".unit_title", "#"+key).css("font-weight", unit["weight"]);
  433. $(".varval", "#"+key).css("font-weight", unit["weight"]);
  434. } else {
  435. tmp["condition"] = $("#"+key).attr("data-cond");
  436. tmp["formula"] = $("#"+key).attr("data-formula");
  437. tmp["lesser"] = $("#"+key).attr("data-lesser");
  438. tmp["larger"] = $("#"+key).attr("data-larger");
  439. tmp["exponential"] = $("#"+key).attr("data-exponential");
  440. //tmp["min"] = $("#"+key).attr("min");
  441. //tmp["max"] = $("#"+key).attr("max");
  442. header = {};
  443. header["title"] = $(".title", "#"+key).text();
  444. //header["color"] = $(".title", "#"+key).css("color");
  445. header["size"] = parseInt($(".title", "#"+key).css("font-size")) || 28;
  446. var fontWeight = $(".title", "#"+key).css("font-weight");
  447. if (fontWeight == 'bold' || fontWeight == '700') {
  448. header["weight"] = "700";
  449. } else {
  450. header["weight"] = "400";
  451. }
  452. unit = {};
  453. unit["title"] = $(".unit_title", "#"+key).text();
  454. //unit["color"] = $(".varval", "#"+key).css("color");
  455. unit["size"] = parseInt($(".varval", "#"+key).css("font-size")) || 28;
  456. fontWeight = $(".varval", "#"+key).css("font-weight");
  457. if (fontWeight == 'bold' || fontWeight == '700') {
  458. unit["weight"] = "700";
  459. } else {
  460. unit["weight"] = "400";
  461. }
  462. }
  463. tmp["header"] = header;
  464. tmp["unit"] = unit;
  465. //} else if ( $("#"+key).attr("data-type") == "header" ) {
  466. // header = {};
  467. // header["title"] = $(".title", "#"+key).text();
  468. // header["size"] = $(".title", "#"+key).css("font-size");
  469. // header["weight"] = $(".title", "#"+key).css("font-weight");
  470. // tmp["header"] = header;
  471. } else if ( $("#"+key).attr("data-type") == "ventil" ) {
  472. if ((varname == key) && (varattr == "normal")) {
  473. var unit_text = $("#elem_unit_text").val();
  474. unit_text = unit_text.trim();
  475. var dtoken = JSON.parse(unit_text);
  476. tmp["on"] = dtoken["on"];
  477. tmp["off"] = dtoken["off"];
  478. } else {
  479. tmp["on"] = $("#"+key).attr("data-on");
  480. tmp["off"] = $("#"+key).attr("data-off");
  481. }
  482. } else if ( $("#"+key).attr("data-type") == "integer-to-string" ) {
  483. if ((varname == key)&& (varattr == "normal")) {
  484. var unit_text = $("#elem_unit_text").val();
  485. unit_text = unit_text.trim();
  486. var data_condition = $("#elem_condition_range").val();
  487. tmp["cond"] = data_condition;
  488. tmp["dict"] = unit_text;
  489. header = {};
  490. header["title"] = $("#elem_title_text").val().trim();
  491. header["size"] = $("#elem_title_size").val();
  492. header["weight"] = $("#elem_title_style").val();
  493. unit = {};
  494. //unit["color"] = $(".varval", "#"+key).css("color");
  495. unit["size"] = $("#elem_unit_size").val();
  496. unit["weight"] = $("#elem_unit_style option:selected").val();
  497. } else {
  498. tmp["dict"] = $("#"+key).attr("data-dict");
  499. tmp["cond"] = $("#"+key).attr("data-cond");
  500. header = {};
  501. header["title"] = $(".title", "#"+key).text();
  502. //header["color"] = $(".title", "#"+key).css("color");
  503. header["size"] = $(".title", "#"+key).css("font-size");
  504. header["weight"] = $(".title", "#"+key).css("font-weight");
  505. unit = {};
  506. //unit["title"] = $(".unit_title", "#"+key).text();
  507. //unit["color"] = $(".varval", "#"+key).css("color");
  508. unit["size"] = $(".varval", "#"+key).css("font-size");
  509. unit["weight"] = $(".varval", "#"+key).css("font-weight");
  510. }
  511. tmp["header"] = header;
  512. tmp["unit"] = unit;
  513. }
  514. position[key] = tmp;
  515. }
  516. }
  517. var title_text = $("#elem_title_text").val();
  518. title_text = title_text.trim();
  519. var clean_text = title_text.replace(/[^a-zA-Z0-9 ]/g, "")
  520. var token = "header_" + clean_text.replace(/\s+/g, '-').toLowerCase();
  521. $('[id^=virtual_]').each(function( index ) {
  522. var tmp = {};
  523. var key = this.id;
  524. var ref = key.split("_");
  525. ref = ref[1];
  526. if (key != "virtual_id_text") {
  527. console.log("Check this");
  528. console.log(key);
  529. if($("#" + key).length > 0 ) {
  530. tmp["ref"] = ref;
  531. tmp["left"] = $("#"+key).css("left");
  532. tmp["top"] = $("#"+key).css("top");
  533. tmp["width"] = $("#"+key).width();
  534. tmp["height"] = $("#"+key).height();
  535. tmp["type"] = $("#"+key).attr("data-type");
  536. if ( $("#"+key).attr("data-type") == "data" ) {
  537. if (varname == key) {
  538. tmp["condition"] = $("#elem_condtion_range").val();
  539. tmp["formula"] = $("#elem_formula").val();
  540. tmp["lesser"] = $("#elem_lesser_range").val();
  541. tmp["larger"] = $("#elem_larger_range").val();
  542. header = {};
  543. header["title"] = $("#elem_title_text").val().trim();
  544. //header["color"] = $(".title", "#"+key).css("color");
  545. header["size"] = $("#elem_title_size").val();
  546. header["weight"] = $("#elem_title_style option:selected").val();
  547. // update field
  548. $(".title", "#"+key).css("font-size", header["size"] + "px");
  549. $(".title", "#"+key).css("font-weight", header["weight"] + "px");
  550. unit = {};
  551. unit["title"] = $("#elem_unit_text").val().trim();
  552. //unit["color"] = $(".varval", "#"+key).css("color");
  553. unit["size"] = $("#elem_unit_size").val();
  554. unit["weight"] = $("#elem_unit_style option:selected").val();
  555. // update field
  556. $(".varval", "#"+key).css("font-size", unit["size"] + "px");
  557. $(".unit_title", "#"+key).css("font-size", unit["size"] + "px");
  558. $(".varval", "#"+key).css("font-weight", unit["weight"] + "px");
  559. } else {
  560. tmp["condition"] = $("#"+key).attr("data-cond");
  561. tmp["formula"] = $("#"+key).attr("data-formula");
  562. tmp["lesser"] = $("#"+key).attr("data-lesser");
  563. tmp["larger"] = $("#"+key).attr("data-larger");
  564. //tmp["min"] = $("#"+key).attr("min");
  565. //tmp["max"] = $("#"+key).attr("max");
  566. header = {};
  567. header["title"] = $(".title", "#"+key).text();
  568. //header["color"] = $(".title", "#"+key).css("color");
  569. header["size"] = parseInt($(".title", "#"+key).css("font-size")) || 28;
  570. header["weight"] = parseInt($(".title", "#"+key).css("font-weight")) || 28;
  571. unit = {};
  572. unit["title"] = $(".unit_title", "#"+key).text();
  573. //unit["color"] = $(".varval", "#"+key).css("color");
  574. unit["size"] = parseInt($(".varval", "#"+key).css("font-size")) || 28;
  575. unit["weight"] = parseInt($(".varval", "#"+key).css("font-weight")) || 28;
  576. }
  577. tmp["header"] = header;
  578. tmp["unit"] = unit;
  579. //} else if ( $("#"+key).attr("data-type") == "header" ) {
  580. // header = {};
  581. // header["title"] = $(".title", "#"+key).text();
  582. // header["size"] = $(".title", "#"+key).css("font-size");
  583. // header["weight"] = $(".title", "#"+key).css("font-weight");
  584. // tmp["header"] = header;
  585. } else if ( $("#"+key).attr("data-type") == "ventil" ) {
  586. if (varname == key) {
  587. var unit_text = $("#elem_unit_text").val();
  588. unit_text = unit_text.trim();
  589. var dtoken = JSON.parse(unit_text);
  590. tmp["on"] = dtoken["on"];
  591. tmp["off"] = dtoken["off"];
  592. } else {
  593. tmp["on"] = $("#"+key).attr("data-on");
  594. tmp["off"] = $("#"+key).attr("data-off");
  595. }
  596. } else if ( $("#"+key).attr("data-type") == "integer-to-string" ) {
  597. if (varname == key) {
  598. var unit_text = $("#elem_unit_text").val();
  599. unit_text = unit_text.trim();
  600. var data_condition = $("#elem_condition_range").val();
  601. tmp["cond"] = data_condition;
  602. tmp["dict"] = unit_text;
  603. header = {};
  604. header["title"] = $("#elem_title_text").val().trim();
  605. header["size"] = $("#elem_title_size").val();
  606. header["weight"] = $("#elem_title_style option:selected").val();
  607. unit = {};
  608. //unit["color"] = $(".varval", "#"+key).css("color");
  609. unit["size"] = $("#elem_unit_size").val();
  610. unit["weight"] = $("#elem_unit_style option:selected").val();
  611. } else {
  612. tmp["dict"] = $("#"+key).attr("data-dict");
  613. tmp["cond"] = $("#"+key).attr("data-cond");
  614. header = {};
  615. header["title"] = $(".title", "#"+key).text();
  616. //header["color"] = $(".title", "#"+key).css("color");
  617. header["size"] = $(".title", "#"+key).css("font-size");
  618. header["weight"] = $(".title", "#"+key).css("font-weight");
  619. unit = {};
  620. //unit["title"] = $(".unit_title", "#"+key).text();
  621. //unit["color"] = $(".varval", "#"+key).css("color");
  622. unit["size"] = $(".varval", "#"+key).css("font-size");
  623. unit["weight"] = $(".varval", "#"+key).css("font-weight");
  624. }
  625. tmp["header"] = header;
  626. tmp["unit"] = unit;
  627. }
  628. position[key] = tmp;
  629. }
  630. }
  631. });
  632. $('[id^=header_]').each(function( index ) {
  633. tmp = {};
  634. var hkey = $( this ).attr('id');
  635. console.log(hkey);
  636. tmp["left"] = $("#"+hkey).css("left");
  637. tmp["top"] = $("#"+hkey).css("top");
  638. tmp["width"] = $("#"+hkey).width();
  639. tmp["height"] = $("#"+hkey).height();
  640. tmp["type"] = $("#"+hkey).attr("data-type");
  641. header = {};
  642. if (token == hkey) {
  643. header["title"] = $("#elem_title_text").val().trim();
  644. //header["color"] = $(".title", "#"+key).css("color");
  645. header["size"] = $("#elem_title_size").val();
  646. header["weight"] = $("#elem_title_style option:selected").val();
  647. // update field
  648. $(".title", "#"+hkey).css("font-size", header["size"] + "px");
  649. $(".title", "#"+hkey).css("font-weight", header["weight"]);
  650. } else {
  651. header["title"] = $(".title", "#"+hkey).text();
  652. //header["color"] = $(".title", "#"+hkey).css("color");
  653. header["size"] = parseInt($(".title", "#"+hkey).css("font-size")) || 28;
  654. header["weight"] = parseInt($(".title", "#"+hkey).css("font-weight")) || 28;
  655. var fontWeight = $(".title", "#"+hkey).css("font-weight");
  656. if (fontWeight == 'bold' || fontWeight == '700') {
  657. header["weight"] = "700";
  658. } else {
  659. header["weight"] = "400";
  660. }
  661. }
  662. tmp["header"] = header;
  663. position[hkey] = tmp;
  664. //console.log( index + ": " + $( this ).text() );
  665. });
  666. $('[id^=calc_]').each(function( index ) {
  667. var tmp = {};
  668. var key = this.id;
  669. if($("#" + key).length > 0 ) {
  670. tmp["ref"] = "";
  671. tmp["left"] = $("#"+key).css("left");
  672. tmp["top"] = $("#"+key).css("top");
  673. tmp["width"] = $("#"+key).width();
  674. tmp["height"] = $("#"+key).height();
  675. tmp["type"] = $("#"+key).attr("data-type");
  676. if ( $("#"+key).attr("data-type") == "calc" ) {
  677. if (varname == key) {
  678. tmp["condition"] = $("#elem_condtion_range").val();
  679. tmp["formula"] = $("#elem_formula").val();
  680. tmp["lesser"] = $("#elem_lesser_range").val();
  681. tmp["larger"] = $("#elem_larger_range").val();
  682. header = {};
  683. header["title"] = $("#elem_title_text").val().trim();
  684. //header["color"] = $(".title", "#"+key).css("color");
  685. header["size"] = $("#elem_title_size").val();
  686. header["weight"] = $("#elem_title_style option:selected").val();
  687. unit = {};
  688. unit["title"] = $("#elem_unit_text").val().trim();
  689. //unit["color"] = $(".varval", "#"+key).css("color");
  690. unit["size"] = $("#elem_unit_size").val();
  691. unit["weight"] = $("#elem_unit_style option:selected").val();
  692. } else {
  693. tmp["condition"] = $("#"+key).attr("data-cond");
  694. tmp["formula"] = $("#"+key).attr("data-formula");
  695. tmp["lesser"] = $("#"+key).attr("data-lesser");
  696. tmp["larger"] = $("#"+key).attr("data-larger");
  697. //tmp["min"] = $("#"+key).attr("min");
  698. //tmp["max"] = $("#"+key).attr("max");
  699. header = {};
  700. header["title"] = $(".title", "#"+key).text();
  701. //header["color"] = $(".title", "#"+key).css("color");
  702. header["size"] = $(".title", "#"+key).css("font-size");
  703. header["weight"] = $(".title", "#"+key).css("font-weight");
  704. unit = {};
  705. unit["title"] = $(".unit_title", "#"+key).text();
  706. //unit["color"] = $(".varval", "#"+key).css("color");
  707. unit["size"] = $(".varval", "#"+key).css("font-size");
  708. unit["weight"] = $(".varval", "#"+key).css("font-weight");
  709. }
  710. tmp["header"] = header;
  711. tmp["unit"] = unit;
  712. }
  713. position[key] = tmp;
  714. }
  715. });
  716. console.log("Check here");
  717. //console.log(position);
  718. var dataToSend = JSON.stringify(position);
  719. console.log(dataToSend);
  720. $.ajax({
  721. url: '/save/',
  722. type: 'POST',
  723. data: dataToSend,
  724. success: function (response) {
  725. var objresponse = JSON.parse(response);
  726. console.log(objresponse);
  727. },
  728. error: function () {
  729. console.log("Error.")
  730. }
  731. });
  732. }
  733. function highlight(mydata) {
  734. console.log("highlight");
  735. varname = $("#varname option:selected").text();
  736. vartype = $("#"+varname).attr("data-type");
  737. $("#vartype").val(vartype);
  738. //console.log(varname, vartype);
  739. // clear values
  740. $("#elem_title_text").val("");
  741. $("#elem_title_size").val("");
  742. $("#elem_unit_text").val("");
  743. $("#elem_unit_size").val("");
  744. $("#elem_lesser_range").val("");
  745. $("#elem_larger_range").val("");
  746. $("#elem_condition_range").val("");
  747. $("#elem_formula").val("");
  748. $("#virtual_id_text").val("");
  749. $('#elem_exponential').prop('checked', false);
  750. if (vartype == "header") {
  751. $("#elem_title_text").val($("#"+varname + " .title").text());
  752. $("#elem_title_size").val(parseInt($("#"+varname + " .title").css("font-size")));
  753. $("#elem_title_style").val("400");
  754. var fontWeight = $("#"+varname + " .title").css("font-weight");
  755. if (fontWeight == 'bold' || fontWeight == '700') {
  756. $("#elem_title_style").val("700");
  757. }
  758. $("#elem_unit_style").val("400");
  759. var fontWeight = $("#"+varname + " .varval").css("font-weight");
  760. if (fontWeight == 'bold' || fontWeight == '700') {
  761. $("#elem_unit_style").val("700");
  762. }
  763. } else if (vartype == "data") {
  764. if ($("#"+varname).attr("data-exponential")) {
  765. $('#elem_exponential').prop('checked', true);
  766. } else {
  767. $('#elem_exponential').prop('checked', false);
  768. }
  769. $("#elem_title_text").val($("#"+varname + " .title").text().trim());
  770. $("#elem_title_size").val("");
  771. if ($("#"+varname + " .title").css("font-size")) {
  772. $("#elem_title_size").val(parseFloat($("#"+varname + " .title").css("font-size")));
  773. }
  774. $("#elem_unit_text").val($("#"+varname + " .unit_title").text().trim());
  775. $("#elem_unit_size").val("");
  776. if ($("#"+varname + " .varval").css("font-size")) {
  777. $("#elem_unit_size").val(parseFloat($("#"+varname + " .varval").css("font-size")));
  778. }
  779. $("#elem_lesser_range").val("");
  780. if ($("#"+varname).attr("data-lesser") ) {
  781. $("#elem_lesser_range").val($("#"+varname).attr("data-lesser"));
  782. }
  783. $("#elem_larger_range").val("");
  784. if ($("#"+varname).attr("data-larger") ) {
  785. $("#elem_larger_range").val($("#"+varname).attr("data-larger"));
  786. }
  787. $("#elem_condition_range").val("");
  788. if ($("#"+varname).attr("data-cond") ) {
  789. $("#elem_condition_range").val($("#"+varname).attr("data-cond"));
  790. }
  791. $("#elem_formula").val("");
  792. if ($("#"+varname).attr("data-formula") ) {
  793. $("#elem_formula").val($("#"+varname).attr("data-formula"));
  794. }
  795. $("#elem_title_style").val("400");
  796. var fontWeight = $("#"+varname + " .title").css("font-weight");
  797. if (fontWeight == 'bold' || fontWeight == '700') {
  798. $("#elem_title_style").val("700");
  799. }
  800. $("#elem_unit_style").val("400");
  801. var fontWeight = $("#"+varname + " .varval").css("font-weight");
  802. if (fontWeight == 'bold' || fontWeight == '700') {
  803. $("#elem_unit_style").val("700");
  804. }
  805. } else if (vartype == "calc") {
  806. var vid = varname.split("_");
  807. vid = vid[1];
  808. $("#virtual_id_text").val(vid);
  809. $("#elem_title_text").val($("#"+varname + " .title").text().trim());
  810. $("#elem_title_size").val("");
  811. if ($("#"+varname + " .title").css("font-size")) {
  812. $("#elem_title_size").val(parseFloat($("#"+varname + " .title").css("font-size")));
  813. }
  814. $("#elem_unit_text").val($("#"+varname + " .unit_title").text().trim());
  815. $("#elem_unit_size").val("");
  816. if ($("#"+varname + " .varval").css("font-size")) {
  817. $("#elem_unit_size").val(parseFloat($("#"+varname + " .varval").css("font-size")));
  818. }
  819. $("#elem_lesser_range").val("");
  820. if ($("#"+varname).attr("data-lesser") ) {
  821. $("#elem_lesser_range").val($("#"+varname).attr("data-lesser"));
  822. }
  823. $("#elem_larger_range").val("");
  824. if ($("#"+varname).attr("data-larger") ) {
  825. $("#elem_larger_range").val($("#"+varname).attr("data-larger"));
  826. }
  827. $("#elem_condition_range").val("");
  828. if ($("#"+varname).attr("data-cond") ) {
  829. $("#elem_condition_range").val($("#"+varname).attr("data-cond"));
  830. }
  831. $("#elem_formula").val("");
  832. if ($("#"+varname).attr("data-formula") ) {
  833. $("#elem_formula").val($("#"+varname).attr("data-formula"));
  834. }
  835. } else if (vartype == "ventil") {
  836. $("#elem_unit_text").val("{'on':"+$("#"+varname).attr("data-on") + ",'off':"+$("#"+varname).attr("data-off")+"}" );
  837. } else if (vartype == "integer-to-string") {
  838. $("#elem_title_text").val($("#"+varname + " .title").text().trim());
  839. $("#elem_title_size").val("");
  840. if ($("#"+varname + " .title").css("font-size")) {
  841. $("#elem_title_size").val(parseFloat($("#"+varname + " .title").css("font-size")));
  842. }
  843. $("#elem_unit_text").val($("#"+varname).attr("data-dict"));
  844. $("#elem_condition_range").val("");
  845. if ($("#"+varname).attr("data-cond") ) {
  846. $("#elem_condition_range").val($("#"+varname).attr("data-cond"));
  847. }
  848. }
  849. for(key in mydata) {
  850. //console.log(key, varname);
  851. if(($("#" + key).length > 0) && (key == varname) ) {
  852. //if (!$("#"+varname).hasClass("box_highlight")) {
  853. $("#"+key).addClass("box_highlight");
  854. //}
  855. } else {
  856. $("#"+key).removeClass("box_highlight");
  857. }
  858. }
  859. }
  860. jQuery(window).load(function () {
  861. $("#varname > option").each(function() {
  862. if ($('#'+this.text).length){
  863. $('#'+this.text).draggable();
  864. $('#'+this.text).resizable();
  865. $('#'+this.text).click(function() {
  866. //console.log($(this).attr("id"));
  867. $("#varname").val($(this).attr("id"));
  868. $("#buttonHighlight").trigger("click");
  869. });
  870. }
  871. //console.log(this.text + ' ' + this.value);
  872. });
  873. $("#buttonHighlight").trigger("click");
  874. $("#varname").change(function() {
  875. varval = $( "#varname option:selected").val();
  876. varname = $("#varname option:selected").text();
  877. console.log(varval, varname);
  878. $("#buttonHighlight").trigger("click");
  879. });
  880. $("#vartype").change(function() {
  881. vartype = $("#vartype option:selected").val();
  882. if ((vartype == "header") || (vartype == "calc")) {
  883. $("#varname").val("");
  884. // clear values
  885. $("#elem_title_text").val("");
  886. $("#elem_title_size").val("");
  887. $("#elem_unit_text").val("");
  888. $("#elem_unit_size").val("");
  889. $("#elem_lesser_range").val("");
  890. $("#elem_larger_range").val("");
  891. $("#elem_condition_range").val("");
  892. $("#elem_formula").val("");
  893. }
  894. });
  895. });
  896. </script>
  897. </body>
  898. </html>