diff options
author | bob <bcz@cs.brown.edu> | 2019-08-19 10:11:59 -0400 |
---|---|---|
committer | bob <bcz@cs.brown.edu> | 2019-08-19 10:11:59 -0400 |
commit | e37bf9124c952aa26c3e29deb9e4faa01cad1a7e (patch) | |
tree | be44ae9bd5e2eb6c5ce392383d41505b5863d061 /solr-8.1.1/example/files/conf/velocity | |
parent | 07482c3bf435748140addfd4fd338fc668657798 (diff) | |
parent | b037aa89fb564812f880994453ce002054a0ad82 (diff) |
Merge branch 'master' into presentation_f
Diffstat (limited to 'solr-8.1.1/example/files/conf/velocity')
21 files changed, 1565 insertions, 0 deletions
diff --git a/solr-8.1.1/example/files/conf/velocity/browse.vm b/solr-8.1.1/example/files/conf/velocity/browse.vm new file mode 100644 index 000000000..535a7713b --- /dev/null +++ b/solr-8.1.1/example/files/conf/velocity/browse.vm @@ -0,0 +1,32 @@ +<div id="query-box"> + <form id="query-form" action="#{url_for_home}" method="GET"> + $resource.find: + <input type="text" id="q" name="q" style="width: 50%" value="$!esc.html($request.params.get('q'))"/> + <input type="submit" value="$resource.submit"/> + <div id="debug_query" class="debug"> + <span id="parsed_query">$esc.html($response.response.debug.parsedquery)</span> + </div> + + <input type="hidden" name="type" value="#current_type"/> + #if("#current_locale"!="")<input type="hidden" value="locale" value="#current_locale"/>#end + #foreach($fq in $response.responseHeader.params.getAll("fq")) + <input type="hidden" name="fq" id="allFQs" value="$esc.html($fq)"/> + #end + </form> + + <div id="constraints"> + #foreach($fq in $response.responseHeader.params.getAll("fq")) + #set($previous_fq_count=$velocityCount - 1) + #if($fq != '') + > $fq<a href="#url_for_filters($response.responseHeader.params.fq.subList(0,$previous_fq_count))">x</a> + #end + #end + </div> + +</div> + + +<div id="browse_results"> + #parse("results.vm") +</div> + diff --git a/solr-8.1.1/example/files/conf/velocity/dropit.js b/solr-8.1.1/example/files/conf/velocity/dropit.js new file mode 100644 index 000000000..8b1378917 --- /dev/null +++ b/solr-8.1.1/example/files/conf/velocity/dropit.js @@ -0,0 +1 @@ + diff --git a/solr-8.1.1/example/files/conf/velocity/facet_doc_type.vm b/solr-8.1.1/example/files/conf/velocity/facet_doc_type.vm new file mode 100644 index 000000000..ff471674c --- /dev/null +++ b/solr-8.1.1/example/files/conf/velocity/facet_doc_type.vm @@ -0,0 +1,2 @@ +## intentionally empty + diff --git a/solr-8.1.1/example/files/conf/velocity/facet_text_shingles.vm b/solr-8.1.1/example/files/conf/velocity/facet_text_shingles.vm new file mode 100644 index 000000000..e8191779a --- /dev/null +++ b/solr-8.1.1/example/files/conf/velocity/facet_text_shingles.vm @@ -0,0 +1,12 @@ +<div id="facet_$field.name"> + <span class="facet-field">$resource.facet.top_phrases</span><br/> + + <ul id="tagcloud"> + #foreach($facet in $sort.sort($field.values,"name")) + <li data-weight="$math.mul($facet.count,1)"> + <a href="#url_for_facet_filter($field.name, $facet.name)">$facet.name</a> + </li> + + #end + </ul> +</div> diff --git a/solr-8.1.1/example/files/conf/velocity/facets.vm b/solr-8.1.1/example/files/conf/velocity/facets.vm new file mode 100644 index 000000000..bb27b5cea --- /dev/null +++ b/solr-8.1.1/example/files/conf/velocity/facets.vm @@ -0,0 +1,24 @@ +#if($response.facetFields.size() > 0) + #foreach($field in $response.facetFields) + #if($field.values.size() > 0) + #if($engine.resourceExists("facet_${field.name}.vm")) + #parse("facet_${field.name}.vm") + #else + <div id="facet_$field.name" class="facet_field"> + <span class="facet-field">#label("facet.${field.name}",$field.name)</span><br/> + + <ul> + #foreach($facet in $field.values) + <li><a href="#url_for_facet_filter($field.name, $facet.name)">#if($facet.name!=$null)#label("${field.name}.${facet.name}","${field.name}.${facet.name}")#else<em>missing</em>#end</a> ($facet.count)</li> + #end + </ul> + </div> + #end + #end + #end ## end if field.values > 0 +#end ## end if facetFields > 0 + + + + + diff --git a/solr-8.1.1/example/files/conf/velocity/footer.vm b/solr-8.1.1/example/files/conf/velocity/footer.vm new file mode 100644 index 000000000..e33a7827d --- /dev/null +++ b/solr-8.1.1/example/files/conf/velocity/footer.vm @@ -0,0 +1,29 @@ +<hr/> + +<div> + + <div id="admin"><a href="#url_root/index.html#/#{core_name}">Solr Admin</a></div> + + <a href="#" onclick='jQuery(".debug").toggle(); return false;'>toggle debug mode</a> + <a href="#url_for_lens&wt=xml#if($debug)&debug=true#end">XML results</a> ## TODO: Add links for other formats, maybe dynamically? + +</div> + +<div> + <a href="http://lucene.apache.org/solr">Solr Home Page</a> +</div> + + +<div class="debug"> + <hr/> + Request: + <pre> + $esc.html($request) + </pre> + + <hr/> + Debug: + <pre> + $esc.html($response.response.debug) + </pre> +</div> diff --git a/solr-8.1.1/example/files/conf/velocity/head.vm b/solr-8.1.1/example/files/conf/velocity/head.vm new file mode 100644 index 000000000..3c98747ac --- /dev/null +++ b/solr-8.1.1/example/files/conf/velocity/head.vm @@ -0,0 +1,290 @@ +<title>Solr browse: #core_name</title> + +<meta http-equiv="content-type" content="text/html; charset=UTF-8"/> + +<link rel="icon" type="image/x-icon" href="#{url_root}/img/favicon.ico"/> +<link rel="shortcut icon" type="image/x-icon" href="#{url_root}/img/favicon.ico"/> + +<script type="text/javascript" src="#{url_root}/libs/jquery-1.7.2.min.js"></script> +<script type="text/javascript" src="#{url_for_solr}/admin/file?file=/velocity/js/jquery.tx3-tag-cloud.js&contentType=text/javascript"></script> +<script type="text/javascript" src="#{url_for_solr}/admin/file?file=/velocity/js/dropit.js&contentType=text/javascript"></script> +<script type="text/javascript" src="#{url_for_solr}/admin/file?file=/velocity/js/jquery.autocomplete.js&contentType=text/javascript"></script> + +<script type="text/javascript"> + $(document).ready(function() { + + $("#tagcloud").tx3TagCloud({ + multiplier: 1 + }); + + $('.menu').dropit(); + + $( document ).ajaxComplete(function() { + $("#tagcloud").tx3TagCloud({ + multiplier: 5 + }); + }); + + $('\#q').keyup(function() { + $('#browse_results').load('#{url_for_home}?#lensNoQ&v.layout.enabled=false&v.template=results&q='+encodeURI($('\#q').val())); + + $("\#q").autocomplete('#{url_for_solr}/suggest', { + extraParams: { + 'suggest.q': function() { return $("\#q").val();}, + 'suggest.build': 'true', + 'wt': 'json', + } + }).keydown(function(e) { + if (e.keyCode === 13){ + $("#query-form").trigger('submit'); + } + }); + }); + + }); +</script> + +<style> + + html { + background-color: #F0F8FF; + } + + body { + font-family: Helvetica, Arial, sans-serif; + font-size: 10pt; + } + + #header { + width: 100%; + font-size: 20pt; + } + + #header2 { + margin-left:1200px; + } + + #logo { + width: 115px; + margin: 0px 0px 0px 0px; + border-style: none; + } + + a { + color: #305CB3; + } + + a.hidden { + display:none; + } + + em { + color: #FF833D; + } + + .error { + color: white; + background-color: red; + left: 210px; + width:80%; + position: relative; + } + + .debug { display: none; font-size: 10pt} + #debug_query { + font-family: Helvetica, Arial, sans-serif; + font-size: 10pt; + font-weight: bold; + } + #parsed_query { + font-family: Courier, Courier New, monospaced; + font-size: 10pt; + font-weight: normal; + } + + #admin { + text-align: right; + vertical-align: top; + } + + #query-form { + width: 90%; + } + + #query-box { + padding: 5px; + margin: 5px; + font-weight: normal; + font-size: 24px; + letter-spacing: 0.08em; + } + #constraints { + margin: 10px; + } + + #tabs { } + #tabs li { display: inline; font-size: 10px;} + #tabs li a { border-radius: 20px; border: 2px solid #C1CDCD; padding: 10px;color: #42454a; background-color: #dedbde;} + #tabs li a:hover { background-color: #f1f0ee; } + #tabs li a.selected { color: #000; background-color: #f1f0ee; font-weight: bold; padding: 5px } + #tabs li a.no_results { color: #000; background-color: #838B8B; font-style: italic; padding: 5px; pointer-events: none; + cursor: default; text-decoration: none;} + + .pagination { + width: 305px; + border-radius: 25px; + border: 2px solid #C1CDCD; + padding: 20px; + padding-left: 10%; + background: #eee; + margin-left: 190px; + margin-top : 42px; + padding-top: 5px; + padding-bottom: 5px; + text-align:left; + } + + #results_list { width: 70%; } + .result-document { + border-radius: 25px; + border: 2px solid #C1CDCD; + padding: 10px; +// width: 800px; +// height: 120px; + margin: 5px; +// margin-left: 60px; +// margin-right: 210px; +// margin-bottom: 15px; + transition: 1s ease; + } + .result-document:hover + { + webkit-transform: scale(1.1); + -ms-transform: scale(1.1); + transform: scale(1.1); + transition: 1s ease; + } + .result-document div { + padding: 5px; + } + .result-title { + width:60%; + } + .result-body { + background: #ddd; + } + .result-document:nth-child(2n+1) { + background-color: #FFFFFD; + } + + #facets { + margin: 5px; + margin-top: 0px; + padding: 5px; + top: -20px; + position: relative; + float: right; + width: 25%; + } + .facet-field { + font-weight: bold; + } + #facets ul { + list-style: none; + margin: 0; + margin-bottom: 5px; + margin-top: 5px; + padding-left: 10px; + } + #facets ul li { + color: #999; + padding: 2px; + } + + div.facet_field { + clear: left; + } + + ul.tx3-tag-cloud { } + ul.tx3-tag-cloud li { + display: block; + float: left; + list-style: none; + margin-right: 4px; + } + ul.tx3-tag-cloud li a { + display: block; + text-decoration: none; + color: #c9c9c9; + padding: 3px 10px; + } + ul.tx3-tag-cloud li a:hover { + color: #000000; + -webkit-transition: color 250ms linear; + -moz-transition: color 250ms linear; + -o-transition: color 250ms linear; + -ms-transition: color 250ms linear; + transition: color 250ms linear; + } + + .dropit { + list-style: none; + padding: 0; + margin: 0; + } + .dropit .dropit-trigger { position: relative; } + .dropit .dropit-submenu { + position: absolute; + top: 100%; + left: 0; /* dropdown left or right */ + z-index: 1000; + display: none; + min-width: 150px; + list-style: none; + padding: 0; + margin: 0; + } + .dropit .dropit-open .dropit-submenu { display: block; } + + + <!--autocomplete css--> + .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; + font: menu; + font-size: 12px; + 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; + } +</style> diff --git a/solr-8.1.1/example/files/conf/velocity/hit.vm b/solr-8.1.1/example/files/conf/velocity/hit.vm new file mode 100644 index 000000000..2c658cdd9 --- /dev/null +++ b/solr-8.1.1/example/files/conf/velocity/hit.vm @@ -0,0 +1,77 @@ + +#set($docId = $doc.getFirstValue($request.schema.uniqueKeyField.name)) + +## Load Mime-Type List and Mapping +#parse('mime_type_lists.vm') + +## Title +#if($doc.getFieldValue('title')) + #set($title = $esc.html($doc.getFirstValue('title'))) +#else + #set($title = "$doc.getFirstValue('id').substring($math.add(1,$doc.getFirstValue('id').lastIndexOf('/')))") +#end + +## Date +#if($doc.getFieldValue('attr_meta_creation_date')) + #set($date = $esc.html($doc.getFirstValue('attr_meta_creation_date'))) +#else + #set($date = "No date found") +#end + + + +## URL +#if($doc.getFieldValue('url')) + #set($url = $doc.getFieldValue('url')) +#elseif($doc.getFieldValue('resourcename')) + #set($url = "file:///$doc.getFirstValue('resourcename')") +#else + #set($url = "$doc.getFieldValue('id')") +#end + +## Sort out Mime-Type +#set($ct = $doc.getFirstValue('content_type').split(";").get(0)) +#set($filename = $doc.getFirstValue('resourcename')) +#set($filetype = false) +#set($filetype = $mimeExtensionsMap.get($ct)) +#if(!$filetype) + #set($filetype = $filename.substring($filename.lastIndexOf(".")).substring(1)) +#end +#if(!$filetype) + #set($filetype = "file") +#end +#if(!$supportedMimeTypes.contains($filetype)) + #set($filetype = "file") +#end + +<div class="result-document"> + <span class="result-title"> + <img src="#{url_root}/img/filetypes/${filetype}.png" align="center"> + <b>$title</b> + </span> + + <div> + id: $docId </br> + </div> + + #set($pad = "") + #foreach($v in $response.response.highlighting.get($docId).get("content")) + $pad$esc.html($v).replace("HL_START","<em>").replace("HL_END","</em>") + #set($pad = " ... ") + #end + +</div> + +<a href="#" class="debug" onclick='jQuery(this).next().toggle(); return false;'>toggle explain</a> +<pre style="display: none;"> + $esc.html($response.getExplainMap().get($doc.getFirstValue('id'))) +</pre> + +<a href="#" class="debug" onclick='jQuery(this).next().toggle(); return false;'>show all fields</a> +<pre style="display:none;"> + #foreach($fieldname in $doc.fieldNames) + <span>$fieldname :</span> + <span>#foreach($value in $doc.getFieldValues($fieldname))$esc.html($value)#end</span> + #end +</pre> + diff --git a/solr-8.1.1/example/files/conf/velocity/img/english_640.png b/solr-8.1.1/example/files/conf/velocity/img/english_640.png Binary files differnew file mode 100644 index 000000000..81256a1b8 --- /dev/null +++ b/solr-8.1.1/example/files/conf/velocity/img/english_640.png diff --git a/solr-8.1.1/example/files/conf/velocity/img/france_640.png b/solr-8.1.1/example/files/conf/velocity/img/france_640.png Binary files differnew file mode 100644 index 000000000..16d454190 --- /dev/null +++ b/solr-8.1.1/example/files/conf/velocity/img/france_640.png diff --git a/solr-8.1.1/example/files/conf/velocity/img/germany_640.png b/solr-8.1.1/example/files/conf/velocity/img/germany_640.png Binary files differnew file mode 100644 index 000000000..f5d6ae891 --- /dev/null +++ b/solr-8.1.1/example/files/conf/velocity/img/germany_640.png diff --git a/solr-8.1.1/example/files/conf/velocity/img/globe_256.png b/solr-8.1.1/example/files/conf/velocity/img/globe_256.png Binary files differnew file mode 100644 index 000000000..514597b86 --- /dev/null +++ b/solr-8.1.1/example/files/conf/velocity/img/globe_256.png diff --git a/solr-8.1.1/example/files/conf/velocity/jquery.tx3-tag-cloud.js b/solr-8.1.1/example/files/conf/velocity/jquery.tx3-tag-cloud.js new file mode 100644 index 000000000..8b1378917 --- /dev/null +++ b/solr-8.1.1/example/files/conf/velocity/jquery.tx3-tag-cloud.js @@ -0,0 +1 @@ + diff --git a/solr-8.1.1/example/files/conf/velocity/js/dropit.js b/solr-8.1.1/example/files/conf/velocity/js/dropit.js new file mode 100644 index 000000000..3094414f0 --- /dev/null +++ b/solr-8.1.1/example/files/conf/velocity/js/dropit.js @@ -0,0 +1,97 @@ +/* + * Dropit v1.1.0 + * http://dev7studios.com/dropit + * + * Copyright 2012, Dev7studios + * Free to use and abuse under the MIT license. + * http://www.opensource.org/licenses/mit-license.php + */ + +;(function($) { + + $.fn.dropit = function(method) { + + var methods = { + + init : function(options) { + this.dropit.settings = $.extend({}, this.dropit.defaults, options); + return this.each(function() { + var $el = $(this), + el = this, + settings = $.fn.dropit.settings; + + // Hide initial submenus + $el.addClass('dropit') + .find('>'+ settings.triggerParentEl +':has('+ settings.submenuEl +')').addClass('dropit-trigger') + .find(settings.submenuEl).addClass('dropit-submenu').hide(); + + // Open on click + $el.off(settings.action).on(settings.action, settings.triggerParentEl +':has('+ settings.submenuEl +') > '+ settings.triggerEl +'', function(){ + // Close click menu's if clicked again + if(settings.action == 'click' && $(this).parents(settings.triggerParentEl).hasClass('dropit-open')){ + settings.beforeHide.call(this); + $(this).parents(settings.triggerParentEl).removeClass('dropit-open').find(settings.submenuEl).hide(); + settings.afterHide.call(this); + return false; + } + + // Hide open menus + settings.beforeHide.call(this); + $('.dropit-open').removeClass('dropit-open').find('.dropit-submenu').hide(); + settings.afterHide.call(this); + + // Open this menu + settings.beforeShow.call(this); + $(this).parents(settings.triggerParentEl).addClass('dropit-open').find(settings.submenuEl).show(); + settings.afterShow.call(this); + + return false; + }); + + // Close if outside click + $(document).on('click', function(){ + settings.beforeHide.call(this); + $('.dropit-open').removeClass('dropit-open').find('.dropit-submenu').hide(); + settings.afterHide.call(this); + }); + + // If hover + if(settings.action == 'mouseenter'){ + $el.on('mouseleave', '.dropit-open', function(){ + settings.beforeHide.call(this); + $(this).removeClass('dropit-open').find(settings.submenuEl).hide(); + settings.afterHide.call(this); + }); + } + + settings.afterLoad.call(this); + }); + } + + }; + + if (methods[method]) { + return methods[method].apply(this, Array.prototype.slice.call(arguments, 1)); + } else if (typeof method === 'object' || !method) { + return methods.init.apply(this, arguments); + } else { + $.error( 'Method "' + method + '" does not exist in dropit plugin!'); + } + + }; + + $.fn.dropit.defaults = { + action: 'mouseenter', // The open action for the trigger + submenuEl: 'ul', // The submenu element + triggerEl: 'a', // The trigger element + triggerParentEl: 'li', // The trigger parent element + afterLoad: function(){}, // Triggers when plugin has loaded + beforeShow: function(){}, // Triggers before submenu is shown + afterShow: function(){}, // Triggers after submenu is shown + beforeHide: function(){}, // Triggers before submenu is hidden + afterHide: function(){} // Triggers before submenu is hidden + }; + + $.fn.dropit.settings = {}; + +})(jQuery); diff --git a/solr-8.1.1/example/files/conf/velocity/js/jquery.autocomplete.js b/solr-8.1.1/example/files/conf/velocity/js/jquery.autocomplete.js new file mode 100644 index 000000000..7ede3b8a3 --- /dev/null +++ b/solr-8.1.1/example/files/conf/velocity/js/jquery.autocomplete.js @@ -0,0 +1,763 @@ +/* + * 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"), "<strong>$1</strong>"); + }, + 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 = $("<div/>") + .hide() + .addClass(options.resultsClass) + .css("position", "absolute") + .appendTo(document.body); + + list = $("<ul/>").appendTo(element).mouseover( function(event) { + if(target(event).nodeName && target(event).nodeName.toUpperCase() == 'LI') { + active = $("li", list).removeClass(CLASSES.ACTIVE).index(target(event)); + $(target(event)).addClass(CLASSES.ACTIVE); + } + }).click(function(event) { + $(target(event)).addClass(CLASSES.ACTIVE); + select(); + // TODO provide option to avoid setting focus again after selection? useful for cleanup-on-focus + input.focus(); + return false; + }).mousedown(function() { + config.mouseDownOnSelect = true; + }).mouseup(function() { + config.mouseDownOnSelect = false; + }); + + if( options.width > 0 ) + element.css("width", options.width); + + needsInit = false; + } + + function target(event) { + var element = event.target; + while(element && element.tagName != "LI") + element = element.parentNode; + // more fun with IE, sometimes event.target is empty, just ignore it then + if(!element) + return []; + return element; + } + + function moveSelect(step) { + listItems.slice(active, active + 1).removeClass(CLASSES.ACTIVE); + movePosition(step); + var activeItem = listItems.slice(active, active + 1).addClass(CLASSES.ACTIVE); + if(options.scroll) { + var offset = 0; + listItems.slice(0, active).each(function() { + offset += this.offsetHeight; + }); + if((offset + activeItem[0].offsetHeight - list.scrollTop()) > list[0].clientHeight) { + list.scrollTop(offset + activeItem[0].offsetHeight - list.innerHeight()); + } else if(offset < list.scrollTop()) { + list.scrollTop(offset); + } + } + }; + + function movePosition(step) { + active += step; + if (active < 0) { + active = listItems.size() - 1; + } else if (active >= listItems.size()) { + active = 0; + } + } + + function limitNumberOfItems(available) { + return options.max && options.max < available + ? options.max + : available; + } + + function fillList() { + list.empty(); + var max = limitNumberOfItems(data.length); + for (var i=0; i < max; i++) { + if (!data[i]) + continue; + var formatted = options.formatItem(data[i].data, i+1, max, data[i].value, term); + if ( formatted === false ) + continue; + var li = $("<li/>").html( options.highlight(formatted, term) ).addClass(i%2 == 0 ? "ac_even" : "ac_odd").appendTo(list)[0]; + $.data(li, "ac_data", data[i]); + } + listItems = list.find("li"); + if ( options.selectFirst ) { + listItems.slice(0, 1).addClass(CLASSES.ACTIVE); + active = 0; + } + // apply bgiframe if available + if ( $.fn.bgiframe ) + list.bgiframe(); + } + + return { + display: function(d, q) { + init(); + data = d; + term = q; + fillList(); + }, + next: function() { + moveSelect(1); + }, + prev: function() { + moveSelect(-1); + }, + pageUp: function() { + if (active != 0 && active - 8 < 0) { + moveSelect( -active ); + } else { + moveSelect(-8); + } + }, + pageDown: function() { + if (active != listItems.size() - 1 && active + 8 > listItems.size()) { + moveSelect( listItems.size() - 1 - active ); + } else { + moveSelect(8); + } + }, + hide: function() { + element && element.hide(); + listItems && listItems.removeClass(CLASSES.ACTIVE); + active = -1; + }, + visible : function() { + return element && element.is(":visible"); + }, + current: function() { + return this.visible() && (listItems.filter("." + CLASSES.ACTIVE)[0] || options.selectFirst && listItems[0]); + }, + show: function() { + var offset = $(input).offset(); + element.css({ + width: typeof options.width == "string" || options.width > 0 ? options.width : $(input).width(), + top: offset.top + input.offsetHeight, + left: offset.left + }).show(); + if(options.scroll) { + list.scrollTop(0); + list.css({ + maxHeight: options.scrollHeight, + overflow: 'auto' + }); + + if($.browser.msie && typeof document.body.style.maxHeight === "undefined") { + var listHeight = 0; + listItems.each(function() { + listHeight += this.offsetHeight; + }); + var scrollbarsVisible = listHeight > options.scrollHeight; + list.css('height', scrollbarsVisible ? options.scrollHeight : listHeight ); + if (!scrollbarsVisible) { + // IE doesn't recalculate width when scrollbar disappears + listItems.width( list.width() - parseInt(listItems.css("padding-left")) - parseInt(listItems.css("padding-right")) ); + } + } + + } + }, + selected: function() { + var selected = listItems && listItems.filter("." + CLASSES.ACTIVE).removeClass(CLASSES.ACTIVE); + return selected && selected.length && $.data(selected[0], "ac_data"); + }, + emptyList: function (){ + list && list.empty(); + }, + unbind: function() { + element && element.remove(); + } + }; +}; + +$.Autocompleter.Selection = function(field, start, end) { + if( field.createTextRange ){ + var selRange = field.createTextRange(); + selRange.collapse(true); + selRange.moveStart("character", start); + selRange.moveEnd("character", end); + selRange.select(); + } else if( field.setSelectionRange ){ + field.setSelectionRange(start, end); + } else { + if( field.selectionStart ){ + field.selectionStart = start; + field.selectionEnd = end; + } + } + field.focus(); +}; + +})(jQuery); diff --git a/solr-8.1.1/example/files/conf/velocity/js/jquery.tx3-tag-cloud.js b/solr-8.1.1/example/files/conf/velocity/js/jquery.tx3-tag-cloud.js new file mode 100644 index 000000000..eb7d7d54a --- /dev/null +++ b/solr-8.1.1/example/files/conf/velocity/js/jquery.tx3-tag-cloud.js @@ -0,0 +1,70 @@ +/* + * ---------------------------------------------------------------------------- + * "THE BEER-WARE LICENSE" (Revision 42): + * Tuxes3 wrote this file. As long as you retain this notice you + * can do whatever you want with this stuff. If we meet some day, and you think + * this stuff is worth it, you can buy me a beer in return Tuxes3 + * ---------------------------------------------------------------------------- + */ +(function($) +{ + var settings; + $.fn.tx3TagCloud = function(options) + { + + // + // DEFAULT SETTINGS + // + settings = $.extend({ + multiplier : 1 + }, options); + main(this); + + } + + function main(element) + { + // adding style attr + element.addClass("tx3-tag-cloud"); + addListElementFontSize(element); + } + + /** + * calculates the font size on each li element + * according to their data-weight attribut + */ + function addListElementFontSize(element) + { + var hDataWeight = -9007199254740992; + var lDataWeight = 9007199254740992; + $.each(element.find("li"), function(){ + cDataWeight = getDataWeight(this); + if (cDataWeight == undefined) + { + logWarning("No \"data-weight\" attribut defined on <li> element"); + } + else + { + hDataWeight = cDataWeight > hDataWeight ? cDataWeight : hDataWeight; + lDataWeight = cDataWeight < lDataWeight ? cDataWeight : lDataWeight; + } + }); + $.each(element.find("li"), function(){ + var dataWeight = getDataWeight(this); + var percent = Math.abs((dataWeight - lDataWeight)/(lDataWeight - hDataWeight)); + $(this).css('font-size', (1 + (percent * settings['multiplier'])) + "em"); + }); + + } + + function getDataWeight(element) + { + return parseInt($(element).attr("data-weight")); + } + + function logWarning(message) + { + console.log("[WARNING] " + Date.now() + " : " + message); + } + +}(jQuery)); diff --git a/solr-8.1.1/example/files/conf/velocity/layout.vm b/solr-8.1.1/example/files/conf/velocity/layout.vm new file mode 100644 index 000000000..ef6caf705 --- /dev/null +++ b/solr-8.1.1/example/files/conf/velocity/layout.vm @@ -0,0 +1,42 @@ +<html> +<head> + #parse("head.vm") +</head> + <body> + <div id="header"> + <a href="#url_for_home"><img src="#{url_root}/img/solr.svg" id="logo" title="Solr"/></a> $resource.powered_file_search + </div> + + <div id="header2" onclick="javascript:locale_select()"> + <ul class="menu"> + + <li> + <a href="#"><img src="#{url_for_solr}/admin/file?file=/velocity/img/globe_256.png&contentType=image/png" id="locale_pic" title="locale_select" width="30px" height="27px"/></a> + <ul> + <li><a href="#url_for_locale('fr_FR')" #if("#current_locale"=="fr_FR")class="hidden"#end> + <img src="#{url_for_solr}/admin/file?file=/velocity/img/france_640.png&contentType=image/png" id="french_flag" width="40px" height="40px"/>Français</a></li> + <li><a href="#url_for_locale('de_DE')" #if("#current_locale"=="de_DE")class="hidden"#end> + <img src="#{url_for_solr}/admin/file?file=/velocity/img/germany_640.png&contentType=image/png" id="german_flag" width="40px" height="40px"/>Deutsch</a></li> + <li><a href="#url_for_locale('')" #if("#current_locale"=="")class="hidden"#end> + <img src="#{url_for_solr}/admin/file?file=/velocity/img/english_640.png&contentType=image/png" id="english_flag" width="40px" height="40px"/>English</a></li> + </ul> + </li> + </ul> + </div> + + #if($response.response.error.code) + <div class="error"> + <h1>ERROR $response.response.error.code</h1> + $response.response.error.msg + </div> + #else + <div id="content"> + $content + </div> + #end + + <div id="footer"> + #parse("footer.vm") + </div> + </body> +</html> diff --git a/solr-8.1.1/example/files/conf/velocity/macros.vm b/solr-8.1.1/example/files/conf/velocity/macros.vm new file mode 100644 index 000000000..8bebb7f5d --- /dev/null +++ b/solr-8.1.1/example/files/conf/velocity/macros.vm @@ -0,0 +1,16 @@ +#macro(lensFilterSortOnly)?#if($response.responseHeader.params.getAll("fq").size() > 0)&#fqs($response.responseHeader.params.getAll("fq"))#end#sort($request.params.getParams('sort'))#end +#macro(lensNoQ)#lensFilterSortOnly&type=#current_type#if("#current_locale"!="")&locale=#current_locale#end#end +#macro(lensNoType)#lensFilterSortOnly#q#if("#current_locale"!="")&locale=#current_locale#end#end +#macro(lensNoLocale)#lensFilterSortOnly#q&type=#current_type#end + +## lens modified for example/files - to use fq from responseHeader rather than request, and #debug removed too as it is built into browse params now, also added type to lens +#macro(lens)#lensNoQ#q#end + +## Macros defined custom for the "files" example +#macro(url_for_type $type)#url_for_home#lensNoType&type=$type#end +#macro(current_type)#if($response.responseHeader.params.type)${response.responseHeader.params.type}#{else}all#end#end +#macro(url_for_locale $locale)#url_for_home#lensNoLocale#if($locale!="")&locale=$locale#end&start=$page.start#end +#macro(current_locale)$!{response.responseHeader.params.locale}#end + +## Usage: #label(resource_key[, default_value]) - resource_key is used as label if no default value specified and no resource exists +#macro(label $key $default)#if($resource.get($key).exists)${resource.get($key)}#else#if($default)$default#else${key}#end#end#end diff --git a/solr-8.1.1/example/files/conf/velocity/mime_type_lists.vm b/solr-8.1.1/example/files/conf/velocity/mime_type_lists.vm new file mode 100644 index 000000000..1468bbdbf --- /dev/null +++ b/solr-8.1.1/example/files/conf/velocity/mime_type_lists.vm @@ -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" +}) diff --git a/solr-8.1.1/example/files/conf/velocity/results.vm b/solr-8.1.1/example/files/conf/velocity/results.vm new file mode 100644 index 000000000..b8a17a9c3 --- /dev/null +++ b/solr-8.1.1/example/files/conf/velocity/results.vm @@ -0,0 +1,20 @@ +<div id="facets"> + #parse("facets.vm") +</div> + + +<div id="results_list"> + <div class="pagination"> + <span class="results-found">$page.results_found</span> $resource.results_found_in.insert(${response.responseHeader.QTime}) + $resource.page_of.insert($page.current_page_number,$page.page_count) + </div> + + #parse("results_list.vm") + + <div class="pagination"> + #link_to_previous_page + <span class="results-found">$page.results_found</span> $resource.results_found. + $resource.page_of.insert($page.current_page_number,$page.page_count) + #link_to_next_page + </div> +</div> diff --git a/solr-8.1.1/example/files/conf/velocity/results_list.vm b/solr-8.1.1/example/files/conf/velocity/results_list.vm new file mode 100644 index 000000000..908e45b0c --- /dev/null +++ b/solr-8.1.1/example/files/conf/velocity/results_list.vm @@ -0,0 +1,21 @@ +<ul id="tabs"> + <li><a href="#url_for_type('all')" #if("#current_type"=="all")class="selected"#end>$resource.type.all ($response.response.facet_counts.facet_queries.all_types)</a></li> + #foreach($type in $response.response.facet_counts.facet_fields.doc_type) + #if($type.key) + <li><a href="#url_for_type($type.key)" #if($type.value=="0")class="no_results"#end #if("#current_type"==$type.key)class="selected"#end> #label("type.${type.key}.label", $type.key) ($type.value)</a></li> + #else + #if($type.value > 0) + <li><a href="#url_for_type('unknown')" #if("#current_type"=="unknown")class="selected"#end>$resource.type.unknown ($type.value)</a></li> + #end + #end + #end +</ul> + + +<div id="results"> + #foreach($doc in $response.results) + #parse("hit.vm") + #end +</div> + + |