Subversion Repositories eFlore/Applications.eflore-consultation

Rev

Rev 1209 | Rev 1244 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 1209 Rev 1243
Line 45... Line 45...
45
		titre.id = 'titre-' + this.id;
45
		titre.id = 'titre-' + this.id;
Line 46... Line 46...
46
		
46
		
47
		var lienTitre = $(module).children('.titre').children('a');
47
		var lienTitre = $(module).children('.titre').children('a');
48
		lienTitre.attr('href','#'+this.id);
48
		lienTitre.attr('href','#'+this.id);
49
		lienTitre.click(function() {
-
 
50
			if (objet.onglet.is(':visible')) {
49
		lienTitre.click(function() {
51
				$('#zone_onglets').tabs('select', '#ui-tabs-'+objet.id);
-
 
52
			}
50
			$('#zone_onglets').tabs( "option", "active", (objet.id -1));
53
			return false;
51
			return false;
54
		});
52
		});
55
		lienTitre.hover(function() {
53
		lienTitre.hover(function() {
56
			if (!objet.ongletEstAffiche()) {
54
			if (!objet.ongletEstAffiche()) {
Line 109... Line 107...
109
		$(this.portlet).find(".titreOnglet").toggleClass("pasDeCurseur");
107
		$(this.portlet).find(".titreOnglet").toggleClass("pasDeCurseur");
110
		$(this.portlet).find(".contenu").toggle();
108
		$(this.portlet).find(".contenu").toggle();
111
	}
109
	}
112
}
110
}
Line 113... Line -...
113
 
-
 
114
function selectionnerOngletSynthese() {
-
 
115
	// Suppression des classes css qui mettent en surbrillance l'onglet actif
-
 
116
	$('#zone_onglets > ul > li').removeClass('ui-tabs-selected');
-
 
117
	$('#zone_onglets > ul > li').removeClass('ui-state-active');
-
 
118
	
-
 
119
	// application de ces même classes css à l'onglet "acceuil" qui est un onglet "articifiel"
-
 
120
	$('#onglet_synthese').addClass('ui-tabs-selected');
-
 
121
	$('#onglet_synthese').addClass('ui-state-active'); 
-
 
122
		
-
 
123
	$('a.lien_retour_synthese').hide();
-
 
124
}
-
 
125
 
-
 
126
 
-
 
127
function deselectionnerOngletSynthese() {
-
 
128
	// Suppression des classes css qui mettent en surbrillance l'onglet actif sur l'onglet acceuil
-
 
129
	$('#onglet_synthese').removeClass('ui-tabs-selected');
-
 
130
	$('#onglet_synthese').removeClass('ui-state-active'); 
-
 
131
	$('a.lien_retour_synthese').show();
-
 
132
}
-
 
133
 
111
 
134
function getUrlVars() {
112
function getUrlVars() {
135
    var vars = [], hash;
113
    var vars = [], hash;
136
    var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');
114
    var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');
137
    for (var i = 0; i < hashes.length; i++) {
115
    for (var i = 0; i < hashes.length; i++) {
Line 140... Line 118...
140
        vars[hash[0]] = hash[1];
118
        vars[hash[0]] = hash[1];
141
    }
119
    }
142
    return vars;
120
    return vars;
143
}
121
}
Line 144... Line -...
144
 
-
 
145
function selectionnerOngletParDefautOuEnregistre() {
-
 
146
	// Si un onglet est précisé dans l'url
-
 
147
	// Récupération de l'adresse de l'onglet sélectionné
-
 
148
	var urlVars = getUrlVars();
-
 
149
	if (urlVars['onglet'] == undefined) { 	
-
 
150
		// Si pas d'onglet enregistré, selection du premier par défaut
-
 
151
		// Si c'est l'onglet fiche, on le sélectionne artificiellement
-
 
152
		selectionnerOngletSynthese();
-
 
153
		$('.ui-tabs-panel').hide();
-
 
154
		$('#synthese').show();
-
 
155
	} else {
-
 
156
		ongletSyntheseCharge = false;
-
 
157
	}
-
 
158
	var cookieOnglet = obtenirOngletCookiePourPage();
-
 
159
	
-
 
160
	// On réouvre le dernier onglet consulté, à voir si on garde ça en prod, en tout cas c'est 
-
 
161
	// pratique pendant le développement
-
 
162
	if (cookieOnglet && cookieOnglet != 'ui-tabs-1') {
-
 
163
		$('#zone_onglets').tabs("select", '#'+cookieOnglet);
-
 
164
	} else {
-
 
165
		selectionnerOngletSynthese();
-
 
166
		$('.ui-tabs-panel').hide();
-
 
167
		$('#synthese').show();
-
 
168
	}
-
 
169
}
-
 
170
 
122
 
171
function afficherOngletsPourNiveau() {
123
function afficherOngletsPourNiveau() {
172
	/* affiche les onglets par default selon niveau*/
124
	/* affiche les onglets par default selon niveau*/
173
	for (indice in tableauOnglets) {
125
	for (indice in tableauOnglets) {
174
		var ongletEnCours = tableauOnglets[indice];
126
		var ongletEnCours = tableauOnglets[indice];
Line 189... Line 141...
189
			nbOngletsInvisibles++;
141
			nbOngletsInvisibles++;
190
		}
142
		}
191
	}
143
	}
192
}
144
}
Line 193... Line -...
193
 
