wp/wp-includes/js/jquery/suggest.js
author ymh <ymh.work@gmail.com>
Tue, 09 Jun 2015 03:35:32 +0200
changeset 5 5e2f62d02dcd
parent 0 d970ebf37754
child 7 cf61fcea0001
permissions -rw-r--r--
upgrade wordpress + plugins
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     1
/*
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     2
 *	jquery.suggest 1.1b - 2007-08-06
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     3
 * Patched by Mark Jaquith with Alexander Dick's "multiple items" patch to allow for auto-suggesting of more than one tag before submitting
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     4
 * See: http://www.vulgarisoip.com/2007/06/29/jquerysuggest-an-alternative-jquery-based-autocomplete-library/#comment-7228
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     5
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     6
 *	Uses code and techniques from following libraries:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     7
 *	1. http://www.dyve.net/jquery/?autocomplete
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     8
 *	2. http://dev.jquery.com/browser/trunk/plugins/interface/iautocompleter.js
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     9
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    10
 *	All the new stuff written by Peter Vulgaris (www.vulgarisoip.com)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    11
 *	Feel free to do whatever you want with this file
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    12
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    13
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    14
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    15
(function($) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    16
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    17
	$.suggest = function(input, options) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    18
		var $input, $results, timeout, prevLength, cache, cacheSize;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    19
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    20
		$input = $(input).attr("autocomplete", "off");
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    21
		$results = $("<ul/>");
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    22
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    23
		timeout = false;		// hold timeout ID for suggestion results to appear
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    24
		prevLength = 0;			// last recorded length of $input.val()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    25
		cache = [];				// cache MRU list
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    26
		cacheSize = 0;			// size of cache in chars (bytes?)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    27
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    28
		$results.addClass(options.resultsClass).appendTo('body');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    29
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    30
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    31
		resetPosition();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    32
		$(window)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    33
			.load(resetPosition)		// just in case user is changing size of page while loading
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    34
			.resize(resetPosition);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    35
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    36
		$input.blur(function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    37
			setTimeout(function() { $results.hide() }, 200);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    38
		});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    39
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    40
		$input.keydown(processKey);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    41
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    42
		function resetPosition() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    43
			// requires jquery.dimension plugin
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    44
			var offset = $input.offset();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    45
			$results.css({
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    46
				top: (offset.top + input.offsetHeight) + 'px',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    47
				left: offset.left + 'px'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    48
			});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    49
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    50
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    51
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    52
		function processKey(e) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    53
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    54
			// handling up/down/escape requires results to be visible
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    55
			// handling enter/tab requires that AND a result to be selected
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    56
			if ((/27$|38$|40$/.test(e.keyCode) && $results.is(':visible')) ||
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    57
				(/^13$|^9$/.test(e.keyCode) && getCurrentResult())) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    58
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    59
				if (e.preventDefault)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    60
					e.preventDefault();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    61
				if (e.stopPropagation)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    62
					e.stopPropagation();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    63
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    64
				e.cancelBubble = true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    65
				e.returnValue = false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    66
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    67
				switch(e.keyCode) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    68
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    69
					case 38: // up
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    70
						prevResult();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    71
						break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    72
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    73
					case 40: // down
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    74
						nextResult();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    75
						break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    76
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    77
					case 9:  // tab
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    78
					case 13: // return
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    79
						selectCurrentResult();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    80
						break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    81
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    82
					case 27: //	escape
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    83
						$results.hide();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    84
						break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    85
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    86
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    87
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    88
			} else if ($input.val().length != prevLength) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    89
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    90
				if (timeout)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    91
					clearTimeout(timeout);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    92
				timeout = setTimeout(suggest, options.delay);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    93
				prevLength = $input.val().length;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    94
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    95
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    96
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    97
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    98
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    99
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   100
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   101
		function suggest() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   102
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   103
			var q = $.trim($input.val()), multipleSepPos, items;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   104
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   105
			if ( options.multiple ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   106
				multipleSepPos = q.lastIndexOf(options.multipleSep);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   107
				if ( multipleSepPos != -1 ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   108
					q = $.trim(q.substr(multipleSepPos + options.multipleSep.length));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   109
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   110
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   111
			if (q.length >= options.minchars) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   112
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   113
				cached = checkCache(q);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   114
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   115
				if (cached) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   116
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   117
					displayItems(cached['items']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   118
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   119
				} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   120
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   121
					$.get(options.source, {q: q}, function(txt) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   122
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   123
						$results.hide();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   124
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   125
						items = parseTxt(txt, q);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   126
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   127
						displayItems(items);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   128
						addToCache(q, items, txt.length);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   129
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   130
					});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   131
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   132
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   133
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   134
			} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   135
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   136
				$results.hide();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   137
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   138
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   139
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   140
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   141
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   142
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   143
		function checkCache(q) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   144
			var i;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   145
			for (i = 0; i < cache.length; i++)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   146
				if (cache[i]['q'] == q) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   147
					cache.unshift(cache.splice(i, 1)[0]);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   148
					return cache[0];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   149
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   150
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   151
			return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   152
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   153
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   154
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   155
		function addToCache(q, items, size) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   156
			var cached;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   157
			while (cache.length && (cacheSize + size > options.maxCacheSize)) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   158
				cached = cache.pop();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   159
				cacheSize -= cached['size'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   160
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   161
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   162
			cache.push({
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   163
				q: q,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   164
				size: size,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   165
				items: items
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   166
				});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   167
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   168
			cacheSize += size;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   169
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   170
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   171
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   172
		function displayItems(items) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   173
			var html = '', i;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   174
			if (!items)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   175
				return;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   176
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   177
			if (!items.length) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   178
				$results.hide();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   179
				return;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   180
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   181
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   182
			resetPosition(); // when the form moves after the page has loaded
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   183
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   184
			for (i = 0; i < items.length; i++)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   185
				html += '<li>' + items[i] + '</li>';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   186
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   187
			$results.html(html).show();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   188
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   189
			$results
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   190
				.children('li')
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   191
				.mouseover(function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   192
					$results.children('li').removeClass(options.selectClass);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   193
					$(this).addClass(options.selectClass);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   194
				})
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   195
				.click(function(e) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   196
					e.preventDefault();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   197
					e.stopPropagation();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   198
					selectCurrentResult();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   199
				});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   200
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   201
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   202
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   203
		function parseTxt(txt, q) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   204
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   205
			var items = [], tokens = txt.split(options.delimiter), i, token;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   206
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   207
			// parse returned data for non-empty items
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   208
			for (i = 0; i < tokens.length; i++) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   209
				token = $.trim(tokens[i]);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   210
				if (token) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   211
					token = token.replace(
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   212
						new RegExp(q, 'ig'),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   213
						function(q) { return '<span class="' + options.matchClass + '">' + q + '</span>' }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   214
						);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   215
					items[items.length] = token;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   216
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   217
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   218
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   219
			return items;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   220
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   221
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   222
		function getCurrentResult() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   223
			var $currentResult;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   224
			if (!$results.is(':visible'))
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   225
				return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   226
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   227
			$currentResult = $results.children('li.' + options.selectClass);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   228
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   229
			if (!$currentResult.length)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   230
				$currentResult = false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   231
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   232
			return $currentResult;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   233
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   234
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   235
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   236
		function selectCurrentResult() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   237
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   238
			$currentResult = getCurrentResult();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   239
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   240
			if ($currentResult) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   241
				if ( options.multiple ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   242
					if ( $input.val().indexOf(options.multipleSep) != -1 ) {
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   243
						$currentVal = $input.val().substr( 0, ( $input.val().lastIndexOf(options.multipleSep) + options.multipleSep.length ) ) + ' ';
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   244
					} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   245
						$currentVal = "";
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   246
					}
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   247
					$input.val( $currentVal + $currentResult.text() + options.multipleSep + ' ' );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   248
					$input.focus();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   249
				} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   250
					$input.val($currentResult.text());
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   251
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   252
				$results.hide();
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   253
				$input.trigger('change');
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   254
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   255
				if (options.onSelect)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   256
					options.onSelect.apply($input[0]);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   257
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   258
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   259
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   260
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   261
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   262
		function nextResult() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   263
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   264
			$currentResult = getCurrentResult();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   265
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   266
			if ($currentResult)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   267
				$currentResult
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   268
					.removeClass(options.selectClass)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   269
					.next()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   270
						.addClass(options.selectClass);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   271
			else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   272
				$results.children('li:first-child').addClass(options.selectClass);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   273
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   274
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   275
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   276
		function prevResult() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   277
			var $currentResult = getCurrentResult();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   278
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   279
			if ($currentResult)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   280
				$currentResult
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   281
					.removeClass(options.selectClass)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   282
					.prev()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   283
						.addClass(options.selectClass);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   284
			else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   285
				$results.children('li:last-child').addClass(options.selectClass);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   286
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   287
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   288
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   289
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   290
	$.fn.suggest = function(source, options) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   291
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   292
		if (!source)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   293
			return;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   294
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   295
		options = options || {};
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   296
		options.multiple = options.multiple || false;
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   297
		options.multipleSep = options.multipleSep || ",";
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   298
		options.source = source;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   299
		options.delay = options.delay || 100;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   300
		options.resultsClass = options.resultsClass || 'ac_results';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   301
		options.selectClass = options.selectClass || 'ac_over';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   302
		options.matchClass = options.matchClass || 'ac_match';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   303
		options.minchars = options.minchars || 2;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   304
		options.delimiter = options.delimiter || '\n';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   305
		options.onSelect = options.onSelect || false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   306
		options.maxCacheSize = options.maxCacheSize || 65536;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   307
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   308
		this.each(function() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   309
			new $.suggest(this, options);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   310
		});
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   311
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   312
		return this;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   313
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   314
	};
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   315
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   316
})(jQuery);