PageSourceSearch

https://daringfireball.net/js/js-global/FancyZoomHTML.js

js daringfireball.net collected 2026-09-24 06:05:33 UTC 12,250 bytes, 331 lines download raw bytes

1// FancyZoomHTML.js - v1.0
2// Used to draw necessary HTML elements for FancyZoom
3//
4// Copyright (c) 2008 Cabel Sasser / Panic Inc
5// All rights reserved.
6
7function insertZoomHTML() {
8
9	// All of this junk creates the three <div>'s used to hold the closebox, image, and zoom shadow.
10	
11	var inBody = document.getElementsByTagName("body").item(0);
12	
13	// WAIT SPINNER
14	
15	var inSpinbox = document.createElement("div");
16	inSpinbox.setAttribute('id', 'ZoomSpin');
17	inSpinbox.style.position = 'absolute';
18	inSpinbox.style.left = '10px';
19	inSpinbox.style.top = '10px';
20	inSpinbox.style.visibility = 'hidden';
21	inSpinbox.style.zIndex = '525';
22	inBody.insertBefore(inSpinbox, inBody.firstChild);
23	
24	var inSpinImage = document.createElement("img");
25	inSpinImage.setAttribute('id', 'SpinImage');
26	inSpinImage.setAttribute('src', zoomImagesURI+'zoom-spin-1.png');
27	inSpinbox.appendChild(inSpinImage);
28	
29	// ZOOM IMAGE
30	//
31	// <div id="ZoomBox">
32	//   <a href="javascript:zoomOut();"><img src="/images/spacer.gif" id="ZoomImage" border="0"></a> <!-- THE IMAGE -->
33	//   <div id="ZoomClose">
34	//     <a href="javascript:zoomOut();"><img src="/images/closebox.png" width="30" height="30" border="0"></a>
35	//   </div>
36	// </div>
37	
38	var inZoombox = document.createElement("div");
39	inZoombox.setAttribute('id', 'ZoomBox');
40	
41	inZoombox.style.position = 'absolute'; 
42	inZoombox.style.left = '10px';
43	inZoombox.style.top = '10px';
44	inZoombox.style.visibility = 'hidden';
45	inZoombox.style.zIndex = '499';
46	
47	inBody.insertBefore(inZoombox, inSpinbox.nextSibling);
48	
49	var inImage1 = document.createElement("img");
50	inImage1.onclick = function (event) { zoomOut(this, event); return false; };	
51	inImage1.setAttribute('src',zoomImagesURI+'spacer.gif');
52	inImage1.setAttribute('id','ZoomImage');
53	inImage1.setAttribute('border', '0');
54	// inImage1.setAttribute('onMouseOver', 'zoomMouseOver();')
55	// inImage1.setAttribute('onMouseOut', 'zoomMouseOut();')
56	
57	// This must be set first, so we can later test it using webkitBoxShadow.
58	inImage1.setAttribute('style', '-webkit-box-shadow: '+shadowSettings+'0.0)');
59	inImage1.style.display = 'block';
60	inImage1.style.width = '10px';
61	inImage1.style.height = '10px';
62	inImage1.style.cursor = 'pointer'; // -webkit-zoom-out?
63	inZoombox.appendChild(inImage1);
64
65	var inClosebox = document.createElement("div");
66	inClosebox.setAttribute('id', 'ZoomClose');
67	inClosebox.style.position = 'absolute';
68	
69	// In MSIE, we need to put the close box inside the image.
70	// It's 2008 and I'm having to do a browser detect? Sigh.
71	if (browserIsIE) {
72		inClosebox.style.left = '-1px';
73		inClosebox.style.top = '0px';	
74	} else {
75		inClosebox.style.left = '-15px';
76		inClosebox.style.top = '-15px';
77	}
78	
79	inClosebox.style.visibility = 'hidden';
80	inZoombox.appendChild(inClosebox);
81	
82	// Retina asset for close button. JG 2017-06-20
83	var closeButtonAsset;
84	switch(window.devicePixelRatio) {
85		case 2:
86			closeButtonAsset = "[email protected]";
87			break;
88		case 3:
89			closeButtonAsset = "[email protected]";
90			break;
91		default:
92			closeButtonAsset = "closebox.png";
93	}
94		
95	var inImage2 = document.createElement("img");
96	inImage2.onclick = function (event) { zoomOut(this, event); return false; };	
97	inImage2.setAttribute('src',zoomImagesURI+closeButtonAsset);		
98	inImage2.setAttribute('width','30');
99	inImage2.setAttribute('height','30');
100	inImage2.setAttribute('border','0');
101	inImage2.style.cursor = 'pointer';		
102	inClosebox.appendChild(inImage2);
103	
104	// SHADOW
105	// Only draw the table-based shadow if the programatic webkitBoxShadow fails!
106	// Also, don't draw it if we're IE -- it wouldn't look quite right anyway.
107	
108	if (! document.getElementById('ZoomImage').style.webkitBoxShadow && ! browserIsIE) {
109
110		// SHADOW BASE
111		
112		var inFixedBox = document.createElement("div");
113		inFixedBox.setAttribute('id', 'ShadowBox');
114		inFixedBox.style.position = 'absolute'; 
115		inFixedBox.style.left = '50px';
116		inFixedBox.style.top = '50px';
117		inFixedBox.style.width = '100px';
118		inFixedBox.style.height = '100px';
119		inFixedBox.style.visibility = 'hidden';
120		inFixedBox.style.zIndex = '498';
121		inBody.insertBefore(inFixedBox, inZoombox.nextSibling);	
122	
123		// SHADOW
124		// Now, the shadow table. Skip if not compatible, or irrevelant with -box-shadow.
125		
126		// <div id="ShadowBox"><table border="0" width="100%" height="100%" cellpadding="0" cellspacing="0"> X
127		//   <tr height="25">
128		//   <td width="27"><img src="/images/zoom-shadow1.png" width="27" height="25"></td>
129		//   <td background="/images/zoom-shadow2.png">&nbsp;</td>
130		//   <td width="27"><img src="/images/zoom-shadow3.png" width="27" height="25"></td>
131		//   </tr>
132		
133		var inShadowTable = document.createElement("table");
134		inShadowTable.setAttribute('border', '0');
135		inShadowTable.setAttribute('width', '100%');
136		inShadowTable.setAttribute('height', '100%');
137		inShadowTable.setAttribute('cellpadding', '0');
138		inShadowTable.setAttribute('cellspacing', '0');
139		inFixedBox.appendChild(inShadowTable);
140
141		var inShadowTbody = document.createElement("tbody");	// Needed for IE (for HTML4).
142		inShadowTable.appendChild(inShadowTbody);
143		
144		var inRow1 = document.createElement("tr");
145		inRow1.style.height = '25px';
146		inShadowTbody.appendChild(inRow1);
147		
148		var inCol1 = document.createElement("td");
149		inCol1.style.width = '27px';
150		inRow1.appendChild(inCol1);  
151		var inShadowImg1 = document.createElement("img");
152		inShadowImg1.setAttribute('src', zoomImagesURI+'zoom-shadow1.png');
153		inShadowImg1.setAttribute('width', '27');
154		inShadowImg1.setAttribute('height', '25');
155		inShadowImg1.style.display = 'block';
156		inCol1.appendChild(inShadowImg1);
157		
158		var inCol2 = document.createElement("td");
159		inCol2.setAttribute('background', zoomImagesURI+'zoom-shadow2.png');
160		inRow1.appendChild(inCol2);
161		// inCol2.innerHTML = '<img src=';
162		var inSpacer1 = document.createElement("img");
163		inSpacer1.setAttribute('src',zoomImagesURI+'spacer.gif');
164		inSpacer1.setAttribute('height', '1');
165		inSpacer1.setAttribute('width', '1');
166		inSpacer1.style.display = 'block';
167		inCol2.appendChild(inSpacer1);
168		
169		var inCol3 = document.createElement("td");
170		inCol3.style.width = '27px';
171		inRow1.appendChild(inCol3);  
172		var inShadowImg3 = document.createElement("img");
173		inShadowImg3.setAttribute('src', zoomImagesURI+'zoom-shadow3.png');
174		inShadowImg3.setAttribute('width', '27');
175		inShadowImg3.setAttribute('height', '25');
176		inShadowImg3.style.display = 'block';
177		inCol3.appendChild(inShadowImg3);
178		
179		//   <tr>
180		//   <td background="/images/zoom-shadow4.png">&nbsp;</td>
181		//   <td bgcolor="#ffffff">&nbsp;</td>
182		//   <td background="/images/zoom-shadow5.png">&nbsp;</td>
183		//   </tr>
184		
185		inRow2 = document.createElement("tr");
186		inShadowTbody.appendChild(inRow2);
187		
188		var inCol4 = document.createElement("td");
189		inCol4.setAttribute('background', zoomImagesURI+'zoom-shadow4.png');
190		inRow2.appendChild(inCol4);
191		// inCol4.innerHTML = '&nbsp;';
192		var inSpacer2 = document.createElement("img");
193		inSpacer2.setAttribute('src',zoomImagesURI+'spacer.gif');
194		inSpacer2.setAttribute('height', '1');
195		inSpacer2.setAttribute('width', '1');
196		inSpacer2.style.display = 'block';
197		inCol4.appendChild(inSpacer2);
198		
199		var inCol5 = document.createElement("td");
200		inCol5.setAttribute('bgcolor', '#ffffff');
201		inRow2.appendChild(inCol5);
202		// inCol5.innerHTML = '&nbsp;';
203		var inSpacer3 = document.createElement("img");
204		inSpacer3.setAttribute('src',zoomImagesURI+'spacer.gif');
205		inSpacer3.setAttribute('height', '1');
206		inSpacer3.setAttribute('width', '1');
207		inSpacer3.style.display = 'block';
208		inCol5.appendChild(inSpacer3);
209		
210		var inCol6 = document.createElement("td");
211		inCol6.setAttribute('background', zoomImagesURI+'zoom-shadow5.png');
212		inRow2.appendChild(inCol6);
213		// inCol6.innerHTML = '&nbsp;';
214		var inSpacer4 = document.createElement("img");
215		inSpacer4.setAttribute('src',zoomImagesURI+'spacer.gif');
216		inSpacer4.setAttribute('height', '1');
217		inSpacer4.setAttribute('width', '1');
218		inSpacer4.style.display = 'block';
219		inCol6.appendChild(inSpacer4);
220		
221		//   <tr height="26">
222		//   <td width="27"><img src="/images/zoom-shadow6.png" width="27" height="26"</td>
223		//   <td background="/images/zoom-shadow7.png">&nbsp;</td>
224		//   <td width="27"><img src="/images/zoom-shadow8.png" width="27" height="26"></td>
225		//   </tr>  
226		// </table>
227		
228		var inRow3 = document.createElement("tr");
229		inRow3.style.height = '26px';
230		inShadowTbody.appendChild(inRow3);
231		
232		var inCol7 = document.createElement("td");
233		inCol7.style.width = '27px';
234		inRow3.appendChild(inCol7);
235		var inShadowImg7 = document.createElement("img");
236		inShadowImg7.setAttribute('src', zoomImagesURI+'zoom-shadow6.png');
237		inShadowImg7.setAttribute('width', '27');
238		inShadowImg7.setAttribute('height', '26');
239		inShadowImg7.style.display = 'block';
240		inCol7.appendChild(inShadowImg7);
241		
242		var inCol8 = document.createElement("td");
243		inCol8.setAttribute('background', zoomImagesURI+'zoom-shadow7.png');
244		inRow3.appendChild(inCol8);  
245		// inCol8.innerHTML = '&nbsp;';
246		var inSpacer5 = document.createElement("img");
247		inSpacer5.setAttribute('src',zoomImagesURI+'spacer.gif');
248		inSpacer5.setAttribute('height', '1');
249		inSpacer5.setAttribute('width', '1');
250		inSpacer5.style.display = 'block';
251		inCol8.appendChild(inSpacer5);
252		
253		var inCol9 = document.createElement("td");
254		inCol9.style.width = '27px';
255		inRow3.appendChild(inCol9);  
256		var inShadowImg9 = document.createElement("img");
257		inShadowImg9.setAttribute('src', zoomImagesURI+'zoom-shadow8.png');
258		inShadowImg9.setAttribute('width', '27');
259		inShadowImg9.setAttribute('height', '26');
260		inShadowImg9.style.display = 'block';
261		inCol9.appendChild(inShadowImg9);
262	}
263
264	if (includeCaption) {
265	
266		// CAPTION
267		//
268		// <div id="ZoomCapDiv" style="margin-left: 13px; margin-right: 13px;">
269		// <table border="1" cellpadding="0" cellspacing="0">
270		// <tr height="26">
271		// <td><img src="zoom-caption-l.png" width="13" height="26"></td>
272		// <td rowspan="3" background="zoom-caption-fill.png"><div id="ZoomCaption"></div></td>
273		// <td><img src="zoom-caption-r.png" width="13" height="26"></td>
274		// </tr>
275		// </table>
276		// </div>
277		
278		var inCapDiv = document.createElement("div");
279		inCapDiv.setAttribute('id', 'ZoomCapDiv');
280		inCapDiv.style.position = 'absolute'; 		
281		inCapDiv.style.visibility = 'hidden';
282		inCapDiv.style.marginLeft = 'auto';
283		inCapDiv.style.marginRight = 'auto';
284		inCapDiv.style.zIndex = '501';
285
286		inBody.insertBefore(inCapDiv, inZoombox.nextSibling);
287		
288		var inCapTable = document.createElement("table");
289		inCapTable.setAttribute('border', '0');
290		inCapTable.setAttribute('cellPadding', '0');	// Wow. These honestly need to
291		inCapTable.setAttribute('cellSpacing', '0');	// be intercapped to work in IE. WTF?
292		inCapDiv.appendChild(inCapTable);
293		
294		var inTbody = document.createElement("tbody");	// Needed for IE (for HTML4).
295		inCapTable.appendChild(inTbody);
296		
297		var inCapRow1 = document.createElement("tr");
298		inTbody.appendChild(inCapRow1);
299		
300		var inCapCol1 = document.createElement("td");
301		inCapCol1.setAttribute('align', 'right');
302		inCapRow1.appendChild(inCapCol1);
303		var inCapImg1 = document.createElement("img");
304		inCapImg1.setAttribute('src', zoomImagesURI+'zoom-caption-l.png');
305		inCapImg1.setAttribute('width', '13');
306		inCapImg1.setAttribute('height', '26');
307		inCapImg1.style.display = 'block';
308		inCapCol1.appendChild(inCapImg1);
309		
310		var inCapCol2 = document.createElement("td");
311		inCapCol2.setAttribute('background', zoomImagesURI+'zoom-caption-fill.png');
312		inCapCol2.setAttribute('id', 'ZoomCaption');
313		inCapCol2.setAttribute('valign', 'middle');
314		inCapCol2.style.fontSize = '14px';
315		inCapCol2.style.fontFamily = 'Helvetica';
316		inCapCol2.style.fontWeight = 'bold';
317		inCapCol2.style.color = '#ffffff';
318		inCapCol2.style.textShadow = '0px 2px 4px #000000';
319		inCapCol2.style.whiteSpace = 'nowrap';
320		inCapRow1.appendChild(inCapCol2);
321		
322		var inCapCol3 = document.createElement("td");
323		inCapRow1.appendChild(inCapCol3);
324		var inCapImg2 = document.createElement("img");
325		inCapImg2.setAttribute('src', zoomImagesURI+'zoom-caption-r.png');
326		inCapImg2.setAttribute('width', '13');
327		inCapImg2.setAttribute('height', '26');
328		inCapImg2.style.display = 'block';
329		inCapCol3.appendChild(inCapImg2);
330	}
331}

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.