SMMP/public_html/js/action-script.js

225 lines
6.6 KiB
JavaScript
Executable File

// TODO: Attendre que API soit chargée, sinon erreur: le CONTAINER prend comme contenu la dépendance JS
DOM = {
WRAPPER: $('WRAPPER'),
HEADER: $('HEADER'),
MENUSIDE: $('MENU-SIDE'),
CONTAINER: $('CONTAINER')
};
/* [0] Instanciation
===========================================*/
var pageManager = new pageManagerClass();
var api = new APIClass('/api/');
/* [1] Toggle du sub-menu-side <-> navigation
===========================================*/
function navSubMenu(subsection){
/* [1] Format du param
------------------------------------------------*/
// Contient l'element courant
var current = document.querySelector('#CONTAINER > .sub-menu-side > span[data-sublink="'+pageManager.vars[0]+'"]');
// Contiendra l'element cible
var target = null;
// si @subsection est un element, on le prends
target = (subsection instanceof Element) ? subsection : null;
// Si string, on trouve l'element correspondant
target = (typeof subsection == 'string') ? document.querySelector('#CONTAINER > .sub-menu-side > span[data-sublink="'+subsection+'"]') : target;
// Si rien trouve, on prend le premier element correspondant a la premiere page
target = (target == null) ? document.querySelector('#CONTAINER > .sub-menu-side > span[data-sublink]') : target;
// Si le param n'est toujours pas bon, on retourne une erreur
if( target == null ) return false;
/* [2] Gestion de l'affichage de l'element
------------------------------------------------*/
// On desactive l'element courant
if( current != null )
current.remClass('active');
// On cache les sections visibles
var visibleSections = document.querySelectorAll('#CONTAINER > section[data-sublink].active');
for( var i = 0 ; i < visibleSections.length ; i++ )
visibleSections[i].remClass('active');
// On active le nouveau
if( target != null ){
target.addClass('active');
// On affiche la section associee
var targetSection = document.querySelector('#CONTAINER > section[data-sublink="'+target.getData('sublink')+'"]');
if( targetSection != null )
targetSection.addClass('active');
}
/* [3] Gestion de pageManager
------------------------------------------------*/
// Si element, on recupere le data-link
var page = null;
// Si erreur, on retourne FALSE
if( !target.getData('sublink') ) return false;
var mustRefresh = pageManager.vars[0] != target.getData('sublink');
// On met a jour la variable page-manager si data-link trouve
pageManager.vars[0] = target.getData('sublink');
if( mustRefresh )
// navMenu(pageManager.page);
pageManager.updateURL();
}
/* [2] Toggle du side-menu <-> navigation
===========================================*/
function navMenu(section, persistence){
/* [1] Format du param
------------------------------------------------*/
// Contient l'element courant
var current = document.querySelector('#WRAPPER > #MENU-SIDE > span[data-link="'+pageManager.page+'"]');
// Contiendra l'element cible
var target = null;
// si @section est un element, on le prends
target = (section instanceof Element) ? section : null;
// Si string, on trouve l'element correspondant
target = (typeof section == 'string') ? document.querySelector('#WRAPPER > #MENU-SIDE > span[data-link="'+section+'"]') : target;
// Si rien trouve, on prend le premier element correspondant a la premiere page
target = target || document.querySelector('#WRAPPER > #MENU-SIDE > span[data-link="'+pageManager.pagelist[0]+'"]');
// Si le param n'est toujours pas bon, on retourne une erreur
if( target == null ) return false;
// Persistence de pageManager.vars (OPTIONNEL)
persistence = (persistence===true) ? true : false;
/* [2] Gestion de l'affichage de l'element
------------------------------------------------*/
// On desactive l'element courant
current && current.remClass('active');
// On active le nouveau
target && target.addClass('active');
/* [3] Gestion de pageManager
------------------------------------------------*/
// Si element, on recupere le data-link
var page = null;
// Si on change de menu, on efface les données URL
if( !persistence && current != target )
pageManager.vars = [];
// On charge la page si data-link trouve
if( target.getData('link') ){
DOM.HEADER.addClass('loading'); // Animation de chargement
//pageManager.activeXHR.addEventListener('loadend',
var handlerX = function(){
// On gere la navigation du sous-menu (si defini, utilise)
var subSectionExists = pageManager.vars.length > 0 && document.querySelector('#CONTAINER > .sub-menu-side > [data-sublink="'+pageManager.vars[0]+'"]') != null;
if( subSectionExists ) // Si le lien du menu associe existe
navSubMenu(pageManager.vars[0]); // on charge la page associee
else // sinon
navSubMenu(null); // on charge le lien par defaut
// GESTION DE LA NAVIGATION DU SOUS-MENU
document.querySelector('#CONTAINER > .sub-menu-side').addEventListener('click', function(e){
var target = e.target;
while( target != document.body && !target.getData('sublink') )
target = target.parentNode;
if( target.getData('sublink') )
navSubMenu(target);
}, false);
DOM.HEADER.remClass('loading');
};
/* (x) Si première ou changement de page, on charge la nouvelle */
pageManager.page != target.getData('link') && pageManager.setPage( target.getData('link') );
/* (x) Si on a `pageManager.activeXHR`, on met le handler, sinon on lance */
pageManager.activeXHR ? pageManager.activeXHR.addEventListener('loadend', handlerX, false) : handlerX.call();
}
}
// init page-manager
pageManager.setPage(null, '/view', DOM.CONTAINER, ['history', 'profile', 'machines', 'users', 'groups', 'extensions', 'settings'] );
// launch pageManager
navMenu(pageManager.page);
// set default refresher
pageManager.refresher = function(){
/* (1) Loads page */
navSubMenu( this.vars[0] );
/* (2) Set listener for sub-menu nav */
document.querySelector('#CONTAINER > .sub-menu-side').addEventListener('click', function(e){
var target = e.target;
while( target != document.body && !target.getData('sublink') )
target = target.parentNode;
if( target.getData('sublink') )
navSubMenu(target);
}, false);
};
/* [4] Gestion de la navigation (physique)
===========================================*/
DOM.MENUSIDE.addEventListener('click', function(e){
var target = e.target;
// On remonte dans les parents au bon niveau
while( target != document.body && !target.getData('link') )
target = target.parentNode;
// Si on a trouve l'element, on l'utilise pour la page
if( target.getData('link') )
navMenu(target.getData('link'));
}, false);