/* fichiers importés : /mnt/101/sdb/d/c/sitesweb.abondance/copyleft/includes/js/generiques/ajax.v2.js /mnt/101/sdb/d/c/sitesweb.abondance/copyleft/includes/js/generiques/browser.js /mnt/101/sdb/d/c/sitesweb.abondance/copyleft/includes/js/generiques/byId.js /mnt/101/sdb/d/c/sitesweb.abondance/copyleft/includes/js/generiques/fitUrl.js /mnt/101/sdb/d/c/sitesweb.abondance/copyleft/includes/js/generiques/formDatas.js /mnt/101/sdb/d/c/sitesweb.abondance/copyleft/includes/js/generiques/getPos.js /mnt/101/sdb/d/c/sitesweb.abondance/copyleft/includes/js/generiques/msg.v2/msg.js /mnt/101/sdb/d/c/sitesweb.abondance/copyleft/includes/js/generiques/onDomReady.js /mnt/101/sdb/d/c/sitesweb.abondance/copyleft/includes/js/generiques/scrolled.js /mnt/101/sdb/d/c/sitesweb.abondance/copyleft/includes/js/generiques/scroller.js /mnt/101/sdb/d/c/sitesweb.abondance/copyleft/includes/js/generiques/winDim.js /mnt/101/sdb/d/c/sitesweb.abondance/copyleft/includes/js/specifiques/comments.lib.js /mnt/101/sdb/d/c/sitesweb.abondance/copyleft/includes/js/specifiques/onDomReady.prog.js */ /* __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ _/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \_ /mnt/101/sdb/d/c/sitesweb.abondance/copyleft/includes/js/generiques/getPos.js __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ _/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \_ */ /** * * @author Erwan Lefèvre * @copyright Erwan Lefèvre 2009 * @license Creative Commons - Paternité 2.0 France - http://creativecommons.org/licenses/by/2.0/fr/ * @version work in progress * */ /** * getPos() * ----------------------------------------------------------------------------- * retourne la position (dans la page) du côté /side/ (t|b|l|r) de l'objet /obj/ * (en tenant compte des différences de navigateur) * (la valeur retournée est donnée en pixels) * * @param String sens indique si l'on souhaite obtenir le résultat dans le sens de la hauteur (y) ou de la largeur (x) - par défaut ! y * @return Integer * @access public */ //compact:true; function getPos(obj, side) { var pos=0; var tmp=obj; if ( side=='l' || side=='r' ) { // on procède de parent en parent car IE comme ça (les autres donnent directement la position par rapport à la page) do { pos += tmp.offsetLeft; tmp = tmp.offsetParent; } while( tmp !== null ); if ( side=='r' ) { pos += obj.offsetWidth; } } else { do { pos += tmp.offsetTop; tmp = tmp.offsetParent; } while( tmp !== null ); if ( side=='b' ) { pos += obj.offsetHeight; } } return pos; } /* __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ _/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \_ /mnt/101/sdb/d/c/sitesweb.abondance/copyleft/includes/js/generiques/onDomReady.js __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ _/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \_ */ // --------------------------------------------------- onDomReady --------------------------------------------------- // permet de ne déclencher des scripts qu'une fois que le DOM est chargé (mais avant que les images ne le soient) // création : 2009-09-20 //compact:true; /* usage : * - déclarations : * onDomReady.add(callBackFunction); * * c'est à dire : * onDomReady( function(){alert('hello world')} ); * ou : * var hello = function(){alert('hello world')} ; * onDomReady( hello() ); * * - déclenchement : * onDomReady.go(); // script à placer le plus tard possible dans le code html, genre avant */ var onDomReady = ({ i : -1 , //compteur d'enregistrement des callback ii : null , //compteur de déclenchement des callback callbacks : [] , // actions enregistrées add : function(declar) { // déclarer une nouvelle action this.i ++ ; this.callbacks[this.i] = function(){declar();} ; }, go : function() { // déclencher les callbacks for ( this.ii = 0 ; this.ii<=this.i ; this.ii++ ) { this.callbacks[this.ii](); } } }); /* */ /* __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ _/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \_ /mnt/101/sdb/d/c/sitesweb.abondance/copyleft/includes/js/generiques/scrolled.js __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ _/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \_ */ /** * * @author Erwan Lefèvre * @copyright Erwan Lefèvre 2009 * @license Creative Commons - Paternité 2.0 France - http://creativecommons.org/licenses/by/2.0/fr/ * @version work in progress * */ /** * scrolled() * ----------------------------------------------------------------------------- * retoune la valeur de défilement de la fenêtre, dans le sens /sens/ (horizontal ou vertical) * (en tenant compte du navigateur) * * @param String sens indique si l'on souhaite obtenir le résultat dans le sens de la hauteur (y) ou de la largeur (x) - par défaut ! y * @return Integer * @access public */ //inc:'generiques/browser.js'; //compact:true; function scrolled (sens) { if (sens=='x') { if ( browser.abbr != 'ie' ) { return window.pageXOffset; } else if ( browser.ver >= 7 ) { return document.documentElement.scrollLeft; } else { return document.body.scrollLeft; } } else { if ( browser.abbr != 'ie' ) { return window.pageYOffset; } else if ( browser.ver >= 7 ) { return document.documentElement.scrollTop; } else { return document.body.scrollTop; } } } /* __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ _/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \_ /mnt/101/sdb/d/c/sitesweb.abondance/copyleft/includes/js/generiques/scroller.js __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ _/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \_ */ /** * @author Erwan Lefèvre * @copyright Erwan Lefèvre 2009 * @license Creative Commons - Paternité 2.0 France - http://creativecommons.org/licenses/by/2.0/fr/ * @version v1.0 beta * */ /** * @class scroller * ============================================================================================= * défilement doux de la page * * @author Erwan Lefèvre * @singleton * */ //compact:true; /* améliorations à apporter : * du luxe : faire en sorte qu'on puisse changer de direction en cours de route, quand on clique sur un scroller.go() pendant un scrolling */ /* fonctionnent : * * au chargement de la page, l'effet est automatiquement appliqué à tous les liens vers des ancres (y compris ancres numériques, du type : "#500", qui pointe à 500px du haut de l'écran) * il peut ensuite être appliqué à d'autres liens, pointant vers des objets quelconques * * déclenchement le plus simple, pour remonter en haut de page : * scroller.go() ; * * déclenchement ciblé, pour aller à un point déterminé : * scroller.go(target) ; * * mixed target : où l'on veut se rendre * accepte un id d'ancre (exemple:"monAncre") * ou une hauteur (en pixels) par rapport au haut de la page (exemple:300) * par défaut : 0 (donc le haut de la page) * * déclenchement programmé : * prend automatiquement pour cibles les ancres données dans les liens des éléments déclencheurs * une fois le DOM prêt, effectuer : * scroller.auto(actionners, element) ; * * string actionners : accepte les valeurs suivantes : * rien : prend pour cible toutes les ancres de la page * ou un nom de classe css (exemple : "ma_classe") : prend pour cible toutes les ancres de cette classe * ou un id d'élément (exemple : "#mon_id") : prend pour cible l'élément dont c'est l'id * * HTMLobject element : l'élément de la page au sein duquel on recherche les actionners (par défaut : window.document) * */ /* dégradation : si le navigateur ne reconnait pas le javascript : * * les liens vers des ancres normales (non numériques) se dégradent parfaitement, en liens sans scrolling. * les liens vers des ancres numériques envoient à des pages inexistantes. * les liens vers des ancres cibles désignées par leur id sont perdus sans effets secondaires. * */ var scroller = ({ /** paramètres par défaut * -------------------------------------------------------------------------------------------- */ // opublic "target" : 0, // où l'on veut se rendre (accepte un id d'ancre ("monAncre") ou une hauteur en px ("300")) // private "perSec" : 25, // le nombre frames par seconde (détermine implicitement la vitesse du scroll : plus perSec est grand, plus ça va vite) "framesLeft" : null, // nb d'frames restantes "nextScroll" : null, // reçoit le setTimeout qui programme le prochain décalage d'un cran /** ieVer() * -------------------------------------------------------------------------------------------- * attribue le n° de version d'IE (ou null) à la variable this.ie * * @return float le n° de version de IE, ou null * @access private */ "ieVer" : function() { if (navigator.appName == "Microsoft Internet Explorer") { var ieReg = /.*MSIE ([^;]+);.*/i ; scroller.ie = parseFloat(navigator.appVersion.replace(ieReg, "$1")); } else { scroller.ie = null ; } }, /** posY() * -------------------------------------------------------------------------------------------- * détermine la valeurs de défilement vertical de la fenêtre, en f° du navigateur * * @return Integer * @access private */ "posY" : function() { // retourner le niveau de scroll actuel de la fenêtre if ( !this.ie ) { return window.pageYOffset; } else if (this.ie>=7) { return document.documentElement.scrollTop; } // ok:8 - bof:7 - non:6,5 else { return document.body.scrollTop; } // ok: - bof:6,5 - non:8,7 }, /** smooth() * -------------------------------------------------------------------------------------------- * ralentissement progressif du scroll à l'approche de la cible * * @param integer x numéro de frame de l'animation * @param integer sens sens de défilement (haut=1, bas=-1) * * @return integer le nb de pixel à faire défiler, en f° de l'avancement de l'animation * @access private */ "smooth" : function(x, sens) { sens = (sens<1) ? -1 : 1 ; var y = sens * (x*x) ; return y ; }, /** compter() * -------------------------------------------------------------------------------------------- * compte le nombre de frames requise pour l'animation * * @param integer target la position verticale à atteindre à la fin de l'animation * * @return Object "frames":le nombre de frames qui composeront l'animation | "reste":le nb de pixel à retrancher à la première frame * @access private */ "compter" : function(target) { if (target<0) { target = -target ; } var tmp = 0 ; var i = 0 ; while ( tmp < target ) { i++ ; tmp = tmp + this.smooth(i) ; } var retour = { "frames":i , "reste":tmp-target } ; return retour ; }, /** init() * -------------------------------------------------------------------------------------------- * initialisation des paramètres, avec début du scroll * * @param String target l'id de l'élément visé, ou une position numérique, par rapport au haut de la page * * @return Object "frames":le nombre de frames qui composeront l'animation | "reste":le nb de pixel à retrancher à la première frame * @access private */ "init" : function(target) { // constantes if (target) { this.target = target ; if (this.target != parseInt(this.target,10)) { // conversion de target_sous_forme_d'id en target_sous_forme_numérique var targetObj = document.getElementById(this.target) ; this.target = 0 ; do { this.target += targetObj.offsetTop; targetObj = targetObj.offsetParent; } while( targetObj !== null ); } } this.totalMove = this.posY() - this.target ; this.compte = this.compter(this.totalMove) ; this.frames = this.compte.frames ; this.delay = parseInt(1000/this.perSec, 10) ; // variables this.framesLeft = this.frames ; }, /** upper() * -------------------------------------------------------------------------------------------- * effectuer un frame de l'animation * * @return Void * @access Private */ "upper" : function() { var sens = ( this.posY()>this.target ) ? 1 : -1 ; this.movesSize = this.smooth(this.framesLeft, sens) ; if (this.framesLeft==this.frames) { this.movesSize = this.movesSize - this.compte.reste*sens ;} /* outil de débugage : alert ( "\ndestination finale:" + this.target + "\ndéplacement total:" + this.totalMove + "\nposition du scrolling:"+this.posY() + "\ntaille du déplacement en cours:" + (this.movesSize) + "\nposition scrolling apres déplacement:" + (this.posY()-this.movesSize) + "\nframes restantes" + this.framesLeft + "" ) ;*/ window.scrollBy(0,-(this.movesSize)); this.framesLeft-- ; // relancer l'opération si toutes les frames de l'animation n'ont pas été faites if (this.framesLeft>0) { clearTimeout(this.nextScroll) ; this.nextScroll = setTimeout ( function() { scroller.upper(); }, this.delay ) ; } // sinon réinitialiser la cible ( pour que scroller.go(); revienne au même que scroller.go(null); ) else { this.target = null ; } }, /** go() * -------------------------------------------------------------------------------------------- * lancer l'animation * * @param String target la cible du défilement (un id d'élément ou une valeur numérique) * * @return Void * @access Public */ go : function(target) { clearTimeout(this.nextScroll) ; // éviter les conflits de scrollings multiples if (!this.framesLeft) { this.init(target); } // initialiser si ce n'est fait pour ce scroll if (this.framesLeft) { this.upper() ; } // lancer le scroll }, /** auto() * -------------------------------------------------------------------------------------------- * appliquer automatiquement la f° à un élément ou à plusieurs liens (voire tous) * * @param String actionners les liens auquels appliquer la fonction * @param Object element l'élément au sein duquel on recherche les actionneurs * * @return Void * @access Public */ auto : function(actionners, element) { element = element ? element : document ; var links = element.getElementsByTagName('a') ; var exp_reg = /#/gi; var tmp ; // appliquer à un élément désigné par son id if ( exp_reg.test(actionners) ) { tmp = actionners.replace(exp_reg, "") ; eval ( "document.getElementById('"+tmp+"').onclick = function() { scroller.go('"+tmp+"'); return false; } ; ") ; } // appliquer à tous les liens ou a des liens désignés par leur classe css else { for ( var i=0 ; i * @copyright Erwan Lefèvre 2009 * @license Creative Commons - Paternité 2.0 France - http://creativecommons.org/licenses/by/2.0/fr/ * @version work in progress * */ /** * winDim() * -------------------------------------------------------------------------------------------- * retourne les dimentions intérieurs de la fenêtre * * @return void * @access private * @param string sens la mesure désirée : "w" pour largeur, "h" pour hauteur ("w" par défaut) * */ //inc:'generiques/browser.js'; //compact:true; function winDim(sens) { var mesure; if ( browser.abbr !== 'ie' ) { // Si on est pas sous IE if (sens=="w") { mesure = window.innerWidth; } else { mesure = window.innerHeight; } } else { if (sens=="w") { mesure = document.documentElement.clientWidth; } else { mesure = document.documentElement.clientHeight; } } return mesure ; } /* __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ _/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \_ /mnt/101/sdb/d/c/sitesweb.abondance/copyleft/includes/js/specifiques/comments.lib.js __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ _/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \_ */ //inc:'generiques/ajax.v2.js'; //inc:'generiques/formDatas.js'; //inc:'generiques/fitUrl.js'; //compact:true; // fitUrl:'/copyleft/composants/graphisme/'; // ------------------------------------------ verifComments() ------------------------------------------ // vérifier la validité du formulaire de commentaires function verifComments() { if ( !byId('newcmt').elements.newcomment.value ) { alert("Le champ de commentaire est vide.") ; byId('newcmt').elements.newcomment.focus(); return false ; } else if ( !byId('newcmt').elements.nom.value ) { byId('newcmt').elements.nom.focus(); return confirm ("Publier le commentaire sans le signer ?") ; } else { return true; } } // ------------------------------------------ addComment() ------------------------------------------ // enregistrer un nouveau commentaire function addComment() { if ( verifComments() ) { var settings = { params: formDatas('newcmt'), update: 'commentaires', //onSuccess : function () { scroller.go('cmtWrite'); }, faitesmoipachieraveclesvirgules : null } ; ajax.send('comments.inc.php', settings) ; byId('moiJeDis').innerHTML = 'loading Ajout en cours. Une petite seconde...' ; byId('moiJeDis').style.borderStyle = 'dashed'; } } /* __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ _/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \_ /mnt/101/sdb/d/c/sitesweb.abondance/copyleft/includes/js/specifiques/onDomReady.prog.js __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ _/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \_ */ //compact:true; /* programmer la mise en route de l'accordéon ------------------------------------------------------------- var accordionner; onDomReady.add( function() { accordionner = new TINY.accordion.slider('accordionner'); /__________* version normale *__________/ accordionner.init('accordion','h3',0); accordionner.pr(0,0); /__________* version pin-up accordionner.init('accordion','h3',0, false, "pinned"); accordionner.pin(0) accordionner.pr(0,0); *__________/ });*/ /* positionner le menu juste à droite du contenu ------------------------------------------------------------- */ //inc:'generiques/byId.js'; //inc:'generiques/winDim.js'; function rePosMenu() { byId('onright').style.left = getPos(byId('page'), 'r') - scrolled('x')+"px" ; //alert(byId('page').offsetWidth + byId('onright').offsetWidth+' - '+winDim("w")); } window.onresize = rePosMenu; window.onscroll = function () { if ( winDim("w")<= byId('page').offsetWidth + byId('onright').offsetWidth) { rePosMenu(); } }; onDomReady.add( function() { rePosMenu(); } ); /* __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ _/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \_ /mnt/101/sdb/d/c/sitesweb.abondance/copyleft/includes/js/generiques/msg.v2/msg.js __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ _/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \_ */ /** * * @author Erwan Lefèvre * @copyright Erwan Lefèvre 2009 * @license Creative Commons - Paternité 2.0 France - http://creativecommons.org/licenses/by/2.0/fr/ * @version 2.1 * */ /** * @class msg * ============================================================================================= * * affichage de message d'interface * @author Erwan Lefèvre * @compatible au 20 octobre 2009, compatibilité assurée pour : * Firefox 1.5+, Internet Explorer 5.5+, Opéra 10, Safari 3.2.3. * Autres versions et navigateurs non testés * */ /** * mise à jour * 2009-11-15 : ajout de l'option "remember" * 2009-11-15 : révision du design, et ouverture de la marge de manoeuvre des skins css * 2009-10-20 : amélioration de la div modale (n'est plus le parent de la boîte de message + options de couleur et d'opacité) * 2009-10-19 : dans la feuille de styles css, absorbsion du style .notice par le style standard .msgBox * 2009-10-15 : révision du positionnement * 2009-10-16 : remise en place des contenus mis à jour par ajax */ /** * améliorations à apporter : * - positionnement : gérer les valeurs en "em" et "%" */ /* fitUrl:'/copyleft/includes/js/generiques/'; */ //compact:true; var msg = ({ /* quelques variables à initialiser -------------------------------------------------------------------------------------------- */ // variables publiques "def" : { // paramètres par défaut "className" : null, // classe css à attribuer au message d'interface (\0|error|success) "style" : {}, // styles css à donner à la boîte (description javascript) "delay" : 0, // int delay : délai (secondes) avt fermeture auto (0 = pas de fermeture auto) "modal" : false, // bolean modal : mettre un écran bloquant l'accès au reste de la page "modalColor" : '#fff', // string modalColor : la courleur de l'écran modal "modalOpacity" : 0.7, // float modalOpacity : l'opacité de l'écran modal (de 0 à 1) "title" : null, // string title : titre de la boîte de message (vide = pas de titre) "context" : null, // string context : code html autour du message $msg$ (vide = pas de contexte) (intéressant surtout pour les réglages enregistrables) "button" : "ok", // string button : ce qui est écrit sur le bouton de fermeture (vide = pas de bouton) "positon" : null, // string position : position de la boîte de message dans la fenêtre, sous la forme horizontale:verticale. Voir les valeurs acceptés dans la doc de msg.setPosition() "onOpen" : null, // callback onOpen : fonction exécutée à l'ouverture du message "onClose" : null, // callback onClose : fonction exécutée à la fermeture du message "ieMaxWidth" : 400, // integer ieMaxWidth : pour forcer ie<7 à traiter la propriété css maxWidth. Donner une valeur en px "ajaxContent" : null, // string ajaxContent : l'adresse url pour une requête ajax dont la réponse viendra remplacer le contenu du message "ajaxAbortDelay" : 20, // integer ajaxAbortDelay : délai (en secondes) avant abandon d'une requête ajax "remember" : true, // boolean remember : indique s'il faut mémoriser le message et ses options, pour un éventuel réaffichage ultérieur "faitesmoipaschieraveclesvirgules" : null }, // variables privées "closeMsgIn" : null, // dans combien de temps fermera le message "msgContentRec" : "Pas de message", // enregistrement du dernier message (initialisation avec une valeur par défaut) "msgOptionsRec" : {"position":false}, // enregistrement des dernières options utilisées "presets" : {}, // préréglages (doivent être enregistrés via la méthode "msg.preset()") // constantes "modalId" : "modalObj", // IE<8 n'accepte pas que l'id de mon écran corresponde à un nom de variable /** ieVer() * -------------------------------------------------------------------------------------------- * attribue le n° de version d'IE (ou null) à la variable this.ie * * @return float le n° de version de IE, ou null * @access private * */ "ieVer" : function() { if (navigator.appName == "Microsoft Internet Explorer") { var ieReg = /.*MSIE ([^;]+);.*/i ; msg.ie = parseFloat(navigator.appVersion.replace(ieReg, "$1")); } else { msg.ie = null ; } }, /** mousePos() * -------------------------------------------------------------------------------------------- * relève la position de la souris * * @return void * @access private * @param event event l'événement auquel on attribue cette f° * */ "mousePos" : function (event) { if (!msg.ie) { // Si on est pas sous IE msg.mouseX = event.pageX; msg.mouseY = event.pageY; } else if (msg.ie<8) { msg.mouseX = event.x+document.documentElement.scrollLeft; msg.mouseY = event.y+document.documentElement.scrollTop; } else { msg.mouseX = event.x+document.body.scrollLeft; msg.mouseY = event.y+document.body.scrollTop; } }, /** getCoords() * -------------------------------------------------------------------------------------------- * détermine la valeurs de différentes coordonnées, en f° du navigateur * * @return void * @access private * */ "getCoords" : function () { this.coords = {} ; if ( !this.ie ) { this.coords.posX = window.pageXOffset; this.coords.posY = window.pageYOffset; this.coords.visibleW = window.innerWidth; this.coords.visibleH = window.innerHeight; } else if (this.ie>=6) { this.coords.posX = document.documentElement.scrollLeft; this.coords.posY = document.documentElement.scrollTop; this.coords.visibleW = document.documentElement.clientWidth; this.coords.visibleH = document.documentElement.clientHeight; } else { this.coords.posX = document.body.scrollLeft; this.coords.posY = document.body.scrollTop; this.coords.visibleW = document.body.clientWidth; this.coords.visibleH = document.body.clientHeight; } }, /** setPosition() * -------------------------------------------------------------------------------------------- * positionne la boîte de message au centre de la fenêtre * * @return void * @access private * @param boolean delayed indique si le positionnement a déjà été reporté * @param string pos positionnement du message : * accepte des valeurs sous forme "horizontale:verticale" (l'un et/ou l'autre pouvant être ignorés) * les valeurs verticale peuvent être : * - un nombre de pixels positif : positionne par rapport au haut de l'écran * - un nombre de pixels négatif : positionne par rapport au bas de l'écran * - mouse : positionne à la position verticale de la souris (en faisant en sorte que ça ne déborde pas de l'écran) * - m ou tout autre valeur : positionne au milieu de l'écran * les valeurs horizontale peuvent être : * - un nombre de pixels positif : positionne par rapport à la gauche de l'écran * - un nombre de pixels négatif : positionne par rapport à la droite de l'écran * - mouse : positionne à la position horizontale de la souris (en faisant en sorte que ça ne déborde pas de l'écran) * - c ou tout autre valeur : positionne au centre de l'écran * */ "setPosition" : function (pos, delayed) { var msgBoxObj = document.getElementById('msgBox'); if ( msgBoxObj ) { // seulement si un message est ouvert // pour les positionnement relatifs à la souris, renouveler le positionnement 0.1 sec plus tard, // afin que l'utilisateur ait le temps de finir le déplacement de sa souris if (!delayed) { setTimeout(function(){msg.setPosition(pos,true);},100); } // relever des différentes coordonnées de la fenêtre this.getCoords(); // séparer les coordonnées horiz et vert var coords = pos ? pos : ':' ; coords = coords.split(/:/); if (typeof(coords[1])=='undefined'){coords[1]='';} var X = coords[0], Y = coords[1], px = /^-?[0-9]+(px)?$/i, negative ; // postionner à l'horizontale // position relative à la souris if (X==='mouse') { // position relative à la souris var bordDroit = msg.mouseX + msgBoxObj.offsetWidth + 10 ; msgBoxObj.style.left = ( (bordDroit>this.coords.visibleW) ? msg.mouseX - (bordDroit - this.coords.visibleW) -10 : msg.mouseX + 10) + "px"; } // valeurs en pixels else if ( px.test(X) ) { negative = /-/.test(X) ; X = parseInt(X,10); // pour avoir un nombre plutôt qu'un chaîne if (negative) { msgBoxObj.style.right = ( Math.abs(X) - this.coords.posX ) + 'px'; } // positionnement par rapport à la droite else { msgBoxObj.style.left = ( this.coords.posX + X) + 'px'; } // positionnement par rapport à la gauche } // au centre (par défaut) else { msgBoxObj.style.left = (this.coords.visibleW - msgBoxObj.offsetWidth)/2 + this.coords.posX + "px"; } // postionner à la verticale // position relative à la souris if (Y==='mouse') { var auDessus = msg.mouseY - (msgBoxObj.offsetHeight + 5); msgBoxObj.style.top = ( (auDessus1) { options.modalOpacity=1; } } return options; }, /** checkContent() * -------------------------------------------------------------------------------------------- * vérifie la syntaxe des options, et retourne des options corrigées * * @param mixed msgContent le message à vérifier * @return string le contenu du message sous forme de chaine * */ "checkContent" : function (msgContent, options) { if (msgContent) { if ( msgContent.innerHTML ) { msgContent = msgContent.innerHTML ; } // copie du contenu depuis le contenu d'un élément else { msgContent += "" ; } // convertir tout ce qui n'a pas de innerHTML en chaine } return msgContent; }, /** preset() * -------------------------------------------------------------------------------------------- * enregistre un paramétrage * * @param string settingName Le nom sous lequel enregistrer le paramétrage * @param string msgContent Le message par défaut pour ce paramétrage * @param object settings Les options par défaut pour ce paramétrage * @return void * @access public */ "preset" : function (settingName, msgContent, settings) { msgContent = this.checkContent(msgContent); settings = this.checkOptions(settings); this.presets[settingName] = { "msgContent" : msgContent, "settings" : settings }; }, /** reload() * -------------------------------------------------------------------------------------------- * affiche un message sur la base d'un paramétrage préenregistré * * @param string settingName Le nom du paramétrage à charger * @param string msgContent Le message à afficher (optionnel) * @param object settings Les options de la boîte de message (optionnel) * @return void * @access public * */ "reload" : function (settingName, msgContent, options) { // si nom de paramétrage incorrect, afficher une erreur (pour éviter des conflits d'options) if (!this.presets[settingName]) { this.open('paramétrage "'+settingName+'" inconnu.',{"button" : "ok"}); } // sinon else { // le message et les options passés dans la fonction prévalent sur les paramètres enregistrés var finalMsgContent = msgContent ? msgContent : this.presets[settingName].msgContent; var finalOptions = {}; this.transfer(this.presets[settingName].settings, finalOptions); this.transfer(options, finalOptions); this.open(finalMsgContent, finalOptions); } }, /** replaceAlert() * -------------------------------------------------------------------------------------------- * pour que msg remplace la fonction alert() normale * * @return void * @access public * */ "replaceAlert" : function () { if (document.getElementById) { window.alert = function (msgContent, options) { msg.reload ( 'alert', msgContent, options); }; } }, /** close() * -------------------------------------------------------------------------------------------- * ferme le message * * @return void * @access public * */ "close" : function () { if (document.getElementById(this.modalId) || document.getElementById("msgBox")) { // un message existe déjà // cas où l'écran est activé if ( document.getElementById(this.modalId) ) { document.getElementsByTagName("body")[0].removeChild(document.getElementById(this.modalId)); } // cas contraire (où on peut cliquer hors de l'alert) document.getElementsByTagName("body")[0].removeChild(document.getElementById("msgBox")); // vider le compte à rebour clearTimeout(this.closeMsgIn); if (typeof(this.msgOptionsRec.onClose)=='function') {this.msgOptionsRec.onClose();} } }, /** ajaxUpdate() * -------------------------------------------------------------------------------------------- * met à jour le contenu du message par requête ajax * * @return void * @access private * */ "ajaxUpdate" : function (url, options) { // créer l'objet xhr var xhr = null; if (window.XMLHttpRequest) { xhr = new XMLHttpRequest(); } // Firefox et autres else if(window.ActiveXObject){ // Internet Explorer try { xhr = new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) { xhr = new ActiveXObject("Microsoft.XMLHTTP"); } } else { xhr = false; alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest..."); } // exécuter la requête var abort ; xhr.onreadystatechange=function() { if(xhr.readyState==4) { clearTimeout(abort); document.getElementById('msgContent').innerHTML = xhr.responseText; msg.setPosition(); } }; xhr.open( 'GET' , url , true ) ; abort = setTimeout( function(){ var errorMsg = "readyState = " + xhr.readyState + '
' + "status = " + xhr.status + '
' + "statusText = " + xhr.statusText + '
' + ""; msg.open(errorMsg,{title:'abandon de la requête ajax',delay:0}); xhr.abort(); }, options.ajaxAbortDelay*1000 ); xhr.send(null) ; }, /** build() * -------------------------------------------------------------------------------------------- * crée la boîte message dans le dom * * @param string msgContent Le message à afficher (optionnel) * @param object allOptions Les options de la boîte de message (optionnel) * @return void * @access private * */ "build" : function (msgContent, allOptions) { // créer l'écran modal par dessus la page (optionnel) if (allOptions.modal) { // crée l'écran en tant que div, enfant du body var modalObj = document.getElementsByTagName("body")[0].appendChild(document.createElement("div")); modalObj.id = this.modalId; // s'assurer que l'écran couvre bien toute la hauteur de la page if (this.ie>0 && this.ie<6) { modalObj.style.height = document.body.scrollHeight + "px"; } else { modalObj.style.height = document.documentElement.scrollHeight + "px"; } // appliquer la couleur et l'opacité du modal modalObj.style.backgroundColor=allOptions.modalColor; if (this.ie) { modalObj.style.filter ="alpha(opacity="+parseInt(allOptions.modalOpacity*100,10)+")"; } else { modalObj.style.opacity=allOptions.modalOpacity; } } // créer la boîte de message, en tant que div enfant du body var msgBoxObj = document.getElementsByTagName("body")[0].appendChild(document.createElement("div")); msgBoxObj.id = "msgBox"; msgBoxObj.className='msgBox'; if (allOptions.className) { msgBoxObj.className+=' '+allOptions.className; } // appliquer une classe css de success|error|notice au message // préparer le contenu de la boîte // intégration du message dans le contexte demandé (optionnel) if (allOptions.context) { var contentReg = /(\$msg\$)/g; msgContent = allOptions.context.replace(contentReg, msgContent); } // intégration du message dans son block div var msgContentObj = '
'+msgContent+'
'; // titre du message (optionnel) var titleObj = ''; if (allOptions.title) { titleObj = '
'+allOptions.title+'
'; } // bouton de fermeture (optionnel) var btn = ''; if (allOptions.button || allOptions.button===0) { btn = ''; } // intégrer tout ça dans la boîte msgBoxObj.innerHTML = titleObj + "\n" + msgContentObj + "\n" + btn; // appliquer les options de style à la boîte this.transfer(allOptions.style, msgBoxObj.style); if (this.ie && this.ie<7 && msgBoxObj.offsetWidth>allOptions.ieMaxWidth) { msgBoxObj.style.width = allOptions.ieMaxWidth + 'px'; } // cheat max-width pour IE<7 // positionner la boîte de message à l'endroit voulu de la fenêtre this.setPosition(allOptions.position); // charger le contenu ajax (optionnel) if (allOptions.ajaxContent) { this.ajaxUpdate(allOptions.ajaxContent, allOptions); } }, /** open() * -------------------------------------------------------------------------------------------- * paramètre et déclenche l'affichage et le masquage du mesage * * @param string msgContent Le message à afficher (optionnel) * @param object allOptions Les options de la boîte de message (optionnel) * @return void * @access public * */ "open" : function (msgContent, options) { // vérifications syntaxiques msgContent = this.checkContent(msgContent); options = this.checkOptions(options); // si un message est déjà ouvert, le fermer if (document.getElementById('msgBox')) { msg.close(); } // écrasement (ponctuel) éventuel des paramètres par défaut var allOptions = {}; this.transfer(this.def, allOptions); this.transfer(options, allOptions); // contenu du msg : nouveau (si donné) ou précédent (par défaut) if (msgContent) { if (allOptions.remember) { this.msgContentRec = msgContent; } } else { msgContent = this.msgContentRec; } // options du msg : nouvelles (si données) ou précédentes (par défaut) if (msgContent) { if (allOptions.remember) { this.msgOptionsRec = allOptions; } } else { this.transfer(this.msgOptionsRec, allOptions); allOptions.modal = false; allOptions.delay = 0; allOptions.button = 'ok'; allOptions.remember = false; } // affichage du message this.build(msgContent, allOptions); // programmer la disparition du message var delay = allOptions.delay; // ce sera plus lisible clearTimeout(this.closeMsgIn); // remet le chorno à zéro delay = delay*1000; // conversion des secondes en millisecondes if (delay>0) { this.closeMsgIn = setTimeout( function () {msg.close();} , delay ); } // lancer le compte à rebours, à moins qu'il ne soit négatif // lancer l'éventuelle fonction callBack if (typeof(allOptions.onOpen)=='function') {allOptions.onOpen();} }, /** init() * -------------------------------------------------------------------------------------------- * initialise la f° * * @return void * @access public * */ "init" : function() { this.ieVer(); msg.autoSetPosition(); //document.onmousemove = msg.mousePos; if (window.attachEvent) { // pour IE document.attachEvent('onmousemove', msg.mousePos); } else { // pour les autres window.addEventListener('mousemove', msg.mousePos, false); } }, "faitesmoipaschieraveclesvirgules" : null }); /* mise en place ------------------------------------------------------------- */ // initialisation (indispensable) msg.init(); // quelques préréglages (pas indispensables) msg.preset( // message de type alert(), en plus joli "alert", // nom du réglage "!", // message par défaut { // options par défaut "modal" : true, "title" : "attention !", "button" : "ok", "context" : '$msg$' } ); msg.preset( // indiquer un chargement en cours (pense à fermer le message quand le chargement est terminé)r "loading", // nom du réglage "veuillez patienter...", // message par défaut { // options par défaut "modal" : true, "button" : null, "title" : "chargement en cours", "context" : '$msg$' } ); msg.preset( // message sous forme d'infobulle "tip", // nom du réglage null, // message par défaut { // options par défaut "delay" : 0, "button" : null, "position" : "mouse:mouse", "remember" : false } ); /* __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ _/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \_ /mnt/101/sdb/d/c/sitesweb.abondance/copyleft/includes/js/generiques/browser.js __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ _/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \_ */ /** * * @author Erwan Lefèvre * @copyright Erwan Lefèvre 2009 * @license Creative Commons - Paternité 2.0 France - http://creativecommons.org/licenses/by/2.0/fr/ * @version work in progress * */ /** * browser * ----------------------------------------------------------------------------- * créer une variable globable "browser", contenant * des informations sur le navigateur * * @var float le n° de version de IE, ou null * */ //compact:true; var browser = {} ; if (navigator.appName == "Microsoft Internet Explorer") { var ieReg = /.*MSIE ([^;]+);.*/i ; browser.abbr = 'ie'; browser.ver = parseFloat(navigator.appVersion.replace(ieReg, "$1")); } else { browser.abbr = false; browser.ver="?"; } /* __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ _/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \_ /mnt/101/sdb/d/c/sitesweb.abondance/copyleft/includes/js/generiques/ajax.v2.js __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ _/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \_ */ /** * ajax.v2() * pour se simplifier l'ajax * * @author Erwan Lefèvre * @copyright Erwan Lefèvre, 2009 * @license reative Commons - Paternité 2.0 France - http://creativecommons.org/licenses/by/2.0/fr/ * @version 2.06 - 2009-10-23 */ /*global ActiveXObject */ // compact:true; /* màj : * 2009-10-23, v2.06 : * - ajout de l'option debug (true|false), pour suivre l'avancement de la requête * - débugage pour les cas de retours non json, par lecture du content-type de la réponse * 2009-10-06, v2.05 : * - débogage update * - remplacement options.json par options.resp * - ajout d'un errorLog */ /* * exemple d'utilisation : * * // cet exemple va lancer une requête à l'adresse 'example.php' * // le contenu retourné par example.php sera alors inséré dans l'élément de la page portant pour id 'mon_element' * // et un message d'alerte sera déclenché pour signifié que l'insertion a été effectuée * * var url = 'example.php?var=valeur'; * var settings={ * 'update' : 'mon_element', * 'onSuccess' : function () {alert('c'\est fait');}, * }; * ajax.send(url, settings); */ /* améliorations à apporter : * - abandon de la requête si pas de réponse au bout de N secondes (prendre exemple sur msg.js) */ var ajax = {}; /** ajax.settings() * -------------------------------------------------------------------------------------------- * paramètres par défaut pour la fonction * * @access public */ ajax.settings = { "debug" : false, // envoyer des alertes de débugage ? "async" : true, // asynchrone ou non ( true|false ) "respType" : "text", // type de réponse ( 'text'|'xml'|'json') "contentType" : "application/x-www-form-urlencoded", // type de contenu "encoding" : "utf-8", // encodage "method" : "GET", // méthode de transmission des données ( 'GET'|'POST'|'HEAD' ) "params" : null, // variables transmises par http ( var1=val1&var2=val2 etc.) //"abort" : 5000, // délai avant abandon de la requête (en millisecondes) //"onAbort" : function () {alert('Requête abandonnée, après '+this.settings.abort/1000+'secondes');}, // fonction callback en cas d'abandon de la requête "onSuccess" : function () {}, // fonction callback en cas de succès de la requête "update" : null, // élément (unique) à mettre à jour en cas de succès (désigné par son id, màj par innerHTML, selon retour "responseText") "jsonUpdate" : null // éléments (multiples) à mettre à jour en cas de succès (voir fonction éponyme) }; /** ajax.errorReport() * -------------------------------------------------------------------------------------------- * affiche une alert() répertoriant les messages d'erreur listés dans ajax.errorLog[] * * @access private */ ajax.errorReport = function () { var nbErrors = ajax.errorLog.length; if (nbErrors>0) { var report = "RAPPORT D'ERREURS \n" ; for (var i=1 ; i<=nbErrors ; i++) { report += "\n "+i+" - " + ajax.errorLog[i]; } } }; /** ajax.getXhr() * -------------------------------------------------------------------------------------------- * retourne un objet XMLHttpRequest * * @access private * @return XMLHttpRequest */ ajax.getXhr = function () { var xhr = null; if (window.XMLHttpRequest) { xhr = new XMLHttpRequest(); } // Firefox et autres else if(window.ActiveXObject){ // Internet Explorer try { xhr = new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) { xhr = new ActiveXObject("Microsoft.XMLHTTP"); } } else { xhr = false; alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest..."); } return xhr ; }; /** ajax.jsonUpdate() * -------------------------------------------------------------------------------------------- * met à jour un ou plusieurs contenus (variables et/ou éléments) du document html * * @access public * @param Object list les information de contenus à modifier * @param String only pour ne prendre en compte que le seul sous-objets "only" de list * @return void * * le paramètre "list" soit être structuté comme suit : * list = { * "item1" : { // désigne l'item à màj : par son id s'il s'agit d'un élément, par son nom s'il s'agit d'une variable * "type" : "element", // détermine si l'item est un élément ou une variable * "val" : null, // pour les variables seulement : la nv valeur à lui à affecter * "contents" : { // pour les éléments seulement : contient les modification à effectuer * // les modification sont définie selon la syntaxe : " propriété : valeur ", comme dans les exemples suivants * "className" : "maclasse", * "style.color" : "#FAA", * "innerHTML" : "span en bleu" // échapper les "" * } * }, * "item2" : { etc. } * } */ ajax.jsonUpdate = function (list, only) { var objs, obj, contents, content; contents = objs = {}; for (objs in list) { if (!only || only==objs) { obj = list[objs] ; // pour màj des variables if ( obj.type == 'var' ) { eval(objs+'="'+obj.val+'"') ; } // pour màj des éléments else { contents = obj.contents ; for (content in contents) { eval( 'byId(objs).' + content + "='" + contents[content] + "'" ); } } } } }; /** ajax.send() * -------------------------------------------------------------------------------------------- * envoi d'une requête ajax, et exécution d'une f° en cas de succès * * @uses [[%tabstop:dépendances]] * @access [[%tabstop:private,public,protected]] * @param String url le chemin relatif vers le fichier interrogé * @param Object options tableau de paramètres optionnels * @return void */ ajax.send = function (url, options) { // initialisation des erreurs ajax.errorLog = [] ; // initialisation des options var allOptions = {}; var opt; for ( opt in ajax.settings ) { allOptions[opt] = ajax.settings[opt]; } // récupération des options par défaut for ( opt in options ) { allOptions[opt] = options[opt]; } // écrasement des options par défaut par les options passées dans la fonction options = allOptions ; options.method = options.method.toUpperCase() ; // création d'un objet Xhr var xhr = ajax.getXhr() ; // réactions aux réponses du serveur xhr.onreadystatechange=function() { // débugage (optionnel) if (allOptions.debug) { var report = "url : " + url; report += "\n\nOPTIONS :" ; for (var opt in allOptions) { if (opt!='params') { report += "\n\t" + opt + " : " + allOptions[opt]; } else {report += "\nparams : oui";} } report += "\n\nXHR :" + "\n\txhr.readystate : " + xhr.readyState + "\n\txhr.status : " + xhr.status + ' ('+xhr.statusText+')'; alert(report); } // une fois réponse obtenue if (xhr.readyState==4) { // chargement de la réponse var restType = xhr.getResponseHeader("Content-Type") ; if (restType=="text/xml") { options.resp = xhr.responseXML ; } else if (restType=="text/json") { options.resp = eval('(' + xhr.responseText + ')'); }// soit ajax.resp = ajax.json.json ; else { options.resp = xhr.responseText ; } // mises à jour automatiques (optionnel) if (options.update) { document.getElementById(options.update).innerHTML = options.resp; } if (options.jsonUpdate) { if (restType!=="text/json") { ajax.errorLog[ajax.errorLog.length] = "mise à jour demandée par jsonUpdate, mais réponse de type "+restType; } else if ( typeof(options.jsonUpdate) == 'string' ) { ajax.jsonUpdate(options.resp.updates, options.jsonUpdate); } else { ajax.jsonUpdate(options.resp.updates); } } // callback (optionnel) options.onSuccess() ; } ajax.errorReport() ; } ; // lancement de la requête if ( options.method != 'GET' ) { // gestion différenciées des paramètres, selon le type de requête (get est plus simple à soumettre que post) var parts = url.split('?'); url = parts[0] ; options.params = parts[1] ? options.params + parts[1] : options.params ; } else if (options.params) { url += '?' + options.params; } // mais normalement, en GET, ont met directement les param dans l'url xhr.open( options.method , url , options.async ) ; if ( options.method == 'POST' ) { xhr.setRequestHeader( "Content-Type" , options.contentType ) ; } xhr.send(options.params) ; }; /* __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ _/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \_ /mnt/101/sdb/d/c/sitesweb.abondance/copyleft/includes/js/generiques/formDatas.js __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ _/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \_ */ // retoune ds une chaine les valeurs de tous les éléments d'un formulaire (textarea compris) pour les passer en variables d'url // formId : la propriété id du formulaire // prefix : peut prendre la valeur de false (par défaut), de '?', ou de '&', selon ce qu'on veut passer d'autres variables en url, avant ('&') ou après ('?') function formDatas(formId, prefix) { prefix = (prefix) ? prefix : '' ; var elems = document.getElementById(formId).elements ; var val ; var datas = prefix ; for ( var i = 0 ; i < elems.length ; i++ ) { val = elems[i].value ; if (!val) { val = '' ; } if ( elems[i].name ) { datas += elems[i].name + '=' + escape(val) ; if ( i < elems.length-1 ) { datas += '&' ; } } } return (datas) ; } /* __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ _/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \_ /mnt/101/sdb/d/c/sitesweb.abondance/copyleft/includes/js/generiques/fitUrl.js __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ _/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \_ */ /** * * @author Erwan Lefèvre * @copyright Erwan Lefèvre 2009 * @license Creative Commons - Paternité 2.0 France - http://creativecommons.org/licenses/by/2.0/fr/ * */ /** fitUrl * ============================================================================================= * * cette fonction d'apparence superflue est en fait utile à mon framework php perso * @author Erwan Lefèvre * */ //compact:true; //fitUrl:false; function fitUrl (url) { return url; } /* __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ _/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \_ /mnt/101/sdb/d/c/sitesweb.abondance/copyleft/includes/js/generiques/byId.js __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ _/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \__/ \_ */ // raccourci pour document.getElementById() function byId(id) { return document.getElementById(id) ; }