You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by us...@apache.org on 2015/08/12 01:00:41 UTC

svn commit: r1695395 [6/12] - in /lucene/dev/trunk: ./ dev-tools/idea/.idea/ lucene/ lucene/analysis/ lucene/analysis/common/ lucene/analysis/icu/ lucene/analysis/stempel/ lucene/analysis/uima/ lucene/benchmark/ lucene/core/ lucene/demo/ lucene/demo/sr...

Modified: lucene/dev/trunk/solr/server/solr/configsets/sample_techproducts_configs/conf/velocity/jquery.autocomplete.js
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/server/solr/configsets/sample_techproducts_configs/conf/velocity/jquery.autocomplete.js?rev=1695395&r1=1695394&r2=1695395&view=diff
==============================================================================
--- lucene/dev/trunk/solr/server/solr/configsets/sample_techproducts_configs/conf/velocity/jquery.autocomplete.js (original)
+++ lucene/dev/trunk/solr/server/solr/configsets/sample_techproducts_configs/conf/velocity/jquery.autocomplete.js Tue Aug 11 23:00:39 2015
@@ -12,752 +12,752 @@
  */
 
 ;(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");
-	}
+  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);
-	};
+  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>");
-	},
+  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;
-		}
-	};
+  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 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;
-			});
+        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();
+  };
+  
+  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'
-				});
-				
+          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;
+          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")) );
-					}
+          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();
-		}
-	};
+    },
+    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();
+  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);
\ No newline at end of file

Modified: lucene/dev/trunk/solr/solrj/src/test-files/solrj/docs2.xml
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/solrj/src/test-files/solrj/docs2.xml?rev=1695395&r1=1695394&r2=1695395&view=diff
==============================================================================
--- lucene/dev/trunk/solr/solrj/src/test-files/solrj/docs2.xml (original)
+++ lucene/dev/trunk/solr/solrj/src/test-files/solrj/docs2.xml Tue Aug 11 23:00:39 2015
@@ -24,7 +24,7 @@
   <field name="manu_id_s">corsair</field>
   <field name="cat">electronics</field>
   <field name="cat">memory</field>
-  <field name="features">CAS latency 2,	2-3-3-6 timing, 2.75v, unbuffered, heat-spreader</field>
+  <field name="features">CAS latency 2,  2-3-3-6 timing, 2.75v, unbuffered, heat-spreader</field>
   <field name="price">185</field>
   <field name="popularity">5</field>
   <field name="inStock">true</field>
@@ -62,7 +62,7 @@
   <field name="manu_id_s">corsair</field>
   <field name="cat">electronics</field>
   <field name="cat">memory</field>
-  <field name="features">CAS latency 3,	 2.7v</field>
+  <field name="features">CAS latency 3,   2.7v</field>
   <!-- note: price & popularity is missing on this one -->
   <field name="popularity">0</field>
   <field name="inStock">true</field>

Modified: lucene/dev/trunk/solr/solrj/src/test-files/solrj/solr/collection1/conf/schema.xml
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/solrj/src/test-files/solrj/solr/collection1/conf/schema.xml?rev=1695395&r1=1695394&r2=1695395&view=diff
==============================================================================
--- lucene/dev/trunk/solr/solrj/src/test-files/solrj/solr/collection1/conf/schema.xml (original)
+++ lucene/dev/trunk/solr/solrj/src/test-files/solrj/solr/collection1/conf/schema.xml Tue Aug 11 23:00:39 2015
@@ -430,7 +430,7 @@
    <field name="standardfilt" type="standardfilt" indexed="true" stored="true"/>
    <field name="lowerfilt" type="lowerfilt" indexed="true" stored="true"/>
    <field name="lowerfilt1" type="lowerfilt" indexed="true" stored="true"/>
