Author: hlship Date: Mon Nov 21 06:48:37 2005 New Revision: 345912 URL: http://svn.apache.org/viewcvs?rev=345912&view=rev Log: Add missing documentation for Tapestry script template specifications
Added: jakarta/tapestry/trunk/src/documentation/content/xdocs/UsersGuide/script.xml Modified: jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/script/Script_3_0.dtd jakarta/tapestry/trunk/src/documentation/content/xdocs/UsersGuide/spec.xml jakarta/tapestry/trunk/src/documentation/content/xdocs/links.ent jakarta/tapestry/trunk/src/documentation/content/xdocs/site.xml jakarta/tapestry/trunk/status.xml Modified: jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/script/Script_3_0.dtd URL: http://svn.apache.org/viewcvs/jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/script/Script_3_0.dtd?rev=345912&r1=345911&r2=345912&view=diff ============================================================================== --- jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/script/Script_3_0.dtd (original) +++ jakarta/tapestry/trunk/framework/src/java/org/apache/tapestry/script/Script_3_0.dtd Mon Nov 21 06:48:37 2005 @@ -4,11 +4,11 @@ DTD for the files used with the ScriptParser class and Script component. This is recognized with the public identifier: - -//Apache Software Foundation//Tapestry Script Specification 1.3//EN + -//Apache Software Foundation//Tapestry Script Specification 3.0//EN The canonical location for the DTD is: - http://jakarta.apache.org/tapestry/dtd/Script_1_3.dtd + http://jakarta.apache.org/tapestry/dtd/Script_3_0.dtd The root element is always script. @@ -30,8 +30,8 @@ Element: body Contained by: script -Allows a mix of text and insert elements. This text is added to -the large scripting block just before the <body> tag. +Allows a mix of text and control elements. This text is added to +the large scripting block just inside the <body> tag. --> <!ELEMENT body %full-content;> <!-- ======================================================= @@ -40,8 +40,8 @@ Appears in: %full-content; Iterates over a list of items; this is modeled after the -Foreach component. No iteration occurs if the value -from the property path is null. +For component. No iteration occurs if the value +from the expression is null. Attributes: key: Defines the symbol into which each succesive value is stored. Added: jakarta/tapestry/trunk/src/documentation/content/xdocs/UsersGuide/script.xml URL: http://svn.apache.org/viewcvs/jakarta/tapestry/trunk/src/documentation/content/xdocs/UsersGuide/script.xml?rev=345912&view=auto ============================================================================== --- jakarta/tapestry/trunk/src/documentation/content/xdocs/UsersGuide/script.xml (added) +++ jakarta/tapestry/trunk/src/documentation/content/xdocs/UsersGuide/script.xml Mon Nov 21 06:48:37 2005 @@ -0,0 +1,487 @@ +<?xml version="1.0"?> +<!-- + Copyright 2005 The Apache Software Foundation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V1.3//EN" + "http://forrest.apache.org/dtd/document-v13.dtd" +[ + <!ENTITY projectroot '../'> + <!ENTITY % links.ent SYSTEM "../links.ent"> + <!ENTITY % common.ent SYSTEM "common.ent"> + %links.ent; + %common.ent; + + <!ENTITY script.body '<link href="#script.body"><body></link>'> + <!ENTITY script.foreach '<link href="#script.foreach"><foreach></link>'> + <!ENTITY script.if '<link href="#script.if"><if></link>'> + <!ENTITY script.if-not '<link href="#script.if-not"><if-not></link>'> + <!ENTITY script.include-script '<link href="#script.include-script"><include-script></link>'> + <!ENTITY script.initialization '<link href="#script.initialization"><initialization></link>'> + <!ENTITY script.input-symbol '<link href="#script.input-symbol"><input-symbol></link>'> + <!ENTITY script.let '<link href="#script.let"><let></link>'> + <!ENTITY script.script '<link href="#script.script"><script></link>'> + <!ENTITY script.set '<link href="#script.set"><set></link>'> + <!ENTITY script.unique '<link href="#script.unique"><unique></link>'> + + <!ENTITY full-content '(<em>text</em> | &script.foreach; | &script.if; | &script.if-not; | &script.unique;)*'> + ]> +<document> + <header> + <title>Script Template Specification DTDs</title> + </header> + <body> + + <p> + Script template specifications are the odd man out when it comes + to Tapestry XML files as they don't use the same DTD as the + <link href="spec.html">other specifications</link>. + </p> + + <p> + Script templates are used to dynamically generate JavaScript to + support client-side behaviors associated with components. Tapestry + is all about dynamically renderered, customized HTML, so it makes sense + that dynamically rendered, customize JavaScript to complement + that HTML should also be supported. + </p> + + <p> + Script template files are parsed into memory as + instances of &IScript;. These script template <em>objects</em> + may be executed to generate the JavaScript. + </p> + + <p> + Many different script template objects may be executed during the course + of rendering a page; all the JavaScript from all the executions are + organized into two JavaScript blocks in the output page: + the <em>main body</em> at the top of the page + (just inside the HTML <body> tag), and + an <em>initialization block</em> at the bottom of the page, + (just before the HTML </body> tag). + </p> + + <p> + Executing a script template requires access to an &IScriptProcessor; instance; + this is usually provided by the &Body; component. The script processor + is responsible for managing the buffers of JavaScript, and assists + with generating unique ids for client-side variables and functions. + </p> + + <p> + A script template works with <em>symbols</em>, a set of key/value pairs + (implements as a Map). The script operates upon the input symbols and + generates new output symbols along the way, while generating + JavaScript. In some cases, the output symbols may be used + by a component when rendering HTML. + </p> + + <p> + Many of the elements in a script template have a body of parsable character + data. In the body of an element, you may reference symbols using + the Ant-like ${...} syntax. I.e. <code>${name}</code>. In fact, the + string inside the curly braces is an &OGNL; expression, so you may create more + complex expressions, such as <code>${field.form.name}</code>. + </p> + +<section> + <title>DOCTYPE</title> + + <p> + The DOCTYPE for a script template specification is: + </p> + +<source><![CDATA[ +<!DOCTYPE script PUBLIC + "-//Apache Software Foundation//Tapestry Script Specification 3.0//EN" + "http://jakarta.apache.org/tapestry/dtd/Script_3_0.dtd">]]></source> +</section> <!-- DOCTYPE --> + + <section id="script.body"> + <title><body> element</title> + + <p> + Appears in: &script.script; + </p> + + <p> Allows a mix of text and control elements. This text is added to + the large scripting block just inside the HTML <body> tag. + </p> + + <p><body> elements:</p> + + <source>&full-content;</source> + </section> + + <section id="script.foreach"> + <title><foreach> element</title> + + <p> + Appears in: <em>many</em> + </p> + + <p> + Iterates over a list of items; this is modeled after the + For component. No iteration occurs if the value + from the expression is null. + </p> + + <table> + + <tr> + <th>Name</th> + <th>Type</th> + <th>Required ?</th> + <th>Default Value</th> + <th>Description</th> + </tr> + + <tr> +<td>key</td> <td>string</td> <td>no</td> <td></td> + <td> + Defines the symbol into which each succesive value is stored. + </td> + </tr> + + <tr> + <td>index</td> <td>string</td> <td>no</td> <td></td> + <td> + Defines the symbol into which the index of the value of the current iteration is stored. + </td> + </tr> + + <tr> + <td>expression</td> + <td>string</td> <td>yes</td> <td></td> + <td> + The source of values, as an OGNL expression rooted in the symbols Map. + </td> + </tr> + </table> + + <p><foreach> elements:</p> + + <source>&full-content;</source> + </section> + + + <section id="script.if"> + <title><if> element</title> + + <p> + Appears in: <em>many</em> + </p> + + <p> + Creates a conditional portion of the script; The body of the element + is only included if the expression evaulates to true. + </p> + + <table> + + <tr> + <th>Name</th> + <th>Type</th> + <th>Required ?</th> + <th>Default Value</th> + <th>Description</th> + </tr> + + <tr> + <td>expression</td> <td>string</td> <td>yes</td> <td></td> + <td> + The &OGNL; expression to evaluate. + </td> + </tr> + + + </table> + + <p> + <if> Elements + </p> + + <source>&full-content;</source> + + </section> + + <section id="script.if-not"> + <title><if-not> element</title> + + <p> + Identical to the &script.if; element, except that the body + is only included in the output if the expression + evaluates to <strong>false</strong>. + </p> + </section> + + + + <section id="script.include-script"> + <title><include-script> element</title> + + <p> + Inserts a reference to a static JavaScript file stored on the + classpath. A particular file will only be included once per rendering + of a page. + </p> + + <p> + For best performance, as much logic as possible should be shifted into + static JavaScript library files that are included via this element. + The dynamic portion of the JavaScript should really be initialization + of code provided by such a static JavaScript library. This optimizes + that amount of data that must be sent to the client web browser, as + it will be able to cache the content of static library files. + </p> + + <p> + Appears in: &script.script; + </p> + + <table> + + <tr> + <th>Name</th> + <th>Type</th> + <th>Required ?</th> + <th>Default Value</th> + <th>Description</th> + </tr> + + <tr> + <td>resource-path</td> + <td>string</td> + <td>yes</td> + <td></td> + <td>The path to the script within the classpath.</td> + </tr> + </table> + + </section> + <section id="script.initialization"> + <title><initialization> element</title> + + <p> + Appears in: &script.script; + </p> + + <p> Allows a mix of text and control elements. This text is added to + the large scripting block just inside the HTML </body> tag. It therefore + can refrence HTML objects within the page. + </p> + + <p><initialization> elements:</p> + + <source>&full-content;</source> + </section> + + <section id="script.input-symbol"> + <title><input-symbol> element</title> + + <p> + Appears in: &script.script; + </p> + + <p> + Defines an input symbol used by the script. Defining input symbols + is optional; it merely enforces that symbols be + of a particular type, or enforces that a non-null value + be provided. This is handy as <em>defensive programming</em>. + </p> + + + <table> + + <tr> + <th>Name</th> + <th>Type</th> + <th>Required ?</th> + <th>Default Value</th> + <th>Description</th> + </tr> + + <tr> + <td>key</td> + <td>string</td> + <td>yes</td> + <td></td> + <td>The name of the symbol to check.</td> + </tr> + + <tr> + <td>class</td> + <td>string</td> + <td>no</td> + <td></td> + <td> + If provided, then the actual value + must be assignable to the given type (which may + be a Java class or interface name). + </td> + </tr> + + <tr> + <td> + required + </td> + <td>boolean</td> + <td>no</td> + <td>no</td> + <td> + If "yes", then a non-null value must be provided. + </td> + </tr> + </table> + + </section> + + <section id="script.let"> + <title><let> element</title> + + <p> + Appears in: &script.script; + </p> + + <p> + Defines a new symbol in terms of a string + (usually with embedded expressions). + </p> + + <p> + When a string is marked as unique, it is passed through a page-wide + filter; if the name conflicts with a previous unique string, + then a numeric suffix is appended to the string to ensure + its uniqueness. This is most useful when defining + JavaScript client-side variables and functions, to ensure + there are no conflicts between different script templates, or + successive executions of the same script template. + </p> + + <table> + + <tr> + <th>Name</th> + <th>Type</th> + <th>Required ?</th> + <th>Default Value</th> + <th>Description</th> + </tr> + + <tr> + <td>key</td> <td>string</td> <td>yes</td> <td></td> + <td>The name of the new symbol to create.</td> + </tr> + + <tr> + <td>unique</td> <td>boolean</td> <td>no</td> <td>no</td> + <td> + If yes, then the string is made unique. + </td> + </tr> + +</table> + + <p> + <let> Elements + </p> + + <source>&full-content;</source> + + + </section> + + <section id="script.script"> + <title><script> element</title> + + <p> + <em>root element</em> + </p> + + <p> + The <script> element is the root element of the document. + It contains no attributes. + </p> + + <p> + <script> Elements + </p> + <source> +(&script.include-script;*, &script.input-symbol;*, (&script.let; | &script.set;)*, &script.body;?, &script.initialization;?) + </source> + + </section> <!-- script --> + + + <section id="script.set"> + <title><set> element</title> + + <p> + Appears in: <em>many</em> + </p> + + <p> + Creates a new symbol, or overwrites an existing symbol, in terms + of an &OGNL; expression. + </p> + + <table> + + <tr> + <th>Name</th> + <th>Type</th> + <th>Required ?</th> + <th>Default Value</th> + <th>Description</th> + </tr> + + <tr> + <td>key</td> <td>string</td> <td>yes</td> <td></td> + <td>The key for the input symbol to be created (or overwritten).</td> + </tr> + + <tr> + <td>expression</td> <td>string</td> + <td>yes</td> + <td></td> + <td>The &OGNL; expression to evaluate and assign to the + input symbol.</td> + </tr> + </table> + + </section> <!-- script.set --> + + <section id="script.unique"> + <title><unique> element</title> + + <p> + Appears in: <em>many</em> + </p> + + <p> + Defines a block of text that is only rendered once per page. + This is appropriate to certain kinds of initialization code + that should not be duplicated, even if the same script + template is executed multiple times. + </p> + +<p><script> elements:</p> + +<source>&full-content;</source> + + </section> + </body> +</document> Modified: jakarta/tapestry/trunk/src/documentation/content/xdocs/UsersGuide/spec.xml URL: http://svn.apache.org/viewcvs/jakarta/tapestry/trunk/src/documentation/content/xdocs/UsersGuide/spec.xml?rev=345912&r1=345911&r2=345912&view=diff ============================================================================== --- jakarta/tapestry/trunk/src/documentation/content/xdocs/UsersGuide/spec.xml (original) +++ jakarta/tapestry/trunk/src/documentation/content/xdocs/UsersGuide/spec.xml Mon Nov 21 06:48:37 2005 @@ -91,7 +91,9 @@ </table> <note> -A fifth type of specification, the Script specification, is described seperately. In addition, in Tapestry 4.0, +A fifth type of specification, the script template specification, is +<link href="script.html">described seperately</link>. In addition, in Tapestry 4.0, +a significant part of an application's behavior is defined by its &HiveMind; module deployment descriptor. </note> Modified: jakarta/tapestry/trunk/src/documentation/content/xdocs/links.ent URL: http://svn.apache.org/viewcvs/jakarta/tapestry/trunk/src/documentation/content/xdocs/links.ent?rev=345912&r1=345911&r2=345912&view=diff ============================================================================== --- jakarta/tapestry/trunk/src/documentation/content/xdocs/links.ent (original) +++ jakarta/tapestry/trunk/src/documentation/content/xdocs/links.ent Mon Nov 21 06:48:37 2005 @@ -84,6 +84,7 @@ <!ENTITY IRequestCycle '<link href="&apiroot;/IRequestCycle.html">IRequestCycle</link>'> <!ENTITY IRequestDecoder '<link href="&apiroot;/request/IRequestDecoder.html">IRequestDecoder</link>'> <!ENTITY IScript '<link href="&apiroot;/IScript.html">IScript</link>'> +<!ENTITY IScriptProcessor '<link href="&apiroot;/IScriptProcessor.html">IScriptProcessor</link>'> <!ENTITY IScriptSource '<link href="&apiroot;/engine/IScriptSource.html">IScriptSource</link>'> <!ENTITY ISpecificationSource '<link href="&apiroot;/engine/ISpecificationSource.html">ISpecificationSource</link>'> <!ENTITY ISpecificationResolverDelegate Modified: jakarta/tapestry/trunk/src/documentation/content/xdocs/site.xml URL: http://svn.apache.org/viewcvs/jakarta/tapestry/trunk/src/documentation/content/xdocs/site.xml?rev=345912&r1=345911&r2=345912&view=diff ============================================================================== --- jakarta/tapestry/trunk/src/documentation/content/xdocs/site.xml (original) +++ jakarta/tapestry/trunk/src/documentation/content/xdocs/site.xml Mon Nov 21 06:48:37 2005 @@ -67,6 +67,7 @@ <proprties label="Tapestry Object Properties" href="properties.html"/> <upgrade label="Upgrading from 3.0" href="upgrade.html"/> <spec label="Specification DTDs" href="spec.html"/> + <script label="Script Template DTD" href="script.html"/> </UsersGuide> <Examples label="Examples" href="examples/"> Modified: jakarta/tapestry/trunk/status.xml URL: http://svn.apache.org/viewcvs/jakarta/tapestry/trunk/status.xml?rev=345912&r1=345911&r2=345912&view=diff ============================================================================== --- jakarta/tapestry/trunk/status.xml (original) +++ jakarta/tapestry/trunk/status.xml Mon Nov 21 06:48:37 2005 @@ -63,6 +63,7 @@ <action type="fix" dev="HLS" fixes-bug="TAPESTRY-763">RequestCycle is not available during page initialization</action> <action type="fix" dev="HLS" fixes-bug="TAPESTRY-756">FieldLabel's prerender property should default to true</action> <action type="fix" dev="HLS" fixes-bug="TAPESTRY-748">NumberTranslator.js missing semicolon</action> + <action type="add" dev="HLS">Add missing documentation for Tapestry script template specifications</action> </release> <release version="4.0-beta-13" date="Nov 12 2005"> <action type="update" dev="HLS">Switch to HiveMind 1.1 (final)</action> --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]