PageSourceSearch

https://www.lulav.co.il/core/litebox-1.0.js

js lulav.co.il collected 2026-10-03 01:51:49 UTC 15,572 bytes, 520 lines download raw bytes

1// -----------------------------------------------------------------------------------
2//
3//	Litebox v1.0
4//	A combined effort between detrate and gannon
5//	07/03/06
6//
7//	Source edited from Lightbox v2.02
8//	by Lokesh Dhakar - http://www.huddletogether.com
9//
10//	For more information on this script, visit:
11//	http://doknowevil.net/litebox
12//
13//	Licensed under the Creative Commons Attribution 2.5 License - http://creativecommons.org/licenses/by/2.5/
14//	
15//	Credit also due to those who have helped, inspired, and made their code available to the public.
16//	Including: Scott Upton(uptonic.com), Peter-Paul Koch(quirksmode.org), Thomas Fuchs(mir.aculo.us), and others.
17//
18//
19//	Configuration
20//
21var fileLoadingImage = "templates/img/loading.gif";		
22var fileBottomNavCloseImage = "templates/img/closelabel.gif";
23var resizeSpeed = 6;	// controls the speed of the image resizing (1=slowest and 10=fastest)
24var borderSize = 10;	//if you adjust the padding in the CSS, you will need to update this variable
25
26
27//	Global Variables
28//
29var imageArray = new Array;
30var activeImage;
31
32if(resizeSpeed > 10){ resizeSpeed = 10;}
33if(resizeSpeed < 1){ resizeSpeed = 1;}
34resizeDuration = (11 - resizeSpeed) * 100;
35
36
37Object.extend(Element, {
38	hide: function() {
39		for (var i = 0; i < arguments.length; i++) {
40			var element = $(arguments[i]);
41			element.style.display = 'none';
42		}
43	},
44	show: function() {
45		for (var i = 0; i < arguments.length; i++) {
46			var element = $(arguments[i]);
47			element.style.display = '';
48		}
49	},
50	getWidth: function(element) {
51	   	element = $(element);
52	   	return element.offsetWidth; 
53	},
54	setWidth: function(element,w) {
55	   	element = $(element);
56		element.style.width = w +"px";
57	},
58	getHeight: function(element) {
59		element = $(element);
60		return element.offsetHeight;
61	},
62	setHeight: function(element,h) {
63   		element = $(element);
64		element.style.height = h +"px";
65	},
66	setTop: function(element,t) {
67	   	element = $(element);
68		element.style.top = t +"px";
69	},
70	setSrc: function(element,src) {
71		element = $(element);
72		element.src = src; 
73	},
74	setInnerHTML: function(element,content) {
75		element = $(element);
76		element.innerHTML = content;
77	}
78});
79
80Array.prototype.removeDuplicates = function () {
81	for(i = 1; i < this.length; i++){
82		if(this[i][0] == this[i-1][0]){
83			this.splice(i,1);
84		}
85	}
86}
87
88Array.prototype.empty = function () {
89	for(i = 0; i <= this.length; i++){
90		this.shift();
91	}
92}
93
94var Lightbox = Class.create();
95
96Lightbox.prototype = {
97	
98	initialize: function() {
99		if (!document.getElementsByTagName){ return; }
100		var anchors = document.getElementsByTagName('a');
101
102		// loop through all anchor tags
103		for (var i=0; i<anchors.length; i++){
104			var anchor = anchors[i];
105			
106			var relAttribute = String(anchor.getAttribute('rel'));
107			
108			// use the string.match() method to catch 'lightbox' references in the rel attribute
109			if (anchor.getAttribute('href') && (relAttribute.toLowerCase().match('lightbox'))){
110				anchor.onclick = function () {myLightbox.start(this); return false;}
111			}
112		}
113
114		var objBody = document.getElementsByTagName("body").item(0);
115		
116		var objOverlay = document.createElement("div");
117		objOverlay.setAttribute('id','overlay');
118		objOverlay.onclick = function() { myLightbox.end(); return false; }
119		objBody.appendChild(objOverlay);
120		
121		var objLightbox = document.createElement("div");
122		objLightbox.setAttribute('id','lightbox');
123		objLightbox.style.display = 'none';
124		objBody.appendChild(objLightbox);
125	
126		var objOuterImageContainer = document.createElement("div");
127		objOuterImageContainer.setAttribute('id','outerImageContainer');
128		objLightbox.appendChild(objOuterImageContainer);
129
130		var objImageContainer = document.createElement("div");
131		objImageContainer.setAttribute('id','imageContainer');
132		objOuterImageContainer.appendChild(objImageContainer);
133	
134		var objLightboxImage = document.createElement("img");
135		objLightboxImage.setAttribute('id','lightboxImage');
136		objImageContainer.appendChild(objLightboxImage);
137	
138		var objHoverNav = document.createElement("div");
139		objHoverNav.setAttribute('id','hoverNav');
140		objImageContainer.appendChild(objHoverNav);
141	
142		var objPrevLink = document.createElement("a");
143		objPrevLink.setAttribute('id','prevLink');
144		objPrevLink.setAttribute('href','#');
145		objHoverNav.appendChild(objPrevLink);
146		
147		var objNextLink = document.createElement("a");
148		objNextLink.setAttribute('id','nextLink');
149		objNextLink.setAttribute('href','#');
150		objHoverNav.appendChild(objNextLink);
151	
152		var objLoading = document.createElement("div");
153		objLoading.setAttribute('id','loading');
154		objImageContainer.appendChild(objLoading);
155	
156		var objLoadingLink = document.createElement("a");
157		objLoadingLink.setAttribute('id','loadingLink');
158		objLoadingLink.setAttribute('href','#');
159		objLoadingLink.onclick = function() { myLightbox.end(); return false; }
160		objLoading.appendChild(objLoadingLink);
161	
162		var objLoadingImage = document.createElement("img");
163		objLoadingImage.setAttribute('src', fileLoadingImage);
164		objLoadingLink.appendChild(objLoadingImage);
165
166		var objImageDataContainer = document.createElement("div");
167		objImageDataContainer.setAttribute('id','imageDataContainer');
168		objImageDataContainer.className = 'clearfix';
169		objLightbox.appendChild(objImageDataContainer);
170
171		var objImageData = document.createElement("div");
172		objImageData.setAttribute('id','imageData');
173		objImageDataContainer.appendChild(objImageData);
174	
175		var objImageDetails = document.createElement("div");
176		objImageDetails.setAttribute('id','imageDetails');
177		objImageData.appendChild(objImageDetails);
178	
179		var objCaption = document.createElement("span");
180		objCaption.setAttribute('id','caption');
181		objImageDetails.appendChild(objCaption);
182	
183		var objNumberDisplay = document.createElement("span");
184		objNumberDisplay.setAttribute('id','numberDisplay');
185		objImageDetails.appendChild(objNumberDisplay);
186		
187		var objBottomNav = document.createElement("div");
188		objBottomNav.setAttribute('id','bottomNav');
189		objImageData.appendChild(objBottomNav);
190	
191		var objBottomNavCloseLink = document.createElement("a");
192		objBottomNavCloseLink.setAttribute('id','bottomNavClose');
193		objBottomNavCloseLink.setAttribute('href','#');
194		objBottomNavCloseLink.onclick = function() { myLightbox.end(); return false; }
195		objBottomNav.appendChild(objBottomNavCloseLink);
196	
197		var objBottomNavCloseImage = document.createElement("img");
198		objBottomNavCloseImage.setAttribute('src', fileBottomNavCloseImage);
199		objBottomNavCloseLink.appendChild(objBottomNavCloseImage);
200		
201		overlayEffect = new fx.Opacity(objOverlay, { duration: 300 });	
202		overlayEffect.hide();
203		
204		imageEffect = new fx.Opacity(objLightboxImage, { duration: 350, onComplete: function() { imageDetailsEffect.custom(0,1); }});
205		imageEffect.hide();
206		
207		imageDetailsEffect = new fx.Opacity('imageDataContainer', { duration: 400, onComplete: function() { navEffect.custom(0,1); }}); 
208		imageDetailsEffect.hide();
209		
210		navEffect = new fx.Opacity('hoverNav', { duration: 100 });
211		navEffect.hide();
212	},
213	
214	start: function(imageLink) {	
215
216		hideSelectBoxes();
217
218		// stretch overlay to fill page and fade in
219		var arrayPageSize = getPageSize();
220		Element.setHeight('overlay', arrayPageSize[1]);
221		overlayEffect.custom(0,0.8);
222		
223		imageArray = [];
224		imageNum = 0;		
225
226		if (!document.getElementsByTagName){ return; }
227		var anchors = document.getElementsByTagName('a');
228
229		// if image is NOT part of a set..
230		if((imageLink.getAttribute('rel') == 'lightbox')){
231			// add single image to imageArray
232			imageArray.push(new Array(imageLink.getAttribute('href'), imageLink.getAttribute('title')));			
233		} else {
234		// if image is part of a set..
235
236			// loop through anchors, find other images in set, and add them to imageArray
237			for (var i=0; i<anchors.length; i++){
238				var anchor = anchors[i];
239				if (anchor.getAttribute('href') && (anchor.getAttribute('rel') == imageLink.getAttribute('rel'))){
240					imageArray.push(new Array(anchor.getAttribute('href'), anchor.getAttribute('title')));
241				}
242			}
243			imageArray.removeDuplicates();
244			while(imageArray[imageNum][0] != imageLink.getAttribute('href')) { imageNum++;}
245		}
246
247		// calculate top offset for the lightbox and display 
248		var arrayPageSize = getPageSize();
249		var arrayPageScroll = getPageScroll();
250		var lightboxTop = arrayPageScroll[1] + (arrayPageSize[3] / 15);
251
252		Element.setTop('lightbox', lightboxTop);
253		Element.show('lightbox');
254		this.changeImage(imageNum);
255	},
256
257	changeImage: function(imageNum) {
258		
259		activeImage = imageNum;	// update global var
260
261		// hide elements during transition
262		Element.show('loading');
263		imageDetailsEffect.hide();
264		imageEffect.hide();
265		navEffect.hide();
266		Element.hide('prevLink');
267		Element.hide('nextLink');
268		Element.hide('numberDisplay');
269		
270		imgPreloader = new Image();
271		// once image is preloaded, resize image container
272		imgPreloader.onload=function(){
273			Element.setSrc('lightboxImage', imageArray[activeImage][0]);
274			myLightbox.resizeImageContainer(imgPreloader.width, imgPreloader.height);
275		}
276		imgPreloader.src = imageArray[activeImage][0];
277	},
278
279	//
280	//	resizeImageContainer()
281	//
282	resizeImageContainer: function( imgWidth, imgHeight) {
283
284		// get current height and width
285		this.wCur = Element.getWidth('outerImageContainer');
286		this.hCur = Element.getHeight('outerImageContainer');
287
288		// calculate size difference between new and old image, and resize if necessary
289		wDiff = (this.wCur - borderSize * 2) - imgWidth;
290		hDiff = (this.hCur - borderSize * 2) - imgHeight;
291		
292		// Resize the outerImageContainer very sexy like
293		reHeight = new fx.Height('outerImageContainer', { duration: resizeDuration });
294		reHeight.custom(Element.getHeight('outerImageContainer'),imgHeight+(borderSize*2)); 
295		reWidth = new fx.Width('outerImageContainer', { duration: resizeDuration, onComplete: function() { imageEffect.custom(0,1); }});
296		reWidth.custom(Element.getWidth('outerImageContainer'),imgWidth+(borderSize*2));
297
298		if((hDiff == 0) && (wDiff == 0)){
299			if (navigator.appVersion.indexOf("MSIE")!=-1){ pause(250); } else { pause(100);} 
300		}
301
302		Element.setHeight('prevLink', imgHeight);
303		Element.setHeight('nextLink', imgHeight);
304		Element.setWidth( 'imageDataContainer', imgWidth + (borderSize * 2));
305		Element.setWidth( 'hoverNav', imgWidth + (borderSize * 2));
306		
307		this.showImage();
308	},
309	
310
311	showImage: function(){
312		Element.hide('loading');
313		myLightbox.updateDetails(); 
314		this.preloadNeighborImages();
315	},
316
317
318	updateDetails: function() {
319
320		Element.show('caption');
321		Element.setInnerHTML( 'caption', imageArray[activeImage][1]);
322		
323		// if image is part of set display 'Image x of x' 
324		if(imageArray.length > 1){
325			Element.show('numberDisplay');
326			Element.setInnerHTML( 'numberDisplay', "Image " + eval(activeImage + 1) + " of " + imageArray.length);
327		}
328
329		myLightbox.updateNav();
330	},
331
332	updateNav: function() {
333
334		// if not first image in set, display prev image button
335		if(activeImage != 0){
336			Element.show('prevLink');
337			document.getElementById('prevLink').onclick = function() {
338				myLightbox.changeImage(activeImage - 1); return false;
339			}
340		}
341
342		// if not last image in set, display next image button
343		if(activeImage != (imageArray.length - 1)){
344			Element.show('nextLink');
345			document.getElementById('nextLink').onclick = function() {
346				myLightbox.changeImage(activeImage + 1); return false;
347			}
348		}
349		
350		this.enableKeyboardNav();
351	},
352
353
354	enableKeyboardNav: function() {
355		document.onkeydown = this.keyboardAction; 
356	},
357
358
359	disableKeyboardNav: function() {
360		document.onkeydown = '';
361	},
362
363
364	keyboardAction: function(e) {
365		if (e == null) { // ie
366			keycode = event.keyCode;
367		} else { // mozilla
368			keycode = e.which;
369		}
370
371		key = String.fromCharCode(keycode).toLowerCase();
372		
373		if((key == 'x') || (key == 'o') || (key == 'c')){	// close lightbox
374			myLightbox.end();
375		} else if(key == 'p'){	// display previous image
376			if(activeImage != 0){
377				myLightbox.disableKeyboardNav();
378				myLightbox.changeImage(activeImage - 1);
379			}
380		} else if(key == 'n'){	// display next image
381			if(activeImage != (imageArray.length - 1)){
382				myLightbox.disableKeyboardNav();
383				myLightbox.changeImage(activeImage + 1);
384			}
385		}
386	},
387
388	//
389	//	preloadNeighborImages()
390	//	Preload previous and next images.
391	//
392	preloadNeighborImages: function(){
393
394		if((imageArray.length - 1) > activeImage){
395			preloadNextImage = new Image();
396			preloadNextImage.src = imageArray[activeImage + 1][0];
397		}
398		if(activeImage > 0){
399			preloadPrevImage = new Image();
400			preloadPrevImage.src = imageArray[activeImage - 1][0];
401		}
402	
403	},
404
405
406	end: function() {
407		this.disableKeyboardNav();
408		Element.hide('lightbox');
409		imageEffect.toggle();
410		overlayEffect.custom(0.8,0);
411		showSelectBoxes();
412	}
413}
414
415function getPageScroll(){
416
417	var yScroll;
418
419	if (self.pageYOffset) {
420		yScroll = self.pageYOffset;
421	} else if (document.documentElement && document.documentElement.scrollTop){	 // Explorer 6 Strict
422		yScroll = document.documentElement.scrollTop;
423	} else if (document.body) {// all other Explorers
424		yScroll = document.body.scrollTop;
425	}
426
427	arrayPageScroll = new Array('',yScroll) 
428	return arrayPageScroll;
429}
430
431
432function getPageSize(){
433	
434	var xScroll, yScroll;
435	
436	if (window.innerHeight && window.scrollMaxY) {	
437		xScroll = document.body.scrollWidth;
438		yScroll = window.innerHeight + window.scrollMaxY;
439	} else if (document.body.scrollHeight > document.body.offsetHeight){ // all but Explorer Mac
440		xScroll = document.body.scrollWidth;
441		yScroll = document.body.scrollHeight;
442	} else { // Explorer Mac...would also work in Explorer 6 Strict, Mozilla and Safari
443		xScroll = document.body.offsetWidth;
444		yScroll = document.body.offsetHeight;
445	}
446	
447	var windowWidth, windowHeight;
448	if (self.innerHeight) {	// all except Explorer
449		windowWidth = self.innerWidth;
450		windowHeight = self.innerHeight;
451	} else if (document.documentElement && document.documentElement.clientHeight) { // Explorer 6 Strict Mode
452		windowWidth = document.documentElement.clientWidth;
453		windowHeight = document.documentElement.clientHeight;
454	} else if (document.body) { // other Explorers
455		windowWidth = document.body.clientWidth;
456		windowHeight = document.body.clientHeight;
457	}	
458	
459	// for small pages with total height less then height of the viewport
460	if(yScroll < windowHeight){
461		pageHeight = windowHeight;
462	} else { 
463		pageHeight = yScroll;
464	}
465
466	// for small pages with total width less then width of the viewport
467	if(xScroll < windowWidth){	
468		pageWidth = windowWidth;
469	} else {
470		pageWidth = xScroll;
471	}
472
473	arrayPageSize = new Array(pageWidth,pageHeight,windowWidth,windowHeight) 
474	return arrayPageSize;
475}
476
477function getKey(e){
478	if (e == null) { // ie
479		keycode = event.keyCode;
480	} else { // mozilla
481		keycode = e.which;
482	}
483	key = String.fromCharCode(keycode).toLowerCase();
484	
485	if(key == 'x'){
486	}
487}
488
489function listenKey () {	document.onkeypress = getKey; }
490
491// ---------------------------------------------------
492
493function showSelectBoxes(){
494	selects = document.getElementsByTagName("select");
495	for (i = 0; i != selects.length; i++) {
496		selects[i].style.visibility = "visible";
497	}
498}
499
500// ---------------------------------------------------
501
502function hideSelectBoxes(){
503	selects = document.getElementsByTagName("select");
504	for (i = 0; i != selects.length; i++) {
505		selects[i].style.visibility = "hidden";
506	}
507}
508
509function pause(numberMillis) {
510	var now = new Date();
511	var exitTime = now.getTime() + numberMillis;
512	while (true) {
513		now = new Date();
514		if (now.getTime() > exitTime)
515			return;
516	}
517}
518// ---------------------------------------------------
519
520function initLightbox() { myLightbox = new Lightbox(); }

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.