You are viewing a plain text version of this content. The canonical link for it is here.
Posted to solr-commits@lucene.apache.org by ry...@apache.org on 2008/11/17 23:42:49 UTC

svn commit: r718422 [8/9] - in /lucene/solr/trunk: ./ contrib/javascript/ contrib/javascript/example/ contrib/javascript/example/reuters/ contrib/javascript/example/reuters/images/ contrib/javascript/example/testsolr/ contrib/javascript/example/testsol...

Added: lucene/solr/trunk/contrib/javascript/lib/jsdoc/jsdoc-toolkit/templates/jsdoc/class.tmpl
URL: http://svn.apache.org/viewvc/lucene/solr/trunk/contrib/javascript/lib/jsdoc/jsdoc-toolkit/templates/jsdoc/class.tmpl?rev=718422&view=auto
==============================================================================
--- lucene/solr/trunk/contrib/javascript/lib/jsdoc/jsdoc-toolkit/templates/jsdoc/class.tmpl (added)
+++ lucene/solr/trunk/contrib/javascript/lib/jsdoc/jsdoc-toolkit/templates/jsdoc/class.tmpl Mon Nov 17 14:42:45 2008
@@ -0,0 +1,487 @@
+<!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>
+
+		<style type="text/css">
+			{+include("static/default.css")+}
+		</style>
+	</head>
+
+	<body>
+<!-- ============================== header ================================= -->	
+		<!-- begin static/header.html -->
+		{+include("static/header.html")+}
+		<!-- end static/header.html -->
+
+<!-- ============================== classes index ============================ -->
+		<div id="index">
+			<!-- begin publish.classesIndex -->
+			{+publish.classesIndex+}
+			<!-- end publish.classesIndex -->
+		</div>
+		
+		<div id="content">
+<!-- ============================== class title ============================ -->
+			<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+}{+data.alias+}
+			</h1>
+
+<!-- ============================== class summary ========================== -->			
+			<p class="description">
+				<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 /><i>Defined in: </i> {+new Link().toSrc(data.srcFile)+}.
+				</if>
+			</p>
+
+<!-- ============================== constructor summary ==================== -->			
+			<if test="!data.isBuiltin() && (data.isNamespace || data.is('CONSTRUCTOR'))">
+			<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>
+			</if>
+
+<!-- ============================== properties summary ===================== -->
+			<if test="data.properties.length">
+				{! var ownProperties = data.properties.filter(function($){return $.memberOf == data.alias && !$.isNamespace}).sort(makeSortby("name")); !}
+				<if test="ownProperties.length">
+				<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>
+				</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">
+				<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)+}</b>{+makeSignature(member.params)+}
+								</div>
+								<div class="description">{+resolveLinks(summarize(member.desc))+}</div>
+							</td>
+						</tr>
+					</for>
+					</tbody>
+				</table>
+				</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>
+
+<!-- ============================== constructor details ==================== -->		
+			<if test="!data.isBuiltin() && (data.isNamespace || data.is('CONSTRUCTOR'))">
+			<div class="details"><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">
+						<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">
+						<dl class="detailList">
+						<dt class="heading">Deprecated:</dt>
+						<dt>
+							{+resolveLinks(data.deprecated)+}
+						</dt>
+						</dl>
+					</if>
+					<if test="data.since">
+						<dl class="detailList">
+						<dt class="heading">Since:</dt>
+							<dd>{+ data.since +}</dd>
+						</dl>
+					</if>
+					<if test="data.exceptions.length">
+						<dl class="detailList">
+						<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>
+						</dl>
+					</if>
+					<if test="data.returns.length">
+						<dl class="detailList">
+						<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>
+						</dl>
+					</if>
+					<if test="data.requires.length">
+						<dl class="detailList">
+						<dt class="heading">Requires:</dt>
+						<for each="item" in="data.requires">
+							<dd>{+ resolveLinks(item) +}</dd>
+						</for>
+						</dl>
+					</if>
+					<if test="data.see.length">
+						<dl class="detailList">
+						<dt class="heading">See:</dt>
+						<for each="item" in="data.see">
+							<dd>{+ new Link().toSymbol(item) +}</dd>
+						</for>
+						</dl>
+					</if>
+
+			</div>
+			</if>
+
+<!-- ============================== field details ========================== -->		
+			<if test="defined(ownProperties) && ownProperties.length">
+				<div class="sectionTitle">
+					Field Detail
+				</div>
+				<for each="member" in="ownProperties">
+					<a name="{+Link.symbolNameToLinkName(member)+}"> </a>
+					<div class="fixedFont">{!
+						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; ";
+					!}
+					
+					<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">
+							<dl class="detailList">
+							<dt class="heading">Deprecated:</dt>
+							<dt>
+								{+ member.deprecated +}
+							</dt>
+							</dl>
+						</if>
+						<if test="member.since">
+							<dl class="detailList">
+							<dt class="heading">Since:</dt>
+								<dd>{+ member.since +}</dd>
+							</dl>
+						</if>
+						<if test="member.see.length">
+							<dl class="detailList">
+							<dt class="heading">See:</dt>
+							<for each="item" in="member.see">
+							<dd>{+ new Link().toSymbol(item) +}</dd>
+							</for>
+							</dl>
+						</if>
+						<if test="member.defaultValue">
+							<dl class="detailList">
+							<dt class="heading">Default Value:</dt>
+							<dd>
+								{+resolveLinks(member.defaultValue)+}
+							</dd>
+							</dl>
+						</if>
+
+					<if test="!$member_last"><hr /></if>
+				</for>
+			</if>
+
+<!-- ============================== method details ========================= -->		
+			<if test="defined(ownMethods) && ownMethods.length">
+				<div class="sectionTitle">
+					Method Detail
+				</div>
+				<for each="member" in="ownMethods">
+					<a name="{+Link.symbolNameToLinkName(member)+}"> </a>
+					<div class="fixedFont">{!
+						if (member.isPrivate) output += "&lt;private&gt; ";
+						if (member.isInner) output += "&lt;inner&gt; ";
+						if (member.isStatic) output += "&lt;static&gt; ";
+					!}
+					
+					<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">
+							<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">
+							<dl class="detailList">
+							<dt class="heading">Deprecated:</dt>
+							<dt>
+								{+member.deprecated+}
+							</dt>
+							</dl>
+						</if>
+						<if test="member.since">
+							<dl class="detailList">
+							<dt class="heading">Since:</dt>
+								<dd>{+ member.since +}</dd>
+							</dl>
+							</dl>
+						</if>
+						<if test="member.exceptions.length">
+							<dl class="detailList">
+							<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>
+							</dl>
+						</if>
+						<if test="member.returns.length">
+							<dl class="detailList">
+							<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>
+							</dl>
+						</if>
+						<if test="member.requires.length">
+							<dl class="detailList">
+							<dt class="heading">Requires:</dt>
+							<for each="item" in="member.requires">
+								<dd>{+ resolveLinks(item) +}</dd>
+							</for>
+							</dl>
+						</if>
+						<if test="member.see.length">
+							<dl class="detailList">
+							<dt class="heading">See:</dt>
+							<for each="item" in="member.see">
+								<dd>{+ new Link().toSymbol(item) +}</dd>
+							</for>
+							</dl>
+						</if>
+
+					<if test="!$member_last"><hr /></if>
+				</for>
+			</if>
+			
+			<hr />
+		</div>
+		
+<!-- ============================== footer ================================= -->
+		<div class="fineprint" style="clear:both">
+			<if test="JSDOC.opt.D.copyright">&copy;{+JSDOC.opt.D.copyright+}<br /></if>
+			Documentation generated by <a href="http://www.jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a> {+JSDOC.VERSION+} on {+new Date()+}
+		</div>
+	</body>
+</html>

