status.html 43 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>{{ data['title'] }} Status display</title>
  6. <meta name="description"
  7. content="Status display generated by BORA.">
  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">{{ data['title'] }} data monitoring. Last refreshed</div>
  16. <div id="page_title_cache" style="display:none;">{{ data['title'] }}</div>
  17. {% if data['style'] %}
  18. {% for key in data['style'] %}
  19. {% if data['style'][key]['type'] == "calc" %}
  20. <div style='position: absolute; top: {{ data['style'][key]['top'] }}; left:{{
  21. data['style'][key]['left'] }}; width:{{ data['style'][key]['width'] }}px;
  22. height:{{ data['style'][key]['height'] }}px;
  23. {% if "background_color" in data['style'][key] %}
  24. background-color:{{ data['style'][key]['background_color'] }}'
  25. {% else%}
  26. {% end %}
  27. {% if "condition" in data['style'][key] %}
  28. data-cond="{{ data['style'][key]['condition'] }}"
  29. {% else%}position
  30. {% end%}
  31. {% if "formula" in data['style'][key] %}
  32. data-formula="{{ data['style'][key]['formula'] }}"
  33. {% else %}
  34. {% end %}
  35. {% if "lesser" in data['style'][key] %}
  36. data-lesser="{{ data['style'][key]['lesser'] }}"
  37. {% else %}
  38. {% end %}
  39. {% if "larger" in data['style'][key] %}
  40. data-larger="{{ data['style'][key]['larger'] }}"
  41. {% else %}
  42. {% end %}
  43. {% if "decimal" in data['style'][key] %}
  44. data-decimal="{{ data['style'][key]['decimal'] }}"
  45. {% else %}
  46. {% end %}
  47. data-type="{{ data['style'][key]['type'] }}" class='databox' id="{{ key }}">
  48. <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"> --- </span><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></p>
  49. </div>
  50. {% else %}
  51. {% end %}
  52. {% if data['style'][key]['type'] == "data" %}
  53. {% if "ref" in data['style'][key] %}
  54. <div tooltip="{{ data['style'][key]['ref'] }}"
  55. {% else %}
  56. <div tooltip="{{ key }}"
  57. {% end %}
  58. class="databox" 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;
  59. {% if "background_color" in data['style'][key] %}
  60. background-color:{{ data['style'][key]['background_color'] }};'
  61. {% else%}
  62. {% end%}
  63. {% if "condition" in data['style'][key] %}
  64. data-cond="{{ data['style'][key]['condition'] }}"
  65. {% else%}
  66. {% end%}
  67. {% if "formula" in data['style'][key] %}
  68. data-formula="{{ data['style'][key]['formula'] }}"
  69. {% else %}
  70. {% end %}
  71. {% if "lesser" in data['style'][key] %}
  72. data-lesser="{{ data['style'][key]['lesser'] }}"
  73. {% else %}
  74. {% end %}
  75. {% if "larger" in data['style'][key] %}
  76. data-larger="{{ data['style'][key]['larger'] }}"
  77. {% else %}
  78. {% end %}
  79. {% if "decimal" in data['style'][key] %}
  80. data-decimal="{{ data['style'][key]['decimal'] }}"
  81. {% else %}
  82. {% end %}
  83. {% if "exponential" in data['style'][key] %}
  84. data-exponential="{{ data['style'][key]['exponential'] }}"
  85. {% else %}
  86. {% end %}
  87. {% if "trend" in data['style'][key] %}
  88. data-trend="{{ data['style'][key]['trend'] }}"
  89. {% else %}
  90. {% end %}
  91. {% if "linkhtml" in data['style'][key] %}
  92. {% if data['style'][key]['linkhtml'] == 'true' %}
  93. {% if "server" in data %}
  94. onclick="window.open( '{{ data["server"] }}#module=graph&{{ data['varname'][data['style'][key]['ref']] }}&experiment=-&window=86400&module=graph&virtual=srctree&srctree=&infomod=legend', '_blank');"
  95. {% else %}
  96. {% end %}
  97. {% else %}
  98. {% end %}
  99. {% else %}
  100. {% end %}
  101. {% if "ref" in data['style'][key] %}
  102. data-type="{{ data['style'][key]['type'] }}" id="{{ key }}">
  103. <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"> --- </span><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>
  104. {% if "trend" in data['style'][key] %}
  105. {% if data['style'][key]['trend'] == 'true' %}
  106. </p>
  107. {% else %}
  108. {% end %}
  109. {% else %}
  110. {% end %}
  111. </div>
  112. {% else %}
  113. data-type="{{ data['style'][key]['type'] }}" id="{{ key }}">
  114. <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"> --- </span><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>
  115. {% if "trend" in data['style'][key] %}
  116. {% if data['style'][key]['trend'] == 'true' %}
  117. </p>
  118. {% else %}
  119. {% end %}
  120. {% else %}
  121. {% end %}
  122. </div>
  123. {% end %}
  124. {% else %}
  125. {% end %}
  126. {% if data['style'][key]['type'] == "icon" %}
  127. {% if data['style'][key]['icon'] == "valve" %}
  128. {% if "ref" in data['style'][key] %}
  129. <div tooltip="{{ data['style'][key]['ref'] }}"
  130. {% else %}
  131. <div tooltip="{{ key }}"
  132. {% end %}
  133. 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;
  134. {% if "background_color" in data['style'][key] %}
  135. background-color:{{ data['style'][key]['background_color'] }};'
  136. {% else%}
  137. {% end%}
  138. {% if "trend" in data['style'][key] %}
  139. data-trend="{{ data['style'][key]['trend'] }}"
  140. {% else %}
  141. {% end %}
  142. {% if data['style'][key]['linkhtml'] == 'true' %}
  143. {% if "server" in data %}
  144. onclick="window.open( '{{ data["server"] }}#module=graph&{{ data['varname'][data['style'][key]['ref']] }}&experiment=-&window=86400&module=graph&virtual=srctree&srctree=&infomod=legend', '_blank');"
  145. {% else %}
  146. {% end %}
  147. {% else %}
  148. {% end %}
  149. {% if "ref" in data['style'][key] %}
  150. data-type="{{ data['style'][key]['type'] }}" data-icon="{{ data['style'][key]['icon'] }}" data-off="{{ data['style'][key]['off'] }}" data-offexpression="{{ data['style'][key]['off_condition'] }}" data-on="{{ data['style'][key]['on'] }}" data-onexpression="{{ data['style'][key]['on_condition'] }}" class='databox' id="{{ key }}">
  151. {% if "trend" in data['style'][key] %}
  152. {% if data['style'][key]['trend'] == 'true' %}
  153. {% else %}
  154. {% end %}
  155. {% else %}
  156. {% end %}
  157. <div class="icon">
  158. <img width="{{ data['style'][key]['width'] }}px" height="{{ data['style'][key]['height'] }}px" style='transform: {{ data['style'][key]['rotate'] }}' src='{{ static_url("valve_inactive.png") }}'></img>
  159. </div>
  160. </div>
  161. {% else %}
  162. data-type="{{ data['style'][key]['type'] }}" data-icon="{{ data['style'][key]['icon'] }}" data-off="{{ data['style'][key]['off'] }}" data-offexpression="{{ data['style'][key]['off_condition'] }}" data-on="{{ data['style'][key]['on'] }}" data-onexpression="{{ data['style'][key]['on_condition'] }}" class='databox' id="{{ key }}">
  163. {% if data['style'][key]['trend'] == 'true' %}
  164. {% else %}
  165. {% end %}
  166. <div class="icon">
  167. <img width="{{ data['style'][key]['width'] }}px" height="{{ data['style'][key]['height'] }}px" style='transform: {{ data['style'][key]['rotate'] }}' src='{{ static_url("valve_inactive.png") }}'></img>
  168. </div>
  169. </div>
  170. {% end %}
  171. {% else %}
  172. {% end %}
  173. {% if data['style'][key]['icon'] == "commbit" %}
  174. {% if "ref" in data['style'][key] %}
  175. <div tooltip="{{ data['style'][key]['ref'] }}"
  176. {% else %}
  177. <div tooltip="{{ key }}"
  178. {% end %}
  179. 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;
  180. {% if "background_color" in data['style'][key] %}
  181. background-color:{{ data['style'][key]['background_color'] }};'
  182. {% else%}
  183. {% end%}
  184. {% if "trend" in data['style'][key] %}
  185. data-trend="{{ data['style'][key]['trend'] }}"
  186. {% else %}
  187. {% end %}
  188. {% if data['style'][key]['linkhtml'] == 'true' %}
  189. {% if "server" in data %}
  190. onclick="window.open( '{{ data["server"] }}#module=graph&{{ data['varname'][data['style'][key]['ref']] }}&experiment=-&window=86400&module=graph&virtual=srctree&srctree=&infomod=legend', '_blank');"
  191. {% else %}
  192. {% end %}
  193. {% else %}
  194. {% end %}
  195. {% if "ref" in data['style'][key] %}
  196. data-type="{{ data['style'][key]['type'] }}" data-icon="{{ data['style'][key]['icon'] }}" data-off="{{ data['style'][key]['off'] }}" data-offexpression="{{ data['style'][key]['off_condition'] }}" data-on="{{ data['style'][key]['on'] }}" data-onexpression="{{ data['style'][key]['on_condition'] }}" class='databox' id="{{ key }}">
  197. {% if data['style'][key]['trend'] == 'true' %}
  198. {% else %}
  199. {% end %}
  200. <div class="icon">
  201. <img width="{{ data['style'][key]['width'] }}px" height="{{ data['style'][key]['height'] }}px" style='transform: {{ data['style'][key]['rotate'] }}' src='{{ static_url("commbit_inactive.svg") }}'></img>
  202. </div>
  203. </div>
  204. {% else %}
  205. data-type="{{ data['style'][key]['type'] }}" data-icon="{{ data['style'][key]['icon'] }}" data-off="{{ data['style'][key]['off'] }}" data-offexpression="{{ data['style'][key]['off_condition'] }}" data-on="{{ data['style'][key]['on'] }}" data-onexpression="{{ data['style'][key]['on_condition'] }}" class='databox' id="{{ key }}">
  206. {% if data['style'][key]['trend'] == 'true' %}
  207. {% else %}
  208. {% end %}
  209. <div class="icon">
  210. <img width="{{ data['style'][key]['width'] }}px" height="{{ data['style'][key]['height'] }}px" style='transform: {{ data['style'][key]['rotate'] }}' src='{{ static_url("commbit_inactive.svg") }}'></img>
  211. </div>
  212. </div>
  213. {% end %}
  214. {% else %}
  215. {% end %}
  216. {% if data['style'][key]['icon'] == "alarm" %}
  217. {% if "ref" in data['style'][key] %}
  218. <div tooltip="{{ data['style'][key]['ref'] }}"
  219. {% else %}
  220. <div tooltip="{{ key }}"
  221. {% end %}
  222. 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;
  223. {% if "background_color" in data['style'][key] %}
  224. background-color:{{ data['style'][key]['background_color'] }};'
  225. {% else%}
  226. {% end%}
  227. {% if "trend" in data['style'][key] %}
  228. data-trend="{{ data['style'][key]['trend'] }}"
  229. {% else %}
  230. {% end %}
  231. {% if data['style'][key]['linkhtml'] == 'true' %}
  232. {% if "server" in data %}
  233. onclick="window.open( '{{ data["server"] }}#module=graph&{{ data['varname'][data['style'][key]['ref']] }}&experiment=-&window=86400&module=graph&virtual=srctree&srctree=&infomod=legend', '_blank');"
  234. {% else %}
  235. {% end %}
  236. {% else %}
  237. {% end %}
  238. {% if "ref" in data['style'][key] %}
  239. data-type="{{ data['style'][key]['type'] }}" data-icon="{{ data['style'][key]['icon'] }}" data-off="{{ data['style'][key]['off'] }}" data-offexpression="{{ data['style'][key]['off_condition'] }}" data-on="{{ data['style'][key]['on'] }}" data-onexpression="{{ data['style'][key]['on_condition'] }}" class='databox' id="{{ key }}">
  240. {% if data['style'][key]['trend'] == 'true' %}
  241. {% else %}
  242. {% end %}
  243. <div class="icon">
  244. <img width="{{ data['style'][key]['width'] }}px" height="{{ data['style'][key]['height'] }}px" style='transform: {{ data['style'][key]['rotate'] }}' src='{{ static_url("alarm_inactive.svg") }}'></img>
  245. </div>
  246. </div>
  247. {% else %}
  248. data-type="{{ data['style'][key]['type'] }}" data-icon="{{ data['style'][key]['icon'] }}" data-off="{{ data['style'][key]['off'] }}" data-offexpression="{{ data['style'][key]['off_condition'] }}" data-on="{{ data['style'][key]['on'] }}" data-onexpression="{{ data['style'][key]['on_condition'] }}" class='databox' id="{{ key }}">
  249. {% if data['style'][key]['trend'] == 'true' %}
  250. {% else %}
  251. {% end %}
  252. <div class="icon">
  253. <img width="{{ data['style'][key]['width'] }}px" height="{{ data['style'][key]['height'] }}px" style='transform: {{ data['style'][key]['rotate'] }}' src='{{ static_url("alarm_inactive.svg") }}'></img>
  254. </div>
  255. </div>
  256. {% end %}
  257. {% else %}
  258. {% end %}
  259. {% if data['style'][key]['icon'] == "TMP" %}
  260. {% if "ref" in data['style'][key] %}
  261. <div tooltip="{{ data['style'][key]['ref'] }}"
  262. {% else %}
  263. <div tooltip="{{ key }}"
  264. {% end %}
  265. 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;
  266. {% if "background_color" in data['style'][key] %}
  267. background-color:{{ data['style'][key]['background_color'] }};'
  268. {% else%}
  269. {% end%}
  270. {% if "trend" in data['style'][key] %}
  271. data-trend="{{ data['style'][key]['trend'] }}"
  272. {% else %}
  273. {% end %}
  274. {% if data['style'][key]['linkhtml'] == 'true' %}
  275. {% if "server" in data %}
  276. onclick="window.open( '{{ data["server"] }}#module=graph&{{ data['varname'][data['style'][key]['ref']] }}&experiment=-&window=86400&module=graph&virtual=srctree&srctree=&infomod=legend', '_blank');"
  277. {% else %}
  278. {% end %}
  279. {% else %}
  280. {% end %}
  281. {% if "ref" in data['style'][key] %}
  282. data-type="{{ data['style'][key]['type'] }}" data-icon="{{ data['style'][key]['icon'] }}" data-off="{{ data['style'][key]['off'] }}" data-offexpression="{{ data['style'][key]['off_condition'] }}" data-on="{{ data['style'][key]['on'] }}" data-onexpression="{{ data['style'][key]['on_condition'] }}" class='databox' id="{{ key }}">
  283. {% if data['style'][key]['trend'] == 'true' %}
  284. {% else %}
  285. {% end %}
  286. <div class="icon">
  287. <img width="{{ data['style'][key]['width'] }}px" height="{{ data['style'][key]['height'] }}px" style='transform: {{ data['style'][key]['rotate'] }}' src='{{ static_url("TMP_inactive.svg") }}'></img>
  288. </div>
  289. </div>
  290. {% else %}
  291. data-type="{{ data['style'][key]['type'] }}" data-icon="{{ data['style'][key]['icon'] }}" data-off="{{ data['style'][key]['off'] }}" data-offexpression="{{ data['style'][key]['off_condition'] }}" data-on="{{ data['style'][key]['on'] }}" data-onexpression="{{ data['style'][key]['on_condition'] }}" class='databox' id="{{ key }}">
  292. {% if data['style'][key]['trend'] == 'true' %}
  293. {% else %}
  294. {% end %}
  295. <div class="icon">
  296. <img width="{{ data['style'][key]['width'] }}px" height="{{ data['style'][key]['height'] }}px" style='transform: {{ data['style'][key]['rotate'] }}' src='{{ static_url("TMP_inactive.svg") }}'></img>
  297. </div>
  298. </div>
  299. {% end %}
  300. {% else %}
  301. {% end %}
  302. {% if data['style'][key]['icon'] == "relay" %}
  303. {% if "ref" in data['style'][key] %}
  304. <div tooltip="{{ data['style'][key]['ref'] }}"
  305. {% else %}
  306. <div tooltip="{{ key }}"
  307. {% end %}
  308. 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;
  309. {% if "background_color" in data['style'][key] %}
  310. background-color:{{ data['style'][key]['background_color'] }};'
  311. {% else%}
  312. {% end%}
  313. {% if "trend" in data['style'][key] %}
  314. data-trend="{{ data['style'][key]['trend'] }}"
  315. {% else %}
  316. {% end %}
  317. {% if data['style'][key]['linkhtml'] == 'true' %}
  318. {% if "server" in data %}
  319. onclick="window.open( '{{ data["server"] }}#module=graph&{{ data['varname'][data['style'][key]['ref']] }}&experiment=-&window=86400&module=graph&virtual=srctree&srctree=&infomod=legend', '_blank');"
  320. {% else %}
  321. {% end %}
  322. {% else %}
  323. {% end %}
  324. {% if "ref" in data['style'][key] %}
  325. data-type="{{ data['style'][key]['type'] }}" data-icon="{{ data['style'][key]['icon'] }}" data-off="{{ data['style'][key]['off'] }}" data-offexpression="{{ data['style'][key]['off_condition'] }}" data-on="{{ data['style'][key]['on'] }}" data-onexpression="{{ data['style'][key]['on_condition'] }}" class='databox' id="{{ key }}">
  326. {% if data['style'][key]['trend'] == 'true' %}
  327. {% else %}
  328. {% end %}
  329. <div class="icon">
  330. <img width="{{ data['style'][key]['width'] }}px" height="{{ data['style'][key]['height'] }}px" style='transform: {{ data['style'][key]['rotate'] }}' src='{{ static_url("relay_inactive.svg") }}'></img>
  331. </div>
  332. </div>
  333. {% else %}
  334. data-type="{{ data['style'][key]['type'] }}" data-icon="{{ data['style'][key]['icon'] }}" data-off="{{ data['style'][key]['off'] }}" data-offexpression="{{ data['style'][key]['off_condition'] }}" data-on="{{ data['style'][key]['on'] }}" data-onexpression="{{ data['style'][key]['on_condition'] }}" class='databox' id="{{ key }}">
  335. {% if data['style'][key]['trend'] == 'true' %}
  336. {% else %}
  337. {% end %}
  338. <div class="icon">
  339. <img width="{{ data['style'][key]['width'] }}px" height="{{ data['style'][key]['height'] }}px" style='transform: {{ data['style'][key]['rotate'] }}' src='{{ static_url("relay_inactive.svg") }}'></img>
  340. </div>
  341. </div>
  342. {% end %}
  343. {% else %}
  344. {% end %}
  345. {% if data['style'][key]['icon'] == "switch" %}
  346. {% if "ref" in data['style'][key] %}
  347. <div tooltip="{{ data['style'][key]['ref'] }}"
  348. {% else %}
  349. <div tooltip="{{ key }}"
  350. {% end %}
  351. 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;
  352. {% if "background_color" in data['style'][key] %}
  353. background-color:{{ data['style'][key]['background_color'] }};'
  354. {% else%}
  355. {% end%}
  356. {% if "trend" in data['style'][key] %}
  357. data-trend="{{ data['style'][key]['trend'] }}"
  358. {% else %}
  359. {% end %}
  360. {% if data['style'][key]['linkhtml'] == 'true' %}
  361. {% if "server" in data %}
  362. onclick="window.open( '{{ data["server"] }}#module=graph&{{ data['varname'][data['style'][key]['ref']] }}&experiment=-&window=86400&module=graph&virtual=srctree&srctree=&infomod=legend', '_blank');"
  363. {% else %}
  364. {% end %}
  365. {% else %}
  366. {% end %}
  367. {% if "ref" in data['style'][key] %}
  368. data-type="{{ data['style'][key]['type'] }}" data-icon="{{ data['style'][key]['icon'] }}" data-off="{{ data['style'][key]['off'] }}" data-offexpression="{{ data['style'][key]['off_condition'] }}" data-on="{{ data['style'][key]['on'] }}" data-onexpression="{{ data['style'][key]['on_condition'] }}" class='databox' id="{{ key }}">
  369. {% if data['style'][key]['trend'] == 'true' %}
  370. {% else %}
  371. {% end %}
  372. <div class="icon">
  373. <img width="{{ data['style'][key]['width'] }}px" height="{{ data['style'][key]['height'] }}px" style='transform: {{ data['style'][key]['rotate'] }}' src='{{ static_url("switch_inactive.svg") }}'></img>
  374. </div>
  375. </div>
  376. {% else %}
  377. data-type="{{ data['style'][key]['type'] }}" data-icon="{{ data['style'][key]['icon'] }}" data-off="{{ data['style'][key]['off'] }}" data-offexpression="{{ data['style'][key]['off_condition'] }}" data-on="{{ data['style'][key]['on'] }}" data-onexpression="{{ data['style'][key]['on_condition'] }}" class='databox' id="{{ key }}">
  378. {% if data['style'][key]['trend'] == 'true' %}
  379. {% else %}
  380. {% end %}
  381. <div class="icon">
  382. <img width="{{ data['style'][key]['width'] }}px" height="{{ data['style'][key]['height'] }}px" style='transform: {{ data['style'][key]['rotate'] }}' src='{{ static_url("switch_inactive.svg") }}'></img>
  383. </div>
  384. </div>
  385. {% end %}
  386. {% else %}
  387. {% end %}
  388. {% if data['style'][key]['icon'] == "bottle" %}
  389. {% if "ref" in data['style'][key] %}
  390. <div tooltip="{{ data['style'][key]['ref'] }}"
  391. {% else %}
  392. <div tooltip="{{ key }}"
  393. {% end %}
  394. 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;
  395. {% if "background_color" in data['style'][key] %}
  396. background-color:{{ data['style'][key]['background_color'] }};'
  397. {% else%}
  398. {% end%}
  399. {% if "trend" in data['style'][key] %}
  400. data-trend="{{ data['style'][key]['trend'] }}"
  401. {% else %}
  402. {% end %}
  403. {% if data['style'][key]['linkhtml'] == 'true' %}
  404. {% if "server" in data %}
  405. onclick="window.open( '{{ data["server"] }}#module=graph&{{ data['varname'][data['style'][key]['ref']] }}&experiment=-&window=86400&module=graph&virtual=srctree&srctree=&infomod=legend', '_blank');"
  406. {% else %}
  407. {% end %}
  408. {% else %}
  409. {% end %}
  410. {% if "ref" in data['style'][key] %}
  411. data-type="{{ data['style'][key]['type'] }}" data-icon="{{ data['style'][key]['icon'] }}" data-off="{{ data['style'][key]['off'] }}" data-offexpression="{{ data['style'][key]['off_condition'] }}" data-on="{{ data['style'][key]['on'] }}" data-onexpression="{{ data['style'][key]['on_condition'] }}" class='databox' id="{{ key }}">
  412. {% if data['style'][key]['trend'] == 'true' %}
  413. {% else %}
  414. {% end %}
  415. <div class="icon">
  416. <img width="{{ data['style'][key]['width'] }}px" height="{{ data['style'][key]['height'] }}px" style='transform: {{ data['style'][key]['rotate'] }}' src='{{ static_url("bottle_inactive.svg") }}'></img>
  417. </div>
  418. </div>
  419. {% else %}
  420. data-type="{{ data['style'][key]['type'] }}" data-icon="{{ data['style'][key]['icon'] }}" data-off="{{ data['style'][key]['off'] }}" data-offexpression="{{ data['style'][key]['off_condition'] }}" data-on="{{ data['style'][key]['on'] }}" data-onexpression="{{ data['style'][key]['on_condition'] }}" class='databox' id="{{ key }}">
  421. {% if data['style'][key]['trend'] == 'true' %}
  422. {% else %}
  423. {% end %}
  424. <div class="icon">
  425. <img width="{{ data['style'][key]['width'] }}px" height="{{ data['style'][key]['height'] }}px" style='transform: {{ data['style'][key]['rotate'] }}' src='{{ static_url("bottle_inactive.svg") }}'></img>
  426. </div>
  427. </div>
  428. {% end %}
  429. {% else %}
  430. {% end %}
  431. {% else %}
  432. {% end %}
  433. {% if data['style'][key]['type'] == "integer-to-string" %}
  434. <div tooltip="{{ key }}" style='position: absolute; top: {{
  435. data['style'][key]['top'] }}; left:{{ data['style'][key]['left'] }};
  436. width:{{ data['style'][key]['width'] }}px; height:{{
  437. data['style'][key]['height'] }}px;
  438. {% if "background_color" in data['style'][key] %}
  439. background-color:{{ data['style'][key]['background_color'] }};'
  440. {% else%}
  441. '
  442. {% end%}
  443. {% if "cond" in data['style'][key] %}
  444. data-cond="{{ data['style'][key]['cond'] }}"
  445. {% else %}
  446. {% end %}
  447. {% if "trend" in data['style'][key] %}
  448. data-trend="{{ data['style'][key]['trend'] }}"
  449. {% else %}
  450. {% end %}
  451. {% if "linkhtml" in data['style'][key] %}
  452. {% if data['style'][key]['linkhtml'] == 'true' %}
  453. {% if "server" in data %}
  454. onclick="window.open( '{{ data["server"] }}#module=graph&{{ data['varname'][data['style'][key]['ref']] }}&experiment=-&window=86400&module=graph&virtual=srctree&srctree=&infomod=legend', '_blank');"
  455. {% else %}
  456. {% end %}
  457. {% else %}
  458. {% end %}
  459. {% else %}
  460. {% end %}
  461. data-dict="{{ data['style'][key]['dict'] }}" data-type="{{ data['style'][key]['type'] }}" class='databox' id="{{ key }}">
  462. <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>
  463. {% if "trend" in data['style'][key] %}
  464. {% if data['style'][key]['trend'] == 'true' %}
  465. {% else %}
  466. {% end %}
  467. {% else %}
  468. {% end %}
  469. </p>
  470. </div>
  471. {% else %}
  472. {% end %}
  473. {% if data['style'][key]['type'] == "header" %}
  474. <div style='position: absolute; top: {{ data['style'][key]['top'] }}; left:{{
  475. data['style'][key]['left'] }}; width:{{ data['style'][key]['width'] }}px;
  476. height:{{ data['style'][key]['height'] }}px;
  477. {% if "background_color" in data['style'][key] %}
  478. background-color:{{ data['style'][key]['background_color'] }};'
  479. {% else %}
  480. {% end %}
  481. {% if "titlelink" in data['style'][key] %}
  482. onclick="window.open( '{{ data['style'][key]['titlelink'] }}' );"
  483. {% else %}
  484. {% end %}
  485. data-type="{{
  486. data['style'][key]['type'] }}" class='databox' id="{{ key }}">
  487. <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>
  488. </div>
  489. {% else %}
  490. {% end %}
  491. {% end %}
  492. {% else %}
  493. {% end %}
  494. {% if "background" in data %}
  495. <img src="{{ static_url( data['background'] ) }}"></img>
  496. {% else %}
  497. <img src="{{ static_url( 'background.png' ) }}"></img>
  498. {% end %}
  499. <!-- java script -->
  500. <script src="{{ static_url("jquery-1.12.3.min.js") }}"></script>
  501. <script src="{{ static_url("jquery-ui.min.js") }}"></script>
  502. <script src="{{ static_url("math.min.js") }}"></script>
  503. <script>
  504. jQuery(window).load(function () {
  505. var win_width = $(document).width();
  506. var win_height = $(document).height();
  507. $(".databox").hover(function(){
  508. var trend_time = Math.floor(Date.now() / 1000);
  509. var key = $(this).attr('id');
  510. if ($("#" + key).attr('data-trend') == "true") {
  511. $('#'+ key).append('<span class="popup" style="top:0; left:250px;"><img src="/static/'+ $("#page_title_cache").text().toLowerCase() +'/images/'+key+'.png?time='+trend_time+'" width="600px" height="400px"/></span>');
  512. var key_left = parseInt($("#" + key).css("left"));
  513. var pos_left = key_left + 850;
  514. var key_top = parseInt($("#" + key).css("top"));
  515. var pos_top = key_top + 400;
  516. if(pos_left > win_width) {
  517. $("#" + key + " .popup").css({
  518. 'right':'250px',
  519. 'left': ''
  520. });
  521. }
  522. if(pos_top > win_height) {
  523. $("#" + key + " .popup").css({
  524. 'bottom':'0px',
  525. 'top': ''
  526. });
  527. }
  528. }
  529. });
  530. myTimer();
  531. var myVar = setInterval(myTimer, 10000);
  532. function myTimer() {
  533. var dataToSend = {};
  534. $.ajax({
  535. url: '/'+$("#page_title_cache").text().toLowerCase()+'/getdata/',
  536. //url: '/wgts/getabcddata/',
  537. type: 'GET',
  538. data: dataToSend,
  539. success: function (response) {
  540. //var objresponse = JSON.parse(response);
  541. console.log(response);
  542. for (var key in response) {
  543. //console.log(key, response[key]);
  544. data_type = $("#" + key).attr('data-type');
  545. if($("#" + key).length > 0) {
  546. if (data_type == "data") {
  547. //console.log("data");
  548. var datavalue, set_color, formula;
  549. var formula_attr = $("#" + key).attr('data-formula');
  550. var delta = (new Date().getTime()/1000.0) - response[key]["timestamp"];
  551. var dateTime = new Date( response[key]["timestamp"]*1000.0 );
  552. $("#"+key).attr('tooltip', key + "\nDeltaTime: " + parseFloat(delta).toFixed(3) + " s (" + parseFloat(delta / 60.0).toFixed(3) + " min)");
  553. if (response[key]["value"]) {
  554. if (formula_attr) {
  555. datavalue = parseFloat(response[key]["value"]).toFixed($("#" + key).attr('data-decimal'));
  556. formula = formula_attr.replace("x", datavalue.toString());
  557. datavalue = math.round(math.eval(formula),2);
  558. datavalue = datavalue.toFixed($("#" + key).attr('data-decimal'));
  559. } else {
  560. if ( ($("#" + key).attr('data-exponential')) == "True" || ($("#" + key).attr('data-exponential')) == "true" ) {
  561. datavalue = parseFloat(response[key]["value"]);
  562. datavalue = datavalue.toExponential(2)
  563. } else {
  564. datavalue = parseFloat(response[key]["value"]).toFixed($("#" + key).attr('data-decimal'));
  565. }
  566. }
  567. set_color = "green";
  568. } else {
  569. datavalue = "---";
  570. set_color = "black";
  571. }
  572. $(".varval", "#" + key).text(datavalue);
  573. var condition_attr = $("#" + key).attr('data-cond');
  574. var lesser_attr = $("#" + key).attr('data-lesser');
  575. var larger_attr = $("#" + key).attr('data-larger');
  576. //console.log(condition_attr);
  577. if (condition_attr) {
  578. if (response[key]["value"] == condition_attr) {
  579. set_color = "red";
  580. }
  581. }
  582. if (lesser_attr) {
  583. if (parseFloat(response[key]["value"]) < parseFloat(lesser_attr)) {
  584. set_color = "red";
  585. }
  586. }
  587. if (larger_attr) {
  588. if (parseFloat(response[key]["value"]) > parseFloat(larger_attr)) {
  589. set_color = "red";
  590. }
  591. }
  592. $(".varval", "#" + key).css("color", set_color);
  593. $(".unit_title", "#" + key).css("color", set_color);
  594. } else if (data_type == "icon") {
  595. //console.log("ventil");
  596. var delta = (new Date().getTime()/1000.0) - response[key]["timestamp"];
  597. var dateTime = new Date( response[key]["timestamp"]*1000.0 );
  598. $("#"+key).attr('tooltip', key + "\nDeltaTime: " + parseFloat(delta).toFixed(3) + " s (" + parseFloat(delta / 60.0).toFixed(3) + " min)");
  599. var on_attr = $("#" + key).attr('data-on');
  600. var off_attr = $("#" + key).attr('data-off');
  601. var on_condition = $("#" + key).attr('data-onexpression');
  602. var off_condition = $("#" + key).attr('data-offexpression');
  603. if (on_condition == 'onequal'){
  604. if (parseFloat(response[key]["value"]) == parseFloat(on_attr)) {
  605. $("img", "#" + key).attr("src", "/static/" + $("#" + key).attr('data-icon') + "_green.svg");
  606. }
  607. } else if (on_condition == 'onsmaller'){
  608. if (parseFloat(response[key]["value"]) < parseFloat(on_attr)) {
  609. $(".icon img", "#" + key).attr("src", "/static/" + $("#" + key).attr('data-icon') + "_green.svg");
  610. }
  611. } else if (on_condition == 'ongreater'){
  612. if (parseFloat(response[key]["value"]) > parseFloat(on_attr)) {
  613. $(".icon img", "#" + key).attr("src", "/static/" + $("#" + key).attr('data-icon') + "_green.svg");
  614. }
  615. }
  616. if (off_condition == 'offequal'){
  617. if (parseFloat(response[key]["value"]) == parseFloat(off_attr)) {
  618. $(".icon img", "#" + key).attr("src", "/static/" + $("#" + key).attr('data-icon') + "_red.svg");
  619. }
  620. } else if (off_condition == 'offsmaller'){
  621. if (parseFloat(response[key]["value"]) < parseFloat(off_attr)) {
  622. $(".icon img", "#" + key).attr("src", "/static/" + $("#" + key).attr('data-icon') + "_red.svg");
  623. }
  624. } else if (off_condition == 'offgreater'){
  625. if (parseFloat(response[key]["value"]) > parseFloat(off_attr)) {
  626. $(".icon img", "#" + key).attr("src", "/static/" + $("#" + key).attr('data-icon') + "_red.svg");
  627. }
  628. }
  629. } else if (data_type == "integer-to-string") {
  630. //console.log("integer-to-string");
  631. var delta = (new Date().getTime()/1000.0) - response[key]["timestamp"];
  632. var dateTime = new Date( response[key]["timestamp"]*1000.0 );
  633. $("#"+key).attr('tooltip', key + "\nDeltaTime: " + parseFloat(delta).toFixed(3) + " s (" + parseFloat(delta / 60.0).toFixed(3) + " min)");
  634. var dict_attr = JSON.parse($("#" + key).attr('data-dict'));
  635. var dict_cond;
  636. if ($("#"+key).attr("data-cond")) {
  637. dict_cond = JSON.parse($("#" + key).attr('data-cond'));
  638. } else {
  639. dict_cond = {};
  640. }
  641. var dict_color = "";
  642. if (key in response) {
  643. var token = response[key]["value"];
  644. if (token in dict_cond) {
  645. dict_color = dict_cond[token];
  646. }
  647. }
  648. $(".varval", "#" + key).css("color", dict_color);
  649. $(".varval", "#" + key).text(dict_attr[response[key]["value"]]);
  650. }
  651. }
  652. }
  653. $('[id^=virtual_]').each(function( index ) {
  654. var key = this.id;
  655. var ref = key.split("_");
  656. ref.shift();
  657. ref.pop();
  658. ref = ref.join("_");
  659. //ref = ref[1];
  660. //console.log(ref, key);
  661. data_type = $("#" + key).attr('data-type');
  662. if($("#" + key).length > 0) {
  663. if (data_type == "data") {
  664. //console.log(key);
  665. var datavalue, set_color, formula;
  666. var formula_attr = $("#" + key).attr('data-formula');
  667. var delta = (new Date().getTime()/1000.0) - response[ref]["timestamp"];
  668. var dateTime = new Date( response[ref]["timestamp"]*1000.0 );
  669. $("#"+ref).attr('tooltip', key + "\nDeltaTime: " + parseFloat(delta).toFixed(3) + " s (" + parseFloat(delta / 60.0).toFixed(3) + " min)");
  670. if (response[ref]["value"]) {
  671. if (formula_attr) {
  672. datavalue = parseFloat(response[ref]["value"]).toFixed($("#" + key).attr('data-decimal'));
  673. formula = formula_attr.replace("x", datavalue.toString());
  674. datavalue = math.round(math.eval(formula),2);
  675. datavalue = datavalue.toFixed($("#" + key).attr('data-decimal'));
  676. } else {
  677. datavalue = parseFloat(response[ref]["value"]).toFixed($("#" + key).attr('data-decimal'));
  678. }
  679. set_color = "green";
  680. } else {
  681. datavalue = "---";
  682. set_color = "black";
  683. }
  684. $(".varval", "#" + key).text(datavalue);
  685. var condition_attr = $("#" + key).attr('data-cond');
  686. var lesser_attr = $("#" + key).attr('data-lesser');
  687. var larger_attr = $("#" + key).attr('data-larger');
  688. //console.log(condition_attr);
  689. if (condition_attr) {
  690. if (response[ref]["value"] == condition_attr) {
  691. set_color = "red";
  692. }
  693. }
  694. if (lesser_attr) {
  695. if (parseFloat(response[ref]["value"]) < parseFloat(lesser_attr)) {
  696. set_color = "red";
  697. }
  698. }
  699. if (larger_attr) {
  700. if (parseFloat(response[ref]["value"]) > parseFloat(larger_attr)) {
  701. set_color = "red";
  702. }
  703. }
  704. $(".varval", "#" + key).css("color", set_color);
  705. $(".unit_title", "#" + key).css("color", set_color);
  706. } else if (data_type == "icon") {
  707. var on_attr = $("#" + key).attr('data-on');
  708. var off_attr = $("#" + key).attr('data-off');
  709. var on_condition = $("#" + key).attr('data-onexpression');
  710. var off_condition = $("#" + key).attr('data-offexpression');
  711. var delta = (new Date().getTime()/1000.0) - response[ref]["timestamp"];
  712. var dateTime = new Date( response[ref]["timestamp"]*1000.0 );
  713. $("#"+key).attr('tooltip', key + "\nDeltaTime: " + parseFloat(delta).toFixed(3) + " s (" + parseFloat(delta / 60.0).toFixed(3) + " min)");
  714. if (on_condition == 'onequal'){
  715. if (parseFloat(response[ref]["value"]) == parseFloat(on_attr)) {
  716. $("img", "#" + key).attr("src", "/static/" + $("#" + key).attr('data-icon') + "_green.svg");
  717. }
  718. } else if (on_condition == 'onsmaller'){
  719. if (parseFloat(response[ref]["value"]) < parseFloat(on_attr)) {
  720. $("img", "#" + key).attr("src", "/static/" + $("#" + key).attr('data-icon') + "_green.svg");
  721. }
  722. } else if (on_condition == 'ongreater'){
  723. if (parseFloat(response[ref]["value"]) > parseFloat(on_attr)) {
  724. $("img", "#" + key).attr("src", "/static/" + $("#" + key).attr('data-icon') + "_green.svg");
  725. }
  726. }
  727. if (off_condition == 'offequal'){
  728. if (parseFloat(response[ref]["value"]) == parseFloat(off_attr)) {
  729. $("img", "#" + key).attr("src", "/static/" + $("#" + key).attr('data-icon') + "_red.svg");
  730. }
  731. } else if (off_condition == 'offsmaller'){
  732. if (parseFloat(response[ref]["value"]) < parseFloat(off_attr)) {
  733. $("img", "#" + key).attr("src", "/static/" + $("#" + key).attr('data-icon') + "_red.svg");
  734. }
  735. } else if (off_condition == 'offgreater'){
  736. if (parseFloat(response[ref]["value"]) > parseFloat(off_attr)) {
  737. $("img", "#" + key).attr("src", "/static/" + $("#" + key).attr('data-icon') + "_red.svg");
  738. }
  739. }
  740. } else if (data_type == "integer-to-string") {
  741. var delta = (new Date().getTime()/1000.0) - response[key]["timestamp"];
  742. var dateTime = new Date( response[key]["timestamp"]*1000.0 );
  743. $("#"+key).attr('tooltip', key + "\nDeltaTime: " + parseFloat(delta).toFixed(3) + " s (" + parseFloat(delta / 60.0).toFixed(3) + " min)");
  744. var dict_attr = JSON.parse($("#" + key).attr('data-dict'));
  745. var dict_cond;
  746. if ($("#"+key).attr("data-cond")) {
  747. dict_cond = JSON.parse($("#" + key).attr('data-cond'));
  748. } else {
  749. dict_cond = {};
  750. }
  751. var dict_color = "";
  752. if (ref in response) {
  753. var token = response[ref]["value"];
  754. if (token in dict_cond) {
  755. dict_color = dict_cond[token];
  756. }
  757. }
  758. $(".varval", "#" + key).css("color", dict_color);
  759. $(".varval", "#" + key).text(dict_attr[response[ref]["value"]]);
  760. }
  761. }
  762. });
  763. $('[id^=calc_]').each(function( index ) {
  764. //console.log(this.id);
  765. //console.log($(this).attr('data-formula'));
  766. if (typeof $(this).attr('data-formula') != "undefined") {
  767. var myformula = $(this).attr('data-formula').trim();
  768. /*
  769. myformula = myformula.replace(/\[.*?\]/g, '__');
  770. console.log(myformula);
  771. */
  772. var data = myformula;
  773. var re= /\[(.*?)\]/g;
  774. var buffer = []
  775. for(m = re.exec(data); m; m = re.exec(data)){
  776. buffer.push(m[1]);
  777. }
  778. //console.log("Debug:");
  779. //console.log(buffer);
  780. var finalstring = "";
  781. var pattern = /\[(.*?)\]/g;
  782. var teststring = myformula.split(/[\[\]]+/);
  783. //console.log(teststring);
  784. //console.log(finalstring);
  785. for (var i = 0; i < teststring.length; i++) {
  786. var val = "";
  787. if (teststring[i] in response) {
  788. val = response[teststring[i]]["value"];
  789. } else {
  790. val = teststring[i];
  791. }
  792. finalstring += val;
  793. finalstring += " ";
  794. }
  795. finalstring = finalstring.trim();
  796. //console.log(finalstring);
  797. var myvalue = math.round(math.eval(finalstring),2);
  798. myvalue = myvalue.toFixed($("#" + this.id).attr('data-decimal'));
  799. set_color = "green";
  800. console.log(myvalue);
  801. $(".varval", "#" + this.id).text(myvalue);
  802. var condition_attr = $("#" + this.id).attr('data-cond');
  803. var lesser_attr = $("#" + this.id).attr('data-lesser');
  804. var larger_attr = $("#" + this.id).attr('data-larger');
  805. //console.log(condition_attr);
  806. if (condition_attr) {
  807. if (myvalue == condition_attr) {
  808. set_color = "red";
  809. }
  810. }
  811. if (lesser_attr) {
  812. if (parseFloat(myvalue) < parseFloat(lesser_attr)) {
  813. set_color = "red";
  814. }
  815. }
  816. if (larger_attr) {
  817. if (parseFloat(myvalue) > parseFloat(larger_attr)) {
  818. set_color = "red";
  819. }
  820. }
  821. $(".varval", "#" + this.id).css("color", set_color);
  822. $(".unit_title", "#" + this.id).css("color", set_color);
  823. }
  824. });
  825. var page_title_cache = $("#page_title_cache").text();
  826. var datetime = page_title_cache + " data monitoring page. Last Sync: " + response["time"];
  827. $("#page_info").text(datetime);
  828. console.log(datetime);
  829. },
  830. error: function () {
  831. console.log("Error.")
  832. }
  833. });
  834. }
  835. });
  836. </script>
  837. </body>
  838. </html>