From 18ff57a183ac141f70164be481ef703729bcdf0d Mon Sep 17 00:00:00 2001 From: Jacob Thornton Date: Tue, 18 Aug 2015 19:22:46 -0700 Subject: [PATCH 1/3] js tests passing + eslint --- Gruntfile.js | 9 +- dist/js/bootstrap.js | 141 +++++++++++++++++++------------ dist/js/bootstrap.min.js | 5 +- dist/js/umd/alert.js | 3 +- dist/js/umd/button.js | 1 - dist/js/umd/carousel.js | 20 +++-- dist/js/umd/collapse.js | 9 +- dist/js/umd/dropdown.js | 20 +++-- dist/js/umd/modal.js | 12 ++- dist/js/umd/popover.js | 2 +- dist/js/umd/tab.js | 4 +- dist/js/umd/tooltip.js | 38 +++++---- dist/js/umd/util.js | 32 ++++--- js/.eslintrc | 177 +++++++++++++++++++++++++++++++++++++++ js/dist/util.js | 3 +- js/src/alert.js | 5 +- js/src/button.js | 9 +- js/src/carousel.js | 32 +++---- js/src/collapse.js | 19 ++--- js/src/dropdown.js | 24 ++++-- js/src/modal.js | 18 ++-- js/src/popover.js | 2 +- js/src/scrollspy.js | 2 +- js/src/tab.js | 4 +- js/src/tooltip.js | 42 +++++----- js/src/util.js | 42 +++++----- js/tests/unit/phantom.js | 25 +++--- package.json | 2 + 28 files changed, 485 insertions(+), 217 deletions(-) create mode 100644 js/.eslintrc diff --git a/Gruntfile.js b/Gruntfile.js index 3dc69a17c9..095b7ed3e6 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -116,6 +116,13 @@ module.exports = function (grunt) { } }, + eslint: { + options: { + configFile: 'js/.eslintrc' + }, + target: 'js/src/*.js' + }, + jscs: { options: { config: 'js/.jscsrc' @@ -449,7 +456,7 @@ module.exports = function (grunt) { testSubtasks.push('saucelabs-qunit'); } grunt.registerTask('test', testSubtasks); - grunt.registerTask('test-js', ['jscs:core', 'jscs:test', 'jscs:grunt', 'qunit']); + grunt.registerTask('test-js', ['eslint', 'jscs:core', 'jscs:test', 'jscs:grunt', 'qunit']); // JS distribution task. grunt.registerTask('dist-js', ['concat', 'lineremover', 'babel:dist', 'stamp', 'uglify:core', 'commonjs']); diff --git a/dist/js/bootstrap.js b/dist/js/bootstrap.js index 9be1d75150..3edf7eb323 100644 --- a/dist/js/bootstrap.js +++ b/dist/js/bootstrap.js @@ -80,9 +80,9 @@ var Util = (function ($) { var el = document.createElement('bootstrap'); - for (var name in TransitionEndEvent) { - if (el.style[name] !== undefined) { - return { end: TransitionEndEvent[name] }; + for (var _name in TransitionEndEvent) { + if (el.style[_name] !== undefined) { + return { end: TransitionEndEvent[_name] }; } } @@ -128,7 +128,9 @@ var Util = (function ($) { TRANSITION_END: 'bsTransitionEnd', getUID: function getUID(prefix) { - do prefix += ~ ~(Math.random() * 1000000); while (document.getElementById(prefix)); + do { + prefix += ~ ~(Math.random() * 1000000); + } while (document.getElementById(prefix)); return prefix; }, @@ -152,24 +154,28 @@ var Util = (function ($) { }, supportsTransitionEnd: function supportsTransitionEnd() { - return !!transition; + return Boolean(transition); }, typeCheckConfig: function typeCheckConfig(componentName, config, configTypes) { - for (var property in configTypes) { - var expectedTypes = configTypes[property]; - var value = config[property]; - var valueType = undefined; + if (configTypes.hasOwnProperty(property)) { + var expectedTypes = configTypes[property]; + var value = config[property]; + var valueType = undefined; - if (value && isElement(value)) valueType = 'element';else valueType = toType(value); + if (value && isElement(value)) { + valueType = 'element'; + } else { + valueType = toType(value); + } - if (!new RegExp(expectedTypes).test(valueType)) { - throw new Error(componentName.toUpperCase() + ': ' + ('Option "' + property + '" provided type "' + valueType + '" ') + ('but expected type "' + expectedTypes + '".')); + if (!new RegExp(expectedTypes).test(valueType)) { + throw new Error(componentName.toUpperCase() + ': ' + ('Option "' + property + '" provided type "' + valueType + '" ') + ('but expected type "' + expectedTypes + '".')); + } } } } - }; setTransitionEndSupport(); @@ -266,8 +272,8 @@ var Alert = (function ($) { }, { key: '_getRootElement', value: function _getRootElement(element) { - var parent = false; var selector = Util.getSelectorFromElement(element); + var parent = false; if (selector) { parent = $(selector)[0]; @@ -283,6 +289,7 @@ var Alert = (function ($) { key: '_triggerCloseEvent', value: function _triggerCloseEvent(element) { var closeEvent = $.Event(Event.CLOSE); + $(element).trigger(closeEvent); return closeEvent; } @@ -383,7 +390,6 @@ var Button = (function ($) { var EVENT_KEY = '.' + DATA_KEY; var DATA_API_KEY = '.data-api'; var JQUERY_NO_CONFLICT = $.fn[NAME]; - var TRANSITION_DURATION = 150; var ClassName = { ACTIVE: 'active', @@ -702,7 +708,7 @@ var Carousel = (function ($) { return; } - if (activeIndex == index) { + if (activeIndex === index) { this.pause(); this.cycle(); return; @@ -744,7 +750,7 @@ var Carousel = (function ($) { $(this._element).on(Event.KEYDOWN, $.proxy(this._keydown, this)); } - if (this._config.pause == 'hover' && !('ontouchstart' in document.documentElement)) { + if (this._config.pause === 'hover' && !('ontouchstart' in document.documentElement)) { $(this._element).on(Event.MOUSEENTER, $.proxy(this.pause, this)).on(Event.MOUSELEAVE, $.proxy(this.cycle, this)); } } @@ -753,7 +759,9 @@ var Carousel = (function ($) { value: function _keydown(event) { event.preventDefault(); - if (/input|textarea/i.test(event.target.tagName)) return; + if (/input|textarea/i.test(event.target.tagName)) { + return; + } switch (event.which) { case 37: @@ -777,13 +785,13 @@ var Carousel = (function ($) { var isPrevDirection = direction === Direction.PREVIOUS; var activeIndex = this._getItemIndex(activeElement); var lastItemIndex = this._items.length - 1; - var isGoingToWrap = isPrevDirection && activeIndex === 0 || isNextDirection && activeIndex == lastItemIndex; + var isGoingToWrap = isPrevDirection && activeIndex === 0 || isNextDirection && activeIndex === lastItemIndex; if (isGoingToWrap && !this._config.wrap) { return activeElement; } - var delta = direction == Direction.PREVIOUS ? -1 : 1; + var delta = direction === Direction.PREVIOUS ? -1 : 1; var itemIndex = (activeIndex + delta) % this._items.length; return itemIndex === -1 ? this._items[this._items.length - 1] : this._items[itemIndex]; @@ -821,9 +829,9 @@ var Carousel = (function ($) { var activeElement = $(this._element).find(Selector.ACTIVE_ITEM)[0]; var nextElement = element || activeElement && this._getItemByDirection(direction, activeElement); - var isCycling = !!this._interval; + var isCycling = Boolean(this._interval); - var directionalClassName = direction == Direction.NEXT ? ClassName.LEFT : ClassName.RIGHT; + var directionalClassName = direction === Direction.NEXT ? ClassName.LEFT : ClassName.RIGHT; if (nextElement && $(nextElement).hasClass(ClassName.ACTIVE)) { this._isSliding = false; @@ -908,7 +916,7 @@ var Carousel = (function ($) { $(this).data(DATA_KEY, data); } - if (typeof config == 'number') { + if (typeof config === 'number') { data.to(config); } else if (action) { data[action](); @@ -934,8 +942,8 @@ var Carousel = (function ($) { } var config = $.extend({}, $(target).data(), $(this).data()); - var slideIndex = this.getAttribute('data-slide-to'); + if (slideIndex) { config.interval = false; } @@ -1159,7 +1167,8 @@ var Collapse = (function ($) { return; } - var scrollSize = 'scroll' + (dimension[0].toUpperCase() + dimension.slice(1)); + var capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1); + var scrollSize = 'scroll' + capitalizedDimension; $(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(TRANSITION_DURATION); @@ -1205,7 +1214,8 @@ var Collapse = (function ($) { this._element.style[dimension] = 0; if (!Util.supportsTransitionEnd()) { - return complete(); + complete(); + return; } $(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(TRANSITION_DURATION); @@ -1233,7 +1243,7 @@ var Collapse = (function ($) { key: '_getConfig', value: function _getConfig(config) { config = $.extend({}, Default, config); - config.toggle = !!config.toggle; // coerce string values + config.toggle = Boolean(config.toggle); // coerce string values Util.typeCheckConfig(NAME, config, DefaultType); return config; } @@ -1319,7 +1329,6 @@ var Collapse = (function ($) { event.preventDefault(); var target = Collapse._getTargetFromElement(this); - var data = $(target).data(DATA_KEY); var config = data ? 'toggle' : $(this).data(); @@ -1420,7 +1429,7 @@ var Dropdown = (function ($) { value: function toggle() { if (this.disabled || $(this).hasClass(ClassName.DISABLED)) { - return; + return false; } var parent = Dropdown._getParentFromElement(this); @@ -1447,7 +1456,7 @@ var Dropdown = (function ($) { $(parent).trigger(showEvent); if (showEvent.isDefaultPrevented()) { - return; + return false; } this.focus(); @@ -1580,9 +1589,19 @@ var Dropdown = (function ($) { var index = items.indexOf(event.target); - if (event.which === 38 && index > 0) index--; // up - if (event.which === 40 && index < items.length - 1) index++; // down - if (! ~index) index = 0; + if (event.which === 38 && index > 0) { + // up + index--; + } + + if (event.which === 40 && index < items.length - 1) { + // down + index++; + } + + if (! ~index) { + index = 0; + } items[index].focus(); } @@ -1842,14 +1861,18 @@ var Modal = (function ($) { $(this._element).addClass(ClassName.IN); - if (this._config.focus) this._enforceFocus(); + if (this._config.focus) { + this._enforceFocus(); + } var shownEvent = $.Event(Event.SHOWN, { relatedTarget: relatedTarget }); var transitionComplete = function transitionComplete() { - if (_this8._config.focus) _this8._element.focus(); + if (_this8._config.focus) { + _this8._element.focus(); + } $(_this8._element).trigger(shownEvent); }; @@ -2006,7 +2029,7 @@ var Modal = (function ($) { } if (this._isBodyOverflowing && !isModalOverflowing) { - this._element.style.paddingRight = this._scrollbarWidth + 'px'; + this._element.style.paddingRight = this._scrollbarWidth + 'px~'; } } }, { @@ -2035,7 +2058,7 @@ var Modal = (function ($) { this._originalBodyPadding = document.body.style.paddingRight || ''; if (this._isBodyOverflowing) { - document.body.style.paddingRight = bodyPadding + this._scrollbarWidth + 'px'; + document.body.style.paddingRight = bodyPadding + (this._scrollbarWidth + 'px'); } } }, { @@ -2526,7 +2549,7 @@ var Tab = (function ($) { value: function show() { var _this15 = this; - if (this._element.parentNode && this._element.parentNode.nodeType == Node.ELEMENT_NODE && $(this._element).parent().hasClass(ClassName.ACTIVE)) { + if (this._element.parentNode && this._element.parentNode.nodeType === Node.ELEMENT_NODE && $(this._element).parent().hasClass(ClassName.ACTIVE)) { return; } @@ -2600,7 +2623,7 @@ var Tab = (function ($) { key: '_activate', value: function _activate(element, container, callback) { var active = $(container).find(Selector.ACTIVE_CHILD)[0]; - var isTransitioning = callback && Util.supportsTransitionEnd() && (active && $(active).hasClass(ClassName.FADE) || !!$(container).find(Selector.FADE_CHILD)[0]); + var isTransitioning = callback && Util.supportsTransitionEnd() && (active && $(active).hasClass(ClassName.FADE) || Boolean($(container).find(Selector.FADE_CHILD)[0])); var complete = $.proxy(this._transitionComplete, this, element, active, isTransitioning, callback); @@ -2863,11 +2886,9 @@ var Tooltip = (function ($) { }, { key: 'toggle', value: function toggle(event) { - var context = this; - var dataKey = this.constructor.DATA_KEY; - if (event) { - context = $(event.currentTarget).data(dataKey); + var dataKey = this.constructor.DATA_KEY; + var context = $(event.currentTarget).data(dataKey); if (!context) { context = new this.constructor(event.currentTarget, this._getDelegateConfig()); @@ -2882,7 +2903,13 @@ var Tooltip = (function ($) { context._leave(null, context); } } else { - $(context.getTipElement()).hasClass(ClassName.IN) ? context._leave(null, context) : context._enter(null, context); + + if ($(this.getTipElement()).hasClass(ClassName.IN)) { + this._leave(null, this); + return; + } + + this._enter(null, this); } } }, { @@ -2947,9 +2974,9 @@ var Tooltip = (function ($) { $(this.element).trigger(this.constructor.Event.INSERTED); this._tether = new Tether({ + attachment: attachment, element: tip, target: this.element, - attachment: attachment, classes: TetherClass, classPrefix: CLASS_PREFIX, offset: this.config.offset, @@ -2972,7 +2999,12 @@ var Tooltip = (function ($) { } }; - Util.supportsTransitionEnd() && $(this.tip).hasClass(ClassName.FADE) ? $(this.tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(Tooltip._TRANSITION_DURATION) : complete(); + if (Util.supportsTransitionEnd() && $(this.tip).hasClass(ClassName.FADE)) { + $(this.tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(Tooltip._TRANSITION_DURATION); + return; + } + + complete(); } } }, { @@ -3019,7 +3051,7 @@ var Tooltip = (function ($) { }, { key: 'isWithContent', value: function isWithContent() { - return !!this.getTitle(); + return Boolean(this.getTitle()); } }, { key: 'getTipElement', @@ -3082,8 +3114,8 @@ var Tooltip = (function ($) { if (trigger === 'click') { $(_this18.element).on(_this18.constructor.Event.CLICK, _this18.config.selector, $.proxy(_this18.toggle, _this18)); } else if (trigger !== Trigger.MANUAL) { - var eventIn = trigger == Trigger.HOVER ? _this18.constructor.Event.MOUSEENTER : _this18.constructor.Event.FOCUSIN; - var eventOut = trigger == Trigger.HOVER ? _this18.constructor.Event.MOUSELEAVE : _this18.constructor.Event.FOCUSOUT; + var eventIn = trigger === Trigger.HOVER ? _this18.constructor.Event.MOUSEENTER : _this18.constructor.Event.FOCUSIN; + var eventOut = trigger === Trigger.HOVER ? _this18.constructor.Event.MOUSELEAVE : _this18.constructor.Event.FOCUSOUT; $(_this18.element).on(eventIn, _this18.config.selector, $.proxy(_this18._enter, _this18)).on(eventOut, _this18.config.selector, $.proxy(_this18._leave, _this18)); } @@ -3125,7 +3157,7 @@ var Tooltip = (function ($) { } if (event) { - context._activeTrigger[event.type == 'focusin' ? Trigger.FOCUS : Trigger.HOVER] = true; + context._activeTrigger[event.type === 'focusin' ? Trigger.FOCUS : Trigger.HOVER] = true; } if ($(context.getTipElement()).hasClass(ClassName.IN) || context._hoverState === HoverState.IN) { @@ -3161,7 +3193,7 @@ var Tooltip = (function ($) { } if (event) { - context._activeTrigger[event.type == 'focusout' ? Trigger.FOCUS : Trigger.HOVER] = false; + context._activeTrigger[event.type === 'focusout' ? Trigger.FOCUS : Trigger.HOVER] = false; } if (context._isWithActiveTrigger()) { @@ -3217,9 +3249,8 @@ var Tooltip = (function ($) { if (this.config) { for (var key in this.config) { - var value = this.config[key]; - if (this.constructor.Default[key] !== value) { - config[key] = value; + if (this.constructor.Default[key] !== this.config[key]) { + config[key] = this.config[key]; } } } @@ -3415,7 +3446,7 @@ var Popover = (function ($) { }, { key: '_getContent', value: function _getContent() { - return this.element.getAttribute('data-content') || (typeof this.config.content == 'function' ? this.config.content.call(this.element) : this.config.content); + return this.element.getAttribute('data-content') || (typeof this.config.content === 'function' ? this.config.content.call(this.element) : this.config.content); } // static diff --git a/dist/js/bootstrap.min.js b/dist/js/bootstrap.min.js index 8c2aadbce6..80412986de 100644 --- a/dist/js/bootstrap.min.js +++ b/dist/js/bootstrap.min.js @@ -3,5 +3,6 @@ * Copyright 2011-2015 Twitter, Inc. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) */ -if("undefined"==typeof jQuery)throw new Error("Bootstrap's JavaScript requires jQuery");+function(a){var b=a.fn.jquery.split(" ")[0].split(".");if(b[0]<2&&b[1]<9||1==b[0]&&9==b[1]&&b[2]<1)throw new Error("Bootstrap's JavaScript requires jQuery version 1.9.1 or higher")}(jQuery),+function(){"use strict";function a(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}function b(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}{var c=function(a,b,c){for(var d=!0;d;){var e=a,f=b,g=c;h=j=i=void 0,d=!1,null===e&&(e=Function.prototype);var h=Object.getOwnPropertyDescriptor(e,f);if(void 0!==h){if("value"in h)return h.value;var i=h.get;return void 0===i?void 0:i.call(g)}var j=Object.getPrototypeOf(e);if(null===j)return void 0;a=j,b=f,c=g,d=!0}},d=function(){function a(a,b){for(var c=0;cthis._items.length-1||0>b)){if(this._isSliding)return void a(this._element).one(o.SLID,function(){return c.to(b)});if(d==b)return this.pause(),void this.cycle();var e=b>d?n.NEXT:n.PREVIOUS;this._slide(e,this._items[b])}}},{key:"dispose",value:function(){a(this._element).off(h),a.removeData(this._element,g),this._items=null,this._config=null,this._element=null,this._interval=null,this._isPaused=null,this._isSliding=null,this._activeElement=null,this._indicatorsElement=null}},{key:"_getConfig",value:function(b){return b=a.extend({},l,b),e.typeCheckConfig(c,b,m),b}},{key:"_addEventListeners",value:function(){this._config.keyboard&&a(this._element).on(o.KEYDOWN,a.proxy(this._keydown,this)),"hover"!=this._config.pause||"ontouchstart"in document.documentElement||a(this._element).on(o.MOUSEENTER,a.proxy(this.pause,this)).on(o.MOUSELEAVE,a.proxy(this.cycle,this))}},{key:"_keydown",value:function(a){if(a.preventDefault(),!/input|textarea/i.test(a.target.tagName))switch(a.which){case 37:this.prev();break;case 39:this.next();break;default:return}}},{key:"_getItemIndex",value:function(b){return this._items=a.makeArray(a(b).parent().find(q.ITEM)),this._items.indexOf(b)}},{key:"_getItemByDirection",value:function(a,b){var c=a===n.NEXT,d=a===n.PREVIOUS,e=this._getItemIndex(b),f=this._items.length-1,g=d&&0===e||c&&e==f;if(g&&!this._config.wrap)return b;var h=a==n.PREVIOUS?-1:1,i=(e+h)%this._items.length;return-1===i?this._items[this._items.length-1]:this._items[i]}},{key:"_triggerSlideEvent",value:function(b,c){var d=a.Event(o.SLIDE,{relatedTarget:b,direction:c});return a(this._element).trigger(d),d}},{key:"_setActiveIndicatorElement",value:function(b){if(this._indicatorsElement){a(this._indicatorsElement).find(q.ACTIVE).removeClass(p.ACTIVE);var c=this._indicatorsElement.children[this._getItemIndex(b)];c&&a(c).addClass(p.ACTIVE)}}},{key:"_slide",value:function(b,c){var d=this,f=a(this._element).find(q.ACTIVE_ITEM)[0],g=c||f&&this._getItemByDirection(b,f),h=!!this._interval,i=b==n.NEXT?p.LEFT:p.RIGHT;if(g&&a(g).hasClass(p.ACTIVE))return void(this._isSliding=!1);var j=this._triggerSlideEvent(g,i);if(!j.isDefaultPrevented()&&f&&g){this._isSliding=!0,h&&this.pause(),this._setActiveIndicatorElement(g);var l=a.Event(o.SLID,{relatedTarget:g,direction:i});e.supportsTransitionEnd()&&a(this._element).hasClass(p.SLIDE)?(a(g).addClass(b),e.reflow(g),a(f).addClass(i),a(g).addClass(i),a(f).one(e.TRANSITION_END,function(){a(g).removeClass(i).removeClass(b),a(g).addClass(p.ACTIVE),a(f).removeClass(p.ACTIVE).removeClass(b).removeClass(i),d._isSliding=!1,setTimeout(function(){return a(d._element).trigger(l)},0)}).emulateTransitionEnd(k)):(a(f).removeClass(p.ACTIVE),a(g).addClass(p.ACTIVE),this._isSliding=!1,a(this._element).trigger(l)),h&&this.cycle()}}}],[{key:"_jQueryInterface",value:function(b){return this.each(function(){var c=a(this).data(g),d=a.extend({},l,a(this).data());"object"==typeof b&&a.extend(d,b);var e="string"==typeof b?b:d.slide;c||(c=new i(this,d),a(this).data(g,c)),"number"==typeof b?c.to(b):e?c[e]():d.interval&&(c.pause(),c.cycle())})}},{key:"_dataApiClickHandler",value:function(b){var c=e.getSelectorFromElement(this);if(c){var d=a(c)[0];if(d&&a(d).hasClass(p.CAROUSEL)){var f=a.extend({},a(d).data(),a(this).data()),h=this.getAttribute("data-slide-to");h&&(f.interval=!1),i._jQueryInterface.call(a(d),f),h&&a(d).data(g).to(h),b.preventDefault()}}}},{key:"VERSION",get:function(){return f}},{key:"Default",get:function(){return l}}]),i}();return a(document).on(o.CLICK_DATA_API,q.DATA_SLIDE,r._dataApiClickHandler),a(window).on(o.LOAD_DATA_API,function(){a(q.DATA_RIDE).each(function(){var b=a(this);r._jQueryInterface.call(b,b.data())})}),a.fn[c]=r._jQueryInterface,a.fn[c].Constructor=r,a.fn[c].noConflict=function(){return a.fn[c]=j,r._jQueryInterface},r}(jQuery),function(a){var c="collapse",f="4.0.0",g="bs.collapse",h="."+g,i=".data-api",j=a.fn[c],k=600,l={toggle:!0,parent:""},m={toggle:"boolean",parent:"string"},n={SHOW:"show"+h,SHOWN:"shown"+h,HIDE:"hide"+h,HIDDEN:"hidden"+h,CLICK_DATA_API:"click"+h+i},o={IN:"in",COLLAPSE:"collapse",COLLAPSING:"collapsing",COLLAPSED:"collapsed"},p={WIDTH:"width",HEIGHT:"height"},q={ACTIVES:".panel > .in, .panel > .collapsing",DATA_TOGGLE:'[data-toggle="collapse"]'},r=function(){function h(c,d){b(this,h),this._isTransitioning=!1,this._element=c,this._config=this._getConfig(d),this._triggerArray=a.makeArray(a('[data-toggle="collapse"][href="#'+c.id+'"],'+('[data-toggle="collapse"][data-target="#'+c.id+'"]'))),this._parent=this._config.parent?this._getParent():null,this._config.parent||this._addAriaAndCollapsedClass(this._element,this._triggerArray),this._config.toggle&&this.toggle()}return d(h,[{key:"toggle",value:function(){a(this._element).hasClass(o.IN)?this.hide():this.show()}},{key:"show",value:function(){var b=this;if(!this._isTransitioning&&!a(this._element).hasClass(o.IN)){var c=void 0,d=void 0;if(this._parent&&(c=a.makeArray(a(q.ACTIVES)),c.length||(c=null)),!(c&&(d=a(c).data(g),d&&d._isTransitioning))){var f=a.Event(n.SHOW);if(a(this._element).trigger(f),!f.isDefaultPrevented()){c&&(h._jQueryInterface.call(a(c),"hide"),d||a(c).data(g,null));var i=this._getDimension();a(this._element).removeClass(o.COLLAPSE).addClass(o.COLLAPSING),this._element.style[i]=0,this._element.setAttribute("aria-expanded",!0),this._triggerArray.length&&a(this._triggerArray).removeClass(o.COLLAPSED).attr("aria-expanded",!0),this.setTransitioning(!0);var j=function(){a(b._element).removeClass(o.COLLAPSING).addClass(o.COLLAPSE).addClass(o.IN),b._element.style[i]="",b.setTransitioning(!1),a(b._element).trigger(n.SHOWN)};if(!e.supportsTransitionEnd())return void j();var l="scroll"+(i[0].toUpperCase()+i.slice(1));a(this._element).one(e.TRANSITION_END,j).emulateTransitionEnd(k),this._element.style[i]=this._element[l]+"px"}}}}},{key:"hide",value:function(){var b=this;if(!this._isTransitioning&&a(this._element).hasClass(o.IN)){var c=a.Event(n.HIDE);if(a(this._element).trigger(c),!c.isDefaultPrevented()){var d=this._getDimension(),f=d===p.WIDTH?"offsetWidth":"offsetHeight";this._element.style[d]=this._element[f]+"px",e.reflow(this._element),a(this._element).addClass(o.COLLAPSING).removeClass(o.COLLAPSE).removeClass(o.IN),this._element.setAttribute("aria-expanded",!1),this._triggerArray.length&&a(this._triggerArray).addClass(o.COLLAPSED).attr("aria-expanded",!1),this.setTransitioning(!0);var g=function(){b.setTransitioning(!1),a(b._element).removeClass(o.COLLAPSING).addClass(o.COLLAPSE).trigger(n.HIDDEN)};return this._element.style[d]=0,e.supportsTransitionEnd()?void a(this._element).one(e.TRANSITION_END,g).emulateTransitionEnd(k):g()}}}},{key:"setTransitioning",value:function(a){this._isTransitioning=a}},{key:"dispose",value:function(){a.removeData(this._element,g),this._config=null,this._parent=null,this._element=null,this._triggerArray=null,this._isTransitioning=null}},{key:"_getConfig",value:function(b){return b=a.extend({},l,b),b.toggle=!!b.toggle,e.typeCheckConfig(c,b,m),b}},{key:"_getDimension",value:function(){var b=a(this._element).hasClass(p.WIDTH);return b?p.WIDTH:p.HEIGHT}},{key:"_getParent",value:function(){var b=this,c=a(this._config.parent)[0],d='[data-toggle="collapse"][data-parent="'+this._config.parent+'"]';return a(c).find(d).each(function(a,c){b._addAriaAndCollapsedClass(h._getTargetFromElement(c),[c])}),c}},{key:"_addAriaAndCollapsedClass",value:function(b,c){if(b){var d=a(b).hasClass(o.IN);b.setAttribute("aria-expanded",d),c.length&&a(c).toggleClass(o.COLLAPSED,!d).attr("aria-expanded",d)}}}],[{key:"_getTargetFromElement",value:function(b){var c=e.getSelectorFromElement(b);return c?a(c)[0]:null}},{key:"_jQueryInterface",value:function(b){return this.each(function(){var c=a(this),d=c.data(g),e=a.extend({},l,c.data(),"object"==typeof b&&b);!d&&e.toggle&&/show|hide/.test(b)&&(e.toggle=!1),d||(d=new h(this,e),c.data(g,d)),"string"==typeof b&&d[b]()})}},{key:"VERSION",get:function(){return f}},{key:"Default",get:function(){return l}}]),h}();return a(document).on(n.CLICK_DATA_API,q.DATA_TOGGLE,function(b){b.preventDefault();var c=r._getTargetFromElement(this),d=a(c).data(g),e=d?"toggle":a(this).data();r._jQueryInterface.call(a(c),e)}),a.fn[c]=r._jQueryInterface,a.fn[c].Constructor=r,a.fn[c].noConflict=function(){return a.fn[c]=j,r._jQueryInterface},r}(jQuery),function(a){var c="dropdown",f="4.0.0",g="bs.dropdown",h="."+g,i=".data-api",j=a.fn[c],k={HIDE:"hide"+h,HIDDEN:"hidden"+h,SHOW:"show"+h,SHOWN:"shown"+h,CLICK:"click"+h,CLICK_DATA_API:"click"+h+i,KEYDOWN_DATA_API:"keydown"+h+i},l={BACKDROP:"dropdown-backdrop",DISABLED:"disabled",OPEN:"open"},m={BACKDROP:".dropdown-backdrop",DATA_TOGGLE:'[data-toggle="dropdown"]',FORM_CHILD:".dropdown form",ROLE_MENU:'[role="menu"]',ROLE_LISTBOX:'[role="listbox"]',NAVBAR_NAV:".navbar-nav",VISIBLE_ITEMS:'[role="menu"] li:not(.disabled) a, [role="listbox"] li:not(.disabled) a'},n=function(){function c(a){b(this,c),this._element=a,this._addEventListeners()}return d(c,[{key:"toggle",value:function(){if(!this.disabled&&!a(this).hasClass(l.DISABLED)){var b=c._getParentFromElement(this),d=a(b).hasClass(l.OPEN);if(c._clearMenus(),d)return!1;if("ontouchstart"in document.documentElement&&!a(b).closest(m.NAVBAR_NAV).length){var e=document.createElement("div");e.className=l.BACKDROP,a(e).insertBefore(this),a(e).on("click",c._clearMenus)}var f={relatedTarget:this},g=a.Event(k.SHOW,f);if(a(b).trigger(g),!g.isDefaultPrevented())return this.focus(),this.setAttribute("aria-expanded","true"),a(b).toggleClass(l.OPEN),a(b).trigger(a.Event(k.SHOWN,f)),!1}}},{key:"dispose",value:function(){a.removeData(this._element,g),a(this._element).off(h),this._element=null}},{key:"_addEventListeners",value:function(){a(this._element).on(k.CLICK,this.toggle)}}],[{key:"_jQueryInterface",value:function(b){return this.each(function(){var d=a(this).data(g);d||a(this).data(g,d=new c(this)),"string"==typeof b&&d[b].call(this)})}},{key:"_clearMenus",value:function(b){if(!b||3!==b.which){var d=a(m.BACKDROP)[0];d&&d.parentNode.removeChild(d);for(var e=a.makeArray(a(m.DATA_TOGGLE)),f=0;f0&&h--,40===b.which&&hdocument.documentElement.clientHeight;!this._isBodyOverflowing&&a&&(this._element.style.paddingLeft=this._scrollbarWidth+"px"),this._isBodyOverflowing&&!a&&(this._element.style.paddingRight=this._scrollbarWidth+"px")}},{key:"_resetAdjustments",value:function(){this._element.style.paddingLeft="",this._element.style.paddingRight=""}},{key:"_checkScrollbar",value:function(){var a=window.innerWidth;if(!a){var b=document.documentElement.getBoundingClientRect();a=b.right-Math.abs(b.left)}this._isBodyOverflowing=document.body.clientWidth a"},p={OFFSET:"offset",POSITION:"position"},q=function(){function i(c,d){b(this,i),this._element=c,this._scrollElement="BODY"===c.tagName?window:c,this._config=this._getConfig(d),this._selector=this._config.target+" "+o.NAV_ANCHORS,this._offsets=[],this._targets=[],this._activeTarget=null,this._scrollHeight=0,a(this._scrollElement).on(m.SCROLL,a.proxy(this._process,this)),this.refresh(),this._process()}return d(i,[{key:"refresh",value:function(){var b=this,c=this._scrollElement!==this._scrollElement.window?p.POSITION:p.OFFSET,d="auto"===this._config.method?c:this._config.method,f=d===p.POSITION?this._getScrollTop():0;this._offsets=[],this._targets=[],this._scrollHeight=this._getScrollHeight();var g=a.makeArray(a(this._selector));g.map(function(b){var c=void 0,g=e.getSelectorFromElement(b);return g&&(c=a(g)[0]),c&&(c.offsetWidth||c.offsetHeight)?[a(c)[d]().top+f,g]:void 0}).filter(function(a){return a}).sort(function(a,b){return a[0]-b[0]}).forEach(function(a){b._offsets.push(a[0]),b._targets.push(a[1])})}},{key:"dispose",value:function(){a.removeData(this._element,g),a(this._scrollElement).off(h),this._element=null,this._scrollElement=null,this._config=null,this._selector=null,this._offsets=null,this._targets=null,this._activeTarget=null,this._scrollHeight=null}},{key:"_getConfig",value:function(b){if(b=a.extend({},k,b),"string"!=typeof b.target){var d=a(b.target).attr("id");d||(d=e.getUID(c),a(b.target).attr("id",d)),b.target="#"+d}return e.typeCheckConfig(c,b,l),b}},{key:"_getScrollTop",value:function(){return this._scrollElement===window?this._scrollElement.scrollY:this._scrollElement.scrollTop}},{key:"_getScrollHeight",value:function(){return this._scrollElement.scrollHeight||Math.max(document.body.scrollHeight,document.documentElement.scrollHeight)}},{key:"_process",value:function(){var a=this._getScrollTop()+this._config.offset,b=this._getScrollHeight(),c=this._config.offset+b-this._scrollElement.offsetHeight;if(this._scrollHeight!==b&&this.refresh(),a>=c){var d=this._targets[this._targets.length-1];this._activeTarget!==d&&this._activate(d)}if(this._activeTarget&&a=this._offsets[e]&&(void 0===this._offsets[e+1]||a .fade",ACTIVE:".active",ACTIVE_CHILD:"> .active",DATA_TOGGLE:'[data-toggle="tab"], [data-toggle="pill"]',DROPDOWN_ACTIVE_CHILD:"> .dropdown-menu > .active"},o=function(){function c(a){b(this,c),this._element=a}return d(c,[{key:"show",value:function(){var b=this;if(!this._element.parentNode||this._element.parentNode.nodeType!=Node.ELEMENT_NODE||!a(this._element).parent().hasClass(m.ACTIVE)){var c=void 0,d=void 0,f=a(this._element).closest(n.UL)[0],g=e.getSelectorFromElement(this._element);f&&(d=a.makeArray(a(f).find(n.ACTIVE)),d=d[d.length-1],d&&(d=a(d).find(n.A)[0]));var h=a.Event(l.HIDE,{relatedTarget:this._element}),i=a.Event(l.SHOW,{relatedTarget:d});if(d&&a(d).trigger(h),a(this._element).trigger(i),!i.isDefaultPrevented()&&!h.isDefaultPrevented()){g&&(c=a(g)[0]),this._activate(a(this._element).closest(n.LI)[0],f);var j=function(){var c=a.Event(l.HIDDEN,{ -relatedTarget:b._element}),e=a.Event(l.SHOWN,{relatedTarget:d});a(d).trigger(c),a(b._element).trigger(e)};c?this._activate(c,c.parentNode,j):j()}}}},{key:"dispose",value:function(){a.removeClass(this._element,g),this._element=null}},{key:"_activate",value:function(b,c,d){var f=a(c).find(n.ACTIVE_CHILD)[0],g=d&&e.supportsTransitionEnd()&&(f&&a(f).hasClass(m.FADE)||!!a(c).find(n.FADE_CHILD)[0]),h=a.proxy(this._transitionComplete,this,b,f,g,d);f&&g?a(f).one(e.TRANSITION_END,h).emulateTransitionEnd(k):h(),f&&a(f).removeClass(m.IN)}},{key:"_transitionComplete",value:function(b,c,d,f){if(c){a(c).removeClass(m.ACTIVE);var g=a(c).find(n.DROPDOWN_ACTIVE_CHILD)[0];g&&a(g).removeClass(m.ACTIVE);var h=a(c).find(n.DATA_TOGGLE)[0];h&&h.setAttribute("aria-expanded",!1)}a(b).addClass(m.ACTIVE);var i=a(b).find(n.DATA_TOGGLE)[0];if(i&&i.setAttribute("aria-expanded",!0),d?(e.reflow(b),a(b).addClass(m.IN)):a(b).removeClass(m.FADE),b.parentNode&&a(b.parentNode).hasClass(m.DROPDOWN_MENU)){var j=a(b).closest(n.LI_DROPDOWN)[0];j&&a(j).addClass(m.ACTIVE),i=a(b).find(n.DATA_TOGGLE)[0],i&&i.setAttribute("aria-expanded",!0)}f&&f()}}],[{key:"_jQueryInterface",value:function(b){return this.each(function(){var d=a(this),e=d.data(g);e||(e=e=new c(this),d.data(g,e)),"string"==typeof b&&e[b]()})}},{key:"VERSION",get:function(){return f}}]),c}();return a(document).on(l.CLICK_DATA_API,n.DATA_TOGGLE,function(b){b.preventDefault(),o._jQueryInterface.call(a(this),"show")}),a.fn[c]=o._jQueryInterface,a.fn[c].Constructor=o,a.fn[c].noConflict=function(){return a.fn[c]=j,o._jQueryInterface},o}(jQuery),function(a){var c="tooltip",f="4.0.0",g="bs.tooltip",h="."+g,i=a.fn[c],j=150,k="bs-tether",l={animation:!0,template:'',trigger:"hover focus",title:"",delay:0,html:!1,selector:!1,placement:"top",offset:"0 0",constraints:[]},m={animation:"boolean",template:"string",title:"(string|function)",trigger:"string",delay:"(number|object)",html:"boolean",selector:"(string|boolean)",placement:"(string|function)",offset:"string",constraints:"array"},n={TOP:"bottom center",RIGHT:"middle left",BOTTOM:"top center",LEFT:"middle right"},o={IN:"in",OUT:"out"},p={HIDE:"hide"+h,HIDDEN:"hidden"+h,SHOW:"show"+h,SHOWN:"shown"+h,INSERTED:"inserted"+h,CLICK:"click"+h,FOCUSIN:"focusin"+h,FOCUSOUT:"focusout"+h,MOUSEENTER:"mouseenter"+h,MOUSELEAVE:"mouseleave"+h},q={FADE:"fade",IN:"in"},r={TOOLTIP:".tooltip",TOOLTIP_INNER:".tooltip-inner"},s={element:!1,enabled:!1},t={HOVER:"hover",FOCUS:"focus",CLICK:"click",MANUAL:"manual"},u=function(){function i(a,c){b(this,i),this._isEnabled=!0,this._timeout=0,this._hoverState="",this._activeTrigger={},this._tether=null,this.element=a,this.config=this._getConfig(c),this.tip=null,this._setListeners()}return d(i,[{key:"enable",value:function(){this._isEnabled=!0}},{key:"disable",value:function(){this._isEnabled=!1}},{key:"toggleEnabled",value:function(){this._isEnabled=!this._isEnabled}},{key:"toggle",value:function(b){var c=this,d=this.constructor.DATA_KEY;b?(c=a(b.currentTarget).data(d),c||(c=new this.constructor(b.currentTarget,this._getDelegateConfig()),a(b.currentTarget).data(d,c)),c._activeTrigger.click=!c._activeTrigger.click,c._isWithActiveTrigger()?c._enter(null,c):c._leave(null,c)):a(c.getTipElement()).hasClass(q.IN)?c._leave(null,c):c._enter(null,c)}},{key:"dispose",value:function(){clearTimeout(this._timeout),this.cleanupTether(),a.removeData(this.element,this.constructor.DATA_KEY),a(this.element).off(this.constructor.EVENT_KEY),this.tip&&a(this.tip).remove(),this._isEnabled=null,this._timeout=null,this._hoverState=null,this._activeTrigger=null,this._tether=null,this.element=null,this.config=null,this.tip=null}},{key:"show",value:function(){var b=this,c=a.Event(this.constructor.Event.SHOW);if(this.isWithContent()&&this._isEnabled){a(this.element).trigger(c);var d=a.contains(this.element.ownerDocument.documentElement,this.element);if(c.isDefaultPrevented()||!d)return;var f=this.getTipElement(),g=e.getUID(this.constructor.NAME);f.setAttribute("id",g),this.element.setAttribute("aria-describedby",g),this.setContent(),this.config.animation&&a(f).addClass(q.FADE);var h="function"==typeof this.config.placement?this.config.placement.call(this,f,this.element):this.config.placement,j=this._getAttachment(h);a(f).data(this.constructor.DATA_KEY,this).appendTo(document.body),a(this.element).trigger(this.constructor.Event.INSERTED),this._tether=new Tether({element:f,target:this.element,attachment:j,classes:s,classPrefix:k,offset:this.config.offset,constraints:this.config.constraints}),e.reflow(f),this._tether.position(),a(f).addClass(q.IN);var l=function(){var c=b._hoverState;b._hoverState=null,a(b.element).trigger(b.constructor.Event.SHOWN),c===o.OUT&&b._leave(null,b)};e.supportsTransitionEnd()&&a(this.tip).hasClass(q.FADE)?a(this.tip).one(e.TRANSITION_END,l).emulateTransitionEnd(i._TRANSITION_DURATION):l()}}},{key:"hide",value:function(b){var c=this,d=this.getTipElement(),f=a.Event(this.constructor.Event.HIDE),g=function(){c._hoverState!==o.IN&&d.parentNode&&d.parentNode.removeChild(d),c.element.removeAttribute("aria-describedby"),a(c.element).trigger(c.constructor.Event.HIDDEN),c.cleanupTether(),b&&b()};a(this.element).trigger(f),f.isDefaultPrevented()||(a(d).removeClass(q.IN),e.supportsTransitionEnd()&&a(this.tip).hasClass(q.FADE)?a(d).one(e.TRANSITION_END,g).emulateTransitionEnd(j):g(),this._hoverState="")}},{key:"isWithContent",value:function(){return!!this.getTitle()}},{key:"getTipElement",value:function(){return this.tip=this.tip||a(this.config.template)[0]}},{key:"setContent",value:function(){var b=this.getTipElement(),c=this.getTitle(),d=this.config.html?"innerHTML":"innerText";a(b).find(r.TOOLTIP_INNER)[0][d]=c,a(b).removeClass(q.FADE).removeClass(q.IN),this.cleanupTether()}},{key:"getTitle",value:function(){var a=this.element.getAttribute("data-original-title");return a||(a="function"==typeof this.config.title?this.config.title.call(this.element):this.config.title),a}},{key:"cleanupTether",value:function(){this._tether&&(this._tether.destroy(),a(this.element).removeClass(this._removeTetherClasses),a(this.tip).removeClass(this._removeTetherClasses))}},{key:"_getAttachment",value:function(a){return n[a.toUpperCase()]}},{key:"_setListeners",value:function(){var b=this,c=this.config.trigger.split(" ");c.forEach(function(c){if("click"===c)a(b.element).on(b.constructor.Event.CLICK,b.config.selector,a.proxy(b.toggle,b));else if(c!==t.MANUAL){var d=c==t.HOVER?b.constructor.Event.MOUSEENTER:b.constructor.Event.FOCUSIN,e=c==t.HOVER?b.constructor.Event.MOUSELEAVE:b.constructor.Event.FOCUSOUT;a(b.element).on(d,b.config.selector,a.proxy(b._enter,b)).on(e,b.config.selector,a.proxy(b._leave,b))}}),this.config.selector?this.config=a.extend({},this.config,{trigger:"manual",selector:""}):this._fixTitle()}},{key:"_removeTetherClasses",value:function(a,b){return((b.baseVal||b).match(new RegExp("(^|\\s)"+k+"-\\S+","g"))||[]).join(" ")}},{key:"_fixTitle",value:function(){var a=typeof this.element.getAttribute("data-original-title");(this.element.getAttribute("title")||"string"!==a)&&(this.element.setAttribute("data-original-title",this.element.getAttribute("title")||""),this.element.setAttribute("title",""))}},{key:"_enter",value:function(b,c){var d=this.constructor.DATA_KEY;return c=c||a(b.currentTarget).data(d),c||(c=new this.constructor(b.currentTarget,this._getDelegateConfig()),a(b.currentTarget).data(d,c)),b&&(c._activeTrigger["focusin"==b.type?t.FOCUS:t.HOVER]=!0),a(c.getTipElement()).hasClass(q.IN)||c._hoverState===o.IN?void(c._hoverState=o.IN):(clearTimeout(c._timeout),c._hoverState=o.IN,c.config.delay&&c.config.delay.show?void(c._timeout=setTimeout(function(){c._hoverState===o.IN&&c.show()},c.config.delay.show)):void c.show())}},{key:"_leave",value:function(b,c){var d=this.constructor.DATA_KEY;return c=c||a(b.currentTarget).data(d),c||(c=new this.constructor(b.currentTarget,this._getDelegateConfig()),a(b.currentTarget).data(d,c)),b&&(c._activeTrigger["focusout"==b.type?t.FOCUS:t.HOVER]=!1),c._isWithActiveTrigger()?void 0:(clearTimeout(c._timeout),c._hoverState=o.OUT,c.config.delay&&c.config.delay.hide?void(c._timeout=setTimeout(function(){c._hoverState===o.OUT&&c.hide()},c.config.delay.hide)):void c.hide())}},{key:"_isWithActiveTrigger",value:function(){for(var a in this._activeTrigger)if(this._activeTrigger[a])return!0;return!1}},{key:"_getConfig",value:function(b){return b=a.extend({},this.constructor.Default,a(this.element).data(),b),b.delay&&"number"==typeof b.delay&&(b.delay={show:b.delay,hide:b.delay}),e.typeCheckConfig(c,b,this.constructor.DefaultType),b}},{key:"_getDelegateConfig",value:function(){var a={};if(this.config)for(var b in this.config){var c=this.config[b];this.constructor.Default[b]!==c&&(a[b]=c)}return a}}],[{key:"_jQueryInterface",value:function(b){return this.each(function(){var c=a(this).data(g),d="object"==typeof b?b:null;(c||!/destroy|hide/.test(b))&&(c||(c=new i(this,d),a(this).data(g,c)),"string"==typeof b&&c[b]())})}},{key:"VERSION",get:function(){return f}},{key:"Default",get:function(){return l}},{key:"NAME",get:function(){return c}},{key:"DATA_KEY",get:function(){return g}},{key:"Event",get:function(){return p}},{key:"EVENT_KEY",get:function(){return h}},{key:"DefaultType",get:function(){return m}}]),i}();return a.fn[c]=u._jQueryInterface,a.fn[c].Constructor=u,a.fn[c].noConflict=function(){return a.fn[c]=i,u._jQueryInterface},u}(jQuery));!function(e){var g="popover",h="4.0.0",i="bs.popover",j="."+i,k=e.fn[g],l=e.extend({},f.Default,{placement:"right",trigger:"click",content:"",template:''}),m=e.extend({},f.DefaultType,{content:"(string|function)"}),n={FADE:"fade",IN:"in"},o={TITLE:".popover-title",CONTENT:".popover-content",ARROW:".popover-arrow"},p={HIDE:"hide"+j,HIDDEN:"hidden"+j,SHOW:"show"+j,SHOWN:"shown"+j,INSERTED:"inserted"+j,CLICK:"click"+j,FOCUSIN:"focusin"+j,FOCUSOUT:"focusout"+j,MOUSEENTER:"mouseenter"+j,MOUSELEAVE:"mouseleave"+j},q=function(f){function k(){b(this,k),c(Object.getPrototypeOf(k.prototype),"constructor",this).apply(this,arguments)}return a(k,f),d(k,[{key:"isWithContent",value:function(){return this.getTitle()||this._getContent()}},{key:"getTipElement",value:function(){return this.tip=this.tip||e(this.config.template)[0]}},{key:"setContent",value:function(){var a=this.getTipElement(),b=this.getTitle(),c=this._getContent(),d=e(a).find(o.TITLE)[0];d&&(d[this.config.html?"innerHTML":"innerText"]=b),e(a).find(o.CONTENT).children().detach().end()[this.config.html?"string"==typeof c?"html":"append":"text"](c),e(a).removeClass(n.FADE).removeClass(n.IN),this.cleanupTether()}},{key:"_getContent",value:function(){return this.element.getAttribute("data-content")||("function"==typeof this.config.content?this.config.content.call(this.element):this.config.content)}}],[{key:"_jQueryInterface",value:function(a){return this.each(function(){var b=e(this).data(i),c="object"==typeof a?a:null;(b||!/destroy|hide/.test(a))&&(b||(b=new k(this,c),e(this).data(i,b)),"string"==typeof a&&b[a]())})}},{key:"VERSION",get:function(){return h}},{key:"Default",get:function(){return l}},{key:"NAME",get:function(){return g}},{key:"DATA_KEY",get:function(){return i}},{key:"Event",get:function(){return p}},{key:"EVENT_KEY",get:function(){return j}},{key:"DefaultType",get:function(){return m}}]),k}(f);return e.fn[g]=q._jQueryInterface,e.fn[g].Constructor=q,e.fn[g].noConflict=function(){return e.fn[g]=k,q._jQueryInterface},q}(jQuery)}}(jQuery); \ No newline at end of file +if("undefined"==typeof jQuery)throw new Error("Bootstrap's JavaScript requires jQuery");+function(a){var b=a.fn.jquery.split(" ")[0].split(".");if(b[0]<2&&b[1]<9||1==b[0]&&9==b[1]&&b[2]<1)throw new Error("Bootstrap's JavaScript requires jQuery version 1.9.1 or higher")}(jQuery),+function(){"use strict";function a(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}function b(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}{var c=function(a,b,c){for(var d=!0;d;){var e=a,f=b,g=c;h=j=i=void 0,d=!1,null===e&&(e=Function.prototype);var h=Object.getOwnPropertyDescriptor(e,f);if(void 0!==h){if("value"in h)return h.value;var i=h.get;return void 0===i?void 0:i.call(g)}var j=Object.getPrototypeOf(e);if(null===j)return void 0;a=j,b=f,c=g,d=!0}},d=function(){function a(a,b){for(var c=0;cthis._items.length-1||0>b)){if(this._isSliding)return void a(this._element).one(o.SLID,function(){return c.to(b)});if(d===b)return this.pause(),void this.cycle();var e=b>d?n.NEXT:n.PREVIOUS;this._slide(e,this._items[b])}}},{key:"dispose",value:function(){a(this._element).off(h),a.removeData(this._element,g),this._items=null,this._config=null,this._element=null,this._interval=null,this._isPaused=null,this._isSliding=null,this._activeElement=null,this._indicatorsElement=null}},{key:"_getConfig",value:function(b){return b=a.extend({},l,b),e.typeCheckConfig(c,b,m),b}},{key:"_addEventListeners",value:function(){this._config.keyboard&&a(this._element).on(o.KEYDOWN,a.proxy(this._keydown,this)),"hover"!==this._config.pause||"ontouchstart"in document.documentElement||a(this._element).on(o.MOUSEENTER,a.proxy(this.pause,this)).on(o.MOUSELEAVE,a.proxy(this.cycle,this))}},{key:"_keydown",value:function(a){if(a.preventDefault(),!/input|textarea/i.test(a.target.tagName))switch(a.which){case 37:this.prev();break;case 39:this.next();break;default:return}}},{key:"_getItemIndex",value:function(b){return this._items=a.makeArray(a(b).parent().find(q.ITEM)),this._items.indexOf(b)}},{key:"_getItemByDirection",value:function(a,b){var c=a===n.NEXT,d=a===n.PREVIOUS,e=this._getItemIndex(b),f=this._items.length-1,g=d&&0===e||c&&e===f;if(g&&!this._config.wrap)return b;var h=a===n.PREVIOUS?-1:1,i=(e+h)%this._items.length;return-1===i?this._items[this._items.length-1]:this._items[i]}},{key:"_triggerSlideEvent",value:function(b,c){var d=a.Event(o.SLIDE,{relatedTarget:b,direction:c});return a(this._element).trigger(d),d}},{key:"_setActiveIndicatorElement",value:function(b){if(this._indicatorsElement){a(this._indicatorsElement).find(q.ACTIVE).removeClass(p.ACTIVE);var c=this._indicatorsElement.children[this._getItemIndex(b)];c&&a(c).addClass(p.ACTIVE)}}},{key:"_slide",value:function(b,c){var d=this,f=a(this._element).find(q.ACTIVE_ITEM)[0],g=c||f&&this._getItemByDirection(b,f),h=Boolean(this._interval),i=b===n.NEXT?p.LEFT:p.RIGHT;if(g&&a(g).hasClass(p.ACTIVE))return void(this._isSliding=!1);var j=this._triggerSlideEvent(g,i);if(!j.isDefaultPrevented()&&f&&g){this._isSliding=!0,h&&this.pause(),this._setActiveIndicatorElement(g);var l=a.Event(o.SLID,{relatedTarget:g,direction:i});e.supportsTransitionEnd()&&a(this._element).hasClass(p.SLIDE)?(a(g).addClass(b),e.reflow(g),a(f).addClass(i),a(g).addClass(i),a(f).one(e.TRANSITION_END,function(){a(g).removeClass(i).removeClass(b),a(g).addClass(p.ACTIVE),a(f).removeClass(p.ACTIVE).removeClass(b).removeClass(i),d._isSliding=!1,setTimeout(function(){return a(d._element).trigger(l)},0)}).emulateTransitionEnd(k)):(a(f).removeClass(p.ACTIVE),a(g).addClass(p.ACTIVE),this._isSliding=!1,a(this._element).trigger(l)),h&&this.cycle()}}}],[{key:"_jQueryInterface",value:function(b){return this.each(function(){var c=a(this).data(g),d=a.extend({},l,a(this).data());"object"==typeof b&&a.extend(d,b);var e="string"==typeof b?b:d.slide;c||(c=new i(this,d),a(this).data(g,c)),"number"==typeof b?c.to(b):e?c[e]():d.interval&&(c.pause(),c.cycle())})}},{key:"_dataApiClickHandler",value:function(b){var c=e.getSelectorFromElement(this);if(c){var d=a(c)[0];if(d&&a(d).hasClass(p.CAROUSEL)){var f=a.extend({},a(d).data(),a(this).data()),h=this.getAttribute("data-slide-to");h&&(f.interval=!1),i._jQueryInterface.call(a(d),f),h&&a(d).data(g).to(h),b.preventDefault()}}}},{key:"VERSION",get:function(){return f}},{key:"Default",get:function(){return l}}]),i}();return a(document).on(o.CLICK_DATA_API,q.DATA_SLIDE,r._dataApiClickHandler),a(window).on(o.LOAD_DATA_API,function(){a(q.DATA_RIDE).each(function(){var b=a(this);r._jQueryInterface.call(b,b.data())})}),a.fn[c]=r._jQueryInterface,a.fn[c].Constructor=r,a.fn[c].noConflict=function(){return a.fn[c]=j,r._jQueryInterface},r}(jQuery),function(a){var c="collapse",f="4.0.0",g="bs.collapse",h="."+g,i=".data-api",j=a.fn[c],k=600,l={toggle:!0,parent:""},m={toggle:"boolean",parent:"string"},n={SHOW:"show"+h,SHOWN:"shown"+h,HIDE:"hide"+h,HIDDEN:"hidden"+h,CLICK_DATA_API:"click"+h+i},o={IN:"in",COLLAPSE:"collapse",COLLAPSING:"collapsing",COLLAPSED:"collapsed"},p={WIDTH:"width",HEIGHT:"height"},q={ACTIVES:".panel > .in, .panel > .collapsing",DATA_TOGGLE:'[data-toggle="collapse"]'},r=function(){function h(c,d){b(this,h),this._isTransitioning=!1,this._element=c,this._config=this._getConfig(d),this._triggerArray=a.makeArray(a('[data-toggle="collapse"][href="#'+c.id+'"],'+('[data-toggle="collapse"][data-target="#'+c.id+'"]'))),this._parent=this._config.parent?this._getParent():null,this._config.parent||this._addAriaAndCollapsedClass(this._element,this._triggerArray),this._config.toggle&&this.toggle()}return d(h,[{key:"toggle",value:function(){a(this._element).hasClass(o.IN)?this.hide():this.show()}},{key:"show",value:function(){var b=this;if(!this._isTransitioning&&!a(this._element).hasClass(o.IN)){var c=void 0,d=void 0;if(this._parent&&(c=a.makeArray(a(q.ACTIVES)),c.length||(c=null)),!(c&&(d=a(c).data(g),d&&d._isTransitioning))){var f=a.Event(n.SHOW);if(a(this._element).trigger(f),!f.isDefaultPrevented()){c&&(h._jQueryInterface.call(a(c),"hide"),d||a(c).data(g,null));var i=this._getDimension();a(this._element).removeClass(o.COLLAPSE).addClass(o.COLLAPSING),this._element.style[i]=0,this._element.setAttribute("aria-expanded",!0),this._triggerArray.length&&a(this._triggerArray).removeClass(o.COLLAPSED).attr("aria-expanded",!0),this.setTransitioning(!0);var j=function(){a(b._element).removeClass(o.COLLAPSING).addClass(o.COLLAPSE).addClass(o.IN),b._element.style[i]="",b.setTransitioning(!1),a(b._element).trigger(n.SHOWN)};if(!e.supportsTransitionEnd())return void j();var l=i[0].toUpperCase()+i.slice(1),m="scroll"+l;a(this._element).one(e.TRANSITION_END,j).emulateTransitionEnd(k),this._element.style[i]=this._element[m]+"px"}}}}},{key:"hide",value:function(){var b=this;if(!this._isTransitioning&&a(this._element).hasClass(o.IN)){var c=a.Event(n.HIDE);if(a(this._element).trigger(c),!c.isDefaultPrevented()){var d=this._getDimension(),f=d===p.WIDTH?"offsetWidth":"offsetHeight";this._element.style[d]=this._element[f]+"px",e.reflow(this._element),a(this._element).addClass(o.COLLAPSING).removeClass(o.COLLAPSE).removeClass(o.IN),this._element.setAttribute("aria-expanded",!1),this._triggerArray.length&&a(this._triggerArray).addClass(o.COLLAPSED).attr("aria-expanded",!1),this.setTransitioning(!0);var g=function(){b.setTransitioning(!1),a(b._element).removeClass(o.COLLAPSING).addClass(o.COLLAPSE).trigger(n.HIDDEN)};return this._element.style[d]=0,e.supportsTransitionEnd()?void a(this._element).one(e.TRANSITION_END,g).emulateTransitionEnd(k):void g()}}}},{key:"setTransitioning",value:function(a){this._isTransitioning=a}},{key:"dispose",value:function(){a.removeData(this._element,g),this._config=null,this._parent=null,this._element=null,this._triggerArray=null,this._isTransitioning=null}},{key:"_getConfig",value:function(b){return b=a.extend({},l,b),b.toggle=Boolean(b.toggle),e.typeCheckConfig(c,b,m),b}},{key:"_getDimension",value:function(){var b=a(this._element).hasClass(p.WIDTH);return b?p.WIDTH:p.HEIGHT}},{key:"_getParent",value:function(){var b=this,c=a(this._config.parent)[0],d='[data-toggle="collapse"][data-parent="'+this._config.parent+'"]';return a(c).find(d).each(function(a,c){b._addAriaAndCollapsedClass(h._getTargetFromElement(c),[c])}),c}},{key:"_addAriaAndCollapsedClass",value:function(b,c){if(b){var d=a(b).hasClass(o.IN);b.setAttribute("aria-expanded",d),c.length&&a(c).toggleClass(o.COLLAPSED,!d).attr("aria-expanded",d)}}}],[{key:"_getTargetFromElement",value:function(b){var c=e.getSelectorFromElement(b);return c?a(c)[0]:null}},{key:"_jQueryInterface",value:function(b){return this.each(function(){var c=a(this),d=c.data(g),e=a.extend({},l,c.data(),"object"==typeof b&&b);!d&&e.toggle&&/show|hide/.test(b)&&(e.toggle=!1),d||(d=new h(this,e),c.data(g,d)),"string"==typeof b&&d[b]()})}},{key:"VERSION",get:function(){return f}},{key:"Default",get:function(){return l}}]),h}();return a(document).on(n.CLICK_DATA_API,q.DATA_TOGGLE,function(b){b.preventDefault();var c=r._getTargetFromElement(this),d=a(c).data(g),e=d?"toggle":a(this).data();r._jQueryInterface.call(a(c),e)}),a.fn[c]=r._jQueryInterface,a.fn[c].Constructor=r,a.fn[c].noConflict=function(){return a.fn[c]=j,r._jQueryInterface},r}(jQuery),function(a){var c="dropdown",f="4.0.0",g="bs.dropdown",h="."+g,i=".data-api",j=a.fn[c],k={HIDE:"hide"+h,HIDDEN:"hidden"+h,SHOW:"show"+h,SHOWN:"shown"+h,CLICK:"click"+h,CLICK_DATA_API:"click"+h+i,KEYDOWN_DATA_API:"keydown"+h+i},l={BACKDROP:"dropdown-backdrop",DISABLED:"disabled",OPEN:"open"},m={BACKDROP:".dropdown-backdrop",DATA_TOGGLE:'[data-toggle="dropdown"]',FORM_CHILD:".dropdown form",ROLE_MENU:'[role="menu"]',ROLE_LISTBOX:'[role="listbox"]',NAVBAR_NAV:".navbar-nav",VISIBLE_ITEMS:'[role="menu"] li:not(.disabled) a, [role="listbox"] li:not(.disabled) a'},n=function(){function c(a){b(this,c),this._element=a,this._addEventListeners()}return d(c,[{key:"toggle",value:function(){if(this.disabled||a(this).hasClass(l.DISABLED))return!1;var b=c._getParentFromElement(this),d=a(b).hasClass(l.OPEN);if(c._clearMenus(),d)return!1;if("ontouchstart"in document.documentElement&&!a(b).closest(m.NAVBAR_NAV).length){var e=document.createElement("div");e.className=l.BACKDROP,a(e).insertBefore(this),a(e).on("click",c._clearMenus)}var f={relatedTarget:this},g=a.Event(k.SHOW,f);return a(b).trigger(g),g.isDefaultPrevented()?!1:(this.focus(),this.setAttribute("aria-expanded","true"),a(b).toggleClass(l.OPEN),a(b).trigger(a.Event(k.SHOWN,f)),!1)}},{key:"dispose",value:function(){a.removeData(this._element,g),a(this._element).off(h),this._element=null}},{key:"_addEventListeners",value:function(){a(this._element).on(k.CLICK,this.toggle)}}],[{key:"_jQueryInterface",value:function(b){return this.each(function(){var d=a(this).data(g);d||a(this).data(g,d=new c(this)),"string"==typeof b&&d[b].call(this)})}},{key:"_clearMenus",value:function(b){if(!b||3!==b.which){var d=a(m.BACKDROP)[0];d&&d.parentNode.removeChild(d);for(var e=a.makeArray(a(m.DATA_TOGGLE)),f=0;f0&&h--,40===b.which&&hdocument.documentElement.clientHeight;!this._isBodyOverflowing&&a&&(this._element.style.paddingLeft=this._scrollbarWidth+"px"),this._isBodyOverflowing&&!a&&(this._element.style.paddingRight=this._scrollbarWidth+"px~")}},{key:"_resetAdjustments",value:function(){this._element.style.paddingLeft="",this._element.style.paddingRight=""}},{key:"_checkScrollbar",value:function(){var a=window.innerWidth;if(!a){var b=document.documentElement.getBoundingClientRect();a=b.right-Math.abs(b.left)}this._isBodyOverflowing=document.body.clientWidth a"},p={OFFSET:"offset",POSITION:"position"},q=function(){function i(c,d){b(this,i),this._element=c,this._scrollElement="BODY"===c.tagName?window:c,this._config=this._getConfig(d),this._selector=this._config.target+" "+o.NAV_ANCHORS,this._offsets=[],this._targets=[],this._activeTarget=null,this._scrollHeight=0,a(this._scrollElement).on(m.SCROLL,a.proxy(this._process,this)),this.refresh(),this._process()}return d(i,[{key:"refresh",value:function(){var b=this,c=this._scrollElement!==this._scrollElement.window?p.POSITION:p.OFFSET,d="auto"===this._config.method?c:this._config.method,f=d===p.POSITION?this._getScrollTop():0;this._offsets=[],this._targets=[],this._scrollHeight=this._getScrollHeight();var g=a.makeArray(a(this._selector));g.map(function(b){var c=void 0,g=e.getSelectorFromElement(b);return g&&(c=a(g)[0]),c&&(c.offsetWidth||c.offsetHeight)?[a(c)[d]().top+f,g]:void 0}).filter(function(a){return a}).sort(function(a,b){return a[0]-b[0]}).forEach(function(a){b._offsets.push(a[0]),b._targets.push(a[1])})}},{key:"dispose",value:function(){a.removeData(this._element,g),a(this._scrollElement).off(h),this._element=null,this._scrollElement=null,this._config=null,this._selector=null,this._offsets=null,this._targets=null,this._activeTarget=null,this._scrollHeight=null}},{key:"_getConfig",value:function(b){if(b=a.extend({},k,b),"string"!=typeof b.target){var d=a(b.target).attr("id");d||(d=e.getUID(c),a(b.target).attr("id",d)),b.target="#"+d}return e.typeCheckConfig(c,b,l),b}},{key:"_getScrollTop",value:function(){return this._scrollElement===window?this._scrollElement.scrollY:this._scrollElement.scrollTop}},{key:"_getScrollHeight",value:function(){return this._scrollElement.scrollHeight||Math.max(document.body.scrollHeight,document.documentElement.scrollHeight)}},{key:"_process",value:function(){var a=this._getScrollTop()+this._config.offset,b=this._getScrollHeight(),c=this._config.offset+b-this._scrollElement.offsetHeight;if(this._scrollHeight!==b&&this.refresh(),a>=c){var d=this._targets[this._targets.length-1];this._activeTarget!==d&&this._activate(d)}if(this._activeTarget&&a=this._offsets[e]&&(void 0===this._offsets[e+1]||a .fade",ACTIVE:".active",ACTIVE_CHILD:"> .active",DATA_TOGGLE:'[data-toggle="tab"], [data-toggle="pill"]',DROPDOWN_ACTIVE_CHILD:"> .dropdown-menu > .active"},o=function(){function c(a){b(this,c),this._element=a}return d(c,[{key:"show",value:function(){var b=this;if(!this._element.parentNode||this._element.parentNode.nodeType!==Node.ELEMENT_NODE||!a(this._element).parent().hasClass(m.ACTIVE)){var c=void 0,d=void 0,f=a(this._element).closest(n.UL)[0],g=e.getSelectorFromElement(this._element);f&&(d=a.makeArray(a(f).find(n.ACTIVE)),d=d[d.length-1],d&&(d=a(d).find(n.A)[0]));var h=a.Event(l.HIDE,{relatedTarget:this._element}),i=a.Event(l.SHOW,{relatedTarget:d});if(d&&a(d).trigger(h),a(this._element).trigger(i),!i.isDefaultPrevented()&&!h.isDefaultPrevented()){g&&(c=a(g)[0]),this._activate(a(this._element).closest(n.LI)[0],f); + +var j=function(){var c=a.Event(l.HIDDEN,{relatedTarget:b._element}),e=a.Event(l.SHOWN,{relatedTarget:d});a(d).trigger(c),a(b._element).trigger(e)};c?this._activate(c,c.parentNode,j):j()}}}},{key:"dispose",value:function(){a.removeClass(this._element,g),this._element=null}},{key:"_activate",value:function(b,c,d){var f=a(c).find(n.ACTIVE_CHILD)[0],g=d&&e.supportsTransitionEnd()&&(f&&a(f).hasClass(m.FADE)||Boolean(a(c).find(n.FADE_CHILD)[0])),h=a.proxy(this._transitionComplete,this,b,f,g,d);f&&g?a(f).one(e.TRANSITION_END,h).emulateTransitionEnd(k):h(),f&&a(f).removeClass(m.IN)}},{key:"_transitionComplete",value:function(b,c,d,f){if(c){a(c).removeClass(m.ACTIVE);var g=a(c).find(n.DROPDOWN_ACTIVE_CHILD)[0];g&&a(g).removeClass(m.ACTIVE);var h=a(c).find(n.DATA_TOGGLE)[0];h&&h.setAttribute("aria-expanded",!1)}a(b).addClass(m.ACTIVE);var i=a(b).find(n.DATA_TOGGLE)[0];if(i&&i.setAttribute("aria-expanded",!0),d?(e.reflow(b),a(b).addClass(m.IN)):a(b).removeClass(m.FADE),b.parentNode&&a(b.parentNode).hasClass(m.DROPDOWN_MENU)){var j=a(b).closest(n.LI_DROPDOWN)[0];j&&a(j).addClass(m.ACTIVE),i=a(b).find(n.DATA_TOGGLE)[0],i&&i.setAttribute("aria-expanded",!0)}f&&f()}}],[{key:"_jQueryInterface",value:function(b){return this.each(function(){var d=a(this),e=d.data(g);e||(e=e=new c(this),d.data(g,e)),"string"==typeof b&&e[b]()})}},{key:"VERSION",get:function(){return f}}]),c}();return a(document).on(l.CLICK_DATA_API,n.DATA_TOGGLE,function(b){b.preventDefault(),o._jQueryInterface.call(a(this),"show")}),a.fn[c]=o._jQueryInterface,a.fn[c].Constructor=o,a.fn[c].noConflict=function(){return a.fn[c]=j,o._jQueryInterface},o}(jQuery),function(a){var c="tooltip",f="4.0.0",g="bs.tooltip",h="."+g,i=a.fn[c],j=150,k="bs-tether",l={animation:!0,template:'',trigger:"hover focus",title:"",delay:0,html:!1,selector:!1,placement:"top",offset:"0 0",constraints:[]},m={animation:"boolean",template:"string",title:"(string|function)",trigger:"string",delay:"(number|object)",html:"boolean",selector:"(string|boolean)",placement:"(string|function)",offset:"string",constraints:"array"},n={TOP:"bottom center",RIGHT:"middle left",BOTTOM:"top center",LEFT:"middle right"},o={IN:"in",OUT:"out"},p={HIDE:"hide"+h,HIDDEN:"hidden"+h,SHOW:"show"+h,SHOWN:"shown"+h,INSERTED:"inserted"+h,CLICK:"click"+h,FOCUSIN:"focusin"+h,FOCUSOUT:"focusout"+h,MOUSEENTER:"mouseenter"+h,MOUSELEAVE:"mouseleave"+h},q={FADE:"fade",IN:"in"},r={TOOLTIP:".tooltip",TOOLTIP_INNER:".tooltip-inner"},s={element:!1,enabled:!1},t={HOVER:"hover",FOCUS:"focus",CLICK:"click",MANUAL:"manual"},u=function(){function i(a,c){b(this,i),this._isEnabled=!0,this._timeout=0,this._hoverState="",this._activeTrigger={},this._tether=null,this.element=a,this.config=this._getConfig(c),this.tip=null,this._setListeners()}return d(i,[{key:"enable",value:function(){this._isEnabled=!0}},{key:"disable",value:function(){this._isEnabled=!1}},{key:"toggleEnabled",value:function(){this._isEnabled=!this._isEnabled}},{key:"toggle",value:function(b){if(b){var c=this.constructor.DATA_KEY,d=a(b.currentTarget).data(c);d||(d=new this.constructor(b.currentTarget,this._getDelegateConfig()),a(b.currentTarget).data(c,d)),d._activeTrigger.click=!d._activeTrigger.click,d._isWithActiveTrigger()?d._enter(null,d):d._leave(null,d)}else{if(a(this.getTipElement()).hasClass(q.IN))return void this._leave(null,this);this._enter(null,this)}}},{key:"dispose",value:function(){clearTimeout(this._timeout),this.cleanupTether(),a.removeData(this.element,this.constructor.DATA_KEY),a(this.element).off(this.constructor.EVENT_KEY),this.tip&&a(this.tip).remove(),this._isEnabled=null,this._timeout=null,this._hoverState=null,this._activeTrigger=null,this._tether=null,this.element=null,this.config=null,this.tip=null}},{key:"show",value:function(){var b=this,c=a.Event(this.constructor.Event.SHOW);if(this.isWithContent()&&this._isEnabled){a(this.element).trigger(c);var d=a.contains(this.element.ownerDocument.documentElement,this.element);if(c.isDefaultPrevented()||!d)return;var f=this.getTipElement(),g=e.getUID(this.constructor.NAME);f.setAttribute("id",g),this.element.setAttribute("aria-describedby",g),this.setContent(),this.config.animation&&a(f).addClass(q.FADE);var h="function"==typeof this.config.placement?this.config.placement.call(this,f,this.element):this.config.placement,j=this._getAttachment(h);a(f).data(this.constructor.DATA_KEY,this).appendTo(document.body),a(this.element).trigger(this.constructor.Event.INSERTED),this._tether=new Tether({attachment:j,element:f,target:this.element,classes:s,classPrefix:k,offset:this.config.offset,constraints:this.config.constraints}),e.reflow(f),this._tether.position(),a(f).addClass(q.IN);var l=function(){var c=b._hoverState;b._hoverState=null,a(b.element).trigger(b.constructor.Event.SHOWN),c===o.OUT&&b._leave(null,b)};if(e.supportsTransitionEnd()&&a(this.tip).hasClass(q.FADE))return void a(this.tip).one(e.TRANSITION_END,l).emulateTransitionEnd(i._TRANSITION_DURATION);l()}}},{key:"hide",value:function(b){var c=this,d=this.getTipElement(),f=a.Event(this.constructor.Event.HIDE),g=function(){c._hoverState!==o.IN&&d.parentNode&&d.parentNode.removeChild(d),c.element.removeAttribute("aria-describedby"),a(c.element).trigger(c.constructor.Event.HIDDEN),c.cleanupTether(),b&&b()};a(this.element).trigger(f),f.isDefaultPrevented()||(a(d).removeClass(q.IN),e.supportsTransitionEnd()&&a(this.tip).hasClass(q.FADE)?a(d).one(e.TRANSITION_END,g).emulateTransitionEnd(j):g(),this._hoverState="")}},{key:"isWithContent",value:function(){return Boolean(this.getTitle())}},{key:"getTipElement",value:function(){return this.tip=this.tip||a(this.config.template)[0]}},{key:"setContent",value:function(){var b=this.getTipElement(),c=this.getTitle(),d=this.config.html?"innerHTML":"innerText";a(b).find(r.TOOLTIP_INNER)[0][d]=c,a(b).removeClass(q.FADE).removeClass(q.IN),this.cleanupTether()}},{key:"getTitle",value:function(){var a=this.element.getAttribute("data-original-title");return a||(a="function"==typeof this.config.title?this.config.title.call(this.element):this.config.title),a}},{key:"cleanupTether",value:function(){this._tether&&(this._tether.destroy(),a(this.element).removeClass(this._removeTetherClasses),a(this.tip).removeClass(this._removeTetherClasses))}},{key:"_getAttachment",value:function(a){return n[a.toUpperCase()]}},{key:"_setListeners",value:function(){var b=this,c=this.config.trigger.split(" ");c.forEach(function(c){if("click"===c)a(b.element).on(b.constructor.Event.CLICK,b.config.selector,a.proxy(b.toggle,b));else if(c!==t.MANUAL){var d=c===t.HOVER?b.constructor.Event.MOUSEENTER:b.constructor.Event.FOCUSIN,e=c===t.HOVER?b.constructor.Event.MOUSELEAVE:b.constructor.Event.FOCUSOUT;a(b.element).on(d,b.config.selector,a.proxy(b._enter,b)).on(e,b.config.selector,a.proxy(b._leave,b))}}),this.config.selector?this.config=a.extend({},this.config,{trigger:"manual",selector:""}):this._fixTitle()}},{key:"_removeTetherClasses",value:function(a,b){return((b.baseVal||b).match(new RegExp("(^|\\s)"+k+"-\\S+","g"))||[]).join(" ")}},{key:"_fixTitle",value:function(){var a=typeof this.element.getAttribute("data-original-title");(this.element.getAttribute("title")||"string"!==a)&&(this.element.setAttribute("data-original-title",this.element.getAttribute("title")||""),this.element.setAttribute("title",""))}},{key:"_enter",value:function(b,c){var d=this.constructor.DATA_KEY;return c=c||a(b.currentTarget).data(d),c||(c=new this.constructor(b.currentTarget,this._getDelegateConfig()),a(b.currentTarget).data(d,c)),b&&(c._activeTrigger["focusin"===b.type?t.FOCUS:t.HOVER]=!0),a(c.getTipElement()).hasClass(q.IN)||c._hoverState===o.IN?void(c._hoverState=o.IN):(clearTimeout(c._timeout),c._hoverState=o.IN,c.config.delay&&c.config.delay.show?void(c._timeout=setTimeout(function(){c._hoverState===o.IN&&c.show()},c.config.delay.show)):void c.show())}},{key:"_leave",value:function(b,c){var d=this.constructor.DATA_KEY;return c=c||a(b.currentTarget).data(d),c||(c=new this.constructor(b.currentTarget,this._getDelegateConfig()),a(b.currentTarget).data(d,c)),b&&(c._activeTrigger["focusout"===b.type?t.FOCUS:t.HOVER]=!1),c._isWithActiveTrigger()?void 0:(clearTimeout(c._timeout),c._hoverState=o.OUT,c.config.delay&&c.config.delay.hide?void(c._timeout=setTimeout(function(){c._hoverState===o.OUT&&c.hide()},c.config.delay.hide)):void c.hide())}},{key:"_isWithActiveTrigger",value:function(){for(var a in this._activeTrigger)if(this._activeTrigger[a])return!0;return!1}},{key:"_getConfig",value:function(b){return b=a.extend({},this.constructor.Default,a(this.element).data(),b),b.delay&&"number"==typeof b.delay&&(b.delay={show:b.delay,hide:b.delay}),e.typeCheckConfig(c,b,this.constructor.DefaultType),b}},{key:"_getDelegateConfig",value:function(){var a={};if(this.config)for(var b in this.config)this.constructor.Default[b]!==this.config[b]&&(a[b]=this.config[b]);return a}}],[{key:"_jQueryInterface",value:function(b){return this.each(function(){var c=a(this).data(g),d="object"==typeof b?b:null;(c||!/destroy|hide/.test(b))&&(c||(c=new i(this,d),a(this).data(g,c)),"string"==typeof b&&c[b]())})}},{key:"VERSION",get:function(){return f}},{key:"Default",get:function(){return l}},{key:"NAME",get:function(){return c}},{key:"DATA_KEY",get:function(){return g}},{key:"Event",get:function(){return p}},{key:"EVENT_KEY",get:function(){return h}},{key:"DefaultType",get:function(){return m}}]),i}();return a.fn[c]=u._jQueryInterface,a.fn[c].Constructor=u,a.fn[c].noConflict=function(){return a.fn[c]=i,u._jQueryInterface},u}(jQuery));!function(e){var g="popover",h="4.0.0",i="bs.popover",j="."+i,k=e.fn[g],l=e.extend({},f.Default,{placement:"right",trigger:"click",content:"",template:''}),m=e.extend({},f.DefaultType,{content:"(string|function)"}),n={FADE:"fade",IN:"in"},o={TITLE:".popover-title",CONTENT:".popover-content",ARROW:".popover-arrow"},p={HIDE:"hide"+j,HIDDEN:"hidden"+j,SHOW:"show"+j,SHOWN:"shown"+j,INSERTED:"inserted"+j,CLICK:"click"+j,FOCUSIN:"focusin"+j,FOCUSOUT:"focusout"+j,MOUSEENTER:"mouseenter"+j,MOUSELEAVE:"mouseleave"+j},q=function(f){function k(){b(this,k),c(Object.getPrototypeOf(k.prototype),"constructor",this).apply(this,arguments)}return a(k,f),d(k,[{key:"isWithContent",value:function(){return this.getTitle()||this._getContent()}},{key:"getTipElement",value:function(){return this.tip=this.tip||e(this.config.template)[0]}},{key:"setContent",value:function(){var a=this.getTipElement(),b=this.getTitle(),c=this._getContent(),d=e(a).find(o.TITLE)[0];d&&(d[this.config.html?"innerHTML":"innerText"]=b),e(a).find(o.CONTENT).children().detach().end()[this.config.html?"string"==typeof c?"html":"append":"text"](c),e(a).removeClass(n.FADE).removeClass(n.IN),this.cleanupTether()}},{key:"_getContent",value:function(){return this.element.getAttribute("data-content")||("function"==typeof this.config.content?this.config.content.call(this.element):this.config.content)}}],[{key:"_jQueryInterface",value:function(a){return this.each(function(){var b=e(this).data(i),c="object"==typeof a?a:null;(b||!/destroy|hide/.test(a))&&(b||(b=new k(this,c),e(this).data(i,b)),"string"==typeof a&&b[a]())})}},{key:"VERSION",get:function(){return h}},{key:"Default",get:function(){return l}},{key:"NAME",get:function(){return g}},{key:"DATA_KEY",get:function(){return i}},{key:"Event",get:function(){return p}},{key:"EVENT_KEY",get:function(){return j}},{key:"DefaultType",get:function(){return m}}]),k}(f);return e.fn[g]=q._jQueryInterface,e.fn[g].Constructor=q,e.fn[g].noConflict=function(){return e.fn[g]=k,q._jQueryInterface},q}(jQuery)}}(jQuery); \ No newline at end of file diff --git a/dist/js/umd/alert.js b/dist/js/umd/alert.js index ce0468315b..62782ca601 100644 --- a/dist/js/umd/alert.js +++ b/dist/js/umd/alert.js @@ -110,8 +110,8 @@ }, { key: '_getRootElement', value: function _getRootElement(element) { - var parent = false; var selector = _Util['default'].getSelectorFromElement(element); + var parent = false; if (selector) { parent = $(selector)[0]; @@ -127,6 +127,7 @@ key: '_triggerCloseEvent', value: function _triggerCloseEvent(element) { var closeEvent = $.Event(Event.CLOSE); + $(element).trigger(closeEvent); return closeEvent; } diff --git a/dist/js/umd/button.js b/dist/js/umd/button.js index 73eae5ec97..a3575ba2be 100644 --- a/dist/js/umd/button.js +++ b/dist/js/umd/button.js @@ -38,7 +38,6 @@ var EVENT_KEY = '.' + DATA_KEY; var DATA_API_KEY = '.data-api'; var JQUERY_NO_CONFLICT = $.fn[NAME]; - var TRANSITION_DURATION = 150; var ClassName = { ACTIVE: 'active', diff --git a/dist/js/umd/carousel.js b/dist/js/umd/carousel.js index 1163ca2c13..9a03d37763 100644 --- a/dist/js/umd/carousel.js +++ b/dist/js/umd/carousel.js @@ -194,7 +194,7 @@ return; } - if (activeIndex == index) { + if (activeIndex === index) { this.pause(); this.cycle(); return; @@ -236,7 +236,7 @@ $(this._element).on(Event.KEYDOWN, $.proxy(this._keydown, this)); } - if (this._config.pause == 'hover' && !('ontouchstart' in document.documentElement)) { + if (this._config.pause === 'hover' && !('ontouchstart' in document.documentElement)) { $(this._element).on(Event.MOUSEENTER, $.proxy(this.pause, this)).on(Event.MOUSELEAVE, $.proxy(this.cycle, this)); } } @@ -245,7 +245,9 @@ value: function _keydown(event) { event.preventDefault(); - if (/input|textarea/i.test(event.target.tagName)) return; + if (/input|textarea/i.test(event.target.tagName)) { + return; + } switch (event.which) { case 37: @@ -269,13 +271,13 @@ var isPrevDirection = direction === Direction.PREVIOUS; var activeIndex = this._getItemIndex(activeElement); var lastItemIndex = this._items.length - 1; - var isGoingToWrap = isPrevDirection && activeIndex === 0 || isNextDirection && activeIndex == lastItemIndex; + var isGoingToWrap = isPrevDirection && activeIndex === 0 || isNextDirection && activeIndex === lastItemIndex; if (isGoingToWrap && !this._config.wrap) { return activeElement; } - var delta = direction == Direction.PREVIOUS ? -1 : 1; + var delta = direction === Direction.PREVIOUS ? -1 : 1; var itemIndex = (activeIndex + delta) % this._items.length; return itemIndex === -1 ? this._items[this._items.length - 1] : this._items[itemIndex]; @@ -313,9 +315,9 @@ var activeElement = $(this._element).find(Selector.ACTIVE_ITEM)[0]; var nextElement = element || activeElement && this._getItemByDirection(direction, activeElement); - var isCycling = !!this._interval; + var isCycling = Boolean(this._interval); - var directionalClassName = direction == Direction.NEXT ? ClassName.LEFT : ClassName.RIGHT; + var directionalClassName = direction === Direction.NEXT ? ClassName.LEFT : ClassName.RIGHT; if (nextElement && $(nextElement).hasClass(ClassName.ACTIVE)) { this._isSliding = false; @@ -400,7 +402,7 @@ $(this).data(DATA_KEY, data); } - if (typeof config == 'number') { + if (typeof config === 'number') { data.to(config); } else if (action) { data[action](); @@ -426,8 +428,8 @@ } var config = $.extend({}, $(target).data(), $(this).data()); - var slideIndex = this.getAttribute('data-slide-to'); + if (slideIndex) { config.interval = false; } diff --git a/dist/js/umd/collapse.js b/dist/js/umd/collapse.js index 4f508a17b0..055541ca9a 100644 --- a/dist/js/umd/collapse.js +++ b/dist/js/umd/collapse.js @@ -192,7 +192,8 @@ return; } - var scrollSize = 'scroll' + (dimension[0].toUpperCase() + dimension.slice(1)); + var capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1); + var scrollSize = 'scroll' + capitalizedDimension; $(this._element).one(_Util['default'].TRANSITION_END, complete).emulateTransitionEnd(TRANSITION_DURATION); @@ -238,7 +239,8 @@ this._element.style[dimension] = 0; if (!_Util['default'].supportsTransitionEnd()) { - return complete(); + complete(); + return; } $(this._element).one(_Util['default'].TRANSITION_END, complete).emulateTransitionEnd(TRANSITION_DURATION); @@ -266,7 +268,7 @@ key: '_getConfig', value: function _getConfig(config) { config = $.extend({}, Default, config); - config.toggle = !!config.toggle; // coerce string values + config.toggle = Boolean(config.toggle); // coerce string values _Util['default'].typeCheckConfig(NAME, config, DefaultType); return config; } @@ -352,7 +354,6 @@ event.preventDefault(); var target = Collapse._getTargetFromElement(this); - var data = $(target).data(DATA_KEY); var config = data ? 'toggle' : $(this).data(); diff --git a/dist/js/umd/dropdown.js b/dist/js/umd/dropdown.js index 241865e5e3..21abecf9c8 100644 --- a/dist/js/umd/dropdown.js +++ b/dist/js/umd/dropdown.js @@ -99,7 +99,7 @@ value: function toggle() { if (this.disabled || $(this).hasClass(ClassName.DISABLED)) { - return; + return false; } var parent = Dropdown._getParentFromElement(this); @@ -126,7 +126,7 @@ $(parent).trigger(showEvent); if (showEvent.isDefaultPrevented()) { - return; + return false; } this.focus(); @@ -259,9 +259,19 @@ var index = items.indexOf(event.target); - if (event.which === 38 && index > 0) index--; // up - if (event.which === 40 && index < items.length - 1) index++; // down - if (! ~index) index = 0; + if (event.which === 38 && index > 0) { + // up + index--; + } + + if (event.which === 40 && index < items.length - 1) { + // down + index++; + } + + if (! ~index) { + index = 0; + } items[index].focus(); } diff --git a/dist/js/umd/modal.js b/dist/js/umd/modal.js index 0c61f011e0..bef186f816 100644 --- a/dist/js/umd/modal.js +++ b/dist/js/umd/modal.js @@ -247,14 +247,18 @@ $(this._element).addClass(ClassName.IN); - if (this._config.focus) this._enforceFocus(); + if (this._config.focus) { + this._enforceFocus(); + } var shownEvent = $.Event(Event.SHOWN, { relatedTarget: relatedTarget }); var transitionComplete = function transitionComplete() { - if (_this2._config.focus) _this2._element.focus(); + if (_this2._config.focus) { + _this2._element.focus(); + } $(_this2._element).trigger(shownEvent); }; @@ -411,7 +415,7 @@ } if (this._isBodyOverflowing && !isModalOverflowing) { - this._element.style.paddingRight = this._scrollbarWidth + 'px'; + this._element.style.paddingRight = this._scrollbarWidth + 'px~'; } } }, { @@ -440,7 +444,7 @@ this._originalBodyPadding = document.body.style.paddingRight || ''; if (this._isBodyOverflowing) { - document.body.style.paddingRight = bodyPadding + this._scrollbarWidth + 'px'; + document.body.style.paddingRight = bodyPadding + (this._scrollbarWidth + 'px'); } } }, { diff --git a/dist/js/umd/popover.js b/dist/js/umd/popover.js index d8b7fcb234..e1b56fcfc0 100644 --- a/dist/js/umd/popover.js +++ b/dist/js/umd/popover.js @@ -140,7 +140,7 @@ }, { key: '_getContent', value: function _getContent() { - return this.element.getAttribute('data-content') || (typeof this.config.content == 'function' ? this.config.content.call(this.element) : this.config.content); + return this.element.getAttribute('data-content') || (typeof this.config.content === 'function' ? this.config.content.call(this.element) : this.config.content); } // static diff --git a/dist/js/umd/tab.js b/dist/js/umd/tab.js index ed3a9ef1ce..065177e7c8 100644 --- a/dist/js/umd/tab.js +++ b/dist/js/umd/tab.js @@ -100,7 +100,7 @@ value: function show() { var _this = this; - if (this._element.parentNode && this._element.parentNode.nodeType == Node.ELEMENT_NODE && $(this._element).parent().hasClass(ClassName.ACTIVE)) { + if (this._element.parentNode && this._element.parentNode.nodeType === Node.ELEMENT_NODE && $(this._element).parent().hasClass(ClassName.ACTIVE)) { return; } @@ -174,7 +174,7 @@ key: '_activate', value: function _activate(element, container, callback) { var active = $(container).find(Selector.ACTIVE_CHILD)[0]; - var isTransitioning = callback && _Util['default'].supportsTransitionEnd() && (active && $(active).hasClass(ClassName.FADE) || !!$(container).find(Selector.FADE_CHILD)[0]); + var isTransitioning = callback && _Util['default'].supportsTransitionEnd() && (active && $(active).hasClass(ClassName.FADE) || Boolean($(container).find(Selector.FADE_CHILD)[0])); var complete = $.proxy(this._transitionComplete, this, element, active, isTransitioning, callback); diff --git a/dist/js/umd/tooltip.js b/dist/js/umd/tooltip.js index 670fe48afe..307474d491 100644 --- a/dist/js/umd/tooltip.js +++ b/dist/js/umd/tooltip.js @@ -171,11 +171,9 @@ }, { key: 'toggle', value: function toggle(event) { - var context = this; - var dataKey = this.constructor.DATA_KEY; - if (event) { - context = $(event.currentTarget).data(dataKey); + var dataKey = this.constructor.DATA_KEY; + var context = $(event.currentTarget).data(dataKey); if (!context) { context = new this.constructor(event.currentTarget, this._getDelegateConfig()); @@ -190,7 +188,13 @@ context._leave(null, context); } } else { - $(context.getTipElement()).hasClass(ClassName.IN) ? context._leave(null, context) : context._enter(null, context); + + if ($(this.getTipElement()).hasClass(ClassName.IN)) { + this._leave(null, this); + return; + } + + this._enter(null, this); } } }, { @@ -255,9 +259,9 @@ $(this.element).trigger(this.constructor.Event.INSERTED); this._tether = new Tether({ + attachment: attachment, element: tip, target: this.element, - attachment: attachment, classes: TetherClass, classPrefix: CLASS_PREFIX, offset: this.config.offset, @@ -280,7 +284,12 @@ } }; - _Util['default'].supportsTransitionEnd() && $(this.tip).hasClass(ClassName.FADE) ? $(this.tip).one(_Util['default'].TRANSITION_END, complete).emulateTransitionEnd(Tooltip._TRANSITION_DURATION) : complete(); + if (_Util['default'].supportsTransitionEnd() && $(this.tip).hasClass(ClassName.FADE)) { + $(this.tip).one(_Util['default'].TRANSITION_END, complete).emulateTransitionEnd(Tooltip._TRANSITION_DURATION); + return; + } + + complete(); } } }, { @@ -327,7 +336,7 @@ }, { key: 'isWithContent', value: function isWithContent() { - return !!this.getTitle(); + return Boolean(this.getTitle()); } }, { key: 'getTipElement', @@ -390,8 +399,8 @@ if (trigger === 'click') { $(_this3.element).on(_this3.constructor.Event.CLICK, _this3.config.selector, $.proxy(_this3.toggle, _this3)); } else if (trigger !== Trigger.MANUAL) { - var eventIn = trigger == Trigger.HOVER ? _this3.constructor.Event.MOUSEENTER : _this3.constructor.Event.FOCUSIN; - var eventOut = trigger == Trigger.HOVER ? _this3.constructor.Event.MOUSELEAVE : _this3.constructor.Event.FOCUSOUT; + var eventIn = trigger === Trigger.HOVER ? _this3.constructor.Event.MOUSEENTER : _this3.constructor.Event.FOCUSIN; + var eventOut = trigger === Trigger.HOVER ? _this3.constructor.Event.MOUSELEAVE : _this3.constructor.Event.FOCUSOUT; $(_this3.element).on(eventIn, _this3.config.selector, $.proxy(_this3._enter, _this3)).on(eventOut, _this3.config.selector, $.proxy(_this3._leave, _this3)); } @@ -433,7 +442,7 @@ } if (event) { - context._activeTrigger[event.type == 'focusin' ? Trigger.FOCUS : Trigger.HOVER] = true; + context._activeTrigger[event.type === 'focusin' ? Trigger.FOCUS : Trigger.HOVER] = true; } if ($(context.getTipElement()).hasClass(ClassName.IN) || context._hoverState === HoverState.IN) { @@ -469,7 +478,7 @@ } if (event) { - context._activeTrigger[event.type == 'focusout' ? Trigger.FOCUS : Trigger.HOVER] = false; + context._activeTrigger[event.type === 'focusout' ? Trigger.FOCUS : Trigger.HOVER] = false; } if (context._isWithActiveTrigger()) { @@ -525,9 +534,8 @@ if (this.config) { for (var key in this.config) { - var value = this.config[key]; - if (this.constructor.Default[key] !== value) { - config[key] = value; + if (this.constructor.Default[key] !== this.config[key]) { + config[key] = this.config[key]; } } } diff --git a/dist/js/umd/util.js b/dist/js/umd/util.js index d32b7b718b..003b93974c 100644 --- a/dist/js/umd/util.js +++ b/dist/js/umd/util.js @@ -65,9 +65,9 @@ var el = document.createElement('bootstrap'); - for (var name in TransitionEndEvent) { - if (el.style[name] !== undefined) { - return { end: TransitionEndEvent[name] }; + for (var _name in TransitionEndEvent) { + if (el.style[_name] !== undefined) { + return { end: TransitionEndEvent[_name] }; } } @@ -113,7 +113,9 @@ TRANSITION_END: 'bsTransitionEnd', getUID: function getUID(prefix) { - do prefix += ~ ~(Math.random() * 1000000); while (document.getElementById(prefix)); + do { + prefix += ~ ~(Math.random() * 1000000); + } while (document.getElementById(prefix)); return prefix; }, @@ -137,24 +139,28 @@ }, supportsTransitionEnd: function supportsTransitionEnd() { - return !!transition; + return Boolean(transition); }, typeCheckConfig: function typeCheckConfig(componentName, config, configTypes) { - for (var property in configTypes) { - var expectedTypes = configTypes[property]; - var value = config[property]; - var valueType = undefined; + if (configTypes.hasOwnProperty(property)) { + var expectedTypes = configTypes[property]; + var value = config[property]; + var valueType = undefined; - if (value && isElement(value)) valueType = 'element';else valueType = toType(value); + if (value && isElement(value)) { + valueType = 'element'; + } else { + valueType = toType(value); + } - if (!new RegExp(expectedTypes).test(valueType)) { - throw new Error(componentName.toUpperCase() + ': ' + ('Option "' + property + '" provided type "' + valueType + '" ') + ('but expected type "' + expectedTypes + '".')); + if (!new RegExp(expectedTypes).test(valueType)) { + throw new Error(componentName.toUpperCase() + ': ' + ('Option "' + property + '" provided type "' + valueType + '" ') + ('but expected type "' + expectedTypes + '".')); + } } } } - }; setTransitionEndSupport(); diff --git a/js/.eslintrc b/js/.eslintrc new file mode 100644 index 0000000000..645dac16da --- /dev/null +++ b/js/.eslintrc @@ -0,0 +1,177 @@ +{ + "parser": "babel-eslint", + "env": { + "browser": true + }, + "rules": { + + // Possible Errors + "comma-dangle": [2, "never"], + "no-cond-assign": 2, + "no-console": 2, + "no-constant-condition": 2, + "no-control-regex": 2, + "no-debugger": 2, + "no-dupe-args": 2, + "no-dupe-keys": 2, + "no-duplicate-case": 2, + "no-empty-character-class": 2, + "no-empty": 2, + "no-ex-assign": 2, + "no-extra-boolean-cast": 2, + "no-extra-parens": 0, + "no-extra-semi": 2, + "no-func-assign": 2, + "no-inner-declarations": 2, + "no-invalid-regexp": 2, + "no-irregular-whitespace": 0, + "no-negated-in-lhs": 2, + "no-obj-calls": 2, + "no-regex-spaces": 2, + "no-sparse-arrays": 2, + "no-unreachable": 2, + "use-isnan": 2, + "valid-jsdoc": 0, + "valid-typeof": 2, + "no-unexpected-multiline": 2, + + //Best Practices + "accessor-pairs": 2, + "block-scoped-var": 2, + "consistent-return": 2, + "curly": 2, + "default-case": 2, + "dot-notation": 0, + "dot-location": 0, + "eqeqeq": 2, + "guard-for-in": 2, + "no-alert": 2, + "no-caller": 2, + "no-div-regex": 2, + "no-else-return": 2, + "no-empty-label": 2, + "no-eq-null": 2, + "no-eval": 2, + "no-extend-native": 2, + "no-extra-bind": 2, + "no-fallthrough": 2, + "no-floating-decimal": 2, + "no-implicit-coercion": 2, + "no-implied-eval": 2, + "no-invalid-this": 0, + "no-iterator": 2, + "no-labels": 2, + "no-lone-blocks": 2, + "no-loop-func": 2, + "no-multi-spaces": 0, + "no-multi-str": 0, + "no-native-reassign": 2, + "no-new-func": 0, + "no-new-wrappers": 2, + "no-new": 2, + "no-octal-escape": 2, + "no-octal": 2, + "no-param-reassign": 0, + "no-process-env": 2, + "no-proto": 2, + "no-redeclare": 2, + "no-return-assign": 2, + "no-script-url": 2, + "no-self-compare": 2, + "no-sequences": 2, + "no-throw-literal": 2, + "no-unused-expressions": 2, + "no-useless-call": 2, + "no-void": 2, + "no-warning-comments": 0, + "no-with": 2, + "radix": 2, + "vars-on-top": 0, + "wrap-iife": 2, + "yoda": 2, + + // Variables + "init-declarations": 0, + "no-catch-shadow": 2, + "no-delete-var": 2, + "no-label-var": 2, + "no-shadow-restricted-names": 2, + "no-shadow": 0, + "no-undef-init": 2, + "no-undef": 0, + "no-undefined": 0, + "no-unused-vars": 2, + "no-use-before-define": 0, + + // Stylistic + "array-bracket-spacing": 2, + "block-spacing": 2, + "brace-style": 2, + "camelcase": 2, + "comma-spacing": 2, + "comma-style": 2, + "computed-property-spacing": 2, + "consistent-this": 2, + "eol-last": 2, + "func-names": 0, + "func-style": 0, + "indent": 0, + "key-spacing": 0, + "lines-around-comment": 0, + "linebreak-style": 2, + "new-cap": 0, + "new-parens": 2, + "newline-after-var": 0, + "no-array-constructor": 2, + "no-continue": 0, + "no-inline-comments": 0, + "no-lonely-if": 2, + "no-mixed-spaces-and-tabs": 2, + "no-multiple-empty-lines": 2, + "no-nested-ternary": 0, + "no-new-object": 2, + "no-spaced-func": 2, + "no-ternary": 0, + "no-trailing-spaces": 2, + "no-underscore-dangle": 0, + "no-unneeded-ternary": 2, + "object-curly-spacing": [1, "always"], + "one-var": 0, + "operator-assignment": 2, + "operator-linebreak": 0, + "padded-blocks": 0, + "quote-props": 0, + "quotes": 0, + "semi-spacing": 0, + "semi": [2, "never"], + "sort-vars": 2, + "space-after-keywords": 2, + "space-before-blocks": 2, + "space-before-function-paren": 0, + "space-in-parens": 2, + "space-infix-ops": 2, + "space-return-throw-case": 2, + "space-unary-ops": 2, + "spaced-comment": 2, + "spaced-comment": 2, + + // es6 + "arrow-parens": 2, + "arrow-spacing": 2, + "constructor-super": 2, + "generator-star-spacing": 2, + "no-class-assign": 2, + "no-const-assign": 2, + "no-dupe-class-members": 2, + "no-this-before-super": 2, + "no-var": 2, + "object-shorthand": 2, + "prefer-arrow-callback": 2, + "prefer-const": 0, + "prefer-spread": 2, + "prefer-reflect": 0, + "prefer-template": 2, + "require-yield": 2 + + } +} diff --git a/js/dist/util.js b/js/dist/util.js index 56296252b1..a2ae5f299a 100644 --- a/js/dist/util.js +++ b/js/dist/util.js @@ -1,3 +1,4 @@ + /** * -------------------------------------------------------------------------- * Bootstrap (v4.0.0): util.js @@ -100,7 +101,7 @@ var Util = (function ($) { TRANSITION_END: 'bsTransitionEnd', getUID: function getUID(prefix) { - do prefix += ~ ~(Math.random() * 1000000); while (document.getElementById(prefix)); + do { prefix += ~ ~(Math.random() * 1000000); } while (document.getElementById(prefix)); return prefix; }, diff --git a/js/src/alert.js b/js/src/alert.js index e58a311757..da4e5b6a54 100644 --- a/js/src/alert.js +++ b/js/src/alert.js @@ -86,8 +86,8 @@ const Alert = (($) => { // private _getRootElement(element) { - let parent = false let selector = Util.getSelectorFromElement(element) + let parent = false if (selector) { parent = $(selector)[0] @@ -101,7 +101,8 @@ const Alert = (($) => { } _triggerCloseEvent(element) { - var closeEvent = $.Event(Event.CLOSE) + let closeEvent = $.Event(Event.CLOSE) + $(element).trigger(closeEvent) return closeEvent } diff --git a/js/src/button.js b/js/src/button.js index 8210e8ae07..58ef66b8b5 100644 --- a/js/src/button.js +++ b/js/src/button.js @@ -20,7 +20,6 @@ const Button = (($) => { const EVENT_KEY = `.${DATA_KEY}` const DATA_API_KEY = '.data-api' const JQUERY_NO_CONFLICT = $.fn[NAME] - const TRANSITION_DURATION = 150 const ClassName = { ACTIVE : 'active', @@ -67,7 +66,7 @@ const Button = (($) => { toggle() { let triggerChangeEvent = true - let rootElement = $(this._element).closest( + let rootElement = $(this._element).closest( Selector.DATA_TOGGLE )[0] @@ -137,7 +136,7 @@ const Button = (($) => { */ $(document) - .on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE_CARROT, function (event) { + .on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE_CARROT, (event) => { event.preventDefault() let button = event.target @@ -148,8 +147,8 @@ const Button = (($) => { Button._jQueryInterface.call($(button), 'toggle') }) - .on(Event.FOCUS_BLUR_DATA_API, Selector.DATA_TOGGLE_CARROT, function (event) { - var button = $(event.target).closest(Selector.BUTTON)[0] + .on(Event.FOCUS_BLUR_DATA_API, Selector.DATA_TOGGLE_CARROT, (event) => { + let button = $(event.target).closest(Selector.BUTTON)[0] $(button).toggleClass(ClassName.FOCUS, /^focus(in)?$/.test(event.type)) }) diff --git a/js/src/carousel.js b/js/src/carousel.js index c11f0a599d..efacd9494e 100644 --- a/js/src/carousel.js +++ b/js/src/carousel.js @@ -171,13 +171,13 @@ const Carousel = (($) => { return } - if (activeIndex == index) { + if (activeIndex === index) { this.pause() this.cycle() return } - var direction = index > activeIndex ? + let direction = index > activeIndex ? Direction.NEXT : Direction.PREVIOUS @@ -213,7 +213,7 @@ const Carousel = (($) => { .on(Event.KEYDOWN, $.proxy(this._keydown, this)) } - if (this._config.pause == 'hover' && + if (this._config.pause === 'hover' && !('ontouchstart' in document.documentElement)) { $(this._element) .on(Event.MOUSEENTER, $.proxy(this.pause, this)) @@ -224,7 +224,9 @@ const Carousel = (($) => { _keydown(event) { event.preventDefault() - if (/input|textarea/i.test(event.target.tagName)) return + if (/input|textarea/i.test(event.target.tagName)) { + return + } switch (event.which) { case 37: this.prev(); break @@ -244,13 +246,13 @@ const Carousel = (($) => { let activeIndex = this._getItemIndex(activeElement) let lastItemIndex = (this._items.length - 1) let isGoingToWrap = (isPrevDirection && activeIndex === 0) || - (isNextDirection && activeIndex == lastItemIndex) + (isNextDirection && activeIndex === lastItemIndex) if (isGoingToWrap && !this._config.wrap) { return activeElement } - let delta = direction == Direction.PREVIOUS ? -1 : 1 + let delta = direction === Direction.PREVIOUS ? -1 : 1 let itemIndex = (activeIndex + delta) % this._items.length return itemIndex === -1 ? @@ -260,7 +262,7 @@ const Carousel = (($) => { _triggerSlideEvent(relatedTarget, directionalClassname) { let slideEvent = $.Event(Event.SLIDE, { - relatedTarget: relatedTarget, + relatedTarget, direction: directionalClassname }) @@ -290,9 +292,9 @@ const Carousel = (($) => { let nextElement = element || activeElement && this._getItemByDirection(direction, activeElement) - let isCycling = !!this._interval + let isCycling = Boolean(this._interval) - let directionalClassName = direction == Direction.NEXT ? + let directionalClassName = direction === Direction.NEXT ? ClassName.LEFT : ClassName.RIGHT @@ -319,7 +321,7 @@ const Carousel = (($) => { this._setActiveIndicatorElement(nextElement) - var slidEvent = $.Event(Event.SLID, { + let slidEvent = $.Event(Event.SLID, { relatedTarget: nextElement, direction: directionalClassName }) @@ -372,7 +374,7 @@ const Carousel = (($) => { static _jQueryInterface(config) { return this.each(function () { - let data = $(this).data(DATA_KEY) + let data = $(this).data(DATA_KEY) let _config = $.extend({}, Default, $(this).data()) if (typeof config === 'object') { @@ -386,7 +388,7 @@ const Carousel = (($) => { $(this).data(DATA_KEY, data) } - if (typeof config == 'number') { + if (typeof config === 'number') { data.to(config) } else if (action) { @@ -412,9 +414,9 @@ const Carousel = (($) => { return } - let config = $.extend({}, $(target).data(), $(this).data()) - + let config = $.extend({}, $(target).data(), $(this).data()) let slideIndex = this.getAttribute('data-slide-to') + if (slideIndex) { config.interval = false } @@ -440,7 +442,7 @@ const Carousel = (($) => { $(document) .on(Event.CLICK_DATA_API, Selector.DATA_SLIDE, Carousel._dataApiClickHandler) - $(window).on(Event.LOAD_DATA_API, function () { + $(window).on(Event.LOAD_DATA_API, () => { $(Selector.DATA_RIDE).each(function () { let $carousel = $(this) Carousel._jQueryInterface.call($carousel, $carousel.data()) diff --git a/js/src/collapse.js b/js/src/collapse.js index e911c98d1d..e46d3ec604 100644 --- a/js/src/collapse.js +++ b/js/src/collapse.js @@ -182,15 +182,14 @@ const Collapse = (($) => { return } - let scrollSize = 'scroll' - + (dimension[0].toUpperCase() - + dimension.slice(1)) + let capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1) + let scrollSize = `scroll${capitalizedDimension}` $(this._element) .one(Util.TRANSITION_END, complete) .emulateTransitionEnd(TRANSITION_DURATION) - this._element.style[dimension] = this._element[scrollSize] + 'px' + this._element.style[dimension] = `${this._element[scrollSize]}px` } hide() { @@ -205,11 +204,11 @@ const Collapse = (($) => { return } - let dimension = this._getDimension() + let dimension = this._getDimension() let offsetDimension = dimension === Dimension.WIDTH ? 'offsetWidth' : 'offsetHeight' - this._element.style[dimension] = this._element[offsetDimension] + 'px' + this._element.style[dimension] = `${this._element[offsetDimension]}px` Util.reflow(this._element) @@ -239,7 +238,8 @@ const Collapse = (($) => { this._element.style[dimension] = 0 if (!Util.supportsTransitionEnd()) { - return complete() + complete() + return } $(this._element) @@ -266,7 +266,7 @@ const Collapse = (($) => { _getConfig(config) { config = $.extend({}, Default, config) - config.toggle = !!config.toggle // coerce string values + config.toggle = Boolean(config.toggle) // coerce string values Util.typeCheckConfig(NAME, config, DefaultType) return config } @@ -351,8 +351,7 @@ const Collapse = (($) => { event.preventDefault() let target = Collapse._getTargetFromElement(this) - - let data = $(target).data(DATA_KEY) + let data = $(target).data(DATA_KEY) let config = data ? 'toggle' : $(this).data() Collapse._jQueryInterface.call($(target), config) diff --git a/js/src/dropdown.js b/js/src/dropdown.js index 1c4866dc2b..734e643127 100644 --- a/js/src/dropdown.js +++ b/js/src/dropdown.js @@ -78,7 +78,7 @@ const Dropdown = (($) => { toggle() { if (this.disabled || $(this).hasClass(ClassName.DISABLED)) { - return + return false } let parent = Dropdown._getParentFromElement(this) @@ -106,7 +106,7 @@ const Dropdown = (($) => { $(parent).trigger(showEvent) if (showEvent.isDefaultPrevented()) { - return + return false } this.focus() @@ -239,9 +239,17 @@ const Dropdown = (($) => { let index = items.indexOf(event.target) - if (event.which === 38 && index > 0) index-- // up - if (event.which === 40 && index < items.length - 1) index++ // down - if (!~index) index = 0 + if (event.which === 38 && index > 0) { // up + index-- + } + + if (event.which === 40 && index < items.length - 1) { // down + index++ + } + + if (!~index) { + index = 0 + } items[index].focus() } @@ -261,9 +269,9 @@ const Dropdown = (($) => { .on(Event.KEYDOWN_DATA_API, Selector.ROLE_LISTBOX, Dropdown._dataApiKeydownHandler) .on(Event.CLICK_DATA_API, Dropdown._clearMenus) .on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, Dropdown.prototype.toggle) - .on(Event.CLICK_DATA_API, Selector.FORM_CHILD, function (e) { - e.stopPropagation() - }) + .on(Event.CLICK_DATA_API, Selector.FORM_CHILD, (e) => { + e.stopPropagation() + }) /** diff --git a/js/src/modal.js b/js/src/modal.js index df49c1a4c0..128863273d 100644 --- a/js/src/modal.js +++ b/js/src/modal.js @@ -110,7 +110,7 @@ const Modal = (($) => { show(relatedTarget) { let showEvent = $.Event(Event.SHOW, { - relatedTarget: relatedTarget + relatedTarget }) $(this._element).trigger(showEvent) @@ -231,14 +231,18 @@ const Modal = (($) => { $(this._element).addClass(ClassName.IN) - if (this._config.focus) this._enforceFocus() + if (this._config.focus) { + this._enforceFocus() + } let shownEvent = $.Event(Event.SHOWN, { - relatedTarget: relatedTarget + relatedTarget }) let transitionComplete = () => { - if (this._config.focus) this._element.focus() + if (this._config.focus) { + this._element.focus() + } $(this._element).trigger(shownEvent) } @@ -389,11 +393,11 @@ const Modal = (($) => { this._element.scrollHeight > document.documentElement.clientHeight if (!this._isBodyOverflowing && isModalOverflowing) { - this._element.style.paddingLeft = this._scrollbarWidth + 'px' + this._element.style.paddingLeft = `${this._scrollbarWidth}px` } if (this._isBodyOverflowing && !isModalOverflowing) { - this._element.style.paddingRight = this._scrollbarWidth + 'px' + this._element.style.paddingRight = `${this._scrollbarWidth}px~` } } @@ -423,7 +427,7 @@ const Modal = (($) => { if (this._isBodyOverflowing) { document.body.style.paddingRight = - bodyPadding + this._scrollbarWidth + 'px' + bodyPadding + `${this._scrollbarWidth}px` } } diff --git a/js/src/popover.js b/js/src/popover.js index 31c7a3ae1a..30c0e4acb2 100644 --- a/js/src/popover.js +++ b/js/src/popover.js @@ -141,7 +141,7 @@ const Popover = (($) => { _getContent() { return this.element.getAttribute('data-content') - || (typeof this.config.content == 'function' ? + || (typeof this.config.content === 'function' ? this.config.content.call(this.element) : this.config.content) } diff --git a/js/src/scrollspy.js b/js/src/scrollspy.js index a407511f65..df33f48de6 100644 --- a/js/src/scrollspy.js +++ b/js/src/scrollspy.js @@ -293,7 +293,7 @@ const ScrollSpy = (($) => { * ------------------------------------------------------------------------ */ - $(window).on(Event.LOAD_DATA_API, function () { + $(window).on(Event.LOAD_DATA_API, () => { let scrollSpys = $.makeArray($(Selector.DATA_SPY)) for (let i = scrollSpys.length; i--;) { diff --git a/js/src/tab.js b/js/src/tab.js index 4d8d7dec8d..9d793417a4 100644 --- a/js/src/tab.js +++ b/js/src/tab.js @@ -77,7 +77,7 @@ const Tab = (($) => { show() { if (this._element.parentNode && - (this._element.parentNode.nodeType == Node.ELEMENT_NODE) && + (this._element.parentNode.nodeType === Node.ELEMENT_NODE) && ($(this._element).parent().hasClass(ClassName.ACTIVE))) { return } @@ -157,7 +157,7 @@ const Tab = (($) => { let isTransitioning = callback && Util.supportsTransitionEnd() && ((active && $(active).hasClass(ClassName.FADE)) - || !!$(container).find(Selector.FADE_CHILD)[0]) + || Boolean($(container).find(Selector.FADE_CHILD)[0])) let complete = $.proxy( this._transitionComplete, diff --git a/js/src/tooltip.js b/js/src/tooltip.js index 5d62e154ad..a65caf26e9 100644 --- a/js/src/tooltip.js +++ b/js/src/tooltip.js @@ -174,11 +174,9 @@ const Tooltip = (($) => { } toggle(event) { - let context = this - let dataKey = this.constructor.DATA_KEY - if (event) { - context = $(event.currentTarget).data(dataKey) + let dataKey = this.constructor.DATA_KEY + let context = $(event.currentTarget).data(dataKey) if (!context) { context = new this.constructor( @@ -197,9 +195,13 @@ const Tooltip = (($) => { } } else { - $(context.getTipElement()).hasClass(ClassName.IN) ? - context._leave(null, context) : - context._enter(null, context) + + if ($(this.getTipElement()).hasClass(ClassName.IN)) { + this._leave(null, this) + return + } + + this._enter(null, this) } } @@ -267,9 +269,9 @@ const Tooltip = (($) => { $(this.element).trigger(this.constructor.Event.INSERTED) this._tether = new Tether({ + attachment, element : tip, target : this.element, - attachment : attachment, classes : TetherClass, classPrefix : CLASS_PREFIX, offset : this.config.offset, @@ -292,11 +294,14 @@ const Tooltip = (($) => { } } - Util.supportsTransitionEnd() && $(this.tip).hasClass(ClassName.FADE) ? + if (Util.supportsTransitionEnd() && $(this.tip).hasClass(ClassName.FADE)) { $(this.tip) .one(Util.TRANSITION_END, complete) - .emulateTransitionEnd(Tooltip._TRANSITION_DURATION) : - complete() + .emulateTransitionEnd(Tooltip._TRANSITION_DURATION) + return + } + + complete() } } @@ -343,7 +348,7 @@ const Tooltip = (($) => { // protected isWithContent() { - return !!this.getTitle() + return Boolean(this.getTitle()) } getTipElement() { @@ -407,10 +412,10 @@ const Tooltip = (($) => { ) } else if (trigger !== Trigger.MANUAL) { - let eventIn = trigger == Trigger.HOVER ? + let eventIn = trigger === Trigger.HOVER ? this.constructor.Event.MOUSEENTER : this.constructor.Event.FOCUSIN - let eventOut = trigger == Trigger.HOVER ? + let eventOut = trigger === Trigger.HOVER ? this.constructor.Event.MOUSELEAVE : this.constructor.Event.FOCUSOUT @@ -471,7 +476,7 @@ const Tooltip = (($) => { if (event) { context._activeTrigger[ - event.type == 'focusin' ? Trigger.FOCUS : Trigger.HOVER + event.type === 'focusin' ? Trigger.FOCUS : Trigger.HOVER ] = true } @@ -512,7 +517,7 @@ const Tooltip = (($) => { if (event) { context._activeTrigger[ - event.type == 'focusout' ? Trigger.FOCUS : Trigger.HOVER + event.type === 'focusout' ? Trigger.FOCUS : Trigger.HOVER ] = false } @@ -575,9 +580,8 @@ const Tooltip = (($) => { if (this.config) { for (let key in this.config) { - let value = this.config[key] - if (this.constructor.Default[key] !== value) { - config[key] = value + if (this.constructor.Default[key] !== this.config[key]) { + config[key] = this.config[key] } } } diff --git a/js/src/util.js b/js/src/util.js index 86bea65788..f4a584125f 100644 --- a/js/src/util.js +++ b/js/src/util.js @@ -29,14 +29,14 @@ const Util = (($) => { } function isElement(obj) { - return (obj[0] || obj).nodeType; + return (obj[0] || obj).nodeType } function getSpecialTransitionEndEvent() { return { bindType: transition.end, delegateType: transition.end, - handle: function (event) { + handle(event) { if ($(event.target).is(this)) { return event.handleObj.handler.apply(this, arguments) } @@ -51,7 +51,7 @@ const Util = (($) => { let el = document.createElement('bootstrap') - for (var name in TransitionEndEvent) { + for (let name in TransitionEndEvent) { if (el.style[name] !== undefined) { return { end: TransitionEndEvent[name] } } @@ -63,7 +63,7 @@ const Util = (($) => { function transitionEndEmulator(duration) { let called = false - $(this).one(Util.TRANSITION_END, function () { + $(this).one(Util.TRANSITION_END, () => { called = true }) @@ -98,8 +98,9 @@ const Util = (($) => { TRANSITION_END: 'bsTransitionEnd', getUID(prefix) { - do prefix += ~~(Math.random() * 1000000) - while (document.getElementById(prefix)) + do { + prefix += ~~(Math.random() * 1000000) + } while (document.getElementById(prefix)) return prefix }, @@ -123,28 +124,31 @@ const Util = (($) => { }, supportsTransitionEnd() { - return !!transition + return Boolean(transition) }, typeCheckConfig(componentName, config, configTypes) { - for (let property in configTypes) { - let expectedTypes = configTypes[property] - let value = config[property] - let valueType + if (configTypes.hasOwnProperty(property)) { + let expectedTypes = configTypes[property] + let value = config[property] + let valueType - if (value && isElement(value)) valueType = 'element' - else valueType = toType(value) + if (value && isElement(value)) { + valueType = 'element' + } else { + valueType = toType(value) + } - if (!new RegExp(expectedTypes).test(valueType)) { - throw new Error( - `${componentName.toUpperCase()}: ` + - `Option "${property}" provided type "${valueType}" ` + - `but expected type "${expectedTypes}".`) + if (!new RegExp(expectedTypes).test(valueType)) { + throw new Error( + `${componentName.toUpperCase()}: ` + + `Option "${property}" provided type "${valueType}" ` + + `but expected type "${expectedTypes}".`) + } } } } - } setTransitionEndSupport() diff --git a/js/tests/unit/phantom.js b/js/tests/unit/phantom.js index 2791bd8414..525aea0024 100644 --- a/js/tests/unit/phantom.js +++ b/js/tests/unit/phantom.js @@ -76,29 +76,26 @@ // shoutout mdn: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind#Polyfill if (!Function.prototype.bind) { - Function.prototype.bind = function(oThis) { + Function.prototype.bind = function (oThis) { if (typeof this !== 'function') { // closest thing possible to the ECMAScript 5 // internal IsCallable function throw new TypeError('Function.prototype.bind - what is trying to be bound is not callable'); } - var aArgs = Array.prototype.slice.call(arguments, 1), - fToBind = this, - fNOP = function() {}, - fBound = function() { - return fToBind.apply(this instanceof fNOP - ? this - : oThis, - aArgs.concat(Array.prototype.slice.call(arguments))); - }; + var aArgs = Array.prototype.slice.call(arguments, 1) + var fToBind = this + var FNOP = function () {} + var fBound = function () { + return fToBind.apply(this instanceof FNOP ? this : oThis, aArgs.concat(Array.prototype.slice.call(arguments))) + } if (this.prototype) { // native functions don't have a prototype - fNOP.prototype = this.prototype; + FNOP.prototype = this.prototype } - fBound.prototype = new fNOP(); + fBound.prototype = new FNOP() - return fBound; - }; + return fBound + } } diff --git a/package.json b/package.json index c7444ac2ae..6d93cab322 100644 --- a/package.json +++ b/package.json @@ -28,6 +28,7 @@ }, "license": "MIT", "devDependencies": { + "babel-eslint": "^4.0.10", "btoa": "~1.1.2", "glob": "~5.0.3", "grunt": "~0.4.5", @@ -48,6 +49,7 @@ "grunt-contrib-uglify": "~0.8.0", "grunt-contrib-watch": "~0.6.1", "grunt-csscomb": "~3.0.0", + "grunt-eslint": "^17.1.0", "grunt-exec": "~0.4.6", "grunt-html": "~4.0.1", "grunt-jekyll": "~0.4.2", From efae761c39905a7d36a710d236a987151c34314b Mon Sep 17 00:00:00 2001 From: Jacob Thornton Date: Tue, 18 Aug 2015 19:42:27 -0700 Subject: [PATCH 2/3] fix dropdown js visual example --- js/tests/visual/dropdown.html | 120 ++++++++++++++++++---------------- 1 file changed, 62 insertions(+), 58 deletions(-) diff --git a/js/tests/visual/dropdown.html b/js/tests/visual/dropdown.html index f9df5d07ee..5ade9dd18e 100644 --- a/js/tests/visual/dropdown.html +++ b/js/tests/visual/dropdown.html @@ -22,68 +22,72 @@

Dropdown Bootstrap Visual Test

-