Added: lucene/solr/trunk/contrib/javascript/lib/jsdoc/jsdoc-toolkit/templates/jsdoc/index.tmpl
URL: http://svn.apache.org/viewvc/lucene/solr/trunk/contrib/javascript/lib/jsdoc/jsdoc-toolkit/templates/jsdoc/index.tmpl?rev=718422&view=auto
==============================================================================
--- lucene/solr/trunk/contrib/javascript/lib/jsdoc/jsdoc-toolkit/templates/jsdoc/index.tmpl (added)
+++ lucene/solr/trunk/contrib/javascript/lib/jsdoc/jsdoc-toolkit/templates/jsdoc/index.tmpl Mon Nov 17 14:42:45 2008
@@ -0,0 +1,39 @@
+<!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" />
+		
+		<style type="text/css">
+		{+include("static/default.css")+}
+		</style>
+	</head>
+	
+	<body>
+		{+include("static/header.html")+}
+		
+		<div id="index">
+			{+publish.classesIndex+}
+		</div>
+		
+		<div id="content">
+			<h1 class="classTitle">Class Index</h1>
+			
+			<for each="thisClass" in="data">
+			<div>
+				<h2>{+(new Link().toSymbol(thisClass.alias))+}</h2>
+				{+resolveLinks(summarize(thisClass.classDesc))+}
+			</div>
+			<hr />
+			</for>
+			
+		</div>
+		<div class="fineprint" style="clear:both">
+			<if test="JSDOC.opt.D.copyright">&copy;{+JSDOC.opt.D.copyright+}<br /></if>
+			Documentation generated by <a href="http://www.jsdoctoolkit.org/" target="_blankt">JsDoc Toolkit</a> {+JSDOC.VERSION+} on {+new Date()+}
+		</div>
+	</body>
+</html>
\ No newline at end of file

Added: lucene/solr/trunk/contrib/javascript/lib/jsdoc/jsdoc-toolkit/templates/jsdoc/publish.js
URL: http://svn.apache.org/viewvc/lucene/solr/trunk/contrib/javascript/lib/jsdoc/jsdoc-toolkit/templates/jsdoc/publish.js?rev=718422&view=auto
==============================================================================
--- lucene/solr/trunk/contrib/javascript/lib/jsdoc/jsdoc-toolkit/templates/jsdoc/publish.js (added)
+++ lucene/solr/trunk/contrib/javascript/lib/jsdoc/jsdoc-toolkit/templates/jsdoc/publish.js Mon Nov 17 14:42:45 2008
@@ -0,0 +1,166 @@
+function publish(symbolSet) {
+	publish.conf = {  // trailing slash expected for dirs
+		ext: ".html",
+		outDir: JSDOC.opt.d || SYS.pwd+"../out/jsdoc/",
+		templatesDir: SYS.pwd+"../templates/jsdoc/",
+		symbolsDir: "symbols/",
+		srcDir: "symbols/src/"
+	};
+	
+	
+	if (JSDOC.opt.s && defined(Link) && Link.prototype._makeSrcLink) {
+		Link.prototype._makeSrcLink = function(srcFilePath) {
+			return "&lt;"+srcFilePath+"&gt;";
+		}
+	}
+	
+	IO.mkPath((publish.conf.outDir+"symbols/src").split("/"));
+		
+	// used to check the details of things being linked to
+	Link.symbolSet = symbolSet;
+
+	try {
+		var classTemplate = new JSDOC.JsPlate(publish.conf.templatesDir+"class.tmpl");
+		var classesTemplate = new JSDOC.JsPlate(publish.conf.templatesDir+"allclasses.tmpl");
+	}
+	catch(e) {
+		print(e.message);
+		quit();
+	}
+	
+	// filters
+	function hasNoParent($) {return ($.memberOf == "")}
+	function isaFile($) {return ($.is("FILE"))}
+	function isaClass($) {return ($.is("CONSTRUCTOR") || $.isNamespace)}
+	
+	var symbols = symbolSet.toArray();
+	
+	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);
+ 	}
+ 	
+ 	var classes = symbols.filter(isaClass).sort(makeSortby("alias"));
+	
+	Link.base = "../";
+ 	publish.classesIndex = classesTemplate.process(classes); // kept in memory
+	
+	for (var i = 0, l = classes.length; i < l; i++) {
+		var symbol = classes[i];
+		var output = "";
+		output = classTemplate.process(symbol);
+		
+		IO.saveFile(publish.conf.outDir+"symbols/", symbol.alias+publish.conf.ext, output);
+	}
+	
+	// regenrate the index with different relative links
+	Link.base = "";
+	publish.classesIndex = classesTemplate.process(classes);
+	
+	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;
+	
+	try {
+		var fileindexTemplate = new JSDOC.JsPlate(publish.conf.templatesDir+"allfiles.tmpl");
+	}
+	catch(e) { print(e.message); quit(); }
+	
+	var documentedFiles = symbols.filter(isaFile);
+	var allFiles = [];
+	
+	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"));
+
+	var filesIndex = fileindexTemplate.process(allFiles);
+	IO.saveFile(publish.conf.outDir, "files"+publish.conf.ext, filesIndex);
+	fileindexTemplate = filesIndex = files = null;
+}
+
+
+/** Just the first sentence. */
+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;
+		}
+	}
+}
+
+function include(path) {
+	var path = publish.conf.templatesDir+path;
+	return IO.readFile(path);
+}
+
+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);
+	}
+}
+
+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;
+}
\ No newline at end of file

Added: lucene/solr/trunk/contrib/javascript/lib/jsdoc/jsdoc-toolkit/templates/jsdoc/static/default.css
URL: http://svn.apache.org/viewvc/lucene/solr/trunk/contrib/javascript/lib/jsdoc/jsdoc-toolkit/templates/jsdoc/static/default.css?rev=718422&view=auto
==============================================================================
--- lucene/solr/trunk/contrib/javascript/lib/jsdoc/jsdoc-toolkit/templates/jsdoc/static/default.css (added)
+++ lucene/solr/trunk/contrib/javascript/lib/jsdoc/jsdoc-toolkit/templates/jsdoc/static/default.css Mon Nov 17 14:42:45 2008
@@ -0,0 +1,162 @@
+/* default.css */
+body
+{
+	font: 12px "Lucida Grande", Tahoma, Arial, Helvetica, sans-serif;
+	width: 800px;
+}
+
+.header
+{
+	clear: both;
+	background-color: #ccc;
+	padding: 8px;
+}
+
+h1
+{
+	font-size: 150%;
+	font-weight: bold;
+	padding: 0;
+	margin: 1em 0 0 .3em;
+}
+
+hr
+{
+	border: none 0;
+	border-top: 1px solid #7F8FB1;
+	height: 1px;
+}
+
+pre.code
+{
+	display: block;
+	padding: 8px;
+	border: 1px dashed #ccc;
+}
+
+#index
+{
+	margin-top: 24px;
+	float: left;
+	width: 160px;
+	position: absolute;
+	left: 8px;
+	background-color: #F3F3F3;
+	padding: 8px;
+}
+
+#content
+{
+	margin-left: 190px;
+	width: 600px;
+}
+
+.classList
+{
+	list-style-type: none;
+	padding: 0;
+	margin: 0 0 0 8px;
+	font-family: arial, sans-serif;
+	font-size: 1em;
+	overflow: auto;
+}
+
+.classList li
+{
+	padding: 0;
+	margin: 0 0 8px 0;
+}
+
+.summaryTable { width: 100%; }
+
+h1.classTitle
+{
+	font-size:170%;
+	line-height:130%;
+}
+
+h2 { font-size: 110%; }
+caption, div.sectionTitle
+{
+	background-color: #7F8FB1;
+	color: #fff;
+	font-size:130%;
+	text-align: left;
+	padding: 2px 6px 2px 6px;
+	border: 1px #7F8FB1 solid;
+}
+
+div.sectionTitle { margin-bottom: 8px; }
+.summaryTable thead { display: none; }
+
+.summaryTable td
+{
+	vertical-align: top;
+	padding: 4px;
+	border-bottom: 1px #7F8FB1 solid;
+	border-right: 1px #7F8FB1 solid;
+}
+
+/*col#summaryAttributes {}*/
+.summaryTable td.attributes
+{
+	border-left: 1px #7F8FB1 solid;
+	width: 140px;
+	text-align: right;
+}
+
+td.attributes, .fixedFont
+{
+	line-height: 15px;
+	color: #002EBE;
+	font-family: "Courier New",Courier,monospace;
+	font-size: 13px;
+}
+
+.summaryTable td.nameDescription
+{
+	text-align: left;
+	font-size: 13px;
+	line-height: 15px;
+}
+
+.summaryTable td.nameDescription, .description
+{
+	line-height: 15px;
+	padding: 4px;
+	padding-left: 4px;
+}
+
+.summaryTable { margin-bottom: 8px; }
+
+ul.inheritsList
+{
+	list-style: square;
+	margin-left: 20px;
+	padding-left: 0;
+}
+
+.detailList {
+	margin-left: 20px; 
+	line-height: 15px;
+}
+.detailList dt { margin-left: 20px; }
+
+.detailList .heading
+{
+	font-weight: bold;
+	padding-bottom: 6px;
+	margin-left: 0;
+}
+
+.light, td.attributes, .light a:link, .light a:visited
+{
+	color: #777;
+	font-style: italic;
+}
+
+.fineprint
+{
+	text-align: right;
+	font-size: 10px;
+}
\ No newline at end of file

