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

Noisettes AJAX :

<INCLURE{fond=fond/ajax}{fond_ajax=mon_fond}{id_truc=xx}..>
inclut la noisette en ajaxant automatiquement tous les liens cibles par la variable js ajaxbloc_selecteur
par defaut celle ci cible les '.pagination a,a.ajax'
le hit ajax relance automatiquement le calcul de la noisette en restaurant son #ENV, et en y ajoutant les parametre en url
Attention, la noisette est inclue dans un div !!
le bloc recharge passe en opacite 50% et a la class loading pendant le chargement

homogeneisation avec les formulaires dynamiques ajax
parent 7ff607b0
Chargement en cours
Chargement en cours
Chargement en cours
Chargement en cours
+4 −6
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
<div id='#ENV{ajaxid}'>
<INCLURE{fond=formulaires/#ENV{form}}{env}>
</div>
<script type='text/javascript' src='#CHEMIN{javascript/layer.js}'></script>
<script type='text/javascript'>if (window.jQuery){
jQuery('document').ready(function(){
	jQuery('div#[(#ENV{ajaxid})] form').formulaire_dyn_ajax('#ENV{ajaxid}');
});
}
<script type='text/javascript'>
var ajaxform_#ENV{ajaxid} = function() {if (window.jQuery) jQuery('div#[(#ENV{ajaxid})] form',this).formulaire_dyn_ajax('#ENV{ajaxid}');}
jQuery('document').ready(ajaxform_#ENV{ajaxid});
onAjaxLoad(ajaxform_#ENV{ajaxid});
</script>
 No newline at end of file
+64 −0
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -55,3 +55,67 @@ if(!jQuery.load_handlers) {
	};

}

// animation du bloc cible pour faire patienter
jQuery.fn.animeajax = function(end) {
	this.children().css('opacity', 0.5);
	if (typeof ajax_image_searching != 'undefined')
		this.prepend(ajax_image_searching);
	return this; // don't break the chain
}

// rechargement ajax d'un formulaire dynamique implemente par formulaires/forumlaire_.html
jQuery.fn.formulaire_dyn_ajax = function(target) {
	this
	.not('.noajax')
	.prepend("<"+"input type='hidden' name='var_ajax' value='1' /"+">")
	.ajaxForm({"target":'#'+target,
			"beforeSubmit":
			function(){
				$('#'+target).animeajax().addClass('loading');
			},
			"success":
			function(){
				$('#'+target).removeClass('loading');
			}
	})
	.addClass('.noajax');	// previent qu'on n'ajaxera pas deux fois le meme formulaire en cas de ajaxload
	return this; // don't break the chain
}

// rechargement ajax d'une noisette implementee par fond/ajax.html
// avec mise en cache des url
var preloaded_urls = {};
var ajaxbloc_selecteur;
jQuery.fn.ajaxbloc = function() {
		var blocfrag = this;
		var ajax_env = $('input[@name=var_ajax_env]',this).eq(0).attr('value');
		if (!ajax_env || ajax_env==undefined) return;
		var ajax_cle = $('input[@name=var_ajax_cle]',this).eq(0).attr('value');
		if (!ajax_cle || ajax_cle==undefined) return;
		if (ajaxbloc_selecteur==undefined)
			ajaxbloc_selecteur = '.pagination a,a.ajax';
		$(ajaxbloc_selecteur,this).not('.noajax').each(function(){
			var url = this.href.split('#');
			url[0] += (url[0].indexOf("?")>0 ? '&':'?')+'var_ajax=1&var_ajax_env='+ajax_env+'&var_ajax_cle='+ajax_cle;
			if ($(this).is('.preload') && !preloaded_urls[url[0]]) {
				$.ajax({"url":url[0],"success":function(r){preloaded_urls[url[0]]=r;}});
			}
			$(this).click(function(){
				$(blocfrag).animeajax().addClass('loading');
				var on_pagination = function(contenu) {
					preloaded_urls[url[0]] = contenu;
					$(blocfrag).html(preloaded_urls[url[0]]);
					$(blocfrag).removeClass('loading');
					window.location.hash = url[1];
				}
				if(preloaded_urls[url[0]]) {
					on_pagination(preloaded_urls[url[0]]);
					triggerAjaxLoad(blocfrag);
				} else {
					$.ajax({"url":url[0],"success":on_pagination});
				}
				return false;
			});
		}).addClass('.noajax'); // previent qu'on ajax pas deux fois le meme lien
};
 No newline at end of file
+0 −24
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -269,30 +269,6 @@ function verifForm(racine) {
	});
}


// animation de la cible pour faire patienter
jQuery.fn.animeajax = function(end) {
	this.children().css('opacity', 0.5);
	if (typeof ajax_image_searching != 'undefined')
		this.prepend(ajax_image_searching);
}

jQuery.fn.formulaire_dyn_ajax = function(target) {
	this
	.not('.noajax')
	.prepend("<"+"input type='hidden' name='var_ajax' value='1' /"+">")
	.ajaxForm({"target":'#'+target,
			"success":
			function(){
				$('#'+target+' form').formulaire_dyn_ajax(target);
			},
			"beforeSubmit":
			function(){
				$('#'+target).animeajax();
			}
	});	
}

// Si Ajax est disponible, cette fonction l'utilise pour envoyer la requete.
// Si le premier argument n'est pas une url, ce doit etre un formulaire.
// Le deuxieme argument doit etre l'ID d'un noeud qu'on animera pendant Ajax.
+23 −1
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -124,6 +124,28 @@ function public_assembler_dist($fond, $connect='') {
		}
	}
	
	// traiter les appels de bloc ajax
	if (_request('var_ajax')
	 AND ($args = _request('var_ajax_env'))
	 AND ($cle = _request('var_ajax_cle')) ){ 
		 if ((include_spip('inc/securiser_action'))
		 AND ($cle == calculer_cle_action($args))) {
			$args = unserialize(base64_decode($args));
			if ($fond = $args['fond_ajax']){
				include_spip('public/parametrer');
				$contexte = calculer_contexte();
				$contexte = array_merge($contexte,$args);
				$page = evaluer_fond($fond,$contexte);
				include_spip('inc/actions');
				ajax_retour($page['texte']);
				exit();
			}
		}
		include_spip('inc/actions');
		ajax_retour('signature ajax incorrecte');
		exit();
	}
	
	// si signature de petition, l'enregistrer avant d'afficher la page
	// afin que celle-ci contienne la signature
	if (isset($_GET['var_confirm'])) {