Index: solr/example/solr/collection1/conf/velocity/footer.vm =================================================================== --- solr/example/solr/collection1/conf/velocity/footer.vm (revision 1470587) +++ solr/example/solr/collection1/conf/velocity/footer.vm (working copy) @@ -1,17 +1,43 @@ +#** + * Render the bottom section of the page visible to users + *# +
Options: + #if($request.params.get('debugQuery')) - disable debug + + disable debug #else - enable debug + + enable debug #end + - #if($annotate) - disable annotation + + disable annotation #else - enable annotation + + enable annotation #end - XML
-
Generated by VelocityResponseWriter
-
Documentation: Solr Home Page, Solr Wiki
-
Disclaimer: The locations displayed in this demonstration are purely fictional. It is more than likely that no store with the items listed actually exists at that location!
\ No newline at end of file + - + + XML results + + + +
+ Generated by VelocityResponseWriter +
+
+ Documentation: + Solr Home Page, + Solr Wiki +
+
+ Disclaimer: + The locations displayed in this demonstration are purely fictional. + It is more than likely that no store with the items listed actually + exists at that location! +
Index: solr/example/solr/collection1/conf/velocity/head.vm =================================================================== --- solr/example/solr/collection1/conf/velocity/head.vm (revision 1470587) +++ solr/example/solr/collection1/conf/velocity/head.vm (working copy) @@ -1,12 +1,15 @@ +#** + * Provide elements for the section of the HTML document + *# - ## An example of using an arbitrary request parameter - #param('title') - + ## An example of using an arbitrary request parameter + #param('title') + - - + + \ No newline at end of file + Index: solr/example/solr/collection1/conf/velocity/cluster_results.vm =================================================================== --- solr/example/solr/collection1/conf/velocity/cluster_results.vm (revision 1470587) +++ solr/example/solr/collection1/conf/velocity/cluster_results.vm (working copy) @@ -1,12 +1,31 @@ +#** + * Actual rendering of Clusters + *# + +## For each cluster #foreach ($clusters in $response.response.clusters) - #set($labels = $clusters.get('labels')) - #set($docs = $clusters.get('docs')) -

#foreach ($label in $labels)$label#if( $foreach.hasNext ),#end#end

-
    - #foreach ($cluDoc in $docs) -
  1. $cluDoc
  2. - #end -
- - -#end \ No newline at end of file + + #set($labels = $clusters.get('labels')) + #set($docs = $clusters.get('docs')) + + ## This Cluster's Heading +

+ #foreach ($label in $labels) + ## Keep the following line together to prevent + ## a space appearing before each comma + $label#if( $foreach.hasNext ),#end + #end +

+ + ## This Cluster's Documents +
    + ## For each doc in this cluster + #foreach ($cluDoc in $docs) +
  1. + + $cluDoc +
  2. + #end +
+ +#end ## end for each Cluster Index: solr/example/solr/collection1/conf/velocity/facet_pivot.vm =================================================================== --- solr/example/solr/collection1/conf/velocity/facet_pivot.vm (revision 1470587) +++ solr/example/solr/collection1/conf/velocity/facet_pivot.vm (working copy) @@ -1,3 +1,12 @@ -

Pivot Facets

+#** + * Display Pivot-Based Facets + * e.g.: facets specified by &facet.pivot= + *# + +

+ Pivot Facets +

+ #set($pivot = $response.response.facet_counts.facet_pivot) + #display_facet_pivot($pivot, "") Index: solr/example/solr/collection1/conf/velocity/clusterResults.vm =================================================================== --- solr/example/solr/collection1/conf/velocity/clusterResults.vm (revision 1470587) +++ solr/example/solr/collection1/conf/velocity/clusterResults.vm (working copy) @@ -1,12 +0,0 @@ -#foreach ($clusters in $response.response.clusters) - #set($labels = $clusters.get('labels')) - #set($docs = $clusters.get('docs')) -

#foreach ($label in $labels)$label#if( $foreach.hasNext ),#end#end

-
    - #foreach ($cluDoc in $docs) -
  1. $cluDoc
  2. - #end -
- - -#end \ No newline at end of file Index: solr/example/solr/collection1/conf/velocity/product_doc.vm =================================================================== --- solr/example/solr/collection1/conf/velocity/product_doc.vm (revision 1470587) +++ solr/example/solr/collection1/conf/velocity/product_doc.vm (working copy) @@ -1,3 +1,8 @@ +#** + * Render a hit representing a Product + * assumed to have a field called "name" + *# +
#field('name') #if($params.getBool('mlt', false) == false)More Like This#end
##do we have a physical store for this product #set($store = $doc.getFieldValue('store')) @@ -24,4 +29,4 @@
No Similar Items Found
#end -#parse('debug.vm') \ No newline at end of file +#parse('debug.vm') Index: solr/example/solr/collection1/conf/velocity/mime_type_lists.vm =================================================================== --- solr/example/solr/collection1/conf/velocity/mime_type_lists.vm (revision 0) +++ solr/example/solr/collection1/conf/velocity/mime_type_lists.vm (revision 0) @@ -0,0 +1,68 @@ +#** + * Define some Mime-Types, short and long form + *# + +## MimeType to extension map for detecting file type +## and showing proper icon +## List of types match the icons in /solr/img/filetypes + +## Short MimeType Names +## Was called $supportedtypes +#set($supportedMimeTypes = "7z;ai;aiff;asc;audio;bin;bz2;c;cfc;cfm;chm;class;conf;cpp;cs;css;csv;deb;divx;doc;dot;eml;enc;file;gif;gz;hlp;htm;html;image;iso;jar;java;jpeg;jpg;js;lua;m;mm;mov;mp3;mpg;odc;odf;odg;odi;odp;ods;odt;ogg;pdf;pgp;php;pl;png;ppt;ps;py;ram;rar;rb;rm;rpm;rtf;sig;sql;swf;sxc;sxd;sxi;sxw;tar;tex;tgz;txt;vcf;video;vsd;wav;wma;wmv;xls;xml;xpi;xvid;zip") + +## Long Form: map MimeType headers to our Short names +## Was called $extMap +#set( $mimeExtensionsMap = { + "application/x-7z-compressed": "7z", + "application/postscript": "ai", + "application/pgp-signature": "asc", + "application/octet-stream": "bin", + "application/x-bzip2": "bz2", + "text/x-c": "c", + "application/vnd.ms-htmlhelp": "chm", + "application/java-vm": "class", + "text/css": "css", + "text/csv": "csv", + "application/x-debian-package": "deb", + "application/msword": "doc", + "message/rfc822": "eml", + "image/gif": "gif", + "application/winhlp": "hlp", + "text/html": "html", + "application/java-archive": "jar", + "text/x-java-source": "java", + "image/jpeg": "jpeg", + "application/javascript": "js", + "application/vnd.oasis.opendocument.chart": "odc", + "application/vnd.oasis.opendocument.formula": "odf", + "application/vnd.oasis.opendocument.graphics": "odg", + "application/vnd.oasis.opendocument.image": "odi", + "application/vnd.oasis.opendocument.presentation": "odp", + "application/vnd.oasis.opendocument.spreadsheet": "ods", + "application/vnd.oasis.opendocument.text": "odt", + "application/pdf": "pdf", + "application/pgp-encrypted": "pgp", + "image/png": "png", + "application/vnd.ms-powerpoint": "ppt", + "audio/x-pn-realaudio": "ram", + "application/x-rar-compressed": "rar", + "application/vnd.rn-realmedia": "rm", + "application/rtf": "rtf", + "application/x-shockwave-flash": "swf", + "application/vnd.sun.xml.calc": "sxc", + "application/vnd.sun.xml.draw": "sxd", + "application/vnd.sun.xml.impress": "sxi", + "application/vnd.sun.xml.writer": "sxw", + "application/x-tar": "tar", + "application/x-tex": "tex", + "text/plain": "txt", + "text/x-vcard": "vcf", + "application/vnd.visio": "vsd", + "audio/x-wav": "wav", + "audio/x-ms-wma": "wma", + "video/x-ms-wmv": "wmv", + "application/vnd.ms-excel": "xls", + "application/xml": "xml", + "application/x-xpinstall": "xpi", + "application/zip": "zip" +}) Index: solr/example/solr/collection1/conf/velocity/facet_fields.vm =================================================================== --- solr/example/solr/collection1/conf/velocity/facet_fields.vm (revision 1470587) +++ solr/example/solr/collection1/conf/velocity/facet_fields.vm (working copy) @@ -1,15 +1,23 @@ +#** + * Display facets based on field values + * e.g.: fields specified by &facet.field= + *# + #if($response.facetFields) -

