PageSourceSearch

https://biblio-vidnoe.ru/bitrix/templates/lib/js/jquery.fancybox.js

js biblio-vidnoe.ru collected 2026-10-02 10:00:17 UTC 12,472 bytes, 384 lines download raw bytes

1/*
2 * FancyBox - simple jQuery plugin for fancy image zooming
3 * Examples and documentation at: http://fancy.klade.lv/
4 * Version: 1.0.0 (25/04/2008)
5 * Copyright (c) 2008 Janis Skarnelis
6 * Licensed under the MIT License: http://www.opensource.org/licenses/mit-license.php
7 * Requires: jQuery v1.2.1 or later
8*/
9(function($) {
10	var opts = {}, 
11		imgPreloader = new Image, imgTypes = ['png', 'jpg', 'jpeg', 'gif'], 
12		loadingTimer, loadingFrame = 1;
13
14   $.fn.fancybox = function(settings) {
15		opts.settings = $.extend({}, $.fn.fancybox.defaults, settings);
16
17		$.fn.fancybox.init();
18
19		return this.each(function() {
20			var $this = $(this);
21			var o = $.metadata ? $.extend({}, opts.settings, $this.metadata()) : opts.settings;
22
23			$this.unbind('click').click(function() {
24				$.fn.fancybox.start(this, o); return false;
25			});
26		});
27	};
28
29	$.fn.fancybox.start = function(el, o) {
30		if (opts.animating) return false;
31
32		if (o.overlayShow) {
33			$("#fancy_wrap").prepend('<div id="fancy_overlay"></div>');
34			$("#fancy_overlay").css({'width': $(window).width(), 'height': $(document).height(), 'opacity': o.overlayOpacity});
35
36			if ($.browser.msie) {
37				$("#fancy_wrap").prepend('<iframe id="fancy_bigIframe" scrolling="no" frameborder="0"></iframe>');
38				$("#fancy_bigIframe").css({'width': $(window).width(), 'height': $(document).height(), 'opacity': 0});
39			}
40
41			$("#fancy_overlay").click($.fn.fancybox.close);
42		}
43
44		opts.itemArray	= [];
45		opts.itemNum	= 0;
46
47		if (jQuery.isFunction(o.itemLoadCallback)) {
48		   o.itemLoadCallback.apply(this, [opts]);
49
50			var c	= $(el).children("img:first").length ? $(el).children("img:first") : $(el);
51			var tmp	= {'width': c.width(), 'height': c.height(), 'pos': $.fn.fancybox.getPosition(c)}
52
53		   for (var i = 0; i < opts.itemArray.length; i++) {
54				opts.itemArray[i].o = $.extend({}, o, opts.itemArray[i].o);
55				
56				if (o.zoomSpeedIn > 0 || o.zoomSpeedOut > 0) {
57					opts.itemArray[i].orig = tmp;
58				}
59		   }
60
61		} else {
62			if (!el.rel || el.rel == '') {
63				var item = {url: el.href, title: el.title, o: o};
64
65				if (o.zoomSpeedIn > 0 || o.zoomSpeedOut > 0) {
66					var c = $(el).children("img:first").length ? $(el).children("img:first") : $(el);
67					item.orig = {'width': c.width(), 'height': c.height(), 'pos': $.fn.fancybox.getPosition(c)}
68				}
69
70				opts.itemArray.push(item);
71
72			} else {
73				var arr	= $("a[@rel=" + el.rel + "]").get();
74
75				for (var i = 0; i < arr.length; i++) {
76					var tmp		= $.metadata ? $.extend({}, o, $(arr[i]).metadata()) : o;
77   					var item	= {url: arr[i].href, title: arr[i].title, o: tmp};
78
79   					if (o.zoomSpeedIn > 0 || o.zoomSpeedOut > 0) {
80						var c = $(arr[i]).children("img:first").length ? $(arr[i]).children("img:first") : $(el);
81
82						item.orig = {'width': c.width(), 'height': c.height(), 'pos': $.fn.fancybox.getPosition(c)}
83					}
84
85					if (arr[i].href == el.href) opts.itemNum = i;
86
87					opts.itemArray.push(item);
88				}
89			}
90		}
91
92		$.fn.fancybox.changeItem(opts.itemNum);
93	};
94
95	$.fn.fancybox.changeItem = function(n) {
96		$.fn.fancybox.showLoading();
97
98		opts.itemNum = n;
99
100		$("#fancy_nav").empty();
101		$("#fancy_outer").stop();
102		$("#fancy_title").hide();
103		$(document).unbind("keydown");
104
105		imgRegExp = imgTypes.join('|');
106    	imgRegExp = new RegExp('\.' + imgRegExp + '$', 'i');
107
108		var url = opts.itemArray[n].url;
109
110		if (url.match(/#/)) {
111			var target = window.location.href.split('#')[0]; target = url.replace(target,'');
112
113	        $.fn.fancybox.showItem('<div id="fancy_div">' + $(target).html() + '</div>');
114
115	        $("#fancy_loading").hide();
116
117		} else if (url.match(imgRegExp)) {
118			$(imgPreloader).unbind('load').bind('load', function() {
119				$("#fancy_loading").hide();
120
121				opts.itemArray[n].o.frameWidth	= imgPreloader.width;
122				opts.itemArray[n].o.frameHeight	= imgPreloader.height;
123
124				$.fn.fancybox.showItem('<img id="fancy_img" src="' + imgPreloader.src + '" />');
125
126			}).attr('src', url + '?rand=' + Math.floor(Math.random() * 999999999) );
127
128		} else {
129			$.fn.fancybox.showItem('<iframe id="fancy_frame" onload="$.fn.fancybox.showIframe()" name="fancy_iframe' + Math.round(Math.random()*1000) + '" frameborder="0" hspace="0" src="' + url + '"></iframe>');
130		}
131	};
132
133	$.fn.fancybox.showIframe = function() {
134		$("#fancy_loading").hide();
135		$("#fancy_frame").show();
136	};
137
138	$.fn.fancybox.showItem = function(val) {
139		$.fn.fancybox.preloadNeighborImages();
140
141		var viewportPos	= $.fn.fancybox.getViewport();
142		var itemSize	= $.fn.fancybox.getMaxSize(viewportPos[0] - 50, viewportPos[1] - 100, opts.itemArray[opts.itemNum].o.frameWidth, opts.itemArray[opts.itemNum].o.frameHeight);
143
144		var itemLeft	= viewportPos[2] + Math.round((viewportPos[0] - itemSize[0]) / 2) - 20;
145		var itemTop		= viewportPos[3] + Math.round((viewportPos[1] - itemSize[1]) / 2) - 40;
146
147		var itemOpts = {
148			'left':		itemLeft, 
149			'top':		itemTop, 
150			'width':	itemSize[0] + 'px', 
151			'height':	itemSize[1] + 'px'	
152		}
153
154		if (opts.active) {
155			$('#fancy_content').fadeOut("normal", function() {
156				$("#fancy_content").empty();
157				
158				$("#fancy_outer").animate(itemOpts, "normal", function() {
159					$("#fancy_content").append($(val)).fadeIn("normal");
160					$.fn.fancybox.updateDetails();
161				});
162			});
163
164		} else {
165			opts.active = true;
166
167			$("#fancy_content").empty();
168
169			if ($("#fancy_content").is(":animated")) {
170				console.info('animated!');
171			}
172
173			if (opts.itemArray[opts.itemNum].o.zoomSpeedIn > 0) {
174				opts.animating		= true;
175				itemOpts.opacity	= "show";
176
177				$("#fancy_outer").css({
178					'top':		opts.itemArray[opts.itemNum].orig.pos.top - 18,
179					'left':		opts.itemArray[opts.itemNum].orig.pos.left - 18,
180					'height':	opts.itemArray[opts.itemNum].orig.height,
181					'width':	opts.itemArray[opts.itemNum].orig.width
182				});
183
184				$("#fancy_content").append($(val)).show();
185
186				$("#fancy_outer").animate(itemOpts, opts.itemArray[opts.itemNum].o.zoomSpeedIn, function() {
187					opts.animating = false;
188					$.fn.fancybox.updateDetails();
189				});
190
191			} else {
192				$("#fancy_content").append($(val)).show();
193				$("#fancy_outer").css(itemOpts).show();
194				$.fn.fancybox.updateDetails();
195			}
196		 }
197	};
198
199	$.fn.fancybox.updateDetails = function() {
200		$("#fancy_bg,#fancy_close").show();
201
202		if (opts.itemArray[opts.itemNum].title !== undefined && opts.itemArray[opts.itemNum].title !== '') {
203			$('#fancy_title div').html(opts.itemArray[opts.itemNum].title);
204			$('#fancy_title').show();
205		}
206
207		if (opts.itemArray[opts.itemNum].o.hideOnContentClick) {
208			$("#fancy_content").click($.fn.fancybox.close);
209		} else {
210			$("#fancy_content").unbind('click');
211		}
212
213		if (opts.itemNum != 0) {
214			$("#fancy_nav").append('<a id="fancy_left" href="javascript:;"></a>');
215
216			$('#fancy_left').click(function() {
217				$.fn.fancybox.changeItem(opts.itemNum - 1); return false;
218			});
219		}
220
221		if (opts.itemNum != (opts.itemArray.length - 1)) {
222			$("#fancy_nav").append('<a id="fancy_right" href="javascript:;"></a>');
223			
224			$('#fancy_right').click(function(){
225				$.fn.fancybox.changeItem(opts.itemNum + 1); return false;
226			});
227		}
228
229		$(document).keydown(function(event) {
230			if (event.keyCode == 27) {
231            	$.fn.fancybox.close();
232
233			} else if(event.keyCode == 37 && opts.itemNum != 0) {
234            	$.fn.fancybox.changeItem(opts.itemNum - 1);
235
236			} else if(event.keyCode == 39 && opts.itemNum != (opts.itemArray.length - 1)) {
237            	$.fn.fancybox.changeItem(opts.itemNum + 1);
238			}
239		});
240	};
241
242	$.fn.fancybox.preloadNeighborImages = function() {
243		if ((opts.itemArray.length - 1) > opts.itemNum) {
244			preloadNextImage = new Image();
245			preloadNextImage.src = opts.itemArray[opts.itemNum + 1].url;
246		}
247
248		if (opts.itemNum > 0) {
249			preloadPrevImage = new Image();
250			preloadPrevImage.src = opts.itemArray[opts.itemNum - 1].url;
251		}
252	};
253
254	$.fn.fancybox.close = function() {
255		if (opts.animating) return false;
256
257		$(imgPreloader).unbind('load');
258		$(document).unbind("keydown");
259
260		$("#fancy_loading,#fancy_title,#fancy_close,#fancy_bg").hide();
261
262		$("#fancy_nav").empty();
263
264		opts.active	= false;
265
266		if (opts.itemArray[opts.itemNum].o.zoomSpeedOut > 0) {
267			var itemOpts = {
268				'top':		opts.itemArray[opts.itemNum].orig.pos.top - 18,
269				'left':		opts.itemArray[opts.itemNum].orig.pos.left - 18,
270				'height':	opts.itemArray[opts.itemNum].orig.height,
271				'width':	opts.itemArray[opts.itemNum].orig.width,
272				'opacity':	'hide'
273			};
274
275			opts.animating = true;
276
277			$("#fancy_outer").animate(itemOpts, opts.itemArray[opts.itemNum].o.zoomSpeedOut, function() {
278				$("#fancy_content").hide().empty();
279				$("#fancy_overlay,#fancy_bigIframe").remove();
280				opts.animating = false;
281			});
282
283		} else {
284			$("#fancy_outer").hide();
285			$("#fancy_content").hide().empty();
286			$("#fancy_overlay,#fancy_bigIframe").fadeOut("fast").remove();
287		}
288	};
289
290	$.fn.fancybox.showLoading = function() {
291		clearInterval(loadingTimer);
292
293		var pos = $.fn.fancybox.getViewport();
294
295		$("#fancy_loading").css({'left': ((pos[0] - 40) / 2 + pos[2]), 'top': ((pos[1] - 40) / 2 + pos[3])}).show();
296		$("#fancy_loading").bind('click', $.fn.fancybox.close);
297		
298		loadingTimer = setInterval($.fn.fancybox.animateLoading, 66);
299	};
300
301	$.fn.fancybox.animateLoading = function(el, o) {
302		if (!$("#fancy_loading").is(':visible')){
303			clearInterval(loadingTimer);
304			return;
305		}
306
307		$("#fancy_loading > div").css('top', (loadingFrame * -40) + 'px');
308
309		loadingFrame = (loadingFrame + 1) % 12;
310	};
311
312	$.fn.fancybox.init = function() {
313		if (!$('#fancy_wrap').length) {
314			$('<div id="fancy_wrap"><div id="fancy_loading"><div></div></div><div id="fancy_outer"><div id="fancy_inner"><div id="fancy_nav"></div><div id="fancy_close"></div><div id="fancy_content"></div><div id="fancy_title"></div></div></div></div>').appendTo("body");
315			$('<div id="fancy_bg"><div class="fancy_bg fancy_bg_n"></div><div class="fancy_bg fancy_bg_ne"></div><div class="fancy_bg fancy_bg_e"></div><div class="fancy_bg fancy_bg_se"></div><div class="fancy_bg fancy_bg_s"></div><div class="fancy_bg fancy_bg_sw"></div><div class="fancy_bg fancy_bg_w"></div><div class="fancy_bg fancy_bg_nw"></div></div>').prependTo("#fancy_inner");
316			
317			$('<table cellspacing="0" cellpadding="0" border="0"><tr><td id="fancy_title_left"></td><td id="fancy_title_main"><div></div></td><td id="fancy_title_right"></td></tr></table>').appendTo('#fancy_title');
318		}
319
320		if ($.browser.msie) {
321			$("#fancy_inner").prepend('<iframe id="fancy_freeIframe" scrolling="no" frameborder="0"></iframe>');
322		}
323
324		if (jQuery.fn.pngFix) $(document).pngFix();
325
326    	$("#fancy_close").click($.fn.fancybox.close);
327	};
328
329	$.fn.fancybox.getPosition = function(el) {
330		var pos = el.offset();
331
332		pos.top	+= $.fn.fancybox.num(el, 'paddingTop');
333		pos.top	+= $.fn.fancybox.num(el, 'borderTopWidth');
334
335 		pos.left += $.fn.fancybox.num(el, 'paddingLeft');
336		pos.left += $.fn.fancybox.num(el, 'borderLeftWidth');
337
338		return pos;
339	};
340
341	$.fn.fancybox.num = function (el, prop) {
342		return parseInt($.curCSS(el.jquery?el[0]:el,prop,true))||0;
343	};
344
345	$.fn.fancybox.getPageScroll = function() {
346		var xScroll, yScroll;
347
348		if (self.pageYOffset) {
349			yScroll = self.pageYOffset;
350			xScroll = self.pageXOffset;
351		} else if (document.documentElement && document.documentElement.scrollTop) {
352			yScroll = document.documentElement.scrollTop;
353			xScroll = document.documentElement.scrollLeft;
354		} else if (document.body) {
355			yScroll = document.body.scrollTop;
356			xScroll = document.body.scrollLeft;	
357		}
358
359		return [xScroll, yScroll]; 
360	};
361
362	$.fn.fancybox.getViewport = function() {
363		var scroll = $.fn.fancybox.getPageScroll();
364
365		return [$(window).width(), $(window).height(), scroll[0], scroll[1]];
366	};
367
368	$.fn.fancybox.getMaxSize = function(maxWidth, maxHeight, imageWidth, imageHeight) {
369		var r = Math.min(Math.min(maxWidth, imageWidth) / imageWidth, Math.min(maxHeight, imageHeight) / imageHeight);
370
371		return [Math.round(r * imageWidth), Math.round(r * imageHeight)];
372	};
373
374	$.fn.fancybox.defaults = {
375		hideOnContentClick:	false,
376		zoomSpeedIn:		500,
377		zoomSpeedOut:		500,
378		frameWidth:			600,
379		frameHeight:		400,
380		overlayShow:		false,
381		overlayOpacity:		0.4,
382		itemLoadCallback:	null
383	};
384})(jQuery);

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.