bootstrap.js 98 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333333433353336333733383339334033413342334333443345334633473348334933503351335233533354335533563357335833593360336133623363336433653366336733683369337033713372337333743375337633773378337933803381338233833384338533863387338833893390339133923393339433953396339733983399340034013402340334043405340634073408340934103411341234133414341534163417341834193420342134223423342434253426342734283429343034313432343334343435343634373438343934403441344234433444344534463447344834493450345134523453345434553456345734583459346034613462346334643465346634673468346934703471347234733474347534763477347834793480348134823483348434853486348734883489349034913492349334943495349634973498349935003501350235033504350535063507350835093510351135123513351435153516351735183519352035213522352335243525352635273528352935303531353235333534353535363537353835393540354135423543354435453546354735483549355035513552355335543555355635573558355935603561356235633564356535663567356835693570357135723573
  1. /*!
  2. * Bootstrap v4.0.0-alpha.3 (http://getbootstrap.com)
  3. * Copyright 2011-2016 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
  4. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
  5. */
  6. if (typeof jQuery === 'undefined') {
  7. throw new Error('Bootstrap\'s JavaScript requires jQuery')
  8. }
  9. +function ($) {
  10. var version = $.fn.jquery.split(' ')[0].split('.')
  11. if ((version[0] < 2 && version[1] < 9) || (version[0] == 1 && version[1] == 9 && version[2] < 1) || (version[0] >= 4)) {
  12. throw new Error('Bootstrap\'s JavaScript requires at least jQuery v1.9.1 but less than v4.0.0')
  13. }
  14. }(jQuery);
  15. +function ($) {
  16. /**
  17. * --------------------------------------------------------------------------
  18. * Bootstrap (v4.0.0-alpha.3): util.js
  19. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
  20. * --------------------------------------------------------------------------
  21. */
  22. 'use strict';
  23. var _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };
  24. var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();
  25. function _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
  26. function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }
  27. var Util = (function ($) {
  28. /**
  29. * ------------------------------------------------------------------------
  30. * Private TransitionEnd Helpers
  31. * ------------------------------------------------------------------------
  32. */
  33. var transition = false;
  34. var MAX_UID = 1000000;
  35. var TransitionEndEvent = {
  36. WebkitTransition: 'webkitTransitionEnd',
  37. MozTransition: 'transitionend',
  38. OTransition: 'oTransitionEnd otransitionend',
  39. transition: 'transitionend'
  40. };
  41. // shoutout AngusCroll (https://goo.gl/pxwQGp)
  42. function toType(obj) {
  43. return ({}).toString.call(obj).match(/\s([a-zA-Z]+)/)[1].toLowerCase();
  44. }
  45. function isElement(obj) {
  46. return (obj[0] || obj).nodeType;
  47. }
  48. function getSpecialTransitionEndEvent() {
  49. return {
  50. bindType: transition.end,
  51. delegateType: transition.end,
  52. handle: function handle(event) {
  53. if ($(event.target).is(this)) {
  54. return event.handleObj.handler.apply(this, arguments); // eslint-disable-line prefer-rest-params
  55. }
  56. return undefined;
  57. }
  58. };
  59. }
  60. function transitionEndTest() {
  61. if (window.QUnit) {
  62. return false;
  63. }
  64. var el = document.createElement('bootstrap');
  65. for (var _name in TransitionEndEvent) {
  66. if (el.style[_name] !== undefined) {
  67. return { end: TransitionEndEvent[_name] };
  68. }
  69. }
  70. return false;
  71. }
  72. function transitionEndEmulator(duration) {
  73. var _this = this;
  74. var called = false;
  75. $(this).one(Util.TRANSITION_END, function () {
  76. called = true;
  77. });
  78. setTimeout(function () {
  79. if (!called) {
  80. Util.triggerTransitionEnd(_this);
  81. }
  82. }, duration);
  83. return this;
  84. }
  85. function setTransitionEndSupport() {
  86. transition = transitionEndTest();
  87. $.fn.emulateTransitionEnd = transitionEndEmulator;
  88. if (Util.supportsTransitionEnd()) {
  89. $.event.special[Util.TRANSITION_END] = getSpecialTransitionEndEvent();
  90. }
  91. }
  92. /**
  93. * --------------------------------------------------------------------------
  94. * Public Util Api
  95. * --------------------------------------------------------------------------
  96. */
  97. var Util = {
  98. TRANSITION_END: 'bsTransitionEnd',
  99. getUID: function getUID(prefix) {
  100. do {
  101. /* eslint-disable no-bitwise */
  102. prefix += ~ ~(Math.random() * MAX_UID); // "~~" acts like a faster Math.floor() here
  103. /* eslint-enable no-bitwise */
  104. } while (document.getElementById(prefix));
  105. return prefix;
  106. },
  107. getSelectorFromElement: function getSelectorFromElement(element) {
  108. var selector = element.getAttribute('data-target');
  109. if (!selector) {
  110. selector = element.getAttribute('href') || '';
  111. selector = /^#[a-z]/i.test(selector) ? selector : null;
  112. }
  113. return selector;
  114. },
  115. reflow: function reflow(element) {
  116. new Function('bs', 'return bs')(element.offsetHeight);
  117. },
  118. triggerTransitionEnd: function triggerTransitionEnd(element) {
  119. $(element).trigger(transition.end);
  120. },
  121. supportsTransitionEnd: function supportsTransitionEnd() {
  122. return Boolean(transition);
  123. },
  124. typeCheckConfig: function typeCheckConfig(componentName, config, configTypes) {
  125. for (var property in configTypes) {
  126. if (configTypes.hasOwnProperty(property)) {
  127. var expectedTypes = configTypes[property];
  128. var value = config[property];
  129. var valueType = undefined;
  130. if (value && isElement(value)) {
  131. valueType = 'element';
  132. } else {
  133. valueType = toType(value);
  134. }
  135. if (!new RegExp(expectedTypes).test(valueType)) {
  136. throw new Error(componentName.toUpperCase() + ': ' + ('Option "' + property + '" provided type "' + valueType + '" ') + ('but expected type "' + expectedTypes + '".'));
  137. }
  138. }
  139. }
  140. }
  141. };
  142. setTransitionEndSupport();
  143. return Util;
  144. })(jQuery);
  145. /**
  146. * --------------------------------------------------------------------------
  147. * Bootstrap (v4.0.0-alpha.3): alert.js
  148. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
  149. * --------------------------------------------------------------------------
  150. */
  151. var Alert = (function ($) {
  152. /**
  153. * ------------------------------------------------------------------------
  154. * Constants
  155. * ------------------------------------------------------------------------
  156. */
  157. var NAME = 'alert';
  158. var VERSION = '4.0.0-alpha.3';
  159. var DATA_KEY = 'bs.alert';
  160. var EVENT_KEY = '.' + DATA_KEY;
  161. var DATA_API_KEY = '.data-api';
  162. var JQUERY_NO_CONFLICT = $.fn[NAME];
  163. var TRANSITION_DURATION = 150;
  164. var Selector = {
  165. DISMISS: '[data-dismiss="alert"]'
  166. };
  167. var Event = {
  168. CLOSE: 'close' + EVENT_KEY,
  169. CLOSED: 'closed' + EVENT_KEY,
  170. CLICK_DATA_API: 'click' + EVENT_KEY + DATA_API_KEY
  171. };
  172. var ClassName = {
  173. ALERT: 'alert',
  174. FADE: 'fade',
  175. IN: 'in'
  176. };
  177. /**
  178. * ------------------------------------------------------------------------
  179. * Class Definition
  180. * ------------------------------------------------------------------------
  181. */
  182. var Alert = (function () {
  183. function Alert(element) {
  184. _classCallCheck(this, Alert);
  185. this._element = element;
  186. }
  187. /**
  188. * ------------------------------------------------------------------------
  189. * Data Api implementation
  190. * ------------------------------------------------------------------------
  191. */
  192. // getters
  193. _createClass(Alert, [{
  194. key: 'close',
  195. // public
  196. value: function close(element) {
  197. element = element || this._element;
  198. var rootElement = this._getRootElement(element);
  199. var customEvent = this._triggerCloseEvent(rootElement);
  200. if (customEvent.isDefaultPrevented()) {
  201. return;
  202. }
  203. this._removeElement(rootElement);
  204. }
  205. }, {
  206. key: 'dispose',
  207. value: function dispose() {
  208. $.removeData(this._element, DATA_KEY);
  209. this._element = null;
  210. }
  211. // private
  212. }, {
  213. key: '_getRootElement',
  214. value: function _getRootElement(element) {
  215. var selector = Util.getSelectorFromElement(element);
  216. var parent = false;
  217. if (selector) {
  218. parent = $(selector)[0];
  219. }
  220. if (!parent) {
  221. parent = $(element).closest('.' + ClassName.ALERT)[0];
  222. }
  223. return parent;
  224. }
  225. }, {
  226. key: '_triggerCloseEvent',
  227. value: function _triggerCloseEvent(element) {
  228. var closeEvent = $.Event(Event.CLOSE);
  229. $(element).trigger(closeEvent);
  230. return closeEvent;
  231. }
  232. }, {
  233. key: '_removeElement',
  234. value: function _removeElement(element) {
  235. $(element).removeClass(ClassName.IN);
  236. if (!Util.supportsTransitionEnd() || !$(element).hasClass(ClassName.FADE)) {
  237. this._destroyElement(element);
  238. return;
  239. }
  240. $(element).one(Util.TRANSITION_END, $.proxy(this._destroyElement, this, element)).emulateTransitionEnd(TRANSITION_DURATION);
  241. }
  242. }, {
  243. key: '_destroyElement',
  244. value: function _destroyElement(element) {
  245. $(element).detach().trigger(Event.CLOSED).remove();
  246. }
  247. // static
  248. }], [{
  249. key: '_jQueryInterface',
  250. value: function _jQueryInterface(config) {
  251. return this.each(function () {
  252. var $element = $(this);
  253. var data = $element.data(DATA_KEY);
  254. if (!data) {
  255. data = new Alert(this);
  256. $element.data(DATA_KEY, data);
  257. }
  258. if (config === 'close') {
  259. data[config](this);
  260. }
  261. });
  262. }
  263. }, {
  264. key: '_handleDismiss',
  265. value: function _handleDismiss(alertInstance) {
  266. return function (event) {
  267. if (event) {
  268. event.preventDefault();
  269. }
  270. alertInstance.close(this);
  271. };
  272. }
  273. }, {
  274. key: 'VERSION',
  275. get: function get() {
  276. return VERSION;
  277. }
  278. }]);
  279. return Alert;
  280. })();
  281. $(document).on(Event.CLICK_DATA_API, Selector.DISMISS, Alert._handleDismiss(new Alert()));
  282. /**
  283. * ------------------------------------------------------------------------
  284. * jQuery
  285. * ------------------------------------------------------------------------
  286. */
  287. $.fn[NAME] = Alert._jQueryInterface;
  288. $.fn[NAME].Constructor = Alert;
  289. $.fn[NAME].noConflict = function () {
  290. $.fn[NAME] = JQUERY_NO_CONFLICT;
  291. return Alert._jQueryInterface;
  292. };
  293. return Alert;
  294. })(jQuery);
  295. /**
  296. * --------------------------------------------------------------------------
  297. * Bootstrap (v4.0.0-alpha.3): button.js
  298. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
  299. * --------------------------------------------------------------------------
  300. */
  301. var Button = (function ($) {
  302. /**
  303. * ------------------------------------------------------------------------
  304. * Constants
  305. * ------------------------------------------------------------------------
  306. */
  307. var NAME = 'button';
  308. var VERSION = '4.0.0-alpha.3';
  309. var DATA_KEY = 'bs.button';
  310. var EVENT_KEY = '.' + DATA_KEY;
  311. var DATA_API_KEY = '.data-api';
  312. var JQUERY_NO_CONFLICT = $.fn[NAME];
  313. var ClassName = {
  314. ACTIVE: 'active',
  315. BUTTON: 'btn',
  316. FOCUS: 'focus'
  317. };
  318. var Selector = {
  319. DATA_TOGGLE_CARROT: '[data-toggle^="button"]',
  320. DATA_TOGGLE: '[data-toggle="buttons"]',
  321. INPUT: 'input',
  322. ACTIVE: '.active',
  323. BUTTON: '.btn'
  324. };
  325. var Event = {
  326. CLICK_DATA_API: 'click' + EVENT_KEY + DATA_API_KEY,
  327. FOCUS_BLUR_DATA_API: 'focus' + EVENT_KEY + DATA_API_KEY + ' ' + ('blur' + EVENT_KEY + DATA_API_KEY)
  328. };
  329. /**
  330. * ------------------------------------------------------------------------
  331. * Class Definition
  332. * ------------------------------------------------------------------------
  333. */
  334. var Button = (function () {
  335. function Button(element) {
  336. _classCallCheck(this, Button);
  337. this._element = element;
  338. }
  339. /**
  340. * ------------------------------------------------------------------------
  341. * Data Api implementation
  342. * ------------------------------------------------------------------------
  343. */
  344. // getters
  345. _createClass(Button, [{
  346. key: 'toggle',
  347. // public
  348. value: function toggle() {
  349. var triggerChangeEvent = true;
  350. var rootElement = $(this._element).closest(Selector.DATA_TOGGLE)[0];
  351. if (rootElement) {
  352. var input = $(this._element).find(Selector.INPUT)[0];
  353. if (input) {
  354. if (input.type === 'radio') {
  355. if (input.checked && $(this._element).hasClass(ClassName.ACTIVE)) {
  356. triggerChangeEvent = false;
  357. } else {
  358. var activeElement = $(rootElement).find(Selector.ACTIVE)[0];
  359. if (activeElement) {
  360. $(activeElement).removeClass(ClassName.ACTIVE);
  361. }
  362. }
  363. }
  364. if (triggerChangeEvent) {
  365. input.checked = !$(this._element).hasClass(ClassName.ACTIVE);
  366. $(this._element).trigger('change');
  367. }
  368. input.focus();
  369. }
  370. } else {
  371. this._element.setAttribute('aria-pressed', !$(this._element).hasClass(ClassName.ACTIVE));
  372. }
  373. if (triggerChangeEvent) {
  374. $(this._element).toggleClass(ClassName.ACTIVE);
  375. }
  376. }
  377. }, {
  378. key: 'dispose',
  379. value: function dispose() {
  380. $.removeData(this._element, DATA_KEY);
  381. this._element = null;
  382. }
  383. // static
  384. }], [{
  385. key: '_jQueryInterface',
  386. value: function _jQueryInterface(config) {
  387. return this.each(function () {
  388. var data = $(this).data(DATA_KEY);
  389. if (!data) {
  390. data = new Button(this);
  391. $(this).data(DATA_KEY, data);
  392. }
  393. if (config === 'toggle') {
  394. data[config]();
  395. }
  396. });
  397. }
  398. }, {
  399. key: 'VERSION',
  400. get: function get() {
  401. return VERSION;
  402. }
  403. }]);
  404. return Button;
  405. })();
  406. $(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE_CARROT, function (event) {
  407. event.preventDefault();
  408. var button = event.target;
  409. if (!$(button).hasClass(ClassName.BUTTON)) {
  410. button = $(button).closest(Selector.BUTTON);
  411. }
  412. Button._jQueryInterface.call($(button), 'toggle');
  413. }).on(Event.FOCUS_BLUR_DATA_API, Selector.DATA_TOGGLE_CARROT, function (event) {
  414. var button = $(event.target).closest(Selector.BUTTON)[0];
  415. $(button).toggleClass(ClassName.FOCUS, /^focus(in)?$/.test(event.type));
  416. });
  417. /**
  418. * ------------------------------------------------------------------------
  419. * jQuery
  420. * ------------------------------------------------------------------------
  421. */
  422. $.fn[NAME] = Button._jQueryInterface;
  423. $.fn[NAME].Constructor = Button;
  424. $.fn[NAME].noConflict = function () {
  425. $.fn[NAME] = JQUERY_NO_CONFLICT;
  426. return Button._jQueryInterface;
  427. };
  428. return Button;
  429. })(jQuery);
  430. /**
  431. * --------------------------------------------------------------------------
  432. * Bootstrap (v4.0.0-alpha.3): carousel.js
  433. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
  434. * --------------------------------------------------------------------------
  435. */
  436. var Carousel = (function ($) {
  437. /**
  438. * ------------------------------------------------------------------------
  439. * Constants
  440. * ------------------------------------------------------------------------
  441. */
  442. var NAME = 'carousel';
  443. var VERSION = '4.0.0-alpha.3';
  444. var DATA_KEY = 'bs.carousel';
  445. var EVENT_KEY = '.' + DATA_KEY;
  446. var DATA_API_KEY = '.data-api';
  447. var JQUERY_NO_CONFLICT = $.fn[NAME];
  448. var TRANSITION_DURATION = 600;
  449. var ARROW_LEFT_KEYCODE = 37; // KeyboardEvent.which value for left arrow key
  450. var ARROW_RIGHT_KEYCODE = 39; // KeyboardEvent.which value for right arrow key
  451. var Default = {
  452. interval: 5000,
  453. keyboard: true,
  454. slide: false,
  455. pause: 'hover',
  456. wrap: true
  457. };
  458. var DefaultType = {
  459. interval: '(number|boolean)',
  460. keyboard: 'boolean',
  461. slide: '(boolean|string)',
  462. pause: '(string|boolean)',
  463. wrap: 'boolean'
  464. };
  465. var Direction = {
  466. NEXT: 'next',
  467. PREVIOUS: 'prev'
  468. };
  469. var Event = {
  470. SLIDE: 'slide' + EVENT_KEY,
  471. SLID: 'slid' + EVENT_KEY,
  472. KEYDOWN: 'keydown' + EVENT_KEY,
  473. MOUSEENTER: 'mouseenter' + EVENT_KEY,
  474. MOUSELEAVE: 'mouseleave' + EVENT_KEY,
  475. LOAD_DATA_API: 'load' + EVENT_KEY + DATA_API_KEY,
  476. CLICK_DATA_API: 'click' + EVENT_KEY + DATA_API_KEY
  477. };
  478. var ClassName = {
  479. CAROUSEL: 'carousel',
  480. ACTIVE: 'active',
  481. SLIDE: 'slide',
  482. RIGHT: 'right',
  483. LEFT: 'left',
  484. ITEM: 'carousel-item'
  485. };
  486. var Selector = {
  487. ACTIVE: '.active',
  488. ACTIVE_ITEM: '.active.carousel-item',
  489. ITEM: '.carousel-item',
  490. NEXT_PREV: '.next, .prev',
  491. INDICATORS: '.carousel-indicators',
  492. DATA_SLIDE: '[data-slide], [data-slide-to]',
  493. DATA_RIDE: '[data-ride="carousel"]'
  494. };
  495. /**
  496. * ------------------------------------------------------------------------
  497. * Class Definition
  498. * ------------------------------------------------------------------------
  499. */
  500. var Carousel = (function () {
  501. function Carousel(element, config) {
  502. _classCallCheck(this, Carousel);
  503. this._items = null;
  504. this._interval = null;
  505. this._activeElement = null;
  506. this._isPaused = false;
  507. this._isSliding = false;
  508. this._config = this._getConfig(config);
  509. this._element = $(element)[0];
  510. this._indicatorsElement = $(this._element).find(Selector.INDICATORS)[0];
  511. this._addEventListeners();
  512. }
  513. /**
  514. * ------------------------------------------------------------------------
  515. * Data Api implementation
  516. * ------------------------------------------------------------------------
  517. */
  518. // getters
  519. _createClass(Carousel, [{
  520. key: 'next',
  521. // public
  522. value: function next() {
  523. if (!this._isSliding) {
  524. this._slide(Direction.NEXT);
  525. }
  526. }
  527. }, {
  528. key: 'nextWhenVisible',
  529. value: function nextWhenVisible() {
  530. // Don't call next when the page isn't visible
  531. if (!document.hidden) {
  532. this.next();
  533. }
  534. }
  535. }, {
  536. key: 'prev',
  537. value: function prev() {
  538. if (!this._isSliding) {
  539. this._slide(Direction.PREVIOUS);
  540. }
  541. }
  542. }, {
  543. key: 'pause',
  544. value: function pause(event) {
  545. if (!event) {
  546. this._isPaused = true;
  547. }
  548. if ($(this._element).find(Selector.NEXT_PREV)[0] && Util.supportsTransitionEnd()) {
  549. Util.triggerTransitionEnd(this._element);
  550. this.cycle(true);
  551. }
  552. clearInterval(this._interval);
  553. this._interval = null;
  554. }
  555. }, {
  556. key: 'cycle',
  557. value: function cycle(event) {
  558. if (!event) {
  559. this._isPaused = false;
  560. }
  561. if (this._interval) {
  562. clearInterval(this._interval);
  563. this._interval = null;
  564. }
  565. if (this._config.interval && !this._isPaused) {
  566. this._interval = setInterval($.proxy(document.visibilityState ? this.nextWhenVisible : this.next, this), this._config.interval);
  567. }
  568. }
  569. }, {
  570. key: 'to',
  571. value: function to(index) {
  572. var _this2 = this;
  573. this._activeElement = $(this._element).find(Selector.ACTIVE_ITEM)[0];
  574. var activeIndex = this._getItemIndex(this._activeElement);
  575. if (index > this._items.length - 1 || index < 0) {
  576. return;
  577. }
  578. if (this._isSliding) {
  579. $(this._element).one(Event.SLID, function () {
  580. return _this2.to(index);
  581. });
  582. return;
  583. }
  584. if (activeIndex === index) {
  585. this.pause();
  586. this.cycle();
  587. return;
  588. }
  589. var direction = index > activeIndex ? Direction.NEXT : Direction.PREVIOUS;
  590. this._slide(direction, this._items[index]);
  591. }
  592. }, {
  593. key: 'dispose',
  594. value: function dispose() {
  595. $(this._element).off(EVENT_KEY);
  596. $.removeData(this._element, DATA_KEY);
  597. this._items = null;
  598. this._config = null;
  599. this._element = null;
  600. this._interval = null;
  601. this._isPaused = null;
  602. this._isSliding = null;
  603. this._activeElement = null;
  604. this._indicatorsElement = null;
  605. }
  606. // private
  607. }, {
  608. key: '_getConfig',
  609. value: function _getConfig(config) {
  610. config = $.extend({}, Default, config);
  611. Util.typeCheckConfig(NAME, config, DefaultType);
  612. return config;
  613. }
  614. }, {
  615. key: '_addEventListeners',
  616. value: function _addEventListeners() {
  617. if (this._config.keyboard) {
  618. $(this._element).on(Event.KEYDOWN, $.proxy(this._keydown, this));
  619. }
  620. if (this._config.pause === 'hover' && !('ontouchstart' in document.documentElement)) {
  621. $(this._element).on(Event.MOUSEENTER, $.proxy(this.pause, this)).on(Event.MOUSELEAVE, $.proxy(this.cycle, this));
  622. }
  623. }
  624. }, {
  625. key: '_keydown',
  626. value: function _keydown(event) {
  627. event.preventDefault();
  628. if (/input|textarea/i.test(event.target.tagName)) {
  629. return;
  630. }
  631. switch (event.which) {
  632. case ARROW_LEFT_KEYCODE:
  633. this.prev();
  634. break;
  635. case ARROW_RIGHT_KEYCODE:
  636. this.next();
  637. break;
  638. default:
  639. return;
  640. }
  641. }
  642. }, {
  643. key: '_getItemIndex',
  644. value: function _getItemIndex(element) {
  645. this._items = $.makeArray($(element).parent().find(Selector.ITEM));
  646. return this._items.indexOf(element);
  647. }
  648. }, {
  649. key: '_getItemByDirection',
  650. value: function _getItemByDirection(direction, activeElement) {
  651. var isNextDirection = direction === Direction.NEXT;
  652. var isPrevDirection = direction === Direction.PREVIOUS;
  653. var activeIndex = this._getItemIndex(activeElement);
  654. var lastItemIndex = this._items.length - 1;
  655. var isGoingToWrap = isPrevDirection && activeIndex === 0 || isNextDirection && activeIndex === lastItemIndex;
  656. if (isGoingToWrap && !this._config.wrap) {
  657. return activeElement;
  658. }
  659. var delta = direction === Direction.PREVIOUS ? -1 : 1;
  660. var itemIndex = (activeIndex + delta) % this._items.length;
  661. return itemIndex === -1 ? this._items[this._items.length - 1] : this._items[itemIndex];
  662. }
  663. }, {
  664. key: '_triggerSlideEvent',
  665. value: function _triggerSlideEvent(relatedTarget, directionalClassname) {
  666. var slideEvent = $.Event(Event.SLIDE, {
  667. relatedTarget: relatedTarget,
  668. direction: directionalClassname
  669. });
  670. $(this._element).trigger(slideEvent);
  671. return slideEvent;
  672. }
  673. }, {
  674. key: '_setActiveIndicatorElement',
  675. value: function _setActiveIndicatorElement(element) {
  676. if (this._indicatorsElement) {
  677. $(this._indicatorsElement).find(Selector.ACTIVE).removeClass(ClassName.ACTIVE);
  678. var nextIndicator = this._indicatorsElement.children[this._getItemIndex(element)];
  679. if (nextIndicator) {
  680. $(nextIndicator).addClass(ClassName.ACTIVE);
  681. }
  682. }
  683. }
  684. }, {
  685. key: '_slide',
  686. value: function _slide(direction, element) {
  687. var _this3 = this;
  688. var activeElement = $(this._element).find(Selector.ACTIVE_ITEM)[0];
  689. var nextElement = element || activeElement && this._getItemByDirection(direction, activeElement);
  690. var isCycling = Boolean(this._interval);
  691. var directionalClassName = direction === Direction.NEXT ? ClassName.LEFT : ClassName.RIGHT;
  692. if (nextElement && $(nextElement).hasClass(ClassName.ACTIVE)) {
  693. this._isSliding = false;
  694. return;
  695. }
  696. var slideEvent = this._triggerSlideEvent(nextElement, directionalClassName);
  697. if (slideEvent.isDefaultPrevented()) {
  698. return;
  699. }
  700. if (!activeElement || !nextElement) {
  701. // some weirdness is happening, so we bail
  702. return;
  703. }
  704. this._isSliding = true;
  705. if (isCycling) {
  706. this.pause();
  707. }
  708. this._setActiveIndicatorElement(nextElement);
  709. var slidEvent = $.Event(Event.SLID, {
  710. relatedTarget: nextElement,
  711. direction: directionalClassName
  712. });
  713. if (Util.supportsTransitionEnd() && $(this._element).hasClass(ClassName.SLIDE)) {
  714. $(nextElement).addClass(direction);
  715. Util.reflow(nextElement);
  716. $(activeElement).addClass(directionalClassName);
  717. $(nextElement).addClass(directionalClassName);
  718. $(activeElement).one(Util.TRANSITION_END, function () {
  719. $(nextElement).removeClass(directionalClassName).removeClass(direction);
  720. $(nextElement).addClass(ClassName.ACTIVE);
  721. $(activeElement).removeClass(ClassName.ACTIVE).removeClass(direction).removeClass(directionalClassName);
  722. _this3._isSliding = false;
  723. setTimeout(function () {
  724. return $(_this3._element).trigger(slidEvent);
  725. }, 0);
  726. }).emulateTransitionEnd(TRANSITION_DURATION);
  727. } else {
  728. $(activeElement).removeClass(ClassName.ACTIVE);
  729. $(nextElement).addClass(ClassName.ACTIVE);
  730. this._isSliding = false;
  731. $(this._element).trigger(slidEvent);
  732. }
  733. if (isCycling) {
  734. this.cycle();
  735. }
  736. }
  737. // static
  738. }], [{
  739. key: '_jQueryInterface',
  740. value: function _jQueryInterface(config) {
  741. return this.each(function () {
  742. var data = $(this).data(DATA_KEY);
  743. var _config = $.extend({}, Default, $(this).data());
  744. if (typeof config === 'object') {
  745. $.extend(_config, config);
  746. }
  747. var action = typeof config === 'string' ? config : _config.slide;
  748. if (!data) {
  749. data = new Carousel(this, _config);
  750. $(this).data(DATA_KEY, data);
  751. }
  752. if (typeof config === 'number') {
  753. data.to(config);
  754. } else if (typeof action === 'string') {
  755. if (data[action] === undefined) {
  756. throw new Error('No method named "' + action + '"');
  757. }
  758. data[action]();
  759. } else if (_config.interval) {
  760. data.pause();
  761. data.cycle();
  762. }
  763. });
  764. }
  765. }, {
  766. key: '_dataApiClickHandler',
  767. value: function _dataApiClickHandler(event) {
  768. var selector = Util.getSelectorFromElement(this);
  769. if (!selector) {
  770. return;
  771. }
  772. var target = $(selector)[0];
  773. if (!target || !$(target).hasClass(ClassName.CAROUSEL)) {
  774. return;
  775. }
  776. var config = $.extend({}, $(target).data(), $(this).data());
  777. var slideIndex = this.getAttribute('data-slide-to');
  778. if (slideIndex) {
  779. config.interval = false;
  780. }
  781. Carousel._jQueryInterface.call($(target), config);
  782. if (slideIndex) {
  783. $(target).data(DATA_KEY).to(slideIndex);
  784. }
  785. event.preventDefault();
  786. }
  787. }, {
  788. key: 'VERSION',
  789. get: function get() {
  790. return VERSION;
  791. }
  792. }, {
  793. key: 'Default',
  794. get: function get() {
  795. return Default;
  796. }
  797. }]);
  798. return Carousel;
  799. })();
  800. $(document).on(Event.CLICK_DATA_API, Selector.DATA_SLIDE, Carousel._dataApiClickHandler);
  801. $(window).on(Event.LOAD_DATA_API, function () {
  802. $(Selector.DATA_RIDE).each(function () {
  803. var $carousel = $(this);
  804. Carousel._jQueryInterface.call($carousel, $carousel.data());
  805. });
  806. });
  807. /**
  808. * ------------------------------------------------------------------------
  809. * jQuery
  810. * ------------------------------------------------------------------------
  811. */
  812. $.fn[NAME] = Carousel._jQueryInterface;
  813. $.fn[NAME].Constructor = Carousel;
  814. $.fn[NAME].noConflict = function () {
  815. $.fn[NAME] = JQUERY_NO_CONFLICT;
  816. return Carousel._jQueryInterface;
  817. };
  818. return Carousel;
  819. })(jQuery);
  820. /**
  821. * --------------------------------------------------------------------------
  822. * Bootstrap (v4.0.0-alpha.3): collapse.js
  823. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
  824. * --------------------------------------------------------------------------
  825. */
  826. var Collapse = (function ($) {
  827. /**
  828. * ------------------------------------------------------------------------
  829. * Constants
  830. * ------------------------------------------------------------------------
  831. */
  832. var NAME = 'collapse';
  833. var VERSION = '4.0.0-alpha.3';
  834. var DATA_KEY = 'bs.collapse';
  835. var EVENT_KEY = '.' + DATA_KEY;
  836. var DATA_API_KEY = '.data-api';
  837. var JQUERY_NO_CONFLICT = $.fn[NAME];
  838. var TRANSITION_DURATION = 600;
  839. var Default = {
  840. toggle: true,
  841. parent: ''
  842. };
  843. var DefaultType = {
  844. toggle: 'boolean',
  845. parent: 'string'
  846. };
  847. var Event = {
  848. SHOW: 'show' + EVENT_KEY,
  849. SHOWN: 'shown' + EVENT_KEY,
  850. HIDE: 'hide' + EVENT_KEY,
  851. HIDDEN: 'hidden' + EVENT_KEY,
  852. CLICK_DATA_API: 'click' + EVENT_KEY + DATA_API_KEY
  853. };
  854. var ClassName = {
  855. IN: 'in',
  856. COLLAPSE: 'collapse',
  857. COLLAPSING: 'collapsing',
  858. COLLAPSED: 'collapsed'
  859. };
  860. var Dimension = {
  861. WIDTH: 'width',
  862. HEIGHT: 'height'
  863. };
  864. var Selector = {
  865. ACTIVES: '.panel > .in, .panel > .collapsing',
  866. DATA_TOGGLE: '[data-toggle="collapse"]'
  867. };
  868. /**
  869. * ------------------------------------------------------------------------
  870. * Class Definition
  871. * ------------------------------------------------------------------------
  872. */
  873. var Collapse = (function () {
  874. function Collapse(element, config) {
  875. _classCallCheck(this, Collapse);
  876. this._isTransitioning = false;
  877. this._element = element;
  878. this._config = this._getConfig(config);
  879. this._triggerArray = $.makeArray($('[data-toggle="collapse"][href="#' + element.id + '"],' + ('[data-toggle="collapse"][data-target="#' + element.id + '"]')));
  880. this._parent = this._config.parent ? this._getParent() : null;
  881. if (!this._config.parent) {
  882. this._addAriaAndCollapsedClass(this._element, this._triggerArray);
  883. }
  884. if (this._config.toggle) {
  885. this.toggle();
  886. }
  887. }
  888. /**
  889. * ------------------------------------------------------------------------
  890. * Data Api implementation
  891. * ------------------------------------------------------------------------
  892. */
  893. // getters
  894. _createClass(Collapse, [{
  895. key: 'toggle',
  896. // public
  897. value: function toggle() {
  898. if ($(this._element).hasClass(ClassName.IN)) {
  899. this.hide();
  900. } else {
  901. this.show();
  902. }
  903. }
  904. }, {
  905. key: 'show',
  906. value: function show() {
  907. var _this4 = this;
  908. if (this._isTransitioning || $(this._element).hasClass(ClassName.IN)) {
  909. return;
  910. }
  911. var actives = undefined;
  912. var activesData = undefined;
  913. if (this._parent) {
  914. actives = $.makeArray($(Selector.ACTIVES));
  915. if (!actives.length) {
  916. actives = null;
  917. }
  918. }
  919. if (actives) {
  920. activesData = $(actives).data(DATA_KEY);
  921. if (activesData && activesData._isTransitioning) {
  922. return;
  923. }
  924. }
  925. var startEvent = $.Event(Event.SHOW);
  926. $(this._element).trigger(startEvent);
  927. if (startEvent.isDefaultPrevented()) {
  928. return;
  929. }
  930. if (actives) {
  931. Collapse._jQueryInterface.call($(actives), 'hide');
  932. if (!activesData) {
  933. $(actives).data(DATA_KEY, null);
  934. }
  935. }
  936. var dimension = this._getDimension();
  937. $(this._element).removeClass(ClassName.COLLAPSE).addClass(ClassName.COLLAPSING);
  938. this._element.style[dimension] = 0;
  939. this._element.setAttribute('aria-expanded', true);
  940. if (this._triggerArray.length) {
  941. $(this._triggerArray).removeClass(ClassName.COLLAPSED).attr('aria-expanded', true);
  942. }
  943. this.setTransitioning(true);
  944. var complete = function complete() {
  945. $(_this4._element).removeClass(ClassName.COLLAPSING).addClass(ClassName.COLLAPSE).addClass(ClassName.IN);
  946. _this4._element.style[dimension] = '';
  947. _this4.setTransitioning(false);
  948. $(_this4._element).trigger(Event.SHOWN);
  949. };
  950. if (!Util.supportsTransitionEnd()) {
  951. complete();
  952. return;
  953. }
  954. var capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1);
  955. var scrollSize = 'scroll' + capitalizedDimension;
  956. $(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(TRANSITION_DURATION);
  957. this._element.style[dimension] = this._element[scrollSize] + 'px';
  958. }
  959. }, {
  960. key: 'hide',
  961. value: function hide() {
  962. var _this5 = this;
  963. if (this._isTransitioning || !$(this._element).hasClass(ClassName.IN)) {
  964. return;
  965. }
  966. var startEvent = $.Event(Event.HIDE);
  967. $(this._element).trigger(startEvent);
  968. if (startEvent.isDefaultPrevented()) {
  969. return;
  970. }
  971. var dimension = this._getDimension();
  972. var offsetDimension = dimension === Dimension.WIDTH ? 'offsetWidth' : 'offsetHeight';
  973. this._element.style[dimension] = this._element[offsetDimension] + 'px';
  974. Util.reflow(this._element);
  975. $(this._element).addClass(ClassName.COLLAPSING).removeClass(ClassName.COLLAPSE).removeClass(ClassName.IN);
  976. this._element.setAttribute('aria-expanded', false);
  977. if (this._triggerArray.length) {
  978. $(this._triggerArray).addClass(ClassName.COLLAPSED).attr('aria-expanded', false);
  979. }
  980. this.setTransitioning(true);
  981. var complete = function complete() {
  982. _this5.setTransitioning(false);
  983. $(_this5._element).removeClass(ClassName.COLLAPSING).addClass(ClassName.COLLAPSE).trigger(Event.HIDDEN);
  984. };
  985. this._element.style[dimension] = 0;
  986. if (!Util.supportsTransitionEnd()) {
  987. complete();
  988. return;
  989. }
  990. $(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(TRANSITION_DURATION);
  991. }
  992. }, {
  993. key: 'setTransitioning',
  994. value: function setTransitioning(isTransitioning) {
  995. this._isTransitioning = isTransitioning;
  996. }
  997. }, {
  998. key: 'dispose',
  999. value: function dispose() {
  1000. $.removeData(this._element, DATA_KEY);
  1001. this._config = null;
  1002. this._parent = null;
  1003. this._element = null;
  1004. this._triggerArray = null;
  1005. this._isTransitioning = null;
  1006. }
  1007. // private
  1008. }, {
  1009. key: '_getConfig',
  1010. value: function _getConfig(config) {
  1011. config = $.extend({}, Default, config);
  1012. config.toggle = Boolean(config.toggle); // coerce string values
  1013. Util.typeCheckConfig(NAME, config, DefaultType);
  1014. return config;
  1015. }
  1016. }, {
  1017. key: '_getDimension',
  1018. value: function _getDimension() {
  1019. var hasWidth = $(this._element).hasClass(Dimension.WIDTH);
  1020. return hasWidth ? Dimension.WIDTH : Dimension.HEIGHT;
  1021. }
  1022. }, {
  1023. key: '_getParent',
  1024. value: function _getParent() {
  1025. var _this6 = this;
  1026. var parent = $(this._config.parent)[0];
  1027. var selector = '[data-toggle="collapse"][data-parent="' + this._config.parent + '"]';
  1028. $(parent).find(selector).each(function (i, element) {
  1029. _this6._addAriaAndCollapsedClass(Collapse._getTargetFromElement(element), [element]);
  1030. });
  1031. return parent;
  1032. }
  1033. }, {
  1034. key: '_addAriaAndCollapsedClass',
  1035. value: function _addAriaAndCollapsedClass(element, triggerArray) {
  1036. if (element) {
  1037. var isOpen = $(element).hasClass(ClassName.IN);
  1038. element.setAttribute('aria-expanded', isOpen);
  1039. if (triggerArray.length) {
  1040. $(triggerArray).toggleClass(ClassName.COLLAPSED, !isOpen).attr('aria-expanded', isOpen);
  1041. }
  1042. }
  1043. }
  1044. // static
  1045. }], [{
  1046. key: '_getTargetFromElement',
  1047. value: function _getTargetFromElement(element) {
  1048. var selector = Util.getSelectorFromElement(element);
  1049. return selector ? $(selector)[0] : null;
  1050. }
  1051. }, {
  1052. key: '_jQueryInterface',
  1053. value: function _jQueryInterface(config) {
  1054. return this.each(function () {
  1055. var $this = $(this);
  1056. var data = $this.data(DATA_KEY);
  1057. var _config = $.extend({}, Default, $this.data(), typeof config === 'object' && config);
  1058. if (!data && _config.toggle && /show|hide/.test(config)) {
  1059. _config.toggle = false;
  1060. }
  1061. if (!data) {
  1062. data = new Collapse(this, _config);
  1063. $this.data(DATA_KEY, data);
  1064. }
  1065. if (typeof config === 'string') {
  1066. if (data[config] === undefined) {
  1067. throw new Error('No method named "' + config + '"');
  1068. }
  1069. data[config]();
  1070. }
  1071. });
  1072. }
  1073. }, {
  1074. key: 'VERSION',
  1075. get: function get() {
  1076. return VERSION;
  1077. }
  1078. }, {
  1079. key: 'Default',
  1080. get: function get() {
  1081. return Default;
  1082. }
  1083. }]);
  1084. return Collapse;
  1085. })();
  1086. $(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) {
  1087. event.preventDefault();
  1088. var target = Collapse._getTargetFromElement(this);
  1089. var data = $(target).data(DATA_KEY);
  1090. var config = data ? 'toggle' : $(this).data();
  1091. Collapse._jQueryInterface.call($(target), config);
  1092. });
  1093. /**
  1094. * ------------------------------------------------------------------------
  1095. * jQuery
  1096. * ------------------------------------------------------------------------
  1097. */
  1098. $.fn[NAME] = Collapse._jQueryInterface;
  1099. $.fn[NAME].Constructor = Collapse;
  1100. $.fn[NAME].noConflict = function () {
  1101. $.fn[NAME] = JQUERY_NO_CONFLICT;
  1102. return Collapse._jQueryInterface;
  1103. };
  1104. return Collapse;
  1105. })(jQuery);
  1106. /**
  1107. * --------------------------------------------------------------------------
  1108. * Bootstrap (v4.0.0-alpha.3): dropdown.js
  1109. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
  1110. * --------------------------------------------------------------------------
  1111. */
  1112. var Dropdown = (function ($) {
  1113. /**
  1114. * ------------------------------------------------------------------------
  1115. * Constants
  1116. * ------------------------------------------------------------------------
  1117. */
  1118. var NAME = 'dropdown';
  1119. var VERSION = '4.0.0-alpha.3';
  1120. var DATA_KEY = 'bs.dropdown';
  1121. var EVENT_KEY = '.' + DATA_KEY;
  1122. var DATA_API_KEY = '.data-api';
  1123. var JQUERY_NO_CONFLICT = $.fn[NAME];
  1124. var ESCAPE_KEYCODE = 27; // KeyboardEvent.which value for Escape (Esc) key
  1125. var ARROW_UP_KEYCODE = 38; // KeyboardEvent.which value for up arrow key
  1126. var ARROW_DOWN_KEYCODE = 40; // KeyboardEvent.which value for down arrow key
  1127. var RIGHT_MOUSE_BUTTON_WHICH = 3; // MouseEvent.which value for the right button (assuming a right-handed mouse)
  1128. var Event = {
  1129. HIDE: 'hide' + EVENT_KEY,
  1130. HIDDEN: 'hidden' + EVENT_KEY,
  1131. SHOW: 'show' + EVENT_KEY,
  1132. SHOWN: 'shown' + EVENT_KEY,
  1133. CLICK: 'click' + EVENT_KEY,
  1134. CLICK_DATA_API: 'click' + EVENT_KEY + DATA_API_KEY,
  1135. KEYDOWN_DATA_API: 'keydown' + EVENT_KEY + DATA_API_KEY
  1136. };
  1137. var ClassName = {
  1138. BACKDROP: 'dropdown-backdrop',
  1139. DISABLED: 'disabled',
  1140. OPEN: 'open'
  1141. };
  1142. var Selector = {
  1143. BACKDROP: '.dropdown-backdrop',
  1144. DATA_TOGGLE: '[data-toggle="dropdown"]',
  1145. FORM_CHILD: '.dropdown form',
  1146. ROLE_MENU: '[role="menu"]',
  1147. ROLE_LISTBOX: '[role="listbox"]',
  1148. NAVBAR_NAV: '.navbar-nav',
  1149. VISIBLE_ITEMS: '[role="menu"] li:not(.disabled) a, ' + '[role="listbox"] li:not(.disabled) a'
  1150. };
  1151. /**
  1152. * ------------------------------------------------------------------------
  1153. * Class Definition
  1154. * ------------------------------------------------------------------------
  1155. */
  1156. var Dropdown = (function () {
  1157. function Dropdown(element) {
  1158. _classCallCheck(this, Dropdown);
  1159. this._element = element;
  1160. this._addEventListeners();
  1161. }
  1162. /**
  1163. * ------------------------------------------------------------------------
  1164. * Data Api implementation
  1165. * ------------------------------------------------------------------------
  1166. */
  1167. // getters
  1168. _createClass(Dropdown, [{
  1169. key: 'toggle',
  1170. // public
  1171. value: function toggle() {
  1172. if (this.disabled || $(this).hasClass(ClassName.DISABLED)) {
  1173. return false;
  1174. }
  1175. var parent = Dropdown._getParentFromElement(this);
  1176. var isActive = $(parent).hasClass(ClassName.OPEN);
  1177. Dropdown._clearMenus();
  1178. if (isActive) {
  1179. return false;
  1180. }
  1181. if ('ontouchstart' in document.documentElement && !$(parent).closest(Selector.NAVBAR_NAV).length) {
  1182. // if mobile we use a backdrop because click events don't delegate
  1183. var dropdown = document.createElement('div');
  1184. dropdown.className = ClassName.BACKDROP;
  1185. $(dropdown).insertBefore(this);
  1186. $(dropdown).on('click', Dropdown._clearMenus);
  1187. }
  1188. var relatedTarget = { relatedTarget: this };
  1189. var showEvent = $.Event(Event.SHOW, relatedTarget);
  1190. $(parent).trigger(showEvent);
  1191. if (showEvent.isDefaultPrevented()) {
  1192. return false;
  1193. }
  1194. this.focus();
  1195. this.setAttribute('aria-expanded', 'true');
  1196. $(parent).toggleClass(ClassName.OPEN);
  1197. $(parent).trigger($.Event(Event.SHOWN, relatedTarget));
  1198. return false;
  1199. }
  1200. }, {
  1201. key: 'dispose',
  1202. value: function dispose() {
  1203. $.removeData(this._element, DATA_KEY);
  1204. $(this._element).off(EVENT_KEY);
  1205. this._element = null;
  1206. }
  1207. // private
  1208. }, {
  1209. key: '_addEventListeners',
  1210. value: function _addEventListeners() {
  1211. $(this._element).on(Event.CLICK, this.toggle);
  1212. }
  1213. // static
  1214. }], [{
  1215. key: '_jQueryInterface',
  1216. value: function _jQueryInterface(config) {
  1217. return this.each(function () {
  1218. var data = $(this).data(DATA_KEY);
  1219. if (!data) {
  1220. $(this).data(DATA_KEY, data = new Dropdown(this));
  1221. }
  1222. if (typeof config === 'string') {
  1223. if (data[config] === undefined) {
  1224. throw new Error('No method named "' + config + '"');
  1225. }
  1226. data[config].call(this);
  1227. }
  1228. });
  1229. }
  1230. }, {
  1231. key: '_clearMenus',
  1232. value: function _clearMenus(event) {
  1233. if (event && event.which === RIGHT_MOUSE_BUTTON_WHICH) {
  1234. return;
  1235. }
  1236. var backdrop = $(Selector.BACKDROP)[0];
  1237. if (backdrop) {
  1238. backdrop.parentNode.removeChild(backdrop);
  1239. }
  1240. var toggles = $.makeArray($(Selector.DATA_TOGGLE));
  1241. for (var i = 0; i < toggles.length; i++) {
  1242. var _parent = Dropdown._getParentFromElement(toggles[i]);
  1243. var relatedTarget = { relatedTarget: toggles[i] };
  1244. if (!$(_parent).hasClass(ClassName.OPEN)) {
  1245. continue;
  1246. }
  1247. if (event && event.type === 'click' && /input|textarea/i.test(event.target.tagName) && $.contains(_parent, event.target)) {
  1248. continue;
  1249. }
  1250. var hideEvent = $.Event(Event.HIDE, relatedTarget);
  1251. $(_parent).trigger(hideEvent);
  1252. if (hideEvent.isDefaultPrevented()) {
  1253. continue;
  1254. }
  1255. toggles[i].setAttribute('aria-expanded', 'false');
  1256. $(_parent).removeClass(ClassName.OPEN).trigger($.Event(Event.HIDDEN, relatedTarget));
  1257. }
  1258. }
  1259. }, {
  1260. key: '_getParentFromElement',
  1261. value: function _getParentFromElement(element) {
  1262. var parent = undefined;
  1263. var selector = Util.getSelectorFromElement(element);
  1264. if (selector) {
  1265. parent = $(selector)[0];
  1266. }
  1267. return parent || element.parentNode;
  1268. }
  1269. }, {
  1270. key: '_dataApiKeydownHandler',
  1271. value: function _dataApiKeydownHandler(event) {
  1272. if (!/(38|40|27|32)/.test(event.which) || /input|textarea/i.test(event.target.tagName)) {
  1273. return;
  1274. }
  1275. event.preventDefault();
  1276. event.stopPropagation();
  1277. if (this.disabled || $(this).hasClass(ClassName.DISABLED)) {
  1278. return;
  1279. }
  1280. var parent = Dropdown._getParentFromElement(this);
  1281. var isActive = $(parent).hasClass(ClassName.OPEN);
  1282. if (!isActive && event.which !== ESCAPE_KEYCODE || isActive && event.which === ESCAPE_KEYCODE) {
  1283. if (event.which === ESCAPE_KEYCODE) {
  1284. var toggle = $(parent).find(Selector.DATA_TOGGLE)[0];
  1285. $(toggle).trigger('focus');
  1286. }
  1287. $(this).trigger('click');
  1288. return;
  1289. }
  1290. var items = $.makeArray($(Selector.VISIBLE_ITEMS));
  1291. items = items.filter(function (item) {
  1292. return item.offsetWidth || item.offsetHeight;
  1293. });
  1294. if (!items.length) {
  1295. return;
  1296. }
  1297. var index = items.indexOf(event.target);
  1298. if (event.which === ARROW_UP_KEYCODE && index > 0) {
  1299. // up
  1300. index--;
  1301. }
  1302. if (event.which === ARROW_DOWN_KEYCODE && index < items.length - 1) {
  1303. // down
  1304. index++;
  1305. }
  1306. if (index < 0) {
  1307. index = 0;
  1308. }
  1309. items[index].focus();
  1310. }
  1311. }, {
  1312. key: 'VERSION',
  1313. get: function get() {
  1314. return VERSION;
  1315. }
  1316. }]);
  1317. return Dropdown;
  1318. })();
  1319. $(document).on(Event.KEYDOWN_DATA_API, Selector.DATA_TOGGLE, Dropdown._dataApiKeydownHandler).on(Event.KEYDOWN_DATA_API, Selector.ROLE_MENU, Dropdown._dataApiKeydownHandler).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) {
  1320. e.stopPropagation();
  1321. });
  1322. /**
  1323. * ------------------------------------------------------------------------
  1324. * jQuery
  1325. * ------------------------------------------------------------------------
  1326. */
  1327. $.fn[NAME] = Dropdown._jQueryInterface;
  1328. $.fn[NAME].Constructor = Dropdown;
  1329. $.fn[NAME].noConflict = function () {
  1330. $.fn[NAME] = JQUERY_NO_CONFLICT;
  1331. return Dropdown._jQueryInterface;
  1332. };
  1333. return Dropdown;
  1334. })(jQuery);
  1335. /**
  1336. * --------------------------------------------------------------------------
  1337. * Bootstrap (v4.0.0-alpha.3): modal.js
  1338. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
  1339. * --------------------------------------------------------------------------
  1340. */
  1341. var Modal = (function ($) {
  1342. /**
  1343. * ------------------------------------------------------------------------
  1344. * Constants
  1345. * ------------------------------------------------------------------------
  1346. */
  1347. var NAME = 'modal';
  1348. var VERSION = '4.0.0-alpha.3';
  1349. var DATA_KEY = 'bs.modal';
  1350. var EVENT_KEY = '.' + DATA_KEY;
  1351. var DATA_API_KEY = '.data-api';
  1352. var JQUERY_NO_CONFLICT = $.fn[NAME];
  1353. var TRANSITION_DURATION = 300;
  1354. var BACKDROP_TRANSITION_DURATION = 150;
  1355. var ESCAPE_KEYCODE = 27; // KeyboardEvent.which value for Escape (Esc) key
  1356. var Default = {
  1357. backdrop: true,
  1358. keyboard: true,
  1359. focus: true,
  1360. show: true
  1361. };
  1362. var DefaultType = {
  1363. backdrop: '(boolean|string)',
  1364. keyboard: 'boolean',
  1365. focus: 'boolean',
  1366. show: 'boolean'
  1367. };
  1368. var Event = {
  1369. HIDE: 'hide' + EVENT_KEY,
  1370. HIDDEN: 'hidden' + EVENT_KEY,
  1371. SHOW: 'show' + EVENT_KEY,
  1372. SHOWN: 'shown' + EVENT_KEY,
  1373. FOCUSIN: 'focusin' + EVENT_KEY,
  1374. RESIZE: 'resize' + EVENT_KEY,
  1375. CLICK_DISMISS: 'click.dismiss' + EVENT_KEY,
  1376. KEYDOWN_DISMISS: 'keydown.dismiss' + EVENT_KEY,
  1377. MOUSEUP_DISMISS: 'mouseup.dismiss' + EVENT_KEY,
  1378. MOUSEDOWN_DISMISS: 'mousedown.dismiss' + EVENT_KEY,
  1379. CLICK_DATA_API: 'click' + EVENT_KEY + DATA_API_KEY
  1380. };
  1381. var ClassName = {
  1382. SCROLLBAR_MEASURER: 'modal-scrollbar-measure',
  1383. BACKDROP: 'modal-backdrop',
  1384. OPEN: 'modal-open',
  1385. FADE: 'fade',
  1386. IN: 'in'
  1387. };
  1388. var Selector = {
  1389. DIALOG: '.modal-dialog',
  1390. DATA_TOGGLE: '[data-toggle="modal"]',
  1391. DATA_DISMISS: '[data-dismiss="modal"]',
  1392. FIXED_CONTENT: '.navbar-fixed-top, .navbar-fixed-bottom, .is-fixed'
  1393. };
  1394. /**
  1395. * ------------------------------------------------------------------------
  1396. * Class Definition
  1397. * ------------------------------------------------------------------------
  1398. */
  1399. var Modal = (function () {
  1400. function Modal(element, config) {
  1401. _classCallCheck(this, Modal);
  1402. this._config = this._getConfig(config);
  1403. this._element = element;
  1404. this._dialog = $(element).find(Selector.DIALOG)[0];
  1405. this._backdrop = null;
  1406. this._isShown = false;
  1407. this._isBodyOverflowing = false;
  1408. this._ignoreBackdropClick = false;
  1409. this._originalBodyPadding = 0;
  1410. this._scrollbarWidth = 0;
  1411. }
  1412. /**
  1413. * ------------------------------------------------------------------------
  1414. * Data Api implementation
  1415. * ------------------------------------------------------------------------
  1416. */
  1417. // getters
  1418. _createClass(Modal, [{
  1419. key: 'toggle',
  1420. // public
  1421. value: function toggle(relatedTarget) {
  1422. return this._isShown ? this.hide() : this.show(relatedTarget);
  1423. }
  1424. }, {
  1425. key: 'show',
  1426. value: function show(relatedTarget) {
  1427. var _this7 = this;
  1428. var showEvent = $.Event(Event.SHOW, {
  1429. relatedTarget: relatedTarget
  1430. });
  1431. $(this._element).trigger(showEvent);
  1432. if (this._isShown || showEvent.isDefaultPrevented()) {
  1433. return;
  1434. }
  1435. this._isShown = true;
  1436. this._checkScrollbar();
  1437. this._setScrollbar();
  1438. $(document.body).addClass(ClassName.OPEN);
  1439. this._setEscapeEvent();
  1440. this._setResizeEvent();
  1441. $(this._element).on(Event.CLICK_DISMISS, Selector.DATA_DISMISS, $.proxy(this.hide, this));
  1442. $(this._dialog).on(Event.MOUSEDOWN_DISMISS, function () {
  1443. $(_this7._element).one(Event.MOUSEUP_DISMISS, function (event) {
  1444. if ($(event.target).is(_this7._element)) {
  1445. _this7._ignoreBackdropClick = true;
  1446. }
  1447. });
  1448. });
  1449. this._showBackdrop($.proxy(this._showElement, this, relatedTarget));
  1450. }
  1451. }, {
  1452. key: 'hide',
  1453. value: function hide(event) {
  1454. if (event) {
  1455. event.preventDefault();
  1456. }
  1457. var hideEvent = $.Event(Event.HIDE);
  1458. $(this._element).trigger(hideEvent);
  1459. if (!this._isShown || hideEvent.isDefaultPrevented()) {
  1460. return;
  1461. }
  1462. this._isShown = false;
  1463. this._setEscapeEvent();
  1464. this._setResizeEvent();
  1465. $(document).off(Event.FOCUSIN);
  1466. $(this._element).removeClass(ClassName.IN);
  1467. $(this._element).off(Event.CLICK_DISMISS);
  1468. $(this._dialog).off(Event.MOUSEDOWN_DISMISS);
  1469. if (Util.supportsTransitionEnd() && $(this._element).hasClass(ClassName.FADE)) {
  1470. $(this._element).one(Util.TRANSITION_END, $.proxy(this._hideModal, this)).emulateTransitionEnd(TRANSITION_DURATION);
  1471. } else {
  1472. this._hideModal();
  1473. }
  1474. }
  1475. }, {
  1476. key: 'dispose',
  1477. value: function dispose() {
  1478. $.removeData(this._element, DATA_KEY);
  1479. $(window).off(EVENT_KEY);
  1480. $(document).off(EVENT_KEY);
  1481. $(this._element).off(EVENT_KEY);
  1482. $(this._backdrop).off(EVENT_KEY);
  1483. this._config = null;
  1484. this._element = null;
  1485. this._dialog = null;
  1486. this._backdrop = null;
  1487. this._isShown = null;
  1488. this._isBodyOverflowing = null;
  1489. this._ignoreBackdropClick = null;
  1490. this._originalBodyPadding = null;
  1491. this._scrollbarWidth = null;
  1492. }
  1493. // private
  1494. }, {
  1495. key: '_getConfig',
  1496. value: function _getConfig(config) {
  1497. config = $.extend({}, Default, config);
  1498. Util.typeCheckConfig(NAME, config, DefaultType);
  1499. return config;
  1500. }
  1501. }, {
  1502. key: '_showElement',
  1503. value: function _showElement(relatedTarget) {
  1504. var _this8 = this;
  1505. var transition = Util.supportsTransitionEnd() && $(this._element).hasClass(ClassName.FADE);
  1506. if (!this._element.parentNode || this._element.parentNode.nodeType !== Node.ELEMENT_NODE) {
  1507. // don't move modals dom position
  1508. document.body.appendChild(this._element);
  1509. }
  1510. this._element.style.display = 'block';
  1511. this._element.removeAttribute('aria-hidden');
  1512. this._element.scrollTop = 0;
  1513. if (transition) {
  1514. Util.reflow(this._element);
  1515. }
  1516. $(this._element).addClass(ClassName.IN);
  1517. if (this._config.focus) {
  1518. this._enforceFocus();
  1519. }
  1520. var shownEvent = $.Event(Event.SHOWN, {
  1521. relatedTarget: relatedTarget
  1522. });
  1523. var transitionComplete = function transitionComplete() {
  1524. if (_this8._config.focus) {
  1525. _this8._element.focus();
  1526. }
  1527. $(_this8._element).trigger(shownEvent);
  1528. };
  1529. if (transition) {
  1530. $(this._dialog).one(Util.TRANSITION_END, transitionComplete).emulateTransitionEnd(TRANSITION_DURATION);
  1531. } else {
  1532. transitionComplete();
  1533. }
  1534. }
  1535. }, {
  1536. key: '_enforceFocus',
  1537. value: function _enforceFocus() {
  1538. var _this9 = this;
  1539. $(document).off(Event.FOCUSIN) // guard against infinite focus loop
  1540. .on(Event.FOCUSIN, function (event) {
  1541. if (document !== event.target && _this9._element !== event.target && !$(_this9._element).has(event.target).length) {
  1542. _this9._element.focus();
  1543. }
  1544. });
  1545. }
  1546. }, {
  1547. key: '_setEscapeEvent',
  1548. value: function _setEscapeEvent() {
  1549. var _this10 = this;
  1550. if (this._isShown && this._config.keyboard) {
  1551. $(this._element).on(Event.KEYDOWN_DISMISS, function (event) {
  1552. if (event.which === ESCAPE_KEYCODE) {
  1553. _this10.hide();
  1554. }
  1555. });
  1556. } else if (!this._isShown) {
  1557. $(this._element).off(Event.KEYDOWN_DISMISS);
  1558. }
  1559. }
  1560. }, {
  1561. key: '_setResizeEvent',
  1562. value: function _setResizeEvent() {
  1563. if (this._isShown) {
  1564. $(window).on(Event.RESIZE, $.proxy(this._handleUpdate, this));
  1565. } else {
  1566. $(window).off(Event.RESIZE);
  1567. }
  1568. }
  1569. }, {
  1570. key: '_hideModal',
  1571. value: function _hideModal() {
  1572. var _this11 = this;
  1573. this._element.style.display = 'none';
  1574. this._element.setAttribute('aria-hidden', 'true');
  1575. this._showBackdrop(function () {
  1576. $(document.body).removeClass(ClassName.OPEN);
  1577. _this11._resetAdjustments();
  1578. _this11._resetScrollbar();
  1579. $(_this11._element).trigger(Event.HIDDEN);
  1580. });
  1581. }
  1582. }, {
  1583. key: '_removeBackdrop',
  1584. value: function _removeBackdrop() {
  1585. if (this._backdrop) {
  1586. $(this._backdrop).remove();
  1587. this._backdrop = null;
  1588. }
  1589. }
  1590. }, {
  1591. key: '_showBackdrop',
  1592. value: function _showBackdrop(callback) {
  1593. var _this12 = this;
  1594. var animate = $(this._element).hasClass(ClassName.FADE) ? ClassName.FADE : '';
  1595. if (this._isShown && this._config.backdrop) {
  1596. var doAnimate = Util.supportsTransitionEnd() && animate;
  1597. this._backdrop = document.createElement('div');
  1598. this._backdrop.className = ClassName.BACKDROP;
  1599. if (animate) {
  1600. $(this._backdrop).addClass(animate);
  1601. }
  1602. $(this._backdrop).appendTo(document.body);
  1603. $(this._element).on(Event.CLICK_DISMISS, function (event) {
  1604. if (_this12._ignoreBackdropClick) {
  1605. _this12._ignoreBackdropClick = false;
  1606. return;
  1607. }
  1608. if (event.target !== event.currentTarget) {
  1609. return;
  1610. }
  1611. if (_this12._config.backdrop === 'static') {
  1612. _this12._element.focus();
  1613. } else {
  1614. _this12.hide();
  1615. }
  1616. });
  1617. if (doAnimate) {
  1618. Util.reflow(this._backdrop);
  1619. }
  1620. $(this._backdrop).addClass(ClassName.IN);
  1621. if (!callback) {
  1622. return;
  1623. }
  1624. if (!doAnimate) {
  1625. callback();
  1626. return;
  1627. }
  1628. $(this._backdrop).one(Util.TRANSITION_END, callback).emulateTransitionEnd(BACKDROP_TRANSITION_DURATION);
  1629. } else if (!this._isShown && this._backdrop) {
  1630. $(this._backdrop).removeClass(ClassName.IN);
  1631. var callbackRemove = function callbackRemove() {
  1632. _this12._removeBackdrop();
  1633. if (callback) {
  1634. callback();
  1635. }
  1636. };
  1637. if (Util.supportsTransitionEnd() && $(this._element).hasClass(ClassName.FADE)) {
  1638. $(this._backdrop).one(Util.TRANSITION_END, callbackRemove).emulateTransitionEnd(BACKDROP_TRANSITION_DURATION);
  1639. } else {
  1640. callbackRemove();
  1641. }
  1642. } else if (callback) {
  1643. callback();
  1644. }
  1645. }
  1646. // ----------------------------------------------------------------------
  1647. // the following methods are used to handle overflowing modals
  1648. // todo (fat): these should probably be refactored out of modal.js
  1649. // ----------------------------------------------------------------------
  1650. }, {
  1651. key: '_handleUpdate',
  1652. value: function _handleUpdate() {
  1653. this._adjustDialog();
  1654. }
  1655. }, {
  1656. key: '_adjustDialog',
  1657. value: function _adjustDialog() {
  1658. var isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;
  1659. if (!this._isBodyOverflowing && isModalOverflowing) {
  1660. this._element.style.paddingLeft = this._scrollbarWidth + 'px';
  1661. }
  1662. if (this._isBodyOverflowing && !isModalOverflowing) {
  1663. this._element.style.paddingRight = this._scrollbarWidth + 'px';
  1664. }
  1665. }
  1666. }, {
  1667. key: '_resetAdjustments',
  1668. value: function _resetAdjustments() {
  1669. this._element.style.paddingLeft = '';
  1670. this._element.style.paddingRight = '';
  1671. }
  1672. }, {
  1673. key: '_checkScrollbar',
  1674. value: function _checkScrollbar() {
  1675. this._isBodyOverflowing = document.body.clientWidth < window.innerWidth;
  1676. this._scrollbarWidth = this._getScrollbarWidth();
  1677. }
  1678. }, {
  1679. key: '_setScrollbar',
  1680. value: function _setScrollbar() {
  1681. var bodyPadding = parseInt($(Selector.FIXED_CONTENT).css('padding-right') || 0, 10);
  1682. this._originalBodyPadding = document.body.style.paddingRight || '';
  1683. if (this._isBodyOverflowing) {
  1684. document.body.style.paddingRight = bodyPadding + this._scrollbarWidth + 'px';
  1685. }
  1686. }
  1687. }, {
  1688. key: '_resetScrollbar',
  1689. value: function _resetScrollbar() {
  1690. document.body.style.paddingRight = this._originalBodyPadding;
  1691. }
  1692. }, {
  1693. key: '_getScrollbarWidth',
  1694. value: function _getScrollbarWidth() {
  1695. // thx d.walsh
  1696. var scrollDiv = document.createElement('div');
  1697. scrollDiv.className = ClassName.SCROLLBAR_MEASURER;
  1698. document.body.appendChild(scrollDiv);
  1699. var scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth;
  1700. document.body.removeChild(scrollDiv);
  1701. return scrollbarWidth;
  1702. }
  1703. // static
  1704. }], [{
  1705. key: '_jQueryInterface',
  1706. value: function _jQueryInterface(config, relatedTarget) {
  1707. return this.each(function () {
  1708. var data = $(this).data(DATA_KEY);
  1709. var _config = $.extend({}, Modal.Default, $(this).data(), typeof config === 'object' && config);
  1710. if (!data) {
  1711. data = new Modal(this, _config);
  1712. $(this).data(DATA_KEY, data);
  1713. }
  1714. if (typeof config === 'string') {
  1715. if (data[config] === undefined) {
  1716. throw new Error('No method named "' + config + '"');
  1717. }
  1718. data[config](relatedTarget);
  1719. } else if (_config.show) {
  1720. data.show(relatedTarget);
  1721. }
  1722. });
  1723. }
  1724. }, {
  1725. key: 'VERSION',
  1726. get: function get() {
  1727. return VERSION;
  1728. }
  1729. }, {
  1730. key: 'Default',
  1731. get: function get() {
  1732. return Default;
  1733. }
  1734. }]);
  1735. return Modal;
  1736. })();
  1737. $(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) {
  1738. var _this13 = this;
  1739. var target = undefined;
  1740. var selector = Util.getSelectorFromElement(this);
  1741. if (selector) {
  1742. target = $(selector)[0];
  1743. }
  1744. var config = $(target).data(DATA_KEY) ? 'toggle' : $.extend({}, $(target).data(), $(this).data());
  1745. if (this.tagName === 'A') {
  1746. event.preventDefault();
  1747. }
  1748. var $target = $(target).one(Event.SHOW, function (showEvent) {
  1749. if (showEvent.isDefaultPrevented()) {
  1750. // only register focus restorer if modal will actually get shown
  1751. return;
  1752. }
  1753. $target.one(Event.HIDDEN, function () {
  1754. if ($(_this13).is(':visible')) {
  1755. _this13.focus();
  1756. }
  1757. });
  1758. });
  1759. Modal._jQueryInterface.call($(target), config, this);
  1760. });
  1761. /**
  1762. * ------------------------------------------------------------------------
  1763. * jQuery
  1764. * ------------------------------------------------------------------------
  1765. */
  1766. $.fn[NAME] = Modal._jQueryInterface;
  1767. $.fn[NAME].Constructor = Modal;
  1768. $.fn[NAME].noConflict = function () {
  1769. $.fn[NAME] = JQUERY_NO_CONFLICT;
  1770. return Modal._jQueryInterface;
  1771. };
  1772. return Modal;
  1773. })(jQuery);
  1774. /**
  1775. * --------------------------------------------------------------------------
  1776. * Bootstrap (v4.0.0-alpha.3): scrollspy.js
  1777. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
  1778. * --------------------------------------------------------------------------
  1779. */
  1780. var ScrollSpy = (function ($) {
  1781. /**
  1782. * ------------------------------------------------------------------------
  1783. * Constants
  1784. * ------------------------------------------------------------------------
  1785. */
  1786. var NAME = 'scrollspy';
  1787. var VERSION = '4.0.0-alpha.3';
  1788. var DATA_KEY = 'bs.scrollspy';
  1789. var EVENT_KEY = '.' + DATA_KEY;
  1790. var DATA_API_KEY = '.data-api';
  1791. var JQUERY_NO_CONFLICT = $.fn[NAME];
  1792. var Default = {
  1793. offset: 10,
  1794. method: 'auto',
  1795. target: ''
  1796. };
  1797. var DefaultType = {
  1798. offset: 'number',
  1799. method: 'string',
  1800. target: '(string|element)'
  1801. };
  1802. var Event = {
  1803. ACTIVATE: 'activate' + EVENT_KEY,
  1804. SCROLL: 'scroll' + EVENT_KEY,
  1805. LOAD_DATA_API: 'load' + EVENT_KEY + DATA_API_KEY
  1806. };
  1807. var ClassName = {
  1808. DROPDOWN_ITEM: 'dropdown-item',
  1809. DROPDOWN_MENU: 'dropdown-menu',
  1810. NAV_LINK: 'nav-link',
  1811. NAV: 'nav',
  1812. ACTIVE: 'active'
  1813. };
  1814. var Selector = {
  1815. DATA_SPY: '[data-spy="scroll"]',
  1816. ACTIVE: '.active',
  1817. LIST_ITEM: '.list-item',
  1818. LI: 'li',
  1819. LI_DROPDOWN: 'li.dropdown',
  1820. NAV_LINKS: '.nav-link',
  1821. DROPDOWN: '.dropdown',
  1822. DROPDOWN_ITEMS: '.dropdown-item',
  1823. DROPDOWN_TOGGLE: '.dropdown-toggle'
  1824. };
  1825. var OffsetMethod = {
  1826. OFFSET: 'offset',
  1827. POSITION: 'position'
  1828. };
  1829. /**
  1830. * ------------------------------------------------------------------------
  1831. * Class Definition
  1832. * ------------------------------------------------------------------------
  1833. */
  1834. var ScrollSpy = (function () {
  1835. function ScrollSpy(element, config) {
  1836. _classCallCheck(this, ScrollSpy);
  1837. this._element = element;
  1838. this._scrollElement = element.tagName === 'BODY' ? window : element;
  1839. this._config = this._getConfig(config);
  1840. this._selector = this._config.target + ' ' + Selector.NAV_LINKS + ',' + (this._config.target + ' ' + Selector.DROPDOWN_ITEMS);
  1841. this._offsets = [];
  1842. this._targets = [];
  1843. this._activeTarget = null;
  1844. this._scrollHeight = 0;
  1845. $(this._scrollElement).on(Event.SCROLL, $.proxy(this._process, this));
  1846. this.refresh();
  1847. this._process();
  1848. }
  1849. /**
  1850. * ------------------------------------------------------------------------
  1851. * Data Api implementation
  1852. * ------------------------------------------------------------------------
  1853. */
  1854. // getters
  1855. _createClass(ScrollSpy, [{
  1856. key: 'refresh',
  1857. // public
  1858. value: function refresh() {
  1859. var _this14 = this;
  1860. var autoMethod = this._scrollElement !== this._scrollElement.window ? OffsetMethod.POSITION : OffsetMethod.OFFSET;
  1861. var offsetMethod = this._config.method === 'auto' ? autoMethod : this._config.method;
  1862. var offsetBase = offsetMethod === OffsetMethod.POSITION ? this._getScrollTop() : 0;
  1863. this._offsets = [];
  1864. this._targets = [];
  1865. this._scrollHeight = this._getScrollHeight();
  1866. var targets = $.makeArray($(this._selector));
  1867. targets.map(function (element) {
  1868. var target = undefined;
  1869. var targetSelector = Util.getSelectorFromElement(element);
  1870. if (targetSelector) {
  1871. target = $(targetSelector)[0];
  1872. }
  1873. if (target && (target.offsetWidth || target.offsetHeight)) {
  1874. // todo (fat): remove sketch reliance on jQuery position/offset
  1875. return [$(target)[offsetMethod]().top + offsetBase, targetSelector];
  1876. }
  1877. return null;
  1878. }).filter(function (item) {
  1879. return item;
  1880. }).sort(function (a, b) {
  1881. return a[0] - b[0];
  1882. }).forEach(function (item) {
  1883. _this14._offsets.push(item[0]);
  1884. _this14._targets.push(item[1]);
  1885. });
  1886. }
  1887. }, {
  1888. key: 'dispose',
  1889. value: function dispose() {
  1890. $.removeData(this._element, DATA_KEY);
  1891. $(this._scrollElement).off(EVENT_KEY);
  1892. this._element = null;
  1893. this._scrollElement = null;
  1894. this._config = null;
  1895. this._selector = null;
  1896. this._offsets = null;
  1897. this._targets = null;
  1898. this._activeTarget = null;
  1899. this._scrollHeight = null;
  1900. }
  1901. // private
  1902. }, {
  1903. key: '_getConfig',
  1904. value: function _getConfig(config) {
  1905. config = $.extend({}, Default, config);
  1906. if (typeof config.target !== 'string') {
  1907. var id = $(config.target).attr('id');
  1908. if (!id) {
  1909. id = Util.getUID(NAME);
  1910. $(config.target).attr('id', id);
  1911. }
  1912. config.target = '#' + id;
  1913. }
  1914. Util.typeCheckConfig(NAME, config, DefaultType);
  1915. return config;
  1916. }
  1917. }, {
  1918. key: '_getScrollTop',
  1919. value: function _getScrollTop() {
  1920. return this._scrollElement === window ? this._scrollElement.scrollY : this._scrollElement.scrollTop;
  1921. }
  1922. }, {
  1923. key: '_getScrollHeight',
  1924. value: function _getScrollHeight() {
  1925. return this._scrollElement.scrollHeight || Math.max(document.body.scrollHeight, document.documentElement.scrollHeight);
  1926. }
  1927. }, {
  1928. key: '_process',
  1929. value: function _process() {
  1930. var scrollTop = this._getScrollTop() + this._config.offset;
  1931. var scrollHeight = this._getScrollHeight();
  1932. var maxScroll = this._config.offset + scrollHeight - this._scrollElement.offsetHeight;
  1933. if (this._scrollHeight !== scrollHeight) {
  1934. this.refresh();
  1935. }
  1936. if (scrollTop >= maxScroll) {
  1937. var target = this._targets[this._targets.length - 1];
  1938. if (this._activeTarget !== target) {
  1939. this._activate(target);
  1940. }
  1941. }
  1942. if (this._activeTarget && scrollTop < this._offsets[0]) {
  1943. this._activeTarget = null;
  1944. this._clear();
  1945. return;
  1946. }
  1947. for (var i = this._offsets.length; i--;) {
  1948. var isActiveTarget = this._activeTarget !== this._targets[i] && scrollTop >= this._offsets[i] && (this._offsets[i + 1] === undefined || scrollTop < this._offsets[i + 1]);
  1949. if (isActiveTarget) {
  1950. this._activate(this._targets[i]);
  1951. }
  1952. }
  1953. }
  1954. }, {
  1955. key: '_activate',
  1956. value: function _activate(target) {
  1957. this._activeTarget = target;
  1958. this._clear();
  1959. var queries = this._selector.split(',');
  1960. queries = queries.map(function (selector) {
  1961. return selector + '[data-target="' + target + '"],' + (selector + '[href="' + target + '"]');
  1962. });
  1963. var $link = $(queries.join(','));
  1964. if ($link.hasClass(ClassName.DROPDOWN_ITEM)) {
  1965. $link.closest(Selector.DROPDOWN).find(Selector.DROPDOWN_TOGGLE).addClass(ClassName.ACTIVE);
  1966. $link.addClass(ClassName.ACTIVE);
  1967. } else {
  1968. // todo (fat) this is kinda sus...
  1969. // recursively add actives to tested nav-links
  1970. $link.parents(Selector.LI).find(Selector.NAV_LINKS).addClass(ClassName.ACTIVE);
  1971. }
  1972. $(this._scrollElement).trigger(Event.ACTIVATE, {
  1973. relatedTarget: target
  1974. });
  1975. }
  1976. }, {
  1977. key: '_clear',
  1978. value: function _clear() {
  1979. $(this._selector).filter(Selector.ACTIVE).removeClass(ClassName.ACTIVE);
  1980. }
  1981. // static
  1982. }], [{
  1983. key: '_jQueryInterface',
  1984. value: function _jQueryInterface(config) {
  1985. return this.each(function () {
  1986. var data = $(this).data(DATA_KEY);
  1987. var _config = typeof config === 'object' && config || null;
  1988. if (!data) {
  1989. data = new ScrollSpy(this, _config);
  1990. $(this).data(DATA_KEY, data);
  1991. }
  1992. if (typeof config === 'string') {
  1993. if (data[config] === undefined) {
  1994. throw new Error('No method named "' + config + '"');
  1995. }
  1996. data[config]();
  1997. }
  1998. });
  1999. }
  2000. }, {
  2001. key: 'VERSION',
  2002. get: function get() {
  2003. return VERSION;
  2004. }
  2005. }, {
  2006. key: 'Default',
  2007. get: function get() {
  2008. return Default;
  2009. }
  2010. }]);
  2011. return ScrollSpy;
  2012. })();
  2013. $(window).on(Event.LOAD_DATA_API, function () {
  2014. var scrollSpys = $.makeArray($(Selector.DATA_SPY));
  2015. for (var i = scrollSpys.length; i--;) {
  2016. var $spy = $(scrollSpys[i]);
  2017. ScrollSpy._jQueryInterface.call($spy, $spy.data());
  2018. }
  2019. });
  2020. /**
  2021. * ------------------------------------------------------------------------
  2022. * jQuery
  2023. * ------------------------------------------------------------------------
  2024. */
  2025. $.fn[NAME] = ScrollSpy._jQueryInterface;
  2026. $.fn[NAME].Constructor = ScrollSpy;
  2027. $.fn[NAME].noConflict = function () {
  2028. $.fn[NAME] = JQUERY_NO_CONFLICT;
  2029. return ScrollSpy._jQueryInterface;
  2030. };
  2031. return ScrollSpy;
  2032. })(jQuery);
  2033. /**
  2034. * --------------------------------------------------------------------------
  2035. * Bootstrap (v4.0.0-alpha.3): tab.js
  2036. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
  2037. * --------------------------------------------------------------------------
  2038. */
  2039. var Tab = (function ($) {
  2040. /**
  2041. * ------------------------------------------------------------------------
  2042. * Constants
  2043. * ------------------------------------------------------------------------
  2044. */
  2045. var NAME = 'tab';
  2046. var VERSION = '4.0.0-alpha.3';
  2047. var DATA_KEY = 'bs.tab';
  2048. var EVENT_KEY = '.' + DATA_KEY;
  2049. var DATA_API_KEY = '.data-api';
  2050. var JQUERY_NO_CONFLICT = $.fn[NAME];
  2051. var TRANSITION_DURATION = 150;
  2052. var Event = {
  2053. HIDE: 'hide' + EVENT_KEY,
  2054. HIDDEN: 'hidden' + EVENT_KEY,
  2055. SHOW: 'show' + EVENT_KEY,
  2056. SHOWN: 'shown' + EVENT_KEY,
  2057. CLICK_DATA_API: 'click' + EVENT_KEY + DATA_API_KEY
  2058. };
  2059. var ClassName = {
  2060. DROPDOWN_MENU: 'dropdown-menu',
  2061. ACTIVE: 'active',
  2062. FADE: 'fade',
  2063. IN: 'in'
  2064. };
  2065. var Selector = {
  2066. A: 'a',
  2067. LI: 'li',
  2068. DROPDOWN: '.dropdown',
  2069. UL: 'ul:not(.dropdown-menu)',
  2070. FADE_CHILD: '> .nav-item .fade, > .fade',
  2071. ACTIVE: '.active',
  2072. ACTIVE_CHILD: '> .nav-item > .active, > .active',
  2073. DATA_TOGGLE: '[data-toggle="tab"], [data-toggle="pill"]',
  2074. DROPDOWN_TOGGLE: '.dropdown-toggle',
  2075. DROPDOWN_ACTIVE_CHILD: '> .dropdown-menu .active'
  2076. };
  2077. /**
  2078. * ------------------------------------------------------------------------
  2079. * Class Definition
  2080. * ------------------------------------------------------------------------
  2081. */
  2082. var Tab = (function () {
  2083. function Tab(element) {
  2084. _classCallCheck(this, Tab);
  2085. this._element = element;
  2086. }
  2087. /**
  2088. * ------------------------------------------------------------------------
  2089. * Data Api implementation
  2090. * ------------------------------------------------------------------------
  2091. */
  2092. // getters
  2093. _createClass(Tab, [{
  2094. key: 'show',
  2095. // public
  2096. value: function show() {
  2097. var _this15 = this;
  2098. if (this._element.parentNode && this._element.parentNode.nodeType === Node.ELEMENT_NODE && $(this._element).hasClass(ClassName.ACTIVE)) {
  2099. return;
  2100. }
  2101. var target = undefined;
  2102. var previous = undefined;
  2103. var ulElement = $(this._element).closest(Selector.UL)[0];
  2104. var selector = Util.getSelectorFromElement(this._element);
  2105. if (ulElement) {
  2106. previous = $.makeArray($(ulElement).find(Selector.ACTIVE));
  2107. previous = previous[previous.length - 1];
  2108. }
  2109. var hideEvent = $.Event(Event.HIDE, {
  2110. relatedTarget: this._element
  2111. });
  2112. var showEvent = $.Event(Event.SHOW, {
  2113. relatedTarget: previous
  2114. });
  2115. if (previous) {
  2116. $(previous).trigger(hideEvent);
  2117. }
  2118. $(this._element).trigger(showEvent);
  2119. if (showEvent.isDefaultPrevented() || hideEvent.isDefaultPrevented()) {
  2120. return;
  2121. }
  2122. if (selector) {
  2123. target = $(selector)[0];
  2124. }
  2125. this._activate(this._element, ulElement);
  2126. var complete = function complete() {
  2127. var hiddenEvent = $.Event(Event.HIDDEN, {
  2128. relatedTarget: _this15._element
  2129. });
  2130. var shownEvent = $.Event(Event.SHOWN, {
  2131. relatedTarget: previous
  2132. });
  2133. $(previous).trigger(hiddenEvent);
  2134. $(_this15._element).trigger(shownEvent);
  2135. };
  2136. if (target) {
  2137. this._activate(target, target.parentNode, complete);
  2138. } else {
  2139. complete();
  2140. }
  2141. }
  2142. }, {
  2143. key: 'dispose',
  2144. value: function dispose() {
  2145. $.removeClass(this._element, DATA_KEY);
  2146. this._element = null;
  2147. }
  2148. // private
  2149. }, {
  2150. key: '_activate',
  2151. value: function _activate(element, container, callback) {
  2152. var active = $(container).find(Selector.ACTIVE_CHILD)[0];
  2153. var isTransitioning = callback && Util.supportsTransitionEnd() && (active && $(active).hasClass(ClassName.FADE) || Boolean($(container).find(Selector.FADE_CHILD)[0]));
  2154. var complete = $.proxy(this._transitionComplete, this, element, active, isTransitioning, callback);
  2155. if (active && isTransitioning) {
  2156. $(active).one(Util.TRANSITION_END, complete).emulateTransitionEnd(TRANSITION_DURATION);
  2157. } else {
  2158. complete();
  2159. }
  2160. if (active) {
  2161. $(active).removeClass(ClassName.IN);
  2162. }
  2163. }
  2164. }, {
  2165. key: '_transitionComplete',
  2166. value: function _transitionComplete(element, active, isTransitioning, callback) {
  2167. if (active) {
  2168. $(active).removeClass(ClassName.ACTIVE);
  2169. var dropdownChild = $(active).find(Selector.DROPDOWN_ACTIVE_CHILD)[0];
  2170. if (dropdownChild) {
  2171. $(dropdownChild).removeClass(ClassName.ACTIVE);
  2172. }
  2173. active.setAttribute('aria-expanded', false);
  2174. }
  2175. $(element).addClass(ClassName.ACTIVE);
  2176. element.setAttribute('aria-expanded', true);
  2177. if (isTransitioning) {
  2178. Util.reflow(element);
  2179. $(element).addClass(ClassName.IN);
  2180. } else {
  2181. $(element).removeClass(ClassName.FADE);
  2182. }
  2183. if (element.parentNode && $(element.parentNode).hasClass(ClassName.DROPDOWN_MENU)) {
  2184. var dropdownElement = $(element).closest(Selector.DROPDOWN)[0];
  2185. if (dropdownElement) {
  2186. $(dropdownElement).find(Selector.DROPDOWN_TOGGLE).addClass(ClassName.ACTIVE);
  2187. }
  2188. element.setAttribute('aria-expanded', true);
  2189. }
  2190. if (callback) {
  2191. callback();
  2192. }
  2193. }
  2194. // static
  2195. }], [{
  2196. key: '_jQueryInterface',
  2197. value: function _jQueryInterface(config) {
  2198. return this.each(function () {
  2199. var $this = $(this);
  2200. var data = $this.data(DATA_KEY);
  2201. if (!data) {
  2202. data = data = new Tab(this);
  2203. $this.data(DATA_KEY, data);
  2204. }
  2205. if (typeof config === 'string') {
  2206. if (data[config] === undefined) {
  2207. throw new Error('No method named "' + config + '"');
  2208. }
  2209. data[config]();
  2210. }
  2211. });
  2212. }
  2213. }, {
  2214. key: 'VERSION',
  2215. get: function get() {
  2216. return VERSION;
  2217. }
  2218. }]);
  2219. return Tab;
  2220. })();
  2221. $(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) {
  2222. event.preventDefault();
  2223. Tab._jQueryInterface.call($(this), 'show');
  2224. });
  2225. /**
  2226. * ------------------------------------------------------------------------
  2227. * jQuery
  2228. * ------------------------------------------------------------------------
  2229. */
  2230. $.fn[NAME] = Tab._jQueryInterface;
  2231. $.fn[NAME].Constructor = Tab;
  2232. $.fn[NAME].noConflict = function () {
  2233. $.fn[NAME] = JQUERY_NO_CONFLICT;
  2234. return Tab._jQueryInterface;
  2235. };
  2236. return Tab;
  2237. })(jQuery);
  2238. /* global Tether */
  2239. /**
  2240. * --------------------------------------------------------------------------
  2241. * Bootstrap (v4.0.0-alpha.3): tooltip.js
  2242. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
  2243. * --------------------------------------------------------------------------
  2244. */
  2245. var Tooltip = (function ($) {
  2246. /**
  2247. * Check for Tether dependency
  2248. * Tether - http://github.hubspot.com/tether/
  2249. */
  2250. if (window.Tether === undefined) {
  2251. throw new Error('Bootstrap tooltips require Tether (http://github.hubspot.com/tether/)');
  2252. }
  2253. /**
  2254. * ------------------------------------------------------------------------
  2255. * Constants
  2256. * ------------------------------------------------------------------------
  2257. */
  2258. var NAME = 'tooltip';
  2259. var VERSION = '4.0.0-alpha.3';
  2260. var DATA_KEY = 'bs.tooltip';
  2261. var EVENT_KEY = '.' + DATA_KEY;
  2262. var JQUERY_NO_CONFLICT = $.fn[NAME];
  2263. var TRANSITION_DURATION = 150;
  2264. var CLASS_PREFIX = 'bs-tether';
  2265. var Default = {
  2266. animation: true,
  2267. template: '<div class="tooltip" role="tooltip">' + '<div class="tooltip-arrow"></div>' + '<div class="tooltip-inner"></div></div>',
  2268. trigger: 'hover focus',
  2269. title: '',
  2270. delay: 0,
  2271. html: false,
  2272. selector: false,
  2273. placement: 'top',
  2274. offset: '0 0',
  2275. constraints: []
  2276. };
  2277. var DefaultType = {
  2278. animation: 'boolean',
  2279. template: 'string',
  2280. title: '(string|element|function)',
  2281. trigger: 'string',
  2282. delay: '(number|object)',
  2283. html: 'boolean',
  2284. selector: '(string|boolean)',
  2285. placement: '(string|function)',
  2286. offset: 'string',
  2287. constraints: 'array'
  2288. };
  2289. var AttachmentMap = {
  2290. TOP: 'bottom center',
  2291. RIGHT: 'middle left',
  2292. BOTTOM: 'top center',
  2293. LEFT: 'middle right'
  2294. };
  2295. var HoverState = {
  2296. IN: 'in',
  2297. OUT: 'out'
  2298. };
  2299. var Event = {
  2300. HIDE: 'hide' + EVENT_KEY,
  2301. HIDDEN: 'hidden' + EVENT_KEY,
  2302. SHOW: 'show' + EVENT_KEY,
  2303. SHOWN: 'shown' + EVENT_KEY,
  2304. INSERTED: 'inserted' + EVENT_KEY,
  2305. CLICK: 'click' + EVENT_KEY,
  2306. FOCUSIN: 'focusin' + EVENT_KEY,
  2307. FOCUSOUT: 'focusout' + EVENT_KEY,
  2308. MOUSEENTER: 'mouseenter' + EVENT_KEY,
  2309. MOUSELEAVE: 'mouseleave' + EVENT_KEY
  2310. };
  2311. var ClassName = {
  2312. FADE: 'fade',
  2313. IN: 'in'
  2314. };
  2315. var Selector = {
  2316. TOOLTIP: '.tooltip',
  2317. TOOLTIP_INNER: '.tooltip-inner'
  2318. };
  2319. var TetherClass = {
  2320. element: false,
  2321. enabled: false
  2322. };
  2323. var Trigger = {
  2324. HOVER: 'hover',
  2325. FOCUS: 'focus',
  2326. CLICK: 'click',
  2327. MANUAL: 'manual'
  2328. };
  2329. /**
  2330. * ------------------------------------------------------------------------
  2331. * Class Definition
  2332. * ------------------------------------------------------------------------
  2333. */
  2334. var Tooltip = (function () {
  2335. function Tooltip(element, config) {
  2336. _classCallCheck(this, Tooltip);
  2337. // private
  2338. this._isEnabled = true;
  2339. this._timeout = 0;
  2340. this._hoverState = '';
  2341. this._activeTrigger = {};
  2342. this._tether = null;
  2343. // protected
  2344. this.element = element;
  2345. this.config = this._getConfig(config);
  2346. this.tip = null;
  2347. this._setListeners();
  2348. }
  2349. /**
  2350. * ------------------------------------------------------------------------
  2351. * jQuery
  2352. * ------------------------------------------------------------------------
  2353. */
  2354. // getters
  2355. _createClass(Tooltip, [{
  2356. key: 'enable',
  2357. // public
  2358. value: function enable() {
  2359. this._isEnabled = true;
  2360. }
  2361. }, {
  2362. key: 'disable',
  2363. value: function disable() {
  2364. this._isEnabled = false;
  2365. }
  2366. }, {
  2367. key: 'toggleEnabled',
  2368. value: function toggleEnabled() {
  2369. this._isEnabled = !this._isEnabled;
  2370. }
  2371. }, {
  2372. key: 'toggle',
  2373. value: function toggle(event) {
  2374. if (event) {
  2375. var dataKey = this.constructor.DATA_KEY;
  2376. var context = $(event.currentTarget).data(dataKey);
  2377. if (!context) {
  2378. context = new this.constructor(event.currentTarget, this._getDelegateConfig());
  2379. $(event.currentTarget).data(dataKey, context);
  2380. }
  2381. context._activeTrigger.click = !context._activeTrigger.click;
  2382. if (context._isWithActiveTrigger()) {
  2383. context._enter(null, context);
  2384. } else {
  2385. context._leave(null, context);
  2386. }
  2387. } else {
  2388. if ($(this.getTipElement()).hasClass(ClassName.IN)) {
  2389. this._leave(null, this);
  2390. return;
  2391. }
  2392. this._enter(null, this);
  2393. }
  2394. }
  2395. }, {
  2396. key: 'dispose',
  2397. value: function dispose() {
  2398. clearTimeout(this._timeout);
  2399. this.cleanupTether();
  2400. $.removeData(this.element, this.constructor.DATA_KEY);
  2401. $(this.element).off(this.constructor.EVENT_KEY);
  2402. if (this.tip) {
  2403. $(this.tip).remove();
  2404. }
  2405. this._isEnabled = null;
  2406. this._timeout = null;
  2407. this._hoverState = null;
  2408. this._activeTrigger = null;
  2409. this._tether = null;
  2410. this.element = null;
  2411. this.config = null;
  2412. this.tip = null;
  2413. }
  2414. }, {
  2415. key: 'show',
  2416. value: function show() {
  2417. var _this16 = this;
  2418. var showEvent = $.Event(this.constructor.Event.SHOW);
  2419. if (this.isWithContent() && this._isEnabled) {
  2420. $(this.element).trigger(showEvent);
  2421. var isInTheDom = $.contains(this.element.ownerDocument.documentElement, this.element);
  2422. if (showEvent.isDefaultPrevented() || !isInTheDom) {
  2423. return;
  2424. }
  2425. var tip = this.getTipElement();
  2426. var tipId = Util.getUID(this.constructor.NAME);
  2427. tip.setAttribute('id', tipId);
  2428. this.element.setAttribute('aria-describedby', tipId);
  2429. this.setContent();
  2430. if (this.config.animation) {
  2431. $(tip).addClass(ClassName.FADE);
  2432. }
  2433. var placement = typeof this.config.placement === 'function' ? this.config.placement.call(this, tip, this.element) : this.config.placement;
  2434. var attachment = this._getAttachment(placement);
  2435. $(tip).data(this.constructor.DATA_KEY, this).appendTo(document.body);
  2436. $(this.element).trigger(this.constructor.Event.INSERTED);
  2437. this._tether = new Tether({
  2438. attachment: attachment,
  2439. element: tip,
  2440. target: this.element,
  2441. classes: TetherClass,
  2442. classPrefix: CLASS_PREFIX,
  2443. offset: this.config.offset,
  2444. constraints: this.config.constraints,
  2445. addTargetClasses: false
  2446. });
  2447. Util.reflow(tip);
  2448. this._tether.position();
  2449. $(tip).addClass(ClassName.IN);
  2450. var complete = function complete() {
  2451. var prevHoverState = _this16._hoverState;
  2452. _this16._hoverState = null;
  2453. $(_this16.element).trigger(_this16.constructor.Event.SHOWN);
  2454. if (prevHoverState === HoverState.OUT) {
  2455. _this16._leave(null, _this16);
  2456. }
  2457. };
  2458. if (Util.supportsTransitionEnd() && $(this.tip).hasClass(ClassName.FADE)) {
  2459. $(this.tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(Tooltip._TRANSITION_DURATION);
  2460. return;
  2461. }
  2462. complete();
  2463. }
  2464. }
  2465. }, {
  2466. key: 'hide',
  2467. value: function hide(callback) {
  2468. var _this17 = this;
  2469. var tip = this.getTipElement();
  2470. var hideEvent = $.Event(this.constructor.Event.HIDE);
  2471. var complete = function complete() {
  2472. if (_this17._hoverState !== HoverState.IN && tip.parentNode) {
  2473. tip.parentNode.removeChild(tip);
  2474. }
  2475. _this17.element.removeAttribute('aria-describedby');
  2476. $(_this17.element).trigger(_this17.constructor.Event.HIDDEN);
  2477. _this17.cleanupTether();
  2478. if (callback) {
  2479. callback();
  2480. }
  2481. };
  2482. $(this.element).trigger(hideEvent);
  2483. if (hideEvent.isDefaultPrevented()) {
  2484. return;
  2485. }
  2486. $(tip).removeClass(ClassName.IN);
  2487. if (Util.supportsTransitionEnd() && $(this.tip).hasClass(ClassName.FADE)) {
  2488. $(tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(TRANSITION_DURATION);
  2489. } else {
  2490. complete();
  2491. }
  2492. this._hoverState = '';
  2493. }
  2494. // protected
  2495. }, {
  2496. key: 'isWithContent',
  2497. value: function isWithContent() {
  2498. return Boolean(this.getTitle());
  2499. }
  2500. }, {
  2501. key: 'getTipElement',
  2502. value: function getTipElement() {
  2503. return this.tip = this.tip || $(this.config.template)[0];
  2504. }
  2505. }, {
  2506. key: 'setContent',
  2507. value: function setContent() {
  2508. var $tip = $(this.getTipElement());
  2509. this.setElementContent($tip.find(Selector.TOOLTIP_INNER), this.getTitle());
  2510. $tip.removeClass(ClassName.FADE).removeClass(ClassName.IN);
  2511. this.cleanupTether();
  2512. }
  2513. }, {
  2514. key: 'setElementContent',
  2515. value: function setElementContent($element, content) {
  2516. var html = this.config.html;
  2517. if (typeof content === 'object' && (content.nodeType || content.jquery)) {
  2518. // content is a DOM node or a jQuery
  2519. if (html) {
  2520. if (!$(content).parent().is($element)) {
  2521. $element.empty().append(content);
  2522. }
  2523. } else {
  2524. $element.text($(content).text());
  2525. }
  2526. } else {
  2527. $element[html ? 'html' : 'text'](content);
  2528. }
  2529. }
  2530. }, {
  2531. key: 'getTitle',
  2532. value: function getTitle() {
  2533. var title = this.element.getAttribute('data-original-title');
  2534. if (!title) {
  2535. title = typeof this.config.title === 'function' ? this.config.title.call(this.element) : this.config.title;
  2536. }
  2537. return title;
  2538. }
  2539. }, {
  2540. key: 'cleanupTether',
  2541. value: function cleanupTether() {
  2542. if (this._tether) {
  2543. this._tether.destroy();
  2544. }
  2545. }
  2546. // private
  2547. }, {
  2548. key: '_getAttachment',
  2549. value: function _getAttachment(placement) {
  2550. return AttachmentMap[placement.toUpperCase()];
  2551. }
  2552. }, {
  2553. key: '_setListeners',
  2554. value: function _setListeners() {
  2555. var _this18 = this;
  2556. var triggers = this.config.trigger.split(' ');
  2557. triggers.forEach(function (trigger) {
  2558. if (trigger === 'click') {
  2559. $(_this18.element).on(_this18.constructor.Event.CLICK, _this18.config.selector, $.proxy(_this18.toggle, _this18));
  2560. } else if (trigger !== Trigger.MANUAL) {
  2561. var eventIn = trigger === Trigger.HOVER ? _this18.constructor.Event.MOUSEENTER : _this18.constructor.Event.FOCUSIN;
  2562. var eventOut = trigger === Trigger.HOVER ? _this18.constructor.Event.MOUSELEAVE : _this18.constructor.Event.FOCUSOUT;
  2563. $(_this18.element).on(eventIn, _this18.config.selector, $.proxy(_this18._enter, _this18)).on(eventOut, _this18.config.selector, $.proxy(_this18._leave, _this18));
  2564. }
  2565. });
  2566. if (this.config.selector) {
  2567. this.config = $.extend({}, this.config, {
  2568. trigger: 'manual',
  2569. selector: ''
  2570. });
  2571. } else {
  2572. this._fixTitle();
  2573. }
  2574. }
  2575. }, {
  2576. key: '_fixTitle',
  2577. value: function _fixTitle() {
  2578. var titleType = typeof this.element.getAttribute('data-original-title');
  2579. if (this.element.getAttribute('title') || titleType !== 'string') {
  2580. this.element.setAttribute('data-original-title', this.element.getAttribute('title') || '');
  2581. this.element.setAttribute('title', '');
  2582. }
  2583. }
  2584. }, {
  2585. key: '_enter',
  2586. value: function _enter(event, context) {
  2587. var dataKey = this.constructor.DATA_KEY;
  2588. context = context || $(event.currentTarget).data(dataKey);
  2589. if (!context) {
  2590. context = new this.constructor(event.currentTarget, this._getDelegateConfig());
  2591. $(event.currentTarget).data(dataKey, context);
  2592. }
  2593. if (event) {
  2594. context._activeTrigger[event.type === 'focusin' ? Trigger.FOCUS : Trigger.HOVER] = true;
  2595. }
  2596. if ($(context.getTipElement()).hasClass(ClassName.IN) || context._hoverState === HoverState.IN) {
  2597. context._hoverState = HoverState.IN;
  2598. return;
  2599. }
  2600. clearTimeout(context._timeout);
  2601. context._hoverState = HoverState.IN;
  2602. if (!context.config.delay || !context.config.delay.show) {
  2603. context.show();
  2604. return;
  2605. }
  2606. context._timeout = setTimeout(function () {
  2607. if (context._hoverState === HoverState.IN) {
  2608. context.show();
  2609. }
  2610. }, context.config.delay.show);
  2611. }
  2612. }, {
  2613. key: '_leave',
  2614. value: function _leave(event, context) {
  2615. var dataKey = this.constructor.DATA_KEY;
  2616. context = context || $(event.currentTarget).data(dataKey);
  2617. if (!context) {
  2618. context = new this.constructor(event.currentTarget, this._getDelegateConfig());
  2619. $(event.currentTarget).data(dataKey, context);
  2620. }
  2621. if (event) {
  2622. context._activeTrigger[event.type === 'focusout' ? Trigger.FOCUS : Trigger.HOVER] = false;
  2623. }
  2624. if (context._isWithActiveTrigger()) {
  2625. return;
  2626. }
  2627. clearTimeout(context._timeout);
  2628. context._hoverState = HoverState.OUT;
  2629. if (!context.config.delay || !context.config.delay.hide) {
  2630. context.hide();
  2631. return;
  2632. }
  2633. context._timeout = setTimeout(function () {
  2634. if (context._hoverState === HoverState.OUT) {
  2635. context.hide();
  2636. }
  2637. }, context.config.delay.hide);
  2638. }
  2639. }, {
  2640. key: '_isWithActiveTrigger',
  2641. value: function _isWithActiveTrigger() {
  2642. for (var trigger in this._activeTrigger) {
  2643. if (this._activeTrigger[trigger]) {
  2644. return true;
  2645. }
  2646. }
  2647. return false;
  2648. }
  2649. }, {
  2650. key: '_getConfig',
  2651. value: function _getConfig(config) {
  2652. config = $.extend({}, this.constructor.Default, $(this.element).data(), config);
  2653. if (config.delay && typeof config.delay === 'number') {
  2654. config.delay = {
  2655. show: config.delay,
  2656. hide: config.delay
  2657. };
  2658. }
  2659. Util.typeCheckConfig(NAME, config, this.constructor.DefaultType);
  2660. return config;
  2661. }
  2662. }, {
  2663. key: '_getDelegateConfig',
  2664. value: function _getDelegateConfig() {
  2665. var config = {};
  2666. if (this.config) {
  2667. for (var key in this.config) {
  2668. if (this.constructor.Default[key] !== this.config[key]) {
  2669. config[key] = this.config[key];
  2670. }
  2671. }
  2672. }
  2673. return config;
  2674. }
  2675. // static
  2676. }], [{
  2677. key: '_jQueryInterface',
  2678. value: function _jQueryInterface(config) {
  2679. return this.each(function () {
  2680. var data = $(this).data(DATA_KEY);
  2681. var _config = typeof config === 'object' ? config : null;
  2682. if (!data && /destroy|hide/.test(config)) {
  2683. return;
  2684. }
  2685. if (!data) {
  2686. data = new Tooltip(this, _config);
  2687. $(this).data(DATA_KEY, data);
  2688. }
  2689. if (typeof config === 'string') {
  2690. if (data[config] === undefined) {
  2691. throw new Error('No method named "' + config + '"');
  2692. }
  2693. data[config]();
  2694. }
  2695. });
  2696. }
  2697. }, {
  2698. key: 'VERSION',
  2699. get: function get() {
  2700. return VERSION;
  2701. }
  2702. }, {
  2703. key: 'Default',
  2704. get: function get() {
  2705. return Default;
  2706. }
  2707. }, {
  2708. key: 'NAME',
  2709. get: function get() {
  2710. return NAME;
  2711. }
  2712. }, {
  2713. key: 'DATA_KEY',
  2714. get: function get() {
  2715. return DATA_KEY;
  2716. }
  2717. }, {
  2718. key: 'Event',
  2719. get: function get() {
  2720. return Event;
  2721. }
  2722. }, {
  2723. key: 'EVENT_KEY',
  2724. get: function get() {
  2725. return EVENT_KEY;
  2726. }
  2727. }, {
  2728. key: 'DefaultType',
  2729. get: function get() {
  2730. return DefaultType;
  2731. }
  2732. }]);
  2733. return Tooltip;
  2734. })();
  2735. $.fn[NAME] = Tooltip._jQueryInterface;
  2736. $.fn[NAME].Constructor = Tooltip;
  2737. $.fn[NAME].noConflict = function () {
  2738. $.fn[NAME] = JQUERY_NO_CONFLICT;
  2739. return Tooltip._jQueryInterface;
  2740. };
  2741. return Tooltip;
  2742. })(jQuery);
  2743. /**
  2744. * --------------------------------------------------------------------------
  2745. * Bootstrap (v4.0.0-alpha.3): popover.js
  2746. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
  2747. * --------------------------------------------------------------------------
  2748. */
  2749. var Popover = (function ($) {
  2750. /**
  2751. * ------------------------------------------------------------------------
  2752. * Constants
  2753. * ------------------------------------------------------------------------
  2754. */
  2755. var NAME = 'popover';
  2756. var VERSION = '4.0.0-alpha.3';
  2757. var DATA_KEY = 'bs.popover';
  2758. var EVENT_KEY = '.' + DATA_KEY;
  2759. var JQUERY_NO_CONFLICT = $.fn[NAME];
  2760. var Default = $.extend({}, Tooltip.Default, {
  2761. placement: 'right',
  2762. trigger: 'click',
  2763. content: '',
  2764. template: '<div class="popover" role="tooltip">' + '<div class="popover-arrow"></div>' + '<h3 class="popover-title"></h3>' + '<div class="popover-content"></div></div>'
  2765. });
  2766. var DefaultType = $.extend({}, Tooltip.DefaultType, {
  2767. content: '(string|element|function)'
  2768. });
  2769. var ClassName = {
  2770. FADE: 'fade',
  2771. IN: 'in'
  2772. };
  2773. var Selector = {
  2774. TITLE: '.popover-title',
  2775. CONTENT: '.popover-content',
  2776. ARROW: '.popover-arrow'
  2777. };
  2778. var Event = {
  2779. HIDE: 'hide' + EVENT_KEY,
  2780. HIDDEN: 'hidden' + EVENT_KEY,
  2781. SHOW: 'show' + EVENT_KEY,
  2782. SHOWN: 'shown' + EVENT_KEY,
  2783. INSERTED: 'inserted' + EVENT_KEY,
  2784. CLICK: 'click' + EVENT_KEY,
  2785. FOCUSIN: 'focusin' + EVENT_KEY,
  2786. FOCUSOUT: 'focusout' + EVENT_KEY,
  2787. MOUSEENTER: 'mouseenter' + EVENT_KEY,
  2788. MOUSELEAVE: 'mouseleave' + EVENT_KEY
  2789. };
  2790. /**
  2791. * ------------------------------------------------------------------------
  2792. * Class Definition
  2793. * ------------------------------------------------------------------------
  2794. */
  2795. var Popover = (function (_Tooltip) {
  2796. _inherits(Popover, _Tooltip);
  2797. function Popover() {
  2798. _classCallCheck(this, Popover);
  2799. _get(Object.getPrototypeOf(Popover.prototype), 'constructor', this).apply(this, arguments);
  2800. }
  2801. /**
  2802. * ------------------------------------------------------------------------
  2803. * jQuery
  2804. * ------------------------------------------------------------------------
  2805. */
  2806. _createClass(Popover, [{
  2807. key: 'isWithContent',
  2808. // overrides
  2809. value: function isWithContent() {
  2810. return this.getTitle() || this._getContent();
  2811. }
  2812. }, {
  2813. key: 'getTipElement',
  2814. value: function getTipElement() {
  2815. return this.tip = this.tip || $(this.config.template)[0];
  2816. }
  2817. }, {
  2818. key: 'setContent',
  2819. value: function setContent() {
  2820. var $tip = $(this.getTipElement());
  2821. // we use append for html objects to maintain js events
  2822. this.setElementContent($tip.find(Selector.TITLE), this.getTitle());
  2823. this.setElementContent($tip.find(Selector.CONTENT), this._getContent());
  2824. $tip.removeClass(ClassName.FADE).removeClass(ClassName.IN);
  2825. this.cleanupTether();
  2826. }
  2827. // private
  2828. }, {
  2829. key: '_getContent',
  2830. value: function _getContent() {
  2831. return this.element.getAttribute('data-content') || (typeof this.config.content === 'function' ? this.config.content.call(this.element) : this.config.content);
  2832. }
  2833. // static
  2834. }], [{
  2835. key: '_jQueryInterface',
  2836. value: function _jQueryInterface(config) {
  2837. return this.each(function () {
  2838. var data = $(this).data(DATA_KEY);
  2839. var _config = typeof config === 'object' ? config : null;
  2840. if (!data && /destroy|hide/.test(config)) {
  2841. return;
  2842. }
  2843. if (!data) {
  2844. data = new Popover(this, _config);
  2845. $(this).data(DATA_KEY, data);
  2846. }
  2847. if (typeof config === 'string') {
  2848. if (data[config] === undefined) {
  2849. throw new Error('No method named "' + config + '"');
  2850. }
  2851. data[config]();
  2852. }
  2853. });
  2854. }
  2855. }, {
  2856. key: 'VERSION',
  2857. // getters
  2858. get: function get() {
  2859. return VERSION;
  2860. }
  2861. }, {
  2862. key: 'Default',
  2863. get: function get() {
  2864. return Default;
  2865. }
  2866. }, {
  2867. key: 'NAME',
  2868. get: function get() {
  2869. return NAME;
  2870. }
  2871. }, {
  2872. key: 'DATA_KEY',
  2873. get: function get() {
  2874. return DATA_KEY;
  2875. }
  2876. }, {
  2877. key: 'Event',
  2878. get: function get() {
  2879. return Event;
  2880. }
  2881. }, {
  2882. key: 'EVENT_KEY',
  2883. get: function get() {
  2884. return EVENT_KEY;
  2885. }
  2886. }, {
  2887. key: 'DefaultType',
  2888. get: function get() {
  2889. return DefaultType;
  2890. }
  2891. }]);
  2892. return Popover;
  2893. })(Tooltip);
  2894. $.fn[NAME] = Popover._jQueryInterface;
  2895. $.fn[NAME].Constructor = Popover;
  2896. $.fn[NAME].noConflict = function () {
  2897. $.fn[NAME] = JQUERY_NO_CONFLICT;
  2898. return Popover._jQueryInterface;
  2899. };
  2900. return Popover;
  2901. })(jQuery);
  2902. }(jQuery);