[ Index ]
 

Code source de SPIP 1.9.2c

Accédez au Source d'autres logiciels libres

title

Body

[fermer]

/dist/javascript/ -> layer.js (source)

   1  var memo_obj = new Array();
   2  var url_chargee = new Array();
   3  var xhr_actifs = {};
   4  
   5  function findObj_test_forcer(n, forcer) { 
   6      var p,i,x;
   7  
   8      // Voir si on n'a pas deja memorise cet element
   9      if (memo_obj[n] && !forcer) {
  10          return memo_obj[n];
  11      }
  12  
  13      var d = document; 
  14      if((p = n.indexOf("?"))>0 && parent.frames.length) {
  15          d = parent.frames[n.substring(p+1)].document; 
  16          n = n.substring(0,p);
  17      }
  18      if(!(x = d[n]) && d.all) {
  19          x = d.all[n]; 
  20      }
  21      for (i = 0; !x && i<d.forms.length; i++) {
  22          x = d.forms[i][n];
  23      }
  24      for(i=0; !x && d.layers && i<d.layers.length; i++) x = findObj(n,d.layers[i].document);
  25      if(!x && document.getElementById) x = document.getElementById(n); 
  26  
  27      // Memoriser l'element
  28      if (!forcer) memo_obj[n] = x;
  29      return x;
  30  }
  31  
  32  function findObj(n) { 
  33      return findObj_test_forcer(n, false);
  34  }
  35  // findObj sans memorisation de l'objet - avec Ajax, les elements se deplacent dans DOM
  36  function findObj_forcer(n) { 
  37      return findObj_test_forcer(n, true);
  38  }
  39  
  40  function hide_obj(obj) {
  41      var element;
  42      if (element = findObj(obj)){
  43          jQuery(element).css("visibility","hidden");
  44      }
  45  }
  46  
  47  function swap_couche(couche, rtl, dir, no_swap) {
  48      var layer;
  49      var triangle = document.getElementById('triangle' + couche);
  50      if (!(layer = findObj('Layer' + couche))) return;
  51      if (layer.style.display == "none"){
  52          if (!no_swap && triangle) triangle.src = dir + 'deplierbas.gif';
  53          layer.style.display = 'block';
  54      } else {
  55          if (!no_swap && triangle) triangle.src = dir + 'deplierhaut' + rtl + '.gif';
  56          layer.style.display = 'none';
  57      }
  58  }
  59  function ouvrir_couche(couche, rtl,dir) {
  60      var layer;
  61      var triangle = document.getElementById('triangle' + couche);
  62      if (!(layer = findObj('Layer' + couche))) return;
  63      if (triangle) triangle.src = dir + 'deplierbas.gif';
  64      layer.style.display = 'block';
  65  }
  66  function fermer_couche(couche, rtl, dir) {
  67      var layer;
  68      var triangle = document.getElementById('triangle' + couche);
  69      if (!(layer = findObj('Layer' + couche))) return;
  70      if (triangle) triangle.src = dir + 'deplierhaut' + rtl + '.gif';
  71      layer.style.display = 'none';
  72  }
  73  function manipuler_couches(action,rtl,first,last, dir) {
  74      if (action=='ouvrir') {
  75          for (j=first; j<=last; j+=1) {
  76              ouvrir_couche(j,rtl, dir);
  77          }
  78      } else {
  79          for (j=first; j<=last; j+=1) {
  80              fermer_couche(j,rtl, dir);
  81          }
  82      }
  83  }
  84  
  85  //
  86  // Fonctions pour mini_nav
  87  //
  88  
  89  function slide_horizontal (couche, slide, align, depart, etape ) {
  90      var obj = findObj_forcer(couche);
  91      if (!obj) return;
  92      if (!etape) {
  93          if (align == 'left') depart = obj.scrollLeft;
  94          else depart = obj.firstChild.offsetWidth - obj.scrollLeft;
  95          etape = 0;
  96      }
  97      etape = Math.round(etape) + 1;
  98      pos = Math.round(depart) + Math.round(((slide - depart) / 10) * etape);
  99  
 100      if (align == 'left') obj.scrollLeft = pos;
 101      else obj.scrollLeft = obj.firstChild.offsetWidth - pos;
 102      if (etape < 10) setTimeout("slide_horizontal('"+couche+"', '"+slide+"', '"+align+"', '"+depart+"', '"+etape+"')", 60);
 103      //else obj.scrollLeft = slide;
 104  }
 105  
 106  function changerhighlight (couche) {
 107      var kids = couche.parentNode.childNodes;
 108      for (var i = 0; i < kids.length; i++) {
 109          kids[i].className = "pashighlight";
 110      }
 111      couche.className = "highlight";
 112  }
 113  
 114  function aff_selection (arg, idom, url, event)
 115  {
 116  
 117      noeud = findObj_forcer(idom);
 118      if (noeud) {
 119          noeud.style.display = "none";
 120          charger_node_url(url+arg, noeud, '','',event);
 121      }
 122      return false;
 123  }
 124  
 125  // selecteur de rubrique et affichage de son titre dans le bandeau
 126  
 127  function aff_selection_titre(titre, id, idom, nid)
 128  {
 129      t = findObj_forcer('titreparent');
 130      t.value= titre;
 131      t=findObj_forcer(nid);
 132      t.value=id;
 133      jQuery(t).trigger('change'); // declencher le onchange
 134      t=findObj_forcer(idom);
 135      t.style.display='none';
 136  }
 137  
 138  function aff_selection_provisoire(id, racine, url, col, sens,informer,event)
 139  {
 140      charger_id_url(url.href,
 141             racine + '_col_' + (col+1),
 142             function() {
 143               slide_horizontal(racine + 'principal', ((col-1)*150), sens);
 144               aff_selection (id, racine + "_selection", informer);
 145             },
 146             event);
 147    // empecher le chargement non Ajax
 148    return false;
 149  }
 150  
 151  // Lanche une requete Ajax a chaque frappe au clavier dans une balise de saisie.
 152  // Si l'entree redevient vide, rappeler l'URL initiale si dispo.
 153  // Sinon, controler au retour si le resultat est unique, 
 154  // auquel cas forcer la selection.
 155  
 156  function onkey_rechercher(valeur, rac, url, img, nid, init) {
 157      var Field = findObj_forcer(rac);
 158      if (!valeur.length) {    
 159          init = findObj_forcer(init);
 160          if (init && init.href) { charger_node_url(init.href, Field);}
 161      } else {    
 162        charger_node_url(url+valeur,
 163               Field,
 164               function () {
 165                     var n = Field.childNodes.length - 1;
 166                  // Safari = 0  & Firefox  = 1 !
 167                  // et gare aux negatifs en cas d'abort
 168                  if ((n == 1)) {
 169                    noeud = Field.childNodes[n].firstChild;
 170                    if (noeud.title)
 171                      // cas de la rubrique, pas des auteurs
 172                        aff_selection_titre(noeud.firstChild.nodeValue, noeud.title, rac, nid);
 173                  }
 174                 },
 175                 img);
 176      }
 177      return false;
 178  }
 179  
 180  function lancer_recherche(champ, cible) {} // obsolete
 181  
 182  //
 183  // Cette fonction charge du contenu - dynamiquement - dans un 
 184  // Ajax
 185  
 186  function verifForm(racine) {
 187      if(!jQuery.browser.mozilla) return;
 188    racine = racine || document;
 189    jQuery("input.forml,input.formo,textarea.forml,textarea.formo",racine)
 190    .each(function(){
 191        var jField = jQuery(this);
 192      var w = jField.css('width');
 193      if(!w || w == '100%') {
 194        jField.css('width','95%');
 195      } else {
 196              w = parseInt(w)-
 197        (parseInt(jField.css("borderLeftWidth"))+parseInt(jField.css("borderRightWidth"))+
 198          parseInt(jField.css("paddingLeft"))+parseInt(jField.css("paddingRight")));
 199              jField.width(w+'px');
 200      }
 201    });
 202  }
 203  
 204  // Si Ajax est disponible, cette fonction l'utilise pour envoyer la requete.
 205  // Si le premier argument n'est pas une url, ce doit etre un formulaire.
 206  // Le deuxieme argument doit etre l'ID d'un noeud qu'on animera pendant Ajax.
 207  // Le troisieme, optionnel, est la fonction traitant la réponse.
 208  // La fonction par defaut affecte le noeud ci-dessus avec la reponse Ajax.
 209  // En cas de formulaire, AjaxSqueeze retourne False pour empecher son envoi
 210  // Le cas True ne devrait pas se produire car le cookie spip_accepte_ajax
 211  // a du anticiper la situation.
 212  // Toutefois il y toujours un coup de retard dans la pose d'un cookie:
 213  // eviter de se loger avec redirection vers un telle page
 214  
 215  function AjaxSqueeze(trig, id, callback, event)
 216  {
 217      var target = jQuery('#'+id);
 218  
 219      // position du demandeur dans le DOM (le donner direct serait mieux)
 220      if (!target.size()) {return true;}
 221  
 222      // animation immediate pour faire patienter
 223      if (typeof ajax_image_searching != 'undefined') {
 224          target.prepend(ajax_image_searching);
 225      }
 226      return !AjaxSqueezeNode(trig, target, callback, event);
 227  }
 228  
 229  // La fonction qui fait vraiment le travail decrit ci-dessus.
 230  // Son premier argument est deja le noeud du DOM
 231  // et son resultat booleen est inverse ce qui lui permet de retourner 
 232  // le gestionnaire Ajax comme valeur non fausse
 233  
 234  function AjaxSqueezeNode(trig, target, f, event)
 235  {
 236      var i, callback;
 237  
 238      // retour std si pas precise: affecter ce noeud avec ce retour
 239      if (!f) {
 240      callback = function() { verifForm(this);}
 241    }
 242      else {
 243      callback = function(res,status) { f.apply(this,[res,status]); verifForm(this);}
 244    }
 245      valid = (typeof event != 'object') ? false : ((event.altKey || event.metaKey) == true);
 246  
 247    valid = false;
 248    if (typeof(window['_OUTILS_DEVELOPPEURS']) != 'undefined')
 249          valid = (typeof event != 'object') ? false : ((event.altKey || event.metaKey) == true);
 250  
 251      if (typeof(trig) == 'string') {
 252          i = trig.split('?');
 253          trig = i[0] +'?var_ajaxcharset=utf-8&' + i[1];
 254          // laisser le choix de la touche enfoncee au moment du clic
 255          // car beaucoup de systemes en prenne une a leur usage
 256          if  (valid) {
 257             window.open(trig+'&transformer_xml=valider_xml');
 258          }
 259          res = jQuery.ajax({"url":trig,
 260             "complete":function(r,s){AjaxRet(r,s,target, callback)}});
 261          return res;
 262          
 263      }
 264      
 265      if(valid) {
 266          //open a blank window
 267          var doc = window.open("","valider").document;
 268          //create a document to enable receiving the result of the ajax post
 269          doc.open();
 270          doc.close();
 271          //store the searching image to be able to remove it after the post completes 
 272          var searching_img = $(">:first",target);
 273          //set the element receiving the ajax post
 274          target = doc.body;
 275      }
 276      
 277      jQuery(trig).ajaxSubmit({"target":target,
 278                      "after":function(res,status){
 279          if(valid) searching_img.remove();
 280          if(status=='error') return this.html('Erreur HTTP');
 281          callback(res,status);
 282      },
 283              "before":function (vars){
 284               vars.push({"name":"var_ajaxcharset","value":"utf-8"});
 285               if (valid)
 286                  vars.push({"name":"transformer_xml","value":"valider_xml"});
 287               return true;
 288                    }});
 289      return true; 
 290  }
 291  
 292  function AjaxRet(res,status, target, callback)
 293  {
 294      if (res.aborted) return;
 295      if (status=='error') return jQuery(target).html('HTTP Error');
 296      
 297    if (this.evalScripts)
 298          // Inject the HTML into all the matched elements
 299          jQuery(target).html(res.responseText)
 300            // Execute all the scripts inside of the newly-injected HTML
 301            .evalScripts()
 302            // Execute callback
 303            .each( callback, [res.responseText, status] );
 304          //callback(res,status);
 305    else // jQuery v1.1.4
 306          jQuery(target).html(res.responseText).each( callback, [res.responseText, status] );
 307  }
 308  
 309  
 310  // Comme AjaxSqueeze, 
 311  // mais avec un cache sur le noeud et un cache sur la reponse
 312  // et une memorisation des greffes en attente afin de les abandonner
 313  // (utile surtout a la frappe interactive au clavier)
 314  // De plus, la fonction optionnelle n'a pas besoin de greffer la reponse.
 315  
 316  function charger_id_url(myUrl, myField, jjscript, event) 
 317  {
 318      var Field = findObj_forcer(myField);
 319      if (!Field) return true;
 320  
 321      if (!myUrl) {
 322          jQuery(Field).empty();
 323          retour_id_url(Field, jjscript);
 324          return true; // url vide, c'est un self complet
 325      } else  return charger_node_url(myUrl, Field, jjscript, findObj_forcer('img_' + myField), event);
 326  }
 327  
 328  // La suite
 329  
 330  function charger_node_url(myUrl, Field, jjscript, img, event) 
 331  {
 332      // disponible en cache ?
 333      if (url_chargee[myUrl]) {
 334              var el = jQuery(Field).html(url_chargee[myUrl])[0];
 335              retour_id_url(el, jjscript);
 336              triggerAjaxLoad(el);
 337              return false; 
 338        } else {
 339          if (img) img.style.visibility = "visible";
 340          if (xhr_actifs[Field]) { xhr_actifs[Field].aborted = true;xhr_actifs[Field].abort(); }
 341          xhr_actifs[Field] = AjaxSqueezeNode(myUrl,
 342                  Field,
 343                  function (r) {
 344                      xhr_actifs[Field] = undefined;
 345                      if (img) img.style.visibility = "hidden";
 346                      url_chargee[myUrl] = r;
 347                      retour_id_url(Field, jjscript);
 348                              },
 349                  event);
 350          return false;
 351      }
 352  }
 353  
 354  function retour_id_url(Field, jjscript)
 355  {
 356      jQuery(Field).css({'visibility':'visible','display':'block'});
 357      if (jjscript) jjscript();
 358  }
 359  
 360  function charger_node_url_si_vide(url, noeud, gifanime, jjscript,event) {
 361  
 362      if  (noeud.style.display !='none') {
 363          noeud.style.display='none';}
 364      else {if (noeud.innerHTML != "") {
 365          noeud.style.visibility = "visible";
 366          noeud.style.display = "block";
 367      } else {
 368          charger_node_url(url, noeud,'',gifanime,event);
 369            }
 370      }
 371    return false;
 372  }
 373  
 374  function charger_id_url_si_vide (myUrl, myField, jjscript, event) {
 375      var Field = findObj_forcer(myField); // selects the given element
 376      if (!Field) return;
 377  
 378      if (Field.innerHTML == "") {
 379          charger_id_url(myUrl, myField, jjscript, event) 
 380      }
 381      else {
 382          Field.style.visibility = "visible";
 383          Field.style.display = "block";
 384      }
 385  }
 386  


Généré le : Wed Nov 21 10:20:27 2007 par Balluche grâce à PHPXref 0.7
  Clicky Web Analytics