| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327 | // @codekit-prepend "gui.js"(function($) {MaterioSearchApiAjax = function(){  var _isloadingresults = false;  var _$content = $('#content');      // TODO:  define $content by module settings    /**  * init()  */  function init(){    //trace('init MaterioSearchApiAjax');    initSearchAjax();    initViewMode();  };  /**  * searchAjax  */  function initSearchAjax(){    // trace('initSearchAjax');    $('#materio-search-api-search-form').bind('submit', function(event) {      // trace('search submited', event);      var $this = $(this);      setTimeout(function(){        loadResults(getSearchKeys());      },10);      return false;    });    // /!\ AUTOCOMPLETE SELECT EVENT need a patch http://drupal.org/node/365241#comment-5374686    $("#edit-searchfield")      .bind('autocompleteSelect', function(event) {        $(this).parents('.form').trigger('submit');      })      .bind('focus', function(event){        $(this).select();      });    $(document)      .bind('theme-ready', onThemeReady)      .bind('init-scroller-pager', onInitScrollerPager)      .bind('load-scroller-pager', onLoadScrollerPager)      .bind('view-mode-changed', onViewModeChanged)      .bind('history-state-change', onHistoryStateChange);      };    function onThemeReady(event){    // trace('MaterioSearchApiAjax :: onThemeReady');    if( isActuality() || isExplore() ){      $.event.trigger({        type : 'resultschanged',        container : isActuality() ? '#content .actuality-items' : '#content .search-results'      });      }  };    function getSearchKeys(){    return $('#materio-search-api-search-form').find('input[name*="searchfield"]').val();  };  function loadResults(keys){    trace('keys', keys);    if(keys !== undefined && keys !== ''  && keys.length >= 2){      keys = keys.replace('/', ' ');      var types = {}, stringTypes = [];      $('#edit-bundles-filter', '#materio-search-api-search-form').find('input[type*="checkbox"]').each(function(i){        $this = $(this);        if ( $this.attr('checked') )          stringTypes.push($this.val());        types[$this.val()] = $this.attr('checked');      });      //trace('types', types);      if(!_isloadingresults){        $.event.trigger('loading-content');        _isloadingresults = true;        $('#materio-search-api-search-form').addClass('loading');        // trace('window.location.href',window.location.href);        // TODO:  record ajax path in a variable from materio_search_api_ajax_init        $.getJSON(Drupal.settings.basePath+Drupal.settings.pathPrefix+'materio_search_api_ajax/search/',           {'types':types,'current_path':document.location.href, keys:keys},          function(json){            //trace('json', json);                        // google analytics            $.event.trigger({              type : "record-stat",              categorie : 'Search',              action : keys,              label : 'filters : '+ stringTypes.join(' ,'),              value : json.count            });            if(json.redirect){              window.location = json.redirect;            }else{              $.event.trigger('loaded-content');                    _isloadingresults = false;              $('#materio-search-api-search-form').removeClass('loading');              changeContent(json);              }                    });      }    }  };  function loadActuality(){    if(!_isloadingresults){      $.event.trigger('loading-content');      _isloadingresults = true;      $('#materio-search-api-search-form').addClass('loading');      var url = Drupal.settings.basePath+Drupal.settings.pathPrefix+'materio_search_api_ajax/actuality';      $.getJSON(url,         function(json){          //trace('json', json);          $.event.trigger('resultsloaded');                _isloadingresults = false;          $('#materio-search-api-search-form').removeClass('loading');          changeContent(json);      });    }  };  function changeContent(json){    trace('MaterioSearchApiAjax changeContent | json', json);    if(json.return){      $.event.trigger('loaded-content');      $('.inner-content',_$content).html(json.return).find('ul.pager').hide();      triggerContentChanged();    }else{      //trace('no results');    }    $.event.trigger({      type : 'new-history-page',      path : Drupal.settings.basePath + Drupal.settings.pathPrefix + json.path,      title : json.title,      content : json.return    });        for (language in Drupal.settings.materio_search_api_ajax.languages) {      var l = Drupal.settings.materio_search_api_ajax.languages[language];      $('#block-locale-language li.'+language+' a').attr('href', Drupal.settings.basePath + l.prefix+'/' + json.search_path + '/' + json.keys)            };  };  function triggerContentChanged(){    //trace('MaterioSearchApiAjax :: triggerContentChanged');    $.event.trigger({      type : 'resultschanged',      container : '#content .search-results, #content .actuality-items'    });  };  function onInitScrollerPager(event){    if(isActuality() || isExplore())      event.pager.hide();  };  function onLoadScrollerPager(event){    if(!_isloadingresults){      if (isExplore())        loadNextResultsPage(event.href);      if(isActuality())        loadNextActualityPage(event.href);    }  };  function loadNextResultsPage(href){    // trace('loadNextResultsPage');    var keys = href.match(/explore\/([^\/|\?]+)/);    var page = href.match(/\?page=([0-9]+)/);    var url = Drupal.settings.basePath+Drupal.settings.pathPrefix+'materio_search_api_ajax/search/'+page[1];        loadNextPage(url, keys[1], $('.materiobase-results', _$content), '.search-results');  };  function loadNextActualityPage(href){    // trace('loadNextActualityPage');    var page = href.match(/\?page=([0-9]+)/);    var url = Drupal.settings.basePath+Drupal.settings.pathPrefix+'materio_search_api_ajax/actuality/'+page[1];    loadNextPage(url, '', $('.materiobase-actuality', _$content), '.actuality-items');  };  function loadNextPage(url, keys, $container, target){    //trace('MaterioSearchApiAjax :: loadNextPage()');    _isloadingresults = true;    $container.addClass('loading');    $.getJSON(url, {'keys':keys}, function(json){      //trace('json', json);      $container.removeClass('loading');      addNextpage(json, target);      // addNextpageItemByItem($(json.return), target);    });  };  function addNextpage(json, container_class){    // trace('json',json);    if(json){      var $newcontent = $(json.return),          $newitems = $(container_class, $newcontent).children('article'), //.addClass('just-added'),          $newpager = $('ul.pager', $newcontent);      $(container_class, _$content).append($newitems);      $('ul.pager', _$content).replaceWith($newpager.hide());      // TODO: animation, this should be on theme side      $(container_class, _$content).children('.just-added').each(function(i){        var $this = $(this);        setTimeout(function(){          $this.removeClass('just-added');        }, 150*i);      });      $.event.trigger({        type : 'resultscompleted',        container : $(container_class, _$content)      });    }    _isloadingresults = false;  };  // TEST not used   function addNextpageItemByItem($newcontent, container_class){    //trace('MaterioSearchApiAjax :: addNextpageItemByItem()');    $('ul.pager', _$content).remove();    $(container_class, _$content).append($(container_class, $newcontent).children('article').eq(0));    if($(container_class, $newcontent).children('article').length){      setTimeout(function(){        addNextpageItemByItem($newcontent, container_class);      }, 200);    }else{      _isloadingresults = false;      $('ul.pager', _$content).replaceWith($('ul.pager', $newcontent).hide());      $.event.trigger({        type : 'resultscompleted',        container : $(container_class, _$content)      });      }  };    /**  * viewmode  */  function initViewMode(){    $('.viewmode-link').click(function(event){      event.preventDefault();            if(!$(this).is('.active'))        changeViewMode($(this).attr('rel'), $(this));      return false;    });  };  function changeViewMode(vm, $btn){    if(!_isloadingresults){      _isloadingresults = true;      $.getJSON(Drupal.settings.basePath+'materio_search_api_ajax/viewmode/change/'+vm, function(json){        //trace('viewmode json', json);      _isloadingresults = false;        if (json.statut == "saved"){                    // google analytics          $.event.trigger({            type : "record-stat",            categorie : 'Viewmode',            action : vm,            label : isActuality() ? 'Actualities' : 'Search results'          });          $.event.trigger('view-mode-changed');          $('.viewmode-link, .viewmode-link i').removeClass('active');          $btn.addClass('active').find('i').addClass('active');        }                });    }  };  function onViewModeChanged(event){    if (isExplore())      loadResults(getSearchKeys());    if(isActuality())      loadActuality();  };  /**  * history  */  function onHistoryStateChange(event){    if(isExplore() || isActuality())      triggerContentChanged();    // TODO:  pushstate trogger state change, so we have a retriggerring here on loading new results … how to avoid this    };  /**  * helpers  */  function isExplore(){     return $('.search-results', '#content').length;  };  function isActuality(){    return $('.actuality-items', '#content').length;  };      init();};  var materiosearchapiajax = new MaterioSearchApiAjax();  })(jQuery);
 |