PageSourceSearch

https://perko.com/layout/plugins/tools/jquery.tools.min.js

js perko.com collected 2026-09-25 22:50:54 UTC 15,326 bytes, 373 lines download raw bytes

1/*
2 * Show More jQuery Plugin
3 * Author: Jason Alvis
4 * Author Site: http://www.jasonalvis.com
5 * License: Free General Public License (GPL)
6 * Version: 1.0.4
7 * Date: 21.05.2013
8 */
9 
10(function(a){a.fn.showMore=function(b){var c={speedDown:300,speedUp:300,height:"265px",showText:"Show",hideText:"Hide"};var b=a.extend(c,b);return this.each(function(){var e=a(this),d=e.height();if(d>parseInt(b.height)){e.wrapInner('<div class="showmore_content" />');e.find(".showmore_content").css("height",b.height);e.append('<div class="showmore_trigger"><span class="more">'+b.showText+'</span><span class="less" style="display:none;">'+b.hideText+"</span></div>");e.find(".showmore_trigger").on("click",".more",function(){a(this).hide();a(this).next().show();a(this).parent().prev().animate({height:d},b.speedDown)});e.find(".showmore_trigger").on("click",".less",function(){a(this).hide();a(this).prev().show();a(this).parent().prev().animate({height:b.height},b.speedUp)})}})}})(jQuery);
11 
12/*!
13 * jQuery Tools v1.2.6 - The missing UI library for the Web
14 * 
15 * tabs/tabs.js
16 * tabs/tabs.slideshow.js
17 * tooltip/tooltip.js
18 * tooltip/tooltip.dynamic.js
19 * tooltip/tooltip.slide.js
20 * 
21 * NO COPYRIGHTS OR LICENSES. DO WHAT YOU LIKE.
22 * 
23 * http://flowplayer.org/tools/
24 * 
25 */
26
27(function ($) {
28
29	// static constructs
30	$.tools = $.tools || {
31		version: '1.2.6'
32	};
33
34	$.tools.tabs = {
35
36		conf: {
37			tabs: 'a',
38			current: 'current',
39			onBeforeClick: null,
40			onClick: null,
41			effect: 'default',
42			initialIndex: 0,
43			event: 'click',
44			rotate: false,
45
46			// slide effect
47			slideUpSpeed: 400,
48			slideDownSpeed: 400,
49
50			// 1.2
51			history: false,
52			currentClose: false
53		},
54
55		addEffect: function (name, fn) {
56			effects[name] = fn;
57		}
58
59	};
60
61	var effects = {
62
63		// simple "toggle" effect
64		'default': function (i, done) {
65			this.getPanes().hide().eq(i).show();
66			//done.call();
67		},
68
69		/*
70configuration:
71- fadeOutSpeed (positive value does "crossfading")
72- fadeInSpeed
73*/
74		fade: function (i, done) {
75
76			var conf = this.getConf(),
77				speed = conf.fadeOutSpeed,
78				panes = this.getPanes();
79
80			if (speed) {
81				panes.fadeOut(speed);
82			} else {
83				panes.hide();
84			}
85
86			panes.eq(i).fadeIn(conf.fadeInSpeed, done);
87		},
88
89		// for basic accordions
90		slide: function (i, clickOnCurrent, done) {
91			var conf = this.getConf();
92			
93			if(clickOnCurrent && conf.currentClose) {
94					this.getPanes().eq(i).slideToggle(conf.slideDownSpeed, done);
95			}
96			else {
97				this.getPanes().slideUp(conf.slideUpSpeed);
98				this.getPanes().eq(i).slideDown(conf.slideDownSpeed, done);
99			}
100		},
101
102		/**
103		 * AJAX effect
104		 */
105		ajax: function (i, done) {
106			this.getPanes().eq(0).load(this.getTabs().eq(i).attr("href"), done);
107		}
108	};
109
110	/**
111	 * Horizontal accordion
112	 *
113	 * @deprecated will be replaced with a more robust implementation
114	 */
115
116	var
117	/**
118	 * @type {Boolean}
119	 *
120	 * Mutex to control horizontal animation
121	 * Disables clicking of tabs while animating
122	 * They mess up otherwise as currentPane gets set *after* animation is done
123	 */
124	animating,
125	/**
126	 * @type {Number}
127	 *
128	 * Initial width of tab panes
129	 */
130	w;
131
132	$.tools.tabs.addEffect("horizontal", function (i, done) {
133		if (animating) return; // don't allow other animations
134		var nextPane = this.getPanes().eq(i),
135			currentPane = this.getCurrentPane();
136
137		// store original width of a pane into memory
138		w || (w = this.getPanes().eq(0).width());
139		animating = true;
140
141		nextPane.show(); // hidden by default
142		// animate current pane's width to zero
143		// animate next pane's width at the same time for smooth animation
144		currentPane.animate({
145			width: 0
146		}, {
147			step: function (now) {
148				nextPane.css("width", w - now);
149			},
150			complete: function () {
151				$(this).hide();
152				done.call();
153				animating = false;
154			}
155		});
156		// Dirty hack... onLoad, currentPant will be empty and nextPane will be the first pane
157		// If this is the case, manually run callback since the animation never occured, and reset animating
158		if (!currentPane.length) {
159			done.call();
160			animating = false;
161		}
162	});
163
164
165	function Tabs(root, paneSelector, conf) {
166
167		var self = this,
168			trigger = root.add(this),
169			tabs = root.find(conf.tabs),
170			panes = paneSelector.jquery ? paneSelector : root.children(paneSelector),
171			current;
172
173
174		// make sure tabs and panes are found
175		if (!tabs.length) {
176			tabs = root.children();
177		}
178		if (!panes.length) {
179			panes = root.parent().find(paneSelector);
180		}
181		if (!panes.length) {
182			panes = $(paneSelector);
183		}
184
185
186		// public methods
187		$.extend(this, {
188			click: function (i, e) {
189
190				var tab = tabs.eq(i);
191				var clickOnCurrent = false;
192
193				if (typeof i == 'string' && i.replace("#", "")) {
194					tab = tabs.filter("[href*=" + i.replace("#", "") + "]");
195					i = Math.max(tabs.index(tab), 0);
196				}
197
198				if (conf.rotate) {
199					var last = tabs.length - 1;
200					if (i < 0) {
201						return self.click(last, e);
202					}
203					if (i > last) {
204						return self.click(0, e);
205					}
206				}
207
208				if (!tab.length) {
209					if (current >= 0) {
210						return self;
211					}
212					i = conf.initialIndex;
213					tab = tabs.eq(i);
214				}
215
216				// current tab is being clicked
217				if (i === current) clickOnCurrent = true;
218				if (clickOnCurrent && !conf.currentClose) {
219					return self;
220				}
221
222				// possibility to cancel click action
223				e = e || $.Event();
224				e.type = "onBeforeClick";
225				trigger.trigger(e, [i]);
226				if (e.isDefaultPrevented()) {
227					return;
228				}
229
230				// call the effect
231				effects[conf.effect].call(self, i, clickOnCurrent, function () {
232					current = i;
233					// onClick callback
234					e.type = "onClick";
235					trigger.trigger(e, [i]);
236				});
237
238				// default behaviour
239				if (clickOnCurrent && conf.currentClose) {
240					tab.toggleClass(conf.current);
241				}
242				else {
243					tabs.removeClass(conf.current);
244					tab.addClass(conf.current);
245				}
246
247				return self;
248			},
249
250			getConf: function () {
251				return conf;
252			},
253
254			getTabs: function () {
255				return tabs;
256			},
257
258			getPanes: function () {
259				return panes;
260			},
261
262			getCurrentPane: function () {
263				return panes.eq(current);
264			},
265
266			getCurrentTab: function () {
267				return tabs.eq(current);
268			},
269
270			getIndex: function () {
271				return current;
272			},
273
274			next: function () {
275				return self.click(current + 1);
276			},
277
278			prev: function () {
279				return self.click(current - 1);
280			},
281
282			destroy: function () {
283				tabs.unbind(conf.event).removeClass(conf.current);
284				panes.find("a[href^=#]").unbind("click.T");
285				return self;
286			}
287
288		});
289
290		// callbacks
291		$.each("onBeforeClick,onClick".split(","), function (i, name) {
292
293			// configuration
294			if ($.isFunction(conf[name])) {
295				$(self).bind(name, conf[name]);
296			}
297
298			// API
299			self[name] = function (fn) {
300				if (fn) {
301					$(self).bind(name, fn);
302				}
303				return self;
304			};
305		});
306
307
308		if (conf.history && $.fn.history) {
309			$.tools.history.init(tabs);
310			conf.event = 'history';
311		}
312
313		// setup click actions for each tab
314		tabs.each(function (i) {
315			$(this).bind(conf.event, function (e) {
316				self.click(i, e);
317				return e.preventDefault();
318			});
319		});
320
321		// cross tab anchor link
322		panes.find("a[href^=#]").bind("click.T", function (e) {
323			self.click($(this).attr("href"), e);
324		});
325
326		// open initial tab
327		if (location.hash && conf.tabs == "a" && root.find("[href=" + location.hash + "]").length) {
328			self.click(location.hash);
329
330		} else {
331			if (conf.initialIndex === 0 || conf.initialIndex > 0) {
332				self.click(conf.initialIndex);
333			}
334		}
335
336	}
337
338
339	// jQuery plugin implementation
340	$.fn.tabs = function (paneSelector, conf) {
341
342		// return existing instance
343		var el = this.data("tabs");
344		if (el) {
345			el.destroy();
346			this.removeData("tabs");
347		}
348
349		if ($.isFunction(conf)) {
350			conf = {
351				onBeforeClick: conf
352			};
353		}
354
355		// setup conf
356		conf = $.extend({}, $.tools.tabs.conf, conf);
357
358
359		this.each(function () {
360			el = new Tabs($(this), paneSelector, conf);
361			$(this).data("tabs", el);
362		});
363
364		return conf.api ? el : this;
365	};
366
367})(jQuery);
368
369
370(function(a){var b;b=a.tools.tabs.slideshow={conf:{next:".forward",prev:".backward",disabledClass:"disabled",autoplay:!1,autopause:!0,interval:3e3,clickable:!0,api:!1}};function c(b,c){var d=this,e=b.add(this),f=b.data("tabs"),g,h=!0;function i(c){var d=a(c);return d.length<2?d:b.parent().find(c)}var j=i(c.next).click(function(){f.next()}),k=i(c.prev).click(function(){f.prev()});function l(){g=setTimeout(function(){f.next()},c.interval)}a.extend(d,{getTabs:function(){return f},getConf:function(){return c},play:function(){if(g)return d;var b=a.Event("onBeforePlay");e.trigger(b);if(b.isDefaultPrevented())return d;h=!1,e.trigger("onPlay"),e.bind("onClick",l),l();return d},pause:function(){if(!g)return d;var b=a.Event("onBeforePause");e.trigger(b);if(b.isDefaultPrevented())return d;g=clearTimeout(g),e.trigger("onPause"),e.unbind("onClick",l);return d},resume:function(){h||d.play()},stop:function(){d.pause(),h=!0}}),a.each("onBeforePlay,onPlay,onBeforePause,onPause".split(","),function(b,e){a.isFunction(c[e])&&a(d).bind(e,c[e]),d[e]=function(b){return a(d).bind(e,b)}}),c.autopause&&f.getTabs().add(j).add(k).add(f.getPanes()).hover(d.pause,d.resume),c.autoplay&&d.play(),c.clickable&&f.getPanes().click(function(){f.next()});if(!f.getConf().rotate){var m=c.disabledClass;f.getIndex()||k.addClass(m),f.onBeforeClick(function(a,b){k.toggleClass(m,!b),j.toggleClass(m,b==f.getTabs().length-1)})}}a.fn.slideshow=function(d){var e=this.data("slideshow");if(e)return e;d=a.extend({},b.conf,d),this.each(function(){e=new c(a(this),d),a(this).data("slideshow",e)});return d.api?e:this}})(jQuery);
371(function(a){a.tools=a.tools||{version:"v1.2.6"},a.tools.tooltip={conf:{effect:"toggle",fadeOutSpeed:"fast",predelay:0,delay:30,opacity:1,tip:0,fadeIE:!1,position:["top","center"],offset:[0,0],relative:!1,cancelDefault:!0,events:{def:"mouseenter,mouseleave",input:"focus,blur",widget:"focus mouseenter,blur mouseleave",tooltip:"mouseenter,mouseleave"},layout:"<div/>",tipClass:"tooltip"},addEffect:function(a,c,d){b[a]=[c,d]}};var b={toggle:[function(a){var b=this.getConf(),c=this.getTip(),d=b.opacity;d<1&&c.css({opacity:d}),c.show(),a.call()},function(a){this.getTip().hide(),a.call()}],fade:[function(b){var c=this.getConf();!a.browser.msie||c.fadeIE?this.getTip().fadeTo(c.fadeInSpeed,c.opacity,b):(this.getTip().show(),b())},function(b){var c=this.getConf();!a.browser.msie||c.fadeIE?this.getTip().fadeOut(c.fadeOutSpeed,b):(this.getTip().hide(),b())}]};function c(b,c,d){var e=d.relative?b.position().top:b.offset().top,f=d.relative?b.position().left:b.offset().left,g=d.position[0];e-=c.outerHeight()-d.offset[0],f+=b.outerWidth()+d.offset[1],/iPad/i.test(navigator.userAgent)&&(e-=a(window).scrollTop());var h=c.outerHeight()+b.outerHeight();g=="center"&&(e+=h/2),g=="bottom"&&(e+=h),g=d.position[1];var i=c.outerWidth()+b.outerWidth();g=="center"&&(f-=i/2),g=="left"&&(f-=i);return{top:e,left:f}}function d(d,e){var f=this,g=d.add(f),h,i=0,j=0,k=d.attr("title"),l=d.attr("data-tooltip"),m=b[e.effect],n,o=d.is(":input"),p=o&&d.is(":checkbox, :radio, select, :button, :submit"),q=d.attr("type"),r=e.events[q]||e.events[o?p?"widget":"input":"def"];if(!m)throw"Nonexistent effect \""+e.effect+"\"";r=r.split(/,\s*/);if(r.length!=2)throw"Tooltip: bad events configuration for "+q;d.bind(r[0],function(a){clearTimeout(i),e.predelay?j=setTimeout(function(){f.show(a)},e.predelay):f.show(a)}).bind(r[1],function(a){clearTimeout(j),e.delay?i=setTimeout(function(){f.hide(a)},e.delay):f.hide(a)}),k&&e.cancelDefault&&(d.removeAttr("title"),d.data("title",k)),a.extend(f,{show:function(b){if(!h){l?h=a(l):e.tip?h=a(e.tip).eq(0):k?h=a(e.layout).addClass(e.tipClass).appendTo(document.body).hide().append(k):(h=d.next(),h.length||(h=d.parent().next()));if(!h.length)throw"Cannot find tooltip for "+d}if(f.isShown())return f;h.stop(!0,!0);var o=c(d,h,e);e.tip&&h.html(d.data("title")),b=a.Event(),b.type="onBeforeShow",g.trigger(b,[o]);if(b.isDefaultPrevented())return f;
371o=c(d,h,e),h.css({position:"absolute",top:o.top,left:o.left}),n=!0,m[0].call(f,function(){b.type="onShow",n="full",g.trigger(b)});var p=e.events.tooltip.split(/,\s*/);h.data("__set")||(h.unbind(p[0]).bind(p[0],function(){clearTimeout(i),clearTimeout(j)}),p[1]&&!d.is("input:not(:checkbox, :radio), textarea")&&h.unbind(p[1]).bind(p[1],function(a){a.relatedTarget!=d[0]&&d.trigger(r[1].split(" ")[0])}),e.tip||h.data("__set",!0));return f},hide:function(c){if(!h||!f.isShown())return f;c=a.Event(),c.type="onBeforeHide",g.trigger(c);if(!c.isDefaultPrevented()){n=!1,b[e.effect][1].call(f,function(){c.type="onHide",g.trigger(c)});return f}},isShown:function(a){return a?n=="full":n},getConf:function(){return e},getTip:function(){return h},getTrigger:function(){return d}}),a.each("onHide,onBeforeShow,onShow,onBeforeHide".split(","),function(b,c){a.isFunction(e[c])&&a(f).bind(c,e[c]),f[c]=function(b){b&&a(f).bind(c,b);return f}})}a.fn.tooltip=function(b){var c=this.data("tooltip");if(c)return c;b=a.extend(!0,{},a.tools.tooltip.conf,b),typeof b.position=="str
371ing"&&(b.position=b.position.split(/,?\s/)),this.each(function(){c=new d(a(this),b),a(this).data("tooltip",c)});return b.api?c:this}})(jQuery);
372(function(a){var b=a.tools.tooltip;b.dynamic={conf:{classNames:"top right bottom left"}};function c(b){var c=a(window),d=c.width()+c.scrollLeft(),e=c.height()+c.scrollTop();return[b.offset().top<=c.scrollTop(),d<=b.offset().left+b.width(),e<=b.offset().top+b.height(),c.scrollLeft()>=b.offset().left]}function d(a){var b=a.length;while(b--)if(a[b])return!1;return!0}a.fn.dynamic=function(e){typeof e=="number"&&(e={speed:e}),e=a.extend({},b.dynamic.conf,e);var f=a.extend(!0,{},e),g=e.classNames.split(/\s/),h;this.each(function(){var b=a(this).tooltip().onBeforeShow(function(b,e){var i=this.getTip(),j=this.getConf();h||(h=[j.position[0],j.position[1],j.offset[0],j.offset[1],a.extend({},j)]),a.extend(j,h[4]),j.position=[h[0],h[1]],j.offset=[h[2],h[3]],i.css({visibility:"hidden",position:"absolute",top:e.top,left:e.left}).show();var k=a.extend(!0,{},f),l=c(i);if(!d(l)){l[2]&&(a.extend(j,k.top),j.position[0]="top",i.addClass(g[0])),l[3]&&(a.extend(j,k.right),j.position[1]="right",i.addClass(g[1])),l[0]&&(a.extend(j,k.bottom),j.position[0]="bottom",i.addClass(g[2])),l[1]&&(a.extend(j,k.left),j.position[1]="left",i.addClass(g[3]));if(l[0]||l[2])j.offset[0]*=-1;if(l[1]||l[3])j.offset[1]*=-1}i.css({visibility:"visible"}).hide()});b.onBeforeShow(function(){var a=this.getConf(),b=this.getTip();setTimeout(function(){a.position=[h[0],h[1]],a.offset=[h[2],h[3]]},0)}),b.onHide(function(){var a=this.getTip();a.removeClass(e.classNames)}),ret=b});return e.api?ret:this}})(jQuery);
373(function(a){var b=a.tools.tooltip;a.extend(b.conf,{direction:"up",bounce:!1,slideOffset:10,slideInSpeed:200,slideOutSpeed:200,slideFade:!a.browser.msie});var c={up:["-","top"],down:["+","top"],left:["-","left"],right:["+","left"]};b.addEffect("slide",function(a){var b=this.getConf(),d=this.getTip(),e=b.slideFade?{opacity:b.opacity}:{},f=c[b.direction]||c.up;e[f[1]]=f[0]+"="+b.slideOffset,b.slideFade&&d.css({opacity:0}),d.show().animate(e,b.slideInSpeed,a)},function(b){var d=this.getConf(),e=d.slideOffset,f=d.slideFade?{opacity:0}:{},g=c[d.direction]||c.up,h=""+g[0];d.bounce&&(h=h=="+"?"-":"+"),f[g[1]]=h+"="+e,this.getTip().animate(f,d.slideOutSpeed,function(){a(this).hide(),b.call()})})})(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.