Added: lucene/solr/trunk/contrib/javascript/lib/jsdoc/jsdoc-toolkit/templates/jsdoc/static/header.html
URL: http://svn.apache.org/viewvc/lucene/solr/trunk/contrib/javascript/lib/jsdoc/jsdoc-toolkit/templates/jsdoc/static/header.html?rev=718422&view=auto
==============================================================================
--- lucene/solr/trunk/contrib/javascript/lib/jsdoc/jsdoc-toolkit/templates/jsdoc/static/header.html (added)
+++ lucene/solr/trunk/contrib/javascript/lib/jsdoc/jsdoc-toolkit/templates/jsdoc/static/header.html Mon Nov 17 14:42:45 2008
@@ -0,0 +1,2 @@
+<div id="header">
+</div>
\ No newline at end of file

Added: lucene/solr/trunk/contrib/javascript/lib/jsdoc/jsdoc-toolkit/templates/jsdoc/static/index.html
URL: http://svn.apache.org/viewvc/lucene/solr/trunk/contrib/javascript/lib/jsdoc/jsdoc-toolkit/templates/jsdoc/static/index.html?rev=718422&view=auto
==============================================================================
--- lucene/solr/trunk/contrib/javascript/lib/jsdoc/jsdoc-toolkit/templates/jsdoc/static/index.html (added)
+++ lucene/solr/trunk/contrib/javascript/lib/jsdoc/jsdoc-toolkit/templates/jsdoc/static/index.html Mon Nov 17 14:42:45 2008
@@ -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>
\ No newline at end of file

Added: lucene/solr/trunk/contrib/javascript/lib/jsdoc/jsdoc-toolkit/templates/jsdoc/symbol.tmpl
URL: http://svn.apache.org/viewvc/lucene/solr/trunk/contrib/javascript/lib/jsdoc/jsdoc-toolkit/templates/jsdoc/symbol.tmpl?rev=718422&view=auto
==============================================================================
--- lucene/solr/trunk/contrib/javascript/lib/jsdoc/jsdoc-toolkit/templates/jsdoc/symbol.tmpl (added)
+++ lucene/solr/trunk/contrib/javascript/lib/jsdoc/jsdoc-toolkit/templates/jsdoc/symbol.tmpl Mon Nov 17 14:42:45 2008
@@ -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>

Added: lucene/solr/trunk/contrib/javascript/lib/jsdoc/jsdoc-toolkit/templates/solrjs/allclasses.tmpl
URL: http://svn.apache.org/viewvc/lucene/solr/trunk/contrib/javascript/lib/jsdoc/jsdoc-toolkit/templates/solrjs/allclasses.tmpl?rev=718422&view=auto
==============================================================================
--- lucene/solr/trunk/contrib/javascript/lib/jsdoc/jsdoc-toolkit/templates/solrjs/allclasses.tmpl (added)
+++ lucene/solr/trunk/contrib/javascript/lib/jsdoc/jsdoc-toolkit/templates/solrjs/allclasses.tmpl Mon Nov 17 14:42:45 2008
@@ -0,0 +1,17 @@
+<div align="center">{+new Link().toFile("index.html").withText("Class Index")+}
+| {+new Link().toFile("files.html").withText("File Index")+}</div>
+<hr />
+<h2>Classes</h2>
+<ul class="classList">
+	<for each="thisClass" in="data">
+	<li>{!
+		if (thisClass.alias == "_global_") {
+			output += "<i>"+new Link().toClass(thisClass.alias)+"</i>";
+		}
+		else {
+			output += new Link().toClass(thisClass.alias);
+		}
+	!}</li>
+	</for>
+</ul>
+<hr />
\ No newline at end of file

Added: lucene/solr/trunk/contrib/javascript/lib/jsdoc/jsdoc-toolkit/templates/solrjs/allfiles.tmpl
URL: http://svn.apache.org/viewvc/lucene/solr/trunk/contrib/javascript/lib/jsdoc/jsdoc-toolkit/templates/solrjs/allfiles.tmpl?rev=718422&view=auto
==============================================================================
--- lucene/solr/trunk/contrib/javascript/lib/jsdoc/jsdoc-toolkit/templates/solrjs/allfiles.tmpl (added)
+++ lucene/solr/trunk/contrib/javascript/lib/jsdoc/jsdoc-toolkit/templates/solrjs/allfiles.tmpl Mon Nov 17 14:42:45 2008
@@ -0,0 +1,56 @@
+<!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" />
+		
+		<style type="text/css">
+		{+include("static/default.css")+}
+		</style>
+	</head>
+	
+	<body>
+		{+include("static/header.html")+}
+		
+		<div id="index">
+			{+publish.classesIndex+}
+		</div>
+		
+		<div id="content">
+			<h1 class="classTitle">File Index</h1>
+			
+			<for each="item" in="data">
+			<div>
+				<h2>{+new Link().toSrc(item.alias).withText(item.name)+}</h2>
+				<if test="item.desc">{+resolveLinks(summarize(item.desc))+}</if>
+				<dl>
+					<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>
+			</div>
+			<hr />
+			</for>
+			
+		</div>
+		<div class="fineprint" style="clear:both">
+			<if test="JSDOC.opt.D.copyright">&copy;{+JSDOC.opt.D.copyright+}<br /></if>
+			Documentation generated by <a href="http://www.jsdoctoolkit.org/" target="_blankt">JsDoc Toolkit</a> {+JSDOC.VERSION+} on {+new Date()+}
+		</div>
+	</body>
+</html>
\ No newline at end of file

