From ccabc2c4eb42e9f6d47004d46a26ce51f24f27aa Mon Sep 17 00:00:00 2001 From: xdrm-brackets Date: Mon, 9 Jan 2017 12:20:45 +0100 Subject: [PATCH] Updated page-manager for using only 1 instance of a page through links : - edit [user+machine] - remove [user+machine] `refresh()` method of pageManager refactor: only 1 api call for current user/machine (to fill edit/remove) --- public_html/js/lib/min/page-manager.js | 343 ++----------------------- public_html/js/min/action-script.js | 240 ++--------------- public_html/view/js/machines.js | 62 ++--- public_html/view/js/users.js | 84 +++--- 4 files changed, 107 insertions(+), 622 deletions(-) diff --git a/public_html/js/lib/min/page-manager.js b/public_html/js/lib/min/page-manager.js index ca2e0e1..1282bf1 100755 --- a/public_html/js/lib/min/page-manager.js +++ b/public_html/js/lib/min/page-manager.js @@ -1,326 +1,19 @@ /***************************************/ -/* */ -/* GESTIONNAIRE D'OPTIMISATION DES */ -/* RESSOURCES ET DE */ -/* NAVIGATION EN AJAX */ -/* */ -/* Développé par {xdrm} */ -/* */ -/* GITHUB github.com/xdrm-brackets/ */ -/* */ -/***************************************/ - -function pageManagerClass(){} - -var ptrPageManagerClass; // pointeur global pour l'utilisation de fonctions de fonctions - -pageManagerClass.prototype = { - loaded: null, // la page chargée en ce moment - depJS: null, // la dépendance javascript - depCSS: null, // la dépendance css - 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 - vars: [], // les variables suivant le nom de la page dans l'URL - root: '', // Racine du projet - path: '', // le chemin du dossier contenant les pages (.php) - jsPath: 'js', // le chemin du dossier contenant les scripts (.js) - cssPath: 'css', // le chemin du dossier contenant les feuilles de style (.css) - pagelist: null, // la liste des pages pouvant être chargées - container: null, // élément DOM qui contiendra le contenu des pages à charger - refresher: function(){}, // function appelée après refresh - /* ======================================================================= - Cette fonction effectue une requête Ajax (compatible à partir de IE5) - PARAMETRES: - - pLink le lien à charger - - pHandler une fonction qui s'éxécutera avec la réponse de la requête passée en paramètre (voir exemples dessous pour pHandler) - - pMethod type de méthode, vaut 'POST' ou 'GET' et vaut 'POST' par défaut ou s'il n'est pas renseigné - - pForm formulaire de type FormData() contenant les données à envoyer (uniquement en POST), si pForm vaut GET les données doivent être passées dans l'URL - ========================================================================== */ - ajax: function(pLink, pHandler, pMethod, pForm){ - // on efface les requêtes qui sont terminées et on push une nouvelle - // for( var i = 0 ; i < this.xhr.length ; i++ ){ - // this.xhr = this.xhr.splice(i, 1); // suppression entrée - // } - - var index; - - // IE7+, Firefox, Chrome, Opera, Safari - // IE5, IE6 - index = this.xhr.push( window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject('Microsoft.XMLHttpRequest') ) -1; - - // On definit un pointeur sur l'instance XHR active (ajax) - this.activeXHR = this.xhr[index]; - - this.xhr[index].addEventListener('readystatechange', function(i){ - - // si la requete a ete supprimee, on quitte - if( this.xhr[i] == undefined ) - return; - - // Si la requête est terminée - if( this.xhr[i].readyState === 4 ){ // si la requête est terminée - - if( [0,200].indexOf(this.xhr[i].status) > -1 ) // si fichier existe et reçu - pHandler(this.xhr[i].responseText); - else // si code d'erreur retourne null - pHandler(); - - - // On supprime la requête - this.xhr[i] = null; - - // S'il n'y a plus de requête active, on supprime tout - var empty = true; - for( var i = 0 ; i < this.xhr.length ; i++ ) - if( this.xhr[i] !== null ){ - empty = false; - break; - } - - // Si tout est vide, on efface - empty && ( this.xhr = [] ); - } - - }.bind(this, index), false); - - // gestion de la méthode - var method = ( typeof pMethod == 'string' && /^POST|GET$/i.test(pMethod) ) ? pMethod.toUpperCase() : 'POST'; - - // gestion du formulaire si la méthode est POST - var form = ( method == 'POST' && typeof pForm == 'object' && pForm instanceof FormData ) ? pForm : null; - - this.xhr[index].open( method, pLink, true ); - this.xhr[index].send( form ); - - return this; - }, - /***************************************************** [APPLICATION] Ajax() ******************************************************/ - // EXEMPLES DE FONCTIONS POUR pHandler // - // 1. var a = function(param){ alert(param); } // les deux notations 1 et 2 sont équivalents - // 2. function a(param){ alert(param); } // les deux notations 1 et 2 sont équivalents - - // ajax( 'index.php', a ); // utilisation d'une fonction définie - - // ajax( 'index.php', alert ); // utilisation d'une fonction prédéfinie - // ajax( 'index.php', alert, 'GET' ); // utilisation de méthode - - // var fd = new FormData(); // création d'un formulaire - // fd.append('var', 100); // ajout de la variable VAR qui vaut 100 - - // ajax( 'index.php', alert, null, fd ); // saut de paramètre avec null + envoi formulaire - // ajax( 'index.php?var=10', alert, 'GET' ); // envoi formulaire en GET (dans l'url) - // ajax( 'index.php?var=10', alert, 'POST', fd ); // envoi formulaire en GET (dans l'url) + en POST via le formulaire FD - - - /* ======================================================================= - Cette fonction effectue une décomposition de l'URL sur le shéma spécifié dessous - Renvoie pour http://www.exemple.com/dirA/dirB/#/NOMPAGE/VARPAGE - - null si la page n'est pas référencée dans le tableau PAGELIST - - null si le lien ne contient pas /#/NOMPAGE à la fin - - null si NOMPAGE ne contient pas uniquement : lettres, chiffres, underscore - - null si VARPAGE ne contient pas uniquement : lettres, chiffres, underscore - - un objet contenant {page: valeur, var: valeur} - ========================================================================== */ - explodeURL: function(url_data){ - url_data = (arguments.length >= 1) ? url_data : document.URL; - // si pageList est correct et que l'URL correspond à un schéma de page => continue [sinon] return null - if( this.pagelist != null && /^(?:(?:https?:\/\/)?[^\/]+)\/([a-z0-9_]+)(?:\/|((?:\/\w+)+)\/?)?(#.*)?$/i.test(url_data) ){ - // si la page récupérée dans l'url est dans la liste => renvoi de l'objet [sinon] null - // on supprime la première entrée vide - var vars = RegExp.$2.split('/').slice(1); - - return ( this.pagelist.indexOf(RegExp.$1) > -1 ) ? {page: RegExp.$1, var: vars} : null; - }else - return null; - }, - /* ======================================================================= - Cette fonction ajoute des dépendances (un js et un css) situés dans le répertoire des pages. - pageDir/ - _JS/ - page1.js - page2.js - _CSS/ - page1.css - page2.css - ========================================================================== */ - loadDependencies: function(){ - // si depCSS est un élément du DOM c'est à dire qu'il contient le fichier de la page précédente et qu'il est enfant de , on le détruit - if( typeof this.depCSS == 'object' && this.depCSS instanceof Element && this.depCSS.parentNode == document.head ) - document.head.removeChild( this.depCSS ); - - // si depJS est un élément du DOM c'est à dire qu'il contient le fichier de la page précédente, on le détruit - if( typeof this.depJS == 'object' && this.depJS instanceof Element && this.depJS.parentNode == document.head ) - document.head.removeChild( this.depJS ); - - // si le fichier css existe - this.ajax(this.root+this.path+'/'+this.cssPath+'/'+this.page+'.css', function(e){ - if( e != null ){ // on charge la dépendance CSS si le fichier existe - this.depCSS = document.createElement('link'); - this.depCSS.rel = 'stylesheet'; - this.depCSS.type = 'text/css'; - this.depCSS.href = this.root+this.path+'/'+this.cssPath+'/'+this.page+'.css'; - document.head.appendChild(this.depCSS); - }else - console.warn('[loadDependencies_Error] - ('+this.root+this.path+'/'+this.cssPath+'/'+this.page+'.css)'); - }.bind(this)); - - // si le fichier js existe - this.ajax(this.root+this.path+'/'+this.jsPath+'/'+this.page+'.js', function(e){ - if( e != null ){ // on charge la dépendance JS si le fichier existe - this.depJS = document.createElement('script'); - this.depJS.type = 'text/javascript'; - this.depJS.src = this.root+this.path+'/'+this.jsPath+'/'+this.page+'.js'; - document.head.appendChild(this.depJS); - }else - console.warn('[loadDependencies_Error] - ('+this.root+this.path+'/'+this.jsPath+'/'+this.page+'.js)'); - }.bind(this)); - }, - - /* ======================================================================= - Met à jour l'URL de la page en fonction de la page chargée et des - variables associées (ne recharge aucune ressource) - ======================================================================= */ - updateURL: function(){ - if( this.vars.length > 0 ) // si il y a des variables - window.history.pushState(this.page, this.page, this.root+'/'+this.page+'/'+this.vars.join('/')+'/'); - else // s'il n'y en a pas - window.history.pushState(this.page, this.page, this.root+'/'+this.page+'/'); - - // on peut récupérer le nom de la page (quand on fait retour en arrière de l'historique) - // dans la variable : window.history.state - }, - - /* ======================================================================= - Cette fonction est celle qui gère les 2 autres et celle que l'utilisateur utilisera - PARAMETRES: - - pName le nom de la page à charger (lettres, chiffres, underscore) (*) - - pPath chemin (relatif ou absolu) du dossier contenant les pages de même nom de fichier que le nom (extension .php) - - pContainer l'élément du DOM qui contiendra la page chargée (**) - - pPageList> tableau contenant la liste des pages sous forme de chaînes de caractères (**) (***) - * Le chemin du dossier sans le '/' final si c'est le dossier actuel le chemin est une chaîne vide - Si le dossier est 'page' et que l'on cherche la page 'accUe1l', la requête sera vers 'page/accUe1l.php' - le nom de la page est sensible à la casse - ** 1. pPageList et pContainer doivent être mis en paramètres uniquement à la première utilisation - et la première utilisation doit se faire au chargement de la page car elle permetra - de mettre l'URL à jour et/ou charger la page de l'URL - *** la première page du tableau est la page par défaut (qui est chargée si l'URL ne contient - pas la page ou si la page de l'URL ne correspond à aucune page de la liste) - ========================================================================== */ - setPage: function(pName, pPath, pContainer, pPageList, pRoot){ - // liste de pages si c'est un tableau - var pageList = ( typeof pPageList == 'object' && pPageList instanceof Array ) ? pPageList : null; // si this.pagelist n'est pas overwrite il vaut null - - if( pageList != null ){ // si c'est un tableau - for( var i = 0 ; i < pageList.length ; i++ ){ // on parcourt tout les éléments pour vérifier que chaque élément ne contient que : lettres, chiffres, underscore [non]> pageList = null - pageList = ( typeof pageList[i] == 'string' && /^[a-z0-9_]+$/i.test(pageList[i]) ) ? pageList : null; - if( pageList == null ) break; // si le tableau est null stoppe la boucle - } - } - /* on attribue la variable temporaire pageList à l'attribut de l'objet si la variable pageList temporaire n'est pas nulle */ - this.pagelist = ( pageList != null ) ? pageList : this.pagelist; - // affecte à l'attribut page la page par défaut (premier élément de pagelist) - // this.page = this.pagelist[0]; - // Gestion de pRoot si racine autre que racine du vhost - this.root = ( typeof pRoot == 'string' ) ? pRoot : this.root; - // affecte pPath à l'attribut path s'il est renseigné - this.path = ( typeof pPath == 'string' ) ? pPath : this.path; - /* on attribue le paramètre pContainer à l'attribut si il est spécifié */ - this.container = ( typeof pContainer == 'object' && pContainer instanceof Element ) ? pContainer : this.container; - - // si this.pagelist && this.container ne sont pas null - if( this.pagelist && this.container ){ - - // Si on veut just `refresh` la page - if( pName === true ){ - - // formulaire POST - var fd = new FormData(); - for( var i = 0 ; i < this.vars.length ; i++ ) - fd.append(this.vars[i], null); - - this.updateURL(); // can be useful for content or dep - - this.ajax(this.root+this.path+'/'+this.page+'.php', function(e){ - this.container.innerHTML = e; - this.loadDependencies(); - this.refresher.apply(this); - this.updateURL(); // if updated in refresher - }.bind(this), 'POST', fd); - - return this; - - // si le pName est renseigné et qu'il est dans pagelist - }else if( typeof pName == 'string' && this.pagelist.indexOf(pName) > -1 ){ - // affecte pName à l'attribut page - this.page = pName; - - // formulaire POST - var fd = new FormData(); - for( var i = 0 ; i < this.vars.length ; i++ ) - fd.append(this.vars[i], null); - - this.ajax(this.root+this.path+'/'+this.page+'.php', function(e){ - this.container.innerHTML = e; - this.loadDependencies(); - }.bind(this), 'POST', fd); - - // change l'URL en conséquences(stateObj, titre, url) - this.updateURL(); - - }else{ // si la page n'est pas spécifiée ou qu'elle n'est pas dans la liste des pages - var urlGet = this.explodeURL(); - // si on a récupéré le numéro de la page dans l'URL et qu'elle fait partie de la liste des pages - if( urlGet != null ){ - - // formulaire POST - var fd = new FormData(); - this.vars.length = 0; - - for( var i = 0 ; i < urlGet.var.length ; i++ ){ // replacing object variables with explodeURL variables - this.vars[i] = urlGet.var[i]; - fd.append(this.vars[i], null); - } - - - // si différent de la page actuelle, on charge la page - if( urlGet.page == this.page ){ - return this; - } - - this.page = urlGet.page; - - this.ajax(this.root+this.path+'/'+this.page+'.php', function(e){ - this.container.innerHTML = e; - this.loadDependencies(); - }.bind(this), 'POST', fd); - - // change l'URL en conséquences(stateObj, titre, url) - this.updateURL(); - - }else // si l'url ne contient rien, on charge la page par défaut - this.setPage(this.pagelist[0]); - } - }else - console.warn('pagelist et container manquant'); - - return this; - }, - - - - /* Rechargement de la page courante - * - * @action Recharge la page en cours en conservant les variables - * - */ - refresh: function(refresher){ - if( refresher instanceof Function ){ - this.refresher = refresher; - return; - }else - return this.setPage(true); - - } - -}; +function pageManagerClass(){}var ptrPageManagerClass +pageManagerClass.prototype={loaded:null,depJS:null,depCSS:null,xhr:[],activeXHR:null,page:null,vars:[],root:"",path:"",jsPath:"js",cssPath:"css",pagelist:null,container:null,refresher:function(){},ajax:function(t,e,s,i){var h +h=this.xhr.push(window.XMLHttpRequest?new XMLHttpRequest:new ActiveXObject("Microsoft.XMLHttpRequest"))-1,this.activeXHR=this.xhr[h],this.xhr[h].addEventListener("readystatechange",function(t){if(void 0!=this.xhr[t]&&4===this.xhr[t].readyState){[0,200].indexOf(this.xhr[t].status)>-1?e(this.xhr[t].responseText):e(),this.xhr[t]=null +for(var s=!0,t=0;t=1?t:document.URL,null!=this.pagelist&&/^(?:(?:https?:\/\/)?[^\/]+)\/([a-z0-9_]+)(?:\/|((?:\/\w+)+)\/?)?(#.*)?$/i.test(t)){var e=RegExp.$2.split("/").slice(1) +return this.pagelist.indexOf(RegExp.$1)>-1?{page:RegExp.$1,var:e}:null}return null},loadDependencies:function(){"object"==typeof this.depCSS&&this.depCSS instanceof Element&&this.depCSS.parentNode==document.head&&document.head.removeChild(this.depCSS),"object"==typeof this.depJS&&this.depJS instanceof Element&&this.depJS.parentNode==document.head&&document.head.removeChild(this.depJS),this.ajax(this.root+this.path+"/"+this.cssPath+"/"+this.page+".css",function(t){null!=t?(this.depCSS=document.createElement("link"),this.depCSS.rel="stylesheet",this.depCSS.type="text/css",this.depCSS.href=this.root+this.path+"/"+this.cssPath+"/"+this.page+".css",document.head.appendChild(this.depCSS)):console.warn("[loadDependencies_Error] - ("+this.root+this.path+"/"+this.cssPath+"/"+this.page+".css)")}.bind(this)),this.ajax(this.root+this.path+"/"+this.jsPath+"/"+this.page+".js",function(t){null!=t?(this.depJS=document.createElement("script"),this.depJS.type="text/javascript",this.depJS.src=this.root+this.path+"/"+this.jsPath+"/"+this.page+".js",document.head.appendChild(this.depJS)):console.warn("[loadDependencies_Error] - ("+this.root+this.path+"/"+this.jsPath+"/"+this.page+".js)")}.bind(this))},updateURL:function(){this.vars.length>0?window.history.pushState(this.page,this.page,this.root+"/"+this.page+"/"+this.vars.join("/")+"/"):window.history.pushState(this.page,this.page,this.root+"/"+this.page+"/")},setPage:function(t,e,s,i,h){var n="object"==typeof i&&i instanceof Array?i:null +if(null!=n)for(var a=0;a-1){this.page=t +for(var r=new FormData,a=0;a 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', 'analytics', '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); +function navSubMenu(e){var a=document.querySelector('#CONTAINER > .sub-menu-side > span[data-sublink="'+pageManager.vars[0]+'"]'),n=null +if(n=e instanceof Element?e:null,n="string"==typeof e?document.querySelector('#CONTAINER > .sub-menu-side > span[data-sublink="'+e+'"]'):n,n=null==n?document.querySelector("#CONTAINER > .sub-menu-side > span[data-sublink]"):n,null==n)return!1 +null!=a&&a.remClass("active") +for(var t=document.querySelectorAll("#CONTAINER > section[data-sublink].active"),r=0;r section[data-sublink="'+n.getData("sublink")+'"]') +null!=u&&u.addClass("active")}if(!n.getData("sublink"))return!1 +var l=pageManager.vars[0]!=n.getData("sublink") +pageManager.vars[0]=n.getData("sublink"),l&&pageManager.updateURL()}function navMenu(e,a){var n=document.querySelector('#WRAPPER > #MENU-SIDE > span[data-link="'+pageManager.page+'"]'),t=null +if(t=e instanceof Element?e:null,t="string"==typeof e?document.querySelector('#WRAPPER > #MENU-SIDE > span[data-link="'+e+'"]'):t,t=t||document.querySelector('#WRAPPER > #MENU-SIDE > span[data-link="'+pageManager.pagelist[0]+'"]'),null==t)return!1 +a=a===!0,n&&n.remClass("active"),t&&t.addClass("active") +if(a||n==t||(pageManager.vars=[]),t.getData("link")){DOM.HEADER.addClass("loading") +var r=function(){var e=pageManager.vars.length>0&&null!=document.querySelector('#CONTAINER > .sub-menu-side > [data-sublink="'+pageManager.vars[0]+'"]') +navSubMenu(e?pageManager.vars[0]:null),document.querySelector("#CONTAINER > .sub-menu-side").addEventListener("click",function(e){for(var a=e.target;a!=document.body&&!a.getData("sublink");)a=a.parentNode +a.getData("sublink")&&navSubMenu(a)},!1),DOM.HEADER.remClass("loading")} +pageManager.page!=t.getData("link")&&pageManager.setPage(t.getData("link")),pageManager.activeXHR?pageManager.activeXHR.addEventListener("loadend",r,!1):r.call()}}DOM={WRAPPER:$("WRAPPER"),HEADER:$("HEADER"),MENUSIDE:$("MENU-SIDE"),CONTAINER:$("CONTAINER")} +var pageManager=new pageManagerClass,api=new APIClass("/api/") +pageManager.setPage(null,"/view",DOM.CONTAINER,["history","profile","machines","users","groups","analytics","settings"]),navMenu(pageManager.page),pageManager.refresher=function(){navSubMenu(this.vars[0]),document.querySelector("#CONTAINER > .sub-menu-side").addEventListener("click",function(e){for(var a=e.target;a!=document.body&&!a.getData("sublink");)a=a.parentNode +a.getData("sublink")&&navSubMenu(a)},!1)},DOM.MENUSIDE.addEventListener("click",function(e){for(var a=e.target;a!=document.body&&!a.getData("link");)a=a.parentNode +a.getData("link")&&navMenu(a.getData("link"))},!1) diff --git a/public_html/view/js/machines.js b/public_html/view/js/machines.js index f1a6ce3..bb127d4 100755 --- a/public_html/view/js/machines.js +++ b/public_html/view/js/machines.js @@ -281,21 +281,6 @@ if( section.remove.element != null ){ } - // Gestion automatique au chargement de la page si ID_MACHINE dans url "/machines/remove/:id_machine:" - if( pageManager.vars.length >= 2 && !isNaN(pageManager.vars[1]) ){ - - // On récupère la machine d'uid donné dans l'URL - api.send({path:'machineDefault/getById', id_machine:pageManager.vars[1]}, function(response){ - // Si aucune erreur et un résultat - if( response.ModuleError == 0 ){ - found_remove = [ response.machine ]; // On récupère le résultat - searchindex_remove = 0; // On remet le compteur à 0 - autofill_remove(); // On auto-remplit - } - }); - - } - /* (3) Gestion de la recherche @@ -497,22 +482,6 @@ if( section.edit.element != null ){ } - // Gestion automatique au chargement de la page si ID_MACHINE dans url "/machines/edit/:id_machine:" - if( pageManager.vars.length >= 2 && !isNaN(pageManager.vars[1]) ){ - - // On récupère la machine d'uid donné dans l'URL - api.send({path:'machineDefault/getById', id_machine:pageManager.vars[1]}, function(response){ - // Si aucune erreur et un résultat - if( response.ModuleError == 0 ){ - found_edit = [ response.machine ]; // On récupère le résultat - searchindex_edit = 0; // On remet le compteur à 0 - autofill_edit(); // On auto-remplit - } - }); - - } - - /* (3) Gestion de la recherche ---------------------------------------------------------*/ @@ -623,6 +592,37 @@ if( section.edit.element != null ){ +/* [5] chargement de la machine courante (depuis url) +=========================================================*/ +// gestion automatique au chargement de la page si id_user dans url "/machines/.+/:id_machine:" +if( pageManager.vars.length >= 2 && !isNaN(pageManager.vars[1]) ){ + + // on récupère la machine d'uid donné dans l'url + api.send({path:'machineDefault/getById', id_machine:pageManager.vars[1]}, function(response){ + + // si aucune erreur et un résultat + if( response.ModuleError == 0 ){ + + /* (1) On pré-remplis le formulaire de modification */ + found_edit = [ response.machine ]; // on récupère le résultat + searchindex_edit = 0; // on remet le compteur à 0 + autofill_edit(); // on auto-remplit + + /* (2) On pré-remplis le formulaire de suppression */ + found_remove = [ response.machine ]; // on récupère le résultat + searchindex_remove = 0; // on remet le compteur à 0 + autofill_remove(); // on auto-remplit + } + }); + +} + + + + + + + diff --git a/public_html/view/js/users.js b/public_html/view/js/users.js index a573c9d..3ef58b4 100755 --- a/public_html/view/js/users.js +++ b/public_html/view/js/users.js @@ -79,7 +79,7 @@ if( section.view.element != null ){ var uid_list = []; for( var i = 0 ; i < result.users.length ; i++ ) uid_list.push( result.users[i].id_user); - + // On recupere la liste des elements correspondants aux utilisateurs var user_list = document.querySelectorAll(section.view.text + '> article.inline-box[id]'); @@ -235,6 +235,11 @@ if( section.create.element != null ){ /* [3] remove -> Suppression d'utilisateur =========================================================*/ +var lastkeywords_remove = ''; +var found_remove = []; +var searchindex_remove = 0; + + if( section.remove.element != null ){ /* (1) Definition des champs */ @@ -255,11 +260,6 @@ if( section.remove.element != null ){ submit: document.querySelector(section.remove.text + '#remove_submit') }; - var lastkeywords_remove = ''; - var found_remove = []; - var searchindex_remove = 0; - - /* (2) Gestion de l'auto-remplissage par lien ---------------------------------------------------------*/ @@ -313,25 +313,6 @@ if( section.remove.element != null ){ } - // Gestion automatique au chargement de la page si ID_MACHINE dans url "/users/remove/:id_user:" - if( pageManager.vars.length >= 2 && !isNaN(pageManager.vars[1]) ){ - - console.log('init id', pageManager.vars); - - // On récupère la user d'uid donné dans l'URL - api.send({path:'userDefault/getById', id_user:pageManager.vars[1]}, function(response){ - console.warn('user to remove', response); - // Si aucune erreur et un résultat - if( response.ModuleError == 0 ){ - found_remove = [ response.user ]; // On récupère le résultat - searchindex_remove = 0; // On remet le compteur à 0 - autofill_remove(); // On auto-remplit - } - }); - - } - - /* (3) Gestion de la recherche ---------------------------------------------------------*/ @@ -458,6 +439,11 @@ if( section.remove.element != null ){ /* [4] edit -> Modification d'utilisateur =========================================================*/ +var lastkeywords_edit = ''; +var found_edit = []; +var searchindex_edit = 0; + + if( section.edit.element != null ){ // Definition des champs @@ -481,11 +467,6 @@ if( section.edit.element != null ){ submit: document.querySelector(section.edit.text + '#edit_submit') }; - var lastkeywords_edit = ''; - var found_edit = []; - var searchindex_edit = 0; - - /* (2) Gestion de l'auto-remplissage par lien ---------------------------------------------------------*/ @@ -548,21 +529,6 @@ if( section.edit.element != null ){ } - // Gestion automatique au chargement de la page si ID_MACHINE dans url "/users/edit/:id_user:" - if( pageManager.vars.length >= 2 && !isNaN(pageManager.vars[1]) ){ - - // On récupère la user d'uid donné dans l'URL - api.send({path:'userDefault/getById', id_user:pageManager.vars[1]}, function(response){ - // Si aucune erreur et un résultat - if( response.ModuleError == 0 ){ - found_edit = [ response.user ]; // On récupère le résultat - searchindex_edit = 0; // On remet le compteur à 0 - autofill_edit(); // On auto-remplit - } - }); - - } - /* (3) Gestion de la recherche @@ -675,13 +641,39 @@ if( section.edit.element != null ){ +/* [5] chargement de l'utilisateur courant (depuis url) +=========================================================*/ +// gestion automatique au chargement de la page si id_user dans url "/users/.+/:id_user:" +if( pageManager.vars.length >= 2 && !isNaN(pageManager.vars[1]) ){ + + // on récupère la user d'uid donné dans l'url + api.send({path:'userDefault/getById', id_user:pageManager.vars[1]}, function(response){ + + // si aucune erreur et un résultat + if( response.ModuleError == 0 ){ + + /* (1) On pré-remplis le formulaire de modification */ + found_edit = [ response.user ]; // on récupère le résultat + searchindex_edit = 0; // on remet le compteur à 0 + autofill_edit(); // on auto-remplit + + /* (2) On pré-remplis le formulaire de suppression */ + found_remove = [ response.user ]; // on récupère le résultat + searchindex_remove = 0; // on remet le compteur à 0 + autofill_remove(); // on auto-remplit + } + }); + +} -/* [5] groups -> Groupes d'utilisateurs + + +/* [6] groups -> Groupes d'utilisateurs =========================================================*/ if( section.groups.element != null ){