Rev 95 | Blame | Compare with Previous | Last modification | View Log | RSS feed
// configurationvar urlRacine = 'https://www.tela-botanica.org',config = {prod: {urlWidgetNavigation : urlRacine + '/widget:reseau:navigation',urlBaseAuth : 'https://www.tela-botanica.org/service:annuaire:auth'},test: {urlWidgetNavigation : urlRacine + '/widget-test:reseau:navigation',urlBaseAuth : 'https://www.tela-botanica.org/service:annuaire-test:auth'},local: {urlWidgetNavigation : 'https://localhost/widget:reseau:navigation',urlBaseAuth : 'https://localhost/service:annuaire:auth'}}/*** Charge la barre de navigation depuis le widget:reseau:navigation dans un <div id="tb-navigation"> , s'il existe* dans la page appelante.** Nécessite jQuery** Utilisation :* - prévoir un <div id="tb-navigation"> dans la page, qui accueillera la barre de navigation.* - si ce <div> contient déjà quelque chose, son contenu sera reporté à la place de la zone ayant l'id "contenu-source"* de la barre de navigation (si une telle zone existe)* - si ce <div> contient un attribut "data-courant" et si la valeur de cet attribut correspond à l'id d'un des éléments* de navigation, alors cet élément aura la classe "active" (pour localiser la page courante dans les menus)* - si ce <div> contient un attribut "data-squelette", alors le widget de navigation sera appelé avec le paramètre* "?squelette=contenu-de-data-squelette"; se reporter à la documentation du widget:reseau:navigation*/$(document).ready(function() {var div = $('#tb-navigation');if (div) {var squelette = div.data('squelette'),courant = div.data('courant'),mode = div.data('mode') || 'prod',contenu = div.html();// chargement de la barrevar urlBarreNavigation = config[mode]['urlWidgetNavigation'];if (squelette) {urlBarreNavigation += '?squelette=' + squelette;}htmlBarre = $.ajax({url: urlBarreNavigation,type: 'get',success: function(data) {div.html(data);// activation de l'entrée de menuif (courant) {var menuCourant = div.find('#' + courant);if (menuCourant) {menuCourant.addClass('active');}}// ajout de l'URL de la page d'origine dans les liensdefinirPageOrigineDansLiens();// remplacement de la zone contenu-sourcevar zoneSource = div.find('#contenu-source');if (zoneSource) {zoneSource.replaceWith(contenu);// Chargement de sinformations de connexion SSOvar urlBaseAuth = config[mode]['urlBaseAuth'];chargerStatutSSO(urlBaseAuth);}},error: function() {div.html('Erreur: impossible de charger la barre de navigation');}});}});/*** Modifie les liens des boutons de connexion / déconnexion SSO pour prendre ne compte* l'adresse exacte de la page d'origine (si on fait ça en PHP, on obtient l'URL du* widget de barre de navigation et pas de la page appelante)*/function definirPageOrigineDansLiens() {var page = window.location.href;$('#bouton-connexion a').attr('href', $('#bouton-connexion a').attr('href') + page);$('#deconnexion a').attr('href', $('#deconnexion a').attr('href') + page);}/*** Interroge le SSO pour connaître le statut de l'utilisateur, et change le menu* à droite de la barre en fonction*/function chargerStatutSSO(urlBaseAuth) {var urlAuth = urlBaseAuth + '/identite';$.ajax({url: urlAuth,type: "GET",dataType: 'json',xhrFields: {withCredentials: true}}).done(function(data) {// connectédefinirUtilisateur(data.token);});}function definirUtilisateur(jeton) {var nomComplet = '';if (jeton != undefined) {// décodage jetonvar jetonDecode = decoderJeton(jeton);nomComplet = jetonDecode.intitule;}// affichage$('#bouton-connexion').hide();$('#utilisateur-connecte').show();$('#nom-complet').html(nomComplet);}/*** Décodage à l'arrache d'un jeton JWT, ATTENTION CONSIDERE QUE LE* JETON EST VALIDE, ne pas décoder n'importe quoi - pas trouvé de lib simple* Si pb de cross-browser, tenter ceci : https://code.google.com/p/javascriptbase64/* ou ceci : https://code.google.com/p/crypto-js*/function decoderJeton(jeton) {parts = jeton.split('.');payload = parts[1];payload = atob(payload);payload = JSON.parse(payload, true);return payload;}