PageSourceSearch

https://tharaux.fr/plugins/auto/image_responsive/v11.3.0/javascript/image_responsive.js

js tharaux.fr collected 2026-10-02 21:56:00 UTC 15,362 bytes, 506 lines download raw bytes

1function _lstest(){
2    var test = 'test';
3    try {
4        localStorage.setItem(test, test);
5        localStorage.removeItem(test);
6        return true;
7    } catch(e) {
8        return false;
9    }
10}
11
12function _image_responsive_test_webp_reel (){
13	// Méthode synchrone - mais Firefox ne détecte pas correctement (tant pis pour l'instant…)
14    var elem = document.createElement('canvas');
15
16    if (!!(elem.getContext && elem.getContext('2d'))) {
17        // was able or not to get WebP representation
18        if (elem.toDataURL('image/webp').indexOf('data:image/webp') == 0) {
19        	if (_lstest()) localStorage.setItem("_image_responsive_test_webp", "oui");
20        	return 1;
21        } else {
22		  var img = new Image();
23		  img.onload = function() {if (_lstest()) localStorage.setItem("_image_responsive_test_webp", "oui") };
24		  img.onerror = function() {if (_lstest()) localStorage.setItem("_image_responsive_test_webp", "non")};
25		  img.src = "data:image/webp;base64,UklGRjIAAABXRUJQVlA4ICYAAACyAgCdASoCAAEALmk0mk0iIiIiIgBoSygABc6zbAAA/v56QAAAAA==";
26        }
27    }
28
29    // very old browser like IE 8, canvas not supported
30    return false;
31}
32var _image_responsive_test_webp_val = "init";
33function _image_responsive_test_webp (){
34	if (_image_responsive_test_webp_val == "init") {
35		if ( _lstest() && localStorage.getItem("_image_responsive_test_webp")) {
36			if (localStorage.getItem("_image_responsive_test_webp") == "oui") _image_responsive_test_webp_val = true;
37			else _image_responsive_test_webp_val = false;
38		} else {
39			_image_responsive_test_webp_val = _image_responsive_test_webp_reel();
40		}
41	}
42	return _image_responsive_test_webp_val;
43}
44
45
46
47function _image_responsive_test_avif_reel (){
48	// Méthode synchrone - mais Firefox ne détecte pas correctement (tant pis pour l'instant…)
49    var elem = document.createElement('canvas');
50
51    if (!!(elem.getContext && elem.getContext('2d'))) {
52        // was able or not to get avif representation
53        if (elem.toDataURL('image/avif').indexOf('data:image/avif') == 0) {
54        	if (_lstest()) localStorage.setItem("_image_responsive_test_avif", "oui");
55        	return 1;
56        } else {
57		  var img = new Image();
58		  img.onload = function() {if (_lstest()) localStorage.setItem("_image_responsive_test_avif", "oui") };
59		  img.onerror = function() {if (_lstest()) localStorage.setItem("_image_responsive_test_avif", "non")};
60		  img.src = "data:;base64,AAAAIGZ0eXBhdmlmAAAAAGF2aWZtaWYxbWlhZk1BMUEAAADybWV0YQAAAAAAAAAoaGRscgAAAAAAAAAAcGljdAAAAAAAAAAAAAAAAGxpYmF2aWYAAAAADnBpdG0AAAAAAAEAAAAeaWxvYwAAAABEAAABAAEAAAABAAABGgAAABwAAAAoaWluZgAAAAAAAQAAABppbmZlAgAAAAABAABhdjAxQ29sb3IAAAAAamlwcnAAAABLaXBjbwAAABRpc3BlAAAAAAAAAAEAAAABAAAAEHBpeGkAAAAAAwgICAAAAAxhdjFDgSAAAAAAABNjb2xybmNseAABAA0ABoAAAAAXaXBtYQAAAAAAAAABAAEEAQKDBAAAACRtZGF0EgAKBzgABpAQ0GkyDx/wZ///+LPw4ITv2bKbYA==";
61        }
62    }
63    return false;
64}
65var _image_responsive_test_avif_val = "init";
66function _image_responsive_test_avif (){
67	if (_image_responsive_test_avif_val == "init") {
68		if ( _lstest() && localStorage.getItem("_image_responsive_test_avif")) {
69			if (localStorage.getItem("_image_responsive_test_avif") == "oui") _image_responsive_test_avif_val = true;
70			else _image_responsive_test_avif_val = false;
71		} else {
72			_image_responsive_test_avif_val = _image_responsive_test_avif_reel();
73		}
74	}
75	return _image_responsive_test_avif_val;
76}
77
78function charger_url_image_responsive(this_img) {
79	var dPR = window.devicePixelRatio;
80		var src = this_img.attr("data-src");
81		var l = this_img.attr("data-l");
82		var h = this_img.attr("data-h");
83
84		if (this_img.hasClass("image_responsive_v")) {
85			var vertical = true;
86			var dim= parseInt(this_img.parent().height());
87		} else {
88			var vertical = false;
89			var dim= parseInt(this_img.parent().width());
90		}
91		
92		var forcer_zoom = this_img.attr("data-zoom-responsive");
93		if (forcer_zoom) dim = dim * forcer_zoom;
94		
95		var tailles = this_img.attr("data-tailles");
96		
97		var numdim = [];
98		if (tailles) {
99			var w_max = 0;
100			var taille_max = 0;
101			var t = $.parseJSON(tailles.replace(/\\"/g, '"'));
102			var changer_w = 1;
103			
104			var i = 0;
105			
106			$.each(t, function (index, value) {
107				i++;
108				value = parseInt(value);
109				numdim[value] = i;
110				//console.log(value + " " + dim + " " + changer_w);
111				if (changer_w == 1) w_max = value;
112				if (value >= dim) changer_w = 0;
113				//numdim[w_max] = i;
114				if (value >= taille_max) taille_max = value;
115
116			});			
117			 //console.log ("Wmax: "+w_max);
118			if (w_max > 0) dim = w_max;
119		}
120			// console.log ("W: "+dim);
121
122			// console.log ("L: "+l);
123			
124		var autorisees = this_img.attr("data-autorisees");					
125		if (autorisees) {
126			autorisees = $.parseJSON(autorisees.replace(/\\"/g, '"'));		
127		}
128		var autorisees_webp = this_img.attr("data-autorisees_webp");					
129		if (autorisees_webp) {
130			if (_image_responsive_test_webp()) autorisees = $.parseJSON(autorisees_webp.replace(/\\"/g, '"'));		
131		}
132
133		// Si l'image est trop petite, c'est pas la peine de demander trop grand…
134		if (vertical && parseInt(dim) > parseInt(h)) {
135			dim = h;
136			dpr = false;
137		} else if (parseInt(dim) > parseInt(l)) {
138			dim = l;
139			dpr = false;
140		}
141
142				
143		if (dim == 0) {
144		
145		} else {
146				if(dPR && dPR > 1) {
147					// si l'image d'origine n'est pas nettement plus grande que l'image demandée, 
148					// ne pas passer dPR, sinon on récupère image de même taille mais trop compressée
149					if (vertical && h < 1.5*dim) dPR = false;
150					else if (l < 1.5*dim) dPR = false;
151					// forcer à 2
152					else dPR = 2;
153				} else {
154					dPR = false;
155				}
156				if (autorisees && autorisees[dim]) {
157					if (dPR < 1.5) url_img = autorisees[dim][1];
158					else url_img = autorisees[dim][2];
159				}
160				else {				
161					if (htactif) {
162						racine = src.substr(0, src.length-4);
163						terminaison = src.substr(src.length-3, 3);
164						var url_img = racine+"-resp"+dim;
165						if (vertical) url_img = url_img + "v";
166						if (dPR) url_img = url_img + "-"+dPR;
167						url_img = url_img + "."+terminaison;
168						if (_image_responsive_test_webp()) url_img = url_img + ".webp";
169					} else {
170						var url_img = "index.php?action=image_responsive&img="+src+"&taille="+dim;
171						if (vertical) url_img = url_img + "v";
172						if (dPR) url_img = url_img + "&dpr="+dPR;
173					}
174				}
175			this_img.attr("src", url_img).height("").width("").removeAttr("data-top");
176		}
177
178}
179
180function charger_url_background_responsive(this_img) {
181	var dPR = window.devicePixelRatio;
182		vertical = false;
183
184		var dim_l= parseInt(this_img.width());
185		var dim_h = parseInt(this_img.height());
186
187		if (dim_l > dim_h) {	
188			var mode = "i";
189			var src = this_img.attr("data-italien-src");
190			var l = this_img.attr("data-italien-l");
191			var h = this_img.attr("data-italien-h");
192		} else {
193			var mode = "p";
194			var src = this_img.attr("data-portrait-src");
195			var l = this_img.attr("data-portrait-l");
196			var h = this_img.attr("data-portrait-h");
197		}
198		var mtime = this_img.attr("data-mtime");
199
200		
201		if ( (dim_l/dim_h) > (l/h) ) { /* fenetre plus large que l'image */
202			dim = dim_l;
203		} else {
204			dim = dim_h *l / h;
205			var pourcent = "auto 100%";
206		}
207				
208		var tailles = this_img.attr("data-tailles");
209							
210		if (tailles) {
211			var w_max = 0;
212			var t = $.parseJSON(tailles.replace(/\\"/g, '"'));
213			var changer_w = 1;
214			
215			$.each(t, function (index, value) {
216				value = parseInt(value);
217				//console.log(value + " " + d + " " + changer_w);
218				if (changer_w == 1) w_max = value;
219				if (value >= dim) changer_w = 0;
220			});
221			// console.log ("Wmax: "+w_max);
222			if (w_max > 0) dim = w_max;
223		}
224
225
226
227		// Si l'image est trop petite, c'est pas la peine de demander trop grand…
228		if (vertical && parseInt(dim) > parseInt(h)) {
229			dim = h;
230			dpr = false;
231		} else if (parseInt(dim) > parseInt(l)) {
232			dim = l;
233			dpr = false;
234		}
235
236			//console.log ("Wapres: "+dim);
237
238
239		if (dim == 0) {
240		
241		} else {
242			if(dPR && dPR > 1) {
243				// si l'image d'origine n'est pas nettement plus grande que l'image demandée, 
244				// ne pas passer dPR, sinon on récupère image de même taille mais trop compressée
245				if (vertical && h < 1.5*dim) dPR = false;
246				else if (l < 1.5*dim) dPR = false;
247				// forcer à 2
248				else dPR = 2;
249			} else {
250				dPR = false;
251			}
252
253
254			var autorisees = this_img.attr("data-autorisees");					
255			if (autorisees) {
256				autorisees = $.parseJSON(autorisees.replace(/\\"/g, '"'));		
257			}
258			var autorisees_webp = this_img.attr("data-autorisees_webp");					
259			if (autorisees_webp) {
260				if (_image_responsive_test_webp()) autorisees = $.parseJSON(autorisees_webp.replace(/\\"/g, '"'));		
261			}
262			dim = Math.round(dim);
263								
264			if (autorisees && autorisees[dim] && autorisees[dim][mode]) {
265				if (dPR < 1.5) url_img = autorisees[dim][mode][1];
266				else url_img = autorisees[dim][mode][2];
267			} else {
268				if (htactif) {
269					racine = src.substr(0, src.length-4);
270					terminaison = src.substr(src.length-3, 3);
271					var url_img = racine+"-resp"+dim;
272					if (vertical) url_img = url_img + "v";
273					if (dPR) url_img = url_img + "-"+dPR;
274					url_img = url_img + "."+terminaison;
275					if (mtime) url_img = url_img + "?" + mtime;
276
277				} else {
278					var url_img = "index.php?action=image_responsive&img="+src+"&taille="+dim;
279					if (vertical) url_img = url_img + "v";
280					if (dPR) url_img = url_img + "&dpr="+dPR;
281					if (mtime) url_img = url_img + "&mtime="+mtime;
282				}
283			}
284
285
286			if (this_img.attr("data-background-actif") != url_img) {
287				this_img.attr("data-background-actif", url_img);
288				this_img.css("background-image", "url("+url_img+")");
289			}
290		}
291
292}
293
294function charger_url_image_responsive_svg(this_img) {
295	var dPR = window.devicePixelRatio;
296		var src = this_img.attr("data-src");
297		var l = this_img.attr("data-l");
298		var h = this_img.attr("data-h");
299
300		var cl = this_img.attr("class");
301
302		if (cl.indexOf("image_responsive_svg_v") > 0) {
303			var vertical = true;
304			var dim= parseInt(this_img.parent().height());
305
306			//console.log("Dimension v: "+dim);
307
308		} else {
309			var vertical = false;
310			var dim= parseInt(this_img.parent().width());
311			//console.log("Dimension h: "+dim);
312		}
313		
314		
315		var forcer_zoom = this_img.attr("data-zoom-responsive");
316		if (forcer_zoom) dim = dim * forcer_zoom;
317		
318		
319		
320		var tailles = this_img.attr("data-tailles");
321		
322		if (tailles) {
323			var w_max = 0;
324			var t = $.parseJSON(tailles.replace(/\\"/g, '"'));
325			var changer_w = 1;
326			
327			$.each(t, function (index, value) {
328				value = parseInt(value);
329				// console.log(value + " " + dim + " " + changer_w);
330				if (changer_w == 1) w_max = value;
331				if (value >= dim) changer_w = 0;
332			});
333			// console.log ("Wmax: "+w_max);
334			if (w_max > 0) dim = w_max;
335		}
336			// console.log ("W: "+dim);
337
338			// console.log ("L: "+l);
339			
340		var autorisees = this_img.attr("data-autorisees");					
341		if (autorisees) {
342			autorisees = $.parseJSON(autorisees.replace(/\\"/g, '"'));		
343		}
344
345
346		// Si l'image est trop petite, c'est pas la peine de demander trop grand…
347		if (vertical && parseInt(dim) > parseInt(h)) {
348			dim = h;
349			dpr = false;
350		} else if (parseInt(dim) > parseInt(l)) {
351			dim = l;
352			dpr = false;
353		}
354
355			//console.log ("Wapres: "+dim);
356		
357				
358		if (dim == 0) {
359		
360		} else {
361		
362				if(dPR && dPR > 1) {
363					// si l'image d'origine n'est pas nettement plus grande que l'image demandée, 
364					// ne pas passer dPR, sinon on récupère image de même taille mais trop compressée
365					if (vertical && h < 1.5*dim) dPR = false;
366					else if (l < 1.5*dim) dPR = false;
367					// forcer à 2
368					else dPR = 2;
369					
370				} else {
371					dPR = false;
372				}
373								
374				if (autorisees && autorisees[dim]) {
375					if (dPR < 1.5) url_img = autorisees[dim][1];
376					else url_img = autorisees[dim][2];
377				}
378				else {				
379					if (htactif) {
380						racine = src.substr(0, src.length-4);
381						terminaison = src.substr(src.length-3, 3);
382						var url_img = racine+"-resp"+dim;
383						if (vertical) url_img = url_img + "v";
384						if (dPR) url_img = url_img + "-"+dPR;
385						url_img = url_img + "."+terminaison;
386					} else {
387						var url_img = "index.php?action=image_responsive&img="+src+"&taille="+dim;
388						if (vertical) url_img = url_img + "v";
389						if (dPR) url_img = url_img + "&dpr="+dPR;
390					}
391				}
392				
393			this_img.attr("xlink:href", url_img).height("").width("").removeAttr("data-top");
394		}
395
396
397}
398
399function calculer_top_image_responsive() {
400	// Calculer le "top" des images lazy
401	$(".lazy, [data-lazy]").each(function() {
402		_calculer_top_image_responsive($(this));
403	});
404	
405	charger_image_responsive();
406}
407
408function _calculer_top_image_responsive(this_img) {
409	var offset = this_img.offset().top;
410	this_img.attr("data-top", offset).addClass("lazy");
411}
412
413// valeur du scrollTop que l'on peut forcer par un outil externe (notamment skrollr)
414var scrollT = false;
415
416function charger_image_lazy() {
417	if (scrollT) var sTop = scrollT;
418	else var sTop = $(window).scrollTop();
419	
420	var hauteur = $(window).height();
421	
422	var limite_haut = sTop - 1.5*hauteur;
423	
424	var limite_bas = sTop + 1.5*hauteur;
425
426	$(".image_responsive.lazy[data-top]").each(function() {
427		this_img = $(this);
428		var h = this_img.attr("data-top");
429		if (h <= limite_bas && h >= limite_haut) {
430			charger_url_image_responsive(this_img);
431		} else {// sinon remettre l'image d'origine (rien ou basse def)
432			this_img.attr("src", this_img.attr("data-src-lazy"));
433		}
434	});	
435	$(".image_responsive_svg.lazy[data-top]").each(function() {
436		this_img = $(this);
437		var h = this_img.attr("data-top");
438		if (h <= limite_bas && h >= limite_haut) {
439			charger_url_image_responsive_svg(this_img);
440		} else {// sinon remettre l'image d'origine (rien ou basse def)
441			this_img.attr("src", this_img.attr("data-src-lazy"));
442		}
443	});	
444	$("[data-responsive=background].lazy[data-top]").each(function() {
445		this_img = $(this);
446		var h = this_img.attr("data-top");
447		if (h <= limite_bas && h >= limite_haut) charger_url_background_responsive(this_img);
448	});	
449}
450
451
452function _charger_image_responsive () {
453
454	$("[data-zoom-responsive]").each(function() {
455		var forcer_zoom = $(this).attr("data-zoom-responsive");
456		if (forcer_zoom > 1) $(this).find(".image_responsive").attr("data-zoom-responsive", forcer_zoom);
457	});
458
459	// Remplacer les URL non lazy
460	// Cacher l'ensemble puis tout réafficher, pour éviter un repaint pour chaque image
461	var t = $(".image_responsive:not('.lazy'):not('.avec_picturefill')");
462	if (t.length > 20) t.hide();
463	t.each(function() {
464		charger_url_image_responsive($(this));
465	});
466	if (t.length > 20) t.show();
467	
468	$(".image_responsive_svg:not('.lazy')").each(function() {
469		charger_url_image_responsive_svg($(this));
470	});
471	charger_image_lazy();
472
473	$("[data-responsive=background]:not('.lazy')").each(function() {
474			charger_url_background_responsive($(this));
475	});
476}
477
478$(document).ready(calculer_top_image_responsive);
479$(window).smartresize(calculer_top_image_responsive);
480$(window).on("load",calculer_top_image_responsive);
481$(document).on("ajaxComplete", calculer_top_image_responsive);
482
483
484
485$(window).on("scroll", charger_image_responsive);
486	
487var didScroll_image_responsive = false
488
489function charger_image_responsive() {
490	didScroll_image_responsive = true;
491}
492
493function render_image_responsive() {
494    if(didScroll_image_responsive) {
495		didScroll_image_responsive = false;
496		_charger_image_responsive()
497    }
498}
499
500(function animloop_image_responsive(){
501  requestAnimationFrame(animloop_image_responsive);
502  render_image_responsive();
503})();
504
505
506

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.