-
 
194
function surSelectionOnglet(event,ui) {
-
 
195
	// Récupération de l'adresse de l'onglet sélectionné
-
 
196
	var url = ui.tab.href;
-
 
197
	// le fragment suivant le # dans l'url contient l'id de l'onglet
-
 
198
	var fragmentsAncre = url.split('#');
-
 
199
	fancyboxinitialise = false;
-
 
200
	
-
 
201
	if (fragmentsAncre.length > 0) {
-
 
202
		var ancre = fragmentsAncre[fragmentsAncre.length - 1];
-
 
203
		// Si c'est un onglet correspondant à un projet, on cache la synthèse et le plugin
-
 
204
		// chargera son contenu dans l'espace approprié
-
 
205
		if (ancre != 'ui-tabs-1') {
-
 
206
			var panel = $(ui.panel);
-
 
207
		    if (panel.is(":empty")) {
-
 
208
		        panel.append("<div class='tab-chargement'>Chargement des informations...</div>")
-
 
209
		    }
-
 
210
 
-
 
211
			deselectionnerOngletSynthese();
-
 
212
			$('.ui-tabs-panel').show();
-
 
213
			$('#zone_contenu_fiche').hide();
-
 
214
			
-
 
215
			enregistrerOngletCookiePourPage(ancre);
-
 
216
		} else {
-
 
217
			if (ongletSyntheseCharge) {
-
 
218
				// Si c'est l'onglet fiche, on le sélectionne artificiellement
-
 
219
				selectionnerOngletSynthese();
-
 
220
				$('.ui-tabs-panel').hide();
-
 
221
				$('#zone_contenu_fiche').show();
-
 
222
				
-
 
223
				enregistrerOngletCookiePourPage(ancre);
-
 
224
				return false;
-
 
225
			} else {
-
 
226
				window.location = url;
-
 
227
			}
-
 
228
		}
-
 
229
	}
-
 
230
	return true;
-
 
231
}
-
 
232
 
145
 
233
function obtenirOngletCookiePourPage() {
146
function obtenirOngletCookiePourPage() {
234
	var urlVars = getUrlVars();
147
	var urlVars = getUrlVars();
235
	var id_cookie = 'onglet_eflore';
148
	var id_cookie = 'onglet_eflore';
236
	if (urlVars['num_nom']) {
149
	if (urlVars['num_nom']) {
Line 259... Line 172...
259
		var titre = $(this).children('h3').text();
172
		var titre = $(this).children('h3').text();
260
		module.titre = titre;
173
		module.titre = titre;
Line 261... Line 174...
261
		
174
		
262
		tableauOnglets[identifiantOnglet] = module;
175
		tableauOnglets[identifiantOnglet] = module;
-
 
176
	});
-
 
177
}
-
 
178
 
-
 
179
// remplace des liens directs vers les onglets par des liens permettant de ne charger
-
 
180
// que le contenu de l'onglet (pour le plugin tab)
263
	});
181
function remplacerUrlsOnglets() {
264
	$(".lien-onglet").each(function() {
182
	$(".lien-onglet").each(function() {
265
		var urlOnglet = $(this).attr('href');
183
		var urlOnglet = $(this).attr('href');
266
		var urlVars = urlOnglet.slice(urlOnglet.indexOf('?') + 1);
184
		var urlVars = urlOnglet.slice(urlOnglet.indexOf('?') + 1);
267
		urlBase = base_url_application_onglets+"?"+urlVars;
185
		urlBase = base_url_application_onglets+"?"+urlVars;
268
		urlOnglet = urlBase.replace('action=fiche','action=onglet');
186
		urlOnglet = urlBase.replace('action=fiche','action=onglet');
269
		$(this).attr('href', urlOnglet);
187
		$(this).attr('href', urlOnglet);
270
	});
188
	});
Line -... Line 189...
-
 
189
}
-
 
