Вход Регистрация
Файл: plugins/searchsys/static/script.js
Строк: 339
<?php
SEARCHSYS 
= {};

SEARCHSYS.Observer = function( context )
{
    
this.events = {};
    
this.context context;
};

SEARCHSYS.Observer.PROTO = function()
{
    
this.bind = function(eventNamecallbackcontext)
    {
        
context context || false;

        if ( !
this.events[eventName] )
        {
            
this.events[eventName] = [];
        }

        
this.events[eventName].push({
            
callbackcallback,
            
contextcontext
        
});
    };

    
this.trigger = function( eventNameeventObj )
    {
        var 
self this;

        
eventObj eventObj || {};

        if ( !
this.events[eventName] )
        {
            return 
false;
        }

        $.
each(this.events[eventName], function(io)
        {
            
o.callback.call(o.context || self.contexteventObj);
        });
    };

    
this.unbind = function( eventName )
    {
        
this.events[eventName] = [];
    };
}

SEARCHSYS.Observer.prototype = new SEARCHSYS.Observer.PROTO();

SEARCHSYS.State = function( data )
{
    
data data || {};
    
this.state data;

    
this.observer = new SEARCHSYS.Observer(this);
}

SEARCHSYS.State.PROTO = function()
{
    
this.mergeState = function( state )
    {
        $.
extend(this.statestate);

        
this.observer.trigger('change');
    };

    
this.setState = function( state )
    {
        
state state || {};
        
this.state state;

        
this.observer.trigger('change');
    };

    
this.getState = function()
    {
        return 
this.state;
    };
};

SEARCHSYS.State.prototype = new SEARCHSYS.State.PROTO();

SEARCHSYS.UserState = function( data )
{
    
data data || {};
    
this.state data;

    
this.observer = new SEARCHSYS.Observer(this);

    
this.searchedKWs = [];

    
this.addKeyword = function( kw )
    {
        
this.searchedKWs.push(kw);
    };

    
this.isSearched = function( kw )
    {
        for ( var 
0this.searchedKWs.lengthi++ )
        {
            if ( 
kw.search(this.searchedKWs[i]) === )
            {
                return 
true;
            }
        }

        return 
false;
    };

    
this.find = function( filter )
    {
        var 
out = [], cacheself this;
        
cache this.getState();

        $.
each(cache, function(iditem)
        {
            var 
found = $.isFunction(filter)
                ? 
filter.call(selfitemid)
                : 
true

            
if ( found ) {
                
out.push(item);
            }
        });

        return 
out;
    };
};

SEARCHSYS.UserState.prototype = new SEARCHSYS.State.PROTO();