Added: lucene/solr/trunk/contrib/javascript/lib/jsdoc/jsdoc-toolkit/templates/solrjs/class.tmpl
URL: http://svn.apache.org/viewvc/lucene/solr/trunk/contrib/javascript/lib/jsdoc/jsdoc-toolkit/templates/solrjs/class.tmpl?rev=718422&view=auto
==============================================================================
--- lucene/solr/trunk/contrib/javascript/lib/jsdoc/jsdoc-toolkit/templates/solrjs/class.tmpl (added)
+++ lucene/solr/trunk/contrib/javascript/lib/jsdoc/jsdoc-toolkit/templates/solrjs/class.tmpl Mon Nov 17 14:42:45 2008
@@ -0,0 +1,487 @@
+<!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>
+
+		<style type="text/css">
+			{+include("static/default.css")+}
+		</style>
+	</head>
+
+	<body>
+<!-- ============================== header ================================= -->	
+		<!-- begin static/header.html -->
+		{+include("static/header.html")+}
+		<!-- end static/header.html -->
+
+<!-- ============================== classes index ============================ -->
+		<div id="index">
+			<!-- begin publish.classesIndex -->
+			{+publish.classesIndex+}
+			<!-- end publish.classesIndex -->
+		</div>
+		
+		<div id="content">
+<!-- ============================== class title ============================ -->
+			<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+}{+data.alias+}
+			</h1>
+
+<!-- ============================== class summary ========================== -->			
+			<p class="description">
+				<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 /><i>Defined in: </i> {+new Link().toSrc(data.srcFile)+}.
+				</if>
+			</p>
+
+<!-- ============================== constructor summary ==================== -->			
+			<if test="!data.isBuiltin() && (data.isNamespace || data.is('CONSTRUCTOR'))">
+			<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>
+			</if>
+
+<!-- ============================== properties summary ===================== -->
+			<if test="data.properties.length">
+				{! var ownProperties = data.properties.filter(function($){return $.memberOf == data.alias && !$.isNamespace}).sort(makeSortby("name")); !}
+				<if test="ownProperties.length">
+				<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>
+				</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">
+				<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)+}</b>{+makeSignature(member.params)+}
+								</div>
+								<div class="description">{+resolveLinks(summarize(member.desc))+}</div>
+							</td>
+						</tr>
+					</for>
+					</tbody>
+				</table>
+				</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>
+
+<!-- ============================== constructor details ==================== -->		
+			<if test="!data.isBuiltin() && (data.isNamespace || data.is('CONSTRUCTOR'))">
+			<div class="details"><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">
+						<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">
+						<dl class="detailList">
+						<dt class="heading">Deprecated:</dt>
+						<dt>
+							{+resolveLinks(data.deprecated)+}
+						</dt>
+						</dl>
+					</if>
+					<if test="data.since">
+						<dl class="detailList">
+						<dt class="heading">Since:</dt>
+							<dd>{+ data.since +}</dd>
+						</dl>
+					</if>
+					<if test="data.exceptions.length">
+						<dl class="detailList">
+						<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>
+						</dl>
+					</if>
+					<if test="data.returns.length">
+						<dl class="detailList">
+						<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>
+						</dl>
+					</if>
+					<if test="data.requires.length">
+						<dl class="detailList">
+						<dt class="heading">Requires:</dt>
+						<for each="item" in="data.requires">
+							<dd>{+ resolveLinks(item) +}</dd>
+						</for>
+						</dl>
+					</if>
+					<if test="data.see.length">
+						<dl class="detailList">
+						<dt class="heading">See:</dt>
+						<for each="item" in="data.see">
+							<dd>{+ new Link().toSymbol(item) +}</dd>
+						</for>
+						</dl>
+					</if>
+
+			</div>
+			</if>
+
+<!-- ============================== field details ========================== -->		
+			<if test="defined(ownProperties) && ownProperties.length">
+				<div class="sectionTitle">
+					Field Detail
+				</div>
+				<for each="member" in="ownProperties">
+					<a name="{+Link.symbolNameToLinkName(member)+}"> </a>
+					<div class="fixedFont">{!
+						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; ";
+					!}
+					
+					<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">
+							<dl class="detailList">
+							<dt class="heading">Deprecated:</dt>
+							<dt>
+								{+ member.deprecated +}
+							</dt>
+							</dl>
+						</if>
+						<if test="member.since">
+							<dl class="detailList">
+							<dt class="heading">Since:</dt>
+								<dd>{+ member.since +}</dd>
+							</dl>
+						</if>
+						<if test="member.see.length">
+							<dl class="detailList">
+							<dt class="heading">See:</dt>
+							<for each="item" in="member.see">
+							<dd>{+ new Link().toSymbol(item) +}</dd>
+							</for>
+							</dl>
+						</if>
+						<if test="member.defaultValue">
+							<dl class="detailList">
+							<dt class="heading">Default Value:</dt>
+							<dd>
+								{+resolveLinks(member.defaultValue)+}
+							</dd>
+							</dl>
+						</if>
+
+					<if test="!$member_last"><hr /></if>
+				</for>
+			</if>
+
+<!-- ============================== method details ========================= -->		
+			<if test="defined(ownMethods) && ownMethods.length">
+				<div class="sectionTitle">
+					Method Detail
+				</div>
+				<for each="member" in="ownMethods">
+					<a name="{+Link.symbolNameToLinkName(member)+}"> </a>
+					<div class="fixedFont">{!
+						if (member.isPrivate) output += "&lt;private&gt; ";
+						if (member.isInner) output += "&lt;inner&gt; ";
+						if (member.isStatic) output += "&lt;static&gt; ";
+					!}
+					
+					<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">
+							<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">
+							<dl class="detailList">
+							<dt class="heading">Deprecated:</dt>
+							<dt>
+								{+member.deprecated+}
+							</dt>
+							</dl>
+						</if>
+						<if test="member.since">
+							<dl class="detailList">
+							<dt class="heading">Since:</dt>
+								<dd>{+ member.since +}</dd>
+							</dl>
+							</dl>
+						</if>
+						<if test="member.exceptions.length">
+							<dl class="detailList">
+							<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>
+							</dl>
+						</if>
+						<if test="member.returns.length">
+							<dl class="detailList">
+							<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>
+							</dl>
+						</if>
+						<if test="member.requires.length">
+							<dl class="detailList">
+							<dt class="heading">Requires:</dt>
+							<for each="item" in="member.requires">
+								<dd>{+ resolveLinks(item) +}</dd>
+							</for>
+							</dl>
+						</if>
+						<if test="member.see.length">
+							<dl class="detailList">
+							<dt class="heading">See:</dt>
+							<for each="item" in="member.see">
+								<dd>{+ new Link().toSymbol(item) +}</dd>
+							</for>
+							</dl>
+						</if>
+
+					<if test="!$member_last"><hr /></if>
+				</for>
+			</if>
+			
+			<hr />
+		</div>
+		
+<!-- ============================== footer ================================= -->
+		<div class="fineprint" style="clear:both">
+			<if test="JSDOC.opt.D.copyright">&copy;{+JSDOC.opt.D.copyright+}<br /></if>
+			Documentation generated by <a href="http://www.jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a> {+JSDOC.VERSION+} on {+new Date()+}
+		</div>
+	</body>
+</html>

Added: lucene/solr/trunk/contrib/javascript/lib/jsdoc/jsdoc-toolkit/templates/solrjs/index.tmpl
URL: http://svn.apache.org/viewvc/lucene/solr/trunk/contrib/javascript/lib/jsdoc/jsdoc-toolkit/templates/solrjs/index.tmpl?rev=718422&view=auto
==============================================================================
--- lucene/solr/trunk/contrib/javascript/lib/jsdoc/jsdoc-toolkit/templates/solrjs/index.tmpl (added)
+++ lucene/solr/trunk/contrib/javascript/lib/jsdoc/jsdoc-toolkit/templates/solrjs/index.tmpl Mon Nov 17 14:42:45 2008
@@ -0,0 +1,39 @@
+<!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" />
+		
+		<style type="text/css">
+		{+include("static/default.css")+}
+		</style>
+	</head>
+	
+	<body>
+		{+include("static/header.html")+}
+		
+		<div id="index">
+			{+publish.classesIndex+}
+		</div>
+		
+		<div id="content">
+			<h1 class="classTitle">Class Index</h1>
+			
+			<for each="thisClass" in="data">
+			<div>
+				<h2>{+(new Link().toSymbol(thisClass.alias))+}</h2>
+				{+resolveLinks(summarize(thisClass.classDesc))+}
+			</div>
+			<hr />
+			</for>
+			
+		</div>
+		<div class="fineprint" style="clear:both">
+			<if test="JSDOC.opt.D.copyright">&copy;{+JSDOC.opt.D.copyright+}<br /></if>
+			Documentation generated by <a href="http://www.jsdoctoolkit.org/" target="_blankt">JsDoc Toolkit</a> {+JSDOC.VERSION+} on {+new Date()+}
+		</div>
+	</body>
+</html>
\ No newline at end of file

