| OLD | NEW |
| (Empty) |
| 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: "", 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: "", 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 var TITLE_COUNT_NAME = 'titleCountPeg'; | |
| 29 var TITLE_TEMPLATE_NAME = 'titleCountTpl'; | |
| 30 | |
| 31 // Called by the body onload handler: | |
| 32 function loadAll() { | |
| 33 var titleCountElement = domGetElementById(document, TITLE_COUNT_NAME); | |
| 34 var pegElement = domGetElementById(document, PEG_NAME); | |
| 35 var counter = {full: 0, empty: 0}; | |
| 36 | |
| 37 loadData(pegElement, TEMPLATE_NAME, tplData, counter); | |
| 38 loadData(titleCountElement, TITLE_TEMPLATE_NAME, tplData, counter); | |
| 39 } | |
| 40 | |
| 41 | |
| 42 function loadData(peg, templateId, data, counter) { | |
| 43 // Get a copy of the template: | |
| 44 var templateToProcess = jstGetTemplate(templateId); | |
| 45 | |
| 46 // Wrap our data in a context object: | |
| 47 var processingContext = new JsEvalContext(data); | |
| 48 | |
| 49 processingContext.setVariable('$counter', counter); | |
| 50 | |
| 51 // Process the template | |
| 52 jstProcess(processingContext, templateToProcess); | |
| 53 | |
| 54 // Clear the element to which we'll attach the processed template: | |
| 55 peg.innerHTML = ''; | |
| 56 | |
| 57 // Attach the template: | |
| 58 domAppendChild(peg, templateToProcess); | |
| 59 } | |
| 60 | |
| 61 // Function called by onclick to record state of closedness and | |
| 62 // refresh the outline display | |
| 63 function setClosed(jstdata, closedVal) { | |
| 64 jstdata.closed = closedVal; | |
| 65 loadAll(); | |
| 66 } | |
| 67 </script> | |
| 68 <link rel="stylesheet" type="text/css" href="css/maps2.deb.css"/> | |
| 69 </head> | |
| 70 <body onload="loadAll()"> | |
| 71 | |
| 72 <!-- | |
| 73 This is the div to which the instantiated template will be attached. | |
| 74 --> | |
| 75 <div id="peg"></div> | |
| 76 <div id="titleCountPeg"></div> | |
| 77 <!-- | |
| 78 A container to hide our template: | |
| 79 --> | |
| 80 <div style="display:none"> | |
| 81 <!-- | |
| 82 This is the template div. It will be copied and attached to the div above with: | |
| 83 var apt = jstGetTemplate('apt'); | |
| 84 appendChild(panel, apt) | |
| 85 --> | |
| 86 <div id="tpl"> | |
| 87 <!-- | |
| 88 Links to open and close outline sections: | |
| 89 --> | |
| 90 <a href="#" jsdisplay="closed" | |
| 91 jsvalues=".jstdata:$this" | |
| 92 onclick="setClosed(this.jstdata,0)">[Open]</a> | |
| 93 | |
| 94 <a href="#" jsdisplay="!closed && items.length" | |
| 95 jsvalues=".jstdata:$this" | |
| 96 onclick="setClosed(this.jstdata,1)">[Close]</a> | |
| 97 | |
| 98 <span jscontent="title" | |
| 99 jseval="title? $counter.full++: $counter.empty++"> | |
| 100 Outline heading | |
| 101 </span> | |
| 102 <ul jsdisplay="items.length && !closed"> | |
| 103 <li jsselect="items"> | |
| 104 <!--Recursive tranclusion: --> | |
| 105 <div transclude="tpl"></div> | |
| 106 </li> | |
| 107 </ul> | |
| 108 </div> | |
| 109 | |
| 110 <div id="titleCountTpl"> | |
| 111 <p> | |
| 112 This outline has <span jscontent="$counter.empty"></span> empty titles | |
| 113 and <span jscontent="$counter.full"></span> titles with content. | |
| 114 </p> | |
| 115 </div> | |
| 116 </div> | |
| 117 </body> | |
| 118 </html> | |
| OLD | NEW |