Field Facets

- #foreach($field in $response.facetFields) - ## Hide facets without value - #if($field.values.size() > 0) +

+ Field Facets +

+ #foreach($field in $response.facetFields) + ## Hide facets without value + #if($field.values.size() > 0) $field.name - - #end - #end - #end \ No newline at end of file + #end ## end if > 0 + #end ## end for each facet field +#end ## end if response has facet fields Index: solr/example/solr/collection1/conf/velocity/hitGrouped.vm =================================================================== --- solr/example/solr/collection1/conf/velocity/hitGrouped.vm (revision 1470587) +++ solr/example/solr/collection1/conf/velocity/hitGrouped.vm (working copy) @@ -1,24 +0,0 @@ -
-
$grouping.key
-
Total Matches in Group: $grouping.value.matches
-
#foreach ($group in $grouping.value.groups) -
$group.groupValue ($group.doclist.numFound)
-
- #foreach ($doc in $group.doclist) - #set($docId = $doc.getFieldValue('id')) - #if($doc.getFieldValue('name')) - #parse("product-doc.vm") - #elseif($doc.getFieldValue('compName_s')) - #parse("join-doc.vm") - #else - #parse("richtext-doc.vm") - #end - #end -
- #end
-
- #if($params.getBool("debugQuery",false)) - toggle explain -
$response.getExplainMap().get($doc.getFirstValue('id'))
- #end - Index: solr/example/solr/collection1/conf/velocity/pagination_bottom.vm =================================================================== --- solr/example/solr/collection1/conf/velocity/pagination_bottom.vm (revision 0) +++ solr/example/solr/collection1/conf/velocity/pagination_bottom.vm (revision 0) @@ -0,0 +1,22 @@ +#** + * Paging and Staticis at bottom of results + *# + +## Usually rendered in pagination div tag + +#if($response.response.get('grouped')) + ## pass +#else + + #link_to_previous_page("previous") + + $page.results_found + results found. + + Page $page.current_page_number + of $page.page_count + + #link_to_next_page("next") + +#end +
Index: solr/example/solr/collection1/conf/velocity/facet_queries.vm =================================================================== --- solr/example/solr/collection1/conf/velocity/facet_queries.vm (revision 1470587) +++ solr/example/solr/collection1/conf/velocity/facet_queries.vm (working copy) @@ -1,3 +1,12 @@ +#** + * Display facets based on specific facet queries + * e.g.: facets specified by &facet.query= + *# + #set($field = $response.response.facet_counts.facet_queries) -

Query Facets

-#display_facet_query($field, "", "") \ No newline at end of file + +

+ Query Facets +

+ +#display_facet_query($field, "", "") Index: solr/example/solr/collection1/conf/velocity/cluster.vm =================================================================== --- solr/example/solr/collection1/conf/velocity/cluster.vm (revision 1470587) +++ solr/example/solr/collection1/conf/velocity/cluster.vm (working copy) @@ -1,9 +1,19 @@ -

Clusters

+#** + * Check if Clustering is Enabled and then + * call cluster_results.vm + *# + +

+ Clusters +

