From ccfc848be27f3d8d8bd7154b44d1ac6d6f2bf23c Mon Sep 17 00:00:00 2001 From: azaozz Date: Mon, 26 Jan 2009 12:09:27 +0000 Subject: [PATCH] Fix non-critical bug in suggest.js and prepare it for minifying git-svn-id: http://svn.automattic.com/wordpress/trunk@10441 1a063a9b-81f0-0310-95a4-ce76da25c4cd --- wp-includes/js/jquery/suggest.dev.js | 226 +++++++++++++-------------- wp-includes/js/jquery/suggest.js | 2 +- wp-includes/script-loader.php | 2 +- 3 files changed, 114 insertions(+), 116 deletions(-) diff --git a/wp-includes/js/jquery/suggest.dev.js b/wp-includes/js/jquery/suggest.dev.js index 344008d76..e76c811ef 100644 --- a/wp-includes/js/jquery/suggest.dev.js +++ b/wp-includes/js/jquery/suggest.dev.js @@ -2,12 +2,12 @@ * jquery.suggest 1.1b - 2007-08-06 * Patched by Mark Jaquith with Alexander Dick's "multiple items" patch to allow for auto-suggesting of more than one tag before submitting * See: http://www.vulgarisoip.com/2007/06/29/jquerysuggest-an-alternative-jquery-based-autocomplete-library/#comment-7228 - * + * * Uses code and techniques from following libraries: * 1. http://www.dyve.net/jquery/?autocomplete - * 2. http://dev.jquery.com/browser/trunk/plugins/interface/iautocompleter.js + * 2. http://dev.jquery.com/browser/trunk/plugins/interface/iautocompleter.js * - * All the new stuff written by Peter Vulgaris (www.vulgarisoip.com) + * All the new stuff written by Peter Vulgaris (www.vulgarisoip.com) * Feel free to do whatever you want with this file * */ @@ -15,17 +15,18 @@ (function($) { $.suggest = function(input, options) { + var $input, $results, timeout, prevLength, cache, cacheSize; - var $input = $(input).attr("autocomplete", "off"); - var $results = $(document.createElement("ul")); + $input = $(input).attr("autocomplete", "off"); + $results = $(document.createElement("ul")); + + timeout = false; // hold timeout ID for suggestion results to appear + prevLength = 0; // last recorded length of $input.val() + cache = []; // cache MRU list + cacheSize = 0; // size of cache in chars (bytes?) - var timeout = false; // hold timeout ID for suggestion results to appear - var prevLength = 0; // last recorded length of $input.val() - var cache = []; // cache MRU list - var cacheSize = 0; // size of cache in chars (bytes?) - $results.addClass(options.resultsClass).appendTo('body'); - + resetPosition(); $(window) @@ -35,20 +36,21 @@ $input.blur(function() { setTimeout(function() { $results.hide() }, 200); }); - - - // help IE users if possible - try { - $results.bgiframe(); - } catch(e) { } + // help IE users if possible + if ( $.browser.msie ) { + try { + $results.bgiframe(); + } catch(e) { } + } + // I really hate browser detection, but I don't see any other way if ($.browser.mozilla) $input.keypress(processKey); // onkeypress repeats arrow keys in Mozilla/Opera else $input.keydown(processKey); // onkeydown repeats arrow keys in IE/Safari - + @@ -60,15 +62,15 @@ left: offset.left + 'px' }); } - - + + function processKey(e) { - + // handling up/down/escape requires results to be visible // handling enter/tab requires that AND a result to be selected if ((/27$|38$|40$/.test(e.keyCode) && $results.is(':visible')) || (/^13$|^9$/.test(e.keyCode) && getCurrentResult())) { - + if (e.preventDefault) e.preventDefault(); if (e.stopPropagation) @@ -76,13 +78,13 @@ e.cancelBubble = true; e.returnValue = false; - + switch(e.keyCode) { case 38: // up prevResult(); break; - + case 40: // down nextResult(); break; @@ -91,102 +93,102 @@ case 13: // return selectCurrentResult(); break; - + case 27: // escape $results.hide(); break; } - + } else if ($input.val().length != prevLength) { - if (timeout) + if (timeout) clearTimeout(timeout); timeout = setTimeout(suggest, options.delay); prevLength = $input.val().length; - - } - - + + } + + } - - + + function suggest() { - - var q = $.trim($input.val()); + + var q = $.trim($input.val()), multipleSepPos, items; if ( options.multiple ) { - var multipleSepPos = q.lastIndexOf(options.multipleSep); + multipleSepPos = q.lastIndexOf(options.multipleSep); if ( multipleSepPos != -1 ) { q = q.substr(multipleSepPos + options.multipleSep.length); } } if (q.length >= options.minchars) { - + cached = checkCache(q); - + if (cached) { - + displayItems(cached['items']); - + } else { - + $.get(options.source, {q: q}, function(txt) { $results.hide(); - - var items = parseTxt(txt, q); - + + items = parseTxt(txt, q); + displayItems(items); addToCache(q, items, txt.length); - - }); - - } - - } else { - - $results.hide(); - - } - - } - - - function checkCache(q) { - for (var i = 0; i < cache.length; i++) + }); + + } + + } else { + + $results.hide(); + + } + + } + + + function checkCache(q) { + var i; + for (i = 0; i < cache.length; i++) if (cache[i]['q'] == q) { cache.unshift(cache.splice(i, 1)[0]); return cache[0]; } - - return false; - - } - - function addToCache(q, items, size) { + return false; + + } + + function addToCache(q, items, size) { + var cached; while (cache.length && (cacheSize + size > options.maxCacheSize)) { - var cached = cache.pop(); + cached = cache.pop(); cacheSize -= cached['size']; } - + cache.push({ q: q, size: size, items: items }); - + cacheSize += size; - + } - + function displayItems(items) { - + var html = '', i; if (!items) return; - + if (!items.length) { $results.hide(); return; @@ -194,12 +196,11 @@ resetPosition(); // when the form moves after the page has loaded - var html = ''; - for (var i = 0; i < items.length; i++) + for (i = 0; i < items.length; i++) html += '
  • ' + items[i] + '
  • '; $results.html(html).show(); - + $results .children('li') .mouseover(function() { @@ -207,51 +208,50 @@ $(this).addClass(options.selectClass); }) .click(function(e) { - e.preventDefault(); + e.preventDefault(); e.stopPropagation(); selectCurrentResult(); }); - + } - + function parseTxt(txt, q) { - - var items = []; - var tokens = txt.split(options.delimiter); - + + var items = [], tokens = txt.split(options.delimiter), i, token; + // parse returned data for non-empty items - for (var i = 0; i < tokens.length; i++) { - var token = $.trim(tokens[i]); + for (i = 0; i < tokens.length; i++) { + token = $.trim(tokens[i]); if (token) { token = token.replace( - new RegExp(q, 'ig'), + new RegExp(q, 'ig'), function(q) { return '' + q + '' } ); items[items.length] = token; } } - + return items; } - + function getCurrentResult() { - + var $currentResult; if (!$results.is(':visible')) return false; - - var $currentResult = $results.children('li.' + options.selectClass); - + + $currentResult = $results.children('li.' + options.selectClass); + if (!$currentResult.length) $currentResult = false; - + return $currentResult; } - + function selectCurrentResult() { - + $currentResult = getCurrentResult(); - + if ($currentResult) { if ( options.multiple ) { if ( $input.val().indexOf(options.multipleSep) != -1 ) { @@ -265,18 +265,18 @@ $input.val($currentResult.text()); } $results.hide(); - + if (options.onSelect) options.onSelect.apply($input[0]); - + } - + } - + function nextResult() { - + $currentResult = getCurrentResult(); - + if ($currentResult) $currentResult .removeClass(options.selectClass) @@ -284,13 +284,12 @@ .addClass(options.selectClass); else $results.children('li:first-child').addClass(options.selectClass); - + } - + function prevResult() { - - $currentResult = getCurrentResult(); - + var $currentResult = getCurrentResult(); + if ($currentResult) $currentResult .removeClass(options.selectClass) @@ -298,16 +297,15 @@ .addClass(options.selectClass); else $results.children('li:last-child').addClass(options.selectClass); - - } + } } - + $.fn.suggest = function(source, options) { - + if (!source) return; - + options = options || {}; options.multiple = options.multiple || false; options.multipleSep = options.multipleSep || ", "; @@ -326,7 +324,7 @@ }); return this; - + }; - + })(jQuery); \ No newline at end of file diff --git a/wp-includes/js/jquery/suggest.js b/wp-includes/js/jquery/suggest.js index ba1ca3cfc..bc3c90688 100644 --- a/wp-includes/js/jquery/suggest.js +++ b/wp-includes/js/jquery/suggest.js @@ -1 +1 @@ -(function(a){a.suggest=function(o,g){var c=a(o).attr("autocomplete","off");var f=a(document.createElement("ul"));var n=false;var d=0;var q=[];var p=0;f.addClass(g.resultsClass).appendTo("body");j();a(window).load(j).resize(j);c.blur(function(){setTimeout(function(){f.hide()},200)});try{f.bgiframe()}catch(s){}if(a.browser.mozilla){c.keypress(m)}else{c.keydown(m)}function j(){var e=c.offset();f.css({top:(e.top+o.offsetHeight)+"px",left:e.left+"px"})}function m(w){if((/27$|38$|40$/.test(w.keyCode)&&f.is(":visible"))||(/^13$|^9$/.test(w.keyCode)&&u())){if(w.preventDefault){w.preventDefault()}if(w.stopPropagation){w.stopPropagation()}w.cancelBubble=true;w.returnValue=false;switch(w.keyCode){case 38:k();break;case 40:t();break;case 9:case 13:r();break;case 27:f.hide();break}}else{if(c.val().length!=d){if(n){clearTimeout(n)}n=setTimeout(l,g.delay);d=c.val().length}}}function l(){var w=a.trim(c.val());if(g.multiple){var e=w.lastIndexOf(g.multipleSep);if(e!=-1){w=w.substr(e+g.multipleSep.length)}}if(w.length>=g.minchars){cached=v(w);if(cached){i(cached.items)}else{a.get(g.source,{q:w},function(x){f.hide();var y=b(x,w);i(y);h(w,y,x.length)})}}else{f.hide()}}function v(w){for(var e=0;eg.maxCacheSize)){var x=q.pop();p-=x.size}q.push({q:y,size:w,items:e});p+=w}function i(e){if(!e){return}if(!e.length){f.hide();return}j();var x="";for(var w=0;w"+e[w]+""}f.html(x).show();f.children("li").mouseover(function(){f.children("li").removeClass(g.selectClass);a(this).addClass(g.selectClass)}).click(function(y){y.preventDefault();y.stopPropagation();r()})}function b(e,z){var w=[];var A=e.split(g.delimiter);for(var y=0;y'+B+""});w[w.length]=x}}return w}function u(){if(!f.is(":visible")){return false}var e=f.children("li."+g.selectClass);if(!e.length){e=false}return e}function r(){$currentResult=u();if($currentResult){if(g.multiple){if(c.val().indexOf(g.multipleSep)!=-1){$currentVal=c.val().substr(0,(c.val().lastIndexOf(g.multipleSep)+g.multipleSep.length))}else{$currentVal=""}c.val($currentVal+$currentResult.text()+g.multipleSep);c.focus()}else{c.val($currentResult.text())}f.hide();if(g.onSelect){g.onSelect.apply(c[0])}}}function t(){$currentResult=u();if($currentResult){$currentResult.removeClass(g.selectClass).next().addClass(g.selectClass)}else{f.children("li:first-child").addClass(g.selectClass)}}function k(){$currentResult=u();if($currentResult){$currentResult.removeClass(g.selectClass).prev().addClass(g.selectClass)}else{f.children("li:last-child").addClass(g.selectClass)}}};a.fn.suggest=function(c,b){if(!c){return}b=b||{};b.multiple=b.multiple||false;b.multipleSep=b.multipleSep||", ";b.source=c;b.delay=b.delay||100;b.resultsClass=b.resultsClass||"ac_results";b.selectClass=b.selectClass||"ac_over";b.matchClass=b.matchClass||"ac_match";b.minchars=b.minchars||2;b.delimiter=b.delimiter||"\n";b.onSelect=b.onSelect||false;b.maxCacheSize=b.maxCacheSize||65536;this.each(function(){new a.suggest(this,b)});return this}})(jQuery); \ No newline at end of file +(function(a){a.suggest=function(o,g){var c,f,n,d,q,p;c=a(o).attr("autocomplete","off");f=a(document.createElement("ul"));n=false;d=0;q=[];p=0;f.addClass(g.resultsClass).appendTo("body");j();a(window).load(j).resize(j);c.blur(function(){setTimeout(function(){f.hide()},200)});if(a.browser.msie){try{f.bgiframe()}catch(s){}}if(a.browser.mozilla){c.keypress(m)}else{c.keydown(m)}function j(){var e=c.offset();f.css({top:(e.top+o.offsetHeight)+"px",left:e.left+"px"})}function m(w){if((/27$|38$|40$/.test(w.keyCode)&&f.is(":visible"))||(/^13$|^9$/.test(w.keyCode)&&u())){if(w.preventDefault){w.preventDefault()}if(w.stopPropagation){w.stopPropagation()}w.cancelBubble=true;w.returnValue=false;switch(w.keyCode){case 38:k();break;case 40:t();break;case 9:case 13:r();break;case 27:f.hide();break}}else{if(c.val().length!=d){if(n){clearTimeout(n)}n=setTimeout(l,g.delay);d=c.val().length}}}function l(){var x=a.trim(c.val()),w,e;if(g.multiple){w=x.lastIndexOf(g.multipleSep);if(w!=-1){x=x.substr(w+g.multipleSep.length)}}if(x.length>=g.minchars){cached=v(x);if(cached){i(cached.items)}else{a.get(g.source,{q:x},function(y){f.hide();e=b(y,x);i(e);h(x,e,y.length)})}}else{f.hide()}}function v(w){var e;for(e=0;eg.maxCacheSize)){x=q.pop();p-=x.size}q.push({q:y,size:w,items:e});p+=w}function i(e){var x="",w;if(!e){return}if(!e.length){f.hide();return}j();for(w=0;w"+e[w]+""}f.html(x).show();f.children("li").mouseover(function(){f.children("li").removeClass(g.selectClass);a(this).addClass(g.selectClass)}).click(function(y){y.preventDefault();y.stopPropagation();r()})}function b(e,z){var w=[],A=e.split(g.delimiter),y,x;for(y=0;y'+B+""});w[w.length]=x}}return w}function u(){var e;if(!f.is(":visible")){return false}e=f.children("li."+g.selectClass);if(!e.length){e=false}return e}function r(){$currentResult=u();if($currentResult){if(g.multiple){if(c.val().indexOf(g.multipleSep)!=-1){$currentVal=c.val().substr(0,(c.val().lastIndexOf(g.multipleSep)+g.multipleSep.length))}else{$currentVal=""}c.val($currentVal+$currentResult.text()+g.multipleSep);c.focus()}else{c.val($currentResult.text())}f.hide();if(g.onSelect){g.onSelect.apply(c[0])}}}function t(){$currentResult=u();if($currentResult){$currentResult.removeClass(g.selectClass).next().addClass(g.selectClass)}else{f.children("li:first-child").addClass(g.selectClass)}}function k(){var e=u();if(e){e.removeClass(g.selectClass).prev().addClass(g.selectClass)}else{f.children("li:last-child").addClass(g.selectClass)}}};a.fn.suggest=function(c,b){if(!c){return}b=b||{};b.multiple=b.multiple||false;b.multipleSep=b.multipleSep||", ";b.source=c;b.delay=b.delay||100;b.resultsClass=b.resultsClass||"ac_results";b.selectClass=b.selectClass||"ac_over";b.matchClass=b.matchClass||"ac_match";b.minchars=b.minchars||2;b.delimiter=b.delimiter||"\n";b.onSelect=b.onSelect||false;b.maxCacheSize=b.maxCacheSize||65536;this.each(function(){new a.suggest(this,b)});return this}})(jQuery); \ No newline at end of file diff --git a/wp-includes/script-loader.php b/wp-includes/script-loader.php index ebe436503..2f4f0288f 100644 --- a/wp-includes/script-loader.php +++ b/wp-includes/script-loader.php @@ -141,7 +141,7 @@ function wp_default_scripts( &$scripts ) { $scripts->add( 'interface', '/wp-includes/js/jquery/interface.js', array('jquery'), '1.2' ); - $scripts->add( 'suggest', "/wp-includes/js/jquery/suggest$suffix.js", array('jquery'), '1.1bm'); + $scripts->add( 'suggest', "/wp-includes/js/jquery/suggest$suffix.js", array('jquery'), '1.1-20090125'); $scripts->add_data( 'suggest', 'group', 1 ); $scripts->add( 'schedule', '/wp-includes/js/jquery/jquery.schedule.js', array('jquery'), '20m');