From 889e47f5dd923e565ab6be21be550b791f9478fe Mon Sep 17 00:00:00 2001 From: renato <renato@rezo.net> Date: Tue, 19 Sep 2006 15:42:58 +0000 Subject: [PATCH] A js function "onAjaxLoad(callback)" to apply a callback function to the content returned by any ajax operation in private area. The callback will receive the node on which the ajax operation has injected code. --- ecrire/img_pack/layer.js | 55 ++++++++++++++++++++++++++-------------- 1 file changed, 36 insertions(+), 19 deletions(-) diff --git a/ecrire/img_pack/layer.js b/ecrire/img_pack/layer.js index 0ef9effca7..b35a886b69 100644 --- a/ecrire/img_pack/layer.js +++ b/ecrire/img_pack/layer.js @@ -1,5 +1,6 @@ var memo_obj = new Array(); var url_chargee = new Array(); +var load_handlers = new Array(); function findObj_test_forcer(n, forcer) { var p,i,x; @@ -154,6 +155,21 @@ function createXmlHttp() { return new ActiveXObject("Microsoft.XMLHTTP"); } +// +// Add a function to the list of those to be executed on ajax load complete +// +function onAjaxLoad(f) { + load_handlers.push(f); +} + +// +// Call the functions that have been added to onAjaxLoad +// +function triggerAjaxLoad(root) { + for ( var i = 0; i < load_handlers.length; i++ ) + load_handlers[i].apply( root ); +} + function ajah(method, url, flux, rappel) { var xhr = createXmlHttp(); @@ -206,16 +222,17 @@ function AjaxSqueeze(trig, id, f) function AjaxSqueezeNode(trig, noeud, f) { - var i, s, g; + var i, s, g, callback; var u = ''; - + // retour std si pas precise: affecter ce noeud avec ce retour - if (!f) f = function(r) { noeud.innerHTML = r;} - + if (!f) callback = function(r) { noeud.innerHTML = r; triggerAjaxLoad(noeud);} + else callback = function(r) { f(r); triggerAjaxLoad(noeud);} + if (typeof(trig) == 'string') { i = trig.split('?'); trig = i[0] +'?var_ajaxcharset=utf-8&' + i[1]; - return !ajah('GET', trig, null, f); + return !ajah('GET', trig, null, callback); } for (i=0;i < trig.elements.length;i++) { @@ -233,7 +250,7 @@ function AjaxSqueezeNode(trig, noeud, f) return !ajah('POST', // ou 'GET' s , // s + '?'+ u, u, // null, - f); + callback); } @@ -253,20 +270,20 @@ function charger_id_url(myUrl, myField, jjscript) var r = url_chargee[myUrl]; // disponible en cache ? if (r) { - retour_id_url(r, Field, jjscript); - return false; + retour_id_url(r, Field, jjscript); + triggerAjaxLoad(Field); + return false; } else { - var img = findObj_forcer('img_' + myField); - if (img) img.style.visibility = "visible"; - return AjaxSqueezeNode(myUrl, - '', - function (r) { - if (img) img.style.visibility = "hidden"; - url_chargee[myUrl] = r; - retour_id_url(r, Field, jjscript); - } - ) - } + var img = findObj_forcer('img_' + myField); + if (img) img.style.visibility = "visible"; + return AjaxSqueezeNode(myUrl, + '', + function (r) { + if (img) img.style.visibility = "hidden"; + url_chargee[myUrl] = r; + retour_id_url(r, Field, jjscript); + }) + } } } -- GitLab