1/* Generated Fri, 07 Feb 2020 02:45:47 GMT */
vendor: 37,045 bytes, lines 2-8
2/*! 3 * Bootstrap v3.3.7 (http://getbootstrap.com) 4 * Copyright 2011-2016 Twitter, Inc. 5 * Licensed under the MIT license 6 */ 7if("undefined"==typeof jQuery)throw new Error("Bootstrap's JavaScript requires jQuery");+function(a){"use strict";var b=a.fn.jquery.split(" ")[0].split(".");if(b[0]<2&&b[1]<9||1==b[0]&&9==b[1]&&b[2]<1||b[0]>3)throw new Error("Bootstrap's JavaScript requires jQuery version 1.9.1 or higher, but lower than version 4")}(jQuery),+function(a){"use strict";function b(){var a=document.createElement("bootstrap"),b={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var c in b)if(void 0!==a.style[c])return{end:b[c]};return!1}a.fn.emulateTransitionEnd=function(b){var c=!1,d=this;a(this).one("bsTransitionEnd",function(){c=!0});var e=function(){c||a(d).trigger(a.support.transition.end)};return setTimeout(e,b),this},a(function(){a.support.transition=b(),a.support.transition&&(a.event.special.bsTransitionEnd={bindType:a.support.transition.end,delegateType:a.support.transition.end,handle:function(b){if(a(b.target).is(this))return b.handleObj.handler.apply(this,arguments)}})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var c=a(this),e=c.data("bs.alert");e||c.data("bs.alert",e=new d(this)),"string"==typeof b&&e[b].call(c)})}var c='[data-dismiss="alert"]',d=function(b){a(b).on("click",c,this.close)};d.VERSION="3.3.7",d.TRANSITION_DURATION=150,d.prototype.close=function(b){function c(){g.detach().trigger("closed.bs.alert").remove()}var e=a(this),f=e.attr("data-target");f||(f=e.attr("href"),f=f&&f.replace(/.*(?=#[^\s]*$)/,""));var g=a("#"===f?[]:f);b&&b.preventDefault(),g.length||(g=e.closest(".alert")),g.trigger(b=a.Event("close.bs.alert")),b.isDefaultPrevented()||(g.removeClass("in"),a.support.transition&&g.hasClass("fade")?g.one("bsTransitionEnd",c).emulateTransitionEnd(d.TRANSITION_DURATION):c())};var e=a.fn.alert;a.fn.alert=b,a.fn.alert.Constructor=d,a.fn.alert.noConflict=function(){return a.fn.alert=e,this},a(document).on("click.bs.alert.data-api",c,d.prototype.close)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.button"),f="object"==typeof b&&b;e||d.data("bs.button",e=new c(this,f)),"toggle"==b?e.toggle():b&&e.setState(b)})}var c=function(b,d){this.$element=a(b),this.options=a.extend({},c.DEFAULTS,d),this.isLoading=!1};c.VERSION="3.3.7",c.DEFAULTS={loadingText:"loading..."},c.prototype.setState=function(b){var c="disabled",d=this.$element,e=d.is("input")?"val":"html",f=d.data();b+="Text",null==f.resetText&&d.data("resetText",d[e]()),setTimeout(a.proxy(function(){d[e](null==f[b]?this.options[b]:f[b]),"loadingText"==b?(this.isLoading=!0,d.addClass(c).attr(c,c).prop(c,!0)):this.isLoading&&(this.isLoading=!1,d.removeClass(c).removeAttr(c).prop(c,!1))},this),0)},c.prototype.toggle=function(){var a=!0,b=this.$element.closest('[data-toggle="buttons"]');if(b.length){var c=this.$element.find("input");"radio"==c.prop("type")?(c.prop("checked")&&(a=!1),b.find(".active").removeClass("active"),this.$element.addClass("active")):"checkbox"==c.prop("type")&&(c.prop("checked")!==this.$element.hasClass("active")&&(a=!1),this.$element.toggleClass("active")),c.prop("checked",this.$element.hasClass("active")),a&&c.trigger("change")}else this.$element.attr("aria-pressed",!this.$element.hasClass("active")),this.$element.toggleClass("active")};var d=a.fn.button;a.fn.button=b,a.fn.button.Constructor=c,a.fn.button.noConflict=function(){return a.fn.button=d,this},a(document).on("click.bs.button.data-api",'[data-toggle^="button"]',function(c){var d=a(c.target).closest(".btn");b.call(d,"toggle"),a(c.target).is('input[type="radio"], input[type="checkbox"]')||(c.preventDefault(),d.is("input,button")?d.trigger("focus"):d.find("input:visible,button:visible").first().trigger("focus"))}).on("focus.bs.button.data-api blur.bs.button.data-api",'[data-toggle^="button"]',function(b){a(b.target).closest(".btn").toggleClass("focus",/^focus(in)?$/.test(b.type))})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.carousel"),f=a.extend({},c.DEFAULTS,d.data(),"object"==typeof b&&b),g="string"==typeof b?b:f.slide;e||d.data("bs.carousel",e=new c(this,f)),"number"==typeof b?e.to(b):g?e[g]():f.interval&&e.pause().cycle()})}var c=function(b,c){this.$element=a(b),this.$indicators=this.$element.find(".carousel-indicators"),this.options=c,this.paused=null,this.sliding=null,this.interval=null,this.$active=null,this.$items=null,this.options.keyboard&&this.$element.on("keydown.bs.carousel",a.proxy(this.keydown,this)),"hover"==this.options.pause&&!("ontouchstart"in document.documentElement)&&this.$element.on("mouseenter.bs.carousel",a.proxy(this.pause,this)).on("mouseleave.bs.carousel",a.proxy(this.cycle,this))};c.VERSION="3.3.7",c.TRANSITION_DURATION=600,c.DEFAULTS={interval:5e3,pause:"hover",wrap:!0,keyboard:!0},c.prototype.keydown=function(a){if(!/input|textarea/i.test(a.target.tagName)){switch(a.which){case 37:this.prev();break;case 39:this.next();break;default:return}a.preventDefault()}},c.prototype.cycle=function(b){return b||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(a.proxy(this.next,this),this.options.interval)),this},c.prototype.getItemIndex=function(a){return this.$items=a.parent().children(".item"),this.$items.index(a||this.$active)},c.prototype.getItemForDirection=function(a,b){var c=this.getItemIndex(b),d="prev"==a&&0===c||"next"==a&&c==this.$items.length-1;if(d&&!this.options.wrap)return b;var e="prev"==a?-1:1,f=(c+e)%this.$items.length;return this.$items.eq(f)},c.prototype.to=function(a){var b=this,c=this.getItemIndex(this.$active=this.$element.find(".item.active"));if(!(a>this.$items.length-1||a<0))return this.sliding?this.$element.one("slid.bs.carousel",function(){b.to(a)}):c==a?this.pause().cycle():this.slide(a>c?"next":"prev",this.$items.eq(a))},c.prototype.pause=function(b){return b||(this.paused=!0),this.$element.find(".next, .prev").length&&a.support.transition&&(this.$element.trigger(a.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},c.prototype.next=function(){if(!this.sliding)return this.slide("next")},c.prototype.prev=function(){if(!this.sliding)return this.slide("prev")},c.prototype.slide=function(b,d){var e=this.$element.find(".item.active"),f=d||this.getItemForDirection(b,e),g=this.interval,h="next"==b?"left":"right",i=this;if(f.hasClass("active"))return this.sliding=!1;var j=f[0],k=a.Event("slide.bs.carousel",{relatedTarget:j,direction:h});if(this.$element.trigger(k),!k.isDefaultPrevented()){if(this.sliding=!0,g&&this.pause(),this.$indicators.length){this.$indicators.find(".active").removeClass("active");var l=a(this.$indicators.children()[this.getItemIndex(f)]);l&&l.addClass("active")}var m=a.Event("slid.bs.carousel",{relatedTarget:j,direction:h});return a.support.transition&&this.$element.hasClass("slide")?(f.addClass(b),f[0].offsetWidth,e.addClass(h),f.addClass(h),e.one("bsTransitionEnd",function(){f.removeClass([b,h].join(" ")).addClass("active"),e.removeClass(["active",h].join(" ")),i.sliding=!1,setTimeout(function(){i.$element.trigger(m)},0)}).emulateTransitionEnd(c.TRANSITION_DURATION)):(e.removeClass("active"),f.addClass("active"),this.sliding=!1,this.$element.trigger(m)),g&&this.cycle(),this}};var d=a.fn.carousel;a.fn.carousel=b,a.fn.carousel.Constructor=c,a.fn.carousel.noConflict=function(){return a.fn.carousel=d,this};var e=function(c){var d,e=a(this),f=a(e.attr("data-target")||(d=e.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,""));if(f.hasClass("carousel")){var g=a.extend({},f.data(),e.data()),h=e.attr("data-slide-to");h&&(g.interval=!1),b.call(f,g),h&&f.data("bs.carousel").to(h),c.preventDefault()}};a(document).on("click.bs.carousel.data-api","[data-slide]",e).on("click.bs.carousel.data-api","[data-slide-to]",e),a(window).on("load",function(){a('[data-ride="carousel"]').each(function(){var c=a(this);b.call(c,c.data())})})}(jQuery),+function(a){"use strict";function b(b){var c,d=b.attr("data-target")||(c=b.attr("href"))&&c.replace(/.*(?=#[^\s]+$)/,"");return a(d)}function c(b){return this.each(function(){var c=a(this),e=c.data("bs.collapse"),f=a.extend({},d.DEFAULTS,c.data(),"object"==typeof b&&b);!e&&f.toggle&&/show|hide/.test(b)&&(f.toggle=!1),e||c.data("bs.collapse",e=new d(this,f)),"string"==typeof b&&e[b]()})}var d=function(b,c){this.$element=a(b),this.options=a.extend({},d.DEFAULTS,c),this.$trigger=a('[data-toggle="collapse"][href="#'+b.id+'"],[data-toggle="collapse"][data-target="#'+b.id+'"]'),this.transitioning=null,this.options.parent?this.$parent=this.getParent():this.addAriaAndCollapsedClass(this.$element,this.$trigger),this.options.toggle&&this.toggle()};d.VERSION="3.3.7",d.TRANSITION_DURATION=350,d.DEFAULTS={toggle:!0},d.prototype.dimension=function(){var a=this.$element.hasClass("width");return a?"width":"height"},d.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var b,e=this.$parent&&this.$parent.children(".panel").children(".in, .collapsing");if(!(e&&e.length&&(b=e.data("bs.collapse"),b&&b.transitioning))){var f=a.Event("show.bs.collapse");if(this.$element.trigger(f),!f.isDefaultPrevented()){e&&e.length&&(c.call(e,"hide"),b||e.data("bs.collapse",null));var g=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[g](0).attr("aria-expanded",!0),this.$trigger.removeClass("collapsed").attr("aria-expanded",!0),this.transitioning=1;var h=function(){this.$element.removeClass("collapsing").addClass("collapse in")[g](""),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!a.support.transition)return h.call(this);var i=a.camelCase(["scroll",g].join("-"));this.$element.one("bsTransitionEnd",a.proxy(h,this)).emulateTransitionEnd(d.TRANSITION_DURATION)[g](this.$element[0][i])}}}},d.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var b=a.Event("hide.bs.collapse");if(this.$element.trigger(b),!b.isDefaultPrevented()){var c=this.dimension();this.$element[c](this.$element[c]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse in").attr("aria-expanded",!1),this.$trigger.addClass("collapsed").attr("aria-expanded",!1),this.transitioning=1;var e=function(){this.transitioning=0,this.$element.removeClass("collapsing").addClass("collapse").trigger("hidden.bs.collapse")};return a.support.transition?void this.$element[c](0).one("bsTransitionEnd",a.proxy(e,this)).emulateTransitionEnd(d.TRANSITION_DURATION):e.call(this)}}},d.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()},d.prototype.getParent=function(){return a(this.options.parent).find('[data-toggle="collapse"][data-parent="'+this.options.parent+'"]').each(a.proxy(function(c,d){var e=a(d);this.addAriaAndCollapsedClass(b(e),e)},this)).end()},d.prototype.addAriaAndCollapsedClass=function(a,b){var c=a.hasClass("in");a.attr("aria-expanded",c),b.toggleClass("collapsed",!c).attr("aria-expanded",c)};var e=a.fn.collapse;a.fn.collapse=c,a.fn.collapse.Constructor=d,a.fn.collapse.noConflict=function(){return a.fn.collapse=e,this},a(document).on("click.bs.collapse.data-api",'[data-toggle="collapse"]',function(d){var e=a(this);e.attr("data-target")||d.preventDefault();var f=b(e),g=f.data("bs.collapse"),h=g?"toggle":e.data();c.call(f,h)})}(jQuery),+function(a){"use strict";function b(b){var c=b.attr("data-target");c||(c=b.attr("href"),c=c&&/#[A-Za-z]/.test(c)&&c.replace(/.*(?=#[^\s]*$)/,""));var d=c&&a(c);return d&&d.length?d:b.parent()}function c(c){c&&3===c.which||(a(e).remove(),a(f).each(function(){var d=a(this),e=b(d),f={relatedTarget:this};e.hasClass("open")&&(c&&"click"==c.type&&/input|textarea/i.test(c.target.tagName)&&a.contains(e[0],c.target)||(e.trigger(c=a.Event("hide.bs.dropdown",f)),c.isDefaultPrevented()||(d.attr("aria-expanded","false"),e.removeClass("open").trigger(a.Event("hidden.bs.dropdown",f)))))}))}function d(b){return this.each(function(){var c=a(this),d=c.data("bs.dropdown");d||c.data("bs.dropdown",d=new g(this)),"string"==typeof b&&d[b].call(c)})}var e=".dropdown-backdrop",f='[data-toggle="dropdown"]',g=function(b){a(b).on("click.bs.dropdown",this.toggle)};g.VERSION="3.3.7",g.prototype.toggle=function(d){var e=a(this);if(!e.is(".disabled, :disabled")){var f=b(e),g=f.hasClass("open");if(c(),!g){"ontouchstart"in document.documentElement&&!f.closest(".navbar-nav").length&&a(document.createElement("div")).addClass("dropdown-backdrop").insertAfter(a(this)).on("click",c);var h={relatedTarget:this};if(f.trigger(d=a.Event("show.bs.dropdown",h)),d.isDefaultPrevented())return;e.trigger("focus").attr("aria-expanded","true"),f.toggleClass("open").trigger(a.Event("shown.bs.dropdown",h))}return!1}},g.prototype.keydown=function(c){if(/(38|40|27|32)/.test(c.which)&&!/input|textarea/i.test(c.target.tagName)){var d=a(this);if(c.preventDefault(),c.stopPropagation(),!d.is(".disabled, :disabled")){var e=b(d),g=e.hasClass("open");if(!g&&27!=c.which||g&&27==c.which)return 27==c.which&&e.find(f).trigger("focus"),d.trigger("click");var h=" li:not(.disabled):visible a",i=e.find(".dropdown-menu"+h);if(i.length){var j=i.index(c.target);38==c.which&&j>0&&j--,40==c.which&&j<i.length-1&&j++,~j||(j=0),i.eq(j).trigger("focus")}}}};var h=a.fn.dropdown;a.fn.dropdown=d,a.fn.dropdown.Constructor=g,a.fn.dropdown.noConflict=function(){return a.fn.dropdown=h,this},a(document).on("click.bs.dropdown.data-api",c).on("click.bs.dropdown.data-api",".dropdown form",function(a){a.stopPropagation()}).on("click.bs.dropdown.data-api",f,g.prototype.toggle).on("keydown.bs.dropdown.data-api",f,g.prototype.keydown).on("keydown.bs.dropdown.data-api",".dropdown-menu",g.prototype.keydown)}(jQuery),+function(a){"use strict";function b(b,d){return this.each(function(){var e=a(this),f=e.data("bs.modal"),g=a.extend({},c.DEFAULTS,e.data(),"object"==typeof b&&b);f||e.data("bs.modal",f=new c(this,g)),"string"==typeof b?f[b](d):g.show&&f.show(d)})}var c=function(b,c){this.options=c,this.$body=a(document.body),this.$element=a(b),this.$dialog=this.$element.find(".modal-dialog"),this.$backdrop=null,this.isShown=null,this.originalBodyPad=null,this.scrollbarWidth=0,this.ignoreBackdropClick=!1,this.options.remote&&this.$element.find(".modal-content").load(this.options.remote,a.proxy(function(){this.$element.trigger("loaded.bs.modal")},this))};c.VERSION="3.3.7",c.TRANSITION_DURATION=300,c.BACKDROP_TRANSITION_DURATION=150,c.DEFAULTS={backdrop:!0,keyboard:!0,show:!0},c.prototype.toggle=function(a){return this.isShown?this.hide():this.show(a)},c.prototype.show=function(b){var d=this,e=a.Event("show.bs.modal",{relatedTarget:b});this.$element.trigger(e),this.isShown||e.isDefaultPrevented()||(this.isShown=!0,this.checkScrollbar(),this.setScrollbar(),this.$body.addClass("modal-open"),this.escape(),this.resize(),this.$element.on("click.dismiss.bs.modal",'[data-dismiss="modal"]',a.proxy(this.hide,this)),this.$dialog.on("mousedown.dismiss.bs.modal",function(){d.$element.one("mouseup.dismiss.bs.modal",function(b){a(b.target).is(d.$element)&&(d.ignoreBackdropClick=!0)})}),this.backdrop(function(){var e=a.support.transition&&d.$element.hasClass("fade");d.$element.parent().length||d.$element.appendTo(d.$body),d.$element.show().scrollTop(0),d.adjustDialog(),e&&d.$element[0].offsetWidth,d.$element.addClass("in"),d.enforceFocus();var f=a.Event("shown.bs.modal",{relatedTarget:b});e?d.$dialog.one("bsTransitionEnd",function(){d.$element.trigger("focus").trigger(f)}).emulateTransitionEnd(c.TRANSITION_DURATION):d.$element.trigger("focus").trigger(f)}))},c.prototype.hide=function(b){b&&b.preventDefault(),b=a.Event("hide.bs.modal"),this.$element.trigger(b),this.isShown&&!b.isDefaultPrevented()&&(this.isShown=!1,this.escape(),this.resize(),a(document).off("focusin.bs.modal"),this.$element.removeClass("in").off("click.dismiss.bs.modal").off("mouseup.dismiss.bs.modal"),this.$dialog.off("mousedown.dismiss.bs.modal"),a.support.transition&&this.$element.hasClass("fade")?this.$element.one("bsTransitionEnd",a.proxy(this.hideModal,this)).emulateTransitionEnd(c.TRANSITION_DURATION):this.hideModal())},c.prototype.enforceFocus=function(){a(document).off("focusin.bs.modal").on("focusin.bs.modal",a.proxy(function(a){document===a.target||this.$element[0]===a.target||this.$element.has(a.target).length||this.$element.trigger("focus")},this))},c.prototype.escape=function(){this.isShown&&this.options.keyboard?this.$element.on("keydown.dismiss.bs.modal",a.proxy(function(a){27==a.which&&this.hide()},this)):this.isShown||this.$element.off("keydown.dismiss.bs.modal")},c.prototype.resize=function(){this.isShown?a(window).on("resize.bs.modal",a.proxy(this.handleUpdate,this)):a(window).off("resize.bs.modal")},c.prototype.hideModal=function(){var a=this;this.$element.hide(),this.backdrop(function(){a.$body.removeClass("modal-open"),a.resetAdjustments(),a.resetScrollbar(),a.$element.trigger("hidden.bs.modal")})},c.prototype.removeBackdrop=function(){this.$backdrop&&this.$backdrop.remove(),this.$backdrop=null},c.prototype.backdrop=function(b){var d=this,e=this.$element.hasClass("fade")?"fade":"";if(this.isShown&&this.options.backdrop){var f=a.support.transition&&e;if(this.$backdrop=a(document.createElement("div")).addClass("modal-backdrop "+e).appendTo(this.$body),this.$element.on("click.dismiss.bs.modal",a.proxy(function(a){return this.ignoreBackdropClick?void(this.ignoreBackdropClick=!1):void(a.target===a.currentTarget&&("static"==this.options.backdrop?this.$element[0].focus():this.hide()))},this)),f&&this.$backdrop[0].offsetWidth,this.$backdrop.addClass("in"),!b)return;f?this.$backdrop.one("bsTransitionEnd",b).emulateTransitionEnd(c.BACKDROP_TRANSITION_DURATION):b()}else if(!this.isShown&&this.$backdrop){this.$backdrop.removeClass("in");var g=function(){d.removeBackdrop(),b&&b()};a.support.transition&&this.$element.hasClass("fade")?this.$backdrop.one("bsTransitionEnd",g).emulateTransitionEnd(c.BACKDROP_TRANSITION_DURATION):g()}else b&&b()},c.prototype.handleUpdate=function(){this.adjustDialog()},c.prototype.adjustDialog=function(){var a=this.$element[0].scrollHeight>document.documentElement.clientHeight;this.$element.css({paddingLeft:!this.bodyIsOverflowing&&a?this.scrollbarWidth:"",paddingRight:this.bodyIsOverflowing&&!a?this.scrollbarWidth:""})},c.prototype.resetAdjustments=function(){this.$element.css({paddingLeft:"",paddingRight:""})},c.prototype.checkScrollbar=function(){var a=window.innerWidth;if(!a){var b=document.documentElement.getBoundingClientRect();a=b.right-Math.abs(b.left)}this.bodyIsOverflowing=document.body.clientWidth<a,this.scrollbarWidth=this.measureScrollbar()},c.prototype.setScrollbar=function(){var a=parseInt(this.$body.css("padding-right")||0,10);this.originalBodyPad=document.body.style.paddingRight||"",this.bodyIsOverflowing&&this.$body.css("padding-right",a+this.scrollbarWidth)},c.prototype.resetScrollbar=function(){this.$body.css("padding-right",this.originalBodyPad)},c.prototype.measureScrollbar=function(){var a=document.createElement("div");a.className="modal-scrollbar-measure",this.$body.append(a);var b=a.offsetWidth-a.clientWidth;return this.$body[0].removeChild(a),b};var d=a.fn.modal;a.fn.modal=b,a.fn.modal.Constructor=c,a.fn.modal.noConflict=function(){return a.fn.modal=d,this},a(document).on("click.bs.modal.data-api",'[data-toggle="modal"]',function(c){var d=a(this),e=d.attr("href"),f=a(d.attr("data-target")||e&&e.replace(/.*(?=#[^\s]+$)/,"")),g=f.data("bs.modal")?"toggle":a.extend({remote:!/#/.test(e)&&e},f.data(),d.data());d.is("a")&&c.preventDefault(),f.one("show.bs.modal",function(a){a.isDefaultPrevented()||f.one("hidden.bs.modal",function(){d.is(":visible")&&d.trigger("focus")})}),b.call(f,g,this)})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.tooltip"),f="object"==typeof b&&b;!e&&/destroy|hide/.test(b)||(e||d.data("bs.tooltip",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.type=null,this.options=null,this.enabled=null,this.timeout=null,this.hoverState=null,this.$element=null,this.inState=null,this.init("tooltip",a,b)};c.VERSION="3.3.7",c.TRANSITION_DURATION=150,c.DEFAULTS={animation:!0,placement:"top",selector:!1,template:'<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',trigger:"hover focus",title:"",delay:0,html:!1,container:!1,viewport:{selector:"body",padding:0}},c.prototype.init=function(b,c,d){if(this.enabled=!0,this.type=b,this.$element=a(c),this.options=this.getOptions(d),this.$viewport=this.options.viewport&&a(a.isFunction(this.options.viewport)?this.options.viewport.call(this,this.$element):this.options.viewport.selector||this.options.viewport),this.inState={click:!1,hover:!1,focus:!1},this.$element[0]instanceof document.constructor&&!this.options.selector)throw new Error("`selector` option must be specified when initializing "+this.type+" on the window.document object!");for(var e=this.options.trigger.split(" "),f=e.length;f--;){var g=e[f];if("click"==g)this.$element.on("click."+this.type,this.options.selector,a.proxy(this.toggle,this));else if("manual"!=g){var h="hover"==g?"mouseenter":"focusin",i="hover"==g?"mouseleave":"focusout";this.$element.on(h+"."+this.type,this.options.selector,a.proxy(this.enter,this)),this.$element.on(i+"."+this.type,this.options.selector,a.proxy(this.leave,this))}}this.options.selector?this._options=a.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.getOptions=function(b){return b=a.extend({},this.getDefaults(),this.$element.data(),b),b.delay&&"number"==typeof b.delay&&(b.delay={show:b.delay,hide:b.delay}),b},c.prototype.getDelegateOptions=function(){var b={},c=this.getDefaults();return this._options&&a.each(this._options,function(a,d){c[a]!=d&&(b[a]=d)}),b},c.prototype.enter=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),b instanceof a.Event&&(c.inState["focusin"==b.type?"focus":"hover"]=!0),c.tip().hasClass("in")||"in"==c.hoverState?void(c.hoverState="in"):(clearTimeout(c.timeout),c.hoverState="in",c.options.delay&&c.options.delay.show?void(c.timeout=setTimeout(function(){"in"==c.hoverState&&c.show()},c.options.delay.show)):c.show())},c.prototype.isInStateTrue=function(){for(var a in this.inState)if(this.inState[a])return!0;return!1},c.prototype.leave=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);if(c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),b instanceof a.Event&&(c.inState["focusout"==b.type?"focus":"hover"]=!1),!c.isInStateTrue())return clearTimeout(c.timeout),c.hoverState="out",c.options.delay&&c.options.delay.hide?void(c.timeout=setTimeout(function(){"out"==c.hoverState&&c.hide()},c.options.delay.hide)):c.hide()},c.prototype.show=function(){var b=a.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(b);var d=a.contains(this.$element[0].ownerDocument.documentElement,this.$element[0]);if(b.isDefaultPrevented()||!d)return;var e=this,f=this.tip(),g=this.getUID(this.type);this.setContent(),f.attr("id",g),this.$element.attr("aria-describedby",g),this.options.animation&&f.addClass("fade");var h="function"==typeof this.options.placement?this.options.placement.call(this,f[0],this.$element[0]):this.options.placement,i=/\s?auto?\s?/i,j=i.test(h);j&&(h=h.replace(i,"")||"top"),f.detach().css({top:0,left:0,display:"block"}).addClass(h).data("bs."+this.type,this),this.options.container?f.appendTo(this.options.container):f.insertAfter(this.$element),this.$element.trigger("inserted.bs."+this.type);var k=this.getPosition(),l=f[0].offsetWidth,m=f[0].offsetHeight;if(j){var n=h,o=this.getPosition(this.$viewport);h="bottom"==h&&k.bottom+m>o.bottom?"top":"top"==h&&k.top-m<o.top?"bottom":"right"==h&&k.right+l>o.width?"left":"left"==h&&k.left-l<o.left?"right":h,f.removeClass(n).addClass(h)}var p=this.getCalculatedOffset(h,k,l,m);this.applyPlacement(p,h);var q=function(){var a=e.hoverState;e.$element.trigger("shown.bs."+e.type),e.hoverState=null,"out"==a&&e.leave(e)};a.support.transition&&this.$tip.hasClass("fade")?f.one("bsTransitionEnd",q).emulateTransitionEnd(c.TRANSITION_DURATION):q()}},c.prototype.applyPlacement=function(b,c){var d=this.tip(),e=d[0].offsetWidth,f=d[0].offsetHeight,g=parseInt(d.css("margin-top"),10),h=parseInt(d.css("margin-left"),10);isNaN(g)&&(g=0),isNaN(h)&&(h=0),b.top+=g,b.left+=h,a.offset.setOffset(d[0],a.extend({using:function(a){d.css({top:Math.round(a.top),left:Math.round(a.left)})}},b),0),d.addClass("in");var i=d[0].offsetWidth,j=d[0].offsetHeight;"top"==c&&j!=f&&(b.top=b.top+f-j);var k=this.getViewportAdjustedDelta(c,b,i,j);k.left?b.left+=k.left:b.top+=k.top;var l=/top|bottom/.test(c),m=l?2*k.left-e+i:2*k.top-f+j,n=l?"offsetWidth":"offsetHeight";d.offset(b),this.replaceArrow(m,d[0][n],l)},c.prototype.replaceArrow=function(a,b,c){this.arrow().css(c?"left":"top",50*(1-a/b)+"%").css(c?"top":"left","")},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle();a.find(".tooltip-inner")[this.options.html?"html":"text"](b),a.removeClass("fade in top bottom left right")},c.prototype.hide=function(b){function d(){"in"!=e.hoverState&&f.detach(),e.$element&&e.$element.removeAttr("aria-describedby").trigger("hidden.bs."+e.type),b&&b()}var e=this,f=a(this.$tip),g=a.Event("hide.bs."+this.type);if(this.$element.trigger(g),!g.isDefaultPrevented())return f.removeClass("in"),a.support.transition&&f.hasClass("fade")?f.one("bsTransitionEnd",d).emulateTransitionEnd(c.TRANSITION_DURATION):d(),this.hoverState=null,this},c.prototype.fixTitle=function(){var a=this.$element;(a.attr("title")||"string"!=typeof a.attr("data-original-title"))&&a.attr("data-original-title",a.attr("title")||"").attr("title","")},c.prototype.hasContent=function(){return this.getTitle()},c.prototype.getPosition=function(b){b=b||this.$element;var c=b[0],d="BODY"==c.tagName,e=c.getBoundingClientRect();null==e.width&&(e=a.extend({},e,{width:e.right-e.left,height:e.bottom-e.top}));var f=window.SVGElement&&c instanceof window.SVGElement,g=d?{top:0,left:0}:f?null:b.offset(),h={scroll:d?document.documentElement.scrollTop||document.body.scrollTop:b.scrollTop()},i=d?{width:a(window).width(),height:a(window).height()}:null;return a.extend({},e,h,i,g)},c.prototype.getCalculatedOffset=function(a,b,c,d){return"bottom"==a?{top:b.top+b.height,left:b.left+b.width/2-c/2}:"top"==a?{top:b.top-d,left:b.left+b.width/2-c/2}:"left"==a?{top:b.top+b.height/2-d/2,left:b.left-c}:{top:b.top+b.height/2-d/2,left:b.left+b.width}},c.prototype.getViewportAdjustedDelta=function(a,b,c,d){var e={top:0,left:0};if(!this.$viewport)return e;var f=this.options.viewport&&this.options.viewport.padding||0,g=this.getPosition(this.$viewport);if(/right|left/.test(a)){var h=b.top-f-g.scroll,i=b.top+f-g.scroll+d;h<g.top?e.top=g.top-h:i>g.top+g.height&&(e.top=g.top+g.height-i)}else{var j=b.left-f,k=b.left+f+c;j<g.left?e.left=g.left-j:k>g.right&&(e.left=g.left+g.width-k)}return e},c.prototype.getTitle=function(){var a,b=this.$element,c=this.options;return a=b.attr("data-original-title")||("function"==typeof c.title?c.title.call(b[0]):c.title)},c.prototype.getUID=function(a){do a+=~~(1e6*Math.random());while(document.getElementById(a));return a},c.prototype.tip=function(){if(!this.$tip&&(this.$tip=a(this.options.template),1!=this.$tip.length))throw new Error(this.type+" `template` option must consist of exactly 1 top-level element!");return this.$tip},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},c.prototype.enable=function(){this.enabled=!0},c.prototype.disable=function(){this.enabled=!1},c.prototype.toggleEnabled=function(){this.enabled=!this.enabled},c.prototype.toggle=function(b){var c=this;b&&(c=a(b.currentTarget).data("bs."+this.type),c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c))),b?(c.inState.click=!c.inState.click,c.isInStateTrue()?c.enter(c):c.leave(c)):c.tip().hasClass("in")?c.leave(c):c.enter(c)},c.prototype.destroy=function(){var a=this;clearTimeout(this.timeout),this.hide(function(){a.$element.off("."+a.type).removeData("bs."+a.type),a.$tip&&a.$tip.detach(),a.$tip=null,a.$arrow=null,a.$viewport=null,a.$element=null})};var d=a.fn.tooltip;a.fn.tooltip=b,a.fn.tooltip.Constructor=c,a.fn.tooltip.noConflict=function(){return a.fn.tooltip=d,this}}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.popover"),f="object"==typeof b&&b;!e&&/destroy|hide/.test(b)||(e||d.data("bs.popover",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.init("popover",a,b)};if(!a.fn.tooltip)throw new Error("Popover requires tooltip.js");c.VERSION="3.3.7",c.DEFAULTS=a.extend({},a.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:'<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'}),c.prototype=a.extend({},a.fn.tooltip.Constructor.prototype),c.prototype.constructor=c,c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle(),c=this.getContent();a.find(".popover-title")[this.options.html?"html":"text"](b),a.find(".popover-content").children().detach().end()[this.options.html?"string"==typeof c?"html":"append":"text"](c),a.removeClass("fade top bottom left right in"),a.find(".popover-title").html()||a.find(".popover-title").hide()},c.prototype.hasContent=function(){return this.getTitle()||this.getContent()},c.prototype.getContent=function(){var a=this.$element,b=this.options;return a.attr("data-content")||("function"==typeof b.content?b.content.call(a[0]):b.content)},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")};var d=a.fn.popover;a.fn.popover=b,a.fn.popover.Constructor=c,a.fn.popover.noConflict=function(){return a.fn.popover=d,this}}(jQuery),+function(a){"use strict";function b(c,d){this.$body=a(document.body),this.$scrollElement=a(a(c).is(document.body)?window:c),this.options=a.extend({},b.DEFAULTS,d),this.selector=(this.options.target||"")+" .nav li > a",this.offsets=[],this.targets=[],this.activeTarget=null,this.scrollHeight=0,this.$scrollElement.on("scroll.bs.scrollspy",a.proxy(this.process,this)),this.refresh(),this.process()}function c(c){return this.each(function(){var d=a(this),e=d.data("bs.scrollspy"),f="object"==typeof c&&c;e||d.data("bs.scrollspy",e=new b(this,f)),"string"==typeof c&&e[c]()})}b.VERSION="3.3.7",b.DEFAULTS={offset:10},b.prototype.getScrollHeight=function(){return this.$scrollElement[0].scrollHeight||Math.max(this.$body[0].scrollHeight,document.documentElement.scrollHeight)},b.prototype.refresh=function(){var b=this,c="offset",d=0;this.offsets=[],this.targets=[],this.scrollHeight=this.getScrollHeight(),a.isWindow(this.$scrollElement[0])||(c="position",d=this.$scrollElement.scrollTop()),this.$body.find(this.selector).map(function(){var b=a(this),e=b.data("target")||b.attr("href"),f=/^#./.test(e)&&a(e);return f&&f.length&&f.is(":visible")&&[[f[c]().top+d,e]]||null}).sort(function(a,b){return a[0]-b[0]}).each(function(){b.offsets.push(this[0]),b.targets.push(this[1])})},b.prototype.process=function(){var a,b=this.$scrollElement.scrollTop()+this.options.offset,c=this.getScrollHeight(),d=this.options.offset+c-this.$scrollElement.height(),e=this.offsets,f=this.targets,g=this.activeTarget;if(this.scrollHeight!=c&&this.refresh(),b>=d)return g!=(a=f[f.length-1])&&this.activate(a);if(g&&b<e[0])return this.activeTarget=null,this.clear();for(a=e.length;a--;)g!=f[a]&&b>=e[a]&&(void 0===e[a+1]||b<e[a+1])&&this.activate(f[a])},b.prototype.activate=function(b){ 8this.activeTarget=b,this.clear();var c=this.selector+'[data-target="'+b+'"],'+this.selector+'[href="'+b+'"]',d=a(c).parents("li").addClass("active");d.parent(".dropdown-menu").length&&(d=d.closest("li.dropdown").addClass("active")),d.trigger("activate.bs.scrollspy")},b.prototype.clear=function(){a(this.selector).parentsUntil(this.options.target,".active").removeClass("active")};var d=a.fn.scrollspy;a.fn.scrollspy=c,a.fn.scrollspy.Constructor=b,a.fn.scrollspy.noConflict=function(){return a.fn.scrollspy=d,this},a(window).on("load.bs.scrollspy.data-api",function(){a('[data-spy="scroll"]').each(function(){var b=a(this);c.call(b,b.data())})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.tab");e||d.data("bs.tab",e=new c(this)),"string"==typeof b&&e[b]()})}var c=function(b){this.element=a(b)};c.VERSION="3.3.7",c.TRANSITION_DURATION=150,c.prototype.show=function(){var b=this.element,c=b.closest("ul:not(.dropdown-menu)"),d=b.data("target");if(d||(d=b.attr("href"),d=d&&d.replace(/.*(?=#[^\s]*$)/,"")),!b.parent("li").hasClass("active")){var e=c.find(".active:last a"),f=a.Event("hide.bs.tab",{relatedTarget:b[0]}),g=a.Event("show.bs.tab",{relatedTarget:e[0]});if(e.trigger(f),b.trigger(g),!g.isDefaultPrevented()&&!f.isDefaultPrevented()){var h=a(d);this.activate(b.closest("li"),c),this.activate(h,h.parent(),function(){e.trigger({type:"hidden.bs.tab",relatedTarget:b[0]}),b.trigger({type:"shown.bs.tab",relatedTarget:e[0]})})}}},c.prototype.activate=function(b,d,e){function f(){g.removeClass("active").find("> .dropdown-menu > .active").removeClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!1),b.addClass("active").find('[data-toggle="tab"]').attr("aria-expanded",!0),h?(b[0].offsetWidth,b.addClass("in")):b.removeClass("fade"),b.parent(".dropdown-menu").length&&b.closest("li.dropdown").addClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!0),e&&e()}var g=d.find("> .active"),h=e&&a.support.transition&&(g.length&&g.hasClass("fade")||!!d.find("> .fade").length);g.length&&h?g.one("bsTransitionEnd",f).emulateTransitionEnd(c.TRANSITION_DURATION):f(),g.removeClass("in")};var d=a.fn.tab;a.fn.tab=b,a.fn.tab.Constructor=c,a.fn.tab.noConflict=function(){return a.fn.tab=d,this};var e=function(c){c.preventDefault(),b.call(a(this),"show")};a(document).on("click.bs.tab.data-api",'[data-toggle="tab"]',e).on("click.bs.tab.data-api",'[data-toggle="pill"]',e)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.affix"),f="object"==typeof b&&b;e||d.data("bs.affix",e=new c(this,f)),"string"==typeof b&&e[b]()})}var c=function(b,d){this.options=a.extend({},c.DEFAULTS,d),this.$target=a(this.options.target).on("scroll.bs.affix.data-api",a.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",a.proxy(this.checkPositionWithEventLoop,this)),this.$element=a(b),this.affixed=null,this.unpin=null,this.pinnedOffset=null,this.checkPosition()};c.VERSION="3.3.7",c.RESET="affix affix-top affix-bottom",c.DEFAULTS={offset:0,target:window},c.prototype.getState=function(a,b,c,d){var e=this.$target.scrollTop(),f=this.$element.offset(),g=this.$target.height();if(null!=c&&"top"==this.affixed)return e<c&&"top";if("bottom"==this.affixed)return null!=c?!(e+this.unpin<=f.top)&&"bottom":!(e+g<=a-d)&&"bottom";var h=null==this.affixed,i=h?e:f.top,j=h?g:b;return null!=c&&e<=c?"top":null!=d&&i+j>=a-d&&"bottom"},c.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(c.RESET).addClass("affix");var a=this.$target.scrollTop(),b=this.$element.offset();return this.pinnedOffset=b.top-a},c.prototype.checkPositionWithEventLoop=function(){setTimeout(a.proxy(this.checkPosition,this),1)},c.prototype.checkPosition=function(){if(this.$element.is(":visible")){var b=this.$element.height(),d=this.options.offset,e=d.top,f=d.bottom,g=Math.max(a(document).height(),a(document.body).height());"object"!=typeof d&&(f=e=d),"function"==typeof e&&(e=d.top(this.$element)),"function"==typeof f&&(f=d.bottom(this.$element));var h=this.getState(g,b,e,f);if(this.affixed!=h){null!=this.unpin&&this.$element.css("top","");var i="affix"+(h?"-"+h:""),j=a.Event(i+".bs.affix");if(this.$element.trigger(j),j.isDefaultPrevented())return;this.affixed=h,this.unpin="bottom"==h?this.getPinnedOffset():null,this.$element.removeClass(c.RESET).addClass(i).trigger(i.replace("affix","affixed")+".bs.affix")}"bottom"==h&&this.$element.offset({top:g-b-f})}};var d=a.fn.affix;a.fn.affix=b,a.fn.affix.Constructor=c,a.fn.affix.noConflict=function(){return a.fn.affix=d,this},a(window).on("load",function(){a('[data-spy="affix"]').each(function(){var c=a(this),d=c.data();d.offset=d.offset||{},null!=d.offsetBottom&&(d.offset.bottom=d.offsetBottom),null!=d.offsetTop&&(d.offset.top=d.offsetTop),b.call(c,d)})})}(jQuery);
8 9/** 10 * Copyright (c) 2011-2014 Felix Gnass 11 * Licensed under the MIT license 12 */ 13(function(root, factory) { 14 15 /* CommonJS */ 16 if (typeof exports == 'object') module.exports = factory() 17 18 /* AMD module */ 19 else if (typeof define == 'function' && define.amd) define(factory) 20 21 /* Browser global */ 22 else root.Spinner = factory() 23} 24(this, function() { 25 "use strict"; 26 27 var prefixes = ['webkit', 'Moz', 'ms', 'O'] /* Vendor prefixes */ 28 , animations = {} /* Animation rules keyed by their name */ 29 , useCssAnimations /* Whether to use CSS animations or setTimeout */ 30 31 /** 32 * Utility function to create elements. If no tag name is given, 33 * a DIV is created. Optionally properties can be passed. 34 */ 35 function createEl(tag, prop) { 36 var el = document.createElement(tag || 'div') 37 , n 38 39 for(n in prop) el[n] = prop[n] 40 return el 41 } 42 43 /** 44 * Appends children and returns the parent. 45 */ 46 function ins(parent /* child1, child2, ...*/) { 47 for (var i=1, n=arguments.length; i<n; i++) 48 parent.appendChild(arguments[i]) 49 50 return parent 51 } 52 53 /** 54 * Insert a new stylesheet to hold the @keyframe or VML rules. 55 */ 56 var sheet = (function() { 57 var el = createEl('style', {type : 'text/css'}) 58 ins(document.getElementsByTagName('head')[0], el) 59 return el.sheet || el.styleSheet 60 }()) 61 62 /** 63 * Creates an opacity keyframe animation rule and returns its name. 64 * Since most mobile Webkits have timing issues with animation-delay, 65 * we create separate rules for each line/segment. 66 */ 67 function addAnimation(alpha, trail, i, lines) { 68 var name = ['opacity', trail, ~~(alpha*100), i, lines].join('-') 69 , start = 0.01 + i/lines * 100 70 , z = Math.max(1 - (1-alpha) / trail * (100-start), alpha) 71 , prefix = useCssAnimations.substring(0, useCssAnimations.indexOf('Animation')).toLowerCase() 72 , pre = prefix && '-' + prefix + '-' || '' 73 74 if (!animations[name]) { 75 sheet.insertRule( 76 '@' + pre + 'keyframes ' + name + '{' + 77 '0%{opacity:' + z + '}' + 78 start + '%{opacity:' + alpha + '}' + 79 (start+0.01) + '%{opacity:1}' + 80 (start+trail) % 100 + '%{opacity:' + alpha + '}' + 81 '100%{opacity:' + z + '}' + 82 '}', sheet.cssRules.length) 83 84 animations[name] = 1 85 } 86 87 return name 88 } 89 90 /** 91 * Tries various vendor prefixes and returns the first supported property. 92 */ 93 function vendor(el, prop) { 94 var s = el.style 95 , pp 96 , i 97 98 prop = prop.charAt(0).toUpperCase() + prop.slice(1) 99 for(i=0; i<prefixes.length; i++) {
100 pp = prefixes[i]+prop 101 if(s[pp] !== undefined) return pp 102 } 103 if(s[prop] !== undefined) return prop 104 } 105 106 /** 107 * Sets multiple style properties at once. 108 */ 109 function css(el, prop) { 110 for (var n in prop) 111 el.style[vendor(el, n)||n] = prop[n] 112 113 return el 114 } 115 116 /** 117 * Fills in default values. 118 */ 119 function merge(obj) { 120 for (var i=1; i < arguments.length; i++) { 121 var def = arguments[i] 122 for (var n in def) 123 if (obj[n] === undefined) obj[n] = def[n] 124 } 125 return obj 126 } 127 128 /** 129 * Returns the absolute page-offset of the given element. 130 */ 131 function pos(el) { 132 var o = { x:el.offsetLeft, y:el.offsetTop } 133 while((el = el.offsetParent)) 134 o.x+=el.offsetLeft, o.y+=el.offsetTop 135 136 return o 137 } 138 139 /** 140 * Returns the line color from the given string or array. 141 */ 142 function getColor(color, idx) { 143 return typeof color == 'string' ? color : color[idx % color.length] 144 } 145 146 // Built-in defaults 147 148 var defaults = { 149 lines: 12, // The number of lines to draw 150 length: 7, // The length of each line 151 width: 5, // The line thickness 152 radius: 10, // The radius of the inner circle 153 rotate: 0, // Rotation offset 154 corners: 1, // Roundness (0..1) 155 color: '#000', // #rgb or #rrggbb 156 direction: 1, // 1: clockwise, -1: counterclockwise 157 speed: 1, // Rounds per second 158 trail: 100, // Afterglow percentage 159 opacity: 1/4, // Opacity of the lines 160 fps: 20, // Frames per second when using setTimeout() 161 zIndex: 2e9, // Use a high z-index by default 162 className: 'spinner', // CSS class to assign to the element 163 top: '50%', // center vertically 164 left: '50%', // center horizontally 165 position: 'absolute' // element position 166 } 167 168 /** The constructor */ 169 function Spinner(o) { 170 this.opts = merge(o || {}, Spinner.defaults, defaults) 171 } 172 173 // Global defaults that override the built-ins: 174 Spinner.defaults = {} 175 176 merge(Spinner.prototype, { 177 178 /** 179 * Adds the spinner to the given target element. If this instance is already 180 * spinning, it is automatically removed from its previous target b calling 181 * stop() internally. 182 */ 183 spin: function(target) { 184 this.stop() 185 186 var self = this 187 , o = self.opts 188 , el = self.el = css(createEl(0, {className: o.className}), {position: o.position, width: 0, zIndex: o.zIndex}) 189 , mid = o.radius+o.length+o.width 190 191 css(el, { 192 left: o.left, 193 top: o.top 194 }) 195 196 if (target) { 197 target.insertBefore(el, target.firstChild||null) 198 } 199 200 el.setAttribute('role', 'progressbar') 201 self.lines(el, self.opts) 202 203 if (!useCssAnimations) { 204 // No CSS animation support, use setTimeout() instead 205 var i = 0 206 , start = (o.lines - 1) * (1 - o.direction) / 2 207 , alpha 208 , fps = o.fps 209 , f = fps/o.speed 210 , ostep = (1-o.opacity) / (f*o.trail / 100) 211 , astep = f/o.lines 212 213 ;(function anim() { 214 i++; 215 for (var j = 0; j < o.lines; j++) { 216 alpha = Math.max(1 - (i + (o.lines - j) * astep) % f * ostep, o.opacity) 217 218 self.opacity(el, j * o.direction + start, alpha, o) 219 } 220 self.timeout = self.el && setTimeout(anim, ~~(1000/fps)) 221 })() 222 } 223 return self 224 }, 225 226 /** 227 * Stops and removes the Spinner. 228 */ 229 stop: function() { 230 var el = this.el 231 if (el) { 232 clearTimeout(this.timeout) 233 if (el.parentNode) el.parentNode.removeChild(el) 234 this.el = undefined 235 } 236 return this 237 }, 238 239 /** 240 * Internal method that draws the individual lines. Will be overwritten 241 * in VML fallback mode below. 242 */ 243 lines: function(el, o) { 244 var i = 0 245 , start = (o.lines - 1) * (1 - o.direction) / 2 246 , seg 247 248 function fill(color, shadow) { 249 return css(createEl(), { 250 position: 'absolute', 251 width: (o.length+o.width) + 'px', 252 height: o.width + 'px', 253 background: color, 254 boxShadow: shadow, 255 transformOrigin: 'left', 256 transform: 'rotate(' + ~~(360/o.lines*i+o.rotate) + 'deg) translate(' + o.radius+'px' +',0)', 257 borderRadius: (o.corners * o.width>>1) + 'px' 258 }) 259 } 260 261 for (; i < o.lines; i++) { 262 seg = css(createEl(), { 263 position: 'absolute', 264 top: 1+~(o.width/2) + 'px',
265 transform: o.hwaccel ? 'translate3d(0,0,0)' : '', 266 opacity: o.opacity, 267 animation: useCssAnimations && addAnimation(o.opacity, o.trail, start + i * o.direction, o.lines) + ' ' + 1/o.speed + 's linear infinite' 268 }) 269 270 if (o.shadow) ins(seg, css(fill('#000', '0 0 4px ' + '#000'), {top: 2+'px'})) 271 ins(el, ins(seg, fill(getColor(o.color, i), '0 0 1px rgba(0,0,0,.1)'))) 272 } 273 return el 274 }, 275 276 /** 277 * Internal method that adjusts the opacity of a single line. 278 * Will be overwritten in VML fallback mode below. 279 */ 280 opacity: function(el, i, val) { 281 if (i < el.childNodes.length) el.childNodes[i].style.opacity = val 282 } 283 284 }) 285 286 287 function initVML() { 288 289 /* Utility function to create a VML tag */ 290 function vml(tag, attr) { 291 return createEl('<' + tag + ' xmlns="urn:schemas-microsoft.com:vml" class="spin-vml">', attr) 292 } 293 294 // No CSS transforms but VML support, add a CSS rule for VML elements: 295 sheet.addRule('.spin-vml', 'behavior:url(#default#VML)') 296 297 Spinner.prototype.lines = function(el, o) { 298 var r = o.length+o.width 299 , s = 2*r 300 301 function grp() { 302 return css( 303 vml('group', { 304 coordsize: s + ' ' + s, 305 coordorigin: -r + ' ' + -r 306 }), 307 { width: s, height: s } 308 ) 309 } 310 311 var margin = -(o.width+o.length)*2 + 'px' 312 , g = css(grp(), {position: 'absolute', top: margin, left: margin}) 313 , i 314 315 function seg(i, dx, filter) { 316 ins(g, 317 ins(css(grp(), {rotation: 360 / o.lines * i + 'deg', left: ~~dx}), 318 ins(css(vml('roundrect', {arcsize: o.corners}), { 319 width: r, 320 height: o.width, 321 left: o.radius, 322 top: -o.width>>1, 323 filter: filter 324 }), 325 vml('fill', {color: getColor(o.color, i), opacity: o.opacity}), 326 vml('stroke', {opacity: 0}) // transparent stroke to fix color bleeding upon opacity change 327 ) 328 ) 329 ) 330 } 331 332 if (o.shadow) 333 for (i = 1; i <= o.lines; i++) 334 seg(i, -2, 'progid:DXImageTransform.Microsoft.Blur(pixelradius=2,makeshadow=1,shadowopacity=.3)') 335 336 for (i = 1; i <= o.lines; i++) seg(i) 337 return ins(el, g) 338 } 339 340 Spinner.prototype.opacity = function(el, i, val, o) { 341 var c = el.firstChild 342 o = o.shadow && o.lines || 0 343 if (c && i+o < c.childNodes.length) { 344 c = c.childNodes[i+o]; c = c && c.firstChild; c = c && c.firstChild 345 if (c) c.opacity = val 346 } 347 } 348 } 349 350 var probe = css(createEl('group'), {behavior: 'url(#default#VML)'}) 351 352 if (!vendor(probe, 'transform') && probe.adj) initVML() 353 else useCssAnimations = vendor(probe, 'animation') 354 355 return Spinner 356 357})); 358 359/** 360 * Copyright (c) 2011-2014 Felix Gnass 361 * Licensed under the MIT license 362 */ 363 364/* 365 366Basic Usage: 367============ 368 369$('#el').spin(); // Creates a default Spinner using the text color of #el. 370$('#el').spin({ ... }); // Creates a Spinner using the provided options. 371 372$('#el').spin(false); // Stops and removes the spinner. 373 374Using Presets: 375============== 376 377$('#el').spin('small'); // Creates a 'small' Spinner using the text color of #el. 378$('#el').spin('large', '#fff'); // Creates a 'large' white Spinner. 379 380Adding a custom preset: 381======================= 382 383$.fn.spin.presets.flower = { 384 lines: 9 385 length: 10 386 width: 20 387 radius: 0 388} 389 390$('#el').spin('flower', 'red'); 391 392*/ 393 394(function(factory) { 395 396 if (typeof exports == 'object') { 397 // CommonJS 398 factory(require('jquery'), require('spin')) 399 } 400 else if (typeof define == 'function' && define.amd) { 401 // AMD, register as anonymous module 402 define(['jquery', 'spin'], factory) 403 } 404 else { 405 // Browser globals 406 if (!window.Spinner) throw new Error('Spin.js not present') 407 factory(window.jQuery, window.Spinner) 408 } 409 410}(function($, Spinner) { 411 412 $.fn.spin = function(opts, color) { 413 414 return this.each(function() { 415 var $this = $(this), 416 data = $this.data(); 417 418 if (data.spinner) { 419 data.spinner.stop(); 420 delete data.spinner; 421 } 422 if (opts !== false) { 423 opts = $.extend( 424 { color: color || $this.css('color') }, 425 $.fn.spin.presets[opts] || opts 426 ) 427 data.spinner = new Spinner(opts).spin(this) 428 } 429 }) 430 } 431 432 $.fn.spin.presets = { 433 tiny: { lines: 8, length: 2, width: 2, radius: 3 }, 434 small: { lines: 8, length: 4, width: 3, radius: 5 }, 435 large: { lines: 10, length: 8, width: 4, radius: 8 } 436 } 437 438})); 439 440/*! jRespond.js v 0.10 | Author: Jeremy Fields [[email protected]], 2013 | License: MIT */ 441!function(a,b,c){"object"==typeof module&&module&&"object"==typeof module.exports?module.exports=c:(a[b]=c,"function"==typeof define&&define.amd&&define(b,[],function(){return c}))}(this,"jRespond",function(a,b,c){"use strict";return function(a){var b=[],d=[],e=a,f="",g="",i=0,j=100,k=500,l=k,m=function(){var a=0;return a="number"!=typeof window.innerWidth?0!==document.documentElement.clientWidth?document.documentElement.clientWidth:document.body.clientWidth:window.innerWidth}
441,n=function(a){if(a.length===c)o(a);else for(var b=0;b<a.length;b++)o(a[b])},o=function(a){var e=a.breakpoint,h=a.enter||c;b.push(a),d.push(!1),r(e)&&(h!==c&&h.call(null,{entering:f,exiting:g}),d[b.length-1]=!0)},p=function(){for(var a=[],e=[],h=0;h<b.length;h++){var i=b[h].breakpoint,j=b[h].enter||c,k=b[h].exit||c;"*"===i?(j!==c&&a.push(j),k!==c&&e.push(k)):r(i)?(j===c||d[h]||a.push(j),d[h]=!0):(k!==c&&d[h]&&e.push(k),d[h]=!1)}for(var l={entering:f,exiting:g},m=0;m<e.length;m++)e[m].call(null,l);for(var n=0;n<a.length;n++)a[n].call(null,l)},q=function(a){for(var b=!1,c=0;c<e.length;c++)if(a>=e[c].enter&&a<=e[c].exit){b=!0;break}b&&f!==e[c].label?(g=f,f=e[c].label,p()):b||""===f||(f="",p())},r=function(a){if("object"==typeof a){if(a.join().indexOf(f)>=0)return!0}else{if("*"===a)return!0;if("string"==typeof a&&f===a)return!0}},s=function(){var a=m();a!==i?(l=j,q(a)):l=k,i=a,setTimeout(s,l)};return s(),{addFunc:function(a){n(a)},getBreakpoint:function(){return f}}}}(this,this.document)); 442/*! 443 * jQuery Equal Lines - v0.9.2 - 2018-01-29 444 * https://bitbucket.org/relishinc/jquery-equal-lines-plugin 445 * Copyright (c) 2018 Steve Palmer 446 * Licensed MIT 447 */ 448 449!function(a){a.fn.equalLines=function(b){function c(a,b){var c=!1;return function(){c||(a.call(),c=!0,setTimeout(function(){c=!1},b))}}var d=this,e=a.extend({precision:5,debug:!1,throttling:300},b);return d.each(function(){a(this).data("equalLines.initialized")||a(this).data("equalLines.initialized",!0).wrapInner('<span data-equal-lines-wrapper style="display:inline-block; max-width: 100%;" />'),e.debug&&a(this).css("background","rgba(255,0,0,0.25)")}).on("equalLines.updateLayout",function(){var b=a(this),c=b.find("[data-equal-lines-wrapper]"),d=0,f=0;if(b.data("equalLines.initialized")){for("inline"===b.css("display")&&(console.log('jQuery Equal Lines doesn\'t work on "display: inline" elements! Setting elements to "inline-block"'),b.css("display","inline-block")),c.css("width","100%"),e.debug&&b.css("background","rgba(255,0,0,0.5)"),d=b.height();b.height()===d&&b.height()&&d||e.debug&&f>999;)c.width(c.width()-Math.max(e.precision,1)),f++;e.debug&&console.log("Finished:",b.height(),d,c.width(),f),c.width(c.width()+Math.max(e.precision,1))}}).trigger("equalLines.updateLayout"),d.length&&a(window).on("resize.equalLines",c(function(){d.trigger("equalLines.updateLayout")},Math.max(e.throttling,0))),this}}(jQuery); 450/*! 451 * Copyright 2012, Chris Wanstrath 452 * Released under the MIT License 453 * https://github.com/defunkt/jquery-pjax 454 */ 455 456(function($){ 457 458// When called on a container with a selector, fetches the href with 459// ajax into the container or with the data-pjax attribute on the link 460// itself. 461// 462// Tries to make sure the back button and ctrl+click work the way 463// you'd expect. 464// 465// Exported as $.fn.pjax 466// 467// Accepts a jQuery ajax options object that may include these 468// pjax specific options: 469// 470// 471// container - Where to stick the response body. Usually a String selector. 472// $(container).html(xhr.responseBody) 473// (default: current jquery context) 474// push - Whether to pushState the URL. Defaults to true (of course). 475// replace - Want to use replaceState instead? That's cool. 476// 477// For convenience the second parameter can be either the container or 478// the options object. 479// 480// Returns the jQuery object 481function fnPjax(selector, container, options) { 482 var context = this 483 return this.on('click.pjax', selector, function(event) { 484 var opts = $.extend({}, optionsFor(container, options)) 485 if (!opts.container) 486 opts.container = $(this).attr('data-pjax') || context 487 handleClick(event, opts) 488 }) 489} 490 491// Public: pjax on click handler 492// 493// Exported as $.pjax.click. 494// 495// event - "click" jQuery.Event 496// options - pjax options 497// 498// Examples 499// 500// $(document).on('click', 'a', $.pjax.click) 501// // is the same as 502// $(document).pjax('a') 503// 504// $(document).on('click', 'a', function(event) { 505// var container = $(this).closest('[data-pjax-container]') 506// $.pjax.click(event, container) 507// }) 508// 509// Returns nothing. 510function handleClick(event, container, options) { 511 options = optionsFor(container, options) 512 513 var link = event.currentTarget 514 515 if (link.tagName.toUpperCase() !== 'A') 516 throw "$.fn.pjax or $.pjax.click requires an anchor element" 517 518 // Middle click, cmd click, and ctrl click should open 519 // links in a new tab as normal. 520 if ( event.which > 1 || event.metaKey || event.ctrlKey || event.shiftKey || event.altKey ) 521 return 522 523 // Ignore cross origin links 524 if ( location.protocol !== link.protocol || location.hostname !== link.hostname ) 525 return 526
527 // Ignore case when a hash is being tacked on the current URL 528 if ( link.href.indexOf('#') > -1 && stripHash(link) == stripHash(location) ) 529 return 530 531 // Ignore event with default prevented 532 if (event.isDefaultPrevented()) 533 return 534 535 var defaults = { 536 url: link.href, 537 container: $(link).attr('data-pjax'), 538 target: link 539 } 540 541 var opts = $.extend({}, defaults, options) 542 var clickEvent = $.Event('pjax:click') 543 $(link).trigger(clickEvent, [opts]) 544 545 if (!clickEvent.isDefaultPrevented()) { 546 pjax(opts) 547 event.preventDefault() 548 $(link).trigger('pjax:clicked', [opts]) 549 } 550} 551 552// Public: pjax on form submit handler 553// 554// Exported as $.pjax.submit 555// 556// event - "click" jQuery.Event 557// options - pjax options 558// 559// Examples 560// 561// $(document).on('submit', 'form', function(event) { 562// var container = $(this).closest('[data-pjax-container]') 563// $.pjax.submit(event, container) 564// }) 565// 566// Returns nothing. 567function handleSubmit(event, container, options) { 568 options = optionsFor(container, options) 569 570 var form = event.currentTarget 571 572 if (form.tagName.toUpperCase() !== 'FORM') 573 throw "$.pjax.submit requires a form element" 574 575 var defaults = { 576 type: form.method.toUpperCase(), 577 url: form.action, 578 container: $(form).attr('data-pjax'), 579 target: form 580 } 581 582 if (defaults.type !== 'GET' && window.FormData !== undefined) { 583 defaults.data = new FormData(form); 584 defaults.processData = false; 585 defaults.contentType = false;
vendor: 21,735 bytes, lines 586-1360
586 } else { 587 // Can't handle file uploads, exit 588 if ($(form).find(':file').length) { 589 return; 590 } 591 592 // Fallback to manually serializing the fields 593 defaults.data = $(form).serializeArray(); 594 } 595 596 pjax($.extend({}, defaults, options)) 597 598 event.preventDefault() 599} 600 601// Loads a URL with ajax, puts the response body inside a container, 602// then pushState()'s the loaded URL. 603// 604// Works just like $.ajax in that it accepts a jQuery ajax 605// settings object (with keys like url, type, data, etc). 606// 607// Accepts these extra keys: 608// 609// container - Where to stick the response body. 610// $(container).html(xhr.responseBody) 611// push - Whether to pushState the URL. Defaults to true (of course). 612// replace - Want to use replaceState instead? That's cool. 613// 614// Use it just like $.ajax: 615// 616// var xhr = $.pjax({ url: this.href, container: '#main' }) 617// console.log( xhr.readyState ) 618// 619// Returns whatever $.ajax returns. 620function pjax(options) { 621 options = $.extend(true, {}, $.ajaxSettings, pjax.defaults, options) 622 623 if ($.isFunction(options.url)) { 624 options.url = options.url() 625 } 626 627 var target = options.target 628 629 var hash = parseURL(options.url).hash 630 631 var context = options.context = findContainerFor(options.container) 632 633 // We want the browser to maintain two separate internal caches: one 634 // for pjax'd partial page loads and one for normal page loads. 635 // Without adding this secret parameter, some browsers will often 636 // confuse the two. 637 if (!options.data) options.data = {} 638 if ($.isArray(options.data)) { 639 options.data.push({name: '_pjax', value: context.selector}) 640 } else { 641 options.data._pjax = context.selector 642 } 643 644 function fire(type, args, props) { 645 if (!props) props = {} 646 props.relatedTarget = target 647 var event = $.Event(type, props) 648 context.trigger(event, args) 649 return !event.isDefaultPrevented() 650 } 651 652 var timeoutTimer 653 654 options.beforeSend = function(xhr, settings) { 655 // No timeout for non-GET requests 656 // Its not safe to request the resource again with a fallback method. 657 if (settings.type !== 'GET') { 658 settings.timeout = 0 659 } 660 661 xhr.setRequestHeader('X-PJAX', 'true') 662 xhr.setRequestHeader('X-PJAX-Container', context.selector) 663 664 if (!fire('pjax:beforeSend', [xhr, settings])) 665 return false 666 667 if (settings.timeout > 0) { 668 timeoutTimer = setTimeout(function() { 669 if (fire('pjax:timeout', [xhr, options])) 670 xhr.abort('timeout') 671 }, settings.timeout) 672 673 // Clear timeout setting so jquerys internal timeout isn't invoked 674 settings.timeout = 0 675 } 676 677 var url = parseURL(settings.url) 678 if (hash) url.hash = hash 679 options.requestUrl = stripInternalParams(url) 680 } 681 682 options.complete = function(xhr, textStatus) { 683 if (timeoutTimer) 684 clearTimeout(timeoutTimer) 685 686 fire('pjax:complete', [xhr, textStatus, options]) 687 688 fire('pjax:end', [xhr, options]) 689 } 690 691 options.error = function(xhr, textStatus, errorThrown) { 692 var container = extractContainer("", xhr, options) 693 694 var allowed = fire('pjax:error', [xhr, textStatus, errorThrown, options]) 695 if (options.type == 'GET' && textStatus !== 'abort' && allowed) { 696 locationReplace(container.url) 697 } 698 } 699 700 options.success = function(data, status, xhr) { 701 var previousState = pjax.state; 702 703 // If $.pjax.defaults.version is a function, invoke it first. 704 // Otherwise it can be a static string. 705 var currentVersion = (typeof $.pjax.defaults.version === 'function') ? 706 $.pjax.defaults.version() : 707 $.pjax.defaults.version 708 709 var latestVersion = xhr.getResponseHeader('X-PJAX-Version') 710 711 var container = extractContainer(data, xhr, options) 712 713 var url = parseURL(container.url) 714 if (hash) { 715 url.hash = hash 716 container.url = url.href 717 } 718 719 // If there is a layout version mismatch, hard load the new url 720 if (currentVersion && latestVersion && currentVersion !== latestVersion) { 721 locationReplace(container.url) 722 return 723 } 724 725 // If the new response is missing a body, hard load the page 726 if (!container.contents) { 727 locationReplace(container.url) 728 return 729 } 730 731 pjax.state = { 732 id: options.id || uniqueId(), 733 url: container.url, 734 title: container.title, 735 container: context.selector, 736 fragment: options.fragment, 737 timeout: options.timeout 738 } 739 740 if (options.push || options.replace) { 741 window.history.replaceState(pjax.state, container.title, container.url) 742 } 743 744 // Clear out any focused controls before inserting new page contents. 745 try { 746 document.activeElement.blur() 747 } catch (e) { } 748 749 if (container.title) document.title = container.title 750 751 fire('pjax:beforeReplace', [container.contents, options], { 752 state: pjax.state, 753 previousState: previousState 754 }) 755 context.html(container.contents) 756 757 // FF bug: Won't autofocus fields that are inserted via JS. 758 // This behavior is incorrect. So if theres no current focus, autofocus 759 // the last field. 760 // 761 // http://www.w3.org/html/wg/drafts/html/master/forms.html 762 var autofocusEl = context.find('input[autofocus], textarea[autofocus]').last()[0] 763 if (autofocusEl && document.activeElement !== autofocusEl) { 764 autofocusEl.focus(); 765 } 766 767 executeScriptTags(container.scripts) 768 769 var scrollTo = options.scrollTo 770 771 // Ensure browser scrolls to the element referenced by the URL anchor 772 if (hash) { 773 var name = decodeURIComponent(hash.slice(1)) 774 var target = document.getElementById(name) || document.getElementsByName(name)[0] 775 if (target) scrollTo = $(target).offset().top 776 } 777 778 if (typeof scrollTo == 'number') $(window).scrollTop(scrollTo) 779 780 fire('pjax:success', [data, status, xhr, options]) 781 } 782 783 784 // Initialize pjax.state for the initial page load. Assume we're 785 // using the container and options of the link we're loading for the 786 // back button to the initial page. This ensures good back button 787 // behavior. 788 if (!pjax.state) { 789 pjax.state = { 790 id: uniqueId(), 791 url: window.location.href, 792 title: document.title, 793 container: context.selector, 794 fragment: options.fragment, 795 timeout: options.timeout 796 } 797 window.history.replaceState(pjax.state, document.title) 798 } 799 800 // Cancel the current request if we're already pjaxing 801 abortXHR(pjax.xhr) 802 803 pjax.options = options 804 var xhr = pjax.xhr = $.ajax(options) 805 806 if (xhr.readyState > 0) { 807 if (options.push && !options.replace) { 808 // Cache current container element before replacing it 809 cachePush(pjax.state.id, cloneContents(context)) 810 811 window.history.pushState(null, "", options.requestUrl) 812 } 813 814 fire('pjax:start', [xhr, options]) 815 fire('pjax:send', [xhr, options]) 816 } 817 818 return pjax.xhr 819} 820 821// Public: Reload current page with pjax. 822// 823// Returns whatever $.pjax returns. 824function pjaxReload(container, options) { 825 var defaults = { 826 url: window.location.href, 827 push: false, 828 replace: true, 829 scrollTo: false 830 } 831 832 return pjax($.extend(defaults, optionsFor(container, options))) 833} 834 835// Internal: Hard replace current state with url. 836// 837// Work for around WebKit 838// https://bugs.webkit.org/show_bug.cgi?id=93506 839// 840// Returns nothing. 841function locationReplace(url) { 842 window.history.replaceState(null, "", pjax.state.url) 843 window.location.replace(url) 844} 845 846 847var initialPop = true 848var initialURL = window.location.href 849var initialState = window.history.state 850 851// Initialize $.pjax.state if possible 852// Happens when reloading a page and coming forward from a different 853// session history. 854if (initialState && initialState.container) { 855 pjax.state = initialState 856} 857 858// Non-webkit browsers don't fire an initial popstate event 859if ('state' in window.history) { 860 initialPop = false 861} 862 863// popstate handler takes care of the back and forward buttons 864// 865// You probably shouldn't use pjax on pages with other pushState 866// stuff yet. 867function onPjaxPopstate(event) { 868 869 // Hitting back or forward should override any pending PJAX request. 870 if (!initialPop) { 871 abortXHR(pjax.xhr) 872 } 873 874 var previousState = pjax.state 875 var state = event.state 876 var direction 877 878 if (state && state.container) { 879 // When coming forward from a separate history session, will get an 880 // initial pop with a state we are already at. Skip reloading the current 881 // page. 882 if (initialPop && initialURL == state.url) return 883 884 if (previousState) { 885 // If popping back to the same state, just skip. 886 // Could be clicking back from hashchange rather than a pushState. 887 if (previousState.id === state.id) return 888 889 // Since state IDs always increase, we can deduce the navigation direction 890 direction = previousState.id < state.id ? 'forward' : 'back' 891 } 892 893 var cache = cacheMapping[state.id] || [] 894 var container = $(cache[0] || state.container), contents = cache[1] 895 896 if (container.length) { 897 if (previousState) { 898 // Cache current container before replacement and inform the 899 // cache which direction the history shifted. 900 cachePop(direction, previousState.id, cloneContents(container)) 901 } 902 903 var popstateEvent = $.Event('pjax:popstate', { 904 state: state, 905 direction: direction 906 }) 907 container.trigger(popstateEvent) 908 909 var options = { 910 id: state.id, 911 url: state.url, 912 container: container, 913 push: false, 914 fragment: state.fragment, 915 timeout: state.timeout, 916 scrollTo: false 917 } 918 919 if (contents) { 920 container.trigger('pjax:start', [null, options]) 921 922 pjax.state = state 923 if (state.title) document.title = state.title 924 var beforeReplaceEvent = $.Event('pjax:beforeReplace', { 925 state: state, 926 previousState: previousState 927 }) 928 container.trigger(beforeReplaceEvent, [contents, options]) 929 container.html(contents) 930 931 container.trigger('pjax:end', [null, options]) 932 } else { 933 pjax(options) 934 } 935 936 // Force reflow/relayout before the browser tries to restore the 937 // scroll position. 938 container[0].offsetHeight 939 } else { 940 locationReplace(location.href) 941 } 942 } 943 initialPop = false 944} 945 946// Fallback version of main pjax function for browsers that don't 947// support pushState. 948// 949// Returns nothing since it retriggers a hard form submission. 950function fallbackPjax(options) { 951 var url = $.isFunction(options.url) ? options.url() : options.url, 952 method = options.type ? options.type.toUpperCase() : 'GET' 953 954 var form = $('<form>', { 955 method: method === 'GET' ? 'GET' : 'POST', 956 action: url, 957 style: 'display:none' 958 }) 959 960 if (method !== 'GET' && method !== 'POST') { 961 form.append($('<input>', { 962 type: 'hidden', 963 name: '_method', 964 value: method.toLowerCase() 965 })) 966 } 967 968 var data = options.data 969 if (typeof data === 'string') { 970 $.each(data.split('&'), function(index, value) { 971 var pair = value.split('=') 972 form.append($('<input>', {type: 'hidden', name: pair[0], value: pair[1]})) 973 }) 974 } else if ($.isArray(data)) { 975 $.each(data, function(index, value) { 976 form.append($('<input>', {type: 'hidden', name: value.name, value: value.value})) 977 }) 978 } else if (typeof data === 'object') { 979 var key 980 for (key in data) 981 form.append($('<input>', {type: 'hidden', name: key, value: data[key]})) 982 } 983 984 $(document.body).append(form) 985 form.submit() 986} 987 988// Internal: Abort an XmlHttpRequest if it hasn't been completed, 989// also removing its event handlers. 990function abortXHR(xhr) { 991 if ( xhr && xhr.readyState < 4) { 992 xhr.onreadystatechange = $.noop 993 xhr.abort() 994 } 995} 996 997// Internal: Generate unique id for state object. 998// 999// Use a timestamp instead of a counter since ids should still be 1000// unique across page loads. 1001// 1002// Returns Number. 1003function uniqueId() { 1004 return (new Date).getTime() 1005} 1006 1007function cloneContents(container) { 1008 var cloned = container.clone() 1009 // Unmark script tags as already being eval'd so they can get executed again 1010 // when restored from cache. HAXX: Uses jQuery internal method. 1011 cloned.find('script').each(function(){ 1012 if (!this.src) jQuery._data(this, 'globalEval', false) 1013 }) 1014 return [container.selector, cloned.contents()] 1015} 1016 1017// Internal: Strip internal query params from parsed URL. 1018// 1019// Returns sanitized url.href String. 1020function stripInternalParams(url) { 1021 url.search = url.search.replace(/([?&])(_pjax|_)=[^&]*/g, '') 1022 return url.href.replace(/\?($|#)/, '$1') 1023} 1024 1025// Internal: Parse URL components and returns a Locationish object. 1026// 1027// url - String URL 1028// 1029// Returns HTMLAnchorElement that acts like Location. 1030function parseURL(url) { 1031 var a = document.createElement('a') 1032 a.href = url 1033 return a 1034} 1035 1036// Internal: Return the `href` component of given URL object with the hash 1037// portion removed. 1038// 1039// location - Location or HTMLAnchorElement 1040// 1041// Returns String 1042function stripHash(location) { 1043 return location.href.replace(/#.*/, '') 1044} 1045 1046// Internal: Build options Object for arguments. 1047// 1048// For convenience the first parameter can be either the container or 1049// the options object. 1050// 1051// Examples 1052// 1053// optionsFor('#container') 1054// // => {container: '#container'} 1055// 1056// optionsFor('#container', {push: true}) 1057// // => {container: '#container', push: true} 1058// 1059// optionsFor({container: '#container', push: true}) 1060// // => {container: '#container', push: true} 1061// 1062// Returns options Object. 1063function optionsFor(container, options) { 1064 // Both container and options 1065 if ( container && options ) 1066 options.container = container 1067 1068 // First argument is options Object 1069 else if ( $.isPlainObject(container) ) 1070 options = container 1071 1072 // Only container 1073 else 1074 options = {container: container} 1075 1076 // Find and validate container 1077 if (options.container) 1078 options.container = findContainerFor(options.container) 1079 1080 return options 1081} 1082 1083// Internal: Find container element for a variety of inputs. 1084// 1085// Because we can't persist elements using the history API, we must be 1086// able to find a String selector that will consistently find the Element. 1087// 1088// container - A selector String, jQuery object, or DOM Element. 1089// 1090// Returns a jQuery object whose context is `document` and has a selector. 1091function findContainerFor(container) { 1092 container = $(container) 1093 1094 if ( !container.length ) { 1095 throw "no pjax container for " + container.selector 1096 } else if ( container.selector !== '' && container.context === document ) { 1097 return container 1098 } else if ( container.attr('id') ) { 1099 return $('#' + container.attr('id')) 1100 } else { 1101 throw "cant get selector for pjax container!" 1102 } 1103} 1104 1105// Internal: Filter and find all elements matching the selector. 1106// 1107// Where $.fn.find only matches descendants, findAll will test all the 1108// top level elements in the jQuery object as well. 1109// 1110// elems - jQuery object of Elements 1111// selector - String selector to match 1112// 1113// Returns a jQuery object. 1114function findAll(elems, selector) { 1115 return elems.filter(selector).add(elems.find(selector)); 1116} 1117 1118function parseHTML(html) { 1119 return $.parseHTML(html, document, true) 1120} 1121 1122// Internal: Extracts container and metadata from response. 1123// 1124// 1. Extracts X-PJAX-URL header if set 1125// 2. Extracts inline <title> tags 1126// 3. Builds response Element and extracts fragment if set 1127// 1128// data - String response data 1129// xhr - XHR response 1130// options - pjax options Object 1131// 1132// Returns an Object with url, title, and contents keys. 1133function extractContainer(data, xhr, options) { 1134 var obj = {}, fullDocument = /<html/i.test(data) 1135 1136 // Prefer X-PJAX-URL header if it was set, otherwise fallback to 1137 // using the original requested url. 1138 var serverUrl = xhr.getResponseHeader('X-PJAX-URL') 1139 obj.url = serverUrl ? stripInternalParams(parseURL(serverUrl)) : options.requestUrl 1140 1141 // Attempt to parse response html into elements 1142 if (fullDocument) { 1143 var $head = $(parseHTML(data.match(/<head[^>]*>([\s\S.]*)<\/head>/i)[0])) 1144 var $body = $(parseHTML(data.match(/<body[^>]*>([\s\S.]*)<\/body>/i)[0])) 1145 } else { 1146 var $head = $body = $(parseHTML(data)) 1147 } 1148 1149 // If response data is empty, return fast 1150 if ($body.length === 0) 1151 return obj 1152 1153 // If there's a <title> tag in the header, use it as 1154 // the page's title. 1155 obj.title = findAll($head, 'title').last().text() 1156 1157 if (options.fragment) { 1158 // If they specified a fragment, look for it in the response 1159 // and pull it out. 1160 if (options.fragment === 'body') { 1161 var $fragment = $body 1162 } else { 1163 var $fragment = findAll($body, options.fragment).first() 1164 } 1165 1166 if ($fragment.length) { 1167 obj.contents = options.fragment === 'body' ? $fragment : $fragment.contents() 1168 1169 // If there's no title, look for data-title and title attributes 1170 // on the fragment 1171 if (!obj.title) 1172 obj.title = $fragment.attr('title') || $fragment.data('title') 1173 } 1174 1175 } else if (!fullDocument) { 1176 obj.contents = $body 1177 } 1178 1179 // Clean up any <title> tags 1180 if (obj.contents) { 1181 // Remove any parent title elements 1182 obj.contents = obj.contents.not(function() { return $(this).is('title') }) 1183 1184 // Then scrub any titles from their descendants 1185 obj.contents.find('title').remove() 1186 1187 // Gather all script[src] elements 1188 obj.scripts = findAll(obj.contents, 'script[src]').remove() 1189 obj.contents = obj.contents.not(obj.scripts) 1190 } 1191 1192 // Trim any whitespace off the title 1193 if (obj.title) obj.title = $.trim(obj.title) 1194 1195 return obj 1196} 1197 1198// Load an execute scripts using standard script request. 1199// 1200// Avoids jQuery's traditional $.getScript which does a XHR request and 1201// globalEval. 1202// 1203// scripts - jQuery object of script Elements 1204// 1205// Returns nothing. 1206function executeScriptTags(scripts) { 1207 if (!scripts) return 1208 1209 var existingScripts = $('script[src]') 1210 1211 scripts.each(function() { 1212 var src = this.src 1213 var matchedScripts = existingScripts.filter(function() { 1214 return this.src === src 1215 }) 1216 if (matchedScripts.length) return 1217 1218 var script = document.createElement('script') 1219 var type = $(this).attr('type') 1220 if (type) script.type = type 1221 script.src = $(this).attr('src') 1222 document.head.appendChild(script) 1223 }) 1224} 1225 1226// Internal: History DOM caching class. 1227var cacheMapping = {} 1228var cacheForwardStack = [] 1229var cacheBackStack = [] 1230 1231// Push previous state id and container contents into the history 1232// cache. Should be called in conjunction with `pushState` to save the 1233// previous container contents. 1234// 1235// id - State ID Number 1236// value - DOM Element to cache 1237// 1238// Returns nothing. 1239function cachePush(id, value) { 1240 cacheMapping[id] = value 1241 cacheBackStack.push(id) 1242 1243 // Remove all entries in forward history stack after pushing a new page. 1244 trimCacheStack(cacheForwardStack, 0) 1245 1246 // Trim back history stack to max cache length. 1247 trimCacheStack(cacheBackStack, pjax.defaults.maxCacheLength) 1248} 1249 1250// Shifts cache from directional history cache. Should be 1251// called on `popstate` with the previous state id and container 1252// contents. 1253// 1254// direction - "forward" or "back" String 1255// id - State ID Number 1256// value - DOM Element to cache 1257// 1258// Returns nothing. 1259function cachePop(direction, id, value) { 1260 var pushStack, popStack 1261 cacheMapping[id] = value 1262 1263 if (direction === 'forward') { 1264 pushStack = cacheBackStack 1265 popStack = cacheForwardStack 1266 } else { 1267 pushStack = cacheForwardStack 1268 popStack = cacheBackStack 1269 } 1270 1271 pushStack.push(id) 1272 if (id = popStack.pop()) 1273 delete cacheMapping[id] 1274 1275 // Trim whichever stack we just pushed to to max cache length. 1276 trimCacheStack(pushStack, pjax.defaults.maxCacheLength) 1277} 1278 1279// Trim a cache stack (either cacheBackStack or cacheForwardStack) to be no 1280// longer than the specified length, deleting cached DOM elements as necessary. 1281// 1282// stack - Array of state IDs 1283// length - Maximum length to trim to 1284// 1285// Returns nothing. 1286function trimCacheStack(stack, length) { 1287 while (stack.length > length) 1288 delete cacheMapping[stack.shift()] 1289} 1290 1291// Public: Find version identifier for the initial page load. 1292// 1293// Returns String version or undefined. 1294function findVersion() { 1295 return $('meta').filter(function() { 1296 var name = $(this).attr('http-equiv') 1297 return name && name.toUpperCase() === 'X-PJAX-VERSION' 1298 }).attr('content') 1299} 1300 1301// Install pjax functions on $.pjax to enable pushState behavior. 1302// 1303// Does nothing if already enabled. 1304// 1305// Examples 1306// 1307// $.pjax.enable() 1308// 1309// Returns nothing. 1310function enable() { 1311 $.fn.pjax = fnPjax 1312 $.pjax = pjax 1313 $.pjax.enable = $.noop 1314 $.pjax.disable = disable 1315 $.pjax.click = handleClick 1316 $.pjax.submit = handleSubmit 1317 $.pjax.reload = pjaxReload 1318 $.pjax.defaults = { 1319 timeout: 650, 1320 push: true, 1321 replace: false, 1322 type: 'GET', 1323 dataType: 'html', 1324 scrollTo: 0, 1325 maxCacheLength: 20, 1326 version: findVersion 1327 } 1328 $(window).on('popstate.pjax', onPjaxPopstate) 1329} 1330 1331// Disable pushState behavior. 1332// 1333// This is the case when a browser doesn't support pushState. It is 1334// sometimes useful to disable pushState for debugging on a modern 1335// browser. 1336// 1337// Examples 1338// 1339// $.pjax.disable() 1340// 1341// Returns nothing. 1342function disable() { 1343 $.fn.pjax = function() { return this } 1344 $.pjax = fallbackPjax 1345 $.pjax.enable = enable 1346 $.pjax.disable = $.noop 1347 $.pjax.click = $.noop 1348 $.pjax.submit = $.noop 1349 $.pjax.reload = function() { window.location.reload() } 1350 1351 $(window).off('popstate.pjax', onPjaxPopstate) 1352} 1353 1354 1355// Add the state property to jQuery's event object so we can use it in 1356// $(window).bind('popstate') 1357if ( $.inArray('state', $.event.props) < 0 ) 1358 $.event.props.push('state') 1359 1360// Is pjax supported by this browser?
1361$.support.pjax = 1362 window.history && window.history.pushState && window.history.replaceState && 1363 // pushState isn't reliable on iOS until 5. 1364 !navigator.userAgent.match(/((iPod|iPhone|iPad).+\bOS\s+[1-4]\D|WebApps\/.+CFNetwork)/) 1365 1366$.support.pjax ? enable() : disable() 1367 1368})(jQuery); 1369 1370/* 1371 * jQuery WidowFix Plugin 1372 * http://matthewlein.com/widowfix/ 1373 * Copyright (c) 2010 Matthew Lein 1374 * Version: 1.3.2 (7/23/2011) 1375 * Dual licensed under the MIT and GPL licenses 1376 * Requires: jQuery v1.4 or later 1377 */ 1378 1379(function(a){jQuery.fn.widowFix=function(d){var c={letterLimit:null,prevLimit:null,linkFix:false,dashes:false};var b=a.extend(c,d);if(this.length){return this.each(function(){var i=a(this);var n;if(b.linkFix){var h=i.find("a:last");h.wrap("<var>");var e=a("var").html();n=h.contents()[0];h.contents().unwrap()}var f=a(this).html().split(" "),m=f.pop();if(f.length<=1){return}function k(){if(m===""){m=f.pop();k()}}k();if(b.dashes){var j=["-","â","â"];a.each(j,function(o,p){if(m.indexOf(p)>0){m='<span style="white-space:nowrap;">'+m+"</span>";return false}})}var l=f[f.length-1];if(b.linkFix){if(b.letterLimit!==null&&n.length>=b.letterLimit){i.find("var").each(function(){a(this).contents().replaceWith(e);a(this).contents().unwrap()});return}else{if(b.prevLimit!==null&&l.length>=b.prevLimit){i.find("var").each(function(){a(this).contents().replaceWith(e);a(this).contents().unwrap()});return}}}else{if(b.letterLimit!==null&&m.length>=b.letterLimit){return}else{if(b.prevLimit!==null&&l.length>=b.prevLimit){return}}}var g=f.join(" ")+" "+m;i.html(g);if(b.linkFix){i.find("var").each(function(){a(this).contents().replaceWith(e);a(this).contents().unwrap()})}})}}})(jQuery); 1380/** 1381 * @license 1382 * Copyright 2016 Google Inc. All Rights Reserved. 1383 * 1384 * Licensed under the Apache License, Version 2.0 (the "License"); 1385 * you may not use this file except in compliance with the License. 1386 * You may obtain a copy of the License at 1387 * 1388 * http://www.apache.org/licenses/LICENSE-2.0 1389 * 1390 * Unless required by applicable law or agreed to in writing, software 1391 * distributed under the License is distributed on an "AS IS" BASIS, 1392 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1393 * See the License for the specific language governing permissions and 1394 * limitations under the License. 1395 */ 1396 1397/*! autotrack.js v1.1.0 */ 1398!function t(e,i,n){function s(o,a){if(!i[o]){if(!e[o]){var l="function"==typeof require&&require;if(!a&&l)return l(o,!0);if(r)return r(o,!0);var h=new Error("Cannot find module '"+o+"'");throw h.code="MODULE_NOT_FOUND",h}var c=i[o]={exports:{}};e[o][0].call(c.exports,function(t){var i=e[o][1][t];return s(i?i:t)},c,c.exports,t,e,i,n)}return i[o].exports}for(var r="function"==typeof require&&require,o=0;o<n.length;o++)s(n[o]);return s}({1:[function(t,e,i){e.exports={VERSION:"1.0.0",DEV_ID:"i5iSjo",VERSION_PARAM:"&_av",USAGE_PARAM:"&_au",NULL_DIMENSION:"(not set)"}},{}],2:[function(t,e,i){function n(){console.error("Warning! Requiring the `autotrack` plugin no longer requires all sub-plugins by default.\nSee https://goo.gl/XsXPg5 for details.")}var s=t("../provide");s("autotrack",n)},{"../provide":12}],3:[function(t,e,i){function n(t,e){l.track(t,l.plugins.CLEAN_URL_TRACKER),this.opts=s({stripQuery:!1,queryDimensionIndex:null,indexFilename:null,trailingSlash:null},e),this.tracker=t,this.overrideTrackerBuildHitTask()}var s=t("object-assign"),r=t("dom-utils/lib/parse-url"),o=t("../constants"),a=t("../provide"),l=t("../usage");n.prototype.cleanUrlTask=function(t){var e=t.get("location"),i=t.get("page"),n=r(i||e),s=n.pathname,a=s;if(this.opts.indexFilename){var l=a.split("/");this.opts.indexFilename==l[l.length-1]&&(l[l.length-1]="",a=l.join("/"))}if("remove"==this.opts.trailingSlash)a=a.replace(/\/+$/,"");else if("add"==this.opts.trailingSlash){var h=/\.\w+$/.test(a);h||"/"==a.substr(-1)||(a+="/")}this.opts.stripQuery&&this.opts.queryDimensionIndex&&t.set("dimension"+this.opts.queryDimensionIndex,n.query||o.NULL_DIMENSION),t.set("page",a+(this.opts.stripQuery?"":n.search))},n.prototype.overrideTrackerBuildHitTask=function(){this.originalTrackerBuildHitTask=this.tracker.get("buildHitTask"),this.tracker.set("buildHitTask",function(t){this.cleanUrlTask(t),this.originalTrackerBuildHitTask(t)}.bind(this))},n.prototype.remove=function(){this.tracker.set("sendHitTask",this.originalTrackerSendHitTask)},a("cleanUrlTracker",n)},{"../constants":1,"../provide":12,"../usage":13,"dom-utils/lib/parse-url":22,"object-assign":23}
1398],4:[function(t,e,i){function n(t,e){if(a.track(t,a.plugins.EVENT_TRACKER),window.addEventListener){this.opts=s({events:["click"],fieldsObj:{},attributePrefix:"ga-",hitFilter:null},e),this.tracker=t,this.handleEvents=this.handleEvents.bind(this);var i="["+this.opts.attributePrefix+"on]";this.delegates={},this.opts.events.forEach(function(t){this.delegates[t]=r(document,t,i,this.handleEvents,{composed:!0,useCapture:!0})}.bind(this))}}var s=t("object-assign"),r=t("dom-utils/lib/delegate"),o=t("../provide"),a=t("../usage"),l=t("../utilities").createFieldsObj,h=t("../utilities").getAttributeFields;n.prototype.handleEvents=function(t,e){var i=this.opts.attributePrefix;if(t.type==e.getAttribute(i+"on")){var n={transport:"beacon"},r=h(e,i),o=s({},this.opts.fieldsObj,r),a=r.hitType||"event";this.tracker.send(a,l(n,o,this.tracker,this.opts.hitFilter,e))}},n.prototype.remove=function(){Object.keys(this.delegates).forEach(function(t){this.delegates[t].destroy()}.bind(this))},o("eventTracker",n)},{"../provide":12,"../usage":13,"../utilities":14,"dom-utils/lib/delegate":18,"object-assign":23}],5:[function(t,e,i){function n(t,e){l.track(t,l.plugins.IMPRESSION_TRACKER),window.IntersectionObserver&&window.MutationObserver&&(this.opts=o({elements:null,rootMargin:"0px",fieldsObj:{},attributePrefix:"ga-",hitFilter:null},e),this.tracker=t,this.handleDomMutations=this.handleDomMutations.bind(this),this.handleIntersectionChanges=this.handleIntersectionChanges.bind(this),this.handleDomElementAdded=this.handleDomElementAdded.bind(this),this.handleDomElementRemoved=this.handleDomElementRemoved.bind(this),this.items=[],this.elementMap={},this.thresholdMap={},c(function(){this.observeElements(this.opts.elements)}.bind(this)))}function s(t,e){if(0===t){var i=e.intersectionRect;return i.top>0||i.bottom>0||i.left>0||i.right>0}return e.intersectionRatio>=t}function r(t){return o({threshold:0,trackFirstImpressionOnly:!0},"string"==typeof t?{id:t}:t)}var o=t("object-assign"),a=t("../provide"),l=t("../usage"),h=t("../utilities").createFieldsObj,c=t("../utilities").domReady,d=t("../utilities").getAttributeFields;n.prototype.observeElements=function(t){var e=this.deriveDataFromElements(t);this.items=this.items.concat(e.items),this.elementMap=o({},e.elementMap,this.elementMap),this.thresholdMap=o({},e.thresholdMap,this.thresholdMap),e.items.forEach(function(t){var e=this.thresholdMap[t.threshold]=this.thresholdMap[t.threshold]||new IntersectionObserver(this.handleIntersectionChanges,{rootMargin:this.opts.rootMargin,threshold:[+t.threshold]}),i=this.elementMap[t.id]||(this.elementMap[t.id]=document.getElementById(t.id));i&&e.observe(i)}.bind(this)),this.mutationObserver||(this.mutationObserver=new MutationObserver(this.handleDomMutations),this.mutationObserver.observe(document.body,{childList:!0,subtree:!0})),requestAnimationFrame(function(){})},n.prototype.unobserveElements=function(t){var e=[],i=[];if(this.items.forEach(function(n){var s=t.some(function(t){var e=r(t);return e.id===n.id&&e.threshold===n.threshold&&e.trackFirstImpressionOnly===n.trackFirstImpressionOnly});s?i.push(n):e.push(n)}),!e.length)return this.unobserveAllElements();var n=this.deriveDataFromElements(e),s=this.deriveDataFromElements(i);this.items=n.items,this.elementMap=n.elementMap,this.thresholdMap=n.thresholdMap,i.forEach(function(t){if(!n.elementMap[t.id]){var e=s.thresholdMap[t.threshold],i=s.elementMap[t.id];i&&e.unobserve(i),n.thresholdMap[t.threshold]||s.thresholdMap[t.threshold].disconnect()}})},n.prototype.unobserveAllElements=function(){Object.keys(this.thresholdMap).forEach(function(t){this.thresholdMap[t].disconnect()}.bind(this)),this.mutationObserver.disconnect(),this.mutationObserver=null,this.items=[],this.elementMap={},this.thresholdMap={}},n.prototype.deriveDataFromElements=function(t){var e=[],i={},n={};return t.length&&t.forEach(function(t){var s=r(t);e.push(s),n[s.id]=this.elementMap[s.id]||null,i[s.threshold]=this.thresholdMap[s.threshold]||null}.bind(this)),{items:e,elementMap:n,thresholdMap:i}},n.prototype.observeElement=function(t){var e=this.elementMap[t]||(this.elementMap[t]=document.getElementById(t));e&&this.intersectionObserver.observe(e)},n.prototype.handleDomMutations=function(t){for(var e,i=0;e=t[i];i++){for(var n,s=0;n=e.removedNodes[s];s++)this.walkNodeTree(n,this.handleDomElementRemoved);for(var r,o=0;r=e.addedNodes[o];o++)this.walkNodeTree(r,this.handleDomElementAdded)}},n.prototype.walkNodeTree=function(t,e){1==t.nodeType&&t.id in this.elementMap&&e(t.id);for(var i,n=0;i=t.childNodes[n];n++)this.walkNodeTree(i,e)},n.prototype.handleIntersectionChanges=function(t){for(var e,i=[],n=0;e=t[n];n++)for(var r,o=0;r=this.items[o];o++)e.target.id===r.id&&s(r.threshold,e)&&(this.handleImpression(r.id),r.trackFirstImpressionOnly&&i.push(r));i.length&&this.unobserveElements(i)},n.prototype.handleImpression=function(t){var e=document.getElementById(t),i={transport:"beacon",eventCategory:"Viewport",eventAction:"impression",eventLabel:t},n=o({},this.opts.fieldsObj,d(e,this.opts.attributePrefix));this.tracker.send("event",h(i,n,this.tracker,this.opts.hitFilter,e))},n.prototype.handleDomElementAdded=function(t){var e=this.elementMap[t]=document.getElementById(t);
1398this.items.forEach(function(i){t==i.id&&this.thresholdMap[i.threshold].observe(e)}.bind(this))},n.prototype.handleDomElementRemoved=function(t){var e=this.elementMap[t];this.items.forEach(function(i){t==i.id&&this.thresholdMap[i.threshold].unobserve(e)}.bind(this)),this.elementMap[t]=null},n.prototype.remove=function(){this.unobserveAllElements()},a("impressionTracker",n)},{"../provide":12,"../usage":13,"../utilities":14,"object-assign":23}],6:[function(t,e,i){function n(t,e){h.track(t,h.plugins.MEDIA_QUERY_TRACKER),window.matchMedia&&(this.opts=r({definitions:null,changeTemplate:this.changeTemplate,changeTimeout:1e3,fieldsObj:{},hitFilter:null},e),d(this.opts.definitions)&&(this.opts.definitions=u(this.opts.definitions),this.tracker=t,this.changeListeners=[],this.processMediaQueries()))}function s(t){return p[t]?p[t]:(p[t]=window.matchMedia(t),p[t])}var r=t("object-assign"),o=t("debounce"),a=t("../constants"),l=t("../provide"),h=t("../usage"),c=t("../utilities").createFieldsObj,d=t("../utilities").isObject,u=t("../utilities").toArray,p={};n.prototype.processMediaQueries=function(){this.opts.definitions.forEach(function(t){if(t.name&&t.dimensionIndex){var e=this.getMatchName(t);this.tracker.set("dimension"+t.dimensionIndex,e),this.addChangeListeners(t)}}.bind(this))},n.prototype.getMatchName=function(t){var e;return t.items.forEach(function(t){s(t.media).matches&&(e=t)}),e?e.name:a.NULL_DIMENSION},n.prototype.addChangeListeners=function(t){t.items.forEach(function(e){var i=s(e.media),n=o(function(){this.handleChanges(t)}.bind(this),this.opts.changeTimeout);i.addListener(n),this.changeListeners.push({mql:i,fn:n})}.bind(this))},n.prototype.handleChanges=function(t){var e=this.getMatchName(t),i=this.tracker.get("dimension"+t.dimensionIndex);if(e!==i){this.tracker.set("dimension"+t.dimensionIndex,e);var n={eventCategory:t.name,eventAction:"change",eventLabel:this.opts.changeTemplate(i,e)};this.tracker.send("event",c(n,this.opts.fieldsObj,this.tracker,this.opts.hitFilter))}},n.prototype.remove=function(){for(var t,e=0;t=this.changeListeners[e];e++)t.mql.removeListener(t.fn)},n.prototype.changeTemplate=function(t,e){return t+" => "+e},l("mediaQueryTracker",n)},{"../constants":1,"../provide":12,"../usage":13,"../utilities":14,debounce:16,"object-assign":23}],7:[function(t,e,i){function n(t,e){l.track(t,l.plugins.OUTBOUND_FORM_TRACKER),window.addEventListener&&(this.opts=s({formSelector:"form",shouldTrackOutboundForm:this.shouldTrackOutboundForm,fieldsObj:{},attributePrefix:"ga-",hitFilter:null},e),this.tracker=t,this.delegate=r(document,"submit","form",this.handleFormSubmits.bind(this),{composed:!0,useCapture:!0}))}var s=t("object-assign"),r=t("dom-utils/lib/delegate"),o=t("dom-utils/lib/parse-url"),a=t("../provide"),l=t("../usage"),h=t("../utilities").createFieldsObj,c=t("../utilities").getAttributeFields,d=t("../utilities").withTimeout;n.prototype.handleFormSubmits=function(t,e){var i=o(e.action).href,n={transport:"beacon",eventCategory:"Outbound Form",eventAction:"submit",eventLabel:i};if(this.opts.shouldTrackOutboundForm(e,o)){navigator.sendBeacon||(t.preventDefault(),n.hitCallback=d(function(){e.submit()}));var r=s({},this.opts.fieldsObj,c(e,this.opts.attributePrefix));this.tracker.send("event",h(n,r,this.tracker,this.opts.hitFilter,e))}},n.prototype.shouldTrackOutboundForm=function(t,e){var i=e(t.action);return i.hostname!=location.hostname&&"http"==i.protocol.slice(0,4)},n.prototype.remove=function(){this.delegate.destroy()},a("outboundFormTracker",n)},{"../provide":12,"../usage":13,"../utilities":14,"dom-utils/lib/delegate":18,"dom-utils/lib/parse-url":22,"object-assign":23}],8:[function(t,e,i){function n(t,e){l.track(t,l.plugins.OUTBOUND_LINK_TRACKER),window.addEventListener&&(this.opts=s({events:["click"],linkSelector:"a, area",shouldTrackOutboundLink:this.shouldTrackOutboundLink,fieldsObj:{},attributePrefix:"ga-",hitFilter:null},e),this.tracker=t,this.handleLinkInteractions=this.handleLinkInteractions.bind(this),this.delegates={},this.opts.events.forEach(function(t){this.delegates[t]=r(document,t,this.opts.linkSelector,this.handleLinkInteractions,{composed:!0,useCapture:!0})}.bind(this)))}var s=t("object-assign"),r=t("dom-utils/lib/delegate"),o=t("dom-utils/lib/parse-url"),a=t("../provide"),l=t("../usage"),h=t("../utilities").createFieldsObj,c=t("../utilities").getAttributeFields;n.prototype.handleLinkInteractions=function(t,e){if(this.opts.shouldTrackOutboundLink(e,o)){navigator.sendBeacon||(e.target="_blank");var i=e.getAttribute("href")||e.getAttribute("xlink:href"),n=o(i),r={transport:"beacon",eventCategory:"Outbound Link",eventAction:t.type,eventLabel:n.href},a=s({},this.opts.fieldsObj,c(e,this.opts.attributePrefix));this.tracker.send("event",h(r,a,this.tracker,this.opts.hitFilter,e))}},n.prototype.shouldTrackOutboundLink=function(t,e){var i=t.getAttribute("href")||t.getAttribute("xlink:href"),n=e(i);return n.hostname!=location.hostname&&"http"==n.protocol.slice(0,4)},n.prototype.remove=function(){Object.keys(this.delegates).forEac
1398h(function(t){this.delegates[t].destroy()}.bind(this))},a("outboundLinkTracker",n)},{"../provide":12,"../usage":13,"../utilities":14,"dom-utils/lib/delegate":18,"dom-utils/lib/parse-url":22,"object-assign":23}],9:[function(t,e,i){function n(t,e){o.track(t,o.plugins.PAGE_VISIBILITY_TRACKER),window.addEventListener&&(this.opts=s({sessionTimeout:h,changeTemplate:this.changeTemplate,hiddenMetricIndex:null,visibleMetricIndex:null,fieldsObj:{},hitFilter:null},e),this.tracker=t,this.visibilityState=document.visibilityState,this.lastVisibilityChangeTime=+new Date,this.handleVisibilityStateChange=this.handleVisibilityStateChange.bind(this),this.overrideTrackerSendMethod(),this.overrideTrackerSendHitTask(),document.addEventListener("visibilitychange",this.handleVisibilityStateChange))}var s=t("object-assign"),r=t("../provide"),o=t("../usage"),a=t("../utilities").createFieldsObj,l=t("../utilities").isObject,h=30;n.prototype.handleVisibilityStateChange=function(){var t;if(this.prevVisibilityState=this.visibilityState,this.visibilityState=document.visibilityState,this.sessionHasTimedOut()){if("hidden"==this.visibilityState)return;"visible"==this.visibilityState&&(t={transport:"beacon"},this.tracker.send("pageview",a(t,this.opts.fieldsObj,this.tracker,this.opts.hitFilter)))}else{var e=Math.round((new Date-this.lastVisibilityChangeTime)/1e3)||1;t={transport:"beacon",eventCategory:"Page Visibility",eventAction:"change",eventLabel:this.opts.changeTemplate(this.prevVisibilityState,this.visibilityState),eventValue:e},"hidden"==this.visibilityState&&(t.nonInteraction=!0);var i=this.opts[this.prevVisibilityState+"MetricIndex"];i&&(t["metric"+i]=e),this.tracker.send("event",a(t,this.opts.fieldsObj,this.tracker,this.opts.hitFilter))}this.lastVisibilityChangeTime=+new Date},n.prototype.sessionHasTimedOut=function(){var t=(new Date-this.lastHitTime)/6e4;return this.opts.sessionTimeout<t},n.prototype.overrideTrackerSendMethod=function(){this.originalTrackerSendMethod=this.tracker.send,this.tracker.send=function(){var t=Array.prototype.slice.call(arguments),e=t[0],i=l(e)?e.hitType:e,n="pageview"==i;if(!n&&this.sessionHasTimedOut()){var s={transport:"beacon"};this.originalTrackerSendMethod.call(this.tracker,"pageview",a(s,this.opts.fieldsObj,this.tracker,this.opts.hitFilter))}this.originalTrackerSendMethod.apply(this.tracker,t)}.bind(this)},n.prototype.overrideTrackerSendHitTask=function(){this.originalTrackerSendHitTask=this.tracker.get("sendHitTask"),this.lastHitTime=+new Date,this.tracker.set("sendHitTask",function(t){this.originalTrackerSendHitTask(t),this.lastHitTime=+new Date}.bind(this))},n.prototype.changeTemplate=function(t,e){return t+" => "+e},n.prototype.remove=function(){this.tracker.set("sendHitTask",this.originalTrackerSendHitTask),this.tracker.send=this.originalTrackerSendMethod,document.removeEventListener("visibilitychange",this.handleVisibilityStateChange)},r("pageVisibilityTracker",n)},{"../provide":12,"../usage":13,"../utilities":14,"object-assign":23}],10:[function(t,e,i){function n(t,e){o.track(t,o.plugins.SOCIAL_WIDGET_TRACKER),window.addEventListener&&(this.opts=s({fieldsObj:{},hitFilter:null},e),this.tracker=t,this.addWidgetListeners=this.addWidgetListeners.bind(this),this.addTwitterEventHandlers=this.addTwitterEventHandlers.bind(this),this.handleTweetEvents=this.handleTweetEvents.bind(this),this.handleFollowEvents=this.handleFollowEvents.bind(this),this.handleLikeEvents=this.handleLikeEvents.bind(this),this.handleUnlikeEvents=this.handleUnlikeEvents.bind(this),"complete"!=document.readyState?window.addEventListener("load",this.addWidgetListeners):this.addWidgetListeners())}var s=t("object-assign"),r=t("../provide"),o=t("../usage"),a=t("../utilities").createFieldsObj;n.prototype.addWidgetListeners=function(){window.FB&&this.addFacebookEventHandlers(),window.twttr&&this.addTwitterEventHandlers()},n.prototype.addTwitterEventHandlers=function(){try{twttr.ready(function(){twttr.events.bind("tweet",this.handleTweetEvents),twttr.events.bind("follow",this.handleFollowEvents)}.bind(this))}catch(t){}},n.prototype.removeTwitterEventHandlers=function(){try{twttr.ready(function(){twttr.events.unbind("tweet",this.handleTweetEvents),twttr.events.unbind("follow",this.handleFollowEvents)}.bind(this))}catch(t){}},n.prototype.addFacebookEventHandlers=function(){try{FB.Event.subscribe("edge.create",this.handleLikeEvents),FB.Event.subscribe("edge.remove",this.handleUnlikeEvents)}catch(t){}},n.prototype.removeFacebookEventHandlers=function(){try{FB.Event.unsubscribe("edge.create",this.handleLikeEvents),FB.Event.unsubscribe("edge.remove",this.handleUnlikeEvents)}catch(t){}}
1398,n.prototype.handleTweetEvents=function(t){if("tweet"==t.region){var e=t.data.url||t.target.getAttribute("data-url")||location.href,i={transport:"beacon",socialNetwork:"Twitter",socialAction:"tweet",socialTarget:e};this.tracker.send("social",a(i,this.opts.fieldsObj,this.tracker,this.opts.hitFilter))}},n.prototype.handleFollowEvents=function(t){if("follow"==t.region){var e=t.data.screen_name||t.target.getAttribute("data-screen-name"),i={transport:"beacon",socialNetwork:"Twitter",socialAction:"follow",socialTarget:e};this.tracker.send("social",a(i,this.opts.fieldsObj,this.tracker,this.opts.hitFilter))}},n.prototype.handleLikeEvents=function(t){var e={transport:"beacon",socialNetwork:"Facebook",socialAction:"like",socialTarget:t};this.tracker.send("social",a(e,this.opts.fieldsObj,this.tracker,this.opts.hitFilter))},n.prototype.handleUnlikeEvents=function(t){var e={transport:"beacon",socialNetwork:"Facebook",socialAction:"unlike",socialTarget:t};this.tracker.send("social",a(e,this.opts.fieldsObj,this.tracker,this.opts.hitFilter))},n.prototype.remove=function(){window.removeEventListener("load",this.addWidgetListeners),this.removeFacebookEventHandlers(),this.removeTwitterEventHandlers()},r("socialWidgetTracker",n)},{"../provide":12,"../usage":13,"../utilities":14,"object-assign":23}],11:[function(t,e,i){function n(t,e){a.track(t,a.plugins.URL_CHANGE_TRACKER),history.pushState&&window.addEventListener&&(this.opts=r({shouldTrackUrlChange:this.shouldTrackUrlChange,fieldsObj:{},hitFilter:null},e),this.tracker=t,this.path=s(),this.updateTrackerData=this.updateTrackerData.bind(this),this.originalPushState=history.pushState,history.pushState=function(t,e){h(t)&&e&&(t.title=e),this.originalPushState.apply(history,arguments),this.updateTrackerData()}.bind(this),this.originalReplaceState=history.replaceState,history.replaceState=function(t,e){h(t)&&e&&(t.title=e),this.originalReplaceState.apply(history,arguments),this.updateTrackerData(!1)}.bind(this),window.addEventListener("popstate",this.updateTrackerData))}function s(){return location.pathname+location.search}var r=t("object-assign"),o=t("../provide"),a=t("../usage"),l=t("../utilities").createFieldsObj,h=t("../utilities").isObject;n.prototype.updateTrackerData=function(t){t=t!==!1,setTimeout(function(){var e=this.path,i=s();if(e!=i&&this.opts.shouldTrackUrlChange.call(this,i,e)&&(this.path=i,this.tracker.set({page:i,title:h(history.state)&&history.state.title||document.title}),t)){var n={transport:"beacon"};this.tracker.send("pageview",l(n,this.opts.fieldsObj,this.tracker,this.opts.hitFilter))}}.bind(this),0)},n.prototype.shouldTrackUrlChange=function(t,e){return t&&e},n.prototype.remove=function(){window.removeEventListener("popstate",this.updateTrackerData),history.replaceState=this.originalReplaceState,history.pushState=this.originalPushState,this.tracker=null,this.opts=null,this.path=null,this.updateTrackerData=null,this.originalReplaceState=null,this.originalPushState=null},o("urlChangeTracker",n)},{"../provide":12,"../usage":13,"../utilities":14,"object-assign":23}],12:[function(t,e,i){var n=t("./constants"),s=t("./utilities");(window.gaDevIds=window.gaDevIds||[]).push(n.DEV_ID),e.exports=function(t,e){var i=window.GoogleAnalyticsObject||"ga";window[i]=window[i]||function(){(window[i].q=window[i].q||[]).push(arguments)},window[i]("provide",t,e),window.gaplugins=window.gaplugins||{},window.gaplugins[s.capitalize(t)]=e}},{"./constants":1,"./utilities":14}],13:[function(t,e,i){function n(t){return parseInt(t||"0",16).toString(2)}function s(t){return parseInt(t||"0",2).toString(16)}function r(t,e){if(t.length<e)for(var i=e-t.length;i;)t="0"+t,i--;return t}function o(t,e){return t.substr(0,e)+1+t.substr(e+1)}function a(t,e){var i=t.get(h.USAGE_PARAM),a=r(n(i),d);a=o(a,d-e),t.set(h.USAGE_PARAM,s(a))}function l(t){t.set(h.VERSION_PARAM,h.VERSION)}var h=t("./constants"),c={CLEAN_URL_TRACKER:1,EVENT_TRACKER:2,IMPRESSION_TRACKER:3,MEDIA_QUERY_TRACKER:4,OUTBOUND_FORM_TRACKER:5,OUTBOUND_LINK_TRACKER:6,PAGE_VISIBILITY_TRACKER:7,SOCIAL_WIDGET_TRACKER:8,URL_CHANGE_TRACKER:9},d=9;e.exports={track:function(t,e){l(t),a(t,e)},plugins:c}},{"./constants":1}
1398],14:[function(t,e,i){var n=t("object-assign"),s=t("dom-utils/lib/get-attributes"),r={createFieldsObj:function(t,e,i,s,r){if("function"==typeof s){var o=i.get("buildHitTask");return{buildHitTask:function(i){i.set(t,null,!0),i.set(e,null,!0),s(i,r),o(i)}}}return n({},t,e)},getAttributeFields:function(t,e){var i=s(t),n={};return Object.keys(i).forEach(function(t){if(0===t.indexOf(e)&&t!=e+"on"){var s=i[t];"true"==s&&(s=!0),"false"==s&&(s=!1);var o=r.camelCase(t.slice(e.length));n[o]=s}}),n},domReady:function(t){"loading"==document.readyState?document.addEventListener("DOMContentLoaded",function e(){document.removeEventListener("DOMContentLoaded",e),t()}):t()},withTimeout:function(t,e){var i=!1,n=function(){i||(i=!0,t())};return setTimeout(n,e||2e3),n},camelCase:function(t){return t.replace(/[\-\_]+(\w?)/g,function(t,e){return e.toUpperCase()})},capitalize:function(t){return t.charAt(0).toUpperCase()+t.slice(1)},isObject:function(t){return"object"==typeof t&&null!==t},isArray:Array.isArray||function(t){return"[object Array]"===Object.prototype.toString.call(t)},toArray:function(t){return r.isArray(t)?t:[t]}};e.exports=r},{"dom-utils/lib/get-attributes":19,"object-assign":23}],15:[function(t,e,i){function n(){return(new Date).getTime()}e.exports=Date.now||n},{}],16:[function(t,e,i){var n=t("date-now");e.exports=function(t,e,i){function s(){var c=n()-l;c<e&&c>0?r=setTimeout(s,e-c):(r=null,i||(h=t.apply(a,o),r||(a=o=null)))}var r,o,a,l,h;return null==e&&(e=100),function(){a=this,o=arguments,l=n();var c=i&&!r;return r||(r=setTimeout(s,e)),c&&(h=t.apply(a,o),a=o=null),h}}},{"date-now":15}],17:[function(t,e,i){var n=t("./matches"),s=t("./parents");e.exports=function(t,e,i){if(t&&1==t.nodeType&&e)for(var r,o=(i?[t]:[]).concat(s(t)),a=0;r=o[a];a++)if(n(r,e))return r}},{"./matches":20,"./parents":21}],18:[function(t,e,i){var n=t("./closest"),s=t("./matches");e.exports=function(t,e,i,r,o){o=o||{};var a=function(t){if(o.composed&&"function"==typeof t.composedPath)for(var e,a=t.composedPath(),l=0;e=a[l];l++)1==e.nodeType&&s(e,i)&&(h=e);else var h=n(t.target,i,!0);h&&r.call(h,t,h)};return t.addEventListener(e,a,o.useCapture),{destroy:function(){t.removeEventListener(e,a,o.useCapture)}}}},{"./closest":17,"./matches":20}],19:[function(t,e,i){e.exports=function(t){var e={};if(!t||1!=t.nodeType)return e;var i=t.attributes;if(0===i.length)return{};for(var n,s=0;n=i[s];s++)e[n.name]=n.value;return e}},{}],20:[function(t,e,i){function n(t,e){if("string"!=typeof e)return!1;if(r)return r.call(t,e);for(var i,n=t.parentNode.querySelectorAll(e),s=0;i=n[s];s++)if(i==t)return!0;return!1}var s=window.Element.prototype,r=s.matches||s.matchesSelector||s.webkitMatchesSelector||s.mozMatchesSelector||s.msMatchesSelector||s.oMatchesSelector;e.exports=function(t,e){if(t&&1==t.nodeType&&e){if("string"==typeof e||1==e.nodeType)return t==e||n(t,e);if("length"in e)for(var i,s=0;i=e[s];s++)if(t==i||n(t,i))return!0}return!1}},{}],21:[function(t,e,i){e.exports=function(t){for(var e=[];t&&t.parentNode&&1==t.parentNode.nodeType;)e.push(t=t.parentNode);return e}},{}],22:[function(t,e,i){var n="80",s="443",r=RegExp(":("+n+"|"+s+")$"),o=document.createElement("a"),a={};e.exports=function t(e){if(e=e&&"."!=e?e:location.href,a[e])return a[e];if(o.href=e,"."==e.charAt(0)||"/"==e.charAt(0))return t(o.href);var i=o.port==n||o.port==s?"":o.port;
1398i="0"==i?"":i;var l=o.host.replace(r,""),h=o.origin?o.origin:o.protocol+"//"+l,c="/"==o.pathname.charAt(0)?o.pathname:"/"+o.pathname;return a[e]={hash:o.hash,host:l,hostname:o.hostname,href:o.href,origin:h,pathname:c,port:i,protocol:o.protocol,search:o.search,fragment:o.hash.slice(1),path:c+o.search,query:o.search.slice(1)}}},{}],23:[function(t,e,i){"use strict";function n(t){if(null===t||void 0===t)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(t)}function s(){try{if(!Object.assign)return!1;var t=new String("abc");if(t[5]="de","5"===Object.getOwnPropertyNames(t)[0])return!1;for(var e={},i=0;i<10;i++)e["_"+String.fromCharCode(i)]=i;var n=Object.getOwnPropertyNames(e).map(function(t){return e[t]});if("0123456789"!==n.join(""))return!1;var s={};return"abcdefghijklmnopqrst".split("").forEach(function(t){s[t]=t}),"abcdefghijklmnopqrst"===Object.keys(Object.assign({},s)).join("")}catch(t){return!1}}var r=Object.getOwnPropertySymbols,o=Object.prototype.hasOwnProperty,a=Object.prototype.propertyIsEnumerable;e.exports=s()?Object.assign:function(t,e){for(var i,s,l=n(t),h=1;h<arguments.length;h++){i=Object(arguments[h]);for(var c in i)o.call(i,c)&&(l[c]=i[c]);if(r){s=r(i);for(var d=0;d<s.length;
1398d++)a.call(i,s[d])&&(l[s[d]]=i[s[d]])}}return l}},{}],24:[function(t,e,i){t("./plugins/clean-url-tracker"),t("./plugins/event-tracker"),t("./plugins/impression-tracker"),t("./plugins/media-query-tracker"),t("./plugins/outbound-form-tracker"),t("./plugins/outbound-link-tracker"),t("./plugins/page-visibility-tracker"),t("./plugins/social-widget-tracker"),t("./plugins/url-change-tracker"),t("./plugins/autotrack")},{"./plugins/autotrack":2,"./plugins/clean-url-tracker":3,"./plugins/event-tracker":4,"./plugins/impression-tracker":5,"./plugins/media-query-tracker":6,"./plugins/outbound-form-tracker":7,"./plugins/outbound-link-tracker":8,"./plugins/page-visibility-tracker":9,"./plugins/social-widget-tracker":10,"./plugins/url-change-tracker":11}]},{},[24]); 1399//# sourceMappingURL=autotrack.js.map
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.