PageSourceSearch

https://f1-photo.com/Ressources/Javascripts/The%20Cahier%20Archive.js

js f1-photo.com collected 2026-10-02 08:21:36 UTC 12,114 bytes, 162 lines download raw bytes

1n=navigator;nua=n.userAgent;if((nua.indexOf("Safari")!=-1)&&(navigator.userAgent.match(/AppleWebKit\/(\d+)/)[1]<525)){exit}if(window.location.hash){window.location.href=window.location.hash.substring(1)}window.dhtmlHistory.create({toJSON:function(a){return Object.toJSON(a)},fromJSON:function(a){return a.evalJSON()}});function dynamic_history_change(a){if(window.location.hash){ajax_link(decodeURI(a))}else{window.location=window.location}}function createCookie(c,d,e){if(e){var b=new Date();b.setTime(b.getTime()+(e*24*60*60*1000));var a="; expires="+b.toGMTString()}else{var a=""}document.cookie=c+"="+d+a+"; path=/"}function readCookie(b){var e=b+"=";var a=document.cookie.split(";");for(var d=0;d<a.length;d++){var f=a[d];while(f.charAt(0)==" "){f=f.substring(1,f.length)}if(f.indexOf(e)==0){return f.substring(e.length,f.length)}}return null}function eraseCookie(a){createCookie(a,"",-1)}Event.observe(window,"load",function(){redraw();preload()});function redraw(){var a=$("page");var b=a.style.display;a.style.display="none";a.style.display=b}Event.observe(window,"dom:loaded",function(){dhtmlHistory.initialize();dhtmlHistory.addListener(dynamic_history_change)});function intra_link(a){new Effect.ScrollTo(a,{duration:0.4})}function quicksearch_onfocus(a){Element.extend(a);if(a.value=="Search photos"){a.value="";a.removeClassName("tip")}}function quicksearch_onblur(a){Element.extend(a);if(a.value==""){a.value="Search photos";a.addClassName("tip")}}function photocart_product_size(a){new Ajax.InPlaceCollectionEditor(a,"/photocart/size",{collection:["Small poster (12x18″) — $48.90","Medium poster (16x24″) — $65.90","Large poster (20x30″) — $81.90","Extra large poster (30x45″) — $122.90","Large canvas (20x30″) — $245.90","Extra large canvas (30x45″) — $368.90"],ajaxOptions:{method:"post"},okControl:"button",cancelControl:"button",okText:"ok",cancelText:"cancel",submitOnBlur:"true",formClassName:"photocart-product-size-form",highlightcolor:"#5c665d",highlightendcolor:"#454c45"})}var closedInfoText="+ show tags...";var openedInfoText="― hide tags...";function photoMoreInfo_onclick(a){Element.extend(a);if(a.innerHTML==closedInfoText){openMoreInfo(a)}else{if(a.innerHTML==openedInfoText){closeMoreInfo(a)}}}var infoBoxOpenedCookie="infoBoxOpened";function openMoreInfo(a){Element.extend(a);a.innerHTML=openedInfoText;new Effect.BlindDown(a.next(".photo-infoBox"),{duration:0.4});createCookie(infoBoxOpenedCookie,"true",90)}function closeMoreInfo(a){Element.extend(a);a.innerHTML=closedInfoText;new Effect.BlindUp(a.next(".photo-infoBox"),{duration:0.4});createCookie(infoBoxOpenedCookie,"false",90)}function initializeInfoBox(){opened=(readCookie(infoBoxOpenedCookie)=="true");infoBoxControls=$$(".photo-infoBoxControl");infoBoxControls.each(function(a){if(opened){a.next(".photo-infoBox").show();a.innerHTML=openedInfoText}else{a.next(".photo-infoBox").hide();a.innerHTML=closedInfoText}})}function set_slideshow(a){a.index=0;a.preload=new Array(a.elements.length);document.onload=slideshow(a)}
2// The slideshow works by resizing and fading in and out 3 canvases (image
3// elements):
4// - A canvas for the current photo
5// - A canvas for the next photo
6// - A canvas for giving a size to the whole slideshow
7
8function slideshow(parameters) {
9	var current_index = parameters.index;
10	var next_index    = (current_index+1) % parameters.elements.length;
11	var current_element = parameters.elements[current_index];
12	var next_element    = parameters.elements[next_index];
13
14	//—————————————————————
15	// Load the first image
16
17	if (parameters.preload[current_index] == null) {
18		parameters.preload[current_index] = new Image();
19		parameters.preload[current_index].src = current_element.source;
20	}
21
22	//————————————————————————————————————
23	// Preload the next image if necessary
24
25	if (parameters.preload[next_index] == null) {
26		// Preload the next image if necessary
27		parameters.preload[next_index] = new Image();
28		parameters.preload[next_index].src = next_element.source;
29	}
30
31	//————————————————————————————————————
32	// Query the different elements to use
33
34	var base        = document.getElementById(parameters.base);
35	var canvas0     = document.getElementById("home-spotlight-slideshow-canvas0");
36	var canvas1     = document.getElementById("home-spotlight-slideshow-canvas1");
37	var size_canvas = document.getElementById("home-spotlight-slideshow-size-canvas");
38
39	//———————————————————————————————————————————————————————————————
40	// First time initialization; the base element is not yet present
41
42	if (base == null) {
43		setTimeout(function() {slideshow(parameters);}, parameters.period * 1000);
44		return;
45	}
46
47	//———————————————————
48	// Set the hyper-link
49
50	base.href = next_element.link;
51
52	//—————————————————————————————————
53	// Initialize canvases if necessary
54
55	if (!canvas0) {
56		canvas0 = base.appendChild(document.createElement('div'));
57		canvas0.id = "home-spotlight-slideshow-canvas0";
58		canvas0.style.backgroundRepeat = "no-repeat";
59		canvas0.style.backgroundSize   = "cover";
60	}
61
62	if (!canvas1) {
63		canvas1 = base.appendChild(document.createElement('div'));
64		canvas1.id = "home-spotlight-slideshow-canvas1";
65		canvas1.style.backgroundRepeat = "no-repeat";
66		canvas1.style.backgroundSize   = "cover";
67	}
68
69	if (!size_canvas) {
70		images = base.getElementsByTagName("img")
71		if (images.length == 0) {
72			size_canvas = base.appendChild(new Image());
73		} else {
74			size_canvas = images[0];
75		}
76		size_canvas.id  = "home-spotlight-slideshow-size-canvas";
77		size_canvas.src = current_element.source;
78	}
79
80	//——————————————
81	// Find canvases
82
83	if (!parameters.canvas_index) {
84		parameters.canvas_index = 0;
85	}
86
87	var current_canvas_index = parameters.canvas_index;
88	var next_canvas_index    = (current_canvas_index+1) % 2;
89
90	var current_canvas;
91	var    next_canvas;
92	if (current_canvas_index == 0) {
93		current_canvas = canvas0;
94		next_canvas    = canvas1;
95	} else {
96		current_canvas = canvas1;
97		next_canvas    = canvas0;
98	}
99
100	var current_canvas_image = parameters.preload[current_index];
101	var next_canvas_image = parameters.preload[next_index];
102
103	//—————————————————————————————
104	// Set the image URLs as needed
105
106	current_canvas.style.backgroundImage = "url(\'" + current_element.source + "\')";
107	next_canvas.style.backgroundImage = "url(\'" + next_element.source + "\')";
108
109	//—————————————————————————————————
110	// Initialize canvases if necessary
111
112	current_width  = base.clientWidth;
113	current_height = Math.floor(current_width * current_canvas_image.naturalHeight / current_canvas_image.naturalWidth);
114
115	next_width  = base.clientWidth;
116	next_height = Math.floor(next_width * next_canvas_image.naturalHeight / next_canvas_image.naturalWidth);
117
118	current_canvas.style.position = "absolute";
119	current_canvas.style.top      = "0px";
120	current_canvas.style.left     = "0px";
121	current_canvas.style.width    = current_width.toString()  + "px";
122	current_canvas.style.height   = current_height.toString() + "px";
123
124	next_canvas.style.position = "absolute";
125	next_canvas.style.top      = "0px";
126	next_canvas.style.left     = "0px";
127	next_canvas.style.width    = current_width.toString()  + "px";
128	next_canvas.style.height   = current_height.toString() + "px";
129
130	size_canvas.style.visibility = "hidden";
131	size_canvas.style.width      = current_width.toString()  + "px";
132	size_canvas.style.height     = current_height.toString() + "px";
133	size_canvas.src = next_element.source;
134
135	new Effect.Parallel([new Effect.Appear(next_canvas,  {sync: true}),
136	                     new Effect.Fade(current_canvas, {sync: true}),
137	                     new Effect.Morph(   size_canvas, {style: {height: next_height.toString() + "px"}, sync: true}),
138	                     new Effect.Morph(current_canvas, {style: {height: next_height.toString() + "px"}, sync: true}),
139	                     new Effect.Morph(   next_canvas, {style: {height: next_height.toString() + "px"}, sync: true})],
140	                    {duration: 0.7,
141	                     afterFinish: function () {
142	                                  	size_canvas.style.width  = "100%";
143	                                  	size_canvas.style.height = "auto";
144	                                  	current_canvas.style.width  = "100%";
145	                                  	current_canvas.style.height = "100%";
146	                                  	next_canvas.style.width  = "100%";
147	                                  	next_canvas.style.height = "100%";
148	                                  }
149	                    });
150
151	//——————————————————————————
152	// Increment loop parameters
153
154	parameters.canvas_index = next_canvas_index;
155	parameters.index = next_index;
156
157	//——————————————————————————————————————————————
158	// Setup a callback to itself for next iteration
159
160	setTimeout(function() {slideshow(parameters);}, parameters.period * 1000);
161}
162var cacheSize=30;var cache=new Array();var cacheKeys=new Array();var cacheIndex=0;function put_cache(a,b){cacheIndex=cacheIndex+1%cacheSize;cacheKeys[a]=cacheIndex;cache[cacheIndex]=b}function get_cache(a){return cache[cacheKeys[a]]}function preload(){$$("#page .preload").each(function(a){var b=new Ajax.Updater("preload-buffer",a.href+"/Ajax",{method:"get",evalScripts:true,onComplete:function(c){if(b.success()){put_cache(a.pathname,$("preload-buffer").innerHTML)}}})})}Ajax.Request.prototype.abort=function(){this.transport.onreadystatechange=Prototype.emptyFunction;this.transport.abort();Ajax.activeRequestCount--};var ajaxUpdater=null;
162function ajax_link(a){if(a==""){return}if(ajaxUpdater!=null){ajaxUpdater.abort();ajaxUpdater=null;clear_ajax_queue();Effect.Fade("ajax-loading-indicator",{duration:0.3,queue:{scope:"ajax-loading-indicator"}})}var b=get_cache(encodeURI(a));if(b){$("content").innerHTML=b;initializeInfoBox();dhtmlHistory.add(encodeURI(a));clear_ajax_queue();Effect.Fade("ajax-loading-indicator",{duration:0.3,queue:{scope:"ajax-loading-indicator"}});preload()}else{ajaxUpdater=new Ajax.Updater("content",a+"/Ajax",{method:"get",evalScripts:true,onLoading:function(c){clear_ajax_queue();Effect.Appear("ajax-loading-indicator",{duration:1.5,delay:1,queue:{scope:"ajax-loading-indicator"}})},onSuccess:function(c){clear_ajax_queue();Effect.Fade("ajax-loading-indicator",{duration:0.3,queue:{scope:"ajax-loading-indicator"}});dhtmlHistory.add(encodeURI(a))},onComplete:function(c){clear_ajax_queue();Effect.Fade("ajax-loading-indicator",{duration:0.3,queue:{scope:"ajax-loading-indicator"}});preload()}})}}function clear_ajax_queue(){var a=Effect.Queues.get("ajax-loading-indicator");a.each(function(b){b.cancel()})}function purchase_link(b){Element.extend(b);var a=b.next(".buyBox");Element.extend(a);if(b.hasClassName("popup-buyBox-link_selected")){hidePopupBuyBox(b,a)}else{showPopupBuyBox(b,a)}}function hidePopupBuyBox(b,a){Element.extend(b);Element.extend(a);a.hide();b.removeClassName("popup-buyBox-link_selected");a.removeClassName("popup-buyBox-buyBox_selected");a.stopObserving("click",propagationStopper)}function showPopupBuyBox(b,a){Element.extend(b);Element.extend(a);a.show();b.addClassName("popup-buyBox-link_selected");a.addClassName("popup-buyBox-buyBox_selected");var c={link:b,box:a};c.boundHider=hider.bindAsEventListener(c);$(document).observe("click",c.boundHider);a.observe("click",propagationStopper)}function hider(a){hidePopupBuyBox(this.link,this.box);$(document).stopObserving("click",this.boundHider)}function propagationStopper(a){a.stopPropagation()};

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.