- [x] Gestion JS de la navigation

- [x] Gestion de liens+URL du menu
	- [x] Gestion des liens+URL du submenu
		- [x] onload du xhr, on lance le script sur le DOM
		- [x] Refactor page-manager pour recuperer instance XHR active
		- [x] Gestion de la navigation du sub-menu-side
This commit is contained in:
xdrm-brackets 2016-02-03 10:53:41 +01:00
parent 9ffef15f8a
commit 0cfa022fbd
3 changed files with 98 additions and 7 deletions

View File

@ -14,8 +14,56 @@ pageManager.setPage(null, '/view', DOM.CONTAINER, ['dashboard', 'machines', 'use
/* [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]+'"]');
/* [1] Toggle du side-menu <-> navigation // 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;
console.log( 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 active le nouveau
if( target != null )
target.addClass('active');
/* [3] Gestion de pageManager
------------------------------------------------*/
// Si element, on recupere le data-link
var page = null;
// On met a jour la variable page-manager si data-link trouve
if( target.getData('sublink') )
pageManager.vars[0] = target.getData('sublink');
}
/* [2] Toggle du side-menu <-> navigation
===========================================*/ ===========================================*/
function navMenu(section){ function navMenu(section){
/* [1] Format du param /* [1] Format du param
@ -58,7 +106,26 @@ function navMenu(section){
pageManager.setPage( target.getData('link') ); pageManager.setPage( target.getData('link') );
pageManager.xhr[pageManager.xhr.length-1].onloadend = function(){ DOM.HEADER.remClass('loading'); } pageManager.activeXHR.addEventListener('loadend', function(){
// On retire l'icone de chargement
DOM.HEADER.remClass('loading');
// On gere la navigation du sous-menu
navSubMenu(null);
// 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);
}, false);
} }
}navMenu(pageManager.page); }navMenu(pageManager.page);
@ -68,7 +135,21 @@ function navMenu(section){
/* [2] Gestion de la navigation (physique)
/* [4] Gestion de la navigation (physique)
===========================================*/ ===========================================*/
DOM.MENUSIDE.addEventListener('click', function(e){ DOM.MENUSIDE.addEventListener('click', function(e){
var target = e.target; var target = e.target;

View File

@ -18,6 +18,7 @@ pageManagerClass.prototype = {
depJS: null, // la dépendance javascript depJS: null, // la dépendance javascript
depCSS: null, // la dépendance css depCSS: null, // la dépendance css
xhr: [], // tableau d'objets pour les requêtes ajax xhr: [], // tableau d'objets pour les requêtes ajax
activeXHR: null, // Contiendra l'instance XHR (ajax) en cours
page: null, // l'indice de la page courante dans pagelist page: null, // l'indice de la page courante dans pagelist
vars: [], // les variables suivant le nom de la page dans l'URL vars: [], // les variables suivant le nom de la page dans l'URL
path: '', // le chemin du dossier contenant les pages (.php) path: '', // le chemin du dossier contenant les pages (.php)
@ -47,6 +48,9 @@ pageManagerClass.prototype = {
else // IE5, IE6 else // IE5, IE6
index = this.xhr.push( new ActiveXObject('Microsoft.XMLHttpRequest') ) -1; index = this.xhr.push( new ActiveXObject('Microsoft.XMLHttpRequest') ) -1;
// On definit un pointeur sur l'instance XHR active (ajax)
this.activeXHR = this.xhr[index];
var ptrPageManagerClass = this; var ptrPageManagerClass = this;
this.xhr[index].onreadystatechange = function(){ this.xhr[index].onreadystatechange = function(){
if( ptrPageManagerClass.xhr[index].readyState == 4 ) // si la requête est terminée if( ptrPageManagerClass.xhr[index].readyState == 4 ) // si la requête est terminée

14
todo.md
View File

@ -14,14 +14,20 @@
# EN COURS # # EN COURS #
############ ############
- [.] Gestion JS de la navigation
- [x] Gestion de liens+URL du menu
- [ ] Gestion des liens+URL du submenu - [ ] Gestion JS/PHP de la navigation
- [ ] onload du xhr, on lance le script sur le DOM - [ ] Gestion de l'affichage des pages en fonction du sous-menu
######## ########
# FAIT # # FAIT #
######## ########
- [x] Gestion JS de la navigation
- [x] Gestion de liens+URL du menu
- [x] Gestion des liens+URL du submenu
- [x] onload du xhr, on lance le script sur le DOM
- [x] Refactor page-manager pour recuperer instance XHR active
- [x] Gestion de la navigation du sub-menu-side
- [x] Configuration JSON du dispatcher - [x] Configuration JSON du dispatcher
- [x] Simplification de 2 tableaux lies par indice en 1 - [x] Simplification de 2 tableaux lies par indice en 1
- [x] Configuration JSON du dispatcher - [x] Configuration JSON du dispatcher