included entree and entree#notice entree#index in ajax history nav

This commit is contained in:
Bachir Soussi Chiadmi
2018-04-11 14:36:24 +02:00
parent b33159e3d0
commit 1d3a3dd6fd
10 changed files with 3194 additions and 234 deletions
@@ -4,6 +4,7 @@ if(edlp.redirect){
console.log('history redirect');
window.localStorage.setItem('edlp_origin_path', edlp.sys_path.replace(/^\//, ''));
window.localStorage.setItem('edlp_origin_url', window.location.pathname);
window.localStorage.setItem('edlp_origin_hash', window.location.hash);
// redirect to home
window.location.replace(window.location.origin);
}else{
@@ -5,6 +5,7 @@ console.log('EDLP THEME MAIN.js');
var _ajax_settings = drupalSettings.edlp_ajax;
var _$body = $('body');
var _is_front = _$body.is('.path-frontpage');
var _corpus_ready = false;
var _$corpus_canvas;
var _$row = $('main[role="main"]>.layout-content>.row');
var _$ajaxLinks;
@@ -19,6 +20,8 @@ console.log('EDLP THEME MAIN.js');
function init(){
console.log("EdlpTheme init()");
initAjaxLinks();
initHistory();
if(!drupalSettings.path.isFront)
@@ -29,7 +32,6 @@ console.log('EDLP THEME MAIN.js');
_audioPlayer = new AudioPlayer();
_compoPlayer = new CompoPlayer();
initAjaxLinks();
// if (_$body.is('.path-productions')) initProductions();
// if(_$body.is('.path-frontpage')) initHome();
@@ -59,7 +61,31 @@ console.log('EDLP THEME MAIN.js');
_compoPlayer.newCompo();
})
.on('search-results-loaded', initAjaxLinks)
.on('open_entree', closeAllModals)
// do not close index or notice modale on entree click
.on('open_entree', function(e){
console.log('on_open_entree : e', e);
closeAllModals();
// add body class for currently loaded content
// var body_classes = [
// 'path-'+sys_path.replace(/\//g, '-'),
// 'entity-type-'+data.entity_type,
// 'bundle-'+data.bundle,
// 'view-mode-'+data.view_mode
// ];
_$body.removeClass();//.addClass(body_classes.join(' '));
// record new history state
if(typeof e.url != 'undefined'){
// var state = {
// ajax_path:null,
// sys_path:null,
// entree_tid:e.tid
// };
var state = getSysPathState(e.sys_path);
history.pushState(state, null, e.url);
}
})
.on('close_entree', backToFrontPage);
}
@@ -84,44 +110,56 @@ console.log('EDLP THEME MAIN.js');
// / _ \ | / _` \ \ /
// /_/ \_\/ \__,_/_\_\
// |__/
function parseAjaxSysPath(sys_path, view_mode){
// console.log('Theme : parseAjaxSysPath', sys_path);
var ajax_path = sys_path;
function getSysPathState(sys_path, view_mode){
// console.log('Theme : getSysPathState', sys_path);
var state = {
'sys_path':sys_path,
'ajax_path': sys_path
};
// convert node link to edlp_ajax_node module links
var node_match = ajax_path.match(/^\/?(node\/\d+)$/g);
var term_match = ajax_path.match(/^\/?(taxonomy\/term\/\d+)$/g);
var node_match = state.ajax_path.match(/^\/?(node\/(\d+))$/i);
console.log('node_match', node_match);
var term_match = state.ajax_path.match(/^\/?(taxonomy\/term\/(\d+))$/i);
console.log('term_match', term_match);
if(node_match){
ajax_path = _ajax_settings.entityjson_path+'/'+node_match[0];
state.ajax_path = _ajax_settings.entityjson_path+'/'+node_match[1];
state.node_nid = node_match[2];
// check for viewmode attribute
if(view_mode){
ajax_path += '/'+view_mode;
state.ajax_path += '/'+view_mode;
}
}else if(term_match){
ajax_path = _ajax_settings.entityjson_path+'/'+term_match[0];
ajax_path = ajax_path.replace(/taxonomy\/term/, 'taxonomy_term');
// terms are always entrees, there's no other vocabulary links in front
state.ajax_path = _ajax_settings.entityjson_path+'/'+term_match[1];
state.ajax_path = state.ajax_path.replace(/taxonomy\/term/, 'taxonomy_term');
state.entree_tid = term_match[2];
// check for viewmode attribute
if(view_mode){
ajax_path += '/'+view_mode;
state.ajax_path += '/'+view_mode;
state.view_mode = view_mode;
}else{
state.ajax_path = null;
}
}else{
// convert other link to ajax
// TODO: we assume that other links (no node, no term) are all from own modules (e.g. productions) !! may not be true !!
ajax_path += '/ajax'
state.ajax_path += '/ajax'
}
return ajax_path;
return state;
};
function ajaxLoadContent(url, sys_path, ajax_path, selector){
console.log('ajaxLoadContent : url', url);
// function ajaxLoadContent(url, sys_path, ajax_path, selector){
function ajaxLoadContent(state){
console.log('ajaxLoadContent : url', state.url);
_$body.addClass('ajax-loading');
var path = window.location.origin + Drupal.url(ajax_path);
var path = window.location.origin + Drupal.url(state.ajax_path);
$.getJSON(path, {})
.done(function(data){
onAjaxLoaded(data, url, ajax_path, sys_path, selector);
onAjaxLoaded(data, state);
})
.fail(function(jqxhr, textStatus, error){
onAjaxLoadError(jqxhr, textStatus, error, sys_path);
onAjaxLoadError(jqxhr, textStatus, error, state.sys_path);
});
};
function onAjaxLoadError(jqxhr, textStatus, error, sys_path){
@@ -129,22 +167,18 @@ console.log('EDLP THEME MAIN.js');
$('.ajax-loading').removeClass('ajax-loading');
_$body.removeClass('ajax-loading');
};
function onAjaxLoaded(data, url, ajax_path, sys_path, selector){
console.log('ajax loaded url:'+url+' ajax_path:'+ajax_path+' sys_path:'+sys_path);
// function onAjaxLoaded(data, url, ajax_path, sys_path, selector){
function onAjaxLoaded(data, state){
console.log('ajax loaded url:'+state.url+' ajax_path:'+state.ajax_path+' sys_path:'+state.sys_path);
// reset all style may been added by other pages (like masonry for productions)
// and replace all content with newly loaded
// TODO: build a system to replace or append contents (like studio + search)
_$row.removeAttr('style').html(data.rendered);
// add close btn
if(sys_path != 'productions'){
addCloseBtnToCols();
}
// add body class for currently loaded content
var body_classes = [
'path-'+sys_path.replace(/\//g, '-'),
'path-'+state.sys_path.replace(/\//g, '-'),
'entity-type-'+data.entity_type,
'bundle-'+data.bundle,
'view-mode-'+data.view_mode
@@ -152,8 +186,9 @@ console.log('EDLP THEME MAIN.js');
_$body.removeClass().addClass(body_classes.join(' '));
// id node add a generic path-node class to body
m = sys_path.match(/^\/?(node\/\d+)$/g);
if(m)
// m = state.sys_path.match(/^\/?(node\/\d+)$/g);
// if(m)
if(state.node_nid)
_$body.addClass('path-edlp-node');
// handle clicked link classes
@@ -161,10 +196,14 @@ console.log('EDLP THEME MAIN.js');
$('.is-active').removeClass('is-active');
$('.is-active-trail').removeClass('is-active-trail');
if(typeof selector != 'undefined'){
$('a[selector="'+selector+'"]').addClass('is-active');
if(typeof state.selector != 'undefined'){
// in case of entree link (actualy, selector is used only for entries links)
console.log('selector', state.selector);
$('a[selector="'+state.selector+'"]').addClass('is-active');
}else{
$('a[data-drupal-link-system-path="'+sys_path+'"]').addClass('is-active');
$('a[data-drupal-link-system-path="'+state.sys_path+'"]').addClass('is-active');
// as new content is not related to entree, we trigger close entree
_$body.trigger({'type':'new-content-not-entree-ajax-loaded'});
}
// if bundle page (productions) activate production links
@@ -190,13 +229,17 @@ console.log('EDLP THEME MAIN.js');
// initScrollbars();
if(sys_path == "productions")
if(state.sys_path == "productions"){
initProductions();
}else{
addCloseBtnToCols();
}
initAjaxLinks();
// trigger other modules behaviours
_$body.trigger({'type':'new-content-ajax-loaded'});
// and call druapl behaviours
Drupal.attachBehaviors(_$row[0]);
@@ -204,16 +247,17 @@ console.log('EDLP THEME MAIN.js');
_$body.removeClass('ajax-loading');
var state = {
ajax_path:ajax_path,
sys_path:sys_path,
};
// url is null means that we are loading content on popState event
// so we don't record the state again
if(url){
if(state.url){
// var state = {
// ajax_path:ajax_path,
// sys_path:sys_path,
// };
// console.log('url:'+url+' ; state',state);
// console.log(window.location);
// we can not pushestate with absolute url
history.pushState(state, null, url);
history.pushState(state, null, state.url);
}
};
@@ -253,41 +297,73 @@ console.log('EDLP THEME MAIN.js');
window.addEventListener('popstate', onHistoryPopState);
};
function initFirstLoad(){
console.log('theme : initFirstLoad()', window.location);
console.log(document.cookie);
var url = window.location.pathname;
// var origin_path = getCookie('edlp_origin_path');
// console.log('origin_path', origin_path);
console.log('theme : initFirstLoad()');
var origin_sys_path = window.localStorage.getItem('edlp_origin_path');
console.log('origin_sys_path', origin_sys_path);
var origin_url = window.localStorage.getItem('edlp_origin_url');
console.log('origin_url', origin_url);
if(origin_sys_path){
var origin_url = window.localStorage.getItem('edlp_origin_url');
// origin_hash is used as viewmode for taxonomy term entrees load (index or notice)
var origin_hash = window.localStorage.getItem('edlp_origin_hash');
var view_mode = origin_hash.replace('#', '');
if(view_mode){
var $link = $('[href="'+origin_url+'"][viewmode="'+view_mode+'"]');
var selector = $link.attr('selector') || null;
if(selector){
// in case of entree link (actualy, selector is used only for entries links)
if(_corpus_ready){
_$corpus_canvas.trigger({
type:'open-entree',
tid:$link.attr('tid')
});
}else{
// else : EdlpCorpus will check when ready if entry item (notice or index) is already .is-active
// .is-active class is added by onAjaxLoaded() (when content is loaded)
// but what if corpus ready before onAjaxLoaded
$('li.entree[tid="'+$link.attr('tid')+'"] a.term-link').addClass('is-active');
}
}
}
// create history state
var state = {
ajax_path: parseAjaxSysPath(origin_sys_path),
sys_path: origin_sys_path,
};
console.log('state', state);
var state = getSysPathState(origin_sys_path, view_mode);
// only if not entree path
if(state.ajax_path){
// load content through ajax
// ajaxLoadContent(null, state.sys_path, state.ajax_path, selector);
ajaxLoadContent(state);
}
// TODO what about entree alone (without notice or index)
if(state.entree_tid){
openEntree(state.entree_tid);
}
// record history state
history.replaceState(state, null, origin_url);
// load content through ajax
ajaxLoadContent(null, state.sys_path, state.ajax_path);
history.replaceState(state, null, origin_url+origin_hash);
// reset the storage
window.localStorage.removeItem("edlp_origin_path");
window.localStorage.removeItem("edlp_origin_url");
}else{
history.replaceState({home:true}, null, url);
history.replaceState({home:true}, null, window.location.pathname);
_$body.attr('booted', 'booted');
}
};
function onHistoryPopState(e){
//console.log('onPopState',e);
console.log('onPopState',e.state);
if(e.state.home){
backToFrontPage();
}else{
ajaxLoadContent(null, e.state.sys_path, e.state.ajax_path)
if(e.state.entree_tid){
openEntree(e.state.entree_tid);
}
if(e.state.ajax_path){
e.state.url = null;
// ajaxLoadContent(null, e.state.sys_path, e.state.ajax_path)
ajaxLoadContent(e.state);
}
}
};
@@ -338,7 +414,6 @@ console.log('EDLP THEME MAIN.js');
}
// other links
var url = $(this).attr('href');
var sys_path = $(this).attr('data-drupal-link-system-path');
// front page
@@ -349,15 +424,21 @@ console.log('EDLP THEME MAIN.js');
}
var view_mode = $link.attr('viewmode');
var ajax_path = parseAjaxSysPath(sys_path, view_mode);
var state = getSysPathState(sys_path, view_mode);
state.url = $(this).attr('href');
$link.addClass('ajax-loading');
if($link.is('[selector]')){
var selector = $link.attr('selector');
if(view_mode){
state.url += "#"+view_mode;
}
ajaxLoadContent(url, sys_path, ajax_path, selector);
if($link.is('[selector]')){
state.selector = $link.attr('selector');
}
$link.addClass('ajax-loading');
// ajaxLoadContent(url, sys_path, state.ajax_path, selector);
ajaxLoadContent(state);
return false;
};
@@ -368,6 +449,7 @@ console.log('EDLP THEME MAIN.js');
// |_|
function onCorpusMapReady(e){
//console.log('theme : onCorpusReady', e);
_corpus_ready = true;
_$corpus_canvas = $('canvas#corpus-map');
_$corpus_canvas
.on('corpus-cliked-on-map', function(e) {
@@ -386,6 +468,25 @@ console.log('EDLP THEME MAIN.js');
_$body.attr('corpus-map', 'ready');
}
function openEntree(tid){
if(tid){
closeAllModals();
_$body.removeClass();//.addClass(body_classes.join(' '));
// open entree
if(_corpus_ready){
_$corpus_canvas.trigger({
type:'open-entree',
tid:tid
});
}else{
// else : EdlpCorpus will check when ready if entry item (notice or index) is already .is-active
$('li.entree[tid="'+tid+'"] a.term-link').addClass('is-active');
}
}
};
// _ _ _
// /_\ _ _ __| (_)___
// / _ \ || / _` | / _ \
@@ -981,7 +1082,8 @@ console.log('EDLP THEME MAIN.js');
// assume we are going back to front page
$('body').removeClass().addClass('path-frontpage');
$('a[data-drupal-link-system-path="<front>"]').addClass('is-active');
// TODO: close entrees
_$corpus_canvas.trigger({'type':'close-all-entree'});
}
function initHome(){
@@ -4,6 +4,7 @@ if(edlp.redirect){
console.log('history redirect');
window.localStorage.setItem('edlp_origin_path', edlp.sys_path.replace(/^\//, ''));
window.localStorage.setItem('edlp_origin_url', window.location.pathname);
window.localStorage.setItem('edlp_origin_hash', window.location.hash);
// redirect to home
window.location.replace(window.location.origin);
}else{
@@ -5,6 +5,7 @@ console.log('EDLP THEME MAIN.js');
var _ajax_settings = drupalSettings.edlp_ajax;
var _$body = $('body');
var _is_front = _$body.is('.path-frontpage');
var _corpus_ready = false;
var _$corpus_canvas;
var _$row = $('main[role="main"]>.layout-content>.row');
var _$ajaxLinks;
@@ -19,6 +20,8 @@ console.log('EDLP THEME MAIN.js');
function init(){
console.log("EdlpTheme init()");
initAjaxLinks();
initHistory();
if(!drupalSettings.path.isFront)
@@ -29,7 +32,6 @@ console.log('EDLP THEME MAIN.js');
_audioPlayer = new AudioPlayer();
_compoPlayer = new CompoPlayer();
initAjaxLinks();
// if (_$body.is('.path-productions')) initProductions();
// if(_$body.is('.path-frontpage')) initHome();
@@ -59,7 +61,31 @@ console.log('EDLP THEME MAIN.js');
_compoPlayer.newCompo();
})
.on('search-results-loaded', initAjaxLinks)
.on('open_entree', closeAllModals)
// do not close index or notice modale on entree click
.on('open_entree', function(e){
console.log('on_open_entree : e', e);
closeAllModals();
// add body class for currently loaded content
// var body_classes = [
// 'path-'+sys_path.replace(/\//g, '-'),
// 'entity-type-'+data.entity_type,
// 'bundle-'+data.bundle,
// 'view-mode-'+data.view_mode
// ];
_$body.removeClass();//.addClass(body_classes.join(' '));
// record new history state
if(typeof e.url != 'undefined'){
// var state = {
// ajax_path:null,
// sys_path:null,
// entree_tid:e.tid
// };
var state = getSysPathState(e.sys_path);
history.pushState(state, null, e.url);
}
})
.on('close_entree', backToFrontPage);
}
@@ -84,44 +110,56 @@ console.log('EDLP THEME MAIN.js');
// / _ \ | / _` \ \ /
// /_/ \_\/ \__,_/_\_\
// |__/
function parseAjaxSysPath(sys_path, view_mode){
// console.log('Theme : parseAjaxSysPath', sys_path);
var ajax_path = sys_path;
function getSysPathState(sys_path, view_mode){
// console.log('Theme : getSysPathState', sys_path);
var state = {
'sys_path':sys_path,
'ajax_path': sys_path
};
// convert node link to edlp_ajax_node module links
var node_match = ajax_path.match(/^\/?(node\/\d+)$/g);
var term_match = ajax_path.match(/^\/?(taxonomy\/term\/\d+)$/g);
var node_match = state.ajax_path.match(/^\/?(node\/(\d+))$/i);
console.log('node_match', node_match);
var term_match = state.ajax_path.match(/^\/?(taxonomy\/term\/(\d+))$/i);
console.log('term_match', term_match);
if(node_match){
ajax_path = _ajax_settings.entityjson_path+'/'+node_match[0];
state.ajax_path = _ajax_settings.entityjson_path+'/'+node_match[1];
state.node_nid = node_match[2];
// check for viewmode attribute
if(view_mode){
ajax_path += '/'+view_mode;
state.ajax_path += '/'+view_mode;
}
}else if(term_match){
ajax_path = _ajax_settings.entityjson_path+'/'+term_match[0];
ajax_path = ajax_path.replace(/taxonomy\/term/, 'taxonomy_term');
// terms are always entrees, there's no other vocabulary links in front
state.ajax_path = _ajax_settings.entityjson_path+'/'+term_match[1];
state.ajax_path = state.ajax_path.replace(/taxonomy\/term/, 'taxonomy_term');
state.entree_tid = term_match[2];
// check for viewmode attribute
if(view_mode){
ajax_path += '/'+view_mode;
state.ajax_path += '/'+view_mode;
state.view_mode = view_mode;
}else{
state.ajax_path = null;
}
}else{
// convert other link to ajax
// TODO: we assume that other links (no node, no term) are all from own modules (e.g. productions) !! may not be true !!
ajax_path += '/ajax'
state.ajax_path += '/ajax'
}
return ajax_path;
return state;
};
function ajaxLoadContent(url, sys_path, ajax_path, selector){
console.log('ajaxLoadContent : url', url);
// function ajaxLoadContent(url, sys_path, ajax_path, selector){
function ajaxLoadContent(state){
console.log('ajaxLoadContent : url', state.url);
_$body.addClass('ajax-loading');
var path = window.location.origin + Drupal.url(ajax_path);
var path = window.location.origin + Drupal.url(state.ajax_path);
$.getJSON(path, {})
.done(function(data){
onAjaxLoaded(data, url, ajax_path, sys_path, selector);
onAjaxLoaded(data, state);
})
.fail(function(jqxhr, textStatus, error){
onAjaxLoadError(jqxhr, textStatus, error, sys_path);
onAjaxLoadError(jqxhr, textStatus, error, state.sys_path);
});
};
function onAjaxLoadError(jqxhr, textStatus, error, sys_path){
@@ -129,22 +167,18 @@ console.log('EDLP THEME MAIN.js');
$('.ajax-loading').removeClass('ajax-loading');
_$body.removeClass('ajax-loading');
};
function onAjaxLoaded(data, url, ajax_path, sys_path, selector){
console.log('ajax loaded url:'+url+' ajax_path:'+ajax_path+' sys_path:'+sys_path);
// function onAjaxLoaded(data, url, ajax_path, sys_path, selector){
function onAjaxLoaded(data, state){
console.log('ajax loaded url:'+state.url+' ajax_path:'+state.ajax_path+' sys_path:'+state.sys_path);
// reset all style may been added by other pages (like masonry for productions)
// and replace all content with newly loaded
// TODO: build a system to replace or append contents (like studio + search)
_$row.removeAttr('style').html(data.rendered);
// add close btn
if(sys_path != 'productions'){
addCloseBtnToCols();
}
// add body class for currently loaded content
var body_classes = [
'path-'+sys_path.replace(/\//g, '-'),
'path-'+state.sys_path.replace(/\//g, '-'),
'entity-type-'+data.entity_type,
'bundle-'+data.bundle,
'view-mode-'+data.view_mode
@@ -152,8 +186,9 @@ console.log('EDLP THEME MAIN.js');
_$body.removeClass().addClass(body_classes.join(' '));
// id node add a generic path-node class to body
m = sys_path.match(/^\/?(node\/\d+)$/g);
if(m)
// m = state.sys_path.match(/^\/?(node\/\d+)$/g);
// if(m)
if(state.node_nid)
_$body.addClass('path-edlp-node');
// handle clicked link classes
@@ -161,10 +196,14 @@ console.log('EDLP THEME MAIN.js');
$('.is-active').removeClass('is-active');
$('.is-active-trail').removeClass('is-active-trail');
if(typeof selector != 'undefined'){
$('a[selector="'+selector+'"]').addClass('is-active');
if(typeof state.selector != 'undefined'){
// in case of entree link (actualy, selector is used only for entries links)
console.log('selector', state.selector);
$('a[selector="'+state.selector+'"]').addClass('is-active');
}else{
$('a[data-drupal-link-system-path="'+sys_path+'"]').addClass('is-active');
$('a[data-drupal-link-system-path="'+state.sys_path+'"]').addClass('is-active');
// as new content is not related to entree, we trigger close entree
_$body.trigger({'type':'new-content-not-entree-ajax-loaded'});
}
// if bundle page (productions) activate production links
@@ -190,13 +229,17 @@ console.log('EDLP THEME MAIN.js');
// initScrollbars();
if(sys_path == "productions")
if(state.sys_path == "productions"){
initProductions();
}else{
addCloseBtnToCols();
}
initAjaxLinks();
// trigger other modules behaviours
_$body.trigger({'type':'new-content-ajax-loaded'});
// and call druapl behaviours
Drupal.attachBehaviors(_$row[0]);
@@ -204,16 +247,17 @@ console.log('EDLP THEME MAIN.js');
_$body.removeClass('ajax-loading');
var state = {
ajax_path:ajax_path,
sys_path:sys_path,
};
// url is null means that we are loading content on popState event
// so we don't record the state again
if(url){
if(state.url){
// var state = {
// ajax_path:ajax_path,
// sys_path:sys_path,
// };
// console.log('url:'+url+' ; state',state);
// console.log(window.location);
// we can not pushestate with absolute url
history.pushState(state, null, url);
history.pushState(state, null, state.url);
}
};
@@ -253,41 +297,73 @@ console.log('EDLP THEME MAIN.js');
window.addEventListener('popstate', onHistoryPopState);
};
function initFirstLoad(){
console.log('theme : initFirstLoad()', window.location);
console.log(document.cookie);
var url = window.location.pathname;
// var origin_path = getCookie('edlp_origin_path');
// console.log('origin_path', origin_path);
console.log('theme : initFirstLoad()');
var origin_sys_path = window.localStorage.getItem('edlp_origin_path');
console.log('origin_sys_path', origin_sys_path);
var origin_url = window.localStorage.getItem('edlp_origin_url');
console.log('origin_url', origin_url);
if(origin_sys_path){
var origin_url = window.localStorage.getItem('edlp_origin_url');
// origin_hash is used as viewmode for taxonomy term entrees load (index or notice)
var origin_hash = window.localStorage.getItem('edlp_origin_hash');
var view_mode = origin_hash.replace('#', '');
if(view_mode){
var $link = $('[href="'+origin_url+'"][viewmode="'+view_mode+'"]');
var selector = $link.attr('selector') || null;
if(selector){
// in case of entree link (actualy, selector is used only for entries links)
if(_corpus_ready){
_$corpus_canvas.trigger({
type:'open-entree',
tid:$link.attr('tid')
});
}else{
// else : EdlpCorpus will check when ready if entry item (notice or index) is already .is-active
// .is-active class is added by onAjaxLoaded() (when content is loaded)
// but what if corpus ready before onAjaxLoaded
$('li.entree[tid="'+$link.attr('tid')+'"] a.term-link').addClass('is-active');
}
}
}
// create history state
var state = {
ajax_path: parseAjaxSysPath(origin_sys_path),
sys_path: origin_sys_path,
};
console.log('state', state);
var state = getSysPathState(origin_sys_path, view_mode);
// only if not entree path
if(state.ajax_path){
// load content through ajax
// ajaxLoadContent(null, state.sys_path, state.ajax_path, selector);
ajaxLoadContent(state);
}
// TODO what about entree alone (without notice or index)
if(state.entree_tid){
openEntree(state.entree_tid);
}
// record history state
history.replaceState(state, null, origin_url);
// load content through ajax
ajaxLoadContent(null, state.sys_path, state.ajax_path);
history.replaceState(state, null, origin_url+origin_hash);
// reset the storage
window.localStorage.removeItem("edlp_origin_path");
window.localStorage.removeItem("edlp_origin_url");
}else{
history.replaceState({home:true}, null, url);
history.replaceState({home:true}, null, window.location.pathname);
_$body.attr('booted', 'booted');
}
};
function onHistoryPopState(e){
//console.log('onPopState',e);
console.log('onPopState',e.state);
if(e.state.home){
backToFrontPage();
}else{
ajaxLoadContent(null, e.state.sys_path, e.state.ajax_path)
if(e.state.entree_tid){
openEntree(e.state.entree_tid);
}
if(e.state.ajax_path){
e.state.url = null;
// ajaxLoadContent(null, e.state.sys_path, e.state.ajax_path)
ajaxLoadContent(e.state);
}
}
};
@@ -338,7 +414,6 @@ console.log('EDLP THEME MAIN.js');
}
// other links
var url = $(this).attr('href');
var sys_path = $(this).attr('data-drupal-link-system-path');
// front page
@@ -349,15 +424,21 @@ console.log('EDLP THEME MAIN.js');
}
var view_mode = $link.attr('viewmode');
var ajax_path = parseAjaxSysPath(sys_path, view_mode);
var state = getSysPathState(sys_path, view_mode);
state.url = $(this).attr('href');
$link.addClass('ajax-loading');
if($link.is('[selector]')){
var selector = $link.attr('selector');
if(view_mode){
state.url += "#"+view_mode;
}
ajaxLoadContent(url, sys_path, ajax_path, selector);
if($link.is('[selector]')){
state.selector = $link.attr('selector');
}
$link.addClass('ajax-loading');
// ajaxLoadContent(url, sys_path, state.ajax_path, selector);
ajaxLoadContent(state);
return false;
};
@@ -368,6 +449,7 @@ console.log('EDLP THEME MAIN.js');
// |_|
function onCorpusMapReady(e){
//console.log('theme : onCorpusReady', e);
_corpus_ready = true;
_$corpus_canvas = $('canvas#corpus-map');
_$corpus_canvas
.on('corpus-cliked-on-map', function(e) {
@@ -386,6 +468,25 @@ console.log('EDLP THEME MAIN.js');
_$body.attr('corpus-map', 'ready');
}
function openEntree(tid){
if(tid){
closeAllModals();
_$body.removeClass();//.addClass(body_classes.join(' '));
// open entree
if(_corpus_ready){
_$corpus_canvas.trigger({
type:'open-entree',
tid:tid
});
}else{
// else : EdlpCorpus will check when ready if entry item (notice or index) is already .is-active
$('li.entree[tid="'+tid+'"] a.term-link').addClass('is-active');
}
}
};
// _ _ _
// /_\ _ _ __| (_)___
// / _ \ || / _` | / _ \
@@ -981,7 +1082,8 @@ console.log('EDLP THEME MAIN.js');
// assume we are going back to front page
$('body').removeClass().addClass('path-frontpage');
$('a[data-drupal-link-system-path="<front>"]').addClass('is-active');
// TODO: close entrees
_$corpus_canvas.trigger({'type':'close-all-entree'});
}
function initHome(){