ソースを参照

initial import didn't include codeview template; adding it

Mike Hamburg 16 年 前
コミット
282c33c450

+ 11 - 0
jsdoc_toolkit-2.3.3-beta/templates/codeview/allclasses.tmpl

@@ -0,0 +1,11 @@
+<div align="center">{+new Link().toFile("index.html").withText("Class Index")+} | {+new Link().toFile("files.html").withText("File Index")+}</div>
+
+<h2 class="heading1">Classes</h2>
+
+<ul class="classList">
+	<for each="thisClass" in="data">
+		<li>{!
+			output += new Link().toClass(thisClass.alias);
+		!}</li>
+	</for>
+</ul>

+ 62 - 0
jsdoc_toolkit-2.3.3-beta/templates/codeview/allfiles.tmpl

@@ -0,0 +1,62 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+	<head>
+		<meta http-equiv="content-type" content="text/html; charset={+IO.encoding+}" />
+		{! Link.base = ""; /* all generated links will be relative to this */ !}
+		<title>JsDoc Reference - File Index</title>
+		<meta name="generator" content="JsDoc Toolkit" />
+		<link href="css/default.css" type="text/css" rel="stylesheet" media="all" />
+	</head>
+	
+	<body>
+		{+include("static/header.html")+}
+		
+		<div class="index">
+			<div class="menu">
+				{+publish.classesIndex+}
+			</div>
+			
+			<div class="fineprint" style="clear:both">
+				<if test="JSDOC.opt.D.copyright">&copy;{+JSDOC.opt.D.copyright+}<br /></if>
+				Generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> {+JSDOC.VERSION+} on {+new Date()+}<br />
+				HTML template: <a href="http://www.thebrightlines.com/2010/05/06/new-template-for-jsdoctoolkit-codeview/" target="_blank">Codeview</a>
+			</div>
+		</div>
+		
+		<div class="content">
+			<div class="innerContent">
+				<h1 class="classTitle">File Index</h1>
+				
+				<ul class="fileList">
+					<for each="item" in="data">
+						<li>
+							<h2 class="filename">{+new Link().toSrc(item.alias).withText(item.name)+}</h2>
+							
+							<if test="item.desc">{+resolveLinks(item.desc)+}</if>
+							
+							<dl class="detailList">
+								<if test="item.author">
+									<dt class="heading">Author:</dt>
+									<dd>{+item.author+}</dd>
+								</if>
+								
+								<if test="item.version">
+									<dt class="heading">Version:</dt>
+									<dd>{+item.version+}</dd>
+								</if>
+								
+								{! var locations = item.comment.getTag('location').map(function($){return $.toString().replace(/(^\$ ?| ?\$$)/g, '').replace(/^HeadURL: https:/g, 'http:');}) !}
+								<if test="locations.length">
+									<dt class="heading">Location:</dt>
+									<for each="location" in="locations">
+										<dd><a href="{+location+}">{+location+}</a></dd>
+									</for>
+								</if>
+							</dl>
+						</li>
+					</for>
+				</ul>
+			</div>
+		</div>
+	</body>
+</html>

+ 690 - 0
jsdoc_toolkit-2.3.3-beta/templates/codeview/class.tmpl

