var memo_obj = new Array(); var url_chargee = new Array(); var xhr_actifs = {}; function findObj_test_forcer(n, forcer) { var p,i,x; // Voir si on n'a pas deja memorise cet element if (memo_obj[n] && !forcer) { return memo_obj[n]; } var d = document; if((p = n.indexOf("?"))>0 && parent.frames.length) { d = parent.frames[n.substring(p+1)].document; n = n.substring(0,p); } if(!(x = d[n]) && d.all) { x = d.all[n]; } for (i = 0; !x && ictrl:"+e.ctrlKey+"
charcode:"+e.charCode+"
keycode:"+e.keyCode+"
"); if (!e.charCode && e.keyCode == 119 /* F8, windows */ && !verifForm_clicked){ verifForm_clicked = true; jQuery(this).find('input[type=submit]') .click(); return false; } }).addClass('verifformok'); } // La fonction qui fait vraiment le travail decrit ci-dessus. // Son premier argument est deja le noeud du DOM // et son resultat booleen est inverse ce qui lui permet de retourner // le gestionnaire Ajax comme valeur non fausse function AjaxSqueezeNode(trig, target, f, event) { var i, callback; // retour std si pas precise: affecter ce noeud avec ce retour if (!f) { callback = function() { verifForm(this);} } else { callback = function(res,status) { f.apply(this,[res,status]); verifForm(this); } } valid = false; if (typeof(window['_OUTILS_DEVELOPPEURS']) != 'undefined'){ if (!(navigator.userAgent.toLowerCase().indexOf("firefox/1.0"))) valid = (typeof event == 'object') && (event.altKey || event.metaKey); } if (typeof(trig) == 'string') { // laisser le choix de la touche enfoncee au moment du clic // car beaucoup de systemes en prenne une a leur usage if (valid) { window.open(trig+'&transformer_xml=valider_xml'); } else { jQuery(target).animeajax(); } res = jQuery.ajax({ "url":trig, "complete": function(r,s) { AjaxRet(r,s,target, callback); } }); return res; } if(valid) { //open a blank window var doc = window.open("","valider").document; //create a document to enable receiving the result of the ajax post doc.open(); doc.close(); //set the element receiving the ajax post target = doc.body; } else { jQuery(target).animeajax(); } jQuery(trig).ajaxSubmit({ "target": target, "success": function(res,status) { if(status=='error') return this.html('Erreur HTTP'); callback.apply(this,[res,status]); }, "beforeSubmit":function (vars) { if (valid) vars.push({"name":"transformer_xml","value":"valider_xml"}); return true; } }); return true; } function AjaxRet(res,status, target, callback) { if (res.aborted) return; if (status=='error') return jQuery(target).html('HTTP Error'); // Inject the HTML into all the matched elements jQuery(target) .html(res.responseText) // Execute callback .each(callback, [res.responseText, status]); } // Comme AjaxSqueeze, // mais avec un cache sur le noeud et un cache sur la reponse // et une memorisation des greffes en attente afin de les abandonner // (utile surtout a la frappe interactive au clavier) // De plus, la fonction optionnelle n'a pas besoin de greffer la reponse. function charger_id_url(myUrl, myField, jjscript, event) { var Field = findObj_forcer(myField); if (!Field) return true; if (!myUrl) { jQuery(Field).empty(); retour_id_url(Field, jjscript); return true; // url vide, c'est un self complet } else return charger_node_url(myUrl, Field, jjscript, findObj_forcer('img_' + myField), event); } // La suite function charger_node_url(myUrl, Field, jjscript, img, event) { // disponible en cache ? if (url_chargee[myUrl]) { var el = jQuery(Field).html(url_chargee[myUrl])[0]; retour_id_url(el, jjscript); jQuery.spip.triggerAjaxLoad(el); return false; } else { if (img) img.style.visibility = "visible"; if (xhr_actifs[Field]) { xhr_actifs[Field].aborted = true;xhr_actifs[Field].abort(); } xhr_actifs[Field] = AjaxSqueezeNode(myUrl, Field, function (r) { xhr_actifs[Field] = undefined; if (img) img.style.visibility = "hidden"; url_chargee[myUrl] = r; retour_id_url(Field, jjscript); slide_horizontal($(Field).children().attr("id")+'_principal', $(Field).width() , $(Field).css("text-align")); }, event); return false; } } function retour_id_url(Field, jjscript) { jQuery(Field).css({'visibility':'visible','display':'block'}); if (jjscript) jjscript(); } function charger_node_url_si_vide(url, noeud, gifanime, jjscript,event) { if (noeud.style.display !='none') { noeud.style.display='none';} else { if (noeud.innerHTML != "") { noeud.style.visibility = "visible"; noeud.style.display = "block"; } else { charger_node_url(url, noeud,'',gifanime,event); } } return false; } // Lancer verifForm jQuery(document).ready(function(){ verifForm(); onAjaxLoad(verifForm); });