Вход Регистрация
Файл: wordpress/wp-includes/js/jquery/suggest.js
Строк: 259
<?php
/*
 *    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
 *
 *    All the new stuff written by Peter Vulgaris (www.vulgarisoip.com)
 *    Feel free to do whatever you want with this file
 *
 */

(function($) {

    $.
suggest = function(inputoptions) {
        var 
$input$resultstimeoutprevLengthcachecacheSize;

        
$input = $(input).attr("autocomplete""off");
        
$results = $("<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?)

        
$results.addClass(options.resultsClass).appendTo('body');


        
resetPosition();
        $(
window)
            .
load(resetPosition)        // just in case user is changing size of page while loading
            
.resize(resetPosition);

        
$input.blur(function() {
            
setTimeout(function() { $results.hide() }, 200);
        });

        
$input.keydown(processKey);

        function 
resetPosition() {
            
// requires jquery.dimension plugin
            
var offset $input.offset();
            
$results.css({
                
top: (offset.top input.offsetHeight) + 'px',
                
leftoffset.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)
                    
e.stopPropagation();

                
e.cancelBubble true;
                
e.returnValue false;

                switch(
e.keyCode) {

                    case 
38// up
                        
prevResult();
                        break;

                    case 
40// down
                        
nextResult();
                        break;

                    case 
9:  // tab
                    
case 13// return
                        
selectCurrentResult();
                        break;

                    case 
27//    escape
                        
$results.hide();
                        break;

                }

            } else if (
$input.val().length != prevLength) {

                if (
timeout)
                    
clearTimeout(timeout);
                
timeout setTimeout(suggestoptions.delay);
                
prevLength $input.val().length;

            }


        }


        function 
suggest() {

            var 
= $.trim($input.val()), multipleSepPositems;

            if ( 
options.multiple ) {
                
multipleSepPos q.lastIndexOf(options.multipleSep);
                if ( 
multipleSepPos != -) {
                    
= $.trim(q.substr(multipleSepPos options.multipleSep.length));
                }
            }
            if (
q.length >= options.minchars) {

                
cached checkCache(q);

                if (
cached) {

                    
displayItems(cached['items']);

                } else {

                    $.
get(options.source, {qq}, function(txt) {

                        
$results.hide();

                        
items parseTxt(txtq);

                        
displayItems(items);
                        
addToCache(qitemstxt.length);

                    });

                }

            } else {

                
$results.hide();

            }

        }


        function 
checkCache(q) {
            var 
i;
            for (
0cache.lengthi++)
                if (
cache[i]['q'] == q) {
                    
cache.unshift(cache.splice(i1)[0]);
                    return 
cache[0];
                }

            return 
false;

        }

        function 
addToCache(qitemssize) {
            var 
cached;
            while (
cache.length && (cacheSize size options.maxCacheSize)) {
                
cached cache.pop();
                
cacheSize -= cached['size'];
            }

            
cache.push({
                
qq,
                
sizesize,
                
itemsitems
                
});

            
cacheSize += size;

        }

        function 
displayItems(items) {
            var 
html ''i;
            if (!
items)
                return;

            if (!
items.length) {
                
$results.hide();
                return;
            }

            
resetPosition(); // when the form moves after the page has loaded

            
for (0items.lengthi++)
                
html += '<li>' items[i] + '</li>';

            
$results.html(html).show();

            
$results
                
.children('li')
                .
mouseover(function() {
                    
$results.children('li').removeClass(options.selectClass);
                    $(
this).addClass(options.selectClass);
                })
                .
click(function(e) {
                    
e.preventDefault();
                    
e.stopPropagation();
                    
selectCurrentResult();
                });

        }

        function 
parseTxt(txtq) {

            var 
items = [], tokens txt.split(options.delimiter), itoken;

            
// parse returned data for non-empty items
            
for (0tokens.lengthi++) {
                
token = $.trim(tokens[i]);
                if (
token) {
                    
token token.replace(
                        new 
RegExp(q'ig'),
                        function(
q) { return '<span class="' options.matchClass '">' '</span>' }
                        );
                    
items[items.length] = token;
                }
            }

            return 
items;
        }

        function 
getCurrentResult() {
            var 
$currentResult;
            if (!
$results.is(':visible'))
                return 
false;

            
$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) != -) {
                        
$currentVal $input.val().substr0, ( $input.val().lastIndexOf(options.multipleSep) + options.multipleSep.length ) ) + ' ';
                    } else {
                        
$currentVal "";
                    }
                    
$input.val$currentVal $currentResult.text() + options.multipleSep ' ' );
                    
$input.focus();
                } else {
                    
$input.val($currentResult.text());
                }
                
$results.hide();
                
$input.trigger('change');

                if (
options.onSelect)
                    
options.onSelect.apply($input[0]);

            }

        }

        function 
nextResult() {

            
$currentResult getCurrentResult();

            if (
$currentResult)
                
$currentResult
                    
.removeClass(options.selectClass)
                    .
next()
                        .
addClass(options.selectClass);
            else
                
$results.children('li:first-child').addClass(options.selectClass);

        }

        function 
prevResult() {
            var 
$currentResult getCurrentResult();

            if (
$currentResult)
                
$currentResult
                    
.removeClass(options.selectClass)
                    .
prev()
                        .
addClass(options.selectClass);
            else
                
$results.children('li:last-child').addClass(options.selectClass);

        }
    }

    $.
fn.suggest = function(sourceoptions) {

        if (!
source)
            return;

        
options options || {};
        
options.multiple options.multiple || false;
        
options.multipleSep options.multipleSep || ",";
        
options.source source;
        
options.delay options.delay || 100;
        
options.resultsClass options.resultsClass || 'ac_results';
        
options.selectClass options.selectClass || 'ac_over';
        
options.matchClass options.matchClass || 'ac_match';
        
options.minchars options.minchars || 2;
        
options.delimiter options.delimiter || 'n';
        
options.onSelect options.onSelect || false;
        
options.maxCacheSize options.maxCacheSize || 65536;

        
this.each(function() {
            new $.
suggest(thisoptions);
        });

        return 
this;

    };

})(
jQuery);
?>
Онлайн: 0
Реклама