Вход Регистрация
Файл: includes/jquery/jquery.columnfilters.js
Строк: 246
<?php
/*
 * Copyright (c) 2008 Tom Coote (http://www.tomcoote.co.uk)
 * This is licensed under GPL (http://www.opensource.org/licenses/gpl-license.php) licenses.
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 *
 */

/**
 * Add text box's at the top of columns in a table to allow 
 * fast flltering of rows underneath each column.
 * 
 *
 * @name columnFilters
 * @type jQuery
 * @param Object settings;
 *            wildCard    :    A character to be used as a match all wildcard when searching, Leave empty for no wildcards.
 *            notCharacter    :    The character to use at the start of any search text to specify that the results should NOT contain the following text.
 *            caseSensitive    :    True if the filter search's are to be case sensitive.
 *            minSearchCharacters    :    The minimum amount of characters that each search string must contain before the search is applied.
 *            excludeColumns    :    A zero indexed array of column numbers to not allow filtering on.
 *            alternateRowClassNames    :    An array of alternating class names for each row returned after filtering in order to keep odd and even row styling on tables. Maximum of two items.
 *            underline    :    Set to true if the script is to underline the search text whilst filtering is in progress... good for tables with lots of rows where the filter may take a second. (not in Opera)
 *
 * @author Tom Coote (www.tomcoote.co.uk)
 * @version 1.1.0
 */

(function($){

    $.
fn.columnFilters = function(settings) {
        var 
defaults = {  
            
wildCard"*",  
            
notCharacter"!",
            
caseSensitivefalse,
            
minSearchCharacters1,
            
excludeColumns: [],
            
alternateRowClassNames: [],
            
underlinefalse
            
};  
        
settings = $.extend(defaultssettings);  
    
        return 
this.each(function() {
        
            function 
regexEscape(txtomit) {
                var 
specials = ['/''.''*''+''?''|',
                                
'('')''['']''{''}''\'];
                
                if (omit) {
                    for (var i=0; i < specials.length; i++) {
                        if (specials[i] === omit) { specials.splice(i,1); }
                    }
                }
                
                var escapePatt = new RegExp('
(\' + specials.join('|\') + ')', 'g');
                return txt.replace(escapePatt, '
\$1');
            }
        
            var obj = $(this),
                filterRow = document.createElement('
tr'),
                wildCardPatt = new RegExp(regexEscape(settings.wildCard || ''),'
g'),
                filter;
        
            function addClassToColumn(iColNum, sClassName) {
                $('
tbody:first tr', obj).each(
                    function() {
                        $('
td', this).each(
                            function(iCellCount) {
                                if (iCellCount === iColNum) {
                                    $(this).addClass(sClassName);
                                }
                            });
                    }
                );
            }
        
            function runFilters(event) {            
                $('
input._filterText', obj).each(
                    function(iColCount) {
//                        var sFilterTxt = (!settings.wildCard) ? regexEscape(this.value) : regexEscape(this.value, settings.wildCard).replace(wildCardPatt, '
.*'),
                        var sFilterTxt = this.value,
                            bMatch = true, 
                            sFirst = settings.alternateRowClassNames[0] || '',
                            sSecound = settings.alternateRowClassNames[1] || '',
                            bOddRow = true;
                        
//                        if (settings.notCharacter && sFilterTxt.indexOf(settings.notCharacter) === 0) {
//                            sFilterTxt = sFilterTxt.substr(settings.notCharacter.length,sFilterTxt.length);
//                            if (sFilterTxt.length > 0) { bMatch = false; }
//                        }
//                        if (sFilterTxt.length < settings.minSearchCharacters) {
//                            sFilterTxt = '';
//                        }
//                        sFilterTxt = sFilterTxt || '
.*';
//                        sFilterTxt = settings.wildCard ? '
^' + sFilterTxt : sFilterTxt;
                        var filterPatt = settings.caseSensitive ? new RegExp(sFilterTxt) : new RegExp(sFilterTxt,"i");
                        
                        $('
tbody:first tr', obj).each(
                            function() {
                                $('
td',this).each(
                                    function(iCellCount) {
                                        if (iCellCount === iColCount) {
                                            var sVal = $(this).text().replace(/(n)|(r)/ig,'').replace(/ss/ig,' ').replace(/^s/ig,'');
                                            $(this).removeClass('
_match');
                                            if (filterPatt.test(sVal) === bMatch) {
                                                $(this).addClass('
_match');
                                            }
                                        }
                                    }
                                );
                                
                                if ($('
td',this).length !== $('td._match',this).length) {
                                    $(this).css('
display','none');
                                }
                                else {
                                    $(this).css('
display','');
                                    if (settings.alternateRowClassNames && settings.alternateRowClassNames.length) {
                                        $(this).removeClass(sFirst).removeClass(sSecound).addClass((bOddRow) ? sFirst : sSecound);
                                        bOddRow = !bOddRow;
                                    }
                                }
                            }
                        );
                        
                        if (settings.underline) {
                            $(this).css('
text-decoration','');
                        }
                    }
                );
            }
            
            function genAlternateClassNames() {
                if (settings.alternateRowClassNames && settings.alternateRowClassNames.length) {
                    var sFirst = settings.alternateRowClassNames[0] || '',
                        sSecound = settings.alternateRowClassNames[1] || '',
                        bOddRow = true;
                    
                    $('
tbody:first tr', obj).each(
                        function() {
                            if ($(this).css('
display') !== 'none') {
                                $(this).removeClass(sFirst).removeClass(sSecound);
                                $(this).addClass((bOddRow) ? sFirst : sSecound);
                                bOddRow = !bOddRow;
                            }
                        }
                    );
                }
            }
                
            $('
tbody:first tr:first td', obj).each(
                function(iColCount) {
                    var filterColumn = document.createElement('
td'),
                        filterBox = document.createElement('
input');
                    
                    $(filterBox).attr('
type','text').attr('id','_filterText' + iColCount).addClass('_filterText');
                    $(filterBox).keyup(
                        function() { 
                            clearTimeout(filter); 
                            filter = setTimeout(runFilters, $('
tbody:first tr', obj).length*2);
                            if (settings.underline) {
                                $(filterBox).css('
text-decoration','underline');
                            }
                        }
                    );
                    $(filterColumn).append(filterBox);
                    $(filterRow).append(filterColumn);
                    
                    if (settings.excludeColumns && settings.excludeColumns.length) {
                        for (var i=0; i < settings.excludeColumns.length; i++) {
                            if (settings.excludeColumns[i] === iColCount) {
                                $(filterBox).css('
visibility','hidden');
                            }
                        }
                    }
                    
                    addClassToColumn(iColCount, '
_filterCol' + iColCount);
                }
            );
                
            $(filterRow).addClass('
filterColumns');
            $('
thead:first', obj).append(filterRow);
            genAlternateClassNames();
            settings.notCharacter = regexEscape(settings.notCharacter || '');
        });
    };

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