612 <xsl:text>"), |
614 <xsl:text>"), |
613 </xsl:text> |
615 </xsl:text> |
614 <xsl:apply-templates mode="widget_defs" select="$widget"> |
616 <xsl:apply-templates mode="widget_defs" select="$widget"> |
615 <xsl:with-param name="hmi_element" select="."/> |
617 <xsl:with-param name="hmi_element" select="."/> |
616 </xsl:apply-templates> |
618 </xsl:apply-templates> |
|
619 <xsl:apply-templates mode="widget_subscribe" select="$widget"> |
|
620 <xsl:with-param name="hmi_element" select="."/> |
|
621 </xsl:apply-templates> |
617 <xsl:text> }</xsl:text> |
622 <xsl:text> }</xsl:text> |
618 <xsl:if test="position()!=last()"> |
623 <xsl:if test="position()!=last()"> |
619 <xsl:text>,</xsl:text> |
624 <xsl:text>,</xsl:text> |
620 </xsl:if> |
625 </xsl:if> |
621 <xsl:text> |
626 <xsl:text> |
622 </xsl:text> |
627 </xsl:text> |
623 </xsl:template> |
628 </xsl:template> |
|
629 <xsl:template mode="widget_subscribe" match="widget"> |
|
630 <xsl:text> sub: subscribe, |
|
631 </xsl:text> |
|
632 <xsl:text> unsub: unsubscribe, |
|
633 </xsl:text> |
|
634 </xsl:template> |
|
635 <xsl:template mode="widget_subscribe" match="widget[@type='Page']"/> |
624 <xsl:template name="defs_by_labels"> |
636 <xsl:template name="defs_by_labels"> |
625 <xsl:param name="labels" select="''"/> |
637 <xsl:param name="labels" select="''"/> |
626 <xsl:param name="mandatory" select="'yes'"/> |
638 <xsl:param name="mandatory" select="'yes'"/> |
627 <xsl:param name="hmi_element"/> |
639 <xsl:param name="hmi_element"/> |
628 <xsl:variable name="widget_type" select="@type"/> |
640 <xsl:variable name="widget_type" select="@type"/> |
1564 </xsl:text> |
1572 </xsl:text> |
1565 <xsl:text>}; |
1573 <xsl:text>}; |
1566 </xsl:text> |
1574 </xsl:text> |
1567 <xsl:text> |
1575 <xsl:text> |
1568 </xsl:text> |
1576 </xsl:text> |
|
1577 <xsl:text>function unsubscribe(){ |
|
1578 </xsl:text> |
|
1579 <xsl:text> widget = this; |
|
1580 </xsl:text> |
|
1581 <xsl:text> /* remove subsribers */ |
|
1582 </xsl:text> |
|
1583 <xsl:text> for(let index of widget.indexes){ |
|
1584 </xsl:text> |
|
1585 <xsl:text> let idx = index + widget.offset; |
|
1586 </xsl:text> |
|
1587 <xsl:text> subscribers[idx].delete(widget); |
|
1588 </xsl:text> |
|
1589 <xsl:text> } |
|
1590 </xsl:text> |
|
1591 <xsl:text> widget.offset = 0; |
|
1592 </xsl:text> |
|
1593 <xsl:text>} |
|
1594 </xsl:text> |
|
1595 <xsl:text> |
|
1596 </xsl:text> |
|
1597 <xsl:text>function subscribe(new_offset=0){ |
|
1598 </xsl:text> |
|
1599 <xsl:text> widget = this; |
|
1600 </xsl:text> |
|
1601 <xsl:text> /* set the offset because relative */ |
|
1602 </xsl:text> |
|
1603 <xsl:text> widget.offset = new_offset; |
|
1604 </xsl:text> |
|
1605 <xsl:text> /* add widget's subsribers */ |
|
1606 </xsl:text> |
|
1607 <xsl:text> for(let index of widget.indexes){ |
|
1608 </xsl:text> |
|
1609 <xsl:text> subscribers[index + new_offset].add(widget); |
|
1610 </xsl:text> |
|
1611 <xsl:text> } |
|
1612 </xsl:text> |
|
1613 <xsl:text>} |
|
1614 </xsl:text> |
|
1615 <xsl:text> |
|
1616 </xsl:text> |
1569 <xsl:text>function switch_subscribed_page(page_name, page_index) { |
1617 <xsl:text>function switch_subscribed_page(page_name, page_index) { |
1570 </xsl:text> |
1618 </xsl:text> |
1571 <xsl:text> let old_desc = page_desc[current_subscribed_page]; |
1619 <xsl:text> let old_desc = page_desc[current_subscribed_page]; |
1572 </xsl:text> |
1620 </xsl:text> |
1573 <xsl:text> let new_desc = page_desc[page_name]; |
1621 <xsl:text> let new_desc = page_desc[page_name]; |
1592 </xsl:text> |
1640 </xsl:text> |
1593 <xsl:text> |
1641 <xsl:text> |
1594 </xsl:text> |
1642 </xsl:text> |
1595 <xsl:text> if(old_desc){ |
1643 <xsl:text> if(old_desc){ |
1596 </xsl:text> |
1644 </xsl:text> |
1597 <xsl:text> for(let widget of old_desc.absolute_widgets){ |
1645 <xsl:text> old_desc.absolute_widgets.map(w=>w.unsub()); |
1598 </xsl:text> |
1646 </xsl:text> |
1599 <xsl:text> /* remove subsribers */ |
1647 <xsl:text> old_desc.relative_widgets.map(w=>w.unsub()); |
1600 </xsl:text> |
1648 </xsl:text> |
1601 <xsl:text> for(let index of widget.indexes){ |
1649 <xsl:text> } |
1602 </xsl:text> |
1650 </xsl:text> |
1603 <xsl:text> subscribers[index].delete(widget); |
1651 <xsl:text> new_desc.absolute_widgets.map(w=>w.sub()); |
|
1652 </xsl:text> |
|
1653 <xsl:text> var new_offset = page_index == undefined ? 0 : page_index - new_desc.page_index; |
|
1654 </xsl:text> |
|
1655 <xsl:text> new_desc.relative_widgets.map(w=>w.sub(new_offset)); |
|
1656 </xsl:text> |
|
1657 <xsl:text> |
|
1658 </xsl:text> |
|
1659 <xsl:text> update_subscriptions(); |
|
1660 </xsl:text> |
|
1661 <xsl:text> |
|
1662 </xsl:text> |
|
1663 <xsl:text> current_subscribed_page = page_name; |
|
1664 </xsl:text> |
|
1665 <xsl:text> |
|
1666 </xsl:text> |
|
1667 <xsl:text> requestHMIAnimation(); |
|
1668 </xsl:text> |
|
1669 <xsl:text>} |
|
1670 </xsl:text> |
|
1671 <xsl:text> |
|
1672 </xsl:text> |
|
1673 <xsl:text>function switch_visible_page(page_name) { |
|
1674 </xsl:text> |
|
1675 <xsl:text> |
|
1676 </xsl:text> |
|
1677 <xsl:text> let old_desc = page_desc[current_visible_page]; |
|
1678 </xsl:text> |
|
1679 <xsl:text> let new_desc = page_desc[page_name]; |
|
1680 </xsl:text> |
|
1681 <xsl:text> |
|
1682 </xsl:text> |
|
1683 <xsl:text> if(old_desc){ |
|
1684 </xsl:text> |
|
1685 <xsl:text> for(let eltid in old_desc.required_detachables){ |
|
1686 </xsl:text> |
|
1687 <xsl:text> if(!(eltid in new_desc.required_detachables)){ |
|
1688 </xsl:text> |
|
1689 <xsl:text> let [element, parent] = old_desc.required_detachables[eltid]; |
|
1690 </xsl:text> |
|
1691 <xsl:text> parent.removeChild(element); |
1604 </xsl:text> |
1692 </xsl:text> |
1605 <xsl:text> } |
1693 <xsl:text> } |
1606 </xsl:text> |
1694 </xsl:text> |
1607 <xsl:text> } |
1695 <xsl:text> } |
1608 </xsl:text> |
1696 </xsl:text> |
1609 <xsl:text> for(let widget of old_desc.relative_widgets){ |
1697 <xsl:text> for(let eltid in new_desc.required_detachables){ |
1610 </xsl:text> |
1698 </xsl:text> |
1611 <xsl:text> /* remove subsribers */ |
1699 <xsl:text> if(!(eltid in old_desc.required_detachables)){ |
1612 </xsl:text> |
1700 </xsl:text> |
1613 <xsl:text> for(let index of widget.indexes){ |
1701 <xsl:text> let [element, parent] = new_desc.required_detachables[eltid]; |
1614 </xsl:text> |
1702 </xsl:text> |
1615 <xsl:text> let idx = widget.offset ? index + widget.offset : index; |
1703 <xsl:text> parent.appendChild(element); |
1616 </xsl:text> |
|
1617 <xsl:text> subscribers[idx].delete(widget); |
|
1618 </xsl:text> |
1704 </xsl:text> |
1619 <xsl:text> } |
1705 <xsl:text> } |
1620 </xsl:text> |
1706 </xsl:text> |
1621 <xsl:text> /* lose the offset */ |
|
1622 </xsl:text> |
|
1623 <xsl:text> delete widget.offset; |
|
1624 </xsl:text> |
|
1625 <xsl:text> } |
1707 <xsl:text> } |
1626 </xsl:text> |
1708 </xsl:text> |
1627 <xsl:text> } |
1709 <xsl:text> }else{ |
1628 </xsl:text> |
1710 </xsl:text> |
1629 <xsl:text> for(let widget of new_desc.absolute_widgets){ |
1711 <xsl:text> for(let eltid in new_desc.required_detachables){ |
1630 </xsl:text> |
1712 </xsl:text> |
1631 <xsl:text> /* add widget's subsribers */ |
1713 <xsl:text> let [element, parent] = new_desc.required_detachables[eltid]; |
|
1714 </xsl:text> |
|
1715 <xsl:text> parent.appendChild(element); |
|
1716 </xsl:text> |
|
1717 <xsl:text> } |
|
1718 </xsl:text> |
|
1719 <xsl:text> } |
|
1720 </xsl:text> |
|
1721 <xsl:text> |
|
1722 </xsl:text> |
|
1723 <xsl:text> for(let widget of chain(new_desc.absolute_widgets,new_desc.relative_widgets)){ |
1632 </xsl:text> |
1724 </xsl:text> |
1633 <xsl:text> for(let index of widget.indexes){ |
1725 <xsl:text> for(let index of widget.indexes){ |
1634 </xsl:text> |
1726 </xsl:text> |
1635 <xsl:text> subscribers[index].add(widget); |
1727 <xsl:text> /* dispatch current cache in newly opened page widgets */ |
|
1728 </xsl:text> |
|
1729 <xsl:text> let cached_val = cache[index]; |
|
1730 </xsl:text> |
|
1731 <xsl:text> if(cached_val != undefined) |
|
1732 </xsl:text> |
|
1733 <xsl:text> dispatch_value_to_widget(widget, index, cached_val, cached_val); |
1636 </xsl:text> |
1734 </xsl:text> |
1637 <xsl:text> } |
1735 <xsl:text> } |
1638 </xsl:text> |
1736 </xsl:text> |
1639 <xsl:text> } |
1737 <xsl:text> } |
1640 </xsl:text> |
1738 </xsl:text> |
1641 <xsl:text> var new_offset = page_index == undefined ? 0 : page_index - new_desc.page_index; |
|
1642 </xsl:text> |
|
1643 <xsl:text> for(let widget of new_desc.relative_widgets){ |
|
1644 </xsl:text> |
|
1645 <xsl:text> /* set the offset because relative */ |
|
1646 </xsl:text> |
|
1647 <xsl:text> widget.offset = new_offset; |
|
1648 </xsl:text> |
|
1649 <xsl:text> /* add widget's subsribers */ |
|
1650 </xsl:text> |
|
1651 <xsl:text> for(let index of widget.indexes){ |
|
1652 </xsl:text> |
|
1653 <xsl:text> subscribers[index + new_offset].add(widget); |
|
1654 </xsl:text> |
|
1655 <xsl:text> } |
|
1656 </xsl:text> |
|
1657 <xsl:text> } |
|
1658 </xsl:text> |
|
1659 <xsl:text> |
|
1660 </xsl:text> |
|
1661 <xsl:text> update_subscriptions(); |
|
1662 </xsl:text> |
|
1663 <xsl:text> |
|
1664 </xsl:text> |
|
1665 <xsl:text> current_subscribed_page = page_name; |
|
1666 </xsl:text> |
|
1667 <xsl:text> |
|
1668 </xsl:text> |
|
1669 <xsl:text> requestHMIAnimation(); |
|
1670 </xsl:text> |
|
1671 <xsl:text>} |
|
1672 </xsl:text> |
|
1673 <xsl:text> |
|
1674 </xsl:text> |
|
1675 <xsl:text>function switch_visible_page(page_name) { |
|
1676 </xsl:text> |
|
1677 <xsl:text> |
|
1678 </xsl:text> |
|
1679 <xsl:text> let old_desc = page_desc[current_visible_page]; |
|
1680 </xsl:text> |
|
1681 <xsl:text> let new_desc = page_desc[page_name]; |
|
1682 </xsl:text> |
|
1683 <xsl:text> |
|
1684 </xsl:text> |
|
1685 <xsl:text> if(old_desc){ |
|
1686 </xsl:text> |
|
1687 <xsl:text> for(let eltid in old_desc.required_detachables){ |
|
1688 </xsl:text> |
|
1689 <xsl:text> if(!(eltid in new_desc.required_detachables)){ |
|
1690 </xsl:text> |
|
1691 <xsl:text> let [element, parent] = old_desc.required_detachables[eltid]; |
|
1692 </xsl:text> |
|
1693 <xsl:text> parent.removeChild(element); |
|
1694 </xsl:text> |
|
1695 <xsl:text> } |
|
1696 </xsl:text> |
|
1697 <xsl:text> } |
|
1698 </xsl:text> |
|
1699 <xsl:text> for(let eltid in new_desc.required_detachables){ |
|
1700 </xsl:text> |
|
1701 <xsl:text> if(!(eltid in old_desc.required_detachables)){ |
|
1702 </xsl:text> |
|
1703 <xsl:text> let [element, parent] = new_desc.required_detachables[eltid]; |
|
1704 </xsl:text> |
|
1705 <xsl:text> parent.appendChild(element); |
|
1706 </xsl:text> |
|
1707 <xsl:text> } |
|
1708 </xsl:text> |
|
1709 <xsl:text> } |
|
1710 </xsl:text> |
|
1711 <xsl:text> }else{ |
|
1712 </xsl:text> |
|
1713 <xsl:text> for(let eltid in new_desc.required_detachables){ |
|
1714 </xsl:text> |
|
1715 <xsl:text> let [element, parent] = new_desc.required_detachables[eltid]; |
|
1716 </xsl:text> |
|
1717 <xsl:text> parent.appendChild(element); |
|
1718 </xsl:text> |
|
1719 <xsl:text> } |
|
1720 </xsl:text> |
|
1721 <xsl:text> } |
|
1722 </xsl:text> |
|
1723 <xsl:text> |
|
1724 </xsl:text> |
|
1725 <xsl:text> for(let widget of chain(new_desc.absolute_widgets,new_desc.relative_widgets)){ |
|
1726 </xsl:text> |
|
1727 <xsl:text> for(let index of widget.indexes){ |
|
1728 </xsl:text> |
|
1729 <xsl:text> /* dispatch current cache in newly opened page widgets */ |
|
1730 </xsl:text> |
|
1731 <xsl:text> let cached_val = cache[index]; |
|
1732 </xsl:text> |
|
1733 <xsl:text> if(cached_val != undefined) |
|
1734 </xsl:text> |
|
1735 <xsl:text> dispatch_value_to_widget(widget, index, cached_val, cached_val); |
|
1736 </xsl:text> |
|
1737 <xsl:text> } |
|
1738 </xsl:text> |
|
1739 <xsl:text> } |
|
1740 </xsl:text> |
|
1741 <xsl:text> |
1739 <xsl:text> |
1742 </xsl:text> |
1740 </xsl:text> |
1743 <xsl:text> svg_root.setAttribute('viewBox',new_desc.bbox.join(" ")); |
1741 <xsl:text> svg_root.setAttribute('viewBox',new_desc.bbox.join(" ")); |
1744 </xsl:text> |
1742 </xsl:text> |
1745 <xsl:text> current_visible_page = page_name; |
1743 <xsl:text> current_visible_page = page_name; |