190
 
-
 
191
ongletsInitialises = false;
-
 
192
numOngletEnCours = null;
-
 
193
nePasEmpilerUrl = false;
-
 
194
function initialiserOnglets() {
-
 
195
	// replacement du chargement de toute la page par un lien vers uniquement le contenu de l'onglet
-
 
196
	// pour le module tab qui charge les url désignée dans les liens des tabs
-
 
197
	remplacerUrlsOnglets();
-
 
198
	
-
 
199
	// analyse de l'onglet désigné comme selectionné par défaut
-
 
200
	// (on peut accéder directement à un onglet précis à travers un param url)
-
 
201
	var tabSelectionneDefaut = $('#onglets li.ui-state-active');
-
 
202
	var indexTabSelectionneDefaut = $("#onglets li").index($(tabSelectionneDefaut));
-
 
203
	
-
 
204
	$('#zone_onglets').tabs({
-
 
205
		create: function( event, ui ) {
-
 
206
			// par défaut, le contenu déjà chargé est dans une autre zone
-
 
207
			// on le déplace donc comme s'il avait été chargé par le plugin tab
-
 
208
			var contenuZoneFiche = $("#zone_contenu_fiche > div").detach();
-
 
209
			contenuZoneFiche.appendTo('#ui-tabs-'+(indexTabSelectionneDefaut+1));
-
 
210
			$("#zone_contenu_fiche").hide();
-
 
211
			$('#ui-tabs-'+(indexTabSelectionneDefaut+1)).show();
-
 
212
		},
-
 
213
		active: indexTabSelectionneDefaut ,
-
 
214
		beforeLoad: function( event, ui ) {
-
 
215
			// il est inutile de recharger un onglet déjà chargé (les onglets déjà chargé sont l'onglet par défaut
-
 
216
			// et (lors du chargement de la fiche), l'onglet déjà chargé par php
-
 
217
			// +1 car les tabs sont zéros indexées
-
 
218
			var idPanelCharge = ui.tab.index()+1;
-
 
219
			var panelCharge = $('#ui-tabs-'+idPanelCharge);
-
 
220
			
-
 
221
			numOngletEnCours = idPanelCharge;
-
 
222
 
-
 
223
			if(!panelCharge.is(':empty') || indexTabSelectionneDefaut+1 == idPanelCharge) {
-
 
224
				// si le panneau est déjà chargé on peut mettre à jour l'url immédiatement
-
 
225
				var ongletNomCode = panelCharge.children(".onglet_contenu").attr("id");
-
 
226
				if(!nePasEmpilerUrl) {
-
 
227
					mettreAJourUrl(permalienNumNom+"-"+ongletNomCode, ongletNomCode);
-
 
228
					nePasEmpilerUrl = false;
-
 
229
				}
-
 
230
				panelCharge.show();
-
 
231
				return false;
-
 
232
			} else {
-
 
233
				// si l'onglet n'est pas chargé alors on affiche le message de chargement 
-
 
234
				// pendant que le plugin s'occupe du reste
-
 
235
				fancyboxinitialise = false;
-
 
236
				var panel = $('#ui-tabs-'+idPanelCharge);
-
 
237
				panel.append("<div class='tab-chargement'>Chargement des informations...</div>");
-
 
238
				return true;
-
 
239
			}
-
 
240
		},
-
 
241
		load: function(event, ui) {
-
 
242
			// sur les panneaux qui ne sont pas encore chargés, on doit attendre la fin
-
 
243
			// du chargement pour mettre à jour l'url (à cause de la récupération de l'id sur les enfants)
-
 
244
			var ongletNomCode = ui.panel.children(".onglet_contenu").attr("id");
-
 
245
			mettreAJourUrl(permalienNumNom+"-"+ongletNomCode, ongletNomCode);
-
 
246
		}
-
 
247
	});
-
 
248
	
-
 
249
	$(window).bind('popstate', function(event) {
-
 
250
		if(!!event.originalEvent.state) {
-
 
251
			nePasEmpilerUrl = true;
-
 
252
			$("#onglets > li > a[rel='"+event.originalEvent.state+"']").click();
-
 
253
		} else {
-
 
254
			window.location = window.location.href;
-
 
255
		}
-
 
256
	});
271
}
257
}
272
 
