PageSourceSearch

https://lafriends.co.uk/Content/tabcss/js/jquery.bootstrap.js

js lafriends.co.uk collected 2026-10-02 02:09:53 UTC 17,501 bytes, 290 lines download raw bytes

1/*!
2 * jQuery twitter bootstrap wizard plugin
3 * Examples and documentation at: http://github.com/VinceG/twitter-bootstrap-wizard
4 * version 1.0
5 * Requires jQuery v1.3.2 or later
6 * Supports Bootstrap 2.2.x, 2.3.x, 3.0
7 * Dual licensed under the MIT and GPL licenses:
8 * http://www.opensource.org/licenses/mit-license.php
9 * http://www.gnu.org/licenses/gpl.html
10 * Authors: Vadim Vincent Gabriel (http://vadimg.com), Jason Gill (www.gilluminate.com)
11 */
12;(function($) {
13var bootstrapWizardCreate = function(element, options) {
14	var element = $(element);
15	var obj = this;
16
17	// selector skips any 'li' elements that do not contain a child with a tab data-toggle
18	var baseItemSelector = 'li:has([data-toggle="tab"])';
19
20	// Merge options with defaults
21	var $settings = $.extend({}, $.fn.bootstrapWizard.defaults, options);
22	var $activeTab = null;
23	var $navigation = null;
24
25	this.rebindClick = function(selector, fn)
26	{
27		selector.unbind('click', fn).bind('click', fn);
28	}
29
30	this.fixNavigationButtons = function() {
31		// Get the current active tab
32		if(!$activeTab.length) {
33			// Select first one
34			$navigation.find('a:first').tab('show');
35			$activeTab = $navigation.find(baseItemSelector + ':first');
36		}
37
38		// See if we're currently in the first/last then disable the previous and last buttons
39		$($settings.previousSelector, element).toggleClass('disabled', (obj.firstIndex() >= obj.currentIndex()));
40		$($settings.nextSelector, element).toggleClass('disabled', (obj.currentIndex() >= obj.navigationLength()));
41
42		// We are unbinding and rebinding to ensure single firing and no double-click errors
43		obj.rebindClick($($settings.nextSelector, element), obj.next);
44		obj.rebindClick($($settings.previousSelector, element), obj.previous);
45		obj.rebindClick($($settings.lastSelector, element), obj.last);
46		obj.rebindClick($($settings.firstSelector, element), obj.first);
47
48		if($settings.onTabShow && typeof $settings.onTabShow === 'function' && $settings.onTabShow($activeTab, $navigation, obj.currentIndex())===false){
49			return false;
50		}
51	};
52
53	this.next = function(e) {
54
55		// If we clicked the last then dont activate this
56		if(element.hasClass('last')) {
57			return false;
58		}
59
60		if($settings.onNext && typeof $settings.onNext === 'function' && $settings.onNext($activeTab, $navigation, obj.nextIndex())===false){
61			return false;
62		}
63
64		// Did we click the last button
65		$index = obj.nextIndex();
66		if($index > obj.navigationLength()) {
67		} else {
68			$navigation.find(baseItemSelector + ':eq('+$index+') a').tab('show');
69		}
70	};
71
72	this.previous = function(e) {
73
74		// If we clicked the first then dont activate this
75		if(element.hasClass('first')) {
76			return false;
77		}
78
79		if($settings.onPrevious && typeof $settings.onPrevious === 'function' && $settings.onPrevious($activeTab, $navigation, obj.previousIndex())===false){
80			return false;
81		}
82
83		$index = obj.previousIndex();
84		if($index < 0) {
85		} else {
86			$navigation.find(baseItemSelector + ':eq('+$index+') a').tab('show');
87		}
88	};
89
90	this.first = function(e) {
91		if($settings.onFirst && typeof $settings.onFirst === 'function' && $settings.onFirst($activeTab, $navigation, obj.firstIndex())===false){
92			return false;
93		}
94
95		// If the element is disabled then we won't do anything
96		if(element.hasClass('disabled')) {
97			return false;
98		}
99		$navigation.find(baseItemSelector + ':eq(0) a').tab('show');
100
101	};
102	this.last = function(e) {
103		if($settings.onLast && typeof $settings.onLast === 'function' && $settings.onLast($activeTab, $navigation, obj.lastIndex())===false){
104			return false;
105		}
106
107		// If the element is disabled then we won't do anything
108		if(element.hasClass('disabled')) {
109			return false;
110		}
111		$navigation.find(baseItemSelector + ':eq('+obj.navigationLength()+') a').tab('show');
112	};
113	this.currentIndex = function() {
114		return $navigation.find(baseItemSelector).index($activeTab);
115	};
116	this.firstIndex = function() {
117		return 0;
118	};
119	this.lastIndex = function() {
120		return obj.navigationLength();
121	};
122	this.getIndex = function(e) {
123		return $navigation.find(baseItemSelector).index(e);
124	};
125	this.nextIndex = function() {
126		return $navigation.find(baseItemSelector).index($activeTab) + 1;
127	};
128	this.previousIndex = function() {
129		return $navigation.find(baseItemSelector).index($activeTab) - 1;
130	};
131	this.navigationLength = function() {
132		return $navigation.find(baseItemSelector).length - 1;
133	};
134	this.activeTab = function() {
135		return $activeTab;
136	};
137	this.nextTab = function() {
138		return $navigation.find(baseItemSelector + ':eq('+(obj.currentIndex()+1)+')').length ? $navigation.find(baseItemSelector + ':eq('+(obj.currentIndex()+1)+')') : null;
139	};
140	this.previousTab = function() {
141		if(obj.currentIndex() <= 0) {
142			return null;
143		}
144		return $navigation.find(baseItemSelector + ':eq('+parseInt(obj.currentIndex()-1)+')');
145	};
146	this.show = function(index) {
147		if (isNaN(index)) {
148			return element.find(baseItemSelector + ' a[href=#' + index + ']').tab('show');
149		}
150		else {
151			return element.find(baseItemSelector + ':eq(' + index + ') a').tab('show');
152		}
153	};
154	this.disable = function(index) {
155		$navigation.find(baseItemSelector + ':eq('+index+')').addClass('disabled');
156	};
157	this.enable = function(index) {
158		$navigation.find(baseItemSelector + ':eq('+index+')').removeClass('disabled');
159	};
160	this.hide = function(index) {
161		$navigation.find(baseItemSelector + ':eq('+index+')').hide();
162	};
163	this.display = function(index) {
164		$navigation.find(baseItemSelector + ':eq('+index+')').show();
165	};
166	this.remove = function(args) {
167		var $index = args[0];
168		var $removeTabPane = typeof args[1] != 'undefined' ? args[1] : false;
169		var $item = $navigation.find(baseItemSelector + ':eq('+$index+')');
170
171		// Remove the tab pane first if needed
172		if($removeTabPane) {
173			var $href = $item.find('a').attr('href');
174			$($href).remove();
175		}
176
177		// Remove menu item
178		$item.remove();
179	};
180
181	var innerTabClick = function (e) {
182		// Get the index of the clicked tab
183		var clickedIndex = $navigation.find(baseItemSelector).index($(e.currentTarget).parent(baseItemSelector));
184		if($settings.onTabClick && typeof $settings.onTabClick === 'function' && $settings.onTabClick($activeTab, $navigation, obj.currentIndex(), clickedIndex)===false){
185			return false;
186		}
187	};
188
189	var innerTabShown = function (e) {  // use shown instead of show to help prevent double firing
190		$element = $(e.target).parent();
191		var nextTab = $navigation.find(baseItemSelector).index($element);
192
193		// If it's disabled then do not change
194		if($element.hasClass('disabled')) {
195			return false;
196		}
197
198		if($settings.onTabChange && typeof $settings.onTabChange === 'function' && $settings.onTabChange($activeTab, $navigation, obj.currentIndex(), nextTab)===false){
199				return false;
200		}
201
202		$activeTab = $element; // activated tab
203		obj.fixNavigationButtons();
204	};
205
206	this.resetWizard = function() {
207
208		// remove the existing handlers
209		$('a[data-toggle="tab"]', $navigation).off('click', innerTabClick);
210		$('a[data-toggle="tab"]', $navigation).off('shown shown.bs.tab', innerTabShown);
211
212		// reset elements based on current state of the DOM
213		$navigation = element.find('ul:first', element);
214		$activeTab = $navigation.find(baseItemSelector + '.active', element);
215
216		// re-add handlers
217		$('a[data-toggle="tab"]', $navigation).on('click', innerTabClick);
218		$('a[data-toggle="tab"]', $navigation).on('shown shown.bs.tab', innerTabShown);
219
220		obj.fixNavigationButtons();
221	};
222
223	$navigation = element.find('ul:first', element);
224	$activeTab = $navigation.find(baseItemSelector + '.active', element);
225
226	if(!$navigation.hasClass($settings.tabClass)) {
227		$navigation.addClass($settings.tabClass);
228	}
229
230	// Load onInit
231	if($settings.onInit && typeof $settings.onInit === 'function'){
232		$settings.onInit($activeTab, $navigation, 0);
233	}
234
235	// Load onShow
236	if($settings.onShow && typeof $settings.onShow === 'function'){
237		$settings.onShow($activeTab, $navigation, obj.nextIndex());
238	}
239
240	$('a[data-toggle="tab"]', $navigation).on('click', innerTabClick);
241
242	// attach to both shown and shown.bs.tab to support Bootstrap versions 2.3.2 and 3.0.0
243	$('a[data-toggle="tab"]', $navigation).on('shown shown.bs.tab', innerTabShown);
244};
245$.fn.bootstrapWizard = function(options) {
246	//expose methods
247	if (typeof options == 'string') {
248		var args = Array.prototype.slice.call(arguments, 1)
249		if(args.length === 1) {
250			args.toString();
251		}
252		return this.data('bootstrapWizard')[options](args);
253	}
254	return this.each(function(index){
255		var element = $(this);
256		// Return early if this element already has a plugin instance
257		if (element.data('bootstrapWizard')) return;
258		// pass options to plugin constructor
259		var wizard = new bootstrapWizardCreate(element, options);
260		// Store plugin object in this element's data
261		element.data('bootstrapWizard', wizard);
262		// and then trigger initial change
263		wizard.fixNavigationButtons();
264	});
265};
266
267// expose options
268$.fn.bootstrapWizard.defaults = {
269	tabClass:         'nav nav-pills',
270	nextSelector:     '.wizard li.next',
271	previousSelector: '.wizard li.previous',
272	firstSelector:    '.wizard li.first',
273	lastSelector:     '.wizard li.last',
274	onShow:           null,
275	onInit:           null,
276	onNext:           null,
277	onPrevious:       null,
278	onLast:           null,
279	onFirst:          null,
280	onTabChange:      null,
281	onTabClick:       null,
282	onTabShow:        null
283};
284
285})(jQuery);
286
287
288//  Material Design Core Functions
289
290 !function(t){function o(t){return"undefined"==typeof t.which?!0:"number"==typeof t.which&&t.which>0?!t.ctrlKey&&!t.metaKey&&!t.altKey&&8!=t.which&&9!=t.which&&13!=t.which&&16!=t.which&&17!=t.which&&20!=t.which&&27!=t.which:!1}function i(o){var i=t(o);i.prop("disabled")||i.closest(".form-group").addClass("is-focused")}function n(o){o.closest("label").hover(function(){var o=t(this).find("input");o.prop("disabled")||i(o)},function(){e(t(this).find("input"))})}function e(o){t(o).closest(".form-group").removeClass("is-focused")}t.expr[":"].notmdproc=function(o){return t(o).data("mdproc")?!1:!0},t.material={options:{validate:!0,input:!0,ripples:!0,checkbox:!0,togglebutton:!0,radio:!0,arrive:!0,autofill:!1,withRipples:[".btn:not
290(.btn-link)",".card-image",".navbar a:not(.withoutripple)",".footer a:not(.withoutripple)",".dropdown-menu a",".nav-tabs a:not(.withoutripple)",".withripple",".pagination li:not(.active):not(.disabled) a:not(.withoutripple)"].join(","),inputElements:"input.form-control, textarea.form-control, select.form-control",checkboxElements:".checkbox > label > input[type=checkbox]",togglebuttonElements:".togglebutton > label > input[type=checkbox]",radioElements:".radio > label > input[type=radio]"},checkbox:function(o){var i=t(o?o:this.options.checkboxElements).filter(":notmdproc").data("mdproc",!0).after("<span class='checkbox-material'><span class='check'></span></span>");n(i)},togglebutton:function(o){var i=t(o?o:this.options.togglebuttonElements).filter(":notmdproc").data("mdproc",!0).after("<span class='toggle'></span>");n(i)},radio:function(o){var i=t(o?o:this.options.radioElements).filter(":notmdproc").data("mdproc",!0).after("<span class='circle'></span><span class='check'></span>");n(i)},input:function(o){t(o?o:this.options.inputElements).filter(":notmdproc").data("mdproc",!0).each(function(){var o=t(this),i=o.closest(".form-group");0===i.length&&(o.wrap("<div class='form-group'></div>"),i=o.closest(".form-group")),o.attr("data-hint")&&(o.after("<p class='help-block'>"+o.attr("data-hint")+"</p>"),o.removeAttr("data-hint"));var n={"input-lg":"form-group-lg","input-sm":"form-group-sm"};if(t.each(n,function(t,n){o.hasClass(t)&&(o.removeClass(t),i.addClass(n))}),o.hasClass("floating-label")){var e=o.attr("placeholder");o.attr("placeholder",null).removeClass("floating-label");var a=o.attr("id"),r="";a&&(r="for='"+a+"'"),i.addClass("label-floating"),o.after("<label "+r+"class='control-label'>"+e+"</label>")}(null===o.val()||"undefined"==o.val()||""===o.val())&&i.addClass("is-empty"),i.append("<span class='material-input'></span>"),i.find("input[type=file]").length>0&&i.addClass("is-fileinput")})},attachInputEventHandlers:function(){var n=this.options.validate;t(document).on("change",".checkbox input[type=checkbox]",function(){t(this).blur()}).on("keydown paste",".form-control",function(i){o(i)&&t(this).closest(".form-group").removeClass("is-empty")}).on("keyup change",".form-control",function(){var o=t(this),i=o.closest(".form-group"),e="undefined"==typeof o[0].checkValidity||o[0].checkValidity();""===o.val()?i.addClass("is-empty"):i.removeClass("is-empty"),n&&(e?i.removeClass("has-error"):i.addClass("has-error"))}).on("focus",".form-control, .form-group.is-fileinput",function(){i(this)}).on("blur",".form-control, .form-group.is-fileinput",function(){e(this)}).on("change",".form-group input",function(){var o=t(this);if("file"!=o.attr("type")){var i=o.closest(".form-group"),n=o.val();n?i.removeClass("is-empty"):i.addClass("is-empty")}}).on("change",".form-group.is-fileinput input[type='file']",function(){var o=t(this),i=o.closest(".form-group"),n="";t.each(this.files,function(t,o){n+=o.name+", "}),n=n.substring(0,n.length-2),n?i.removeClass("is-empty"):i.addClass("is-empty"),i.find("input.form-control[readonly]").val(n)})},ripples:function(o){t(o?o:this.options.withRipples).ripples()},autofill:function(){var o=setInterval(function(){t("input[type!=checkbox]").each(function(){var o=t(this);o.val()&&o.val()!==o.attr("value")&&o.trigger("change")})},100);setTimeout(function(){clearInterval(o)},1e4)},attachAutofillEventHandlers:function(){var o;t(document).on("focus","input",function(){var i=t(this).parents("form").find("input").not("[type=file]");o=setInterval(function(){i.each(function(){var o=t(this);o.val()!==o.attr("value")&&o.trigger("change")})},100)}).on("blur",".form-group input",function(){clearInterval(o)})},init:function(o){this.options=t.extend({},this.options,o);var i=t(document);t.fn.ripples&&this.options.ripples&&this.ripples(),this.options.input&&(this.input(),this.attachInputEventHandlers()),this.options.checkbox&&this.checkbox(),this.options.togglebutton&&this.togglebutton(),this.options.radio&&this.radio(),this.options.autofill&&(this.autofill(),this.attachAutofillEventHandlers()),document.arrive&&this.options.arrive&&(t.fn.ripples&&this.options.ripples&&i.arrive(this.options.withRipples,function(){t.material.ripples(t(this))}),this.options.input&&i.arrive(this.options.inputElements,function(){t.material.input(t(this))}),this.options.checkbox&&i.arrive(this.options.checkboxElements,function(){t.material.checkbox(t(this))}),this.options.radio&&i.arrive(this.options.radioElements,function(){t.material.radio(t(this))}),this.options.togglebutton&&i.arrive(this.options.togglebuttonElements,function(){t.material.togglebutton(t(this))}))}}}(jQuery),function(t,o,i,n){"use strict";function e(o,i){r=this,this.element=t(o),this.options=t.extend({},s,i),this._defaults=s,this._name=a,this.init()}var a="ripples",r=null,s={};e.prototype.init=function(){var i=this.element;i.on("mousedown touchstart",function(n){if(!r.isTouch()||"mousedown"!==n.type){i.find(".ripple-container").length||i.append('<div class="ripple-container"></div>');var e=i.children(".ripple-container"),a=r.getRelY(e,n),s=r.getRelX(e,n);if(a||s){var l=r.getRipplesColor(i),p=t("<div></div>");p.addClass("ripple").css({left:s,top:a,"background-color":l}),e.append(p),function(){return o.getComputedStyle(p[0]).opacity}(),r.rippleOn(i,p),setTimeout(function(){r.rippleEnd(p)},500),i.on("mouseup mouseleave touchend",function(){p.data("mousedown","off"),"off"===p.data("animating")&&r.rippleOut(p)})}}})},e.prototype.getNewSize=function(t,o){return Math.max(t.outerWidth(),t.outerHeight())/o.outerWidth()*2.5},e.prototype.getRelX=function(t,o){var i=t.offset();return r.isTouch()?(o=o.originalEvent,1===o.touches.length?o.touches[0].pageX-i.left:!1):o.pageX-i.left},e.prototype.getRelY=function(t,o){var i=t.offset();return r.isTouch()?(o=o.originalEvent,1===o.touches.length?o.touches[0].pageY-i.top:!1):o.pageY-i.top},e.prototype.getRipplesColor=function(t){var i=t.data("ripple-color")?t.data("ripple-color"):o.getComputedStyle(t[0]).color;return i},e.prototype.hasTransitionSupport=function(){var t=i.body||i.documentElement,o=t.style,e=o.transition!==n||o.WebkitTransition!==n||o.MozTransition!==n||o.MsTransition!==n||o.OTransition!==n;return e},e.prototype.isTouch=function(){return/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)},e.prototype.rippleEnd=function(t){t.data("animating","off"),"off"===t.data("mousedown")&&r.rippleOut(t)},e.prototype.rippleOut=function(t){t.off(),r.hasTransitionSupport()?t.addClass("ripple-out"):t.animate({opacity:0}
290,100,function(){t.trigger("transitionend")}),t.on("transitionend webkitTransitionEnd oTransitionEnd MSTransitionEnd",function(){t.remove()})},e.prototype.rippleOn=function(t,o){var i=r.getNewSize(t,o);r.hasTransitionSupport()?o.css({"-ms-transform":"scale("+i+")","-moz-transform":"scale("+i+")","-webkit-transform":"scale("+i+")",transform:"scale("+i+")"}).addClass("ripple-on").data("animating","on").data("mousedown","on"):o.animate({width:2*Math.max(t.outerWidth(),t.outerHeight()),height:2*Math.max(t.outerWidth(),t.outerHeight()),"margin-left":-1*Math.max(t.outerWidth(),t.outerHeight()),"margin-top":-1*Math.max(t.outerWidth(),t.outerHeight()),opacity:.2},500,function(){o.trigger("transitionend")})},t.fn.ripples=function(o){return this.each(function(){t.data(this,"plugin_"+a)||t.data(this,"plugin_"+a,new e(this,o))})}}(jQuery,window,document);

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.