Added: lucene/solr/trunk/contrib/javascript/lib/jsdoc/jsdoc-toolkit/templates/solrjs/publish.js
URL: http://svn.apache.org/viewvc/lucene/solr/trunk/contrib/javascript/lib/jsdoc/jsdoc-toolkit/templates/solrjs/publish.js?rev=718422&view=auto
==============================================================================
--- lucene/solr/trunk/contrib/javascript/lib/jsdoc/jsdoc-toolkit/templates/solrjs/publish.js (added)
+++ lucene/solr/trunk/contrib/javascript/lib/jsdoc/jsdoc-toolkit/templates/solrjs/publish.js Mon Nov 17 14:42:45 2008
@@ -0,0 +1,166 @@
+function publish(symbolSet) {
+	publish.conf = {  // trailing slash expected for dirs
+		ext: ".html",
+		outDir: JSDOC.opt.d || SYS.pwd+"../out/jsdoc/",
+		templatesDir: SYS.pwd+"../templates/jsdoc/",
+		symbolsDir: "symbols/",
+		srcDir: "symbols/src/"
+	};
+	
+	
+	if (JSDOC.opt.s && defined(Link) && Link.prototype._makeSrcLink) {
+		Link.prototype._makeSrcLink = function(srcFilePath) {
+			return "&lt;"+srcFilePath+"&gt;";
+		}
+	}
+	
+	IO.mkPath((publish.conf.outDir+"symbols/src").split("/"));
+		
+	// used to check the details of things being linked to
+	Link.symbolSet = symbolSet;
+
+	try {
+		var classTemplate = new JSDOC.JsPlate(publish.conf.templatesDir+"class.tmpl");
+		var classesTemplate = new JSDOC.JsPlate(publish.conf.templatesDir+"allclasses.tmpl");
+	}
+	catch(e) {
+		print(e.message);
+		quit();
+	}
+	
+	// filters
+	function hasNoParent($) {return ($.memberOf == "")}
+	function isaFile($) {return ($.is("FILE"))}
+	function isaClass($) {return ($.is("CONSTRUCTOR") || $.isNamespace)}
+	
+	var symbols = symbolSet.toArray();
+	
+	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);
+ 	}
+ 	
+ 	var classes = symbols.filter(isaClass).sort(makeSortby("alias"));
+	
+	Link.base = "../";
+ 	publish.classesIndex = classesTemplate.process(classes); // kept in memory
+	
+	for (var i = 0, l = classes.length; i < l; i++) {
+		var symbol = classes[i];
+		var output = "";
+		output = classTemplate.process(symbol);
+		
+		IO.saveFile(publish.conf.outDir+"symbols/", symbol.alias+publish.conf.ext, output);
+	}
+	
+	// regenrate the index with different relative links
+	Link.base = "";
+	publish.classesIndex = classesTemplate.process(classes);
+	
+	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;
+	
+	try {
+		var fileindexTemplate = new JSDOC.JsPlate(publish.conf.templatesDir+"allfiles.tmpl");
+	}
+	catch(e) { print(e.message); quit(); }
+	
+	var documentedFiles = symbols.filter(isaFile);
+	var allFiles = [];
+	
+	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"));
+
+	var filesIndex = fileindexTemplate.process(allFiles);
+	IO.saveFile(publish.conf.outDir, "files"+publish.conf.ext, filesIndex);
+	fileindexTemplate = filesIndex = files = null;
+}
+
+
+/** Just the first sentence. */
+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;
+		}
+	}
+}
+
+function include(path) {
+	var path = publish.conf.templatesDir+path;
+	return IO.readFile(path);
+}
+
+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);
+	}
+}
+
+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;
+}
\ No newline at end of file

Added: lucene/solr/trunk/contrib/javascript/lib/jsdoc/jsdoc-toolkit/templates/solrjs/static/default.css
URL: http://svn.apache.org/viewvc/lucene/solr/trunk/contrib/javascript/lib/jsdoc/jsdoc-toolkit/templates/solrjs/static/default.css?rev=718422&view=auto
==============================================================================
--- lucene/solr/trunk/contrib/javascript/lib/jsdoc/jsdoc-toolkit/templates/solrjs/static/default.css (added)
+++ lucene/solr/trunk/contrib/javascript/lib/jsdoc/jsdoc-toolkit/templates/solrjs/static/default.css Mon Nov 17 14:42:45 2008
@@ -0,0 +1,162 @@
+/* default.css */
+body
+{
+	font: 12px "Lucida Grande", Tahoma, Arial, Helvetica, sans-serif;
+	width: 800px;
+}
+
+.header
+{
+	clear: both;
+	background-color: #ccc;
+	padding: 8px;
+}
+
+h1
+{
+	font-size: 150%;
+	font-weight: bold;
+	padding: 0;
+	margin: 1em 0 0 .3em;
+}
+
+hr
+{
+	border: none 0;
+	border-top: 1px solid #7F8FB1;
+	height: 1px;
+}
+
+pre.code
+{
+	display: block;
+	padding: 8px;
+	border: 1px dashed #ccc;
+}
+
+#index
+{
+	margin-top: 24px;
+	float: left;
+	width: 160px;
+	position: absolute;
+	left: 8px;
+	background-color: #F3F3F3;
+	padding: 8px;
+}
+
+#content
+{
+	margin-left: 190px;
+	width: 600px;
+}
+
+.classList
+{
+	list-style-type: none;
+	padding: 0;
+	margin: 0 0 0 8px;
+	font-family: arial, sans-serif;
+	font-size: 1em;
+	overflow: auto;
+}
+
+.classList li
+{
+	padding: 0;
+	margin: 0 0 8px 0;
+}
+
+.summaryTable { width: 100%; }
+
+h1.classTitle
+{
+	font-size:170%;
+	line-height:130%;
+}
+
+h2 { font-size: 110%; }
+caption, div.sectionTitle
+{
+	background-color: #7F8FB1;
+	color: #fff;
+	font-size:130%;
+	text-align: left;
+	padding: 2px 6px 2px 6px;
+	border: 1px #7F8FB1 solid;
+}
+
+div.sectionTitle { margin-bottom: 8px; }
+.summaryTable thead { display: none; }
+
+.summaryTable td
+{
+	vertical-align: top;
+	padding: 4px;
+	border-bottom: 1px #7F8FB1 solid;
+	border-right: 1px #7F8FB1 solid;
+}
+
+/*col#summaryAttributes {}*/
+.summaryTable td.attributes
+{
+	border-left: 1px #7F8FB1 solid;
+	width: 140px;
+	text-align: right;
+}
+
+td.attributes, .fixedFont
+{
+	line-height: 15px;
+	color: #002EBE;
+	font-family: "Courier New",Courier,monospace;
+	font-size: 13px;
+}
+
+.summaryTable td.nameDescription
+{
+	text-align: left;
+	font-size: 13px;
+	line-height: 15px;
+}
+
+.summaryTable td.nameDescription, .description
+{
+	line-height: 15px;
+	padding: 4px;
+	padding-left: 4px;
+}
+
+.summaryTable { margin-bottom: 8px; }
+
+ul.inheritsList
+{
+	list-style: square;
+	margin-left: 20px;
+	padding-left: 0;
+}
+
+.detailList {
+	margin-left: 20px; 
+	line-height: 15px;
+}
+.detailList dt { margin-left: 20px; }
+
+.detailList .heading
+{
+	font-weight: bold;
+	padding-bottom: 6px;
+	margin-left: 0;
+}
+
+.light, td.attributes, .light a:link, .light a:visited
+{
+	color: #777;
+	font-style: italic;
+}
+
+.fineprint
+{
+	text-align: right;
+	font-size: 10px;
+}
\ No newline at end of file