258
 
273
//+----------------------------------------------------------------------------------------------------------+
259
//+----------------------------------------------------------------------------------------------------------+
274
// Wikini Flora
260
// Wikini Flora
Line 446... Line 432...
446
		toolbar: 'no', menubar: 'no', location: 'no', resizable: 'yes', scrollbars: 'yes', status: 'no'};
432
		toolbar: 'no', menubar: 'no', location: 'no', resizable: 'yes', scrollbars: 'yes', status: 'no'};
Line 447... Line 433...
447
 
433
 
448
var param_popup_Cel = {h: 750, w: 630, t: 100, l: 100, 
434
var param_popup_Cel = {h: 750, w: 630, t: 100, l: 100, 
Line 449... Line 435...
449
		toolbar: 'no', menubar: 'no', location: 'no', resizable: 'yes', scrollbars: 'yes', status: 'no'};
435
		toolbar: 'no', menubar: 'no', location: 'no', resizable: 'yes', scrollbars: 'yes', status: 'no'};
450
 
436
 
451
//Initialisation
437
//Initialisation (uniquement sur la présence de la div bloc-fiche, qui contient la fiche eflore)
452
$(document).ready(function() {
-
 
453
	lierModulesEtOnglets();
-
 
454
	
-
 
455
	/* mouvement des blocs */
-
 
456
	$(".colonne").sortable({
-
 
457
		connectWith: ".colonne",
-
 
458
		handle: $(".module").children('h3') // mouvement seulement sur les titres
438
$("#bloc-fiche").ready(function() {
459
	});
-
 
460
	
-
 
461
	$('#zone_onglets').tabs({
-
 
462
		select: function(event, ui) {	
-
 
463
			return surSelectionOnglet(event,ui)
-
 
464
		}
439
	initialiserOnglets();
465
	});
440
 
466
	// TODO : devrait être .on() à la place de live()
441
	// TODO : devrait être .on() à la place de live()
467
	$('.lien_popup').live('click',function(event) {
442
	$('.lien_popup').live('click',function(event) {
468
		event.preventDefault();
443
		event.preventDefault();
Line 477... Line 452...
477
		event.preventDefault();
452
		event.preventDefault();
478
		$.fancybox(this,{
453
		$.fancybox(this,{
479
			autoDimensions:true
454
			autoDimensions:true
480
		});
455
		});
481
	});
456
	});
482
	
457
		
483
	$('.lien_ouverture_onglet_parent').click(function(event) {
-
 
484
		event.preventDefault();
-
 
485
		$(this).parents(".module").find("a.titreOnglet").click();
-
 
486
	});
-
 
487
	
-
 
488
	$('.lien-image-cel').live('click', param_popup_Cel , ouvrirPopUpImg);
458
	$('.lien-image-cel').live('click', param_popup_Cel , ouvrirPopUpImg);
489
	$('.lien-image-coste').live('click', param_popup_Coste , ouvrirPopUpImg);
459
	$('.lien-image-coste').live('click', param_popup_Coste , ouvrirPopUpImg);
Line 490... Line 460...
490
	
460
	
491
	afficherOngletsPourNiveau();
-
 
492
	selectionnerOngletParDefautOuEnregistre();
-
 
493
	
-
 
494
	$('.ui-icon-close').click(function() {
-
 
495
		estOngletActif = $(this).parent().hasClass('ui-state-active');
-
 
496
		if (estOngletActif) {
-
 
497
			//L'onglet que l'on veut fermer est celui qui est ouvert, on va donc le masquer et afficher celui d'accueil
-
 
498
			$("#zone_onglets").tabs('select', 0);
-
 
499
		}
-
 
Line 500... Line 461...
500
	});
461
	afficherOngletsPourNiveau();
501
 
462
 
502
	gererEvenementsWiki();
-
 
Line 503... Line 463...
503
	gererEvenementsPliage();
463
	gererEvenementsWiki();
504
	gererClicIllustrationsFiche();
464
	gererEvenementsPliage();
505
	
465
	
506
	$('a.lien_retour_synthese').click(function(event) {
466
	$('a.lien_retour_synthese').click(function(event) {
Line 507... Line 467...
507
		$('#onglet_synthese a').click();
467
		$('#onglet_synthese a').click();
508
		event.preventDefault();
468
		event.preventDefault();
509
	});
469
	});
510
	
470
	
-
 
471
	$(window).resize(function() {
-
 
472
		redimensionnerOnglets();
-
 
473
	});
-
 
474
	redimensionnerOnglets();
-
 
475
	
-
 
476
	if($("#bloc-fiche").length > 0) {
-
 
477
		// initialisation de l'url avec l'onglet par défaut ou bien 
-
 
478
		// celui qui a été explicitement demandé
-
 
479
		mettreAJourUrl(permalienNumNom+"-"+onglet, onglet);
-
 
480
	}
-
 
481
});
-
 
482
 
-
 
483
$(document).one('ongletSyntheseCharge', function() {
-
 
484
	lierModulesEtOnglets();
-
 
485
	
-
 
486
	/* mouvement des blocs */
-
 
487
	$(".colonne").sortable({
-
 
488
		connectWith: ".colonne",
-
 
489
		handle: $(".module").children('h3') // mouvement seulement sur les titres
-
 
490
	});
-
 
491
	
-
 
492
	$('.lien_ouverture_onglet_parent').live('click', function(event) {
-
 
493
		event.preventDefault();
-
 
494
		$(this).parents(".module").find("a.titreOnglet").click();
511
	$(window).resize(function() {
495
	});
Line 512... Line 496...
512
		redimensionnerOnglets();
496
	
513
	});
497
	gererClicIllustrationsFiche();
514
	redimensionnerOnglets();
-
 
515
});
-
 
516
 
498
	gererEvenementsPliage();
517
// À la fin du chargement de l'onglet Illustrations
499
});
518
$(document).on('ongletIllustrationsCharge', function() {
500
 
519
	if (ongletIllustrationsCharge == false) {
501
// À la fin du chargement de l'onglet Illustrations
520
		ongletIllustrationsCharge = true;
502
$(document).one('ongletIllustrationsCharge', function() {
521
		$('a.lien-images-organes.fourni').live('click', afficherOngletOrgane);
-
 
522
		$('a.lien-grande-image-organe').live('click', afficherGrandeImageOrgane);
503
	$('a.lien-images-organes.fourni').live('click', afficherOngletOrgane);
Line 523... Line 504...
523
		// pour que la galerie soit ouverte par défaut sur le premier organe non vide
504
	$('a.lien-grande-image-organe').live('click', afficherGrandeImageOrgane);
524
		var premier = $('a.lien-images-organes.fourni').first().data('tag');
505
	// pour que la galerie soit ouverte par défaut sur le premier organe non vide
525
		afficherOngletOrgane(null, premier);
506
	var premier = $('a.lien-images-organes.fourni').first().data('tag');
Line 647... Line 628...
647
	tmp.write('<p style="height='+hauteur+'px;text-align:center;line-height='+hauteur+'px;"><img id="image_agrandie" height="'+hauteur+'" width="'+largeur+'" style="vertical-align:middle;" src="'+url+'" /></p>');
628
	tmp.write('<p style="height='+hauteur+'px;text-align:center;line-height='+hauteur+'px;"><img id="image_agrandie" height="'+hauteur+'" width="'+largeur+'" style="vertical-align:middle;" src="'+url+'" /></p>');
648
	tmp.write('</body></html>');
629
	tmp.write('</body></html>');
649
	tmp.close();
630
	tmp.close();
650
}
631
}
Line -... Line 632...
-
 
632
 
-
 
633
function mettreAJourUrl(nouvelleUrl, etat) {
-
 
634
	// javascript double negative trick
-
 
635
	// pour plus d'info http://stackoverflow.com/questions/4686583/can-someone-explain-this-double-negative-trick
-
 
636
	if (!!(window.history && window.history.pushState)) {
-
 
637
		var currentState = window.history.state;
-
 
638
		if (currentState != nouvelleUrl && !!etat) {
-
 
639
			window.history.pushState(etat, "", nouvelleUrl);
-
 
640
		}
-
 
641
	}
-
 
642
}
651
 
643
 
652
$(document).ajaxStop(function() {
644
$(document).ajaxStop(function() {
653
	gererChargementGraphiqueEcologie();
645
	gererChargementGraphiqueEcologie();
654
	gererAffichageLegendeEcologie();
646
	gererAffichageLegendeEcologie();
655
	if (document.implementation.hasFeature('http://www.w3.org/TR/SVG11/feature#BasicStructure', '1.1') == false) {
647
	if (document.implementation.hasFeature('http://www.w3.org/TR/SVG11/feature#BasicStructure', '1.1') == false) {