+ +## Div tag has placeholder text by default
Run Solr with java -Dsolr.clustering.enabled=true -jar start.jar to see results
+ +## Replace the div content *if* Carrot^2 is available Index: solr/example/solr/collection1/conf/velocity/query_spatial.vm =================================================================== --- solr/example/solr/collection1/conf/velocity/query_spatial.vm (revision 1470587) +++ solr/example/solr/collection1/conf/velocity/query_spatial.vm (working copy) @@ -1,40 +1,75 @@ +#** + * Query logic for selecting location / Geospacial search + *# + #set($queryOpts = $params.get("queryOpts")) + #if($queryOpts == "spatial") -
- #set($loc = $request.params.get('pt')) - #set($dist = $request.params.get('d', "10")) - - Distance (KM): - - - -
- -#end \ No newline at end of file + + +#end Index: solr/example/solr/collection1/conf/velocity/querySpatial.vm =================================================================== --- solr/example/solr/collection1/conf/velocity/querySpatial.vm (revision 1470587) +++ solr/example/solr/collection1/conf/velocity/querySpatial.vm (working copy) @@ -1,40 +0,0 @@ -#set($queryOpts = $params.get("queryOpts")) -#if($queryOpts == "spatial") -
- #set($loc = $request.params.get('pt')) - #set($dist = $request.params.get('d', "10")) - - Distance (KM): - - - -
- -#end \ No newline at end of file Index: solr/example/solr/collection1/conf/velocity/product-doc.vm =================================================================== --- solr/example/solr/collection1/conf/velocity/product-doc.vm (revision 1470587) +++ solr/example/solr/collection1/conf/velocity/product-doc.vm (working copy) @@ -1,27 +0,0 @@ -
#field('name') #if($params.getBool('mlt', false) == false)More Like This#end
-##do we have a physical store for this product -#set($store = $doc.getFieldValue('store')) -#if($store)
Larger Map
#end -
Id: #field('id')
-
Price: #field('price_c')
-
Features: #field('features')
-
In Stock: #field('inStock')
-
- #set($mlt = $mltResults.get($docId)) - #set($mltOn = $params.getBool('mlt')) - #if($mltOn == true)
Similar Items
#end - #if ($mltOn && $mlt && $mlt.size() > 0) - - #elseif($mltOn && $mlt.size() == 0) -
No Similar Items Found
- #end -
-#parse('debug.vm') \ No newline at end of file Index: solr/example/solr/collection1/conf/velocity/hit.vm =================================================================== --- solr/example/solr/collection1/conf/velocity/hit.vm (revision 1470587) +++ solr/example/solr/collection1/conf/velocity/hit.vm (working copy) @@ -1,11 +1,25 @@ +#** + * Called for each matching document but then + * calls one of product_doc, join_doc or richtext_doc + * depending on which fields the doc has + *# + #set($docId = $doc.getFieldValue('id'))
-#if($doc.getFieldValue('name')) - #parse("product-doc.vm") -#elseif($doc.getFieldValue('compName_s')) - #parse("join-doc.vm") -#else - #parse("richtext-doc.vm") -#end + + ## Has a "name" field ? + #if($doc.getFieldValue('name')) + #parse("product_doc.vm") + + ## Has a "compName_s" field ? + #elseif($doc.getFieldValue('compName_s')) + #parse("join_doc.vm") + + ## Fallback to richtext_doc + #else + #parse("richtext_doc.vm") + + #end +
Index: solr/example/solr/collection1/conf/velocity/join_doc.vm =================================================================== --- solr/example/solr/collection1/conf/velocity/join_doc.vm (revision 1470587) +++ solr/example/solr/collection1/conf/velocity/join_doc.vm (working copy) @@ -1,4 +1,20 @@ -
#field('compName_s')
-
Id: #field('id') (company-details document for join)
-
Address: #field('address_s')
-#parse('debug.vm') \ No newline at end of file +#** + * Display documents that are joined to other documents + *# + +
+ #field('compName_s') +
+ +
+ Id: #field('id') + (company-details document for + join + ) +
+ +
+ Address: #field('address_s') +
+ +#parse('debug.vm') Index: solr/example/solr/collection1/conf/velocity/query_form.vm =================================================================== --- solr/example/solr/collection1/conf/velocity/query_form.vm (revision 1470587) +++ solr/example/solr/collection1/conf/velocity/query_form.vm (working copy) @@ -1,10 +1,27 @@ +#** + * Renders the main query form + *# +
+
- Find: -
Boost by Price - #parse("querySpatial.vm") - #parse("queryGroup.vm") + + Find: + + + + +
+ + + Boost by Price + + + #parse("query_spatial.vm") + #parse("query_group.vm")
@@ -19,16 +36,21 @@ #end #end +
#foreach($fq in $params.getParams('fq')) #set($previous_fq_count=$velocityCount - 1) #if($fq != '') - > $fq + > + $fq #end #end
+
- #if($request.params.get('debugQuery')) + #if($request.params.get('debugQuery')) toggle parsed query #end @@ -37,6 +59,6 @@ #end
+ -
Index: solr/example/solr/collection1/conf/velocity/header.vm =================================================================== --- solr/example/solr/collection1/conf/velocity/header.vm (revision 1470587) +++ solr/example/solr/collection1/conf/velocity/header.vm (working copy) @@ -1,3 +1,7 @@ +#** + * Render the top section of the page visible to users + *# + \ No newline at end of file +
Index: solr/example/solr/collection1/conf/velocity/error.vm =================================================================== --- solr/example/solr/collection1/conf/velocity/error.vm (revision 0) +++ solr/example/solr/collection1/conf/velocity/error.vm (revision 0) @@ -0,0 +1,11 @@ +#** + * Show Error Message, if any + *# + +## Show Error Message, if any +## Usually rendered inside div class=error + +#if( $response.response.error.code ) +

ERROR $response.response.error.code

+ $response.response.error.msg +#end Index: solr/example/solr/collection1/conf/velocity/did_you_mean.vm =================================================================== --- solr/example/solr/collection1/conf/velocity/did_you_mean.vm (revision 1470587) +++ solr/example/solr/collection1/conf/velocity/did_you_mean.vm (working copy) @@ -1,4 +1,9 @@ +#** + * Hyperlinked spelling suggestions in results list + *# + #set($dym = $response.response.spellcheck.suggestions.collation.collationQuery) #if($dym) - Did you mean $esc.html($dym)? -#end \ No newline at end of file + Did you mean + $esc.html($dym)? +#end Index: solr/example/solr/collection1/conf/velocity/browse.vm =================================================================== --- solr/example/solr/collection1/conf/velocity/browse.vm (revision 1470587) +++ solr/example/solr/collection1/conf/velocity/browse.vm (working copy) @@ -1,9 +1,13 @@ -#set($searcher=$request.searcher) -#set($params=$request.params) +#** + * Main entry point into the /browse templates + *# + +#set($searcher = $request.searcher) +#set($params = $request.params) #set($clusters = $response.response.clusters) #set($mltResults = $response.response.get("moreLikeThis")) #set($annotate = $params.get("annotateBrowse")) -#parse('query.vm') +#parse('query_form.vm') #parse('did_you_mean.vm') +## Show Error Message, if any
- #if(${response.response.error.code}) -

ERROR ${response.response.error.code}