-	 <field name="lowerfilt1and2" type="lowerfilt" indexed="true" stored="true"/>
+   <field name="lowerfilt1and2" type="lowerfilt" indexed="true" stored="true"/>
    <field name="patterntok" type="patterntok" indexed="true" stored="true"/>
    <field name="patternreplacefilt" type="patternreplacefilt" indexed="true" stored="true"/>
    <field name="porterfilt" type="porterfilt" indexed="true" stored="true"/>
@@ -549,15 +549,15 @@
    <copyField source="title" dest="title_lettertok"/>
 
    <copyField source="title" dest="text"/>
-	 <copyField source="subject" dest="text"/>
+   <copyField source="subject" dest="text"/>
 
-	 <copyField source="lowerfilt1" dest="lowerfilt1and2"/>
-	 <copyField source="lowerfilt" dest="lowerfilt1and2"/>
+   <copyField source="lowerfilt1" dest="lowerfilt1and2"/>
+   <copyField source="lowerfilt" dest="lowerfilt1and2"/>
 
-	 <copyField source="*_t" dest="text"/>
+   <copyField source="*_t" dest="text"/>
 
-	 <copyField source="id"            dest="range_facet_l"/>
-	 <copyField source="range_facet_f" dest="range_facet_d"/>
+   <copyField source="id"            dest="range_facet_l"/>
+   <copyField source="range_facet_f" dest="range_facet_d"/>
 
    <!-- dynamic destination -->
    <copyField source="*_dynamic" dest="dynamic_*"/>

Modified: lucene/dev/trunk/solr/test-framework/build.xml
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/test-framework/build.xml?rev=1695395&r1=1695394&r2=1695395&view=diff
==============================================================================
--- lucene/dev/trunk/solr/test-framework/build.xml (original)
+++ lucene/dev/trunk/solr/test-framework/build.xml Tue Aug 11 23:00:39 2015
@@ -63,19 +63,19 @@
     <sequential>
       <mkdir dir="${javadoc.dir}/${name}"/>
       <!-- NOTE: explicitly not using solr-invoke-javadoc, or attempting to 
-	   link to lucene-test-framework because if we did javadoc would 
-	   attempt to link class refs in in org.apache.lucene, causing 
-	   broken links. (either broken links to things like "Directory" if 
-	   lucene-test-framework was first, or broken links to things like 
-	   LuceneTestCase if lucene-core was first)
+     link to lucene-test-framework because if we did javadoc would 
+     attempt to link class refs in in org.apache.lucene, causing 
+     broken links. (either broken links to things like "Directory" if 
+     lucene-test-framework was first, or broken links to things like 
+     LuceneTestCase if lucene-core was first)
       -->
       <invoke-javadoc destdir="${javadoc.dir}/${name}" 
-		      title="${Name} ${version} Test Framework API">
-	<sources>
-	  <link offline="true" href="${javadoc.link.junit}"
-		packagelistLoc="${javadoc.packagelist.dir}/junit"/>
-	  <packageset dir="${src.dir}"/>
-	</sources>
+          title="${Name} ${version} Test Framework API">
+  <sources>
+    <link offline="true" href="${javadoc.link.junit}"
+    packagelistLoc="${javadoc.packagelist.dir}/junit"/>
+    <packageset dir="${src.dir}"/>
+  </sources>
       </invoke-javadoc>
       <solr-jarify basedir="${javadoc.dir}/${name}" destfile="${build.dir}/${final.name}-javadoc.jar"/>
     </sequential>
@@ -107,11 +107,11 @@
     <mkdir  dir="${dist}/test-framework" />
     <copy todir="${dist}/test-framework">
       <fileset dir="${build.dir}">
-	<include name="lucene-libs/*.jar" />
+  <include name="lucene-libs/*.jar" />
       </fileset>
       <fileset dir=".">
-	<include name="lib/*" />
-	<include name="README.txt" />
+  <include name="lib/*" />
+  <include name="README.txt" />
       </fileset>
     </copy>
   </target>