Added: lucene/solr/trunk/contrib/javascript/lib/jsdoc/jsdoc-toolkit/templates/solrjs/static/header.html
URL: http://svn.apache.org/viewvc/lucene/solr/trunk/contrib/javascript/lib/jsdoc/jsdoc-toolkit/templates/solrjs/static/header.html?rev=718422&view=auto
==============================================================================
--- lucene/solr/trunk/contrib/javascript/lib/jsdoc/jsdoc-toolkit/templates/solrjs/static/header.html (added)
+++ lucene/solr/trunk/contrib/javascript/lib/jsdoc/jsdoc-toolkit/templates/solrjs/static/header.html Mon Nov 17 14:42:45 2008
@@ -0,0 +1,2 @@
+<div id="header">
+</div>
\ No newline at end of file

Added: lucene/solr/trunk/contrib/javascript/lib/jsdoc/jsdoc-toolkit/templates/solrjs/static/index.html
URL: http://svn.apache.org/viewvc/lucene/solr/trunk/contrib/javascript/lib/jsdoc/jsdoc-toolkit/templates/solrjs/static/index.html?rev=718422&view=auto
==============================================================================
--- lucene/solr/trunk/contrib/javascript/lib/jsdoc/jsdoc-toolkit/templates/solrjs/static/index.html (added)
+++ lucene/solr/trunk/contrib/javascript/lib/jsdoc/jsdoc-toolkit/templates/solrjs/static/index.html Mon Nov 17 14:42:45 2008
@@ -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>
\ No newline at end of file

Added: lucene/solr/trunk/contrib/javascript/lib/jsdoc/jsdoc-toolkit/templates/solrjs/symbol.tmpl
URL: http://svn.apache.org/viewvc/lucene/solr/trunk/contrib/javascript/lib/jsdoc/jsdoc-toolkit/templates/solrjs/symbol.tmpl?rev=718422&view=auto
==============================================================================
--- lucene/solr/trunk/contrib/javascript/lib/jsdoc/jsdoc-toolkit/templates/solrjs/symbol.tmpl (added)
+++ lucene/solr/trunk/contrib/javascript/lib/jsdoc/jsdoc-toolkit/templates/solrjs/symbol.tmpl Mon Nov 17 14:42:45 2008
@@ -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>

Added: lucene/solr/trunk/contrib/javascript/src/clientside/AutocompleteWidget.js
URL: http://svn.apache.org/viewvc/lucene/solr/trunk/contrib/javascript/src/clientside/AutocompleteWidget.js?rev=718422&view=auto
==============================================================================
--- lucene/solr/trunk/contrib/javascript/src/clientside/AutocompleteWidget.js (added)
+++ lucene/solr/trunk/contrib/javascript/src/clientside/AutocompleteWidget.js Mon Nov 17 14:42:45 2008
@@ -0,0 +1,91 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.
+ */
+
+/**
+ * <p> Autocomplete input filed that suggests facet values. It can show facet values of multiple 
+ * fields (specified by "fieldNames"), as well as perform a fulltext query ("fulltextFieldName")
+ * in case no suggested value is selected. </p>
+ *
+ * It uses the autocomplete box found at http://docs.jquery.com/UI/Autocomplete/autocomplete.
+ * 
+ * @class AutocompleteWidget
+ * @augments jQuery.solrjs.AbstractClientSideWidget
+ */
+jQuery.solrjs.AutocompleteWidget = jQuery.solrjs.createClass ("AbstractClientSideWidget", /** @lends jQuery.solrjs.AutocompleteWidget.prototype */{ 
+
+  /** 
+   * A list of facet fields.
+   * @field 
+   * @public
+   */
+  fieldNames : [] ,  
+  
+  /** 
+   * The field to search in if when no suggestion is selected.
+   * @field 
+   * @public
+   */
+  fulltextFieldName : "",  
+
+  getSolrUrl : function(start) { 
+    var ret = "&facet=true&facet.limit=-1";
+    for (var j = 0; j < this.fieldNames.length; j++) {
+      ret += "&facet.field=" + this.fieldNames[j];
+    }
+    return ret;
+    
+  },
+
+  handleResult : function(data) { 
+    
+    // create new input field
+    jQuery(this.target).empty();
+    var input = jQuery('<input/>').attr("id", this.id + "_input").appendTo(this.target);
+    
+    // create autocomplete list
+    var list = [];
+    for (var j = 0; j < this.fieldNames.length; j++) {
+      var field = this.fieldNames[j];
+      var values = data.facet_counts.facet_fields[field];  
+      for (var i = 0; i < values.length; i = i + 2) {
+        var label = values[i] + " (" + values[i+1] + ") - " + field;      
+        var value = values[i];
+        list.push({text:label, value:value, field:field});
+      }
+    }
+    
+    // add selection listeners for suggests and fulltext search.
+    var me = this;
+    me.selectionMade = false;
+    input.autocomplete(list, {
+      formatItem: function(item) {
+        return item.text;
+      }
+    }).result(function(event, item) {
+      var items =  [new jQuery.solrjs.QueryItem({field: item.field , value:item.value})];
+      solrjsManager.selectItems(me.id, items);
+      me.selectionMade = true;
+    });
+    jQuery("#" + this.id + "_input").html("test").bind("keydown", function(event) {
+      if (me.selectionMade == false && event.keyCode==13) {
+        var items =  [new jQuery.solrjs.QueryItem({field: me.fulltextFieldName , value:"\"" + event.target.value + "\""})];
+        solrjsManager.selectItems(me.id, items);
+      }
+    });
+  }
+
+});
\ No newline at end of file

Propchange: lucene/solr/trunk/contrib/javascript/src/clientside/AutocompleteWidget.js
------------------------------------------------------------------------------
    svn:executable = *

Added: lucene/solr/trunk/contrib/javascript/src/clientside/CalendarWidget.js
URL: http://svn.apache.org/viewvc/lucene/solr/trunk/contrib/javascript/src/clientside/CalendarWidget.js?rev=718422&view=auto
==============================================================================
--- lucene/solr/trunk/contrib/javascript/src/clientside/CalendarWidget.js (added)
+++ lucene/solr/trunk/contrib/javascript/src/clientside/CalendarWidget.js Mon Nov 17 14:42:45 2008
@@ -0,0 +1,105 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.
+ */
+
+/**
+ * A calenader facet field. it uses solr's date facet capabilities, and displays 
+ * the document count of one day using the DHTML calendar from www.dynarch.com/projects/calendar
+ * 
+ * @class CalendarWidget
+ * @augments jQuery.solrjs.AbstractClientSideWidget
+ */
+jQuery.solrjs.CalendarWidget = jQuery.solrjs.createClass ("AbstractClientSideWidget", { 
+
+  /** 
+   * Start date, used to restrict the calendar ui as well 
+   * as the solr date facets.
+   *
+   * @field 
+   * @public
+   */
+  startDate : null,
+  
+  /** 
+   * Start date, used to restrict the calendar ui as well 
+   * as the solr date facets.
+   *
+   * @field 
+   * @public
+   */
+  endDate : null,  
+  
+  /** 
+   * Current date facet array.
+   *
+   * @field 
+   * @private
+   */
+  dates : null,  
+  
+  getSolrUrl : function(start) { 
+    return "&facet=true&facet.mincount=1&facet.date=date&facet.date.start=1987-01-01T00:00:00.000Z/DAY&facet.date.end=1987-11-31T00:00:00.000Z/DAY%2B1DAY&facet.date.gap=%2B1DAY";
+  },
+
+  handleResult : function(data) { 
+  
+    var me = this;
+    me.dates = [];
+    jQuery.each(data.facet_counts.facet_dates.date, function(key, value) {
+      var date = new Date(key.slice(0, 4), parseInt(key.slice(6, 8)) - 1, key.slice(8, 10));
+      me.dates[date] = value;
+    });
+    
+    jQuery(this.target).empty();
+    
+    var parent = document.getElementById("calendar");
+
+    // construct a calendar giving only the "selected" handler.
+    var cal = new Calendar(0, null, function (cal, date) {
+      if (cal.dateClicked) {
+        var dateString = "[" + date + "T00:00:00Z TO " + date + "T23:59:59Z]";
+        var items =  [new jQuery.solrjs.QueryItem({field: me.fieldName , value:date, toSolrQuery: function() { return "date:" + dateString }})];
+        solrjsManager.selectItems(me.id, items);
+      }
+    });
+    cal.dateClicked = false;
+    cal.weekNumbers = false;
+    cal.setDateFormat("%Y-%m-%d");
+    cal.setTtDateFormat("solrjs");
+    
+    cal.setDateStatusHandler(function(date) { 
+        if (me.dates[date] != null && me.dates[date] > 0) {
+          return "solrjs solrjs_value_" + me.dates[date];
+        }
+        return true;
+      });
+      
+    cal.create(parent);
+    cal.show();
+    cal.setDate(new Date(1987, 2, 1));
+    
+    // override pribt method to display document count
+    var oldPrint = Date.prototype.print;
+    Date.prototype.print = function(string) {
+      if (string.indexOf("solrjs") == -1) {
+        return oldPrint.call(this, string);
+      }
+      return me.dates[this] + " documents found!";
+    }
+  }
+
+});
+

