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.