// @codekit-prepend "gui.js" // @koala-prepend "gui.js" (function($) { MaterioFlag = function(){ var _isLoadingList = false ; /** * init() */ function init(){ //trace('MaterioFlag :: init MaterioFlag'); buildBlocks(); $(document) .bind('flagGlobalAfterLinkUpdate', onFlaging) .bind('resultscompleted resultschanged previewloaded', onResultsUpdated) .bind('init-scroller-pager', onInitScrollerPager) .bind('load-scroller-pager', onLoadScrollerPager) .bind('view-mode-changed', onViewModeChanged) .bind('history-state-change', onHistoryStateChange); // ajaxifyLinks(); // trigger updated event for direct html loading if(isList()){ setTimeout(function(){ triggerContentChanged(); }, 10); } }; function onFlaging(event){ //trace('MaterioFlag :: onFlaging', event); refreshBlocks(); }; function onResultsUpdated(event){ //trace('MaterioFlag :: onResultsUpdated', event); ajaxifyLinks(event.container); }; function buildBlocks(activename){ //trace('MaterioFlag :: buildBlocks | activename', activename); if($('#block-materio-flag-materio-flag-mybookmarks').length){ var type = 'bookmarks'; var block = '#block-materio-flag-materio-flag-mybookmarks'; }else if($('#block-materio-flag-materio-flag-mylists').length){ var type = 'lists'; var block = '#block-materio-flag-materio-flag-mylists'; } switch(type){ case 'bookmarks': var name = type; $('h2 .listname', block).attr('name', name).bind('click', onClickShowPreview); $('').appendTo($('h2', block)).attr('name', name).bind('click', onClickClosePreview); // $('').appendTo($('h2', block)).bind('click', onClickShowPreview); // if(!readCookie('materiobookmarkspreviewopened')){ // showPreview('bookmarks', block); // }else{ // } break; case 'lists': // nav block $('a.open-list:not(.ajax-processed)', '#block-materio-flag-materio-flag-mylists-nav').each(function(index){ //trace('nav block a.open-list this', this); $this = $(this) .bind('click', onClickOpenLink) .addClass('ajax-processed'); var name = $this.attr('class').match(/flag_lists_[^_]+_[0-9]+/); // trace('MaterioFlag :: name', name); $('').attr('name', name).insertAfter($this).bind('click', onClickShowPreview); }); $('a.edit-list:not(.ajax-processed)', '#block-materio-flag-materio-flag-mylists-nav') .bind('click', onCLickEditList) .addClass('ajax-processed'); $('a.flag-lists-create:not(.ajax-processed)', '#block-materio-flag-materio-flag-mylists-nav') .bind('click', onClickCreatLink) .addClass('ajax-processed'); // preview block $('section.flag-list:not(.ajax-processed)', '#block-materio-flag-materio-flag-mylists').each(function(index){ var name = $(this).attr('class').match(/flag_lists_[^_]+_[0-9]+/); $('').appendTo($('h2.listname', this)).attr('name', name).bind('click', onClickClosePreview); $('a.open-list', this).bind('click', onClickOpenLink); }).addClass('ajax-processed'); break; } // trigger refresh block event for enabling lazyload images setTimeout(function(){ $.event.trigger({ type : 'my'+type+'-block-builded', block : block, name : name }); },10); // trace('MaterioFlag :: activename', activename); if(activename == undefined) activename = readCookie('materiomyflaglistsopened'); // trace('MaterioFlag :: activename', activename); if(activename) showPreview(activename, block); }; function refreshBlocks(name){ //trace('MaterioFlag :: refreshBlocks | name', name); if($('#block-materio-flag-materio-flag-mybookmarks').length){ var type = 'bookmarks'; }else if($('#block-materio-flag-materio-flag-mylists').length){ var type = 'lists'; } if(type != undefined){ var id = '#block-materio-flag-materio-flag-my'+type; var url = Drupal.settings.basePath+Drupal.settings.pathPrefix+'materioflag/refresh/block/'+type; $.getJSON(url, function(json){ // trace('MaterioFlag :: block refreshed '+type, json); $(id).replaceWith(json.block); $('#block-materio-flag-materio-flag-mylists-nav').replaceWith(json.block_nav); buildBlocks(name); $.event.trigger({ type : 'my'+type+'-block-updated', listname : name }); }); } }; function ajaxifyLinks(container){ //trace('MaterioFlag :: ajaxifyLinks', container); container = ((container != null) ? container : 'body'); // trace('MaterioFlag :: typeof Drupal.flagLink', typeof Drupal.flagLink); if (typeof Drupal.flagLink != 'undefined') Drupal.flagLink(container); if(isList()){ var fid = $('.materio-flags-list', '#content').attr('fid'); $('li.unflag-action.fid-'+fid+' a:not(.ajax-processed), li.flag-bookmarks a.unflag-action:not(.ajax-processed)') .bind('click', onUnflagList) .addClass('ajax-processed'); } $('a.flag-lists-create:not(.ajax-processed)', container) .bind('click', onClickCreatLink) .addClass('ajax-processed'); }; /** * show hide preview */ function onClickShowPreview(event){ //trace('MaterioFlag :: onClickShowPreview', event); showPreview($(this).attr('name'), $(this).parent('.block').attr('id')); }; function showPreview(name, block){ //trace('MaterioFlag :: showPreview', name); $('section.'+name, block).addClass('active') .siblings('section').removeClass('active'); createCookie('materiomyflaglistsopened', name, 1); $.event.trigger('init-layout'); }; function onClickClosePreview(event){ //trace('MaterioFlag :: onClickClosePreview', event); eraseCookie('materiomyflaglistsopened'); if($(this).attr('name') == 'bookmarks'){ $(this).parents('.block').find('section.bookmarks').removeClass('active'); }else{ $(this).parents('section.flag-list').removeClass('active'); } $.event.trigger('init-layout'); }; /** * onClickOpenLink */ function onClickOpenLink(event){ event.preventDefault(); var $link = $(event.currentTarget); var fid = $link.attr('href').match(/lists\/([0-9]+)$/); // trace('MaterioFlag :: type', type); loadList(fid[1]); return false; }; function loadList(fid){ //trace('MaterioFlag :: loadList | fid', fid); var url = Drupal.settings.basePath+Drupal.settings.pathPrefix+'materioflag/ajax/list/'+fid; $.event.trigger('loading-content'); $.getJSON(url, {'current_path':document.location.href},function(json){ //trace('MaterioFlag :: json', json); if(json.redirect){ window.location = json.redirect; }else{ changeContent(json); } }); }; function changeContent(json){ if(json.rendered){ $('.inner-content','#content').html(json.rendered); $.event.trigger('loaded-content'); // no need of ajaxifylinks because it's triggered with resultschanged // ajaxifyLinks('#content'); var path = Drupal.settings.basePath + Drupal.settings.pathPrefix + json.path; $.event.trigger({ type : 'new-history-page', path : path, title : json.title, content : json.rendered }); // TODO: change language links for folders // 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) // }; triggerContentChanged(); }else{ //trace('MaterioFlag :: no results'); } }; function triggerContentChanged(){ $.event.trigger({ type: 'resultschanged', container : '#content .flaglist-items' }); }; /** * onClickCreatLink(event) */ function onClickCreatLink(event){ //trace('MaterioFlag :: onClickCreatLink | event', event); event.preventDefault(); var $link = $(event.currentTarget); var type = $link.attr('href').match(/[^\/]*$/); // trace('MaterioFlag :: type', type); var url = Drupal.settings.basePath+Drupal.settings.pathPrefix+'materioflag/createlist/form/'+type[0]; $.getJSON(url, function(json){ //trace('MaterioFlag :: creat list : json', json); showCreateListForm(json, $link); }); return false; }; function showCreateListForm(json, $link){ //trace('MaterioFlag :: showCreateListForm | json', json); // google analytics $.event.trigger({ type:"record-stat", categorie:"flagLists", action: 'show create form' }); var $modal = $('