@@ -0,0 +1,690 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+	<head>
+		<meta http-equiv="content-type" content="text/html; charset={+IO.encoding+}" />
+		<meta name="generator" content="JsDoc Toolkit" />
+		{! Link.base = "../"; /* all generated links will be relative to this */ !}
+		<title>JsDoc Reference - {+data.alias+}</title>
+		<link href="../css/default.css" type="text/css" rel="stylesheet" media="all" />
+	</head>
+
+	<body>
+		{+include("static/header.html")+}
+
+		<div class="index">
+			<div class="menu">
+				<!-- begin publish.classesIndex -->
+				{+publish.classesIndex+}
+				<!-- end publish.classesIndex -->
+			</div>
+			
+			<div class="fineprint" style="clear:both">
+				<if test="JSDOC.opt.D.copyright">&copy;{+JSDOC.opt.D.copyright+}<br /></if>
+				Generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> {+JSDOC.VERSION+} on {+new Date()+}<br />
+				HTML template: <a href="http://www.thebrightlines.com/2010/05/06/new-template-for-jsdoctoolkit-codeview/" target="_blank">Codeview</a>
+			</div>
+		</div>
+		
+		<div class="content">
+			<div class="innerContent">
+				<h1 class="classTitle">
+					{!
+						var classType = "";
+						
+						if (data.isBuiltin()) {
+							classType += "Built-In ";
+						}
+						
+						if (data.isNamespace) {
+							if (data.is('FUNCTION')) {
+								classType += "Function ";
+							}
+							classType += "Namespace ";
+						} else {
+							classType += "Class ";
+						}
+					!}
+					{+classType+}<span>{+data.alias+}</span>
+				</h1>
+
+				<p class="description summary">
+					<if test="data.version">
+						<strong>Version {+ data.version +}.</strong><br />
+					</if>
+					
+					<if test="data.augments.length"><br />Extends
+						{+
+							data.augments
+							.sort()
+							.map(
+								function($) { return new Link().toSymbol($); }
+							)
+							.join(", ")
+						+}.<br />
+					</if>
+				
+					{+resolveLinks(data.classDesc)+}
+					
+					<if test="!data.isBuiltin()">{# isn't defined in any file #}
+						<br /><em>Defined in: </em> {+new Link().toSrc(data.srcFile)+}.
+					</if>
+				</p>
+
+				<if test="!data.isBuiltin() && (data.isNamespace || data.is('CONSTRUCTOR'))">
+					<div class="props">
+						<table class="summaryTable" cellspacing="0" summary="A summary of the constructor documented in the class {+data.alias+}.">
+							<caption>{+classType+}Summary</caption>
+							<thead>
+								<tr>
+									<th scope="col">Constructor Attributes</th>
+									<th scope="col">Constructor Name and Description</th>
+								</tr>
+							</thead>
+							<tbody>
+								<tr>
+									<td class="attributes">{!
+										if (data.isPrivate) output += "&lt;private&gt; ";
+										if (data.isInner) output += "&lt;inner&gt; ";
+									!}&nbsp;</td>
+									<td class="nameDescription" {!if (data.comment.getTag("hilited").length){output += 'style="color: red"'}!}>
+										<div class="fixedFont">
+											<b>{+ new Link().toSymbol(data.alias).inner('constructor')+}</b><if test="classType != 'Namespace '">{+ makeSignature(data.params) +}</if>
+										</div>
+										<div class="description">{+resolveLinks(summarize(data.desc))+}</div>
+									</td>
+								</tr>
+							</tbody>
+						</table>
+					</div>
+				</if>
+
+				<if test="data.properties.length">
+					{! var ownProperties = data.properties.filter(function($){return $.memberOf == data.alias && !$.isNamespace}).sort(makeSortby("name")); !}
+					<if test="ownProperties.length">
+						<div class="props">
+							<table class="summaryTable" cellspacing="0" summary="A summary of the fields documented in the class {+data.alias+}.">
+								<caption>Field Summary</caption>
+								
+								<thead>
+									<tr>
+										<th scope="col">Field Attributes</th>
+										<th scope="col">Field Name and Description</th>
+									</tr>
+								</thead>
+								
+								<tbody>
+									<for each="member" in="ownProperties">
+										<tr>
+											<td class="attributes">{!
+												if (member.isPrivate) output += "&lt;private&gt; ";
+												if (member.isInner) output += "&lt;inner&gt; ";
+												if (member.isStatic) output += "&lt;static&gt; ";
+												if (member.isConstant) output += "&lt;constant&gt; ";
+											!}&nbsp;</td>
+											<td class="nameDescription">
+												<div class="fixedFont">
+												<if test="member.isStatic && member.memberOf != '_global_'">{+member.memberOf+}.</if><b>{+new Link().toSymbol(member.alias).withText(member.name)+}</b>
+												</div>
+												<div class="description">{+resolveLinks(summarize(member.desc))+}</div>
+											</td>
+										</tr>
+									</for>
+								</tbody>
+							</table>
+						</div>
+					</if>
+					
+					<if test="data.inheritsFrom.length">
+						<dl class="inheritsList">
+						{!
+							var borrowedMembers = data.properties.filter(function($) {return $.memberOf != data.alias});
+							
+							var contributers = [];
+							borrowedMembers.map(function($) {if (contributers.indexOf($.memberOf) < 0) contributers.push($.memberOf)});
+							for (var i = 0, l = contributers.length; i < l; i++) {
+								output +=
+									"<dt>Fields borrowed from class "+new Link().toSymbol(contributers[i])+": </dt>"
+									+
+									"<dd>" +
+									borrowedMembers
+									.filter(
+										function($) { return $.memberOf == contributers[i] }
+									)
+									.sort(makeSortby("name"))
+									.map(
+										function($) { return new Link().toSymbol($.alias).withText($.name) }
+									)
+									.join(", ")
+									+
+									"</dd>";
+							}
+						!}
+						</dl>
+					</if>
+				</if>
+
+	<!--
+	#### METHODS SUMMARY
+	-->
+				<if test="data.methods.length">
+					{! var ownMethods = data.methods.filter(function($){return $.memberOf == data.alias  && !$.isNamespace}).sort(makeSortby("name")); !}
+					<if test="ownMethods.length">
+						<div class="props">
+							<table class="summaryTable" cellspacing="0" summary="A summary of the methods documented in the class {+data.alias+}.">
+								<caption>Method Summary</caption>
+								
+								<thead>
+									<tr>
+										<th scope="col">Method Attributes</th>
+										<th scope="col">Method Name and Description</th>
+									</tr>
+								</thead>
+								
+								<tbody>
+									<for each="member" in="ownMethods">
+										<tr>
+											<td class="attributes">{!
+												if (member.isPrivate) output += "&lt;private&gt; ";
+												if (member.isInner) output += "&lt;inner&gt; ";
+												if (member.isStatic) output += "&lt;static&gt; ";
+											!}&nbsp;</td>
+											<td class="nameDescription">
+												<div class="fixedFont"><if test="member.isStatic && member.memberOf != '_global_'">{+member.memberOf+}.</if><b>{+new Link().toSymbol(member.alias).withText(member.name.replace(/\^\d+$/, ''))+}</b>{+makeSignature(member.params)+}
+												</div>
+												<div class="description">{+resolveLinks(summarize(member.desc))+}</div>
+											</td>
+										</tr>
+									</for>
+								</tbody>
+							</table>
+						</div>
+					</if>
+					
+					<if test="data.inheritsFrom.length">
+						<dl class="inheritsList">
+						{!
+							var borrowedMembers = data.methods.filter(function($) {return $.memberOf != data.alias});
+							var contributers = [];
+							borrowedMembers.map(function($) {if (contributers.indexOf($.memberOf) < 0) contributers.push($.memberOf)});
+							for (var i = 0, l = contributers.length; i < l; i++) {
+								output +=
+									"<dt>Methods borrowed from class "+new Link().toSymbol(contributers[i])+": </dt>"
+									+
+									"<dd>" +
+									borrowedMembers
+									.filter(
+										function($) { return $.memberOf == contributers[i] }
+									)
+									.sort(makeSortby("name"))
+									.map(
+										function($) { return new Link().toSymbol($.alias).withText($.name) }
+									)
+									.join(", ")
+									+
+									"</dd>";
+							}
+						!}
+						</dl>
+					</if>
+				</if>
+				
+	<!--
+	#### EVENTS SUMMARY
+	-->
+				<if test="data.events.length">
+					{! var ownEvents = data.events.filter(function($){return $.memberOf == data.alias  && !$.isNamespace}).sort(makeSortby("name")); !}
+					<if test="ownEvents.length">
+					<div class="props">
+						<table class="summaryTable" cellspacing="0" summary="A summary of the events documented in the class {+data.alias+}.">
+							<caption>Event Summary</caption>
+							
+							<thead>
+								<tr>
+									<th scope="col">Event Attributes</th>
+									<th scope="col">Event Name and Description</th>
+								</tr>
+							</thead>
+							
+							<tbody>
+								<for each="member" in="ownEvents">
+									<tr>
+										<td class="attributes">{!
+											if (member.isPrivate) output += "&lt;private&gt; ";
+											if (member.isInner) output += "&lt;inner&gt; ";
+											if (member.isStatic) output += "&lt;static&gt; ";
+										!}&nbsp;</td>
+										<td class="nameDescription">
+											<div class="fixedFont"><if test="member.isStatic && member.memberOf != '_global_'">{+member.memberOf+}.</if><b>{+new Link().toSymbol(member.alias).withText(member.name)+}</b>{+makeSignature(member.params)+}
+											</div>
+											<div class="description">{+resolveLinks(summarize(member.desc))+}</div>
+										</td>
+									</tr>
+								</for>
+							</tbody>
+						</table>
+					</div>
+					</if>
+					
+					<if test="data.inheritsFrom.length">
+						<dl class="inheritsList">
+						{!
+							var borrowedMembers = data.events.filter(function($) {return $.memberOf != data.alias});
+							var contributers = [];
+							borrowedMembers.map(function($) {if (contributers.indexOf($.memberOf) < 0) contributers.push($.memberOf)});
+							for (var i = 0, l = contributers.length; i < l; i++) {
+								output +=
+									"<dt>Events borrowed from class "+new Link().toSymbol(contributers[i])+": </dt>"
+									+
+									"<dd>" +
+									borrowedMembers
+									.filter(
+										function($) { return $.memberOf == contributers[i] }
+									)
+									.sort(makeSortby("name"))
+									.map(
+										function($) { return new Link().toSymbol($.alias).withText($.name) }
+									)
+									.join(", ")
+									+
+									"</dd>";
+							}
+						
+						!}
+						</dl>
+					</if>
+				</if>
+
+	<!--
+	#### CONSTRUCTOR DETAILS
+	-->
+				<if test="!data.isBuiltin() && (data.isNamespace || data.is('CONSTRUCTOR'))">
+					<div class="details props">
+						<div class="innerProps">
+							<a name="constructor"></a>
+							
+							<div class="sectionTitle">
+								{+classType+}Detail
+							</div>
+							
+							<div class="fixedFont">{!
+								if (data.isPrivate) output += "&lt;private&gt; ";
+								if (data.isInner) output += "&lt;inner&gt; ";
+							!}
+								<b>{+ data.alias +}</b><if test="classType != 'Namespace '">{+ makeSignature(data.params) +}</if>
+							</div>
+							
+							<div class="description">
+								{+resolveLinks(data.desc)+}
+								<if test="data.author"><br /><i>Author: </i>{+data.author+}.</if>
+							</div>
+							
+							<if test="data.example.length">
+								<for each="example" in="data.example">
+									<pre class="code">{+example+}</pre>
+								</for>
+							</if>
+						
+							<if test="data.params.length">
+								<dl class="detailList params">
+									<dt class="heading">Parameters:</dt>
+									<for each="item" in="data.params">
+										<dt>
+											{+((item.type)?""+("<span class=\"light fixedFont\">{"+(new Link().toSymbol(item.type)+"}</span> ")) : "")+} <b>{+item.name+}</b>
+											<if test="item.isOptional"><i>Optional<if test="item.defaultValue">, Default: {+item.defaultValue+}</if></i></if>
+										</dt>
+										<dd>{+resolveLinks(item.desc)+}</dd>
+									</for>
+								</dl>
+							</if>
+							
+							<if test="data.deprecated || data.since || data.exceptions.length || data.returns.length || data.requires.length || data.see.length">
+								<dl class="detailList nomargin">
+									<if test="data.deprecated">
+										<dt>
+											{+resolveLinks(data.deprecated)+}
+										</dt>
+									</if>
+									
+									<if test="data.since">
+										<dt class="heading">Since:</dt>
+										<dd>{+ data.since +}</dd>
+									</if>
+									
+									<if test="data.exceptions.length">
+										<dt class="heading">Throws:</dt>
+										<for each="item" in="data.exceptions">
+											<dt>
+												{+((item.type)?"<span class=\"light fixedFont\">{"+(new Link().toSymbol(item.type))+"}</span> " : "")+} <b>{+item.name+}</b>
+											</dt>
+												<dd>{+resolveLinks(item.desc)+}</dd>
+										</for>
+									</if>
+									
+									<if test="data.returns.length">
+										<dt class="heading">Returns:</dt>
+										<for each="item" in="data.returns">
+												<dd>{+((item.type)?"<span class=\"light fixedFont\">{"+(new Link().toSymbol(item.type))+"}</span> " : "")+}{+resolveLinks(item.desc)+}</dd>
+										</for>
+									</if>
+									
+									<if test="data.requires.length">
+										<dt class="heading">Requires:</dt>
+										<for each="item" in="data.requires">
+											<dd>{+ resolveLinks(item) +}</dd>
+										</for>
+									</if>
+									
+									<if test="data.see.length">
+										<dt class="heading">See:</dt>
+										<for each="item" in="data.see">
+											<dd>{+ new Link().toSymbol(item) +}</dd>
+										</for>
+									</if>
+								</dl>
+							</if>
+						</div>
+					</div>
+				</if>
+
+	<!--
+	#### FIELD DETAILS
+	-->
+				<if test="defined(ownProperties) && ownProperties.length">
+					<div class="details props">
+						<div class="innerProps">
+
+							<div class="sectionTitle">
+								Field Detail
+							</div>
+							
+							<for each="member" in="ownProperties">
+								<a name="{+Link.symbolNameToLinkName(member)+}"></a>
+								
+								<div class="fixedFont heading">
+									<span class='lighter'>
+									{!
+										if (member.isPrivate) output += "&lt;private&gt; ";
+										if (member.isInner) output += "&lt;inner&gt; ";
+										if (member.isStatic) output += "&lt;static&gt; ";
+										if (member.isConstant) output += "&lt;constant&gt; ";
+									!}
+									</span>
+									
+									<if test="member.type"><span class="light">{{+new Link().toSymbol(member.type)+}}</span></if>
+									
+									<if test="member.isStatic && member.memberOf != '_global_'"><span class="light">{+member.memberOf+}.</span></if><b>{+member.name+}</b>							
+								</div>
+								
+								<div class="description">
+									{+resolveLinks(member.desc)+}
+									<if test="member.srcFile != data.srcFile">
+										<br />
+										<i>Defined in: </i> {+new Link().toSrc(member.srcFile)+}.
+									</if>
+									
+									<if test="member.author"><br /><i>Author: </i>{+member.author+}.</if>
+								</div>
+								
+								<if test="member.example.length">
+									<for each="example" in="member.example">
+										<pre class="code">{+example+}</pre>
+									</for>
+								</if>
+
+								<if test="member.deprecated || member.since || member.see.length || member.defaultValue">
+									<dl class="detailList nomargin">
+									
+										<if test="member.deprecated">
+											<dt class="heading">Deprecated:</dt>
+											<dt>
+												{+ resolveLinks(member.deprecated) +}
+											</dt>
+										</if>
+										<if test="member.since">
+											<dt class="heading">Since:</dt>
+											<dd>{+ member.since +}</dd>
+										</if>
+										<if test="member.see.length">
+											<dt class="heading">See:</dt>
+											<for each="item" in="member.see">
+												<dd>{+ new Link().toSymbol(item) +}</dd>
+											</for>
+										</if>
+										<if test="member.defaultValue">
+											<dt class="heading">Default Value:</dt>
+											<dd>
+												{+resolveLinks(member.defaultValue)+}
+											</dd>
+										</if>
+									</dl>
+								</if>
+								
+								<if test="!$member_last"><div class="hr"></div></if>
+							</for>
+						</div>
+					</div>
+				</if>
+
+	<!--
+	#### METHOD DETAILS
+	-->		
+				<if test="defined(ownMethods) && ownMethods.length">
+					<div class="details props">
+						<div class="innerProps">
+							<div class="sectionTitle">
+								Method Detail
+							</div>
+							
+							<for each="member" in="ownMethods">
+								<a name="{+Link.symbolNameToLinkName(member)+}"></a>
+								
+								<div class="fixedFont heading">
+									<span class='lighter'>
+									{!
+										if (member.isPrivate) output += "&lt;private&gt; ";
+										if (member.isInner) output += "&lt;inner&gt; ";
+										if (member.isStatic) output += "&lt;static&gt; ";
+									!}
+									</span>
+									
+									<if test="member.type"><span class="light">{{+new Link().toSymbol(member.type)+}}</span></if>
+									
+									<if test="member.isStatic && member.memberOf != '_global_'"><span class="light">{+member.memberOf+}.</span></if><b>{+member.name.replace(/\^\d+$/, '')+}</b>{+makeSignature(member.params)+}
+								</div>
+								
+								<div class="description">
+									{+resolveLinks(member.desc)+}
+									
+									<if test="member.srcFile != data.srcFile">
+										<br />
+										<i>Defined in: </i> {+new Link().toSrc(member.srcFile)+}.
+									</if>
+									
+									<if test="member.author"><br /><i>Author: </i>{+member.author+}.</if>
+								</div>
+								
+								<if test="member.example.length">
+									<for each="example" in="member.example">
+										<pre class="code">{+example+}</pre>
+									</for>
+								</if>
+								
+								<if test="member.params.length">
+									<dl class="detailList params">
+										<dt class="heading">Parameters:</dt>
+										<for each="item" in="member.params">
+											<dt>
+												{+((item.type)?"<span class=\"light fixedFont\">{"+(new Link().toSymbol(item.type))+"}</span> " : "")+}<b>{+item.name+}</b>
+												<if test="item.isOptional"><i>Optional<if test="item.defaultValue">, Default: {+item.defaultValue+}</if></i></if>
+											</dt>
+											<dd>{+resolveLinks(item.desc)+}</dd>
+										</for>
+									</dl>
+								</if>
+								
+								<if test="member.deprecated || member.since || member.exceptions.length || member.returns.length || member.requires.length || member.see.length">
+									<dl class="detailList nomargin">
+									
+										<if test="member.deprecated">
+											<dt class="heading">Deprecated:</dt>
+											<dt>
+												{+ resolveLinks(member.deprecated) +}
+											</dt>
+										</if>
+										
+										<if test="member.since">
+											<dt class="heading">Since:</dt>
+											<dd>{+ member.since +}</dd>
+										</if>
+										
+										<if test="member.exceptions.length">
+											<dt class="heading">Throws:</dt>
+											<for each="item" in="member.exceptions">
+												<dt>
+													{+((item.type)?"<span class=\"light fixedFont\">{"+(new Link().toSymbol(item.type))+"}</span> " : "")+} <b>{+item.name+}</b>
+												</dt>
+												<dd>{+resolveLinks(item.desc)+}</dd>
+											</for>
+										</if>
+										
+										<if test="member.returns.length">
+											<dt class="heading">Returns:</dt>
+											<for each="item" in="member.returns">
+												<dd>{+((item.type)?"<span class=\"light fixedFont\">{"+(new Link().toSymbol(item.type))+"}</span> " : "")+}{+resolveLinks(item.desc)+}</dd>
+											</for>
+										</if>
+										
+										<if test="member.requires.length">
+											<dt class="heading">Requires:</dt>
+											<for each="item" in="member.requires">
+												<dd>{+ resolveLinks(item) +}</dd>
+											</for>
+										</if>
+										
+										<if test="member.see.length">
+											<dt class="heading">See:</dt>
+											<for each="item" in="member.see">
+												<dd>{+ new Link().toSymbol(item) +}</dd>
+											</for>
+										</if>
+									
+									</dl>
+								</if>
+
+								<if test="!$member_last"><div class="hr"></div></if>
+							</for>
+						</div>
+					</div>
+				</if>
+				
+	<!--
+	#### EVENT DETAILS
+	-->		
+				<if test="defined(ownEvents) && ownEvents.length">
+					<div class="details props">
+						<div class="innerProps">
+							<div class="sectionTitle">
+								Event Detail
+							</div>
+							
+							<for each="member" in="ownEvents">
+								<a name="event:{+Link.symbolNameToLinkName(member)+}"> </a>
+								
+								<div class="fixedFont heading">
+									<span class='lighter'>
+									{!
+										if (member.isPrivate) output += "&lt;private&gt; ";
+										if (member.isInner) output += "&lt;inner&gt; ";
+										if (member.isStatic) output += "&lt;static&gt; ";
+									!}
+									</span>
+									
+									<if test="member.type"><span class="light">{{+new Link().toSymbol(member.type)+}}</span></if>
+									
+									<if test="member.isStatic && member.memberOf != '_global_'"><span class="light">{+member.memberOf+}.</span></if><b>{+member.name+}</b>{+makeSignature(member.params)+}
+								</div>
+								
+								<div class="description">
+									{+resolveLinks(member.desc)+}
+									
+									<if test="member.srcFile != data.srcFile">
+										<br />
+										<i>Defined in: </i> {+new Link().toSrc(member.srcFile)+}.
+									</if>
+									
+									<if test="member.author"><br /><i>Author: </i>{+member.author+}.</if>
+								</div>
+								
+								<if test="member.example.length">
+									<for each="example" in="member.example">
+										<pre class="code">{+example+}</pre>
+									</for>
+								</if>
+								
+								<if test="member.params.length">
+									<dl class="detailList params">
+										<dt class="heading">Parameters:</dt>
+										<for each="item" in="member.params">
+											<dt>
+												{+((item.type)?"<span class=\"light fixedFont\">{"+(new Link().toSymbol(item.type))+"}</span> " : "")+}<b>{+item.name+}</b>
+												<if test="item.isOptional"><i>Optional<if test="item.defaultValue">, Default: {+item.defaultValue+}</if></i></if>
+											</dt>
+											<dd>{+ resolveLinks(item.desc) +}</dd>
+										</for>
+									</dl>
+								</if>
+								
+								<if test="member.deprecated || member.since || member.exceptions.length || member.returns.length || member.see.length">
+									<dl class="detailList nomargin">
+										<if test="member.deprecated">
+											<dt class="heading">Deprecated:</dt>
+											<dt>{+ resolveLinks(member.deprecated) +}</dt>
+										</if>
+										
+										<if test="member.since">
+											<dt class="heading">Since:</dt>
+											<dd>{+ member.since +}</dd>
+										</if>
+										
+										<if test="member.exceptions.length">
+											<dt class="heading">Throws:</dt>
+											<for each="item" in="member.exceptions">
+												<dt>
+													{+((item.type)?"<span class=\"light fixedFont\">{"+(new Link().toSymbol(item.type))+"}</span> " : "")+} <b>{+item.name+}</b>
+												</dt>
+												<dd>{+ resolveLinks(item.desc) +}</dd>
+											</for>
+										</if>
+										
+										<if test="member.returns.length">
+											<dt class="heading">Returns:</dt>
+											<for each="item" in="member.returns">
+												<dd>{+((item.type)?"<span class=\"light fixedFont\">{"+(new Link().toSymbol(item.type))+"}</span> " : "")+}{+resolveLinks(item.desc)+}</dd>
+											</for>
+										</if>
+										
+										<if test="member.requires.length">
+											<dt class="heading">Requires:</dt>
+											<for each="item" in="member.requires">
+												<dd>{+ resolveLinks(item) +}</dd>
+											</for>
+										</if>
+										
+										<if test="member.see.length">
+											<dt class="heading">See:</dt>
+											<for each="item" in="member.see">
+												<dd>{+ new Link().toSymbol(item) +}</dd>
+											</for>
+										</if>
+									</dl>
+								</if>
+								
+								<if test="!$member_last"><div class="hr"></div></if>
+							</for>
+						</div>
+					</div>
+				</if>
+			</div>
+		</div>
+	</body>
+</html>

+ 418 - 0
jsdoc_toolkit-2.3.3-beta/templates/codeview/css/default.css

@@ -0,0 +1,418 @@
+/*
+ * TABLE OF CONTENTS:
+ * - Browser reset
+ * - HTML elements
+ * - JsDoc styling
+ */
+
+
+
+
+
+
+/*
+ * BEGIN BROWSER RESET
+ */
+
+body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,p,pre,form,fieldset,input,textarea,p,blockquote,th,td {
+	margin:0;
+	padding:0
+}
+html {
+	height:100%;
+	overflow:-moz-scrollbars-vertical;
+	overflow-x:auto
+}
+table {
+	border:0;
+	border-collapse:collapse;
+	border-spacing:0
+}
+fieldset,img {
+	border:0
+}
+address,caption,cite,code,dfn,em,strong,th,var {
+	font-style:normal;
+	font-weight:normal
+}
+em,cite {
+	font-style:italic
+}
+strong {
+	font-weight:bold
+}
+ol,ul {
+	list-style:none
+}
+caption,th {
+	text-align:left
+}
+h1,h2,h3,h4,h5,h6 {
+	font-size:100%;
+	font-weight:normal;
+	margin:0;
+	padding:0
+}
+q:before,q:after {
+	content:''
+}
+abbr,acronym {
+	border:0
+}
+
+/*
+ * END BROWSER RESET
+ */
+
+
+
+
+
+
+/*
+ * HTML ELEMENTS
+ */
+
+* {
+	line-height: 1.4em;
+}
+
+html {
+	font-size: 100%;
+}
+
+body {
+	font-size: 0.75em !important;
+	padding: 15px 0;
+	background: #eee;
+	background-image: -moz-linear-gradient(left, #dddddd, #f9f9f9);
+	background-image: -webkit-gradient(linear,left bottom,right bottom,color-stop(0, #dddddd),color-stop(1, #f9f9f9));
+  }
+
+body,
+input,
+select,
+textarea {
+	color: #000;
+	font-family: Arial, Geneva, sans-serif;
+}
+
+a:link,
+a:hover,
+a:active,
+a:visited {
+	color: #19199e;
+}
+a:hover,
+a:focus {
+	color: #00f;
+	text-decoration: none;
+}
+
+p {
+	margin: 0 0 1.5em 0;
+}
+
+/*
+ * END HTML ELEMENTS
+ */
+
+
+ 
+/*
+ * BEGIN HACK
+ */
+
+div.containerMain:after,
+div.safeBox:after {
+	content:"";
+	display:block;
+	height:0;
+	clear:both;
+}
+
+/*
+ * END HACK
+ */
+
+
+
+/*
+ * BEGIN JSDOC
+ */
+
+div.index *.heading1 {
+	margin-bottom: 0.5em;
+	border-bottom: 1px solid #999999;
+	padding: 0.5em 0 0.1em 0;
+	font-family: 'Lucida Sans Unicode', 'Lucida Grande', sans-serif;
+	font-size: 1.3em;
+	letter-spacing: 1px;
+}
+ 
+div.index {
+	float: left;
+	width: 30%;
+	min-width: 100px;
+	max-width: 250px;
+}
+div.index div.menu {
+	margin: 0 15px 0 -15px;
+	-moz-border-radius: 15px;
+	-webkit-border-radius: 15px;
+	border-radius: 15px;
+  	padding: 15px 15px 15px 30px;
+	background-color: #FFFFFF;
+	background-color: rgba(255, 255, 255, 0.5);
+	-moz-box-shadow: 0px 0px 10px #c4c4c4;
+	-webkit-box-shadow: 0px 0px 10px #c4c4c4;
+	box-shadow: 0px 0px 10px #c4c4c4;
+}
+*+html div.index div.menu {
+	background-color: #FFFFFF;
+}
+* html div.index div.menu {
+	background-color: #FFFFFF;
+}
+
+div.index div.menu div {
+	text-align: left;
+}
+
+div.index div.menu a {
+	text-decoration: none;
+}
+div.index div.menu a:hover {
+	text-decoration: underline;
+}
+
+div.index ul.classList a {
+	font-family: Consolas, "Courier New", Courier, monospace;
+}
+
+div.index div.fineprint {
+  	padding: 15px 30px 15px 15px;
+	color: #777;
+	font-size: 0.9em;
+}
+div.index div.fineprint a {
+	color: #777;
+}
+
+
+
+div.content {
+	float: left;
+	width: 70%;
+	min-width: 300px;
+	max-width: 600px;
+}
+div.innerContent {
+	padding: 0 0 0 2.5em;
+}
+
+div.content ul,
+div.content ol {
+	margin-bottom: 3em;
+}
+
+div.content *.classTitle {
+	margin-bottom: 0.5em;
+	font-family: 'Lucida Sans Unicode', 'Lucida Grande', sans-serif;
+	font-size: 2.5em;
+	letter-spacing: 2px;
+}
+
+div.content *.classTitle span {
+	font-family: Consolas, "Courier New", Courier, monospace;
+}
+
+div.content p.summary {
+	font-size: 1.2em;
+}
+
+div.content ul *.classname a,
+div.content ul *.filename a {
+	font-family: Consolas, "Courier New", Courier, monospace;
+	text-decoration: none;
+	font-weight: bold;
+}
+div.content ul *.classname a:hover,
+div.content ul *.filename a:hover {
+	text-decoration: underline;
+}
+
+div.content div.props {
+	position: relative;
+	left: -10px;
+	margin-bottom: 2.5em;
+	-moz-border-radius: 5px;
+	-webkit-border-radius: 5px;
+	border-radius: 5px;
+	padding: 10px 15px 15px 15px;
+	overflow: hidden;
+	background: #fff;
+	background: -moz-linear-gradient(top, rgba(255, 255, 255, 0.7), rgba(255, 255, 255, 0.2)); /* FF3.6 */
+	background: -webkit-gradient(linear,left top,left bottom,color-stop(0, rgba(255, 255, 255, 0.7)),color-stop(1, rgba(255, 255, 255, 0.2)));
+	-moz-box-shadow: 0px 0px 10px #ccc;
+	-webkit-box-shadow: 0px 0px 5px #bbb;
+	box-shadow: 0px 0px 5px #bbb;
+}
+
+div.content div.props div.sectionTitle {
+	padding-bottom: 10px;
+	font-family: 'Lucida Sans Unicode', 'Lucida Grande', sans-serif;
+	font-size: 1.4em;
+	letter-spacing: 1px;
+}
+
+div.content div.hr {
+	margin: 0 10px 0 0;
+	height: 4em;
+}
+
+
+
+table.summaryTable {
+	position: relative;
+	left: -10px;
+	width: 100%;
+	border-collapse: collapse;
+	box-sizing: content-box;
+	-moz-box-sizing: content-box;
+	-webkit-box-sizing: content-box;
+	-ms-box-sizing: content-box;
+	-o-box-sizing: content-box;
+	-icab-box-sizing: content-box;
+	-khtml-box-sizing: content-box; 
+}
+
+table.summaryTable caption {
+	padding: 0 10px 10px 10px;
+	font-family: 'Lucida Sans Unicode', 'Lucida Grande', sans-serif;
+	font-size: 1.4em;
+	letter-spacing: 1px;
+}
+
+table.summaryTable td,
+table.summaryTable th {
+	padding: 0px 10px 10px 10px;
+	vertical-align: top;
+}
+table.summaryTable tr:last-child td {
+	padding-bottom: 0;
+}
+
+table.summaryTable th {
+	font-weight: bold;
+}
+
+table.summaryTable td.attributes {
+	width: 35%;
+	font-family: Consolas, "Courier New", Courier, monospace;
+	color: #666;
+}
+
+table.summaryTable td.nameDescription {
+	width: 65%
+}
+
+table.summaryTable td.nameDescription div.fixedFont {
+	font-weight: bold;
+}
+
+table.summaryTable div.description {
+	color: #333;
+}
+
+
+
+dl.detailList {
+	margin-top: 0.5em;
+}
+
+dl.detailList.nomargin + dl.detailList.nomargin {
+	margin-top: 0;
+}
+
+dl.detailList dt {
+	display: inline;
+	margin-right: 5px;
+	font-weight: bold;
+}
+
+dl.detailList dt:before {
+	display: block;
+	content: "";
+}
+
+dl.detailList dd {
+	display: inline;
+}
+
+dl.detailList.params dt {
+	display: block;
+}
+dl.detailList.params dd {
+	display: block;
+	padding-left: 2em;
+	padding-bottom: 0.4em;
+}
+
+
+
+
+ul.fileList li {
+	margin-bottom: 1.5em;
+}
+
+
+
+.fixedFont {
+	font-family: Consolas, "Courier New", Courier, monospace;
+}
+
+.fixedFont.heading {
+	margin-bottom: 0.5em;
+	font-size: 1.25em;
+	line-height: 1.1em
+}
+
+.fixedFont.heading + .description {
+	font-size: 1.2em;
+}
+
+.fixedFont.heading .light,
+.fixedFont.heading .lighter {
+	font-weight: bold;
+}
+
+pre.code {
+	margin: 10px 0 10px 0;
+	padding: 10px;
+	border: 1px solid #ccc;
+	-moz-border-radius: 2px;
+	-webkit-border-radius: 2px;
+	border-radius: 2px;
+	overflow: auto;
+	font-family: Consolas, "Courier New", Courier, monospace;
+	background: #eee;
+}
+
+.light {
+	color: #666;
+}
+
+.lighter {
+	color: #999;
+}
+
+.clear {
+	clear: both;
+	width: 100%;
+	min-height: 0;
+}
+
+/*
+ * END JSDOC
+ */

+ 40 - 0
jsdoc_toolkit-2.3.3-beta/templates/codeview/index.tmpl

@@ -0,0 +1,40 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+	<head>
+		<meta http-equiv="content-type" content="text/html; charset={+IO.encoding+}" />
+		<title>JsDoc Reference - Index</title>
+		<meta name="generator" content="JsDoc Toolkit" />
+		<link href="css/default.css" type="text/css" rel="stylesheet" media="all" />
+	</head>
+	
+	<body>
+		{+include("static/header.html")+}
+		
+		<div class="index">
+			<div class="menu">
+				{+publish.classesIndex+}
+			</div>
+			
+			<div class="fineprint" style="clear:both">
+				<if test="JSDOC.opt.D.copyright">&copy;{+JSDOC.opt.D.copyright+}<br /></if>
+				Generated by <a href="http://code.google.com/p/jsdoc-toolkit/" target="_blank">JsDoc Toolkit</a> {+JSDOC.VERSION+} on {+new Date()+}<br />
+				HTML template: <a href="http://www.thebrightlines.com/2010/05/06/new-template-for-jsdoctoolkit-codeview/" target="_blank">Codeview</a>
+			</div>
+		</div>
+		
+		<div class="content">
+			<div class="innerContent">
+				<h1 class="classTitle">Class Index</h1>
+				
+				<ul>
+					<for each="thisClass" in="data">
+						<li>
+							<h2 class="classname">{+(new Link().toSymbol(thisClass.alias))+}</h2>
+							<p>{+resolveLinks(summarize(thisClass.classDesc))+}</p>
+						</li>
+					</for>
+				</ul>
+			</div>
+		</div>
+	</body>
+</html>

+ 206 - 0
jsdoc_toolkit-2.3.3-beta/templates/codeview/publish.js

@@ -0,0 +1,206 @@
+/** Called automatically by JsDoc Toolkit. */
+function publish(symbolSet) {
+	publish.conf = {  // trailing slash expected for dirs
+		ext:         ".html",
+		outDir:      JSDOC.opt.d || SYS.pwd+"../out/jsdoc/",
+		templatesDir: JSDOC.opt.t || SYS.pwd+"../templates/jsdoc/",
+		cssDir:      "css/",
+		symbolsDir:  "symbols/",
+		srcDir:      "symbols/src/"
+	};
+	
+	// is source output is suppressed, just display the links to the source file
+	if (JSDOC.opt.s && defined(Link) && Link.prototype._makeSrcLink) {
+		Link.prototype._makeSrcLink = function(srcFilePath) {
+			return "&lt;"+srcFilePath+"&gt;";
+		}
+	}
+	
+	// create the folders and subfolders to hold the output
+	IO.mkPath((publish.conf.outDir+publish.conf.cssDir));
+	IO.mkPath((publish.conf.outDir+"symbols/src").split("/"));
+		
+	// used to allow Link to check the details of things being linked to
+	Link.symbolSet = symbolSet;
+
+	// create the required templates
+	try {
+		//var styleTemplate = new JSDOC.JsPlate(publish.conf.templatesDir+publish.conf.cssDir+"default.css");
+		var classTemplate = new JSDOC.JsPlate(publish.conf.templatesDir+"class.tmpl");
+		var classesTemplate = new JSDOC.JsPlate(publish.conf.templatesDir+"allclasses.tmpl");
+	}
+	catch(e) {
+		print("Couldn't create the required templates: "+e);
+		quit();
+	}
+	
+	// some utility filters
+	function hasNoParent($) {return ($.memberOf == "")}
+	function isaFile($) {return ($.is("FILE"))}
+	function isaClass($) {return ($.is("CONSTRUCTOR") || $.isNamespace)}
+	
+	// get an array version of the symbolset, useful for filtering
+	var symbols = symbolSet.toArray();
+	
+	// create the hilited source code files
+	var files = JSDOC.opt.srcFiles;
+ 	for (var i = 0, l = files.length; i < l; i++) {
+ 		var file = files[i];
+ 		var srcDir = publish.conf.outDir + "symbols/src/";
+		makeSrcFile(file, srcDir);
+ 	}
+ 	
+ 	// get a list of all the classes in the symbolset
+ 	var classes = symbols.filter(isaClass).sort(makeSortby("alias"));
+	
+	// create a filemap in which outfiles must be to be named uniquely, ignoring case
+	if (JSDOC.opt.u) {
+		var filemapCounts = {};
+		Link.filemap = {};
+		for (var i = 0, l = classes.length; i < l; i++) {
+			var lcAlias = classes[i].alias.toLowerCase();
+			
+			if (!filemapCounts[lcAlias]) filemapCounts[lcAlias] = 1;
+			else filemapCounts[lcAlias]++;
+			
+			Link.filemap[classes[i].alias] = 
+				(filemapCounts[lcAlias] > 1)?
+				lcAlias+"_"+filemapCounts[lcAlias] : lcAlias;
+		}
+	}
+	
+	// create a class index, displayed in the left-hand column of every class page
+	Link.base = "../";
+ 	publish.classesIndex = classesTemplate.process(classes); // kept in memory
+	
+	// create each of the class pages
+	for (var i = 0, l = classes.length; i < l; i++) {
+		var symbol = classes[i];
+		
+		symbol.events = symbol.getEvents();   // 1 order matters
+		symbol.methods = symbol.getMethods(); // 2
+		
+		var output = "";
+		output = classTemplate.process(symbol);
+		
+		IO.saveFile(publish.conf.outDir+"symbols/", ((JSDOC.opt.u)? Link.filemap[symbol.alias] : symbol.alias) + publish.conf.ext, output);
+	}
+	
+	// regenerate the index with different relative links, used in the index pages
+	Link.base = "";
+	publish.classesIndex = classesTemplate.process(classes);
+	
+	// create the class index page
+	try {
+		var classesindexTemplate = new JSDOC.JsPlate(publish.conf.templatesDir+"index.tmpl");
+	}
+	catch(e) { print(e.message); quit(); }
+	
+	var classesIndex = classesindexTemplate.process(classes);
+	IO.saveFile(publish.conf.outDir, "index"+publish.conf.ext, classesIndex);
+	classesindexTemplate = classesIndex = classes = null;
+	
+	// create the file index page
+	try {
+		var fileindexTemplate = new JSDOC.JsPlate(publish.conf.templatesDir+"allfiles.tmpl");
+	}
+	catch(e) { print(e.message); quit(); }
+	
+	var documentedFiles = symbols.filter(isaFile); // files that have file-level docs
+	var allFiles = []; // not all files have file-level docs, but we need to list every one
+	
+	for (var i = 0; i < files.length; i++) {
+		allFiles.push(new JSDOC.Symbol(files[i], [], "FILE", new JSDOC.DocComment("/** */")));
+	}
+	
+	for (var i = 0; i < documentedFiles.length; i++) {
+		var offset = files.indexOf(documentedFiles[i].alias);
+		allFiles[offset] = documentedFiles[i];
+	}
+		
+	allFiles = allFiles.sort(makeSortby("name"));
+
+	// output the file index page
+	var filesIndex = fileindexTemplate.process(allFiles);
+	IO.saveFile(publish.conf.outDir, "files"+publish.conf.ext, filesIndex);
+	fileindexTemplate = filesIndex = files = null;
+	
+	// copy files
+	IO.copyFile(publish.conf.templatesDir+"/"+publish.conf.cssDir+"default.css", publish.conf.outDir+"/"+publish.conf.cssDir);
+}
+
+
+/** Just the first sentence (up to a full stop). Should not break on dotted variable names. */
+function summarize(desc) {
+	if (typeof desc != "undefined")
+		return desc.match(/([\w\W]+?\.)[^a-z0-9_$]/i)? RegExp.$1 : desc;
+}
+
+/** Make a symbol sorter by some attribute. */
+function makeSortby(attribute) {
+	return function(a, b) {
+		if (a[attribute] != undefined && b[attribute] != undefined) {
+			a = a[attribute].toLowerCase();
+			b = b[attribute].toLowerCase();
+			if (a < b) return -1;
+			if (a > b) return 1;
+			return 0;
+		}
+	}
+}
+
+/** Pull in the contents of an external file at the given path. */
+function include(path) {
+	var path = publish.conf.templatesDir+path;
+	return IO.readFile(path);
+}
+
+/** Turn a raw source file into a code-hilited page in the docs. */
+function makeSrcFile(path, srcDir, name) {
+	if (JSDOC.opt.s) return;
+	
+	if (!name) {
+		name = path.replace(/\.\.?[\\\/]/g, "").replace(/[\\\/]/g, "_");
+		name = name.replace(/\:/g, "_");
+	}
+	
+	var src = {path: path, name:name, charset: IO.encoding, hilited: ""};
+	
+	if (defined(JSDOC.PluginManager)) {
+		JSDOC.PluginManager.run("onPublishSrc", src);
+	}
+
+	if (src.hilited) {
+		IO.saveFile(srcDir, name+publish.conf.ext, src.hilited);
+	}
+}
+
+/** Build output for displaying function parameters. */
+function makeSignature(params) {
+	if (!params) return "()";
+	var signature = "("
+	+
+	params.filter(
+		function($) {
+			return $.name.indexOf(".") == -1; // don't show config params in signature
+		}
+	).map(
+		function($) {
+			return $.name;
+		}
+	).join(", ")
+	+
+	")";
+	return signature;
+}
+
+/** Find symbol {@link ...} strings in text and turn into html links */
+function resolveLinks(str, from) {
+	str = str.replace(/\{@link ([^} ]+) ?\}/gi,
+		function(match, symbolName) {
+			return new Link().toSymbol(symbolName);
+		}
+	);
+	
+	return str;
+}

+ 2 - 0
jsdoc_toolkit-2.3.3-beta/templates/codeview/static/header.html

@@ -0,0 +1,2 @@
+<div id="header">
+</div>

+ 19 - 0
jsdoc_toolkit-2.3.3-beta/templates/codeview/static/index.html

@@ -0,0 +1,19 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN"
+        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+	<meta http-equiv="content-type" content="text/html; charset=utf-8" />
+	<title>Generated Javascript Documentation</title>
+</head>
+<frameset cols="20%,80%">
+	<frame src="allclasses-frame.html" name="packageFrame" />
+	<frame src="splash.html" name="classFrame" />
+	<noframes>
+		<body>
+		<p>
+		This document is designed to be viewed using the frames feature. If you see this message, you are using a non-frame-capable web client.
+		</p>
+		</body>
+	</noframes>
+</frameset>
+</html>

+ 35 - 0
jsdoc_toolkit-2.3.3-beta/templates/codeview/symbol.tmpl

@@ -0,0 +1,35 @@
+<symbol alias="{+data.alias+}">
+	<name>{+data.name+}</name>
+	<memberOf>{+data.memberOf+}</memberOf>
+	<isStatic>{+data.isStatic+}</isStatic>
+	<isa>{+data.isa+}</isa>
+	<desc>{+data.desc+}</desc>
+	<classDesc>{+data.classDesc+}</classDesc>
+	
+	<methods><for each="method" in="data.methods">
+		<method>
+			<name>{+method.name+}</name>
+			<memberOf>{+method.memberOf+}</memberOf>
+			<isStatic>{+method.isStatic+}</isStatic>
+			<desc>{+method.desc+}</desc>
+			<params><for each="param" in="method.params">
+				<param>
+					<type>{+param.type+}</type>
+					<name>{+param.name+}</name>
+					<desc>{+param.desc+}</desc>
+					<defaultValue>{+param.defaultValue+}</defaultValue>
+				</param></for>
+			</params>
+		</method></for>
+	</methods>
+	
+	<properties><for each="property" in="data.properties">
+		<property>
+			<name>{+property.name+}</name>
+			<memberOf>{+property.memberOf+}</memberOf>
+			<isStatic>{+property.isStatic+}</isStatic>
+			<desc>{+property.desc+}</desc>
+			<type>{+property.type+}</type>
+		</property></for>
+	</properties>
+</symbol>