diff options
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.pngBinary files differ new 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.pngBinary files differ new 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.pngBinary files differ new 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.pngBinary files differ new 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> + + | 