Modified: lucene/dev/trunk/solr/webapp/build.xml
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/webapp/build.xml?rev=1695395&r1=1695394&r2=1695395&view=diff
==============================================================================
--- lucene/dev/trunk/solr/webapp/build.xml (original)
+++ lucene/dev/trunk/solr/webapp/build.xml Tue Aug 11 23:00:39 2015
@@ -24,7 +24,7 @@
   <import file="../common-build.xml"/>
 
   <property name="exclude.from.webapp" value="*slf4j*,log4j-*,*javax.servlet*" />
-	
+  
   <!-- this module has no javadocs -->
   <target name="javadocs"/>
 

Modified: lucene/dev/trunk/solr/webapp/web/WEB-INF/weblogic.xml
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/webapp/web/WEB-INF/weblogic.xml?rev=1695395&r1=1695394&r2=1695395&view=diff
==============================================================================
--- lucene/dev/trunk/solr/webapp/web/WEB-INF/weblogic.xml (original)
+++ lucene/dev/trunk/solr/webapp/web/WEB-INF/weblogic.xml Tue Aug 11 23:00:39 2015
@@ -21,7 +21,7 @@
     xsi:schemaLocation="http://www.bea.com/ns/weblogic/90 http://www.bea.com/ns/weblogic/90/weblogic-web-app.xsd">
 
     <container-descriptor>
-	<filter-dispatched-requests-enabled>false</filter-dispatched-requests-enabled>
+      <filter-dispatched-requests-enabled>false</filter-dispatched-requests-enabled>
     </container-descriptor>
 
 </weblogic-web-app>