Propchange: lucene/solr/trunk/contrib/javascript/src/clientside/CalendarWidget.js
------------------------------------------------------------------------------
    svn:executable = *

Added: lucene/solr/trunk/contrib/javascript/src/clientside/CountryCodeWidget.js
URL: http://svn.apache.org/viewvc/lucene/solr/trunk/contrib/javascript/src/clientside/CountryCodeWidget.js?rev=718422&view=auto
==============================================================================
--- lucene/solr/trunk/contrib/javascript/src/clientside/CountryCodeWidget.js (added)
+++ lucene/solr/trunk/contrib/javascript/src/clientside/CountryCodeWidget.js Mon Nov 17 14:42:45 2008
@@ -0,0 +1,125 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.
+ */
+
+/**
+ * Takes a solr field that stores an ISO-3166 country code. It creates facet values and
+ * displays them in a selection dropdown as well as on a google chart map item. 
+ * 
+ * @class CountryCodeWidget
+ * @augments jQuery.solrjs.AbstractClientSideWidget
+ */
+jQuery.solrjs.CountryCodeWidget = jQuery.solrjs.createClass ("AbstractClientSideWidget", { 
+
+  /** 
+   * The width of the map images.
+   * 
+   * @field 
+   * @public
+   */
+  width : 350, 
+  
+  /** 
+   * The height of the map images.
+   *
+   * @field 
+   * @public
+   */
+  height : 180, 
+
+  /** 
+   * The field name of the iso country code field.
+   *
+   * @field 
+   * @public
+   */
+  fieldName : "",  
+  
+  getSolrUrl : function(start) { 
+		return "&facet=true&facet.mincount=1&facet.limit=-1&facet.field=" + this.fieldName;
+  },
+
+  handleResult : function(data) { 
+	  jQuery(this.target).empty();
+	  
+	  // get facet counts
+	  var values = data.facet_counts.facet_fields[this.fieldName];  
+	  var maxCount = 0;
+    var objectedItems = [];
+    for (var i = 0; i < values.length; i = i + 2) {
+      var c = parseInt(values[i+1]);
+      if (c > maxCount) {
+        maxCount = c;
+      }
+      objectedItems.push({label:values[i], count:values[i+1]});
+    }
+    
+    // create a select for regions
+    var container = jQuery("<div/>").attr("id",  "solrjs_" + this.id).appendTo(this.target);
+    var select = jQuery("<select/>").appendTo(container);
+    var me = this;
+    select.change(function () {
+      jQuery("#solrjs_" + me.id + " img").each(function (i,item) {
+            jQuery(item).css("display", "none");
+          });
+      jQuery("#solrjs_" + me.id + this[this.selectedIndex].value).css("display", "block");
+    });
+    jQuery("<option/>").html("view the World ").attr("value", "world").appendTo(select);
+    jQuery("<option/>").html("view Africa").attr("value", "africa").appendTo(select);
+    jQuery("<option/>").html("view Asia").attr("value", "asia").appendTo(select);
+    jQuery("<option/>").html("view Europe").attr("value", "europe").appendTo(select);
+    jQuery("<option/>").html("view the Middle East").attr("value", "middle_east").appendTo(select);
+    jQuery("<option/>").html("view South America").attr("value", "south_america").appendTo(select);
+    jQuery("<option/>").html("view North America").attr("value", "usa").appendTo(select);
+    
+    // create a select for facet values
+	  var codes = "";
+	  var mapvalues = "t:";
+	  var countrySelect = jQuery("<select/>").appendTo(container);
+	  countrySelect.change(function () {
+      var items =  [new jQuery.solrjs.QueryItem({field: me.fieldName , value:this[this.selectedIndex].value})];
+      solrjsManager.selectItems(me.id, items);
+    });
+	  jQuery("<option/>").html("--select--").attr("value", "-1").appendTo(countrySelect);;
+    
+    // create map data
+    for (var i = 0; i < objectedItems.length; i++) {
+      if (objectedItems[i].label.length != 2) {
+        continue;
+      }
+      codes += objectedItems[i].label;
+      var currentValue = objectedItems[i].count;
+      var percent =  (objectedItems[i].count / maxCount);
+      var tagvalue = parseInt(percent * 100);       
+      mapvalues += tagvalue + ".0";
+      if (i < objectedItems.length - 1) {
+        mapvalues += ",";
+      }
+      jQuery("<option/>").html(objectedItems[i].label + " (" + currentValue + ")").attr("value", objectedItems[i].label).appendTo(countrySelect);
+    }
+    
+    // show maps
+	  jQuery("<img/>").attr("id", "solrjs_" + this.id + "africa").css("display", "none").attr("src","http://chart.apis.google.com/chart?chco=f5f5f5,edf0d4,6c9642,365e24,13390a&chd=" + mapvalues + "&chf=bg,s,eaf7fe&chtm=africa&chld="+ codes +"&chs="+this.width+"x"+this.height+"&cht=t").appendTo(container);
+	  jQuery("<img/>").attr("id", "solrjs_" + this.id + "asia").css("display", "none").attr("src","http://chart.apis.google.com/chart?chco=f5f5f5,edf0d4,6c9642,365e24,13390a&chd=" + mapvalues + "&chf=bg,s,eaf7fe&chtm=asia&chld="+ codes +"&chs="+this.width+"x"+this.height+"&cht=t").appendTo(container);
+	  jQuery("<img/>").attr("id", "solrjs_" + this.id + "europe").css("display", "none").attr("src","http://chart.apis.google.com/chart?chco=f5f5f5,edf0d4,6c9642,365e24,13390a&chd=" + mapvalues + "&chf=bg,s,eaf7fe&chtm=europe&chld="+ codes +"&chs="+this.width+"x"+this.height+"&cht=t").appendTo(container);
+	  jQuery("<img/>").attr("id", "solrjs_" + this.id + "middle_east").css("display", "none").attr("src","http://chart.apis.google.com/chart?chco=f5f5f5,edf0d4,6c9642,365e24,13390a&chd=" + mapvalues + "&chf=bg,s,eaf7fe&chtm=middle_east&chld="+ codes +"&chs="+this.width+"x"+this.height+"&cht=t").appendTo(container);
+	  jQuery("<img/>").attr("id", "solrjs_" + this.id + "south_america").css("display", "none").attr("src","http://chart.apis.google.com/chart?chco=f5f5f5,edf0d4,6c9642,365e24,13390a&chd=" + mapvalues + "&chf=bg,s,eaf7fe&chtm=south_america&chld="+ codes +"&chs="+this.width+"x"+this.height+"&cht=t").appendTo(container);
+	  jQuery("<img/>").attr("id", "solrjs_" + this.id + "usa").css("display", "none").attr("src","http://chart.apis.google.com/chart?chco=f5f5f5,edf0d4,6c9642,365e24,13390a&chd=" + mapvalues + "&chf=bg,s,eaf7fe&chtm=usa&chld="+ codes +"&chs="+this.width+"x"+this.height+"&cht=t").appendTo(container);
+	  jQuery("<img/>").attr("id", "solrjs_" + this.id + "world").css("display", "block").attr("src","http://chart.apis.google.com/chart?chco=f5f5f5,edf0d4,6c9642,365e24,13390a&chd=" + mapvalues + "&chf=bg,s,eaf7fe&chtm=world&chld="+ codes +"&chs="+this.width+"x"+this.height+"&cht=t").appendTo(container);
+	  
+	  
+	}
+});
\ No newline at end of file