SEARCHSYS.userSelector = (function() {

    var 
_cache = new SEARCHSYS.UserState();
    var 
ajaxTimeoutsyncing false;

    var 
nodeesel2;
    var 
_settings = {};

    var 
formatResultformatSelectiongetDatasyncDatagetDataFromCachehighlightTermgetGroupSettingsnormalizeText;

    
getGroupSettings = function( group ) {
        return 
_settings.groups[group] || _settings.groupDefaults;
    };

    
highlightTerm = function( termtext ) {
        var 
match text.toUpperCase().indexOf(term.toUpperCase()),
            
tl=term.length,
            
markup = [];

        if ( 
match ) {
            
markup.push(text);
        } else {
            
markup.push(text.substring(0match));
            
markup.push("<span class='esel2-match'>");
            
markup.push(text.substring(matchmatch tl));
            
markup.push("</span>");
            
markup.push(text.substring(match tltext.length));
        }

        return 
markup.join("");
    };

    
formatResult = function( datacontainerquery ) {
        if ( 
data.type == "msg" )
            return 
'<div class="peep_small">' data.text '</div>';

        if ( !
data.id )
            return 
'<div class="peep_small peep_remark">' data.text '</div>';

        var 
html = $(data.html);
        
html.find(".us-ddi-text").html("<span>" highlightTerm(query.termdata.text) + "</span>");

        return 
html;
    };

    
formatSelection = function( datacontainer ) {
        
document.location.href data.url;
        return 
data.text;
    };

    
syncData = function( termcallback ) {
        
syncing true;
        $.
getJSON(_settings.rspUrl, {termtermcontext_settings.context}, function( data ) {
            
syncing false;
            if ( $.
isFunction(callback) ) callback(data);
            
_cache.mergeState(data);
        });
    };

    
normalizeText = function (term) {
        if (
term == null) {
            return 
term;
        }
        var 
accentMap = {
            
"à""a""á""a""â""a""ã""a""ä""a",
            
"è""e""é""e""ê""e",           "ë""e",
            
"ì""i""í""i""î""i""ñ""n""ï""i",
            
"ò""o""ó""o""ô""o""õ""o""ö""o",
            
"ù""u""ú""u""û""u",           "ü""u",
            
"ý""y",                     "ÿ""y"
        
};
        var 
ret "";
        for (var 
0term.lengthi++) {
            
ret += accentMapterm.charAt(i) ] || term.charAt(i);
        }

        return 
ret;
    };

    
getDataFromCache = function( termcount ) {
        
count count || 10;
        var 
tmp;
        
        var 
out = [], groups = {}, orderedGroups = [], state _cache.find(function( item ) {
            
tmp normalizeText(item.text).toUpperCase().indexOf(term.toUpperCase());
            if ( 
tmp ) {
                
tmp normalizeText(item.info).toUpperCase().indexOf(term.toUpperCase());
                if ( 
tmp ) {
                    return 
false;
                }
                return 
true;
            }

            return 
true;
        });

        
state.reverse();

        var 
groupsCount 0lastGroupval esel2.val();

        $.
each(state, function(iditem) {
            if ( $.
inArray(item.id.toString(), val) >= || count == ) {
                return;
            }
            
count--;

            if ( 
item.group ) {
                if ( !
groups[item.group] ) {
                    
groups[item.group] = {
                        
textitem.group,
                        
children: []
                    };
                    
groupsCount++;
                    
lastGroup item.group;
                }

                
groups[item.group].children.push(item);
            } else {
                
out.push(item);
            }
        });

        if (
out.length || groupsCount 0) {
            
_settings.groups _settings.groups || {};

            $.
each(_settings.groups, function(groupNamegroupSettings) {
                if ( !
groups[groupName] && groupSettings.alwaysVisible && groupSettings.noMatchMessage ) {
                    
groups[groupName] = {
                        
textgroupName,
                        
children: [{
                            
textPEEP.getLanguageText(groupSettings.noMatchMessage.prefixgroupSettings.noMatchMessage.key, {
                                
"term"term
                            
}),
                            
type'msg'
                        
}]
                    };

                    
groupsCount++;
                }
            });
        }

        $.
each(groups, function( igroup ) {
            
orderedGroups.push(group);
        });

        
orderedGroups.sort(function(ab) {
            var 
sA getGroupSettings(a.text);
            var 
sB getGroupSettings(b.text);

            return 
sA.priority sB.priority;
        });

        if ( 
lastGroup ) {
            var 
temp groupsCount == && !getGroupSettings(lastGroup).alwaysVisible groups[lastGroup].children orderedGroups;

            $.
each(temp, function(idgroup) {
                
out.unshift(group);
            });
        }

        return 
out;
    };

    
getData = function( options ) {
        var 
state getDataFromCache(options.term);

        var 
sync = $.trim(options.term) && !_cache.isSearched(options.term);

        if ( 
sync ) {

            if ( 
ajaxTimeout ) {
                
window.clearTimeout(ajaxTimeout);
            }

            
ajaxTimeout window.setTimeout(function() {
                
_cache.addKeyword(options.term);
                
syncData(options.term);
            }, 
300);
        }

        if ( (!
sync || state.length) && !syncing ) {
            
options.callback({
                
resultsstate
            
});
        }
    };

    return {
        
init: function( selectorsettingsoptionsdata ) {

            if ( $.
isPlainObject(data) ) {
                
_cache.setState(data);
            }

            
_settings settings;

            
node = $(selector);

            
node.esel2($.extend(options, {
                
"query"getData,
                
"formatResult"formatResult,
                
"formatSelection"formatSelection,
                
"formatNoMatches": function( term ) {
                    return 
PEEP.getLanguageText('searchsys''selector_no_matches', {
                        
"term"term
                    
});
                },
                
"formatSearching": function() {
                    return 
PEEP.getLanguageText('searchsys''selector_searching');
                },
                
formatInputTooShort: function (inputmin) {
                    return 
PEEP.getLanguageText('searchsys''input_too_short', {chars : (min input.length) });
                },
                
"postRender": function(term) {
                    var 
items esel2.results.find(".esel2-result").length;
                    if ( 
items )
                    {
                        
esel2.results.append("<li class='esel2-more-results'><a href='" _settings.viewAllUrl "?term=" encodeURIComponent(term) + "'>" PEEP.getLanguageText('searchsys''view_all_results') + "</a></li>");
                    }
                    var 
$resultsCont esel2.results.parent();
                    if (
$resultsCont.css('background-color') == 'transparent')
                    {
                        
$resultsCont.css('background-color', $('#floatbox_prototype .floatbox_container .peep_bg_color').css('background-color'));
                    }
                }
            }));

            
node.next(".us-field-fake").hide();

            
esel2 node.data().esel2;

            
node.get(0).focus = function() {
                
esel2.focusSearch();
            };

            
_cache.observer.bind('change', function()
            {
                
esel2.updateResults();
            });

            return 
esel2;
        }
    }
})();

SEARCHSYS.UserSelectorFormElement = function( idname ) {
    var 
formElement = new PeepFormElementidname );

    
formElement.init = function( selectorsettingsoptionsdata ) {
        
formElement.esel2 SEARCHSYS.userSelector.init(selectorsettingsoptionsdata);
    };

    
formElement.resetValue = function() {
        
formElement.esel2.data([]);
    };

    
formElement.getValue = function() {
        return 
formElement.esel2.val();
    };

    
formElement.setValue = function( val ) {
        
formElement.esel2.data(val);
    };

    return 
formElement;
};
?>
Онлайн: 2
Реклама