svghmi/gen_index_xhtml.xslt
branchsvghmi
changeset 2889 4eeed820fd3a
parent 2888 7beddc62a388
child 2890 ae8063127e95
equal deleted inserted replaced
2888:7beddc62a388 2889:4eeed820fd3a
   577       <xsl:text>
   577       <xsl:text>
   578 </xsl:text>
   578 </xsl:text>
   579     </xsl:for-each>
   579     </xsl:for-each>
   580     <xsl:text>    ],
   580     <xsl:text>    ],
   581 </xsl:text>
   581 </xsl:text>
       
   582     <xsl:text>    offset: 0,
       
   583 </xsl:text>
   582     <xsl:text>    indexes: [
   584     <xsl:text>    indexes: [
   583 </xsl:text>
   585 </xsl:text>
   584     <xsl:for-each select="$widget/path">
   586     <xsl:for-each select="$widget/path">
   585       <xsl:choose>
   587       <xsl:choose>
   586         <xsl:when test="not(@index)">
   588         <xsl:when test="not(@index)">
   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"/>
  1022 </xsl:text>
  1034 </xsl:text>
  1023     <xsl:text>        let idxidx = widget.indexes.indexOf(idx);
  1035     <xsl:text>        let idxidx = widget.indexes.indexOf(idx);
  1024 </xsl:text>
  1036 </xsl:text>
  1025     <xsl:text>        let d = widget.dispatch;
  1037     <xsl:text>        let d = widget.dispatch;
  1026 </xsl:text>
  1038 </xsl:text>
  1027     <xsl:text>        console.log(index, idx, idxidx, value);
       
  1028 </xsl:text>
       
  1029     <xsl:text>        if(typeof(d) == "function" &amp;&amp; idxidx == 0){
  1039     <xsl:text>        if(typeof(d) == "function" &amp;&amp; idxidx == 0){
  1030 </xsl:text>
  1040 </xsl:text>
  1031     <xsl:text>            d.call(widget, value, oldval);
  1041     <xsl:text>            d.call(widget, value, oldval);
  1032 </xsl:text>
  1042 </xsl:text>
  1033     <xsl:text>        }
  1043     <xsl:text>        }
  1370 </xsl:text>
  1380 </xsl:text>
  1371     <xsl:text>    indexes: [heartbeat_index],
  1381     <xsl:text>    indexes: [heartbeat_index],
  1372 </xsl:text>
  1382 </xsl:text>
  1373     <xsl:text>    dispatch: function(value) {
  1383     <xsl:text>    dispatch: function(value) {
  1374 </xsl:text>
  1384 </xsl:text>
  1375     <xsl:text>        // console.log("Heartbeat" + value);
       
  1376 </xsl:text>
       
  1377     <xsl:text>        change_hmi_value(heartbeat_index, "+1");
  1385     <xsl:text>        change_hmi_value(heartbeat_index, "+1");
  1378 </xsl:text>
  1386 </xsl:text>
  1379     <xsl:text>    }
  1387     <xsl:text>    }
  1380 </xsl:text>
  1388 </xsl:text>
  1381     <xsl:text>});
  1389     <xsl:text>});
  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=&gt;w.unsub());
  1598 </xsl:text>
  1646 </xsl:text>
  1599     <xsl:text>            /* remove subsribers */
  1647     <xsl:text>        old_desc.relative_widgets.map(w=&gt;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=&gt;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=&gt;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;