Valider a0441ad0 rédigé par cerdic's avatar cerdic
Parcourir les fichiers

La syntaxe et le fonctionnement d'ajaxReload sont revus.

- on prepare la gestion de l'historique de navigation par l'API HTML5 :
Tous les blocs ajax portent par defaut une donnee data-origin qui contient l'url initiale du bloc.
Des que le bloc a ete modifie en ajax, il contient egalement data-url qui donne la derniere url utilisee pour charger le bloc

- on generalise et enrichi la syntaxe :
ajaxReload('ajaxid')
recharge un bloc ou des blocs a partir de leur ajax-id

ajaxReload('ajaxid',{callback:function(){...}})
appele une callback a la fin du chargement

ajaxReload('ajaxid',{args:{arg1:value1,arg2:value2...}})
ajoute les arguments &arg1=value1&arg2=value2 a l'url du bloc avant son rechargement

Enfin, une syntaxe jQuery permet de declencher le rechargement d'un bloc a partir de n'importe quel element contenu, le conteneur le plus petit etant recharge

- par ailleurs la callback s'applique sur le bloc recharge (sur son conteneur div.ajaxbloc pour etre precis)


Cela permet in fine de faire quelque chose du genre :

$("#doc25,#doc24").animateRemove().delay(100).ajaxReload({
callback:function(){
$('.item',this).animateAppend();
}})
parent 73bf5665
Chargement en cours
Chargement en cours
Chargement en cours
Chargement en cours
+3 −2
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -2157,10 +2157,11 @@ function encoder_contexte_ajax($c,$form='', $emboite=NULL, $ajaxid='') {
	
	if ($emboite === NULL) return $c;
	if (!trim($emboite)) return "";
	$r = "";
	// toujours encoder l'url source dans le bloc ajax
	$r = self();
	$r = ' data-origin="'.$r.'"';
	if ($ajaxid AND is_string($ajaxid)){
		$c .= ' ajax-id-'.$ajaxid;
	  $r = ' data-url="'.self().'"';
	}
	return "<div class='ajaxbloc env-$c'$r>\n$emboite</div><!-- ajaxbloc -->\n";
}
+36 −8
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -277,17 +277,23 @@ jQuery.fn.ajaxbloc = function() {
				  success: function(c){
					  on_pagination(c,href);
					  preloaded_urls[url] = c;
					  if (typeof callback == "function")
					    callback();
					  if (callback && typeof callback == "function")
					    callback.apply(blocfrag);
				  }
			  });
		  }
	  }
	  jQuery(this).not('.reloaded').bind('reload',function(event, callback){
			var href = $(this).attr('data-url');
	  jQuery(this).not('.reloaded').bind('ajaxReload',function(event, options){
		  var href = $(this).attr('data-url') || $(this).attr('data-origin');
		  if (href && typeof href != undefined){
			  options == options || {};
			  var callback=options.callback || null;
			  var args = options.args || {};
			  for (var key in args)
	        href = parametre_url(href,key,args[key]);
			  var url = makeAjaxUrl(href);
			  loadAjax(url, href, true, callback);
			  event.stopPropagation();
		  }
	  }).addClass('reloaded');

@@ -339,12 +345,34 @@ jQuery.fn.ajaxbloc = function() {
/**
 * Recharger un bloc ajax pour le mettre a jour
 * ajaxid est l'id passe en argument de INCLURE{ajax=ajaxid}
 * la fonction callback optionnelle est executee apres rechargement du bloc
 * options permet de definir une callbackk ou de passer des arguments a l'url
 * au rechargement
 * ajaxReload peut s'utiliser en passant un id :
 * ajaxReload('xx');
 * ou sur un objet jQuery
 * jQuery(this).ajaxReload();
 * Dans ce dernier cas, le plus petit conteneur ajax est recharge
 *
 * @param string ajaxid
 * @param function callback
 * @param object options
 *  callback : callback after reloading
 *  args : {arg:value,...} to pass tu the url
 */
function ajaxReload(ajaxid, options){
	jQuery('div.ajaxbloc.ajax-id-'+ajaxid).ajaxReload(options);
}

/**
 * Variante jQuery de ajaxReload pour la syntaxe
 * jQuery(..).ajaxReload();
 * cf doc ci-dessus
 * @param options
 */
function ajaxReload(ajaxid, callback){
	jQuery('div.ajaxbloc.ajax-id-'+ajaxid).trigger('reload', [callback]);
jQuery.fn.ajaxReload = function(options){
	options = options||{};
	// just trigg the event, as it will bubble up the DOM
	jQuery(this).trigger('ajaxReload', [options]);
	return this; // don't break the chain
}

/**