- ${response.response.error.msg} - #end + #parse("error.vm")
+## Render Results, actual matching docs
- #if($response.response.get('grouped')) - #foreach($grouping in $response.response.get('grouped')) - #parse("hitGrouped.vm") - #end - #else - #foreach($doc in $response.results) - #parse("hit.vm") - #end - #end + #parse("results_list.vm")
Index: solr/example/solr/collection1/conf/velocity/join-doc.vm =================================================================== --- solr/example/solr/collection1/conf/velocity/join-doc.vm (revision 1470587) +++ solr/example/solr/collection1/conf/velocity/join-doc.vm (working copy) @@ -1,4 +0,0 @@ -
#field('compName_s')
-
Id: #field('id') (company-details document for join)
-
Address: #field('address_s')
-#parse('debug.vm') \ No newline at end of file Index: solr/example/solr/collection1/conf/velocity/query.vm =================================================================== --- solr/example/solr/collection1/conf/velocity/query.vm (revision 1470587) +++ solr/example/solr/collection1/conf/velocity/query.vm (working copy) @@ -1,42 +0,0 @@ -
-
-
- Find: -
Boost by Price - #parse("querySpatial.vm") - #parse("queryGroup.vm") -
-
- - #if($request.params.get('debugQuery')) - - #end - #if($annotate == true) - - #end - #foreach($fq in $request.params.getParams('fq')) - #if ($fq != "{!bbox}") - - #end - #end -
- #foreach($fq in $params.getParams('fq')) - #set($previous_fq_count=$velocityCount - 1) - #if($fq != '') - > $fq - #end - #end -
-
- #if($request.params.get('debugQuery')) - toggle parsed query - - #end - #set($queryOpts = $request.params.get("queryOpts")) - #if($queryOpts && $queryOpts != "") - - #end -
-
- -
Index: solr/example/solr/collection1/conf/velocity/facets.vm =================================================================== --- solr/example/solr/collection1/conf/velocity/facets.vm (revision 1470587) +++ solr/example/solr/collection1/conf/velocity/facets.vm (working copy) @@ -1,3 +1,8 @@ +#** + * Overall Facet display block + * Invokes the 4 facet and 1 cluster template + *# + #parse('facet_fields.vm') #parse('facet_queries.vm') #parse('facet_ranges.vm') @@ -2,2 +7,2 @@ #parse('facet_pivot.vm') -#parse('cluster.vm') \ No newline at end of file +#parse('cluster.vm') Index: solr/example/solr/collection1/conf/velocity/hit_plain.vm =================================================================== --- solr/example/solr/collection1/conf/velocity/hit_plain.vm (revision 0) +++ solr/example/solr/collection1/conf/velocity/hit_plain.vm (revision 0) @@ -0,0 +1,25 @@ +#** + * An extremely plain / debug version of hit.vm + *# + + + ## For each field + #foreach( $fieldName in $doc.fieldNames ) + ## For each value + #foreach( $value in $doc.getFieldValues($fieldName) ) + + ## Field Name + + ## Field Value(s) + + + #end ## end for each value + #end ## end for each field +
+ #if( $foreach.count == 1 ) + $fieldName: + #end + + $esc.html($value)
+
+
Index: solr/example/solr/collection1/conf/velocity/hit_grouped.vm =================================================================== --- solr/example/solr/collection1/conf/velocity/hit_grouped.vm (revision 1470587) +++ solr/example/solr/collection1/conf/velocity/hit_grouped.vm (working copy) @@ -1,24 +1,56 @@ +#** + * Display grouped results + *# +
-
$grouping.key
-
Total Matches in Group: $grouping.value.matches
-
#foreach ($group in $grouping.value.groups) -
$group.groupValue ($group.doclist.numFound)
-
- #foreach ($doc in $group.doclist) - #set($docId = $doc.getFieldValue('id')) - #if($doc.getFieldValue('name')) - #parse("product-doc.vm") - #elseif($doc.getFieldValue('compName_s')) - #parse("join-doc.vm") - #else - #parse("richtext-doc.vm") + +
+ $grouping.key +
+ +
+ Total Matches in Group: $grouping.value.matches +
+ +
## list of groups + + #foreach ($group in $grouping.value.groups) +
+ $group.groupValue + + ($group.doclist.numFound) + +
+ +
+ #foreach ($doc in $group.doclist) + #set($docId = $doc.getFieldValue('id')) + #if($doc.getFieldValue('name')) + #parse("product_doc.vm") + #elseif($doc.getFieldValue('compName_s')) + #parse("join_doc.vm") + #else + #parse("richtext_doc.vm") + #end #end - #end -
- #end
-
- #if($params.getBool("debugQuery",false)) - toggle explain -
$response.getExplainMap().get($doc.getFirstValue('id'))
- #end -
+
+ + #end ## end of foreach group in grouping.value.groups + ## div tag for entire list of groups + + ## end of div class=result-document + +## Debug Info +#if($params.getBool("debugQuery",false)) + + toggle explain +
+    $response.getExplainMap().get($doc.getFirstValue('id'))
+  
+#end + + ## TODO: pretty sure this is an extra div, OR we're missing a top level Index: solr/example/solr/collection1/conf/velocity/jquery.autocomplete.js =================================================================== --- solr/example/solr/collection1/conf/velocity/jquery.autocomplete.js (revision 1470587) +++ solr/example/solr/collection1/conf/velocity/jquery.autocomplete.js (working copy) @@ -1,763 +0,0 @@ -/* - * Autocomplete - jQuery plugin 1.1pre - * - * Copyright (c) 2007 Dylan Verheul, Dan G. Switzer, Anjesh Tuladhar, Jörn Zaefferer - * - * Dual licensed under the MIT and GPL licenses: - * http://www.opensource.org/licenses/mit-license.php - * http://www.gnu.org/licenses/gpl.html - * - * Revision: $Id: jquery.autocomplete.js 5785 2008-07-12 10:37:33Z joern.zaefferer $ - * - */ - -;(function($) { - -$.fn.extend({ - autocomplete: function(urlOrData, options) { - var isUrl = typeof urlOrData == "string"; - options = $.extend({}, $.Autocompleter.defaults, { - url: isUrl ? urlOrData : null, - data: isUrl ? null : urlOrData, - delay: isUrl ? $.Autocompleter.defaults.delay : 10, - max: options && !options.scroll ? 10 : 150 - }, options); - - // if highlight is set to false, replace it with a do-nothing function - options.highlight = options.highlight || function(value) { return value; }; - - // if the formatMatch option is not specified, then use formatItem for backwards compatibility - options.formatMatch = options.formatMatch || options.formatItem; - - return this.each(function() { - new $.Autocompleter(this, options); - }); - }, - result: function(handler) { - return this.bind("result", handler); - }, - search: function(handler) { - return this.trigger("search", [handler]); - }, - flushCache: function() { - return this.trigger("flushCache"); - }, - setOptions: function(options){ - return this.trigger("setOptions", [options]); - }, - unautocomplete: function() { - return this.trigger("unautocomplete"); - } -}); - -$.Autocompleter = function(input, options) { - - var KEY = { - UP: 38, - DOWN: 40, - DEL: 46, - TAB: 9, - RETURN: 13, - ESC: 27, - COMMA: 188, - PAGEUP: 33, - PAGEDOWN: 34, - BACKSPACE: 8 - }; - - // Create $ object for input element - var $input = $(input).attr("autocomplete", "off").addClass(options.inputClass); - - var timeout; - var previousValue = ""; - var cache = $.Autocompleter.Cache(options); - var hasFocus = 0; - var lastKeyPressCode; - var config = { - mouseDownOnSelect: false - }; - var select = $.Autocompleter.Select(options, input, selectCurrent, config); - - var blockSubmit; - - // prevent form submit in opera when selecting with return key - $.browser.opera && $(input.form).bind("submit.autocomplete", function() { - if (blockSubmit) { - blockSubmit = false; - return false; - } - }); - - // only opera doesn't trigger keydown multiple times while pressed, others don't work with keypress at all - $input.bind(($.browser.opera ? "keypress" : "keydown") + ".autocomplete", function(event) { - // track last key pressed - lastKeyPressCode = event.keyCode; - switch(event.keyCode) { - - case KEY.UP: - event.preventDefault(); - if ( select.visible() ) { - select.prev(); - } else { - onChange(0, true); - } - break; - - case KEY.DOWN: - event.preventDefault(); - if ( select.visible() ) { - select.next(); - } else { - onChange(0, true); - } - break; - - case KEY.PAGEUP: - event.preventDefault(); - if ( select.visible() ) { - select.pageUp(); - } else { - onChange(0, true); - } - break; - - case KEY.PAGEDOWN: - event.preventDefault(); - if ( select.visible() ) { - select.pageDown(); - } else { - onChange(0, true); - } - break; - - // matches also semicolon - case options.multiple && $.trim(options.multipleSeparator) == "," && KEY.COMMA: - case KEY.TAB: - case KEY.RETURN: - if( selectCurrent() ) { - // stop default to prevent a form submit, Opera needs special handling - event.preventDefault(); - blockSubmit = true; - return false; - } - break; - - case KEY.ESC: - select.hide(); - break; - - default: - clearTimeout(timeout); - timeout = setTimeout(onChange, options.delay); - break; - } - }).focus(function(){ - // track whether the field has focus, we shouldn't process any - // results if the field no longer has focus - hasFocus++; - }).blur(function() { - hasFocus = 0; - if (!config.mouseDownOnSelect) { - hideResults(); - } - }).click(function() { - // show select when clicking in a focused field - if ( hasFocus++ > 1 && !select.visible() ) { - onChange(0, true); - } - }).bind("search", function() { - // TODO why not just specifying both arguments? - var fn = (arguments.length > 1) ? arguments[1] : null; - function findValueCallback(q, data) { - var result; - if( data && data.length ) { - for (var i=0; i < data.length; i++) { - if( data[i].result.toLowerCase() == q.toLowerCase() ) { - result = data[i]; - break; - } - } - } - if( typeof fn == "function" ) fn(result); - else $input.trigger("result", result && [result.data, result.value]); - } - $.each(trimWords($input.val()), function(i, value) { - request(value, findValueCallback, findValueCallback); - }); - }).bind("flushCache", function() { - cache.flush(); - }).bind("setOptions", function() { - $.extend(options, arguments[1]); - // if we've updated the data, repopulate - if ( "data" in arguments[1] ) - cache.populate(); - }).bind("unautocomplete", function() { - select.unbind(); - $input.unbind(); - $(input.form).unbind(".autocomplete"); - }); - - - function selectCurrent() { - var selected = select.selected(); - if( !selected ) - return false; - - var v = selected.result; - previousValue = v; - - if ( options.multiple ) { - var words = trimWords($input.val()); - if ( words.length > 1 ) { - v = words.slice(0, words.length - 1).join( options.multipleSeparator ) + options.multipleSeparator + v; - } - v += options.multipleSeparator; - } - - $input.val(v); - hideResultsNow(); - $input.trigger("result", [selected.data, selected.value]); - return true; - } - - function onChange(crap, skipPrevCheck) { - if( lastKeyPressCode == KEY.DEL ) { - select.hide(); - return; - } - - var currentValue = $input.val(); - - if ( !skipPrevCheck && currentValue == previousValue ) - return; - - previousValue = currentValue; - - currentValue = lastWord(currentValue); - if ( currentValue.length >= options.minChars) { - $input.addClass(options.loadingClass); - if (!options.matchCase) - currentValue = currentValue.toLowerCase(); - request(currentValue, receiveData, hideResultsNow); - } else { - stopLoading(); - select.hide(); - } - }; - - function trimWords(value) { - if ( !value ) { - return [""]; - } - var words = value.split( options.multipleSeparator ); - var result = []; - $.each(words, function(i, value) { - if ( $.trim(value) ) - result[i] = $.trim(value); - }); - return result; - } - - function lastWord(value) { - if ( !options.multiple ) - return value; - var words = trimWords(value); - return words[words.length - 1]; - } - - // fills in the input box w/the first match (assumed to be the best match) - // q: the term entered - // sValue: the first matching result - function autoFill(q, sValue){ - // autofill in the complete box w/the first match as long as the user hasn't entered in more data - // if the last user key pressed was backspace, don't autofill - if( options.autoFill && (lastWord($input.val()).toLowerCase() == q.toLowerCase()) && lastKeyPressCode != KEY.BACKSPACE ) { - // fill in the value (keep the case the user has typed) - $input.val($input.val() + sValue.substring(lastWord(previousValue).length)); - // select the portion of the value not typed by the user (so the next character will erase) - $.Autocompleter.Selection(input, previousValue.length, previousValue.length + sValue.length); - } - }; - - function hideResults() { - clearTimeout(timeout); - timeout = setTimeout(hideResultsNow, 200); - }; - - function hideResultsNow() { - var wasVisible = select.visible(); - select.hide(); - clearTimeout(timeout); - stopLoading(); - if (options.mustMatch) { - // call search and run callback - $input.search( - function (result){ - // if no value found, clear the input box - if( !result ) { - if (options.multiple) { - var words = trimWords($input.val()).slice(0, -1); - $input.val( words.join(options.multipleSeparator) + (words.length ? options.multipleSeparator : "") ); - } - else - $input.val( "" ); - } - } - ); - } - if (wasVisible) - // position cursor at end of input field - $.Autocompleter.Selection(input, input.value.length, input.value.length); - }; - - function receiveData(q, data) { - if ( data && data.length && hasFocus ) { - stopLoading(); - select.display(data, q); - autoFill(q, data[0].value); - select.show(); - } else { - hideResultsNow(); - } - }; - - function request(term, success, failure) { - if (!options.matchCase) - term = term.toLowerCase(); - var data = cache.load(term); - data = null; // Avoid buggy cache and go to Solr every time - // recieve the cached data - if (data && data.length) { - success(term, data); - // if an AJAX url has been supplied, try loading the data now - } else if( (typeof options.url == "string") && (options.url.length > 0) ){ - - var extraParams = { - timestamp: +new Date() - }; - $.each(options.extraParams, function(key, param) { - extraParams[key] = typeof param == "function" ? param() : param; - }); - - $.ajax({ - // try to leverage ajaxQueue plugin to abort previous requests - mode: "abort", - // limit abortion to this input - port: "autocomplete" + input.name, - dataType: options.dataType, - url: options.url, - data: $.extend({ - q: lastWord(term), - limit: options.max - }, extraParams), - success: function(data) { - var parsed = options.parse && options.parse(data) || parse(data); - cache.add(term, parsed); - success(term, parsed); - } - }); - } else { - // if we have a failure, we need to empty the list -- this prevents the the [TAB] key from selecting the last successful match - select.emptyList(); - failure(term); - } - }; - - function parse(data) { - var parsed = []; - var rows = data.split("\n"); - for (var i=0; i < rows.length; i++) { - var row = $.trim(rows[i]); - if (row) { - row = row.split("|"); - parsed[parsed.length] = { - data: row, - value: row[0], - result: options.formatResult && options.formatResult(row, row[0]) || row[0] - }; - } - } - return parsed; - }; - - function stopLoading() { - $input.removeClass(options.loadingClass); - }; - -}; - -$.Autocompleter.defaults = { - inputClass: "ac_input", - resultsClass: "ac_results", - loadingClass: "ac_loading", - minChars: 1, - delay: 400, - matchCase: false, - matchSubset: true, - matchContains: false, - cacheLength: 10, - max: 100, - mustMatch: false, - extraParams: {}, - selectFirst: false, - formatItem: function(row) { return row[0]; }, - formatMatch: null, - autoFill: false, - width: 0, - multiple: false, - multipleSeparator: ", ", - highlight: function(value, term) { - return value.replace(new RegExp("(?![^&;]+;)(?!<[^<>]*)(" + term.replace(/([\^\$\(\)\[\]\{\}\*\.\+\?\|\\])/gi, "\\$1") + ")(?![^<>]*>)(?![^&;]+;)", "gi"), "$1"); - }, - scroll: true, - scrollHeight: 180 -}; - -$.Autocompleter.Cache = function(options) { - - var data = {}; - var length = 0; - - function matchSubset(s, sub) { - if (!options.matchCase) - s = s.toLowerCase(); - var i = s.indexOf(sub); - if (options.matchContains == "word"){ - i = s.toLowerCase().search("\\b" + sub.toLowerCase()); - } - if (i == -1) return false; - return i == 0 || options.matchContains; - }; - - function add(q, value) { - if (length > options.cacheLength){ - flush(); - } - if (!data[q]){ - length++; - } - data[q] = value; - } - - function populate(){ - if( !options.data ) return false; - // track the matches - var stMatchSets = {}, - nullData = 0; - - // no url was specified, we need to adjust the cache length to make sure it fits the local data store - if( !options.url ) options.cacheLength = 1; - - // track all options for minChars = 0 - stMatchSets[""] = []; - - // loop through the array and create a lookup structure - for ( var i = 0, ol = options.data.length; i < ol; i++ ) { - var rawValue = options.data[i]; - // if rawValue is a string, make an array otherwise just reference the array - rawValue = (typeof rawValue == "string") ? [rawValue] : rawValue; - - var value = options.formatMatch(rawValue, i+1, options.data.length); - if ( value === false ) - continue; - - var firstChar = value.charAt(0).toLowerCase(); - // if no lookup array for this character exists, look it up now - if( !stMatchSets[firstChar] ) - stMatchSets[firstChar] = []; - - // if the match is a string - var row = { - value: value, - data: rawValue, - result: options.formatResult && options.formatResult(rawValue) || value - }; - - // push the current match into the set list - stMatchSets[firstChar].push(row); - - // keep track of minChars zero items - if ( nullData++ < options.max ) { - stMatchSets[""].push(row); - } - }; - - // add the data items to the cache - $.each(stMatchSets, function(i, value) { - // increase the cache size - options.cacheLength++; - // add to the cache - add(i, value); - }); - } - - // populate any existing data - setTimeout(populate, 25); - - function flush(){ - data = {}; - length = 0; - } - - return { - flush: flush, - add: add, - populate: populate, - load: function(q) { - if (!options.cacheLength || !length) - return null; - /* - * if dealing w/local data and matchContains than we must make sure - * to loop through all the data collections looking for matches - */ - if( !options.url && options.matchContains ){ - // track all matches - var csub = []; - // loop through all the data grids for matches - for( var k in data ){ - // don't search through the stMatchSets[""] (minChars: 0) cache - // this prevents duplicates - if( k.length > 0 ){ - var c = data[k]; - $.each(c, function(i, x) { - // if we've got a match, add it to the array - if (matchSubset(x.value, q)) { - csub.push(x); - } - }); - } - } - return csub; - } else - // if the exact item exists, use it - if (data[q]){ - return data[q]; - } else - if (options.matchSubset) { - for (var i = q.length - 1; i >= options.minChars; i--) { - var c = data[q.substr(0, i)]; - if (c) { - var csub = []; - $.each(c, function(i, x) { - if (matchSubset(x.value, q)) { - csub[csub.length] = x; - } - }); - return csub; - } - } - } - return null; - } - }; -}; - -$.Autocompleter.Select = function (options, input, select, config) { - var CLASSES = { - ACTIVE: "ac_over" - }; - - var listItems, - active = -1, - data, - term = "", - needsInit = true, - element, - list; - - // Create results - function init() { - if (!needsInit) - return; - element = $("
") - .hide() - .addClass(options.resultsClass) - .css("position", "absolute") - .appendTo(document.body); - - list = $("
+ +## Row 2?: ID / URL
-#if($doc.getFieldValue('resourcename'))Resource name: $filename -#elseif($url)URL: $url + Id: #field('id') +
+ +## Resource Name +
+ #if($doc.getFieldValue('resourcename')) + Resource name: $filename + #elseif($url) + URL: $url + #end + #if($ct) + ($ct) + #end +
+ +## Author +#if($doc.getFieldValue('author')) +
+ Author: #field('author') +
#end -#if($ct) ($ct)#end + +## Last_Modified Date +#if($doc.getFieldValue('last_modified')) +
+ last-modified: + #field('last_modified') +
+#end + +## Main content of doc +
+ #field('content')
-#if($doc.getFieldValue('author'))
Author: #field('author')
#end -#if($doc.getFieldValue('last_modified'))
last-modified: #field('last_modified')
#end -
#field('content')
+ +## Display Similar Documents / MLT = More Like This
#set($mlt = $mltResults.get($docId)) #set($mltOn = $params.getBool('mlt')) - #if($mltOn == true)
Similar Items
#end + #if($mltOn == true) +
+ Similar Items +
+ #end + ## If has MLT enabled An Entries to show #if ($mltOn && $mlt && $mlt.size() > 0) - + + ## Else MLT Enabled but no mlt results for this query #elseif($mltOn && $mlt.size() == 0)
No Similar Items Found
#end -
-#parse('debug.vm') \ No newline at end of file + ## div class=mlt + +#parse('debug.vm') Index: solr/example/solr/collection1/conf/velocity/facet_ranges.vm =================================================================== --- solr/example/solr/collection1/conf/velocity/facet_ranges.vm (revision 1470587) +++ solr/example/solr/collection1/conf/velocity/facet_ranges.vm (working copy) @@ -1,4 +1,12 @@ -

