670 <xsl:text>All units must be set to "px" in Inkscape's document properties</xsl:text> |
673 <xsl:text>All units must be set to "px" in Inkscape's document properties</xsl:text> |
671 </xsl:message> |
674 </xsl:message> |
672 </xsl:template> |
675 </xsl:template> |
673 <xsl:variable name="hmi_lists_descs" select="$parsed_widgets/widget[@type = 'List']"/> |
676 <xsl:variable name="hmi_lists_descs" select="$parsed_widgets/widget[@type = 'List']"/> |
674 <xsl:variable name="hmi_lists" select="$hmi_elements[@id = $hmi_lists_descs/@id]"/> |
677 <xsl:variable name="hmi_lists" select="$hmi_elements[@id = $hmi_lists_descs/@id]"/> |
675 <xsl:variable name="targets_not_to_unlink" select="$hmi_elements[@id = $hmi_lists/@id]/descendant::svg:*"/> |
678 <xsl:variable name="targets_not_to_unlink" select="$hmi_lists/descendant-or-self::svg:*"/> |
676 <xsl:variable name="to_unlink" select="$hmi_elements[not(@id = $hmi_pages/@id)]/descendant-or-self::svg:use"/> |
679 <xsl:variable name="to_unlink" select="$hmi_elements[not(@id = $hmi_pages/@id)]/descendant-or-self::svg:use"/> |
|
680 <func:function name="func:is_unlinkable"> |
|
681 <xsl:param name="targetid"/> |
|
682 <xsl:param name="eltid"/> |
|
683 <func:result select="$eltid = $to_unlink/@id and not($targetid = $targets_not_to_unlink/@id)"/> |
|
684 </func:function> |
677 <xsl:template xmlns="http://www.w3.org/2000/svg" mode="inline_svg" match="svg:use"> |
685 <xsl:template xmlns="http://www.w3.org/2000/svg" mode="inline_svg" match="svg:use"> |
678 <xsl:variable name="targetid" select="substring-after(@xlink:href,'#')"/> |
686 <xsl:variable name="targetid" select="substring-after(@xlink:href,'#')"/> |
679 <xsl:choose> |
687 <xsl:choose> |
680 <xsl:when test="@id = $to_unlink/@id and not($targetid = $targets_not_to_unlink/@id)"> |
688 <xsl:when test="func:is_unlinkable($targetid, @id)"> |
681 <xsl:call-template name="unlink_clone"> |
689 <xsl:call-template name="unlink_clone"> |
682 <xsl:with-param name="targetid" select="$targetid"/> |
690 <xsl:with-param name="targetid" select="$targetid"/> |
683 </xsl:call-template> |
691 </xsl:call-template> |
684 </xsl:when> |
692 </xsl:when> |
685 <xsl:otherwise> |
693 <xsl:otherwise> |
686 <xsl:copy> |
694 <xsl:copy> |
687 <xsl:apply-templates mode="inline_svg" select="@* | node()"/> |
695 <xsl:apply-templates mode="inline_svg" select="@*"/> |
688 </xsl:copy> |
696 </xsl:copy> |
689 </xsl:otherwise> |
697 </xsl:otherwise> |
690 </xsl:choose> |
698 </xsl:choose> |
691 </xsl:template> |
699 </xsl:template> |
692 <xsl:variable name="_excluded_use_attrs"> |
700 <xsl:variable name="_excluded_use_attrs"> |
3363 <xsl:text>JsonTable Widget can't contain element of type </xsl:text> |
3413 <xsl:text>JsonTable Widget can't contain element of type </xsl:text> |
3364 <xsl:value-of select="local-name()"/> |
3414 <xsl:value-of select="local-name()"/> |
3365 <xsl:text>.</xsl:text> |
3415 <xsl:text>.</xsl:text> |
3366 </xsl:message> |
3416 </xsl:message> |
3367 </xsl:template> |
3417 </xsl:template> |
|
3418 <xsl:variable name="hmi_textstylelists_descs" select="$parsed_widgets/widget[@type = 'TextStyleList']"/> |
|
3419 <xsl:variable name="hmi_textstylelists" select="$hmi_elements[@id = $hmi_textstylelists_descs/@id]"/> |
|
3420 <xsl:variable name="textstylelist_related"> |
|
3421 <xsl:for-each select="$hmi_textstylelists"> |
|
3422 <list> |
|
3423 <xsl:attribute name="listid"> |
|
3424 <xsl:value-of select="@id"/> |
|
3425 </xsl:attribute> |
|
3426 <xsl:for-each select="func:refered_elements(.)"> |
|
3427 <elt> |
|
3428 <xsl:attribute name="eltid"> |
|
3429 <xsl:value-of select="@id"/> |
|
3430 </xsl:attribute> |
|
3431 </elt> |
|
3432 </xsl:for-each> |
|
3433 </list> |
|
3434 </xsl:for-each> |
|
3435 </xsl:variable> |
|
3436 <xsl:variable name="textstylelist_related_ns" select="exsl:node-set($textstylelist_related)"/> |
|
3437 <func:function name="func:json_expressions"> |
|
3438 <xsl:param name="expressions"/> |
|
3439 <xsl:param name="label"/> |
|
3440 <xsl:choose> |
|
3441 <xsl:when test="$label"> |
|
3442 <xsl:variable name="suffixes" select="str:split($label)"/> |
|
3443 <xsl:variable name="res"> |
|
3444 <xsl:for-each select="$suffixes"> |
|
3445 <expression> |
|
3446 <xsl:variable name="suffix" select="."/> |
|
3447 <xsl:variable name="pos" select="position()"/> |
|
3448 <xsl:variable name="expr" select="$expressions[position() <= $pos][last()]/expression"/> |
|
3449 <xsl:choose> |
|
3450 <xsl:when test="contains($suffix,'=')"> |
|
3451 <xsl:variable name="name" select="substring-before($suffix,'=')"/> |
|
3452 <xsl:if test="$expr/@name[. != $name]"> |
|
3453 <xsl:message terminate="yes"> |
|
3454 <xsl:text>JsonTable : missplaced '=' or inconsistent names in Json data expressions.</xsl:text> |
|
3455 </xsl:message> |
|
3456 </xsl:if> |
|
3457 <xsl:attribute name="name"> |
|
3458 <xsl:value-of select="$name"/> |
|
3459 </xsl:attribute> |
|
3460 <xsl:attribute name="content"> |
|
3461 <xsl:value-of select="$expr/@content"/> |
|
3462 <xsl:value-of select="substring-after($suffix,'=')"/> |
|
3463 </xsl:attribute> |
|
3464 </xsl:when> |
|
3465 <xsl:otherwise> |
|
3466 <xsl:copy-of select="$expr/@name"/> |
|
3467 <xsl:attribute name="content"> |
|
3468 <xsl:value-of select="$expr/@content"/> |
|
3469 <xsl:value-of select="$suffix"/> |
|
3470 </xsl:attribute> |
|
3471 </xsl:otherwise> |
|
3472 </xsl:choose> |
|
3473 </expression> |
|
3474 </xsl:for-each> |
|
3475 </xsl:variable> |
|
3476 <func:result select="exsl:node-set($res)"/> |
|
3477 </xsl:when> |
|
3478 <xsl:otherwise> |
|
3479 <func:result select="$expressions"/> |
|
3480 </xsl:otherwise> |
|
3481 </xsl:choose> |
|
3482 </func:function> |
|
3483 <xsl:variable name="initexpr"> |
|
3484 <expression> |
|
3485 <xsl:attribute name="content"> |
|
3486 <xsl:text>jdata</xsl:text> |
|
3487 </xsl:attribute> |
|
3488 </expression> |
|
3489 </xsl:variable> |
|
3490 <xsl:variable name="initexpr_ns" select="exsl:node-set($initexpr)"/> |
3368 <xsl:template mode="json_table_elt_render" match="svg:use"> |
3491 <xsl:template mode="json_table_elt_render" match="svg:use"> |
3369 <xsl:param name="value_expr"/> |
3492 <xsl:param name="expressions"/> |
3370 <xsl:variable name="targetid" select="substring-after(@xlink:href,'#')"/> |
3493 <xsl:variable name="targetid" select="substring-after(@xlink:href,'#')"/> |
3371 <xsl:variable name="from_list" select="$hmi_lists[(@id | */@id) = $targetid]"/> |
3494 <xsl:variable name="from_list" select="$hmi_lists[(@id | */@id) = $targetid]"/> |
3372 <xsl:if test="count($from_list) = 0"> |
3495 <xsl:choose> |
3373 <xsl:message terminate="yes"> |
3496 <xsl:when test="count($from_list) > 0"> |
3374 <xsl:text>Clones (svg:use) in JsonTable Widget must point to a valid HMI:List widget or HMI:List item. Reference "</xsl:text> |
3497 <xsl:text> id("</xsl:text> |
3375 <xsl:value-of select="@xlink:href"/> |
3498 <xsl:value-of select="@id"/> |
3376 <xsl:text>" is not valid.</xsl:text> |
3499 <xsl:text>").setAttribute("xlink:href", |
3377 </xsl:message> |
3500 </xsl:text> |
3378 </xsl:if> |
3501 <xsl:text> "#"+hmi_widgets["</xsl:text> |
3379 <xsl:text> id("</xsl:text> |
3502 <xsl:value-of select="$from_list/@id"/> |
3380 <xsl:value-of select="@id"/> |
3503 <xsl:text>"].items[</xsl:text> |
3381 <xsl:text>").setAttribute("xlink:href", |
3504 <xsl:value-of select="$expressions/expression[1]/@content"/> |
3382 </xsl:text> |
3505 <xsl:text>]); |
3383 <xsl:text> "#"+hmi_widgets["</xsl:text> |
3506 </xsl:text> |
3384 <xsl:value-of select="$from_list/@id"/> |
3507 </xsl:when> |
3385 <xsl:text>"].items[</xsl:text> |
3508 <xsl:otherwise> |
3386 <xsl:value-of select="$value_expr"/> |
3509 <xsl:message terminate="no"> |
3387 <xsl:text>]); |
3510 <xsl:text>Clones (svg:use) in JsonTable Widget must point to a valid HMI:List widget or item. Reference "</xsl:text> |
3388 </xsl:text> |
3511 <xsl:value-of select="@xlink:href"/> |
|
3512 <xsl:text>" is not valid and will not be updated.</xsl:text> |
|
3513 </xsl:message> |
|
3514 </xsl:otherwise> |
|
3515 </xsl:choose> |
3389 </xsl:template> |
3516 </xsl:template> |
3390 <xsl:template mode="json_table_elt_render" match="svg:text"> |
3517 <xsl:template mode="json_table_elt_render" match="svg:text"> |
3391 <xsl:param name="value_expr"/> |
3518 <xsl:param name="expressions"/> |
3392 <xsl:text> id("</xsl:text> |
3519 <xsl:variable name="value_expr" select="$expressions/expression[1]/@content"/> |
3393 <xsl:value-of select="@id"/> |
3520 <xsl:variable name="original" select="@original"/> |
3394 <xsl:text>").textContent = String(</xsl:text> |
3521 <xsl:variable name="from_textstylelist" select="$textstylelist_related_ns/list[elt/@eltid = $original]"/> |
3395 <xsl:value-of select="$value_expr"/> |
3522 <xsl:choose> |
3396 <xsl:text>); |
3523 <xsl:when test="count($from_textstylelist) > 0"> |
3397 </xsl:text> |
3524 <xsl:variable name="content_expr" select="$expressions/expression[2]/@content"/> |
3398 </xsl:template> |
3525 <xsl:if test="string-length($content_expr) = 0 or $expressions/expression[2]/@name != 'textContent'"> |
|
3526 <xsl:message terminate="yes"> |
|
3527 <xsl:text>Clones (svg:use) in JsonTable Widget pointing to a HMI:TextStyleList widget or item must have a "textContent=.someVal" assignement following value expression in label.</xsl:text> |
|
3528 </xsl:message> |
|
3529 </xsl:if> |
|
3530 <xsl:text> { |
|
3531 </xsl:text> |
|
3532 <xsl:text> let elt = id("</xsl:text> |
|
3533 <xsl:value-of select="@id"/> |
|
3534 <xsl:text>"); |
|
3535 </xsl:text> |
|
3536 <xsl:text> elt.textContent = String(</xsl:text> |
|
3537 <xsl:value-of select="$content_expr"/> |
|
3538 <xsl:text>); |
|
3539 </xsl:text> |
|
3540 <xsl:text> elt.style = hmi_widgets["</xsl:text> |
|
3541 <xsl:value-of select="$from_textstylelist/@listid"/> |
|
3542 <xsl:text>"].styles[</xsl:text> |
|
3543 <xsl:value-of select="$value_expr"/> |
|
3544 <xsl:text>]; |
|
3545 </xsl:text> |
|
3546 <xsl:text> } |
|
3547 </xsl:text> |
|
3548 </xsl:when> |
|
3549 <xsl:otherwise> |
|
3550 <xsl:text> id("</xsl:text> |
|
3551 <xsl:value-of select="@id"/> |
|
3552 <xsl:text>").textContent = String(</xsl:text> |
|
3553 <xsl:value-of select="$value_expr"/> |
|
3554 <xsl:text>); |
|
3555 </xsl:text> |
|
3556 </xsl:otherwise> |
|
3557 </xsl:choose> |
|
3558 </xsl:template> |
|
3559 <func:function name="func:filter_non_widget_label"> |
|
3560 <xsl:param name="elt"/> |
|
3561 <xsl:param name="widget_elts"/> |
|
3562 <xsl:variable name="eltid"> |
|
3563 <xsl:choose> |
|
3564 <xsl:when test="$elt/@original"> |
|
3565 <xsl:value-of select="$elt/@original"/> |
|
3566 </xsl:when> |
|
3567 <xsl:otherwise> |
|
3568 <xsl:value-of select="$elt/@id"/> |
|
3569 </xsl:otherwise> |
|
3570 </xsl:choose> |
|
3571 </xsl:variable> |
|
3572 <func:result select="$widget_elts[@id=$eltid]/@inkscape:label"/> |
|
3573 </func:function> |
3399 <xsl:template mode="json_table_render" match="svg:*"> |
3574 <xsl:template mode="json_table_render" match="svg:*"> |
3400 <xsl:param name="objname"/> |
3575 <xsl:param name="expressions"/> |
|
3576 <xsl:param name="widget_elts"/> |
|
3577 <xsl:variable name="label" select="func:filter_non_widget_label(., $widget_elts)"/> |
3401 <xsl:apply-templates mode="json_table_elt_render" select="."> |
3578 <xsl:apply-templates mode="json_table_elt_render" select="."> |
3402 <xsl:with-param name="value_expr"> |
3579 <xsl:with-param name="expressions" select="func:json_expressions($expressions, $label)"/> |
3403 <xsl:value-of select="$objname"/> |
|
3404 <xsl:value-of select="@inkscape:label"/> |
|
3405 </xsl:with-param> |
|
3406 </xsl:apply-templates> |
3580 </xsl:apply-templates> |
3407 </xsl:template> |
3581 </xsl:template> |
3408 <xsl:template mode="json_table_render" match="svg:g"> |
3582 <xsl:template mode="json_table_render" match="svg:g"> |
3409 <xsl:param name="objname"/> |
3583 <xsl:param name="expressions"/> |
3410 <xsl:text> let obj_</xsl:text> |
3584 <xsl:param name="widget_elts"/> |
3411 <xsl:value-of select="@id"/> |
3585 <xsl:variable name="label" select="func:filter_non_widget_label(., $widget_elts)"/> |
3412 <xsl:text> = </xsl:text> |
3586 <xsl:apply-templates mode="json_table_render" select="*"> |
3413 <xsl:value-of select="$objname"/> |
3587 <xsl:with-param name="expressions" select="func:json_expressions($expressions, $label)"/> |
3414 <xsl:value-of select="@inkscape:label"/> |
3588 <xsl:with-param name="widget_elts" select="$widget_elts"/> |
3415 <xsl:text>; |
|
3416 </xsl:text> |
|
3417 <xsl:apply-templates mode="json_table_render" select="*[@inkscape:label]"> |
|
3418 <xsl:with-param name="objname"> |
|
3419 <xsl:text>obj_</xsl:text> |
|
3420 <xsl:value-of select="@id"/> |
|
3421 </xsl:with-param> |
|
3422 </xsl:apply-templates> |
3589 </xsl:apply-templates> |
3423 </xsl:template> |
3590 </xsl:template> |
3424 <xsl:template mode="widget_defs" match="widget[@type='JsonTable']"> |
3591 <xsl:template mode="widget_defs" match="widget[@type='JsonTable']"> |
3425 <xsl:param name="hmi_element"/> |
3592 <xsl:param name="hmi_element"/> |
3426 <xsl:call-template name="defs_by_labels"> |
3593 <xsl:call-template name="defs_by_labels"> |