Propchange: lucene/solr/trunk/contrib/javascript/src/clientside/CountryCodeWidget.js
------------------------------------------------------------------------------
    svn:executable = *

Added: lucene/solr/trunk/contrib/javascript/src/clientside/ExtensibleResultWidget.js
URL: http://svn.apache.org/viewvc/lucene/solr/trunk/contrib/javascript/src/clientside/ExtensibleResultWidget.js?rev=718422&view=auto
==============================================================================
--- lucene/solr/trunk/contrib/javascript/src/clientside/ExtensibleResultWidget.js (added)
+++ lucene/solr/trunk/contrib/javascript/src/clientside/ExtensibleResultWidget.js Mon Nov 17 14:42:45 2008
@@ -0,0 +1,42 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.
+ */
+
+/**
+ * A simple base class for result widgets (list of documents, including paging).
+ * Implementations should override the renderResult(docs, pageSize, offset, numFound)
+ * funtion to render the result.
+ *
+ * @class ExtensibleResultWidget
+ * @augments jQuery.solrjs.AbstractClientSideWidget
+ */
+jQuery.solrjs.ExtensibleResultWidget = jQuery.solrjs.createClass ("AbstractClientSideWidget", { 
+  
+  isResult : true,
+  
+  getSolrUrl : function(start) { 
+		return ""; // no special params need
+	},
+
+  handleResult : function(data) { 
+    jQuery(this.target).empty();
+    this.renderResult(data.response.docs, parseInt(data.responseHeader.params.rows), data.responseHeader.params.start, data.response.numFound);
+	},
+
+  renderResult : function(docs, pageSize, offset, numFound) { 
+		throw "Abstract method renderDataItem";
+  }
+});
\ No newline at end of file

Added: lucene/solr/trunk/contrib/javascript/src/clientside/FacetWidget.js
URL: http://svn.apache.org/viewvc/lucene/solr/trunk/contrib/javascript/src/clientside/FacetWidget.js?rev=718422&view=auto
==============================================================================
--- lucene/solr/trunk/contrib/javascript/src/clientside/FacetWidget.js (added)
+++ lucene/solr/trunk/contrib/javascript/src/clientside/FacetWidget.js Mon Nov 17 14:42:45 2008
@@ -0,0 +1,53 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.
+ */
+
+/**
+ * A simple facet widteh that shows the facet values as list. It remembers the selection
+ * and shows a "value(x)" label after selection.
+ *
+ * @class ExtensibleResultWidget
+ * @augments jQuery.solrjs.AbstractClientSideWidget
+ */
+jQuery.solrjs.FacetWidget = jQuery.solrjs.createClass ("AbstractClientSideWidget", { 
+  
+  saveSelection : true,
+  
+  getSolrUrl : function(start) { 
+		return "&facet=true&facet.field=" + this.fieldName;
+  },
+
+  handleResult : function(data) { 
+	 var values = data.facet_counts.facet_fields[this.fieldName];	 
+     jQuery(this.target).html("");
+		
+		for (var i = 0; i < values.length; i = i + 2) {
+			var items =  "[new jQuery.solrjs.QueryItem({field:'" + this.fieldName + "',value:'" +  values[i] + "'})]";
+      var label = values[i] + "(" + values[i+1] + ")";     	
+			jQuery('<a/>').html(label).attr("href","javascript:solrjsManager.selectItems('" + this.id + "'," + items + ")").appendTo(this.target);
+			jQuery('<br/>').appendTo(this.target);
+		}
+	},
+
+	handleSelect : function(data) { 
+		jQuery(this.target).html(this.selectedItems[0].value);
+		jQuery('<a/>').html("(x)").attr("href","javascript:solrjsManager.deselectItems('" + this.id + "')").appendTo(this.target);
+	},
+
+	handleDeselect : function(data) { 
+		// do nothing
+	}	   
+});
\ No newline at end of file

Added: lucene/solr/trunk/contrib/javascript/src/clientside/TagcloudWidget.js
URL: http://svn.apache.org/viewvc/lucene/solr/trunk/contrib/javascript/src/clientside/TagcloudWidget.js?rev=718422&view=auto
==============================================================================
--- lucene/solr/trunk/contrib/javascript/src/clientside/TagcloudWidget.js (added)
+++ lucene/solr/trunk/contrib/javascript/src/clientside/TagcloudWidget.js Mon Nov 17 14:42:45 2008
@@ -0,0 +1,82 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.
+ */
+
+/**
+ * A facet widget that renders the values as a tagcloud.
+ *
+ * @class TagcloudWidget
+ * @augments jQuery.solrjs.AbstractClientSideWidget
+ */
+jQuery.solrjs.TagcloudWidget = jQuery.solrjs.createClass ("AbstractClientSideWidget", { 
+
+  /** 
+   * Maximum count of items in the tagcloud. 
+   *
+   * @field 
+   * @public
+   */
+  size : 20,
+  
+  /** 
+   * The facet field name.
+   *
+   * @field 
+   * @public
+   */
+  fieldName : "",  
+  
+  getSolrUrl : function(start) { 
+		return "&facet=true&facet.mincount=1&facet.field=" + this.fieldName + "&facet.limit=" + this.size;
+  },
+
+  handleResult : function(data) { 
+	 var values = data.facet_counts.facet_fields[this.fieldName];	 
+     jQuery(this.target).empty();
+     
+     if (values.length == 0) {
+       jQuery("<div/>").html("not items found in current selection").appendTo(this.target);
+     }
+		
+		 var maxCount = 0;
+		 var objectedItems = [];
+		 for (var i = 0; i < values.length; i = i + 2) {
+		    var c = parseInt(values[i+1]);
+		    if (c > maxCount) {
+		      maxCount = c;
+		    }
+		    objectedItems.push({label:values[i], count:values[i+1]});
+		 }
+		 
+		 objectedItems.sort(function(a,b) {
+		   if (a.label < b.label) {
+		    return -1;
+		   }
+		   return 1;  
+		 });
+		 
+		 for (var i = 0; i < objectedItems.length; i++) {
+       var label = objectedItems[i].label;
+			 var items =  "[new jQuery.solrjs.QueryItem({field:'" + this.fieldName + "',value:'" +  label + "'})]";
+       var percent =  (objectedItems[i].count / maxCount);
+       var tagvalue = parseInt(percent * 10);     	
+			 jQuery("<a/>").html(label).addClass("solrjs_tagcloud_item").addClass("solrjs_tagcloud_size_" + tagvalue).attr("href","javascript:solrjsManager.selectItems('" + this.id + "'," + items + ")").appendTo(this.target);
+		 }
+		 
+		 jQuery("<div/>").addClass("solrjs_tagcloud_clearer").appendTo(this.target);
+		 
+	}
+});
\ No newline at end of file

Propchange: lucene/solr/trunk/contrib/javascript/src/clientside/TagcloudWidget.js
------------------------------------------------------------------------------
    svn:executable = *