Your IP : 3.135.223.175


Current Path : /usr/local/mgr5/skins/orion/src/
Upload File :
Current File : //usr/local/mgr5/skins/orion/src/App.GlobalSearch.js

/**
 * Module provide global search
 *  @param {object} window  global object
 *  @param {function} $ jQuery library
 *  @param {object} EventMgr EventMgr library
 *  @param {object} App Application
 *  @return {object} api
 */
App.GlobalSearch = function(window, $, EventMgr, App) {
  'use strict';

  var timeoutId,
      loaderTimeid,
      elem = [],
      emptyElem = [ { description: { $: pageInfo.notfound }, __empty__: true } ],
      keys = {
        '38': 'UPKEY',
        '40': 'DOWNKEY',
        '37': 'LEFTKEY',
        '39': 'RIGHTKEY',
        '13': 'ENTERKEY',
        '9': 'TABKEY'
      };

  function $mountNode() {
    return App.u.selectorCache('.i-gsearch');
  }

  function $body() {
    return App.u.selectorCache('body');
  }

  function keyUpHandler(e) {
    var key = e.which || e.keyCode,
        searchString = this.value,
        $selected = $('.b-gsearch__list-item_selected_yes');
    if (keys[key] === 'UPKEY') {
      var prev = $selected[0] ? $selected.prev() : $('.b-gsearch__list-item:first');
      if (prev.length !== 0) {
        $selected.removeClass('b-gsearch__list-item_selected_yes');
        prev.addClass('b-gsearch__list-item_selected_yes');
      }
      e.preventDefault();
    } else if (keys[key] === 'DOWNKEY') {
      var next = $selected[0] ? $selected.next() : $('.b-gsearch__list-item:first');
      if (next.length !== 0) {
        $selected.removeClass('b-gsearch__list-item_selected_yes');
        next.addClass('b-gsearch__list-item_selected_yes');
      }
      e.preventDefault();
    } else if (keys[key] === 'ENTERKEY') {
      if ($selected[0]) {
        clickListHandler.apply($selected[0], [e]);
      } else {
        searchHandler(searchString);
      }
      e.preventDefault();
    } else {
      clearTimeout(timeoutId);
      timeoutId = setTimeout(function() {
        searchHandler(searchString);
      }, 250);
    }
    if (searchString !== '') {
      showSearchReset();
    } else {
      hideSearchReset();
    }
  }

  function showSearchReset() {
    var $crossBtn = $('.b-gsearch__close');
    if (!$crossBtn.hasClass('b-gsearch__close_is_show')) {
      $crossBtn.addClass('b-gsearch__close_is_show');
    }
  }

  function hideSearchReset() {
    $('.b-gsearch__close').removeClass('b-gsearch__close_is_show');
  }

  function searchFailHandler(e, data) {
    unsetLoader();
  }

  function searchRespHandler(e, data) {
    var doc = data.doc || {},
        html = '';
    if (doc.elem) {
      elem = doc.elem;
      if (elem.length > 20) {
        elem.splice(20, elem.length - 1);
      }
      html = tempFunc({ elem: elem });
    } else {
      html = tempFunc({ elem: emptyElem });
    }
    $mountNode().html(html);
    $body().on('click.globalSearch', closeList);
    unsetLoader();
  }

  var template = '<div class="b-gsearch__list-wrapper b-select-ac__list-scroll-wrapper">' +
    '<div class="b-select-ac__list-wrapper b-gsearch__list " style="display:block;">' +
      '<ul class="b-select-ac__list">' +
        '{{~it.elem :v :i}}' +
          '<li class="b-gsearch__list-item i-gsearch__list-item b-select-ac__list-item" data-index="{{=i}}">{{=window.filterXSS(v.description.$)}}</li>' +
        '{{~}}' +
      '</ul>' +
    '</div>' +
  '</div>';

  var tempFunc = window.doT.template(template);

  function searchHandler(searchString) {
    if (searchString !== '') {
      var param = {
        func: 'globalindex',
        elid: searchString,
        out: 'json'
      };
      EventMgr.trigger('ajaxRequest', {
          param: param,
          trfunc: 'globalSearchResponse',
          failfunc: 'globalSearchFail',
          outtype: 'json',
          queue: 'noqueue'
      });
      setLoader();
    }
  }

  function clickListHandler() {
    var index = this.getAttribute('data-index');
    if (elem && elem[index] && !elem[index].__empty__) {
      var param = App.u.parseParams(elem[index].filter.$);
      param.func = elem[index].func.$;
      param.filter = 'on';
      //var param = App.u.parseParams('func=paymethod&filter=on&name=rub');
      EventMgr.trigger('ajaxRequest', {
                param: param,
                invar: {
                   newtab: true,  __src: 'menuAction'
                },
                type: 'get',
                outtype: 'json',
                trfunc: 'ajaxResponse',
                failfunc: 'failMenuAjaxResponse',
                queue: 'noqueue' });

    }
    closeList();
  }

  function closeList() {
    $mountNode().html('');
    elem = [];
    $body().off('click.globalSearch');
  }

  function setLoader() {
    //clearTimeout(loaderTimeid);
    loaderTimeid = setTimeout(function() {
      $('.i-gsearch__input').addClass('b-gsearch__input_loading_yes');
    }, 100);
  }

  function unsetLoader() {
    clearTimeout(loaderTimeid);
    $('.i-gsearch__input').removeClass('b-gsearch__input_loading_yes');
  }

  function resetHandler(e) {
    e.preventDefault();
    $('.i-gsearch__input').val('');
    hideSearchReset()
  }

  function init() {
    EventMgr.on($mainWrapper(), '.i-gsearch__input', 'keyup', keyUpHandler);
    EventMgr.on($mainWrapper(), '.i-gsearch__input', 'focus', keyUpHandler);
    EventMgr.on($mainWrapper(), '.i-gsearch__list-item', 'click', clickListHandler);
    EventMgr.on($mainWrapper(), '.i-gsearch__close', 'click', resetHandler);
    EventMgr.bind('globalSearchResponse', searchRespHandler);
    EventMgr.bind('globalSearchFail', searchFailHandler);
  }

  function $mainWrapper() {
    return App.u.selectorCache('#main-wrapper');
  }

  var api = {
    init: init
  };

  return api;

} (window, $, EventMgr, App);