Range Facets

+#** + * Display facets based on ranges of values, AKA "Bukets" + * e.g.: ranges specified by &facet.range= + *# + +

+ Range Facets +

+ #foreach ($field in $response.response.facet_counts.facet_ranges) ## Hide facets without value #if($field.value.counts.size() > 0) @@ -11,5 +19,5 @@ #set($before = $field.value.before) #set($after = $field.value.after) #display_facet_range($f, $display, $name, $start, $end, $gap, $before, $after) - #end -#end \ No newline at end of file + #end ## end if has any values +#end ## end for each facet range Index: solr/example/solr/collection1/conf/velocity/query_group.vm =================================================================== --- solr/example/solr/collection1/conf/velocity/query_group.vm (revision 1470587) +++ solr/example/solr/collection1/conf/velocity/query_group.vm (working copy) @@ -1,19 +1,42 @@ +#** + * Query settings for grouping by fields, + * e.g.: Manufacturer or Poplularity + *# + #set($queryOpts = $params.get("queryOpts")) + #if($queryOpts == "group") -
- #set($groupF = $request.params.get('group.field')) - - -
+
+ #set($groupF = $request.params.get('group.field')) -#end \ No newline at end of file + + + + +
+ +#end Index: solr/example/solr/collection1/conf/velocity/suggest.vm =================================================================== --- solr/example/solr/collection1/conf/velocity/suggest.vm (revision 1470587) +++ solr/example/solr/collection1/conf/velocity/suggest.vm (working copy) @@ -1,3 +1,8 @@ +#** + * Provides cynamic spelling suggestions + * as you type in the search form + *# + #foreach($t in $response.response.terms.name) -$t.key -#end \ No newline at end of file + $t.key +#end Index: solr/example/solr/collection1/conf/velocity/queryGroup.vm =================================================================== --- solr/example/solr/collection1/conf/velocity/queryGroup.vm (revision 1470587) +++ solr/example/solr/collection1/conf/velocity/queryGroup.vm (working copy) @@ -1,19 +0,0 @@ -#set($queryOpts = $params.get("queryOpts")) -#if($queryOpts == "group") -
- #set($groupF = $request.params.get('group.field')) - - -
- -#end \ No newline at end of file Index: solr/example/solr/collection1/conf/velocity/jquery.autocomplete.css =================================================================== --- solr/example/solr/collection1/conf/velocity/jquery.autocomplete.css (revision 1470587) +++ solr/example/solr/collection1/conf/velocity/jquery.autocomplete.css (working copy) @@ -1,48 +0,0 @@ -.ac_results { - padding: 0px; - border: 1px solid black; - background-color: white; - overflow: hidden; - z-index: 99999; -} - -.ac_results ul { - width: 100%; - list-style-position: outside; - list-style: none; - padding: 0; - margin: 0; -} - -.ac_results li { - margin: 0px; - padding: 2px 5px; - cursor: default; - display: block; - /* - if width will be 100% horizontal scrollbar will apear - when scroll mode will be used - */ - /*width: 100%;*/ - font: menu; - font-size: 12px; - /* - it is very important, if line-height not setted or setted - in relative units scroll will be broken in firefox - */ - line-height: 16px; - overflow: hidden; -} - -.ac_loading { - background: white url('indicator.gif') right center no-repeat; -} - -.ac_odd { - background-color: #eee; -} - -.ac_over { - background-color: #0A246A; - color: white; -} Index: solr/example/solr/collection1/conf/velocity/debug.vm =================================================================== --- solr/example/solr/collection1/conf/velocity/debug.vm (revision 1470587) +++ solr/example/solr/collection1/conf/velocity/debug.vm (working copy) @@ -1,17 +1,28 @@ -#if($params.getBool("debugQuery",false)) - toggle explain -
$response.getExplainMap().get($doc.getFirstValue('id'))
- toggle all fields +#** + * Show Debugging Information, if enabled + *# + +#if( $params.getBool("debugQuery",false) ) + + toggle explain + +
+    $response.getExplainMap().get($doc.getFirstValue('id'))
+  
+ + + toggle all fields + - #foreach($fieldname in $doc.fieldNames) -
- $fieldname : - - #foreach($value in $doc.getFieldValues($fieldname)) - $esc.html($value) - #end - - #end -
+ #foreach($fieldname in $doc.fieldNames) +
+ $fieldname : + + #foreach($value in $doc.getFieldValues($fieldname)) + $esc.html($value) + #end + +
+ #end
-#end \ No newline at end of file +#end Index: solr/example/solr/collection1/conf/velocity/VM_global_library.vm =================================================================== --- solr/example/solr/collection1/conf/velocity/VM_global_library.vm (revision 1470587) +++ solr/example/solr/collection1/conf/velocity/VM_global_library.vm (working copy) @@ -1,3 +1,8 @@ +#** + * Global macros used by other templates. + * This file must be named VM_global_library.vm + * in order for Velocity to find it. + *# #macro(param $key)$request.params.get($key)#end @@ -167,4 +172,4 @@ #else $math.add($inval,$gapval)## #end -#end \ No newline at end of file +#end Index: solr/example/solr/collection1/conf/velocity/tabs.vm =================================================================== --- solr/example/solr/collection1/conf/velocity/tabs.vm (revision 1470587) +++ solr/example/solr/collection1/conf/velocity/tabs.vm (working copy) @@ -1,6 +1,50 @@ +#** + * Provides navigation/access to Advanced search options + * Usually displayed near the top of the page + *# + ##TODO: Make some nice tabs here + #set($queryOpts = $params.get("queryOpts")) -Examples: #if($queryOpts && $queryOpts != "")Simple#{else}Simple#end -#if($queryOpts == "spatial")Spatial#elseSpatial#end -#if($queryOpts == "group")Group By#elseGroup By#end -
\ No newline at end of file + +
+ + Type of Search: + + ##queryOpts=$queryOpts + + ## return to Simple Search + ##set( $selected = ($queryOpts && $queryOpts != "") ) + #set( $selected = ! $queryOpts ) + + #if($selected) + Simple + #else + + Simple + #end + + + ## GEO-Spatial / Location Based + #set( $selected = ($queryOpts == "spatial") ) + + #if($selected) + Spatial + #else + + Spatial + #end + + + ## Group By Field + #set( $selected = ($queryOpts == "group") ) + + #if($selected) + Group By + #else + + Group By + #end + + +
Index: solr/example/solr/collection1/conf/velocity/README.txt =================================================================== --- solr/example/solr/collection1/conf/velocity/README.txt (revision 0) +++ solr/example/solr/collection1/conf/velocity/README.txt (revision 0) @@ -0,0 +1,101 @@ +Introduction +------------ +Solr Search Velocity Templates + +A quick demo of using Solr. These were previously called Solritas + +You typically access these templates via: + http://localhost:8983/solr/collection1/browse + +It's called "browse" because you can click around with your mouse +without needing to type any search terms. And of course it +also works as a standard search app as well. + +Known Limitations +----------------- +* The /browse and the VelocityResponseWriter component + serve content directly from Solr, which usually requires + Solr's rest API to be exposed. Advanced users could + potentially access other parts of Solr directly. +* There are some hard coded fields in these templates. + Since these templates live under conf, they should be + considered part of the overall configuation, and + must be coordinated with schema.xml and solrconfig.xml + +Velocity Info +------------- +Java-based template language. + +It's nice in this context because change to the templates +are immediately visible in browser on the next visit. + +Links: + http://velocity.apache.org + http://wiki.apache.org/velocity/ + http://velocity.apache.org/engine/releases/velocity-1.7/user-guide.html + + +File List +--------- + +System and Misc: + VM_global_library.vm - Macros used other templates, + exact filename is important for Velocity to see it + error.vm - shows errors, if any + debug.vm - includes toggle links for "explain" and "all fields" + activated by debug link in footer.vm + README.txt - this file + +Overall Page Composition: + browse.vm - Main entry point into templates + layout.vm - overall HTML page layout + head.vm - elements in the section of the HTML document + header.vm - top section of page visible to users + footer.vm - bottom section of page visible to users, + includes debug and help links + main.css - CSS style for overall pages + see also jquery_autocomplete.css + +Query Form and Options: + query_form.vm - renders query form + query_group.vm - group by fields + e.g.: Manufacturer or Poplularity + query_spatial.vm - select box for location based Geospacial search + +Spelling Suggestions: + did_you_mean.vm - hyperlinked spelling suggestions in results + suggest.vm - dynamic spelling suggestions + as you type in the search form + jquery_autocomplete.js - supporting files for dynamic suggestions + jquery_autocomplete.css - Most CSS is defined in main.css + + +Search Results, General: + (see also browse.vm) + tabs.vm - provides navigation to advanced search options + pagination_top.vm - paging and staticis at top of results + pagination_bottom.vm - paging and staticis at bottom of results + results_list.vm + hit.vm - called for each matching doc, + decides which template to use + hit_grouped.vm - display results grouped by field values + product_doc.vm - display a Product + join_doc.vm - display a joined document + richtext_doc.vm - display a complex/misc. document + hit_plain.vm - basic display of all fields, + edit results_list.vm to enable this + + +Search Results, Facets & Clusters: + facets.vm - calls the 4 facet and 1 cluster template + facet_fields.vm - display facets based on field values + e.g.: fields specified by &facet.field= + facet_queries.vm - display facets based on specific facet queries + e.g.: facets specified by &facet.query= + facet_ranges.vm - display facets based on ranges + e.g.: ranges specified by &facet.range= + facet_pivot.vm - display pivot based facets + e.g.: facets specified by &facet.pivot= + cluster.vm - if clustering is available + then call cluster_results.vm + cluster_results.vm - actual rendering of clusters Index: solr/example/solr/collection1/conf/velocity/main.css =================================================================== --- solr/example/solr/collection1/conf/velocity/main.css (revision 1470587) +++ solr/example/solr/collection1/conf/velocity/main.css (working copy) @@ -49,10 +49,32 @@ position: relative; } +.tabs-bar { + padding: 5px; + width: 100%; + border: 1px solid; + border-width: 0px 0px 1px 0px; +} +.tab { + font-weight: bold; + padding: 5px; + margin: 0px 5px; + border: 1px solid; + background-color: #dddddd; + border-top-left-radius: 4px; + border-top-right-radius: 4px; +} +.tab:hover { + background: #FEC293; +} +.tab.selected { + background-color: #ffffff; + border-bottom: 1px solid #ffffff; +} + .navigators h2 { background: #FEC293; - border: 1px solid #ce9d77; - padding: 5px; + padding: 2px 5px; } .navigators ul { Index: solr/example/solr/collection1/conf/velocity/results_list.vm =================================================================== --- solr/example/solr/collection1/conf/velocity/results_list.vm (revision 0) +++ solr/example/solr/collection1/conf/velocity/results_list.vm (revision 0) @@ -0,0 +1,22 @@ +#** + * Render the main Results List + *# + +## Usually displayed inside div class=results + +#if($response.response.get('grouped')) + + #foreach($grouping in $response.response.get('grouped')) + #parse("hit_grouped.vm") + #end + +#else + + #foreach($doc in $response.results) + #parse("hit.vm") + ## Can get an extremely simple view of the doc + ## which might be nicer for debugging + ##parse("hit_plain.vm") + #end + +#end Index: solr/example/solr/collection1/conf/velocity/richtext-doc.vm =================================================================== --- solr/example/solr/collection1/conf/velocity/richtext-doc.vm (revision 1470587) +++ solr/example/solr/collection1/conf/velocity/richtext-doc.vm (working copy) @@ -1,114 +0,0 @@ -## Mimetype to extension map for detecting file type and show icon -## List of types match the icons in /solr/img/filetypes -#set($extMap = {"application/x-7z-compressed": "7z", - "application/postscript": "ai", - "application/pgp-signature": "asc", - "application/octet-stream": "bin", - "application/x-bzip2": "bz2", - "text/x-c": "c", - "application/vnd.ms-htmlhelp": "chm", - "application/java-vm": "class", - "text/css": "css", - "text/csv": "csv", - "application/x-debian-package": "deb", - "application/msword": "doc", - "message/rfc822": "eml", - "image/gif": "gif", - "application/winhlp": "hlp", - "text/html": "html", - "application/java-archive": "jar", - "text/x-java-source": "java", - "image/jpeg": "jpeg", - "application/javascript": "js", - "application/vnd.oasis.opendocument.chart": "odc", - "application/vnd.oasis.opendocument.formula": "odf", - "application/vnd.oasis.opendocument.graphics": "odg", - "application/vnd.oasis.opendocument.image": "odi", - "application/vnd.oasis.opendocument.presentation": "odp", - "application/vnd.oasis.opendocument.spreadsheet": "ods", - "application/vnd.oasis.opendocument.text": "odt", - "application/pdf": "pdf", - "application/pgp-encrypted": "pgp", - "image/png": "png", - "application/vnd.ms-powerpoint": "ppt", - "audio/x-pn-realaudio": "ram", - "application/x-rar-compressed": "rar", - "application/vnd.rn-realmedia": "rm", - "application/rtf": "rtf", - "application/x-shockwave-flash": "swf", - "application/vnd.sun.xml.calc": "sxc", - "application/vnd.sun.xml.draw": "sxd", - "application/vnd.sun.xml.impress": "sxi", - "application/vnd.sun.xml.writer": "sxw", - "application/x-tar": "tar", - "application/x-tex": "tex", - "text/plain": "txt", - "text/x-vcard": "vcf", - "application/vnd.visio": "vsd", - "audio/x-wav": "wav", - "audio/x-ms-wma": "wma", - "video/x-ms-wmv": "wmv", - "application/vnd.ms-excel": "xls", - "application/xml": "xml", - "application/x-xpinstall": "xpi", - "application/zip": "zip"}) - - -#if($doc.getFieldValue('title')) - #set($title = $esc.html($doc.getFirstValue('title'))) -#else - #set($title = "["+$doc.getFieldValue('id')+"]") -#end -#if($doc.getFieldValue('url')) - #set($url = $doc.getFieldValue('url')) -#elseif($doc.getFieldValue('resourcename')) - #set($url = "file:///$doc.getFieldValue('resourcename')") -#else - #set($url = "$doc.getFieldValue('id')") -#end -#set($supportedtypes = "7z;ai;aiff;asc;audio;bin;bz2;c;cfc;cfm;chm;class;conf;cpp;cs;css;csv;deb;divx;doc;dot;eml;enc;file;gif;gz;hlp;htm;html;image;iso;jar;java;jpeg;jpg;js;lua;m;mm;mov;mp3;mpg;odc;odf;odg;odi;odp;ods;odt;ogg;pdf;pgp;php;pl;png;ppt;ps;py;ram;rar;rb;rm;rpm;rtf;sig;sql;swf;sxc;sxd;sxi;sxw;tar;tex;tgz;txt;vcf;video;vsd;wav;wma;wmv;xls;xml;xpi;xvid;zip") -#set($ct = $list.get($doc.getFirstValue('content_type').split(";"),0)) -#set($filename = $doc.getFieldValue('resourcename')) - -#set($filetype = false) -#set($filetype = $extMap.get($ct)) -##TODO: falling back to file extension is convenient, except when you don't have an icon for that extension -## example "application/vnd.openxmlformats-officedocument.wordprocessingml.document" document -## with a .docx extension. It'd be nice to fall back to an "unknown" or the existing "file" type -## We sort of do this below, but only if the filename has no extension (anything after the last dot). -#if(!$filetype)#set($filetype = $filename.substring($filename.lastIndexOf(".")).substring(1))#end -##if(!$filetype)#set($filetype = "file")#end -##if(!$supportedtypes.contains($filetype))#set($filetype = "file")#end -
-## Small file type icons from http://www.splitbrain.org/projects/file_icons (public domain) - -$title #if($params.getBool('mlt', false) == false)More Like This#end
-
Id: #field('id')
-
-#if($doc.getFieldValue('resourcename'))Resource name: $filename -#elseif($url)URL: $url -#end -#if($ct) ($ct)#end -
-#if($doc.getFieldValue('author'))
Author: #field('author')
#end -#if($doc.getFieldValue('last_modified'))
last-modified: #field('last_modified')
#end -
#field('content')
-
- #set($mlt = $mltResults.get($docId)) - #set($mltOn = $params.getBool('mlt')) - #if($mltOn == true)
Similar Items
#end - #if ($mltOn && $mlt && $mlt.size() > 0) - - #elseif($mltOn && $mlt.size() == 0) -
No Similar Items Found
- #end -
-#parse('debug.vm') \ No newline at end of file