Modified: lucene/dev/trunk/solr/webapp/web/js/lib/ZeroClipboard.js
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/webapp/web/js/lib/ZeroClipboard.js?rev=1695395&r1=1695394&r2=1695395&view=diff
==============================================================================
--- lucene/dev/trunk/solr/webapp/web/js/lib/ZeroClipboard.js (original)
+++ lucene/dev/trunk/solr/webapp/web/js/lib/ZeroClipboard.js Tue Aug 11 23:00:39 2015
@@ -27,316 +27,316 @@ THE SOFTWARE.
 // Author: Joseph Huckaby
 
 var ZeroClipboard = {
-	
-	version: "1.0.7",
-	clients: {}, // registered upload clients on page, indexed by id
-	moviePath: 'ZeroClipboard.swf', // URL to movie
-	nextId: 1, // ID of next movie
-	
-	$: function(thingy) {
-		// simple DOM lookup utility function
-		if (typeof(thingy) == 'string') thingy = document.getElementById(thingy);
-		if (!thingy.addClass) {
-			// extend element with a few useful methods
-			thingy.hide = function() { this.style.display = 'none'; };
-			thingy.show = function() { this.style.display = ''; };
-			thingy.addClass = function(name) { this.removeClass(name); this.className += ' ' + name; };
-			thingy.removeClass = function(name) {
-				var classes = this.className.split(/\s+/);
-				var idx = -1;
-				for (var k = 0; k < classes.length; k++) {
-					if (classes[k] == name) { idx = k; k = classes.length; }
-				}
-				if (idx > -1) {
-					classes.splice( idx, 1 );
-					this.className = classes.join(' ');
-				}
-				return this;
-			};
-			thingy.hasClass = function(name) {
-				return !!this.className.match( new RegExp("\\s*" + name + "\\s*") );
-			};
-		}
-		return thingy;
-	},
-	
-	setMoviePath: function(path) {
-		// set path to ZeroClipboard.swf
-		this.moviePath = path;
-	},
-	
-	dispatch: function(id, eventName, args) {
-		// receive event from flash movie, send to client		
-		var client = this.clients[id];
-		if (client) {
-			client.receiveEvent(eventName, args);
-		}
-	},
-	
-	register: function(id, client) {
-		// register new client to receive events
-		this.clients[id] = client;
-	},
-	
-	getDOMObjectPosition: function(obj, stopObj) {
-		// get absolute coordinates for dom element
-		var info = {
-			left: 0, 
-			top: 0, 
-			width: obj.width ? obj.width : obj.offsetWidth, 
-			height: obj.height ? obj.height : obj.offsetHeight
-		};
+  
+  version: "1.0.7",
+  clients: {}, // registered upload clients on page, indexed by id
+  moviePath: 'ZeroClipboard.swf', // URL to movie
+  nextId: 1, // ID of next movie
+  
+  $: function(thingy) {
+    // simple DOM lookup utility function
+    if (typeof(thingy) == 'string') thingy = document.getElementById(thingy);
+    if (!thingy.addClass) {
+      // extend element with a few useful methods
+      thingy.hide = function() { this.style.display = 'none'; };
+      thingy.show = function() { this.style.display = ''; };
+      thingy.addClass = function(name) { this.removeClass(name); this.className += ' ' + name; };
+      thingy.removeClass = function(name) {
+        var classes = this.className.split(/\s+/);
+        var idx = -1;
+        for (var k = 0; k < classes.length; k++) {
+          if (classes[k] == name) { idx = k; k = classes.length; }
+        }
+        if (idx > -1) {
+          classes.splice( idx, 1 );
+          this.className = classes.join(' ');
+        }
+        return this;
+      };
+      thingy.hasClass = function(name) {
+        return !!this.className.match( new RegExp("\\s*" + name + "\\s*") );
+      };
+    }
+    return thingy;
+  },
+  
+  setMoviePath: function(path) {
+    // set path to ZeroClipboard.swf
+    this.moviePath = path;
+  },
+  
+  dispatch: function(id, eventName, args) {
+    // receive event from flash movie, send to client    
+    var client = this.clients[id];
+    if (client) {
+      client.receiveEvent(eventName, args);
+    }
+  },
+  
+  register: function(id, client) {
+    // register new client to receive events
+    this.clients[id] = client;
+  },
+  
+  getDOMObjectPosition: function(obj, stopObj) {
+    // get absolute coordinates for dom element
+    var info = {
+      left: 0, 
+      top: 0, 
+      width: obj.width ? obj.width : obj.offsetWidth, 
+      height: obj.height ? obj.height : obj.offsetHeight
+    };
 
-		while (obj && (obj != stopObj)) {
-			info.left += obj.offsetLeft;
-			info.top += obj.offsetTop;
-			obj = obj.offsetParent;
-		}
+    while (obj && (obj != stopObj)) {
+      info.left += obj.offsetLeft;
+      info.top += obj.offsetTop;
+      obj = obj.offsetParent;
+    }
 
-		return info;
-	},
-	
-	Client: function(elem) {
-		// constructor for new simple upload client
-		this.handlers = {};
-		
-		// unique ID
-		this.id = ZeroClipboard.nextId++;
-		this.movieId = 'ZeroClipboardMovie_' + this.id;
-		
-		// register client with singleton to receive flash events
-		ZeroClipboard.register(this.id, this);
-		
-		// create movie
-		if (elem) this.glue(elem);
-	}
+    return info;
+  },
+  
+  Client: function(elem) {
+    // constructor for new simple upload client
+    this.handlers = {};
+    
+    // unique ID
+    this.id = ZeroClipboard.nextId++;
+    this.movieId = 'ZeroClipboardMovie_' + this.id;
+    
+    // register client with singleton to receive flash events
+    ZeroClipboard.register(this.id, this);
+    
+    // create movie
+    if (elem) this.glue(elem);
+  }
 };
 
 ZeroClipboard.Client.prototype = {
-	
-	id: 0, // unique ID for us
-	ready: false, // whether movie is ready to receive events or not
-	movie: null, // reference to movie object
-	clipText: '', // text to copy to clipboard
-	handCursorEnabled: true, // whether to show hand cursor, or default pointer cursor
-	cssEffects: true, // enable CSS mouse effects on dom container
-	handlers: null, // user event handlers
-	
-	glue: function(elem, appendElem, stylesToAdd) {
-		// glue to DOM element
-		// elem can be ID or actual DOM element object
-		this.domElement = ZeroClipboard.$(elem);
-		
-		// float just above object, or zIndex 99 if dom element isn't set
-		var zIndex = 99;
-		if (this.domElement.style.zIndex) {
-			zIndex = parseInt(this.domElement.style.zIndex, 10) + 1;
-		}
-		
-		if (typeof(appendElem) == 'string') {
-			appendElem = ZeroClipboard.$(appendElem);
-		}
-		else if (typeof(appendElem) == 'undefined') {
-			appendElem = document.getElementsByTagName('body')[0];
-		}
-		
-		// find X/Y position of domElement
-		var box = ZeroClipboard.getDOMObjectPosition(this.domElement, appendElem);
-		
-		// create floating DIV above element
-		this.div = document.createElement('div');
-		var style = this.div.style;
-		style.position = 'absolute';
-		style.left = '' + box.left + 'px';
-		style.top = '' + box.top + 'px';
-		style.width = '' + box.width + 'px';
-		style.height = '' + box.height + 'px';
-		style.zIndex = zIndex;
+  
+  id: 0, // unique ID for us
+  ready: false, // whether movie is ready to receive events or not
+  movie: null, // reference to movie object
+  clipText: '', // text to copy to clipboard
+  handCursorEnabled: true, // whether to show hand cursor, or default pointer cursor
+  cssEffects: true, // enable CSS mouse effects on dom container
+  handlers: null, // user event handlers
+  
+  glue: function(elem, appendElem, stylesToAdd) {
+    // glue to DOM element
+    // elem can be ID or actual DOM element object
+    this.domElement = ZeroClipboard.$(elem);
+    
+    // float just above object, or zIndex 99 if dom element isn't set
+    var zIndex = 99;
+    if (this.domElement.style.zIndex) {
+      zIndex = parseInt(this.domElement.style.zIndex, 10) + 1;
+    }
+    
+    if (typeof(appendElem) == 'string') {
+      appendElem = ZeroClipboard.$(appendElem);
+    }
+    else if (typeof(appendElem) == 'undefined') {
+      appendElem = document.getElementsByTagName('body')[0];
+    }
+    
+    // find X/Y position of domElement
+    var box = ZeroClipboard.getDOMObjectPosition(this.domElement, appendElem);
+    
+    // create floating DIV above element
+    this.div = document.createElement('div');
+    var style = this.div.style;
+    style.position = 'absolute';
+    style.left = '' + box.left + 'px';
+    style.top = '' + box.top + 'px';
+    style.width = '' + box.width + 'px';
+    style.height = '' + box.height + 'px';
+    style.zIndex = zIndex;
 
-		style.left = '0px';
-		style.top = '0px';
-		
-		if (typeof(stylesToAdd) == 'object') {
-			for (addedStyle in stylesToAdd) {
-				style[addedStyle] = stylesToAdd[addedStyle];
-			}
-		}
-		
-		// style.backgroundColor = '#f00'; // debug
-		
-		appendElem.appendChild(this.div);
-		
-		this.div.innerHTML = this.getHTML( box.width, box.height );
-	},
-	
-	getHTML: function(width, height) {
-		// return HTML for movie
-		var html = '';
-		var flashvars = 'id=' + this.id + 
-			'&width=' + width + 
-			'&height=' + height;
-			
-		if (navigator.userAgent.match(/MSIE/)) {
-			// IE gets an OBJECT tag
-			var protocol = location.href.match(/^https/i) ? 'https://' : 'http://';
-			html += '<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="'+protocol+'download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0" width="'+width+'" height="'+height+'" id="'+this.movieId+'" align="middle"><param name="allowScriptAccess" value="always" /><param name="allowFullScreen" value="false" /><param name="movie" value="'+ZeroClipboard.moviePath+'" /><param name="loop" value="false" /><param name="menu" value="false" /><param name="quality" value="best" /><param name="bgcolor" value="#ffffff" /><param name="flashvars" value="'+flashvars+'"/><param name="wmode" value="transparent"/></object>';
-		}
-		else {
-			// all other browsers get an EMBED tag
-			html += '<embed id="'+this.movieId+'" src="'+ZeroClipboard.moviePath+'" loop="false" menu="false" quality="best" bgcolor="#ffffff" width="'+width+'" height="'+height+'" name="'+this.movieId+'" align="middle" allowScriptAccess="always" allowFullScreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="'+flashvars+'" wmode="transparent" />';
-		}
-		return html;
-	},
-	
-	hide: function() {
-		// temporarily hide floater offscreen
-		if (this.div) {
-			this.div.style.left = '-2000px';
-		}
-	},
-	
-	show: function() {
-		// show ourselves after a call to hide()
-		this.reposition();
-	},
-	
-	destroy: function() {
-		// destroy control and floater
-		if (this.domElement && this.div) {
-			this.hide();
-			this.div.innerHTML = '';
-			
-			var body = document.getElementsByTagName('body')[0];
-			try { body.removeChild( this.div ); } catch(e) {;}
-			
-			this.domElement = null;
-			this.div = null;
-		}
-	},
-	
-	reposition: function(elem) {
-		// reposition our floating div, optionally to new container
-		// warning: container CANNOT change size, only position
-		if (elem) {
-			this.domElement = ZeroClipboard.$(elem);
-			if (!this.domElement) this.hide();
-		}
+    style.left = '0px';
+    style.top = '0px';
+    
+    if (typeof(stylesToAdd) == 'object') {
+      for (addedStyle in stylesToAdd) {
+        style[addedStyle] = stylesToAdd[addedStyle];
+      }
+    }
+    
+    // style.backgroundColor = '#f00'; // debug
+    
+    appendElem.appendChild(this.div);
+    
+    this.div.innerHTML = this.getHTML( box.width, box.height );
+  },
+  
+  getHTML: function(width, height) {
+    // return HTML for movie
+    var html = '';
+    var flashvars = 'id=' + this.id + 
+      '&width=' + width + 
+      '&height=' + height;
+      
+    if (navigator.userAgent.match(/MSIE/)) {
+      // IE gets an OBJECT tag
+      var protocol = location.href.match(/^https/i) ? 'https://' : 'http://';
+      html += '<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="'+protocol+'download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0" width="'+width+'" height="'+height+'" id="'+this.movieId+'" align="middle"><param name="allowScriptAccess" value="always" /><param name="allowFullScreen" value="false" /><param name="movie" value="'+ZeroClipboard.moviePath+'" /><param name="loop" value="false" /><param name="menu" value="false" /><param name="quality" value="best" /><param name="bgcolor" value="#ffffff" /><param name="flashvars" value="'+flashvars+'"/><param name="wmode" value="transparent"/></object>';
+    }
+    else {
+      // all other browsers get an EMBED tag
+      html += '<embed id="'+this.movieId+'" src="'+ZeroClipboard.moviePath+'" loop="false" menu="false" quality="best" bgcolor="#ffffff" width="'+width+'" height="'+height+'" name="'+this.movieId+'" align="middle" allowScriptAccess="always" allowFullScreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="'+flashvars+'" wmode="transparent" />';
+    }
+    return html;
+  },
+  
+  hide: function() {
+    // temporarily hide floater offscreen
+    if (this.div) {
+      this.div.style.left = '-2000px';
+    }
+  },
+  
+  show: function() {
+    // show ourselves after a call to hide()
+    this.reposition();
+  },
+  
+  destroy: function() {
+    // destroy control and floater
+    if (this.domElement && this.div) {
+      this.hide();
+      this.div.innerHTML = '';
+      
+      var body = document.getElementsByTagName('body')[0];
+      try { body.removeChild( this.div ); } catch(e) {;}
+      
+      this.domElement = null;
+      this.div = null;
+    }
+  },
+  
+  reposition: function(elem) {
+    // reposition our floating div, optionally to new container
+    // warning: container CANNOT change size, only position
+    if (elem) {
+      this.domElement = ZeroClipboard.$(elem);
+      if (!this.domElement) this.hide();
+    }
 
-		console.debug( this.domElement, this.div );
-		
-		if (this.domElement && this.div) {
-			var box = ZeroClipboard.getDOMObjectPosition(this.domElement);
-			console.debug( box );
-			var style = this.div.style;
-			style.left = '' + box.left + 'px';
-			style.top = '' + box.top + 'px';
-		}
-	},
-	
-	setText: function(newText) {
-		// set text to be copied to clipboard
-		this.clipText = newText;
-		if (this.ready) this.movie.setText(newText);
-	},
-	
-	addEventListener: function(eventName, func) {
-		// add user event listener for event
-		// event types: load, queueStart, fileStart, fileComplete, queueComplete, progress, error, cancel
-		eventName = eventName.toString().toLowerCase().replace(/^on/, '');
-		if (!this.handlers[eventName]) this.handlers[eventName] = [];
-		this.handlers[eventName].push(func);
-	},
-	
-	setHandCursor: function(enabled) {
-		// enable hand cursor (true), or default arrow cursor (false)
-		this.handCursorEnabled = enabled;
-		if (this.ready) this.movie.setHandCursor(enabled);
-	},
-	
-	setCSSEffects: function(enabled) {
-		// enable or disable CSS effects on DOM container
-		this.cssEffects = !!enabled;
-	},
-	
-	receiveEvent: function(eventName, args) {
-		// receive event from flash
-		eventName = eventName.toString().toLowerCase().replace(/^on/, '');
-				
-		// special behavior for certain events
-		switch (eventName) {
-			case 'load':
-				// movie claims it is ready, but in IE this isn't always the case...
-				// bug fix: Cannot extend EMBED DOM elements in Firefox, must use traditional function
-				this.movie = document.getElementById(this.movieId);
-				if (!this.movie) {
-					var self = this;
-					setTimeout( function() { self.receiveEvent('load', null); }, 1 );
-					return;
-				}
-				
-				// firefox on pc needs a "kick" in order to set these in certain cases
-				if (!this.ready && navigator.userAgent.match(/Firefox/) && navigator.userAgent.match(/Windows/)) {
-					var self = this;
-					setTimeout( function() { self.receiveEvent('load', null); }, 100 );
-					this.ready = true;
-					return;
-				}
-				
-				this.ready = true;
-				this.movie.setText( this.clipText );
-				this.movie.setHandCursor( this.handCursorEnabled );
-				break;
-			
-			case 'mouseover':
-				if (this.domElement && this.cssEffects) {
-					this.domElement.addClass('hover');
-					if (this.recoverActive) this.domElement.addClass('active');
-				}
-				break;
-			
-			case 'mouseout':
-				if (this.domElement && this.cssEffects) {
-					this.recoverActive = false;
-					if (this.domElement.hasClass('active')) {
-						this.domElement.removeClass('active');
-						this.recoverActive = true;
-					}
-					this.domElement.removeClass('hover');
-				}
-				break;
-			
-			case 'mousedown':
-				if (this.domElement && this.cssEffects) {
-					this.domElement.addClass('active');
-				}
-				break;
-			
-			case 'mouseup':
-				if (this.domElement && this.cssEffects) {
-					this.domElement.removeClass('active');
-					this.recoverActive = false;
-				}
-				break;
-		} // switch eventName
-		
-		if (this.handlers[eventName]) {
-			for (var idx = 0, len = this.handlers[eventName].length; idx < len; idx++) {
-				var func = this.handlers[eventName][idx];
-			
-				if (typeof(func) == 'function') {
-					// actual function reference
-					func(this, args);
-				}
-				else if ((typeof(func) == 'object') && (func.length == 2)) {
-					// PHP style object + method, i.e. [myObject, 'myMethod']
-					func[0][ func[1] ](this, args);
-				}
-				else if (typeof(func) == 'string') {
-					// name of function
-					window[func](this, args);
-				}
-			} // foreach event handler defined
-		} // user defined handler for event
-	}
-	
+    console.debug( this.domElement, this.div );
+    
+    if (this.domElement && this.div) {
+      var box = ZeroClipboard.getDOMObjectPosition(this.domElement);
+      console.debug( box );
+      var style = this.div.style;
+      style.left = '' + box.left + 'px';
+      style.top = '' + box.top + 'px';
+    }
+  },
+  
+  setText: function(newText) {
+    // set text to be copied to clipboard
+    this.clipText = newText;
+    if (this.ready) this.movie.setText(newText);
+  },
+  
+  addEventListener: function(eventName, func) {
+    // add user event listener for event
+    // event types: load, queueStart, fileStart, fileComplete, queueComplete, progress, error, cancel
+    eventName = eventName.toString().toLowerCase().replace(/^on/, '');
+    if (!this.handlers[eventName]) this.handlers[eventName] = [];
+    this.handlers[eventName].push(func);
+  },
+  
+  setHandCursor: function(enabled) {
+    // enable hand cursor (true), or default arrow cursor (false)
+    this.handCursorEnabled = enabled;
+    if (this.ready) this.movie.setHandCursor(enabled);
+  },
+  
+  setCSSEffects: function(enabled) {
+    // enable or disable CSS effects on DOM container
+    this.cssEffects = !!enabled;
+  },
+  
+  receiveEvent: function(eventName, args) {
+    // receive event from flash
+    eventName = eventName.toString().toLowerCase().replace(/^on/, '');
+        
+    // special behavior for certain events
+    switch (eventName) {
+      case 'load':
+        // movie claims it is ready, but in IE this isn't always the case...
+        // bug fix: Cannot extend EMBED DOM elements in Firefox, must use traditional function
+        this.movie = document.getElementById(this.movieId);
+        if (!this.movie) {
+          var self = this;
+          setTimeout( function() { self.receiveEvent('load', null); }, 1 );
+          return;
+        }
+        
+        // firefox on pc needs a "kick" in order to set these in certain cases
+        if (!this.ready && navigator.userAgent.match(/Firefox/) && navigator.userAgent.match(/Windows/)) {
+          var self = this;
+          setTimeout( function() { self.receiveEvent('load', null); }, 100 );
+          this.ready = true;
+          return;
+        }
+        
+        this.ready = true;
+        this.movie.setText( this.clipText );
+        this.movie.setHandCursor( this.handCursorEnabled );
+        break;
+      
+      case 'mouseover':
+        if (this.domElement && this.cssEffects) {
+          this.domElement.addClass('hover');
+          if (this.recoverActive) this.domElement.addClass('active');
+        }
+        break;
+      
+      case 'mouseout':
+        if (this.domElement && this.cssEffects) {
+          this.recoverActive = false;
+          if (this.domElement.hasClass('active')) {
+            this.domElement.removeClass('active');
+            this.recoverActive = true;
+          }
+          this.domElement.removeClass('hover');
+        }
+        break;
+      
+      case 'mousedown':
+        if (this.domElement && this.cssEffects) {
+          this.domElement.addClass('active');
+        }
+        break;
+      
+      case 'mouseup':
+        if (this.domElement && this.cssEffects) {
+          this.domElement.removeClass('active');
+          this.recoverActive = false;
+        }
+        break;
+    } // switch eventName
+    
+    if (this.handlers[eventName]) {
+      for (var idx = 0, len = this.handlers[eventName].length; idx < len; idx++) {
+        var func = this.handlers[eventName][idx];
+      
+        if (typeof(func) == 'function') {
+          // actual function reference
+          func(this, args);
+        }
+        else if ((typeof(func) == 'object') && (func.length == 2)) {
+          // PHP style object + method, i.e. [myObject, 'myMethod']
+          func[0][ func[1] ](this, args);
+        }
+        else if (typeof(func) == 'string') {
+          // name of function
+          window[func](this, args);
+        }
+      } // foreach event handler defined
+    } // user defined handler for event
+  }
+  
 };