• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1<html>
2<head><title>Outline Tree Using Jstemplates</title>
3  <script src="../util.js" type="text/javascript"></script>
4  <script src="../jsevalcontext.js" type="text/javascript"></script>
5  <script src="../jstemplate.js" type="text/javascript"></script>
6  <script type="text/javascript">
7    // Hierarchical data:
8    var tplData =
9      { title: "Jstemplates", items: [
10        { title: "Using Jstemplates", items: [
11          { title: "The Jstemplates Module"},
12          { title: "Javascript Data"},
13          { title: "Template HTML"},
14          { title: "Processing Templates with Javascript Statements"}
15          ]
16        },
17        { title: "Template Processing Instructions", items: [
18          { title: "Processing Environment" },
19          { title: "Instruction Attributes", items: [
20            {title: "jscontent"}, {title: "jsselect"}, {title: "jsdisplay"},
21            {title: "transclude"},{title: "jsvalues"}, {title: "jsskip"}, {title: "jseval"}
22          ]}
23        ]}
24      ]};
25
26    var PEG_NAME = 'peg';
27    var TEMPLATE_NAME = 'tpl';
28
29    // Called by the body onload handler:
30    function loadAll() {
31      var pegElement = domGetElementById(document, PEG_NAME);
32      loadData(pegElement, TEMPLATE_NAME, tplData);
33    }
34
35    function loadData(peg, templateId, data) {
36      // Get a copy of the template:
37      var templateToProcess = jstGetTemplate(templateId);
38
39      // Wrap our data in a context object:
40      var processingContext = new JsEvalContext(data);
41
42      // Process the template
43      jstProcess(processingContext, templateToProcess);
44
45      // Clear the element to which we'll attach the processed template:
46      peg.innerHTML = '';
47
48      // Attach the template:
49      domAppendChild(peg, templateToProcess);
50    }
51
52    // Function called by onclick to record state of closedness and
53    // refresh the outline display
54    function setClosed(jstdata, closedVal) {
55      jstdata.closed = closedVal;
56      loadAll();
57    }
58    </script>
59    <link rel="stylesheet" type="text/css" href="css/maps2.deb.css"/>
60</head>
61<body onload="loadAll()">
62
63<!--
64This is the div to which the instantiated template will be attached.
65-->
66<div id="peg"></div>
67
68<!--
69A container to hide our template:
70-->
71<div style="display:none">
72<!--
73This is the template div. It will be copied and attached to the div above with:
74 var apt = jstGetTemplate('apt');
75 appendChild(panel, apt)
76-->
77  <div id="tpl">
78  <!--
79  Links to open and close outline sections:
80  -->
81    <a href="#" jsdisplay="closed" jsvalues=".jstdata:$this" onclick="setClosed(this.jstdata,0)">[Open]</a>
82    <a href="#" jsdisplay="!closed && items.length" jsvalues=".jstdata:$this"
83       onclick="setClosed(this.jstdata,1)">[Close]</a>
84
85    <span jscontent="title">Outline heading</span>
86    <ul jsdisplay="items.length && !closed">
87      <li jsselect="items">
88        <!--Recursive tranclusion: -->
89        <div transclude="tpl"></div>
90      </li>
91    </ul>
92  </div>
93
94</div>
95</body>
96</html>
97