334 </xsl:text> |
334 </xsl:text> |
335 <xsl:text>var hmi_widgets = { |
335 <xsl:text>var hmi_widgets = { |
336 </xsl:text> |
336 </xsl:text> |
337 <xsl:for-each select="$hmi_elements"> |
337 <xsl:for-each select="$hmi_elements"> |
338 <xsl:variable name="widget" select="func:parselabel(@inkscape:label)/widget"/> |
338 <xsl:variable name="widget" select="func:parselabel(@inkscape:label)/widget"/> |
339 <xsl:text>"</xsl:text> |
339 <xsl:text> "</xsl:text> |
340 <xsl:value-of select="@id"/> |
340 <xsl:value-of select="@id"/> |
341 <xsl:text>": { |
341 <xsl:text>": { |
342 </xsl:text> |
342 </xsl:text> |
343 <xsl:text> type: "</xsl:text> |
343 <xsl:text> type: "</xsl:text> |
344 <xsl:value-of select="$widget/@type"/> |
344 <xsl:value-of select="$widget/@type"/> |
345 <xsl:text>", |
345 <xsl:text>", |
346 </xsl:text> |
346 </xsl:text> |
347 <xsl:text> args: [ |
347 <xsl:text> args: [ |
348 </xsl:text> |
348 </xsl:text> |
349 <xsl:for-each select="$widget/arg"> |
349 <xsl:for-each select="$widget/arg"> |
350 <xsl:text> "</xsl:text> |
350 <xsl:text> "</xsl:text> |
351 <xsl:value-of select="@value"/> |
351 <xsl:value-of select="@value"/> |
352 <xsl:text>"</xsl:text> |
352 <xsl:text>"</xsl:text> |
353 <xsl:if test="position()!=last()"> |
353 <xsl:if test="position()!=last()"> |
354 <xsl:text>,</xsl:text> |
354 <xsl:text>,</xsl:text> |
355 </xsl:if> |
355 </xsl:if> |
356 <xsl:text> |
356 <xsl:text> |
357 </xsl:text> |
357 </xsl:text> |
358 </xsl:for-each> |
358 </xsl:for-each> |
359 <xsl:text> ], |
359 <xsl:text> ], |
360 </xsl:text> |
360 </xsl:text> |
361 <xsl:text> indexes: [ |
361 <xsl:text> indexes: [ |
362 </xsl:text> |
362 </xsl:text> |
363 <xsl:for-each select="$widget/path"> |
363 <xsl:for-each select="$widget/path"> |
364 <xsl:variable name="hmipath" select="@value"/> |
364 <xsl:variable name="hmipath" select="@value"/> |
365 <xsl:variable name="hmitree_match" select="$indexed_hmitree/*[@hmipath = $hmipath]"/> |
365 <xsl:variable name="hmitree_match" select="$indexed_hmitree/*[@hmipath = $hmipath]"/> |
366 <xsl:choose> |
366 <xsl:choose> |
370 <xsl:value-of select="$hmipath"/> |
370 <xsl:value-of select="$hmipath"/> |
371 <xsl:text>" in HMI tree</xsl:text> |
371 <xsl:text>" in HMI tree</xsl:text> |
372 </xsl:message> |
372 </xsl:message> |
373 </xsl:when> |
373 </xsl:when> |
374 <xsl:otherwise> |
374 <xsl:otherwise> |
375 <xsl:text> </xsl:text> |
375 <xsl:text> </xsl:text> |
376 <xsl:value-of select="$hmitree_match/@index"/> |
376 <xsl:value-of select="$hmitree_match/@index"/> |
377 <xsl:if test="position()!=last()"> |
377 <xsl:if test="position()!=last()"> |
378 <xsl:text>,</xsl:text> |
378 <xsl:text>,</xsl:text> |
379 </xsl:if> |
379 </xsl:if> |
380 <xsl:text> |
380 <xsl:text> |
381 </xsl:text> |
381 </xsl:text> |
382 </xsl:otherwise> |
382 </xsl:otherwise> |
383 </xsl:choose> |
383 </xsl:choose> |
384 </xsl:for-each> |
384 </xsl:for-each> |
385 <xsl:text> ], |
385 <xsl:text> ], |
386 </xsl:text> |
386 </xsl:text> |
387 <xsl:text> element: id("</xsl:text> |
387 <xsl:text> element: id("</xsl:text> |
388 <xsl:value-of select="@id"/> |
388 <xsl:value-of select="@id"/> |
389 <xsl:text>"), |
389 <xsl:text>"), |
390 </xsl:text> |
390 </xsl:text> |
391 <xsl:apply-templates mode="widget_defs" select="$widget"> |
391 <xsl:apply-templates mode="widget_defs" select="$widget"> |
392 <xsl:with-param name="hmi_element" select="."/> |
392 <xsl:with-param name="hmi_element" select="."/> |
393 </xsl:apply-templates> |
393 </xsl:apply-templates> |
394 <xsl:text>}</xsl:text> |
394 <xsl:text> }</xsl:text> |
395 <xsl:if test="position()!=last()"> |
395 <xsl:if test="position()!=last()"> |
396 <xsl:text>,</xsl:text> |
396 <xsl:text>,</xsl:text> |
397 </xsl:if> |
397 </xsl:if> |
398 <xsl:text> |
398 <xsl:text> |
399 </xsl:text> |
399 </xsl:text> |
409 <xsl:text> |
409 <xsl:text> |
410 </xsl:text> |
410 </xsl:text> |
411 <xsl:text>var hmitree_types = [ |
411 <xsl:text>var hmitree_types = [ |
412 </xsl:text> |
412 </xsl:text> |
413 <xsl:for-each select="$indexed_hmitree/*"> |
413 <xsl:for-each select="$indexed_hmitree/*"> |
414 <xsl:text>/* </xsl:text> |
414 <xsl:text> /* </xsl:text> |
415 <xsl:value-of select="@index"/> |
415 <xsl:value-of select="@index"/> |
416 <xsl:text> </xsl:text> |
416 <xsl:text> </xsl:text> |
417 <xsl:value-of select="@hmipath"/> |
417 <xsl:value-of select="@hmipath"/> |
418 <xsl:text> */ "</xsl:text> |
418 <xsl:text> */ "</xsl:text> |
419 <xsl:value-of select="substring(local-name(), 5)"/> |
419 <xsl:value-of select="substring(local-name(), 5)"/> |
431 <xsl:text>var detachable_elements = { |
431 <xsl:text>var detachable_elements = { |
432 </xsl:text> |
432 </xsl:text> |
433 <xsl:for-each select="$detachable_elements"> |
433 <xsl:for-each select="$detachable_elements"> |
434 <xsl:text> "</xsl:text> |
434 <xsl:text> "</xsl:text> |
435 <xsl:value-of select="@id"/> |
435 <xsl:value-of select="@id"/> |
436 <xsl:text>" : {element: id("</xsl:text> |
436 <xsl:text>":[id("</xsl:text> |
437 <xsl:value-of select="@id"/> |
437 <xsl:value-of select="@id"/> |
438 <xsl:text>"), parent:id("</xsl:text> |
438 <xsl:text>"), id("</xsl:text> |
439 <xsl:value-of select="../@id"/> |
439 <xsl:value-of select="../@id"/> |
440 <xsl:text>")}</xsl:text> |
440 <xsl:text>")]</xsl:text> |
441 <xsl:if test="position()!=last()"> |
441 <xsl:if test="position()!=last()"> |
442 <xsl:text>,</xsl:text> |
442 <xsl:text>,</xsl:text> |
443 </xsl:if> |
443 </xsl:if> |
444 <xsl:text> |
444 <xsl:text> |
445 </xsl:text> |
445 </xsl:text> |
962 </xsl:text> |
962 </xsl:text> |
963 <xsl:text> |
963 <xsl:text> |
964 </xsl:text> |
964 </xsl:text> |
965 <xsl:text>function prepare_svg() { |
965 <xsl:text>function prepare_svg() { |
966 </xsl:text> |
966 </xsl:text> |
967 <xsl:text> /* set everybody hidden initially for better performance */ |
967 <xsl:text> for(let eltid in detachable_elements){ |
968 </xsl:text> |
968 </xsl:text> |
969 <xsl:text> for(let widget in hmi_widgets){ |
969 <xsl:text> let [element,parent] = detachable_elements[eltid]; |
970 </xsl:text> |
970 </xsl:text> |
971 <xsl:text> if(widget.element != undefined) |
971 <xsl:text> parent.removeChild(element); |
972 </xsl:text> |
|
973 <xsl:text> widget.element.style.display = "none"; |
|
974 </xsl:text> |
972 </xsl:text> |
975 <xsl:text> } |
973 <xsl:text> } |
976 </xsl:text> |
974 </xsl:text> |
977 <xsl:text> /*for(let name in page_desc){ |
975 <xsl:text>}; |
978 </xsl:text> |
976 </xsl:text> |
979 <xsl:text> if(name != new_desc){ |
977 <xsl:text> |
980 </xsl:text> |
978 </xsl:text> |
981 <xsl:text> page_desc[name].widget.element.style.display = "none"; |
979 <xsl:text>function switch_page(page_name) { |
|
980 </xsl:text> |
|
981 <xsl:text> let old_desc = page_desc[current_page]; |
|
982 </xsl:text> |
|
983 <xsl:text> let new_desc = page_desc[page_name]; |
|
984 </xsl:text> |
|
985 <xsl:text> |
|
986 </xsl:text> |
|
987 <xsl:text> if(new_desc == undefined){ |
|
988 </xsl:text> |
|
989 <xsl:text> /* TODO LOG ERROR */ |
|
990 </xsl:text> |
|
991 <xsl:text> return; |
|
992 </xsl:text> |
|
993 <xsl:text> } |
|
994 </xsl:text> |
|
995 <xsl:text> |
|
996 </xsl:text> |
|
997 <xsl:text> if(old_desc){ |
|
998 </xsl:text> |
|
999 <xsl:text> for(let widget of old_desc.widgets){ |
|
1000 </xsl:text> |
|
1001 <xsl:text> /* remove subsribers */ |
|
1002 </xsl:text> |
|
1003 <xsl:text> for(let index of widget.indexes){ |
|
1004 </xsl:text> |
|
1005 <xsl:text> subscribers[index].delete(widget); |
982 </xsl:text> |
1006 </xsl:text> |
983 <xsl:text> } |
1007 <xsl:text> } |
984 </xsl:text> |
1008 </xsl:text> |
985 <xsl:text> }*/ |
1009 <xsl:text> } |
986 </xsl:text> |
1010 </xsl:text> |
987 <xsl:text>}; |
1011 <xsl:text> for(let eltid in old_desc.required_detachables){ |
988 </xsl:text> |
1012 </xsl:text> |
989 <xsl:text> |
1013 <xsl:text> if(!(eltid in new_desc.required_detachables)){ |
990 </xsl:text> |
1014 </xsl:text> |
991 <xsl:text>function switch_page(page_name) { |
1015 <xsl:text> let [element, parent] = old_desc.required_detachables[eltid]; |
992 </xsl:text> |
1016 </xsl:text> |
993 <xsl:text> let old_desc = page_desc[current_page]; |
1017 <xsl:text> parent.removeChild(element); |
994 </xsl:text> |
1018 </xsl:text> |
995 <xsl:text> let new_desc = page_desc[page_name]; |
1019 <xsl:text> } |
996 </xsl:text> |
1020 </xsl:text> |
997 <xsl:text> |
1021 <xsl:text> } |
998 </xsl:text> |
1022 </xsl:text> |
999 <xsl:text> if(new_desc == undefined){ |
1023 <xsl:text> for(let eltid in new_desc.required_detachables){ |
1000 </xsl:text> |
1024 </xsl:text> |
1001 <xsl:text> /* TODO LOG ERROR */ |
1025 <xsl:text> if(!(eltid in old_desc.required_detachables)){ |
1002 </xsl:text> |
1026 </xsl:text> |
1003 <xsl:text> return; |
1027 <xsl:text> let [element, parent] = new_desc.required_detachables[eltid]; |
|
1028 </xsl:text> |
|
1029 <xsl:text> parent.appendChild(element); |
|
1030 </xsl:text> |
|
1031 <xsl:text> } |
|
1032 </xsl:text> |
|
1033 <xsl:text> } |
|
1034 </xsl:text> |
|
1035 <xsl:text> }else{ |
|
1036 </xsl:text> |
|
1037 <xsl:text> for(let eltid in new_desc.required_detachables){ |
|
1038 </xsl:text> |
|
1039 <xsl:text> let [element, parent] = new_desc.required_detachables[eltid]; |
|
1040 </xsl:text> |
|
1041 <xsl:text> parent.appendChild(element); |
|
1042 </xsl:text> |
|
1043 <xsl:text> } |
1004 </xsl:text> |
1044 </xsl:text> |
1005 <xsl:text> } |
1045 <xsl:text> } |
1006 </xsl:text> |
1046 </xsl:text> |
1007 <xsl:text> |
1047 <xsl:text> |
1008 </xsl:text> |
1048 </xsl:text> |
1009 <xsl:text> if(old_desc){ |
1049 <xsl:text> for(let widget of new_desc.widgets){ |
1010 </xsl:text> |
1050 </xsl:text> |
1011 <xsl:text> for(let widget of old_desc.widgets){ |
1051 <xsl:text> /* add widget's subsribers */ |
1012 </xsl:text> |
1052 </xsl:text> |
1013 <xsl:text> |
1053 <xsl:text> for(let index of widget.indexes){ |
1014 </xsl:text> |
1054 </xsl:text> |
1015 <xsl:text> /* hide widget */ |
1055 <xsl:text> subscribers[index].add(widget); |
1016 </xsl:text> |
1056 </xsl:text> |
1017 <xsl:text> if(widget.element != undefined) |
1057 <xsl:text> /* dispatch current cache in newly opened page widgets */ |
1018 </xsl:text> |
1058 </xsl:text> |
1019 <xsl:text> widget.element.style.display = "none"; |
1059 <xsl:text> let cached_val = cache[index]; |
1020 </xsl:text> |
1060 </xsl:text> |
1021 <xsl:text> |
1061 <xsl:text> if(cached_val != undefined) |
1022 </xsl:text> |
1062 </xsl:text> |
1023 <xsl:text> /* remove subsribers */ |
1063 <xsl:text> dispatch_value_to_widget(widget, index, cached_val, cached_val); |
1024 </xsl:text> |
|
1025 <xsl:text> for(let index of widget.indexes){ |
|
1026 </xsl:text> |
|
1027 <xsl:text> subscribers[index].delete(widget); |
|
1028 </xsl:text> |
|
1029 <xsl:text> } |
|
1030 </xsl:text> |
1064 </xsl:text> |
1031 <xsl:text> } |
1065 <xsl:text> } |
1032 </xsl:text> |
1066 </xsl:text> |
1033 <xsl:text> old_desc.widget.element.style.display = "none"; |
|
1034 </xsl:text> |
|
1035 <xsl:text> } |
1067 <xsl:text> } |
1036 </xsl:text> |
|
1037 <xsl:text> |
|
1038 </xsl:text> |
|
1039 <xsl:text> for(let widget of new_desc.widgets){ |
|
1040 </xsl:text> |
|
1041 <xsl:text> |
|
1042 </xsl:text> |
|
1043 <xsl:text> /* unhide widget */ |
|
1044 </xsl:text> |
|
1045 <xsl:text> if(widget.element != undefined) |
|
1046 </xsl:text> |
|
1047 <xsl:text> widget.element.style.display = "inline"; |
|
1048 </xsl:text> |
|
1049 <xsl:text> |
|
1050 </xsl:text> |
|
1051 <xsl:text> /* add widget's subsribers */ |
|
1052 </xsl:text> |
|
1053 <xsl:text> for(let index of widget.indexes){ |
|
1054 </xsl:text> |
|
1055 <xsl:text> subscribers[index].add(widget); |
|
1056 </xsl:text> |
|
1057 <xsl:text> /* dispatch current cache in newly opened page widgets */ |
|
1058 </xsl:text> |
|
1059 <xsl:text> let cached_val = cache[index]; |
|
1060 </xsl:text> |
|
1061 <xsl:text> if(cached_val != undefined) |
|
1062 </xsl:text> |
|
1063 <xsl:text> dispatch_value_to_widget(widget, index, cached_val, cached_val); |
|
1064 </xsl:text> |
|
1065 <xsl:text> } |
|
1066 </xsl:text> |
|
1067 <xsl:text> } |
|
1068 </xsl:text> |
|
1069 <xsl:text> |
|
1070 </xsl:text> |
|
1071 <xsl:text> new_desc.widget.element.style.display = "inline"; |
|
1072 </xsl:text> |
1068 </xsl:text> |
1073 <xsl:text> |
1069 <xsl:text> |
1074 </xsl:text> |
1070 </xsl:text> |
1075 <xsl:text> svg_root.setAttribute('viewBox',new_desc.bbox.join(" ")); |
1071 <xsl:text> svg_root.setAttribute('viewBox',new_desc.bbox.join(" ")); |
1076 </xsl:text> |
1072 </xsl:text> |