mirror of
https://github.com/flarum/framework.git
synced 2024-12-13 15:13:42 +08:00
1 line
1.4 MiB
1 line
1.4 MiB
{"version":3,"sources":["webpack://@flarum/core/webpack/bootstrap","webpack://@flarum/core/./node_modules/@babel/runtime/helpers/esm/inheritsLoose.js","webpack://@flarum/core/./src/common/Model.js","webpack://@flarum/core/./src/common/Component.js","webpack://@flarum/core/./src/common/components/Button.js","webpack://@flarum/core/./src/common/utils/ItemList.js","webpack://@flarum/core/./src/common/helpers/icon.js","webpack://@flarum/core/./src/common/helpers/listItems.js","webpack://@flarum/core/./node_modules/@babel/runtime/helpers/esm/defineProperty.js","webpack://@flarum/core/./src/common/utils/extractText.js","webpack://@flarum/core/./src/common/utils/extract.js","webpack://@flarum/core/./src/common/models/Group.js","webpack://@flarum/core/./src/common/components/Modal.js","webpack://@flarum/core/./src/common/components/Dropdown.js","webpack://@flarum/core/./src/common/helpers/avatar.js","webpack://@flarum/core/./node_modules/spin.js/spin.js","webpack://@flarum/core/./src/common/components/LoadingIndicator.js","webpack://@flarum/core/./src/common/utils/computed.js","webpack://@flarum/core/./src/common/helpers/username.js","webpack://@flarum/core/./src/common/components/Alert.js","webpack://@flarum/core/./src/common/components/LinkButton.js","webpack://@flarum/core/./node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js","webpack://@flarum/core/./src/common/components/Separator.js","webpack://@flarum/core/./src/common/utils/humanTime.js","webpack://@flarum/core/./src/common/components/Badge.js","webpack://@flarum/core/./src/common/components/FieldSet.js","webpack://@flarum/core/./src/common/utils/classList.js","webpack://@flarum/core/(webpack)/buildin/global.js","webpack://@flarum/core/./src/common/utils/string.js","webpack://@flarum/core/./src/common/components/SelectDropdown.js","webpack://@flarum/core/./src/common/components/GroupBadge.js","webpack://@flarum/core/./src/common/helpers/highlight.js","webpack://@flarum/core/./src/common/utils/ScrollListener.js","webpack://@flarum/core/./src/common/extend.js","webpack://@flarum/core/./src/common/components/Switch.js","webpack://@flarum/core/./src/common/models/User.js","webpack://@flarum/core/./src/common/utils/SubtreeRetainer.js","webpack://@flarum/core/./src/common/models/Discussion.js","webpack://@flarum/core/./src/common/helpers/humanTime.js","webpack://@flarum/core/./src/common/components/Checkbox.js","webpack://@flarum/core/./src/common/utils/RequestError.js","webpack://@flarum/core/./src/common/components/Navigation.js","webpack://@flarum/core/./src/common/utils/patchMithril.js","webpack://@flarum/core/./src/common/components/ModalManager.js","webpack://@flarum/core/./src/common/components/AlertManager.js","webpack://@flarum/core/./src/common/components/RequestErrorModal.js","webpack://@flarum/core/./src/common/Translator.js","webpack://@flarum/core/./src/common/utils/stringToColor.js","webpack://@flarum/core/./src/common/Store.js","webpack://@flarum/core/./src/common/Session.js","webpack://@flarum/core/./src/common/utils/Drawer.js","webpack://@flarum/core/./src/common/utils/mapRoutes.js","webpack://@flarum/core/./src/common/models/Forum.js","webpack://@flarum/core/./src/common/models/Post.js","webpack://@flarum/core/./src/common/models/Notification.js","webpack://@flarum/core/./node_modules/lodash-es/_arrayPush.js","webpack://@flarum/core/./node_modules/lodash-es/_root.js","webpack://@flarum/core/./node_modules/lodash-es/_Symbol.js","webpack://@flarum/core/./node_modules/lodash-es/_getRawTag.js","webpack://@flarum/core/./node_modules/lodash-es/_objectToString.js","webpack://@flarum/core/./node_modules/lodash-es/_baseGetTag.js","webpack://@flarum/core/./node_modules/lodash-es/isObjectLike.js","webpack://@flarum/core/./node_modules/lodash-es/_baseIsArguments.js","webpack://@flarum/core/./node_modules/lodash-es/isArguments.js","webpack://@flarum/core/./node_modules/lodash-es/isArray.js","webpack://@flarum/core/./node_modules/lodash-es/_isFlattenable.js","webpack://@flarum/core/./node_modules/lodash-es/_baseFlatten.js","webpack://@flarum/core/./node_modules/lodash-es/flattenDeep.js","webpack://@flarum/core/./src/common/Application.js","webpack://@flarum/core/./src/common/utils/formatNumber.js","webpack://@flarum/core/./src/common/utils/anchorScroll.js","webpack://@flarum/core/./node_modules/@babel/runtime/helpers/esm/extends.js","webpack://@flarum/core/./src/common/utils/evented.js","webpack://@flarum/core/./src/common/components/SplitDropdown.js","webpack://@flarum/core/./src/common/helpers/userOnline.js","webpack://@flarum/core/./src/common/helpers/fullTime.js","webpack://@flarum/core/./src/common/utils/abbreviateNumber.js","webpack://@flarum/core/./src/common/components/Placeholder.js","webpack://@flarum/core/./src/common/components/Select.js","webpack://@flarum/core/(webpack)/buildin/module.js","webpack://@flarum/core/./src/common/utils/mixin.js","webpack://@flarum/core/./node_modules/mithril/mithril.js","webpack://@flarum/core/./src/common/extend/Model.js","webpack://@flarum/core/./src/common/extend/PostTypes.js","webpack://@flarum/core/./src/common/extend/Routes.js","webpack://@flarum/core/./src/common/index.js","webpack://@flarum/core/./node_modules/lodash-es/_freeGlobal.js","webpack://@flarum/core/./src/common/utils/liveHumanTimes.js","webpack://@flarum/core/./src/common/compat.js","webpack://@flarum/core/./src/common/helpers/punctuateSeries.js","webpack://@flarum/core/./node_modules/jquery/dist/jquery.js-exposed?28a1","webpack://@flarum/core/./node_modules/jquery/dist/jquery.js-exposed","webpack://@flarum/core/./node_modules/jquery/dist/jquery.js","webpack://@flarum/core/./node_modules/mithril/mithril.js-exposed","webpack://@flarum/core/./node_modules/moment/moment.js-exposed","webpack://@flarum/core/./node_modules/moment/moment.js","webpack://@flarum/core/./node_modules/m.attrs.bidi/bidi.js-exposed","webpack://@flarum/core/./node_modules/m.attrs.bidi/bidi.js","webpack://@flarum/core/./node_modules/bootstrap/js/affix.js","webpack://@flarum/core/./node_modules/bootstrap/js/dropdown.js","webpack://@flarum/core/./node_modules/bootstrap/js/modal.js","webpack://@flarum/core/./node_modules/bootstrap/js/tooltip.js","webpack://@flarum/core/./node_modules/bootstrap/js/transition.js","webpack://@flarum/core/./node_modules/jquery.hotkeys/jquery.hotkeys.js","webpack://@flarum/core/./node_modules/node-libs-browser/node_modules/punycode/punycode.js-exposed","webpack://@flarum/core/./node_modules/node-libs-browser/node_modules/punycode/punycode.js","webpack://@flarum/core/./node_modules/color-thief-browser/dist/color-thief.min.js-exposed","webpack://@flarum/core/./node_modules/color-thief-browser/dist/color-thief.min.js","webpack://@flarum/core/./src/forum/utils/History.js","webpack://@flarum/core/./src/forum/utils/Pane.js","webpack://@flarum/core/./src/forum/utils/KeyboardNavigatable.js","webpack://@flarum/core/./src/forum/components/DiscussionsSearchSource.js","webpack://@flarum/core/./src/forum/components/UsersSearchSource.js","webpack://@flarum/core/./src/forum/components/Search.js","webpack://@flarum/core/./src/forum/components/TextEditor.js","webpack://@flarum/core/./src/forum/components/ComposerBody.js","webpack://@flarum/core/./src/forum/components/ReplyComposer.js","webpack://@flarum/core/./src/forum/components/Page.js","webpack://@flarum/core/./src/forum/components/DiscussionHero.js","webpack://@flarum/core/./src/forum/components/LoadingPost.js","webpack://@flarum/core/./src/forum/components/ForgotPasswordModal.js","webpack://@flarum/core/./src/forum/components/LogInButtons.js","webpack://@flarum/core/./src/forum/components/SignUpModal.js","webpack://@flarum/core/./src/forum/components/LogInModal.js","webpack://@flarum/core/./src/forum/components/RenameDiscussionModal.js","webpack://@flarum/core/./src/forum/utils/DiscussionControls.js","webpack://@flarum/core/./src/forum/components/ReplyPlaceholder.js","webpack://@flarum/core/./src/forum/components/PostStream.js","webpack://@flarum/core/./src/forum/components/PostStreamScrubber.js","webpack://@flarum/core/./src/forum/components/DiscussionPage.js","webpack://@flarum/core/./src/forum/components/HeaderPrimary.js","webpack://@flarum/core/./src/forum/components/SessionDropdown.js","webpack://@flarum/core/./src/forum/components/NotificationList.js","webpack://@flarum/core/./src/forum/components/NotificationsDropdown.js","webpack://@flarum/core/./src/forum/components/HeaderSecondary.js","webpack://@flarum/core/./src/forum/components/ComposerButton.js","webpack://@flarum/core/./src/forum/components/Composer.js","webpack://@flarum/core/./src/forum/components/Notification.js","webpack://@flarum/core/./src/forum/components/DiscussionRenamedNotification.js","webpack://@flarum/core/./src/forum/components/EditPostComposer.js","webpack://@flarum/core/./src/forum/utils/PostControls.js","webpack://@flarum/core/./src/forum/components/Post.js","webpack://@flarum/core/./src/forum/components/EditUserModal.js","webpack://@flarum/core/./src/forum/utils/affixSidebar.js","webpack://@flarum/core/./src/forum/components/UserPage.js","webpack://@flarum/core/./src/forum/utils/UserControls.js","webpack://@flarum/core/./src/forum/components/AvatarEditor.js","webpack://@flarum/core/./src/forum/components/UserCard.js","webpack://@flarum/core/./src/forum/components/PostUser.js","webpack://@flarum/core/./src/forum/components/PostMeta.js","webpack://@flarum/core/./src/forum/components/PostEdited.js","webpack://@flarum/core/./src/forum/components/CommentPost.js","webpack://@flarum/core/./src/forum/components/EventPost.js","webpack://@flarum/core/./src/forum/components/DiscussionRenamedPost.js","webpack://@flarum/core/./src/forum/components/TerminalPost.js","webpack://@flarum/core/./src/forum/components/PostPreview.js","webpack://@flarum/core/./src/forum/utils/slidable.js","webpack://@flarum/core/./src/forum/components/DiscussionListItem.js","webpack://@flarum/core/./src/forum/components/DiscussionList.js","webpack://@flarum/core/./src/forum/components/WelcomeHero.js","webpack://@flarum/core/./src/forum/components/DiscussionComposer.js","webpack://@flarum/core/./src/forum/components/IndexPage.js","webpack://@flarum/core/./src/forum/components/PostsUserPage.js","webpack://@flarum/core/./src/forum/components/DiscussionsUserPage.js","webpack://@flarum/core/./src/forum/components/NotificationGrid.js","webpack://@flarum/core/./src/forum/components/ChangePasswordModal.js","webpack://@flarum/core/./src/forum/components/ChangeEmailModal.js","webpack://@flarum/core/./src/forum/components/SettingsPage.js","webpack://@flarum/core/./src/forum/components/NotificationsPage.js","webpack://@flarum/core/./src/forum/routes.js","webpack://@flarum/core/./src/forum/utils/alertEmailConfirmation.js","webpack://@flarum/core/./src/forum/ForumApplication.js","webpack://@flarum/core/./src/forum/components/LogInButton.js","webpack://@flarum/core/./src/forum/components/SearchSource.js","webpack://@flarum/core/./src/forum/compat.js","webpack://@flarum/core/./src/forum/index.js","webpack://@flarum/core/./forum.js"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","_inheritsLoose","subClass","superClass","constructor","__proto__","__webpack_exports__","Model","data","store","this","freshness","Date","exists","id","attribute","attributes","pushData","innerKey","getIdentifier","pushAttributes","save","options","_this","type","relationships","model","Array","map","oldData","copyData","request","meta","app","assign","method","url","forum","apiEndpoint","then","payload","pushPayload","response","lazyRedraw","delete","_this2","remove","deferred","resolve","promise","JSON","parse","stringify","transform","hasOne","relationship","getById","hasMany","transformDate","Component","props","children","initProps","element","retain","init","onunload","render","vdom","subtree","view","attrs","originalConfig","config","_len","arguments","length","args","_key","apply","slice","$","selector","$element","find","Error","component","componentProps","$original","output","controller","undefined","Button","className","title","_utils_extractText__WEBPACK_IMPORTED_MODULE_4__","_utils_extract__WEBPACK_IMPORTED_MODULE_3__","loading","disabled","onclick","getButtonContent","iconName","icon","_helpers_icon__WEBPACK_IMPORTED_MODULE_2__","_LoadingIndicator__WEBPACK_IMPORTED_MODULE_5__","size","_Component__WEBPACK_IMPORTED_MODULE_1__","Item","content","priority","ItemList","items","isEmpty","has","add","replace","merge","toArray","itemName","push","sort","a","b","item","fontClass","isSeparator","_components_Separator__WEBPACK_IMPORTED_MODULE_0__","listItems","prevItem","newItems","forEach","withoutUnnecessarySeparators","isListItem","active","isActive","itemClassName","_utils_classList__WEBPACK_IMPORTED_MODULE_1__","_defineProperty","obj","configurable","writable","extractText","join","extract","Group","_Model__WEBPACK_IMPORTED_MODULE_1__","nameSingular","namePlural","color","ADMINISTRATOR_ID","GUEST_ID","MEMBER_ID","Modal","alert","dismissible","isDismissible","_Button__WEBPACK_IMPORTED_MODULE_3__","hide","onsubmit","onready","first","focus","select","onhide","modal","close","loaded","redraw","onerror","error","status","errors","source","pointer","Dropdown","_Component","buttonClassName","menuClassName","label","caretIcon","showing","_helpers_listItems__WEBPACK_IMPORTED_MODULE_3__","getButton","getMenu","isInitialized","on","onshow","$menu","isRight","hasClass","removeClass","toggleClass","offset","top","height","window","scrollTop","left","width","scrollLeft","data-toggle","avatar","user","hasTitle","username","displayName","avatarUrl","_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__","src","charAt","toUpperCase","style","background","__assign","defaults","lines","radius","scale","corners","fadeColor","opacity","rotate","direction","speed","trail","fps","zIndex","shadow","position","Spinner","opts","spin","target","animator","getNow","lastFrameTime","stop","el","document","createElement","setAttribute","css","insertBefore","firstChild","requestAnimationFrame","performance","now","callback","setTimeout","state","animate","time","msSinceLastFrame","roundsPerSecond","getAdvancePercentage","Math","floor","childNodes","line","getLineOpacity","toString","animateId","borderRadius","round","shadows","boxShadow","regex","_i","_a","split","matches","match","x","y","xUnits","yUnits","prefix","end","parseBoxShadow","degrees","backgroundLine","getColor","transformOrigin","normalizeShadow","appendChild","drawLines","cancelAnimationFrame","clearTimeout","parentNode","removeChild","diff","opacityPercent","vendor","prop","prefixed","idx","normalized","shadows_1","xy","convertOffset","radians","PI","sin","cos","LoadingIndicator_LoadingIndicator","trust","computed","dependentKeys","computedValue","keys","compute","dependentValues","recompute","translator","trans","Alert","_utils_extract__WEBPACK_IMPORTED_MODULE_4__","controls","ondismiss","dismissControl","_Button__WEBPACK_IMPORTED_MODULE_2__","concat","LinkButton","route","_Button","tag","href","_assertThisInitialized","self","ReferenceError","Separator","humanTime","moment","isAfter","year","format","fromNow","Badge","tooltip","container","FieldSet","_helpers_listItems__WEBPACK_IMPORTED_MODULE_2__","classList","classes","classNames","filter","g","Function","eval","e","truncate","string","start","substring","slug","toLowerCase","getPlainContent","html","dom","removeSelectors","text","trim","ucfirst","substr","SelectDropdown","_Dropdown","activeChild","child","defaultLabel","_Dropdown__WEBPACK_IMPORTED_MODULE_1__","GroupBadge","_Badge","group","backgroundColor","highlight","phrase","regexp","RegExp","highlighted","max","search","_utils_string__WEBPACK_IMPORTED_MODULE_0__","ScrollListener","scroll","webkitRequestAnimationFrame","mozRequestAnimationFrame","msRequestAnimationFrame","oRequestAnimationFrame","lastTop","loop","update","force","pageYOffset","extend","original","override","newMethod","_len2","_key2","Switch","_Checkbox","getDisplay","User","email","isEmailConfirmed","password","preferences","groups","joinTime","lastSeenAt","markedAllAsReadAt","unreadNotificationCount","newNotificationCount","discussionCount","commentCount","canEdit","canDelete","avatarColor","_utils_computed__WEBPACK_IMPORTED_MODULE_4__","calculateAvatarColor","_utils_stringToColor__WEBPACK_IMPORTED_MODULE_2__","isOnline","subtract","toDate","badges","_utils_ItemList__WEBPACK_IMPORTED_MODULE_3__","_components_GroupBadge__WEBPACK_IMPORTED_MODULE_5__","image","Image","onload","colorThief","ColorThief","savePreferences","newPreferences","SubtreeRetainer","callbacks","needsRebuild","result","check","invalidate","Discussion","createdAt","firstPost","lastPostedAt","lastPostedUser","lastPost","lastPostNumber","replyCount","_utils_computed__WEBPACK_IMPORTED_MODULE_2__","posts","mostRelevantPost","lastReadAt","lastReadPostNumber","isUnread","unreadCount","isRead","session","hiddenAt","hiddenUser","isHidden","canReply","canRename","canHide","removePost","some","splice","_components_Badge__WEBPACK_IMPORTED_MODULE_4__","postIds","link","mo","datetime","full","ago","_utils_humanTime__WEBPACK_IMPORTED_MODULE_0__","pubdate","data-humantime","Checkbox","checked","onchange","withAttr","_LoadingIndicator__WEBPACK_IMPORTED_MODULE_2__","_helpers_icon__WEBPACK_IMPORTED_MODULE_3__","RequestError","responseText","xhr","Navigation","_app","history","pane","onmouseenter","show","onmouseleave","canGoBack","getBackButton","getPaneButton","getDrawerButton","context","previous","getPrevious","_LinkButton__WEBPACK_IMPORTED_MODULE_3__","backUrl","shiftKey","ctrlKey","metaKey","which","preventDefault","back","pinned","togglePinned","drawer","stopPropagation","patchMithril","global","comp","_Component__WEBPACK_IMPORTED_MODULE_0__","isArray","node","bidi","startComputation","endComputation","ModalManager","clear","_Modal__WEBPACK_IMPORTED_MODULE_2__","hideTimeout","current","backdrop","AlertManager","components","_Alert__WEBPACK_IMPORTED_MODULE_2__","dismiss","index","indexOf","RequestErrorModal","statusText","Translator","translations","locale","addTranslations","parameters","translation","transChoice","number","parseInt","pluralize","input","_utils_extract__WEBPACK_IMPORTED_MODULE_2__","_helpers_username__WEBPACK_IMPORTED_MODULE_1__","hydrated","open","part","shift","unshift","sPluralRegex","cPluralRegex","iPluralRegex","standardRules","explicitRules","test","rule","leftNumber","convertNumber","rightNumber","pluralPosition","Number","NEGATIVE_INFINITY","POSITIVE_INFINITY","stringToColor","num","charCodeAt","rgb","h","v","f","q","hsvToRgb","Store","models","included","pushObject","createRecord","query","getBy","all","records","Session","csrfToken","login","logout","location","Drawer","click","isOpen","$backdrop","addClass","appendTo","mapRoutes","routes","basePath","routeName","path","Forum","Post","discussion","contentType","contentHtml","contentPlain","_utils_string__WEBPACK_IMPORTED_MODULE_3__","editedAt","editedUser","isEdited","Notification","fromUser","subject","_arrayPush","array","values","freeSelf","_Symbol","_freeGlobal","objectProto","_getRawTag_hasOwnProperty","nativeObjectToString","symToStringTag","_getRawTag","isOwn","unmasked","_objectToString_nativeObjectToString","_objectToString","nullTag","undefinedTag","_baseGetTag_symToStringTag","_baseGetTag","lodash_es_isObjectLike","argsTag","_baseIsArguments","isArguments_objectProto","isArguments_hasOwnProperty","propertyIsEnumerable","lodash_es_isArguments","lodash_es_isArray","spreadableSymbol","isConcatSpreadable","_isFlattenable","_baseFlatten","baseFlatten","depth","predicate","isStrict","INFINITY","lodash_es_flattenDeep","Application_Application","forums","users","discussions","notifications","load","boot","initializers","initializer","resources","userId","mount","bootExtensions","extensions","extension","_iterator","_isArray","iterator","_ref","next","done","getElementById","alerts","$app","preloadedDocument","results","setTitle","updateTitle","setTitleCount","count","titleCount","originalOptions","_this3","setRequestHeader","deserialize","errorHandler","getResponseHeader","requestError","detail","reduce","showDebug","reject","requestErrorAlert","params","queryString","buildQueryString","formatNumber","anchorScroll","$window","relativeScroll","_extends","handlers","getHandlers","event","trigger","handler","one","wrapper","off","SplitDropdown","getFirstChild","buttonProps","userOnline","_icon__WEBPACK_IMPORTED_MODULE_0__","fullTime","abbreviateNumber","Placeholder","Select","_this$props","webpackPolyfill","deprecate","paths","mixin","Parent","Mixed","_Parent","_babel_runtime_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__","mixins","__WEBPACK_AMD_DEFINE_RESULT__","factory","version","hasOwn","isFunction","isObject","isString","noop","$document","$location","$requestAnimationFrame","$cancelAnimationFrame","voidElements","AREA","BASE","BR","COL","COMMAND","EMBED","HR","IMG","INPUT","KEYGEN","LINK","META","PARAM","SOURCE","TRACK","WBR","pairs","parameterize","hasAttrs","cell","getVirtualChildren","classAttr","attrName","assignAttrs","parser","exec","attrValue","parseTagAttrs","list","forKeys","insertNode","parentElement","deps","mock","initialize","DELETION","INSERTION","MOVE","diffKeys","cached","existing","keysDiffer","cachedCell","action","from","nodes","actions","changes","sortChanges","newCached","change","dummy","changeElement","maybeChanged","handleKeysDiffer","maybeRecreateObject","dataAttrKeys","strategy","configContext","isDifferentEnough","controllers","pendingRequests","reattachNodes","editable","parentTag","activeElement","$trusted","injectHTML","innerHTML","nodeType","nodeValue","createTextNode","injectTextNode","handleTextNode","shouldReattach","valueOf","intact","nodeName","handleNonexistentNodes","getSubArrayCount","buildArray","namespace","configs","flatten","subArrayCount","shouldMaintainIdentities","guid","buildArrayKeys","cacheCount","len","build","_","diffArray","reconstructCached","views","$old","unloadCachedControllers","unloaders","forcing","checkView","cachedControllers","controllerIndex","getController","u","updateLists","buildObject","markViews","hasKeys","isNew","xmlns","getObjectNamespace","is","createElementNS","constructNode","setAttributes","constructAttrs","contenteditable","constructChildren","buildUpdatedNode","scheduleConfigsToBeCalled","parentCache","parentIndex","dataToString","makeCache","shouldUseSetAttribute","form","setSingleAttr","dataAttr","cachedAttr","endFirstComputation","autoredraw","copyStyleAttrs","setAttributeNS","isContentEditable","trySetAttr","cachedAttrs","message","dataAttrs","unload","appendTextFragment","createRange","createContextualFragment","insertAdjacentHTML","replaceScriptNodes","tagName","replaceChild","scriptEl","buildExecutableNode","nextSibling","isElement","placeholder","documentNode","documentElement","nodeCache","cellCache","getCellCacheKey","root","forceRecreation","isDocumentRoot","reset","String","Promise","propify","toJSON","gettersetter","topComponent","currentRoute","previousRoute","roots","lastRedrawId","lastRedrawCallTime","computePreRedrawHook","computePostRedrawHook","ctrl","currentArgs","removeRootElement","isPrevented","unloader","currentComponent","checkPrevented","redrawing","withAttrCallback","callbackThis","currentTarget","getAttribute","routeParams","modes","pathname","hash","redirect","isDefaultRoute","normalizeRoute","routeUnobtrusive","returnValue","srcElement","parseQueryString","setScroll","scrollTo","duplicates","str","encodeURIComponent","pair","decodeURIComponent","cacheKey","initialValue","arg1","arg2","router","queryStart","matcher","routeByValue","listener","addEventListener","attachEvent","base","removeEventListener","detachEvent","queryIndex","currentPath","querystring","replaceHistory","pushState","err","param","Deferred","RESOLVING","REJECTING","RESOLVED","REJECTED","onSuccess","onFailure","promiseValue","finish","thennable","success","failure","notThennable","fire","TypeError","identity","sync","outstanding","synchronizer","pos","resolved","arg","serialize","dataType","jsonp","token","parameterizeUrl","bindData","ev","unwrapSuccess","res","unwrapError","callbackKey","callbackName","getTime","random","script","resp","body","handleJsonp","XMLHttpRequest","onreadystatechange","readyState","headers","header","maybeXhr","FormData","send","createXhr","ajax","Model_Routes","Routes","hasOnes","hasManys","PostTypes_PostTypes","postComponents","Routes_Routes","freeGlobal","updateHumanTimes","each","$this","attr","utils/evented","evented","utils/liveHumanTimes","setInterval","utils/ItemList","utils/mixin","utils/humanTime","utils/computed","utils/Drawer","utils/anchorScroll","utils/RequestError","utils/abbreviateNumber","utils/string","utils/SubtreeRetainer","utils/extract","utils/ScrollListener","utils/stringToColor","utils/patchMithril","utils/classList","utils/extractText","utils/formatNumber","utils/mapRoutes","models/Notification","models/User","models/Post","models/Discussion","models/Group","models/Forum","components/AlertManager","components/Switch","components/Badge","components/LoadingIndicator","LoadingIndicator","components/Placeholder","components/Separator","components/Dropdown","components/SplitDropdown","components/RequestErrorModal","components/FieldSet","components/Select","components/Navigation","components/Alert","components/LinkButton","components/Checkbox","components/SelectDropdown","components/ModalManager","components/Button","components/Modal","components/GroupBadge","Application","helpers/fullTime","helpers/avatar","helpers/icon","helpers/humanTime","helpers_humanTime","helpers/punctuateSeries","second","third","helpers/highlight","helpers/username","helpers/userOnline","helpers/listItems","w","noGlobal","arr","getProto","getPrototypeOf","class2type","fnToString","ObjectFunctionString","support","isWindow","preservedScriptAttributes","noModule","DOMEval","code","doc","head","toType","jQuery","fn","rtrim","isArrayLike","jquery","pushStack","elems","ret","prevObject","elem","eq","last","j","copy","copyIsArray","clone","deep","isPlainObject","expando","isReady","msg","proto","Ctor","isEmptyObject","globalEval","makeArray","inArray","grep","invert","callbackExpect","Sizzle","Expr","getText","isXML","tokenize","compile","outermostContext","sortInput","hasDuplicate","setDocument","docElem","documentIsHTML","rbuggyQSA","rbuggyMatches","contains","preferredDoc","dirruns","classCache","createCache","tokenCache","compilerCache","sortOrder","pop","push_native","booleans","whitespace","identifier","pseudos","rwhitespace","rcomma","rcombinators","rattributeQuotes","rpseudo","ridentifier","matchExpr","ID","CLASS","TAG","ATTR","PSEUDO","CHILD","bool","needsContext","rinputs","rheader","rnative","rquickExpr","rsibling","runescape","funescape","escaped","escapedWhitespace","high","fromCharCode","rcssescape","fcssescape","ch","asCodePoint","unloadHandler","disabledAncestor","addCombinator","dir","els","seed","nid","newSelector","newContext","ownerDocument","getElementsByTagName","getElementsByClassName","qsa","toSelector","testContext","querySelectorAll","qsaError","removeAttribute","cache","cacheLength","markFunction","assert","addHandle","attrHandle","siblingCheck","cur","sourceIndex","createInputPseudo","createButtonPseudo","createDisabledPseudo","isDisabled","createPositionalPseudo","argument","matchIndexes","hasCompare","subWindow","defaultView","createComment","getElementsByName","attrId","getAttributeNode","tmp","matchesSelector","webkitMatchesSelector","mozMatchesSelector","oMatchesSelector","msMatchesSelector","disconnectedMatch","compareDocumentPosition","adown","bup","compare","sortDetached","aup","ap","bp","expr","elements","val","specified","escape","sel","uniqueSort","detectDuplicates","sortStable","textContent","selectors","createPseudo","relative",">"," ","+","~","preFilter","excess","unquoted","nodeNameSelector","pattern","operator","what","simple","forward","ofType","xml","uniqueCache","outerCache","nodeIndex","parent","useCache","lastChild","uniqueID","pseudo","setFilters","matched","not","unmatched","innerText","lang","elemLang","hasFocus","tabIndex","enabled","selected","selectedIndex","empty","button","even","odd","lt","gt","radio","checkbox","file","submit","tokens","combinator","skip","checkNonElements","doneName","oldCache","newCache","elementMatcher","matchers","condense","newUnmatched","mapped","setMatcher","postFilter","postFinder","postSelector","temp","preMap","postMap","preexisting","contexts","multipleContexts","matcherIn","matcherOut","matcherFromTokens","checkContext","leadingRelative","implicitRelative","matchContext","matchAnyContext","filters","parseOnly","soFar","preFilters","setMatchers","elementMatchers","bySet","byElement","superMatcher","outermost","matchedCount","setMatched","contextBackup","dirrunsUnique","matcherFromGroupMatchers","compiled","defaultValue","unique","isXMLDoc","escapeSelector","until","siblings","rneedsContext","rsingleTag","winnow","qualifier","rootjQuery","parseHTML","ready","rparentsprev","guaranteedUnique","contents","prev","sibling","targets","closest","prevAll","addBack","parents","parentsUntil","nextAll","nextUntil","prevUntil","contentDocument","reverse","rnothtmlwhite","Identity","Thrower","ex","adoptValue","noValue","fail","Callbacks","flag","createOptions","firing","memory","fired","locked","queue","firingIndex","once","stopOnFalse","disable","lock","fireWith","func","tuples","always","catch","pipe","fns","newDefer","tuple","returned","progress","notify","onFulfilled","onRejected","onProgress","maxDepth","special","that","mightThrow","notifyWith","resolveWith","process","exceptionHook","stackTrace","rejectWith","getStackHook","stateString","when","singleValue","remaining","resolveContexts","resolveValues","master","updateFunc","rerrorNames","stack","console","warn","readyException","readyList","completed","readyWait","wait","doScroll","access","chainable","emptyGet","raw","bulk","rmsPrefix","rdashAlpha","fcamelCase","letter","camelCase","acceptData","owner","Data","uid","set","hasData","dataPriv","dataUser","rbrace","rmultiDash","getData","removeData","_data","_removeData","dequeue","startLength","hooks","_queueHooks","setter","clearQueue","defer","pnum","rcssNum","cssExpand","isHiddenWithinTree","display","swap","old","adjustCSS","valueParts","tween","adjusted","maxIterations","currentValue","initial","unit","cssNumber","initialInUnit","defaultDisplayMap","getDefaultDisplay","showHide","toggle","rcheckableType","rtagName","rscriptType","wrapMap","option","thead","col","tr","td","_default","getAll","setGlobalEval","refElements","optgroup","tbody","tfoot","colgroup","caption","th","rhtml","buildFragment","scripts","selection","ignored","wrap","fragment","createDocumentFragment","htmlPrefilter","div","checkClone","cloneNode","noCloneChecked","rkeyEvent","rmouseEvent","rtypenamespace","returnTrue","returnFalse","safeActiveElement","types","origFn","handleObjIn","eventHandle","events","handleObj","namespaces","origType","elemData","handle","triggered","dispatch","delegateType","bindType","delegateCount","setup","mappedTypes","origCount","teardown","removeEvent","nativeEvent","handlerQueue","fix","delegateTarget","preDispatch","isPropagationStopped","isImmediatePropagationStopped","rnamespace","postDispatch","matchedHandlers","matchedSelectors","addProp","hook","Event","originalEvent","noBubble","blur","beforeunload","isDefaultPrevented","defaultPrevented","relatedTarget","timeStamp","isSimulated","stopImmediatePropagation","altKey","bubbles","cancelable","changedTouches","eventPhase","pageX","pageY","char","charCode","keyCode","buttons","clientX","clientY","offsetX","offsetY","pointerId","pointerType","screenX","screenY","targetTouches","toElement","touches","mouseenter","mouseleave","pointerenter","pointerleave","orig","related","rxhtmlTag","rnoInnerhtml","rchecked","rcleanScript","manipulationTarget","disableScript","restoreScript","cloneCopyEvent","dest","pdataOld","pdataCur","udataOld","udataCur","fixInput","domManip","collection","hasScripts","iNoClone","valueIsFunction","_evalUrl","keepData","cleanData","dataAndEvents","deepDataAndEvents","srcElements","destElements","inPage","detach","append","prepend","before","after","replaceWith","prependTo","insertAfter","replaceAll","insert","rnumnonpx","getStyles","opener","getComputedStyle","rboxStyle","curCSS","minWidth","maxWidth","getPropertyValue","pixelBoxStyles","addGetHookIf","conditionFn","hookFn","computeStyleTests","cssText","divStyle","pixelPositionVal","reliableMarginLeftVal","roundPixelMeasures","marginLeft","right","pixelBoxStylesVal","boxSizingReliableVal","scrollboxSizeVal","offsetWidth","measure","parseFloat","backgroundClip","clearCloneStyle","boxSizingReliable","pixelPosition","reliableMarginLeft","scrollboxSize","rdisplayswap","rcustomProp","cssShow","visibility","cssNormalTransform","letterSpacing","fontWeight","cssPrefixes","emptyStyle","finalPropName","cssProps","capName","vendorPropName","setPositiveNumber","boxModelAdjustment","dimension","box","isBorderBox","styles","computedVal","extra","delta","ceil","getWidthOrHeight","valueIsBorderBox","Tween","easing","cssHooks","animationIterationCount","columnCount","fillOpacity","flexGrow","flexShrink","lineHeight","order","orphans","widows","zoom","origName","isCustomProp","setProperty","isFinite","getClientRects","getBoundingClientRect","margin","padding","border","suffix","expand","expanded","parts","propHooks","run","percent","eased","duration","step","fx","linear","swing","fxNow","inProgress","rfxtypes","rrun","schedule","hidden","interval","tick","createFxNow","genFx","includeWidth","createTween","animation","Animation","tweeners","properties","stopped","prefilters","currentTime","startTime","tweens","specialEasing","originalProperties","gotoEnd","propFilter","complete","timer","anim","*","tweener","oldfire","propTween","restoreDisplay","isBox","dataShow","unqueued","overflow","overflowX","overflowY","prefilter","opt","speeds","fadeTo","to","optall","doAnimation","stopQueue","timers","cssFn","slideDown","slideUp","slideToggle","fadeIn","fadeOut","fadeToggle","slow","fast","delay","timeout","checkOn","optSelected","radioValue","boolHook","removeAttr","nType","attrHooks","attrNames","lowercaseName","rfocusable","rclickable","stripAndCollapse","getClass","classesToArray","removeProp","propFix","tabindex","for","class","curValue","clazz","finalValue","stateVal","isValidValue","rreturn","valHooks","optionSet","focusin","rfocusMorph","stopPropagationCallback","onlyHandlers","bubbleType","ontype","lastElement","eventPath","isTrigger","parentWindow","simulate","triggerHandler","attaches","nonce","rquery","parseXML","DOMParser","parseFromString","rbracket","rCRLF","rsubmitterTypes","rsubmittable","buildParams","traditional","valueOrFunction","serializeArray","r20","rhash","rantiCache","rheaders","rnoContent","rprotocol","transports","allTypes","originAnchor","addToPrefiltersOrTransports","structure","dataTypeExpression","dataTypes","inspectPrefiltersOrTransports","jqXHR","inspected","seekingTransport","inspect","prefilterOrFactory","dataTypeOrTransport","ajaxExtend","flatOptions","ajaxSettings","lastModified","etag","isLocal","protocol","processData","async","accepts","json","responseFields","converters","* text","text html","text json","text xml","ajaxSetup","settings","ajaxPrefilter","ajaxTransport","transport","cacheURL","responseHeadersString","responseHeaders","timeoutTimer","urlAnchor","fireGlobals","uncached","callbackContext","globalEventContext","completeDeferred","statusCode","requestHeaders","requestHeadersNames","strAbort","getAllResponseHeaders","overrideMimeType","mimeType","abort","finalText","crossDomain","host","hasContent","ifModified","beforeSend","nativeStatusText","responses","isSuccess","modified","ct","finalDataType","firstDataType","ajaxHandleResponses","conv2","conv","dataFilter","throws","ajaxConvert","getJSON","getScript","wrapAll","firstElementChild","wrapInner","htmlIsFunction","unwrap","visible","offsetHeight","xhrSuccessStatus","0","1223","xhrSupported","cors","errorCallback","xhrFields","onabort","ontimeout","responseType","binary","text script","charset","scriptCharset","evt","oldCallbacks","rjsonp","jsonpCallback","originalSettings","overwritten","responseContainer","jsonProp","createHTMLDocument","implementation","keepScripts","parsed","animated","setOffset","curPosition","curLeft","curCSSTop","curTop","curOffset","curCSSLeft","curElem","using","rect","win","pageXOffset","offsetParent","parentOffset","Height","Width","","defaultExtra","funcName","hover","fnOver","fnOut","unbind","delegate","undelegate","proxy","holdReady","hold","parseJSON","isNumeric","isNaN","_jQuery","_$","noConflict","hookCallback","isUndefined","isNumber","isDate","hasOwnProp","createUTC","strict","createLocalOrUTC","utc","getParsingFlags","_pf","unusedTokens","unusedInput","charsLeftOver","nullInput","invalidMonth","invalidFormat","userInvalidated","iso","parsedDateParts","meridiem","rfc2822","weekdayMismatch","isValid","_isValid","flags","parsedParts","isNowValid","_d","invalidWeekday","_strict","bigHour","isFrozen","createInvalid","NaN","fun","momentProperties","copyConfig","_isAMomentObject","_f","_l","_tzm","_isUTC","_offset","_locale","updateInProgress","Moment","updateOffset","isMoment","absFloor","toInt","argumentForCoercion","coercedNumber","compareArrays","array1","array2","dontConvert","min","lengthDiff","abs","diffs","suppressDeprecationWarnings","firstTime","deprecationHandler","deprecations","deprecateSimple","mergeConfigs","parentConfig","childConfig","Locale","aliases","addUnitAlias","shorthand","lowerCase","normalizeUnits","units","normalizeObjectUnits","inputObject","normalizedProp","normalizedInput","priorities","addUnitPriority","zeroFill","targetLength","forceSign","absNumber","zerosToFill","sign","pow","formattingTokens","localFormattingTokens","formatFunctions","formatTokenFunctions","addFormatToken","padded","ordinal","localeData","removeFormattingTokens","formatMoment","expandFormat","mom","makeFormatFunction","invalidDate","replaceLongDateFormatTokens","longDateFormat","lastIndex","match1","match2","match3","match4","match6","match1to2","match3to4","match5to6","match1to3","match1to4","match1to6","matchUnsigned","matchSigned","matchOffset","matchShortOffset","matchWord","regexes","addRegexToken","strictRegex","getParseRegexForToken","regexEscape","p1","p2","p3","p4","unescapeFormat","addParseToken","addWeekParseToken","_w","addTimeToArrayFromToken","YEAR","MONTH","DATE","HOUR","MINUTE","SECOND","MILLISECOND","WEEK","WEEKDAY","daysInYear","isLeapYear","parseTwoDigitYear","getSetYear","makeGetSet","keepTime","set$1","month","date","daysInMonth","modMonth","mod","monthsShort","months","monthsShortRegex","monthsRegex","monthsParse","MONTHS_IN_FORMAT","defaultLocaleMonths","defaultLocaleMonthsShort","setMonth","dayOfMonth","getSetMonth","defaultMonthsShortRegex","defaultMonthsRegex","computeMonthsParse","cmpLenRev","shortPieces","longPieces","mixedPieces","_monthsRegex","_monthsShortRegex","_monthsStrictRegex","_monthsShortStrictRegex","createUTCDate","UTC","getUTCFullYear","setUTCFullYear","firstWeekOffset","dow","doy","fwd","fwdlw","getUTCDay","dayOfYearFromWeeks","week","weekday","resYear","resDayOfYear","localWeekday","weekOffset","dayOfYear","weekOfYear","resWeek","weeksInYear","weekOffsetNext","weekdaysMin","weekdaysShort","weekdays","weekdaysMinRegex","weekdaysShortRegex","weekdaysRegex","weekdaysParse","defaultLocaleWeekdays","defaultLocaleWeekdaysShort","defaultLocaleWeekdaysMin","defaultWeekdaysRegex","defaultWeekdaysShortRegex","defaultWeekdaysMinRegex","computeWeekdaysParse","minp","shortp","longp","minPieces","day","_weekdaysRegex","_weekdaysShortRegex","_weekdaysMinRegex","_weekdaysStrictRegex","_weekdaysShortStrictRegex","_weekdaysMinStrictRegex","hFormat","hours","lowercase","minutes","matchMeridiem","_meridiemParse","seconds","kInput","_isPm","isPM","_meridiem","pos1","pos2","globalLocale","getSetHour","baseConfig","calendar","sameDay","nextDay","nextWeek","lastDay","lastWeek","sameElse","LTS","LT","L","LL","LLL","LLLL","dayOfMonthOrdinalParse","relativeTime","future","past","ss","mm","hh","dd","M","MM","yy","meridiemParse","locales","localeFamilies","normalizeLocale","loadLocale","oldLocale","_abbr","getSetGlobalLocale","getLocale","defineLocale","abbr","_config","parentLocale","names","chooseLocale","checkOverflow","_overflowDayOfYear","_overflowWeeks","_overflowWeekday","configFromArray","currentDate","expectedWeekday","yearToUse","nowValue","_useUTC","getUTCMonth","getUTCDate","getFullYear","getMonth","getDate","currentDateArray","weekYear","weekdayOverflow","GG","W","E","createLocal","_week","curWeek","gg","_dayOfYear","dayOfYearFromWeekInfo","_nextDay","ms","setFullYear","getDay","setUTCMinutes","getUTCMinutes","extendedIsoRegex","basicIsoRegex","tzRegex","isoDates","isoTimes","aspNetJsonRegex","configFromISO","allowTime","dateFormat","timeFormat","tzFormat","configFromStringAndFormat","extractFromRFC2822Strings","yearStr","monthStr","dayStr","hourStr","minuteStr","secondStr","untruncateYear","obsOffsets","UT","GMT","EDT","EST","CDT","CST","MDT","MST","PDT","PST","configFromRFC2822","preprocessRFC2822","parsedArray","weekdayStr","parsedInput","weekdayProvided","weekdayActual","checkWeekday","obsOffset","militaryOffset","numOffset","hm","calculateOffset","ISO_8601","RFC_2822","skipped","stringLength","totalParsedInputLength","hour","isPm","meridiemHour","meridiemFixWrap","prepareConfig","preparse","tempConfig","bestMoment","scoreToBeat","currentScore","score","configFromStringAndArray","createFromInputFallback","configFromString","minute","millisecond","configFromObject","configFromInput","isUTC","getOwnPropertyNames","k","isObjectEmpty","createFromConfig","prototypeMin","other","prototypeMax","pickBy","moments","ordering","Duration","years","quarters","quarter","weeks","days","milliseconds","unitHasDecimal","isDurationValid","_milliseconds","_days","_months","_bubble","isDuration","absRound","separator","utcOffset","offsetFromString","chunkOffset","chunk","cloneWithOffset","setTime","local","getDateOffset","getTimezoneOffset","isUtc","aspNetRegex","isoRegex","createDuration","diffRes","parseIso","isBefore","positiveMomentsDifference","momentsDifference","inp","createAdder","period","addSubtract","isAdding","invalid","monthDiff","anchor2","adjust","wholeMonthDiff","anchor","newLocaleData","defaultFormat","defaultFormatUtc","addWeekYearFormatToken","getSetWeekYearHelper","weeksTarget","dayOfYearData","isoWeekYear","_dayOfMonthOrdinalParse","_ordinalParse","_dayOfMonthOrdinalParseLenient","getSetDayOfMonth","getSetMinute","getSetSecond","parseMs","getSetMillisecond","preParsePostFormat","formats","sod","startOf","calendarFormat","asFloat","zoneDelta","endOf","inputString","postformat","withoutSuffix","humanize","toNow","invalidAt","localInput","isBetween","inclusivity","isSame","inputMs","isSameOrAfter","isSameOrBefore","parsingFlags","prioritized","unitsObj","getPrioritizedUnits","isoWeekday","toObject","toISOString","keepOffset","zone","unix","creationData","isoWeek","isoWeeks","weekInfo","isoWeeksInYear","parseWeekday","parseIsoWeekday","keepLocalTime","keepMinutes","localAdjust","_changeInProgress","parseZone","tZone","hasAlignedHourOffset","isDST","isUtcOffset","zoneAbbr","zoneName","dates","isDSTShifted","_isDSTShifted","proto$1","get$1","field","listMonthsImpl","out","listWeekdaysImpl","localeSorted","_calendar","_longDateFormat","formatUpper","_invalidDate","_ordinal","isFuture","_relativeTime","pastFuture","isFormat","_monthsShort","monthName","_monthsParseExact","ii","llc","toLocaleLowerCase","_monthsParse","_longMonthsParse","_shortMonthsParse","firstDayOfYear","firstDayOfWeek","_weekdays","_weekdaysMin","_weekdaysShort","weekdayName","_weekdaysParseExact","_weekdaysParse","_shortWeekdaysParse","_minWeekdaysParse","_fullWeekdaysParse","isLower","langData","mathAbs","addSubtract$1","absCeil","daysToMonths","monthsToDays","makeAs","alias","as","asMilliseconds","asSeconds","asMinutes","asHours","asDays","asWeeks","asMonths","asYears","makeGetter","thresholds","abs$1","toISOString$1","Y","D","toFixed","total","totalSign","ymSign","daysSign","hmsSign","proto$2","monthsFromDays","withSuffix","posNegDuration","relativeTime$1","toIsoString","setHookCallback","updateLocale","tmpLocale","relativeTimeRounding","roundingFunction","relativeTimeThreshold","threshold","limit","myMoment","HTML5_FMT","DATETIME_LOCAL","DATETIME_LOCAL_SECONDS","DATETIME_LOCAL_MS","TIME","TIME_SECONDS","TIME_MS","__WEBPACK_AMD_DEFINE_FACTORY__","__WEBPACK_AMD_DEFINE_ARRAY__","multi","selectedOptions","oninput","Affix","DEFAULTS","$target","checkPosition","checkPositionWithEventLoop","affixed","unpin","pinnedOffset","Plugin","VERSION","RESET","getState","scrollHeight","offsetTop","offsetBottom","targetHeight","initializing","colliderTop","getPinnedOffset","bottom","affix","affixType","Constructor","$spy","getParent","$parent","clearMenus","keydown","$items","dropdown","$body","$dialog","isShown","originalBodyPad","scrollbarWidth","ignoreBackdropClick","remote","_relatedTarget","TRANSITION_DURATION","BACKDROP_TRANSITION_DURATION","keyboard","checkScrollbar","setScrollbar","resize","transition","adjustDialog","enforceFocus","emulateTransitionEnd","hideModal","handleUpdate","resetAdjustments","resetScrollbar","removeBackdrop","doAnimate","callbackRemove","modalIsOverflowing","clientHeight","paddingLeft","bodyIsOverflowing","paddingRight","fullWindowWidth","innerWidth","documentElementRect","clientWidth","measureScrollbar","bodyPad","scrollDiv","showEvent","Tooltip","hoverState","inState","placement","template","viewport","getOptions","$viewport","triggers","eventIn","eventOut","enter","leave","_options","fixTitle","getDefaults","getDelegateOptions","tip","isInStateTrue","inDom","$tip","tipId","getUID","setContent","autoToken","autoPlace","getPosition","actualWidth","actualHeight","orgPlacement","viewportDim","calculatedOffset","getCalculatedOffset","applyPlacement","prevHoverState","marginTop","getViewportAdjustedDelta","isVertical","arrowDelta","arrowOffsetPosition","replaceArrow","arrow","getTitle","$e","isBody","elRect","isSvg","SVGElement","elOffset","outerDims","viewportPadding","viewportDimensions","topEdgeOffset","bottomEdgeOffset","leftEdgeOffset","rightEdgeOffset","$arrow","enable","toggleEnabled","destroy","called","$el","transEndEventNames","WebkitTransition","MozTransition","OTransition","transitionEnd","bsTransitionEnd","keyHandler","origHandler","hotkeys","filterInputAcceptingElements","textInputTypes","filterContentEditable","filterTextInputs","textAcceptingInputTypes","specialKeys","character","modif","possible","specialKey","shiftNums","8","9","10","13","16","17","18","19","20","27","32","33","34","35","36","37","38","39","40","45","46","59","61","96","97","98","99","100","101","102","103","104","105","106","107","109","110","111","112","113","114","115","116","117","118","119","120","121","122","123","144","145","173","186","187","188","189","190","191","192","219","220","221","222","`","1","2","3","4","5","6","7","-","=",";","'",",",".","/","\\","punycode","maxInt","tMin","tMax","skew","damp","initialBias","initialN","delimiter","regexPunycode","regexNonASCII","regexSeparators","not-basic","invalid-input","baseMinusTMin","stringFromCharCode","RangeError","mapDomain","ucs2decode","counter","ucs2encode","basicToDigit","codePoint","digitToBasic","digit","adapt","numPoints","decode","basic","oldi","baseMinusT","inputLength","bias","lastIndexOf","encode","handledCPCount","basicLength","handledCPCountPlusOne","qMinusT","ucs2","toASCII","toUnicode","CanvasImage","canvas","getContext","drawImage","clearRect","putImageData","getPixelCount","getImageData","removeCanvas","getPalette","MMCQ","quantize","palette","pv","naturalOrder","sum","peek","debug","r1","r2","g1","g2","b1","b2","histo","vboxes","vbox","volume","_volume","_count_set","_count","avg","_avg","gval","bval","nearest","sqrt","forcebw","History","defaultRoute","getCurrent","secondTop","home","Pane","pinnedKey","localStorage","getItem","setItem","KeyboardNavigatable","whenCallback","onUp","onDown","onSelect","onCancel","onRemove","selectionStart","selectionEnd","bindTo","navigate","keyCallback","DiscussionsSearchSource_DiscussionsSearchSource","DiscussionsSearchSource","page","include","data-index","UsersSearchSource_UsersSearchResults","UsersSearchResults","localeCompare","helpers_username","Search_Search","sources","loadingSources","searched","currentSearch","getCurrentSearch","sourceItems","focused","onfocus","onblur","setIndex","getCurrentNumericIndex","selectableItems","$input","navigator","selectResult","searchTimeout","searching","clearSearch","$item","scrollToItem","$dropdown","fixedIndex","dropdownScroll","dropdownTop","dropdownBottom","outerHeight","itemTop","itemBottom","TextEditor_TextEditor","configTextarea","controlItems","submitLabel","preview","setValue","setSelectionRange","$textarea","getSelectionRange","insertAtCursor","textarea","ComposerBody_ComposerBody","originalContent","editor","headerItems","preventExit","confirmExit","minimizeComposerIfFullScreen","composer","isFullScreen","minimize","ReplyComposer_ReplyComposer","_ComposerBody","post","viewingDiscussion","stream","goToNumber","viewButton","Page_Page","bodyClass","DiscussionHero_DiscussionHero","LoadingPost_LoadingPost","ForgotPasswordModal_ForgotPasswordModal","_Modal","LogInButtons_LogInButtons","SignUpModal_SignUpModal","welcomeUser","footer","isProvided","identificationFields","fields","logIn","identification","LogInModal_LogInModal","submitData","reload","remember","forgotPassword","signUp","RenameDiscussionModal_RenameDiscussionModal","currentTitle","newTitle","section","userControls","DiscussionPage_DiscussionPage","replyAction","moderationControls","renameAction","destructiveControls","restoreAction","deleteAction","hideAction","goToLast","forceRefresh","composingReplyTo","confirm","discussionList","removeDiscussion","ReplyPlaceholder_ReplyPlaceholder","configPreview","DiscussionControls","updateInterval","anchorToBottom","s9e","TextFormatter","clearInterval","PostStream_PostStream","paused","scrollListener","onscroll","loadPageTimeouts","pagesLoading","includedPosts","noAnimation","flashItem","loadNearNumber","scrollToNumber","unpause","goToIndex","backwards","loadNearIndex","scrollToIndex","goToFirst","viewingEnd","visibleEnd","loadRange","visibleStart","sanitizeIndex","loadCount","lastTime","fadedIn","PostComponent","dt","esm_extends","loadNext","_this4","calculatePositionTimeout","getMarginTop","viewportHeight","viewportTop","loadPrevious","calculatePosition","twoPagesAway","loadPage","_this5","anchorIndex","loadIds","near","startNumber","endNumber","$container","scrollBottom","computedHeight","components_PostStream","PostStreamScrubber_PostStreamScrubber","description","streamWasUnpaused","unreadPercent","viewing","newStyle","oldStyle","renderScrollbar","visibleTop","visiblePost","ondestroy","onresize","cursor","user-select","dragging","mouseStart","indexStart","onmousedown","onmousemove","onmouseup","percentPerPost","$scrubber","heights","$part","minPercentVisible","percentPerVisiblePost","scrubber","scrollbar","deltaIndex","newIndex","intIndex","$scrollbar","offsetPercent","offsetIndex","_Page","refresh","DiscussionPage","idParam","configPane","sidebarItems","_Page$prototype$confi","preloadedDiscussion","requestParams","discussionId","record","positionChanged","$list","hotEdge","$discussion","listTop","listBottom","discussionTop","discussionBottom","replaceState","HeaderPrimary_HeaderPrimary","SessionDropdown_SessionDropdown","NotificationList_NotificationList","moreResults","pages","markAllAsRead","notification","NotificationComponent","notificationComponents","$notifications","$scrollParent","scrollHandler","contentTop","contentHeight","loadMore","parseResults","links","NotificationsDropdown_NotificationsDropdown","newNotifications","getNewCount","unread","getUnreadCount","menuClick","goToRoute","HeaderSecondary_HeaderSecondary","_loop","cookie","ComposerButton_ComposerButton","Composer_Composer","Composer","PositionEnum","HIDDEN","normal","NORMAL","minimized","MINIMIZED","fullScreen","FULLSCREEN","showIfMinimized","configHandle","updateHeight","initializeHeight","onbeforeunload","mousedown","heightStart","deltaPixels","changeHeight","updateBodyPadding","$flexible","headerHeight","paddingBottom","footerHeight","animateToPosition","oldPosition","$composer","oldHeight","newHeight","showBackdrop","hideBackdrop","exitFullScreen","defaultHeight","minimumHeight","maximumHeight","components_Composer","Notification_Notification","markAsRead","excerpt","DiscussionRenamedNotification_DiscussionRenamedNotification","postNumber","EditPostComposer_minimizeComposerIfFullScreen","EditPostComposer_EditPostComposer","editedContent","PostControls","editAction","Post_Post","controlsOpen","actionItems","footerItems","$actions","$controls","EditUserModal_EditUserModal","setPassword","activate","affixSidebar","$sidebar","$header","$footer","$affixElement","UserPage_UserPage","UserCard_UserCard","controlsButtonClassName","loadUser","lowercaseUsername","navItems","UserControls","AvatarEditor_AvatarEditor","isDraggedOver","quickUpload","ondragover","enableDragover","ondragenter","ondragleave","disableDragover","ondragend","ondrop","dropUpload","openPicker","upload","dataTransfer","files","infoItems","online","utils_humanTime","PostUser_PostUser","cardVisible","card","showCard","hideCard","PostMeta_PostMeta","permalink","getPermalink","touch","ipAddress","origin","PostEdited_PostEdited","shouldUpdateTooltip","oldEditedInfo","editedInfo","CommentPost_CommentPost","_Post","revealContent","postUser","isEditing","CommentPost","Post--hidden","Post--edited","editing","updatePreview","toggleContent","EventPost_EventPost","descriptionData","descriptionKey","DiscussionRenamedPost_DiscussionRenamedPost","renamed","oldName","oldTitle","new","TerminalPost_TerminalPost","PostPreview_PostPreview","slidable","$underneathLeft","$underneathRight","startX","startY","couldBeSliding","isSliding","animatePos","newPos","background-position-x","newX","newY","$underneath","side","DiscussionListItem_DiscussionListItem","showUnread","showRepliesCount","jumpTo","highlightRegExp","slidableInstance","showFirstPost","DiscussionList_DiscussionList","data-id","sortMap","relevance","latest","newest","oldest","loadResults","preloadedDiscussions","addDiscussion","WelcomeHero_WelcomeHero","DiscussionComposer_DiscussionComposer","titlePlaceholder","onkeydown","IndexPage_IndexPage","lastDiscussion","IndexPage","hero","viewItems","oldHeroHeight","heroHeight","indexTop","indexBottom","canStartDiscussion","newDiscussion","stickyParams","sortOptions","changeSort","composeNewDiscussion","onlogin","PostsUserPage_PostsUserPage","_UserPage","loadLimit","DiscussionsUserPage_DiscussionsUserPage","NotificationGrid_NotificationGrid","methods","notificationMethods","inputs","notificationTypes","preferenceKey","preference","toggleMethod","toggleType","control","ChangePasswordModal_ChangePasswordModal","ChangeEmailModal_ChangeEmailModal","SettingsPage_SettingsPage","settingsItems","accountItems","notificationsItems","privacyItems","preferenceSaver","_this$user$savePrefer","discloseOnline","NotificationsPage_NotificationsPage","index.filter","discussion.near","user.posts","user.discussions","alertEmailConfirmation","resendButton","ContainedAlert","_Alert","inheritsLoose","ForumApplication_ForumApplication","ForumApplication","_Application","assertThisInitialized","discussionRenamed","comment","defaultAction","authenticationComplete","authenticated","LogInButton_LogInButton","SearchSource","forum_compat","compat","utils/PostControls","utils/KeyboardNavigatable","utils/slidable","utils/affixSidebar","utils/History","utils/DiscussionControls","utils/alertEmailConfirmation","utils/UserControls","utils/Pane","components/DiscussionPage","components/LogInModal","components/ComposerBody","components/ForgotPasswordModal","components/Notification","components/LogInButton","components/DiscussionsUserPage","components/Composer","components/SessionDropdown","components/HeaderPrimary","components/PostEdited","components/PostStream","components/ChangePasswordModal","components/IndexPage","components/Page","components/DiscussionRenamedNotification","components/DiscussionsSearchSource","components/HeaderSecondary","components/ComposerButton","components/DiscussionList","components/ReplyPlaceholder","components/TextEditor","components/AvatarEditor","components/Post","components/SettingsPage","components/TerminalPost","components/ChangeEmailModal","components/NotificationsDropdown","components/UserPage","components/PostUser","components/UserCard","components/UsersSearchSource","components/NotificationGrid","components/PostPreview","components/EventPost","components/DiscussionHero","components/PostMeta","components/EditUserModal","components/SearchSource","components/DiscussionRenamedPost","components/DiscussionComposer","components/LogInButtons","components/NotificationList","components/WelcomeHero","components/SignUpModal","components/CommentPost","components/ReplyComposer","components/NotificationsPage","components/PostStreamScrubber","components/EditPostComposer","components/RenameDiscussionModal","components/Search","components/DiscussionListItem","components/LoadingPost","components/PostsUserPage","forum_app"],"mappings":"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","file":"forum.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 89);\n","export default function _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n subClass.__proto__ = superClass;\n}","/**\n * The `Model` class represents a local data resource. It provides methods to\n * persist changes via the API.\n *\n * @abstract\n */\nexport default class Model {\n /**\n * @param {Object} data A resource object from the API.\n * @param {Store} store The data store that this model should be persisted to.\n * @public\n */\n constructor(data = {}, store = null) {\n /**\n * The resource object from the API.\n *\n * @type {Object}\n * @public\n */\n this.data = data;\n\n /**\n * The time at which the model's data was last updated. Watching the value\n * of this property is a fast way to retain/cache a subtree if data hasn't\n * changed.\n *\n * @type {Date}\n * @public\n */\n this.freshness = new Date();\n\n /**\n * Whether or not the resource exists on the server.\n *\n * @type {Boolean}\n * @public\n */\n this.exists = false;\n\n /**\n * The data store that this resource should be persisted to.\n *\n * @type {Store}\n * @protected\n */\n this.store = store;\n }\n\n /**\n * Get the model's ID.\n *\n * @return {Integer}\n * @public\n * @final\n */\n id() {\n return this.data.id;\n }\n\n /**\n * Get one of the model's attributes.\n *\n * @param {String} attribute\n * @return {*}\n * @public\n * @final\n */\n attribute(attribute) {\n return this.data.attributes[attribute];\n }\n\n /**\n * Merge new data into this model locally.\n *\n * @param {Object} data A resource object to merge into this model\n * @public\n */\n pushData(data) {\n // Since most of the top-level items in a resource object are objects\n // (e.g. relationships, attributes), we'll need to check and perform the\n // merge at the second level if that's the case.\n for (const key in data) {\n if (typeof data[key] === 'object') {\n this.data[key] = this.data[key] || {};\n\n // For every item in a second-level object, we want to check if we've\n // been handed a Model instance. If so, we will convert it to a\n // relationship data object.\n for (const innerKey in data[key]) {\n if (data[key][innerKey] instanceof Model) {\n data[key][innerKey] = {data: Model.getIdentifier(data[key][innerKey])};\n }\n this.data[key][innerKey] = data[key][innerKey];\n }\n } else {\n this.data[key] = data[key];\n }\n }\n\n // Now that we've updated the data, we can say that the model is fresh.\n // This is an easy way to invalidate retained subtrees etc.\n this.freshness = new Date();\n }\n\n /**\n * Merge new attributes into this model locally.\n *\n * @param {Object} attributes The attributes to merge.\n * @public\n */\n pushAttributes(attributes) {\n this.pushData({attributes});\n }\n\n /**\n * Merge new attributes into this model, both locally and with persistence.\n *\n * @param {Object} attributes The attributes to save. If a 'relationships' key\n * exists, it will be extracted and relationships will also be saved.\n * @param {Object} [options]\n * @return {Promise}\n * @public\n */\n save(attributes, options = {}) {\n const data = {\n type: this.data.type,\n id: this.data.id,\n attributes\n };\n\n // If a 'relationships' key exists, extract it from the attributes hash and\n // set it on the top-level data object instead. We will be sending this data\n // object to the API for persistence.\n if (attributes.relationships) {\n data.relationships = {};\n\n for (const key in attributes.relationships) {\n const model = attributes.relationships[key];\n\n data.relationships[key] = {\n data: model instanceof Array\n ? model.map(Model.getIdentifier)\n : Model.getIdentifier(model)\n };\n }\n\n delete attributes.relationships;\n }\n\n // Before we update the model's data, we should make a copy of the model's\n // old data so that we can revert back to it if something goes awry during\n // persistence.\n const oldData = this.copyData();\n\n this.pushData(data);\n\n const request = {data};\n if (options.meta) request.meta = options.meta;\n\n return app.request(Object.assign({\n method: this.exists ? 'PATCH' : 'POST',\n url: app.forum.attribute('apiUrl') + this.apiEndpoint(),\n data: request\n }, options)).then(\n // If everything went well, we'll make sure the store knows that this\n // model exists now (if it didn't already), and we'll push the data that\n // the API returned into the store.\n payload => {\n this.store.data[payload.data.type] = this.store.data[payload.data.type] || {};\n this.store.data[payload.data.type][payload.data.id] = this;\n return this.store.pushPayload(payload);\n },\n\n // If something went wrong, though... good thing we backed up our model's\n // old data! We'll revert to that and let others handle the error.\n response => {\n this.pushData(oldData);\n m.lazyRedraw();\n throw response;\n }\n );\n }\n\n /**\n * Send a request to delete the resource.\n *\n * @param {Object} data Data to send along with the DELETE request.\n * @param {Object} [options]\n * @return {Promise}\n * @public\n */\n delete(data, options = {}) {\n if (!this.exists) return m.deferred.resolve().promise;\n\n return app.request(Object.assign({\n method: 'DELETE',\n url: app.forum.attribute('apiUrl') + this.apiEndpoint(),\n data\n }, options)).then(() => {\n this.exists = false;\n this.store.remove(this);\n });\n }\n\n /**\n * Construct a path to the API endpoint for this resource.\n *\n * @return {String}\n * @protected\n */\n apiEndpoint() {\n return '/' + this.data.type + (this.exists ? '/' + this.data.id : '');\n }\n\n copyData() {\n return JSON.parse(JSON.stringify(this.data));\n }\n\n /**\n * Generate a function which returns the value of the given attribute.\n *\n * @param {String} name\n * @param {function} [transform] A function to transform the attribute value\n * @return {*}\n * @public\n */\n static attribute(name, transform) {\n return function() {\n const value = this.data.attributes && this.data.attributes[name];\n\n return transform ? transform(value) : value;\n };\n }\n\n /**\n * Generate a function which returns the value of the given has-one\n * relationship.\n *\n * @param {String} name\n * @return {Model|Boolean|undefined} false if no information about the\n * relationship exists; undefined if the relationship exists but the model\n * has not been loaded; or the model if it has been loaded.\n * @public\n */\n static hasOne(name) {\n return function() {\n if (this.data.relationships) {\n const relationship = this.data.relationships[name];\n\n if (relationship) {\n return app.store.getById(relationship.data.type, relationship.data.id);\n }\n }\n\n return false;\n };\n }\n\n /**\n * Generate a function which returns the value of the given has-many\n * relationship.\n *\n * @param {String} name\n * @return {Array|Boolean} false if no information about the relationship\n * exists; an array if it does, containing models if they have been\n * loaded, and undefined for those that have not.\n * @public\n */\n static hasMany(name) {\n return function() {\n if (this.data.relationships) {\n const relationship = this.data.relationships[name];\n\n if (relationship) {\n return relationship.data.map(data => app.store.getById(data.type, data.id));\n }\n }\n\n return false;\n };\n }\n\n /**\n * Transform the given value into a Date object.\n *\n * @param {String} value\n * @return {Date|null}\n * @public\n */\n static transformDate(value) {\n return value ? new Date(value) : null;\n }\n\n /**\n * Get a resource identifier object for the given model.\n *\n * @param {Model} model\n * @return {Object}\n * @protected\n */\n static getIdentifier(model) {\n return {\n type: model.data.type,\n id: model.data.id\n };\n }\n}\n","/*\n * This file is part of Flarum.\n *\n * (c) Toby Zerner <toby.zerner@gmail.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/**\n * The `Component` class defines a user interface 'building block'. A component\n * can generate a virtual DOM to be rendered on each redraw.\n *\n * An instance's virtual DOM can be retrieved directly using the {@link\n * Component#render} method.\n *\n * @example\n * this.myComponentInstance = new MyComponent({foo: 'bar'});\n * return m('div', this.myComponentInstance.render());\n *\n * Alternatively, components can be nested, letting Mithril take care of\n * instance persistence. For this, the static {@link Component.component} method\n * can be used.\n *\n * @example\n * return m('div', MyComponent.component({foo: 'bar'));\n *\n * @see https://lhorie.github.io/mithril/mithril.component.html\n * @abstract\n */\nexport default class Component {\n /**\n * @param {Object} props\n * @param {Array|Object} children\n * @public\n */\n constructor(props = {}, children = null) {\n if (children) props.children = children;\n\n this.constructor.initProps(props);\n\n /**\n * The properties passed into the component.\n *\n * @type {Object}\n */\n this.props = props;\n\n /**\n * The root DOM element for the component.\n *\n * @type DOMElement\n * @public\n */\n this.element = null;\n\n /**\n * Whether or not to retain the component's subtree on redraw.\n *\n * @type {boolean}\n * @public\n */\n this.retain = false;\n\n this.init();\n }\n\n /**\n * Called when the component is constructed.\n *\n * @protected\n */\n init() {\n }\n\n /**\n * Called when the component is destroyed, i.e. after a redraw where it is no\n * longer a part of the view.\n *\n * @see https://lhorie.github.io/mithril/mithril.component.html#unloading-components\n * @param {Object} e\n * @public\n */\n onunload() {\n }\n\n /**\n * Get the renderable virtual DOM that represents the component's view.\n *\n * This should NOT be overridden by subclasses. Subclasses wishing to define\n * their virtual DOM should override Component#view instead.\n *\n * @example\n * this.myComponentInstance = new MyComponent({foo: 'bar'});\n * return m('div', this.myComponentInstance.render());\n *\n * @returns {Object}\n * @final\n * @public\n */\n render() {\n const vdom = this.retain ? {subtree: 'retain'} : this.view();\n\n // Override the root element's config attribute with our own function, which\n // will set the component instance's element property to the root DOM\n // element, and then run the component class' config method.\n vdom.attrs = vdom.attrs || {};\n\n const originalConfig = vdom.attrs.config;\n\n vdom.attrs.config = (...args) => {\n this.element = args[0];\n this.config.apply(this, args.slice(1));\n if (originalConfig) originalConfig.apply(this, args);\n };\n\n return vdom;\n }\n\n /**\n * Returns a jQuery object for this component's element. If you pass in a\n * selector string, this method will return a jQuery object, using the current\n * element as its buffer.\n *\n * For example, calling `component.$('li')` will return a jQuery object\n * containing all of the `li` elements inside the DOM element of this\n * component.\n *\n * @param {String} [selector] a jQuery-compatible selector string\n * @returns {jQuery} the jQuery object for the DOM node\n * @final\n * @public\n */\n $(selector) {\n const $element = $(this.element);\n\n return selector ? $element.find(selector) : $element;\n }\n\n /**\n * Called after the component's root element is redrawn. This hook can be used\n * to perform any actions on the DOM, both on the initial draw and any\n * subsequent redraws. See Mithril's documentation for more information.\n *\n * @see https://lhorie.github.io/mithril/mithril.html#the-config-attribute\n * @param {Boolean} isInitialized\n * @param {Object} context\n * @param {Object} vdom\n * @public\n */\n config() {\n }\n\n /**\n * Get the virtual DOM that represents the component's view.\n *\n * @return {Object} The virtual DOM\n * @protected\n */\n view() {\n throw new Error('Component#view must be implemented by subclass');\n }\n\n /**\n * Get a Mithril component object for this component, preloaded with props.\n *\n * @see https://lhorie.github.io/mithril/mithril.component.html\n * @param {Object} [props] Properties to set on the component\n * @param children\n * @return {Object} The Mithril component object\n * @property {function} controller\n * @property {function} view\n * @property {Object} component The class of this component\n * @property {Object} props The props that were passed to the component\n * @public\n */\n static component(props = {}, children = null) {\n const componentProps = Object.assign({}, props);\n\n if (children) componentProps.children = children;\n\n this.initProps(componentProps);\n\n // Set up a function for Mithril to get the component's view. It will accept\n // the component's controller (which happens to be the component itself, in\n // our case), update its props with the ones supplied, and then render the view.\n const view = (component) => {\n component.props = componentProps;\n return component.render();\n };\n\n // Mithril uses this property on the view function to cache component\n // controllers between redraws, thus persisting component state.\n view.$original = this.prototype.view;\n\n // Our output object consists of a controller constructor + a view function\n // which Mithril will use to instantiate and render the component. We also\n // attach a reference to the props that were passed through and the\n // component's class for reference.\n const output = {\n controller: this.bind(undefined, componentProps),\n view: view,\n props: componentProps,\n component: this\n };\n\n // If a `key` prop was set, then we'll assume that we want that to actually\n // show up as an attribute on the component object so that Mithril's key\n // algorithm can be applied.\n if (componentProps.key) {\n output.attrs = {key: componentProps.key};\n }\n\n return output;\n }\n\n /**\n * Initialize the component's props.\n *\n * @param {Object} props\n * @public\n */\n static initProps(props) {\n }\n}\n","import Component from '../Component';\nimport icon from '../helpers/icon';\nimport extract from '../utils/extract';\nimport extractText from '../utils/extractText';\nimport LoadingIndicator from './LoadingIndicator';\n\n/**\n * The `Button` component defines an element which, when clicked, performs an\n * action. The button may have the following special props:\n *\n * - `icon` The name of the icon class. If specified, the button will be given a\n * 'has-icon' class name.\n * - `disabled` Whether or not the button is disabled. If truthy, the button\n * will be given a 'disabled' class name, and any `onclick` handler will be\n * removed.\n * - `loading` Whether or not the button should be in a disabled loading state.\n *\n * All other props will be assigned as attributes on the button element.\n *\n * Note that a Button has no default class names. This is because a Button can\n * be used to represent any generic clickable control, like a menu item.\n */\nexport default class Button extends Component {\n view() {\n const attrs = Object.assign({}, this.props);\n\n delete attrs.children;\n\n attrs.className = attrs.className || '';\n attrs.type = attrs.type || 'button';\n\n // If nothing else is provided, we use the textual button content as tooltip\n if (!attrs.title && this.props.children) {\n attrs.title = extractText(this.props.children);\n }\n\n const iconName = extract(attrs, 'icon');\n if (iconName) attrs.className += ' hasIcon';\n\n const loading = extract(attrs, 'loading');\n if (attrs.disabled || loading) {\n attrs.className += ' disabled' + (loading ? ' loading' : '');\n delete attrs.onclick;\n }\n\n return <button {...attrs}>{this.getButtonContent()}</button>;\n }\n\n /**\n * Get the template for the button's content.\n *\n * @return {*}\n * @protected\n */\n getButtonContent() {\n const iconName = this.props.icon;\n\n return [\n iconName && iconName !== true ? icon(iconName, {className: 'Button-icon'}) : '',\n this.props.children ? <span className=\"Button-label\">{this.props.children}</span> : '',\n this.props.loading ? LoadingIndicator.component({size: 'tiny', className: 'LoadingIndicator--inline'}) : ''\n ];\n }\n}\n","class Item {\n constructor(content, priority) {\n this.content = content;\n this.priority = priority;\n }\n}\n\n/**\n * The `ItemList` class collects items and then arranges them into an array\n * by priority.\n */\nexport default class ItemList {\n constructor() {\n /**\n * The items in the list.\n *\n * @type {Object}\n * @public\n */\n this.items = {};\n }\n\n /**\n * Check whether the list is empty.\n *\n * @returns {boolean}\n * @public\n */\n isEmpty() {\n for (const i in this.items) {\n if(this.items.hasOwnProperty(i)) {\n return false;\n }\n }\n\n return true;\n }\n\n /**\n * Check whether an item is present in the list.\n *\n * @param key\n * @returns {boolean}\n */\n has(key) {\n return !!this.items[key];\n }\n\n /**\n * Get the content of an item.\n *\n * @param {String} key\n * @return {*}\n * @public\n */\n get(key) {\n return this.items[key].content;\n }\n\n /**\n * Add an item to the list.\n *\n * @param {String} key A unique key for the item.\n * @param {*} content The item's content.\n * @param {Integer} [priority] The priority of the item. Items with a higher\n * priority will be positioned before items with a lower priority.\n * @public\n */\n add(key, content, priority = 0) {\n this.items[key] = new Item(content, priority);\n }\n\n /**\n * Replace an item in the list, only if it is already present.\n *\n * @param {String} key\n * @param {*} [content]\n * @param {Integer} [priority]\n * @public\n */\n replace(key, content = null, priority = null) {\n if (this.items[key]) {\n if (content !== null) {\n this.items[key].content = content;\n }\n\n if (priority !== null) {\n this.items[key].priority = priority;\n }\n }\n }\n\n /**\n * Remove an item from the list.\n *\n * @param {String} key\n * @public\n */\n remove(key) {\n delete this.items[key];\n }\n\n /**\n * Merge another list's items into this one.\n *\n * @param {ItemList} items\n * @public\n */\n merge(items) {\n for (const i in items.items) {\n if (items.items.hasOwnProperty(i) && items.items[i] instanceof Item) {\n this.items[i] = items.items[i];\n }\n }\n }\n\n /**\n * Convert the list into an array of item content arranged by priority. Each\n * item's content will be assigned an `itemName` property equal to the item's\n * unique key.\n *\n * @return {Array}\n * @public\n */\n toArray() {\n const items = [];\n\n for (const i in this.items) {\n if (this.items.hasOwnProperty(i) && this.items[i] instanceof Item) {\n this.items[i].content = Object(this.items[i].content);\n\n this.items[i].content.itemName = i;\n items.push(this.items[i]);\n this.items[i].key = items.length;\n }\n }\n\n return items.sort((a, b) => {\n if (a.priority === b.priority) {\n return a.key - b.key;\n } else if (a.priority > b.priority) {\n return -1;\n }\n return 1;\n }).map(item => item.content);\n }\n}\n\n","/**\n * The `icon` helper displays an icon.\n *\n * @param {String} fontClass The full icon class, prefix and the icon’s name.\n * @param {Object} attrs Any other attributes to apply.\n * @return {Object}\n */\nexport default function icon(fontClass, attrs = {}) {\n attrs.className = 'icon ' + fontClass + ' ' + (attrs.className || '');\n\n return <i {...attrs}/>;\n}\n","import Separator from '../components/Separator';\nimport classList from '../utils/classList';\n\nfunction isSeparator(item) {\n return item && item.component === Separator;\n}\n\nfunction withoutUnnecessarySeparators(items) {\n const newItems = [];\n let prevItem;\n\n items.forEach((item, i) => {\n if (!isSeparator(item) || (prevItem && !isSeparator(prevItem) && i !== items.length - 1)) {\n prevItem = item;\n newItems.push(item);\n }\n });\n\n return newItems;\n}\n\n/**\n * The `listItems` helper wraps a collection of components in <li> tags,\n * stripping out any unnecessary `Separator` components.\n *\n * @param {*} items\n * @return {Array}\n */\nexport default function listItems(items) {\n if (!(items instanceof Array)) items = [items];\n\n return withoutUnnecessarySeparators(items).map(item => {\n const isListItem = item.component && item.component.isListItem;\n const active = item.component && item.component.isActive && item.component.isActive(item.props);\n const className = item.props ? item.props.itemClassName : item.itemClassName;\n\n if (isListItem) {\n item.attrs = item.attrs || {};\n item.attrs.key = item.attrs.key || item.itemName;\n }\n\n return isListItem\n ? item\n : <li className={classList([\n (item.itemName ? 'item-' + item.itemName : ''),\n className,\n (active ? 'active' : '')\n ])}\n key={item.itemName}>\n {item}\n </li>;\n });\n}\n","export default function _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}","/**\n * Extract the text nodes from a virtual element.\n *\n * @param {VirtualElement} vdom\n * @return {String}\n */\nexport default function extractText(vdom) {\n if (vdom instanceof Array) {\n return vdom.map(element => extractText(element)).join('');\n } else if (typeof vdom === 'object' && vdom !== null) {\n return extractText(vdom.children);\n } else {\n return vdom;\n }\n}\n","/**\n * The `extract` utility deletes a property from an object and returns its\n * value.\n *\n * @param {Object} object The object that owns the property\n * @param {String} property The name of the property to extract\n * @return {*} The value of the property\n */\nexport default function extract(object, property) {\n const value = object[property];\n\n delete object[property];\n\n return value;\n}\n","import Model from '../Model';\n\nclass Group extends Model {}\n\nObject.assign(Group.prototype, {\n nameSingular: Model.attribute('nameSingular'),\n namePlural: Model.attribute('namePlural'),\n color: Model.attribute('color'),\n icon: Model.attribute('icon')\n});\n\nGroup.ADMINISTRATOR_ID = '1';\nGroup.GUEST_ID = '2';\nGroup.MEMBER_ID = '3';\n\nexport default Group;\n","import Component from '../Component';\nimport Alert from './Alert';\nimport Button from './Button';\n\n/**\n * The `Modal` component displays a modal dialog, wrapped in a form. Subclasses\n * should implement the `className`, `title`, and `content` methods.\n *\n * @abstract\n */\nexport default class Modal extends Component {\n init() {\n /**\n * An alert component to show below the header.\n *\n * @type {Alert}\n */\n this.alert = null;\n }\n\n view() {\n if (this.alert) {\n this.alert.props.dismissible = false;\n }\n\n return (\n <div className={'Modal modal-dialog ' + this.className()}>\n <div className=\"Modal-content\">\n {this.isDismissible() ? (\n <div className=\"Modal-close App-backControl\">\n {Button.component({\n icon: 'fas fa-times',\n onclick: this.hide.bind(this),\n className: 'Button Button--icon Button--link'\n })}\n </div>\n ) : ''}\n\n <form onsubmit={this.onsubmit.bind(this)}>\n <div className=\"Modal-header\">\n <h3 className=\"App-titleControl App-titleControl--text\">{this.title()}</h3>\n </div>\n\n {alert ? <div className=\"Modal-alert\">{this.alert}</div> : ''}\n\n {this.content()}\n </form>\n </div>\n </div>\n );\n }\n\n /**\n * Determine whether or not the modal should be dismissible via an 'x' button.\n *\n * @return {Boolean}\n */\n isDismissible() {\n return true;\n }\n\n /**\n * Get the class name to apply to the modal.\n *\n * @return {String}\n * @abstract\n */\n className() {\n }\n\n /**\n * Get the title of the modal dialog.\n *\n * @return {String}\n * @abstract\n */\n title() {\n }\n\n /**\n * Get the content of the modal.\n *\n * @return {VirtualElement}\n * @abstract\n */\n content() {\n }\n\n /**\n * Handle the modal form's submit event.\n *\n * @param {Event} e\n */\n onsubmit() {\n }\n\n /**\n * Focus on the first input when the modal is ready to be used.\n */\n onready() {\n this.$('form').find('input, select, textarea').first().focus().select();\n }\n\n onhide() {\n }\n\n /**\n * Hide the modal.\n */\n hide() {\n app.modal.close();\n }\n\n /**\n * Stop loading.\n */\n loaded() {\n this.loading = false;\n m.redraw();\n }\n\n /**\n * Show an alert describing an error returned from the API, and give focus to\n * the first relevant field.\n *\n * @param {RequestError} error\n */\n onerror(error) {\n this.alert = error.alert;\n\n m.redraw();\n\n if (error.status === 422 && error.response.errors) {\n this.$('form [name=' + error.response.errors[0].source.pointer.replace('/data/attributes/', '') + ']').select();\n } else {\n this.onready();\n }\n }\n}\n","import Component from '../Component';\nimport icon from '../helpers/icon';\nimport listItems from '../helpers/listItems';\n\n/**\n * The `Dropdown` component displays a button which, when clicked, shows a\n * dropdown menu beneath it.\n *\n * ### Props\n *\n * - `buttonClassName` A class name to apply to the dropdown toggle button.\n * - `menuClassName` A class name to apply to the dropdown menu.\n * - `icon` The name of an icon to show in the dropdown toggle button.\n * - `caretIcon` The name of an icon to show on the right of the button.\n * - `label` The label of the dropdown toggle button. Defaults to 'Controls'.\n * - `onhide`\n * - `onshow`\n *\n * The children will be displayed as a list inside of the dropdown menu.\n */\nexport default class Dropdown extends Component {\n static initProps(props) {\n super.initProps(props);\n\n props.className = props.className || '';\n props.buttonClassName = props.buttonClassName || '';\n props.menuClassName = props.menuClassName || '';\n props.label = props.label || '';\n props.caretIcon = typeof props.caretIcon !== 'undefined' ? props.caretIcon : 'fas fa-caret-down';\n }\n\n init() {\n this.showing = false;\n }\n\n view() {\n const items = this.props.children ? listItems(this.props.children) : [];\n\n return (\n <div className={'ButtonGroup Dropdown dropdown ' + this.props.className + ' itemCount' + items.length + (this.showing ? ' open' : '')}>\n {this.getButton()}\n {this.getMenu(items)}\n </div>\n );\n }\n\n config(isInitialized) {\n if (isInitialized) return;\n\n // When opening the dropdown menu, work out if the menu goes beyond the\n // bottom of the viewport. If it does, we will apply class to make it show\n // above the toggle button instead of below it.\n this.$().on('shown.bs.dropdown', () => {\n this.showing = true;\n\n if (this.props.onshow) {\n this.props.onshow();\n }\n\n m.redraw();\n\n const $menu = this.$('.Dropdown-menu');\n const isRight = $menu.hasClass('Dropdown-menu--right');\n\n $menu.removeClass('Dropdown-menu--top Dropdown-menu--right');\n\n $menu.toggleClass(\n 'Dropdown-menu--top',\n $menu.offset().top + $menu.height() > $(window).scrollTop() + $(window).height()\n );\n\n if ($menu.offset().top < 0) {\n $menu.removeClass('Dropdown-menu--top');\n }\n\n $menu.toggleClass(\n 'Dropdown-menu--right',\n isRight || $menu.offset().left + $menu.width() > $(window).scrollLeft() + $(window).width()\n );\n });\n\n this.$().on('hidden.bs.dropdown', () => {\n this.showing = false;\n\n if (this.props.onhide) {\n this.props.onhide();\n }\n\n m.redraw();\n });\n }\n\n /**\n * Get the template for the button.\n *\n * @return {*}\n * @protected\n */\n getButton() {\n return (\n <button\n className={'Dropdown-toggle ' + this.props.buttonClassName}\n data-toggle=\"dropdown\"\n onclick={this.props.onclick}>\n {this.getButtonContent()}\n </button>\n );\n }\n\n /**\n * Get the template for the button's content.\n *\n * @return {*}\n * @protected\n */\n getButtonContent() {\n return [\n this.props.icon ? icon(this.props.icon, {className: 'Button-icon'}) : '',\n <span className=\"Button-label\">{this.props.label}</span>,\n this.props.caretIcon ? icon(this.props.caretIcon, {className: 'Button-caret'}) : ''\n ];\n }\n\n getMenu(items) {\n return (\n <ul className={'Dropdown-menu dropdown-menu ' + this.props.menuClassName}>\n {items}\n </ul>\n );\n }\n}\n","/**\n * The `avatar` helper displays a user's avatar.\n *\n * @param {User} user\n * @param {Object} attrs Attributes to apply to the avatar element\n * @return {Object}\n */\nexport default function avatar(user, attrs = {}) {\n attrs.className = 'Avatar ' + (attrs.className || '');\n let content = '';\n\n // If the `title` attribute is set to null or false, we don't want to give the\n // avatar a title. On the other hand, if it hasn't been given at all, we can\n // safely default it to the user's username.\n const hasTitle = attrs.title === 'undefined' || attrs.title;\n if (!hasTitle) delete attrs.title;\n\n // If a user has been passed, then we will set up an avatar using their\n // uploaded image, or the first letter of their username if they haven't\n // uploaded one.\n if (user) {\n const username = user.displayName() || '?';\n const avatarUrl = user.avatarUrl();\n\n if (hasTitle) attrs.title = attrs.title || username;\n\n if (avatarUrl) {\n return <img {...attrs} src={avatarUrl}/>;\n }\n\n content = username.charAt(0).toUpperCase();\n attrs.style = {background: user.color()};\n }\n\n return <span {...attrs}>{content}</span>;\n}\n","var __assign = (this && this.__assign) || Object.assign || function(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\r\n t[p] = s[p];\r\n }\r\n return t;\r\n};\r\nvar defaults = {\r\n lines: 12,\r\n length: 7,\r\n width: 5,\r\n radius: 10,\r\n scale: 1.0,\r\n corners: 1,\r\n color: '#000',\r\n fadeColor: 'transparent',\r\n opacity: 0.25,\r\n rotate: 0,\r\n direction: 1,\r\n speed: 1,\r\n trail: 100,\r\n fps: 20,\r\n zIndex: 2e9,\r\n className: 'spinner',\r\n top: '50%',\r\n left: '50%',\r\n shadow: 'none',\r\n position: 'absolute',\r\n};\r\nvar Spinner = /** @class */ (function () {\r\n function Spinner(opts) {\r\n if (opts === void 0) { opts = {}; }\r\n this.opts = __assign({}, defaults, opts);\r\n }\r\n /**\r\n * Adds the spinner to the given target element. If this instance is already\r\n * spinning, it is automatically removed from its previous target by calling\r\n * stop() internally.\r\n */\r\n Spinner.prototype.spin = function (target) {\r\n var _this = this;\r\n this.stop();\r\n this.el = document.createElement('div');\r\n this.el.className = this.opts.className;\r\n this.el.setAttribute('role', 'progressbar');\r\n css(this.el, {\r\n position: this.opts.position,\r\n width: 0,\r\n zIndex: this.opts.zIndex,\r\n left: this.opts.left,\r\n top: this.opts.top,\r\n transform: \"scale(\" + this.opts.scale + \")\",\r\n });\r\n if (target) {\r\n target.insertBefore(this.el, target.firstChild || null);\r\n }\r\n var animator;\r\n var getNow;\r\n if (typeof requestAnimationFrame !== 'undefined') {\r\n animator = requestAnimationFrame;\r\n getNow = function () { return performance.now(); };\r\n }\r\n else {\r\n // fallback for IE 9\r\n animator = function (callback) { return setTimeout(callback, 1000 / _this.opts.fps); };\r\n getNow = function () { return Date.now(); };\r\n }\r\n var lastFrameTime;\r\n var state = 0; // state is rotation percentage (between 0 and 1)\r\n var animate = function () {\r\n var time = getNow();\r\n if (lastFrameTime === undefined) {\r\n lastFrameTime = time - 1;\r\n }\r\n state += getAdvancePercentage(time - lastFrameTime, _this.opts.speed);\r\n lastFrameTime = time;\r\n if (state > 1) {\r\n state -= Math.floor(state);\r\n }\r\n if (_this.el.childNodes.length === _this.opts.lines) {\r\n for (var line = 0; line < _this.opts.lines; line++) {\r\n var opacity = getLineOpacity(line, state, _this.opts);\r\n _this.el.childNodes[line].childNodes[0].style.opacity = opacity.toString();\r\n }\r\n }\r\n _this.animateId = _this.el ? animator(animate) : undefined;\r\n };\r\n drawLines(this.el, this.opts);\r\n animate();\r\n return this;\r\n };\r\n /**\r\n * Stops and removes the Spinner.\r\n * Stopped spinners may be reused by calling spin() again.\r\n */\r\n Spinner.prototype.stop = function () {\r\n if (this.el) {\r\n if (typeof requestAnimationFrame !== 'undefined') {\r\n cancelAnimationFrame(this.animateId);\r\n }\r\n else {\r\n clearTimeout(this.animateId);\r\n }\r\n if (this.el.parentNode) {\r\n this.el.parentNode.removeChild(this.el);\r\n }\r\n this.el = undefined;\r\n }\r\n return this;\r\n };\r\n return Spinner;\r\n}());\r\nexport { Spinner };\r\nfunction getAdvancePercentage(msSinceLastFrame, roundsPerSecond) {\r\n return msSinceLastFrame / 1000 * roundsPerSecond;\r\n}\r\nfunction getLineOpacity(line, state, opts) {\r\n var linePercent = (line + 1) / opts.lines;\r\n var diff = state - (linePercent * opts.direction);\r\n if (diff < 0 || diff > 1) {\r\n diff += opts.direction;\r\n }\r\n // opacity should start at 1, and approach opacity option as diff reaches trail percentage\r\n var trailPercent = opts.trail / 100;\r\n var opacityPercent = 1 - diff / trailPercent;\r\n if (opacityPercent < 0) {\r\n return opts.opacity;\r\n }\r\n var opacityDiff = 1 - opts.opacity;\r\n return opacityPercent * opacityDiff + opts.opacity;\r\n}\r\n/**\r\n * Tries various vendor prefixes and returns the first supported property.\r\n */\r\nfunction vendor(el, prop) {\r\n if (el.style[prop] !== undefined) {\r\n return prop;\r\n }\r\n // needed for transform properties in IE 9\r\n var prefixed = 'ms' + prop.charAt(0).toUpperCase() + prop.slice(1);\r\n if (el.style[prefixed] !== undefined) {\r\n return prefixed;\r\n }\r\n return '';\r\n}\r\n/**\r\n * Sets multiple style properties at once.\r\n */\r\nfunction css(el, props) {\r\n for (var prop in props) {\r\n el.style[vendor(el, prop) || prop] = props[prop];\r\n }\r\n return el;\r\n}\r\n/**\r\n * Returns the line color from the given string or array.\r\n */\r\nfunction getColor(color, idx) {\r\n return typeof color == 'string' ? color : color[idx % color.length];\r\n}\r\n/**\r\n * Internal method that draws the individual lines.\r\n */\r\nfunction drawLines(el, opts) {\r\n var borderRadius = (Math.round(opts.corners * opts.width * 500) / 1000) + 'px';\r\n var shadow = 'none';\r\n if (opts.shadow === true) {\r\n shadow = '0 2px 4px #000'; // default shadow\r\n }\r\n else if (typeof opts.shadow === 'string') {\r\n shadow = opts.shadow;\r\n }\r\n var shadows = parseBoxShadow(shadow);\r\n for (var i = 0; i < opts.lines; i++) {\r\n var degrees = ~~(360 / opts.lines * i + opts.rotate);\r\n var backgroundLine = css(document.createElement('div'), {\r\n position: 'absolute',\r\n top: -opts.width / 2 + \"px\",\r\n width: (opts.length + opts.width) + 'px',\r\n height: opts.width + 'px',\r\n background: getColor(opts.fadeColor, i),\r\n borderRadius: borderRadius,\r\n transformOrigin: 'left',\r\n transform: \"rotate(\" + degrees + \"deg) translateX(\" + opts.radius + \"px)\",\r\n });\r\n var line = css(document.createElement('div'), {\r\n width: '100%',\r\n height: '100%',\r\n background: getColor(opts.color, i),\r\n borderRadius: borderRadius,\r\n boxShadow: normalizeShadow(shadows, degrees),\r\n opacity: opts.opacity,\r\n });\r\n backgroundLine.appendChild(line);\r\n el.appendChild(backgroundLine);\r\n }\r\n}\r\nfunction parseBoxShadow(boxShadow) {\r\n var regex = /^\\s*([a-zA-Z]+\\s+)?(-?\\d+(\\.\\d+)?)([a-zA-Z]*)\\s+(-?\\d+(\\.\\d+)?)([a-zA-Z]*)(.*)$/;\r\n var shadows = [];\r\n for (var _i = 0, _a = boxShadow.split(','); _i < _a.length; _i++) {\r\n var shadow = _a[_i];\r\n var matches = shadow.match(regex);\r\n if (matches === null) {\r\n continue; // invalid syntax\r\n }\r\n var x = +matches[2];\r\n var y = +matches[5];\r\n var xUnits = matches[4];\r\n var yUnits = matches[7];\r\n if (x === 0 && !xUnits) {\r\n xUnits = yUnits;\r\n }\r\n if (y === 0 && !yUnits) {\r\n yUnits = xUnits;\r\n }\r\n if (xUnits !== yUnits) {\r\n continue; // units must match to use as coordinates\r\n }\r\n shadows.push({\r\n prefix: matches[1] || '',\r\n x: x,\r\n y: y,\r\n xUnits: xUnits,\r\n yUnits: yUnits,\r\n end: matches[8],\r\n });\r\n }\r\n return shadows;\r\n}\r\n/**\r\n * Modify box-shadow x/y offsets to counteract rotation\r\n */\r\nfunction normalizeShadow(shadows, degrees) {\r\n var normalized = [];\r\n for (var _i = 0, shadows_1 = shadows; _i < shadows_1.length; _i++) {\r\n var shadow = shadows_1[_i];\r\n var xy = convertOffset(shadow.x, shadow.y, degrees);\r\n normalized.push(shadow.prefix + xy[0] + shadow.xUnits + ' ' + xy[1] + shadow.yUnits + shadow.end);\r\n }\r\n return normalized.join(', ');\r\n}\r\nfunction convertOffset(x, y, degrees) {\r\n var radians = degrees * Math.PI / 180;\r\n var sin = Math.sin(radians);\r\n var cos = Math.cos(radians);\r\n return [\r\n Math.round((x * cos + y * sin) * 1000) / 1000,\r\n Math.round((-x * sin + y * cos) * 1000) / 1000,\r\n ];\r\n}\r\n","import Component from '../Component';\nimport { Spinner } from 'spin.js';\n\n/**\n * The `LoadingIndicator` component displays a loading spinner with spin.js. It\n * may have the following special props:\n *\n * - `size` The spin.js size preset to use. Defaults to 'small'.\n *\n * All other props will be assigned as attributes on the element.\n */\nexport default class LoadingIndicator extends Component {\n view() {\n const attrs = Object.assign({}, this.props);\n\n attrs.className = 'LoadingIndicator ' + (attrs.className || '');\n delete attrs.size;\n\n return <div {...attrs}>{m.trust(' ')}</div>;\n }\n\n config(isInitialized) {\n if (isInitialized) return;\n\n const options = { zIndex: 'auto', color: this.$().css('color') };\n\n switch (this.props.size) {\n case 'large':\n Object.assign(options, { lines: 10, length: 8, width: 4, radius: 8 });\n break;\n\n case 'tiny':\n Object.assign(options, { lines: 8, length: 2, width: 2, radius: 3 });\n break;\n\n default:\n Object.assign(options, { lines: 8, length: 4, width: 3, radius: 5 });\n }\n\n new Spinner(options).spin(this.element);\n }\n}\n","/**\n * The `computed` utility creates a function that will cache its output until\n * any of the dependent values are dirty.\n *\n * @param {...String} dependentKeys The keys of the dependent values.\n * @param {function} compute The function which computes the value using the\n * dependent values.\n * @return {Function}\n */\nexport default function computed(...dependentKeys) {\n const keys = dependentKeys.slice(0, -1);\n const compute = dependentKeys.slice(-1)[0];\n\n const dependentValues = {};\n let computedValue;\n\n return function() {\n let recompute = false;\n\n // Read all of the dependent values. If any of them have changed since last\n // time, then we'll want to recompute our output.\n keys.forEach(key => {\n const value = typeof this[key] === 'function' ? this[key]() : this[key];\n\n if (dependentValues[key] !== value) {\n recompute = true;\n dependentValues[key] = value;\n }\n });\n\n if (recompute) {\n computedValue = compute.apply(this, keys.map(key => dependentValues[key]));\n }\n\n return computedValue;\n };\n}\n","/**\n * The `username` helper displays a user's username in a <span class=\"username\">\n * tag. If the user doesn't exist, the username will be displayed as [deleted].\n *\n * @param {User} user\n * @return {Object}\n */\nexport default function username(user) {\n const name = (user && user.displayName()) || app.translator.trans('core.lib.username.deleted_text');\n\n return <span className=\"username\">{name}</span>;\n}\n","import Component from '../Component';\nimport Button from './Button';\nimport listItems from '../helpers/listItems';\nimport extract from '../utils/extract';\n\n/**\n * The `Alert` component represents an alert box, which contains a message,\n * some controls, and may be dismissible.\n *\n * The alert may have the following special props:\n *\n * - `type` The type of alert this is. Will be used to give the alert a class\n * name of `Alert--{type}`.\n * - `controls` An array of controls to show in the alert.\n * - `dismissible` Whether or not the alert can be dismissed.\n * - `ondismiss` A callback to run when the alert is dismissed.\n *\n * All other props will be assigned as attributes on the alert element.\n */\nexport default class Alert extends Component {\n view() {\n const attrs = Object.assign({}, this.props);\n\n const type = extract(attrs, 'type');\n attrs.className = 'Alert Alert--' + type + ' ' + (attrs.className || '');\n\n const children = extract(attrs, 'children');\n const controls = extract(attrs, 'controls') || [];\n\n // If the alert is meant to be dismissible (which is the case by default),\n // then we will create a dismiss button to append as the final control in\n // the alert.\n const dismissible = extract(attrs, 'dismissible');\n const ondismiss = extract(attrs, 'ondismiss');\n const dismissControl = [];\n\n if (dismissible || dismissible === undefined) {\n dismissControl.push(\n <Button\n icon=\"fas fa-times\"\n className=\"Button Button--link Button--icon Alert-dismiss\"\n onclick={ondismiss}/>\n );\n }\n\n return (\n <div {...attrs}>\n <span className=\"Alert-body\">\n {children}\n </span>\n <ul className=\"Alert-controls\">\n {listItems(controls.concat(dismissControl))}\n </ul>\n </div>\n );\n }\n}\n","import Button from './Button';\n\n/**\n * The `LinkButton` component defines a `Button` which links to a route.\n *\n * ### Props\n *\n * All of the props accepted by `Button`, plus:\n *\n * - `active` Whether or not the page that this button links to is currently\n * active.\n * - `href` The URL to link to. If the current URL `m.route()` matches this,\n * the `active` prop will automatically be set to true.\n */\nexport default class LinkButton extends Button {\n static initProps(props) {\n props.active = this.isActive(props);\n props.config = props.config || m.route;\n }\n\n view() {\n const vdom = super.view();\n\n vdom.tag = 'a';\n\n return vdom;\n }\n\n /**\n * Determine whether a component with the given props is 'active'.\n *\n * @param {Object} props\n * @return {Boolean}\n */\n static isActive(props) {\n return typeof props.active !== 'undefined'\n ? props.active\n : m.route() === props.href;\n }\n}\n","export default function _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}","import Component from '../Component';\n\n/**\n * The `Separator` component defines a menu separator item.\n */\nclass Separator extends Component {\n view() {\n return <li className=\"Dropdown-separator\"/>;\n }\n}\n\nSeparator.isListItem = true;\n\nexport default Separator;\n","/**\n * The `humanTime` utility converts a date to a localized, human-readable time-\n * ago string.\n *\n * @param {Date} time\n * @return {String}\n */\nexport default function humanTime(time) {\n let m = moment(time);\n const now = moment();\n\n // To prevent showing things like \"in a few seconds\" due to small offsets\n // between client and server time, we always reset future dates to the\n // current time. This will result in \"just now\" being shown instead.\n if (m.isAfter(now)) {\n m = now;\n }\n\n const day = 864e5;\n const diff = m.diff(moment());\n let ago = null;\n\n // If this date was more than a month ago, we'll show the name of the month\n // in the string. If it wasn't this year, we'll show the year as well.\n if (diff < -30 * day) {\n if (m.year() === moment().year()) {\n ago = m.format('D MMM');\n } else {\n ago = m.format('MMM \\'YY');\n }\n } else {\n ago = m.fromNow();\n }\n\n return ago;\n};\n","import Component from '../Component';\nimport icon from '../helpers/icon';\nimport extract from '../utils/extract';\n\n/**\n * The `Badge` component represents a user/discussion badge, indicating some\n * status (e.g. a discussion is stickied, a user is an admin).\n *\n * A badge may have the following special props:\n *\n * - `type` The type of badge this is. This will be used to give the badge a\n * class name of `Badge--{type}`.\n * - `icon` The name of an icon to show inside the badge.\n * - `label`\n *\n * All other props will be assigned as attributes on the badge element.\n */\nexport default class Badge extends Component {\n view() {\n const attrs = Object.assign({}, this.props);\n const type = extract(attrs, 'type');\n const iconName = extract(attrs, 'icon');\n\n attrs.className = 'Badge ' + (type ? 'Badge--' + type : '') + ' ' + (attrs.className || '');\n attrs.title = extract(attrs, 'label') || '';\n\n return (\n <span {...attrs}>\n {iconName ? icon(iconName, {className: 'Badge-icon'}) : m.trust(' ')}\n </span>\n );\n }\n\n config(isInitialized) {\n if (isInitialized) return;\n\n if (this.props.label) this.$().tooltip({container: 'body'});\n }\n}\n","import Component from '../Component';\nimport listItems from '../helpers/listItems';\n\n/**\n * The `FieldSet` component defines a collection of fields, displayed in a list\n * underneath a title. Accepted properties are:\n *\n * - `className` The class name for the fieldset.\n * - `label` The title of this group of fields.\n *\n * The children should be an array of items to show in the fieldset.\n */\nexport default class FieldSet extends Component {\n view() {\n return (\n <fieldset className={this.props.className}>\n <legend>{this.props.label}</legend>\n <ul>{listItems(this.props.children)}</ul>\n </fieldset>\n );\n }\n}\n","/**\n * The `classList` utility creates a list of class names by joining an object's\n * keys, but only for values which are truthy.\n *\n * @example\n * classList({ foo: true, bar: false, qux: 'qaz' });\n * // \"foo qux\"\n *\n * @param {Object} classes\n * @return {String}\n */\nexport default function classList(classes) {\n let classNames;\n\n if (classes instanceof Array) {\n classNames = classes.filter(name => name);\n } else {\n classNames = [];\n\n for (const i in classes) {\n if (classes[i]) classNames.push(i);\n }\n }\n\n return classNames.join(' ');\n}\n","var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || Function(\"return this\")() || (1, eval)(\"this\");\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === \"object\") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n","/**\n * Truncate a string to the given length, appending ellipses if necessary.\n *\n * @param {String} string\n * @param {Number} length\n * @param {Number} [start=0]\n * @return {String}\n */\nexport function truncate(string, length, start = 0) {\n return (start > 0 ? '...' : '') +\n string.substring(start, start + length) +\n (string.length > start + length ? '...' : '');\n}\n\n/**\n * Create a slug out of the given string. Non-alphanumeric characters are\n * converted to hyphens.\n *\n * @param {String} string\n * @return {String}\n */\nexport function slug(string) {\n return string.toLowerCase()\n .replace(/[^a-z0-9]/gi, '-')\n .replace(/-+/g, '-')\n .replace(/-$|^-/g, '');\n}\n\n/**\n * Strip HTML tags and quotes out of the given string, replacing them with\n * meaningful punctuation.\n *\n * @param {String} string\n * @return {String}\n */\nexport function getPlainContent(string) {\n const html = string\n .replace(/(<\\/p>|<br>)/g, '$1 ')\n .replace(/<img\\b[^>]*>/ig, ' ');\n\n const dom = $('<div/>').html(html);\n\n dom.find(getPlainContent.removeSelectors.join(',')).remove();\n\n return dom.text().replace(/\\s+/g, ' ').trim();\n}\n\n/**\n * An array of DOM selectors to remove when getting plain content.\n *\n * @type {Array}\n */\ngetPlainContent.removeSelectors = ['blockquote', 'script'];\n\n/**\n * Make a string's first character uppercase.\n *\n * @param {String} string\n * @return {String}\n */\nexport function ucfirst(string) {\n return string.substr(0, 1).toUpperCase() + string.substr(1);\n}\n","import Dropdown from './Dropdown';\nimport icon from '../helpers/icon';\n\n/**\n * The `SelectDropdown` component is the same as a `Dropdown`, except the toggle\n * button's label is set as the label of the first child which has a truthy\n * `active` prop.\n *\n * ### Props\n *\n * - `caretIcon`\n * - `defaultLabel`\n */\nexport default class SelectDropdown extends Dropdown {\n static initProps(props) {\n props.caretIcon = typeof props.caretIcon !== 'undefined' ? props.caretIcon : 'fas fa-sort';\n\n super.initProps(props);\n\n props.className += ' Dropdown--select';\n }\n\n getButtonContent() {\n const activeChild = this.props.children.filter(child => child.props.active)[0];\n let label = activeChild && activeChild.props.children || this.props.defaultLabel;\n\n if (label instanceof Array) label = label[0];\n\n return [\n <span className=\"Button-label\">{label}</span>,\n icon(this.props.caretIcon, {className: 'Button-caret'})\n ];\n }\n}\n","import Badge from './Badge';\n\nexport default class GroupBadge extends Badge {\n static initProps(props) {\n super.initProps(props);\n\n if (props.group) {\n props.icon = props.group.icon();\n props.style = {backgroundColor: props.group.color()};\n props.label = typeof props.label === 'undefined' ? props.group.nameSingular() : props.label;\n props.type = 'group--' + props.group.id();\n\n delete props.group;\n }\n }\n}\n","import { truncate } from '../utils/string';\n\n/**\n * The `highlight` helper searches for a word phrase in a string, and wraps\n * matches with the <mark> tag.\n *\n * @param {String} string The string to highlight.\n * @param {String|RegExp} phrase The word or words to highlight.\n * @param {Integer} [length] The number of characters to truncate the string to.\n * The string will be truncated surrounding the first match.\n * @return {Object}\n */\nexport default function highlight(string, phrase, length) {\n if (!phrase && !length) return string;\n\n // Convert the word phrase into a global regular expression (if it isn't\n // already) so we can search the string for matched.\n const regexp = phrase instanceof RegExp ? phrase : new RegExp(phrase, 'gi');\n\n let highlighted = string;\n let start = 0;\n\n // If a length was given, the truncate the string surrounding the first match.\n if (length) {\n if (phrase) start = Math.max(0, string.search(regexp) - length / 2);\n\n highlighted = truncate(highlighted, length, start);\n }\n\n // Convert the string into HTML entities, then highlight all matches with\n // <mark> tags. Then we will return the result as a trusted HTML string.\n highlighted = $('<div/>').text(highlighted).html();\n\n if (phrase) highlighted = highlighted.replace(regexp, '<mark>$&</mark>');\n\n return m.trust(highlighted);\n}\n","const scroll = window.requestAnimationFrame ||\n window.webkitRequestAnimationFrame ||\n window.mozRequestAnimationFrame ||\n window.msRequestAnimationFrame ||\n window.oRequestAnimationFrame ||\n (callback => window.setTimeout(callback, 1000 / 60));\n\n/**\n * The `ScrollListener` class sets up a listener that handles window scroll\n * events.\n */\nexport default class ScrollListener {\n /**\n * @param {Function} callback The callback to run when the scroll position\n * changes.\n * @public\n */\n constructor(callback) {\n this.callback = callback;\n this.lastTop = -1;\n }\n\n /**\n * On each animation frame, as long as the listener is active, run the\n * `update` method.\n *\n * @protected\n */\n loop() {\n if (!this.active) return;\n\n this.update();\n\n scroll(this.loop.bind(this));\n }\n\n /**\n * Check if the scroll position has changed; if it has, run the handler.\n *\n * @param {Boolean} [force=false] Whether or not to force the handler to be\n * run, even if the scroll position hasn't changed.\n * @public\n */\n update(force) {\n const top = window.pageYOffset;\n\n if (this.lastTop !== top || force) {\n this.callback(top);\n this.lastTop = top;\n }\n }\n\n /**\n * Start listening to and handling the window's scroll position.\n *\n * @public\n */\n start() {\n if (!this.active) {\n this.active = true;\n this.loop();\n }\n }\n\n /**\n * Stop listening to and handling the window's scroll position.\n *\n * @public\n */\n stop() {\n this.active = false;\n }\n}\n","/**\n * Extend an object's method by running its output through a mutating callback\n * every time it is called.\n *\n * The callback accepts the method's return value and should perform any\n * mutations directly on this value. For this reason, this function will not be\n * effective on methods which return scalar values (numbers, strings, booleans).\n *\n * Care should be taken to extend the correct object – in most cases, a class'\n * prototype will be the desired target of extension, not the class itself.\n *\n * @example\n * extend(Discussion.prototype, 'badges', function(badges) {\n * // do something with `badges`\n * });\n *\n * @param {Object} object The object that owns the method\n * @param {String} method The name of the method to extend\n * @param {function} callback A callback which mutates the method's output\n */\nexport function extend(object, method, callback) {\n const original = object[method];\n\n object[method] = function(...args) {\n const value = original ? original.apply(this, args) : undefined;\n\n callback.apply(this, [value].concat(args));\n\n return value;\n };\n\n Object.assign(object[method], original);\n}\n\n/**\n * Override an object's method by replacing it with a new function, so that the\n * new function will be run every time the object's method is called.\n *\n * The replacement function accepts the original method as its first argument,\n * which is like a call to 'super'. Any arguments passed to the original method\n * are also passed to the replacement.\n *\n * Care should be taken to extend the correct object – in most cases, a class'\n * prototype will be the desired target of extension, not the class itself.\n *\n * @example\n * override(Discussion.prototype, 'badges', function(original) {\n * const badges = original();\n * // do something with badges\n * return badges;\n * });\n *\n * @param {Object} object The object that owns the method\n * @param {String} method The name of the method to override\n * @param {function} newMethod The method to replace it with\n */\nexport function override(object, method, newMethod) {\n const original = object[method];\n\n object[method] = function(...args) {\n return newMethod.apply(this, [original.bind(this)].concat(args));\n };\n\n Object.assign(object[method], original);\n}\n","import Checkbox from './Checkbox';\n\n/**\n * The `Switch` component is a `Checkbox`, but with a switch display instead of\n * a tick/cross one.\n */\nexport default class Switch extends Checkbox {\n static initProps(props) {\n super.initProps(props);\n\n props.className = (props.className || '') + ' Checkbox--switch';\n }\n\n getDisplay() {\n return this.loading ? super.getDisplay() : '';\n }\n}\n","/*global ColorThief*/\n\nimport Model from '../Model';\nimport stringToColor from '../utils/stringToColor';\nimport ItemList from '../utils/ItemList';\nimport computed from '../utils/computed';\nimport GroupBadge from '../components/GroupBadge';\n\nexport default class User extends Model {}\n\nObject.assign(User.prototype, {\n username: Model.attribute('username'),\n displayName: Model.attribute('displayName'),\n email: Model.attribute('email'),\n isEmailConfirmed: Model.attribute('isEmailConfirmed'),\n password: Model.attribute('password'),\n\n avatarUrl: Model.attribute('avatarUrl'),\n preferences: Model.attribute('preferences'),\n groups: Model.hasMany('groups'),\n\n joinTime: Model.attribute('joinTime', Model.transformDate),\n lastSeenAt: Model.attribute('lastSeenAt', Model.transformDate),\n markedAllAsReadAt: Model.attribute('markedAllAsReadAt', Model.transformDate),\n unreadNotificationCount: Model.attribute('unreadNotificationCount'),\n newNotificationCount: Model.attribute('newNotificationCount'),\n\n discussionCount: Model.attribute('discussionCount'),\n commentCount: Model.attribute('commentCount'),\n\n canEdit: Model.attribute('canEdit'),\n canDelete: Model.attribute('canDelete'),\n\n avatarColor: null,\n color: computed('username', 'avatarUrl', 'avatarColor', function(username, avatarUrl, avatarColor) {\n // If we've already calculated and cached the dominant color of the user's\n // avatar, then we can return that in RGB format. If we haven't, we'll want\n // to calculate it. Unless the user doesn't have an avatar, in which case\n // we generate a color from their username.\n if (avatarColor) {\n return 'rgb(' + avatarColor.join(', ') + ')';\n } else if (avatarUrl) {\n this.calculateAvatarColor();\n return '';\n }\n\n return '#' + stringToColor(username);\n }),\n\n /**\n * Check whether or not the user has been seen in the last 5 minutes.\n *\n * @return {Boolean}\n * @public\n */\n isOnline() {\n return this.lastSeenAt() > moment().subtract(5, 'minutes').toDate();\n },\n\n /**\n * Get the Badge components that apply to this user.\n *\n * @return {ItemList}\n */\n badges() {\n const items = new ItemList();\n const groups = this.groups();\n\n if (groups) {\n groups.forEach(group => {\n items.add('group' + group.id(), GroupBadge.component({group}));\n });\n }\n\n return items;\n },\n\n /**\n * Calculate the dominant color of the user's avatar. The dominant color will\n * be set to the `avatarColor` property once it has been calculated.\n *\n * @protected\n */\n calculateAvatarColor() {\n const image = new Image();\n const user = this;\n\n image.onload = function() {\n const colorThief = new ColorThief();\n user.avatarColor = colorThief.getColor(this);\n user.freshness = new Date();\n m.redraw();\n };\n image.src = this.avatarUrl();\n },\n\n /**\n * Update the user's preferences.\n *\n * @param {Object} newPreferences\n * @return {Promise}\n */\n savePreferences(newPreferences) {\n const preferences = this.preferences();\n\n Object.assign(preferences, newPreferences);\n\n return this.save({preferences});\n }\n});\n","/**\n * The `SubtreeRetainer` class represents a Mithril virtual DOM subtree. It\n * keeps track of a number of pieces of data, allowing the subtree to be\n * retained if none of them have changed.\n *\n * @example\n * // constructor\n * this.subtree = new SubtreeRetainer(\n * () => this.props.post.freshness,\n * () => this.showing\n * );\n * this.subtree.check(() => this.props.user.freshness);\n *\n * // view\n * this.subtree.retain() || 'expensive expression'\n *\n * @see https://lhorie.github.io/mithril/mithril.html#persisting-dom-elements-across-route-changes\n */\nexport default class SubtreeRetainer {\n /**\n * @param {...callbacks} callbacks Functions returning data to keep track of.\n */\n constructor(...callbacks) {\n this.callbacks = callbacks;\n this.data = {};\n }\n\n /**\n * Return a virtual DOM directive that will retain a subtree if no data has\n * changed since the last check.\n *\n * @return {Object|false}\n * @public\n */\n retain() {\n let needsRebuild = false;\n\n this.callbacks.forEach((callback, i) => {\n const result = callback();\n\n if (result !== this.data[i]) {\n this.data[i] = result;\n needsRebuild = true;\n }\n });\n\n return needsRebuild ? false : {subtree: 'retain'};\n }\n\n /**\n * Add another callback to be checked.\n *\n * @param {...Function} callbacks\n * @public\n */\n check(...callbacks) {\n this.callbacks = this.callbacks.concat(callbacks);\n }\n\n /**\n * Invalidate the subtree, forcing it to be rerendered.\n *\n * @public\n */\n invalidate() {\n this.data = {};\n }\n}\n","import Model from '../Model';\nimport computed from '../utils/computed';\nimport ItemList from '../utils/ItemList';\nimport Badge from '../components/Badge';\n\nexport default class Discussion extends Model {}\n\nObject.assign(Discussion.prototype, {\n title: Model.attribute('title'),\n slug: Model.attribute('slug'),\n\n createdAt: Model.attribute('createdAt', Model.transformDate),\n user: Model.hasOne('user'),\n firstPost: Model.hasOne('firstPost'),\n\n lastPostedAt: Model.attribute('lastPostedAt', Model.transformDate),\n lastPostedUser: Model.hasOne('lastPostedUser'),\n lastPost: Model.hasOne('lastPost'),\n lastPostNumber: Model.attribute('lastPostNumber'),\n\n commentCount: Model.attribute('commentCount'),\n replyCount: computed('commentCount', commentCount => Math.max(0, commentCount - 1)),\n posts: Model.hasMany('posts'),\n mostRelevantPost: Model.hasOne('mostRelevantPost'),\n\n lastReadAt: Model.attribute('lastReadAt', Model.transformDate),\n lastReadPostNumber: Model.attribute('lastReadPostNumber'),\n isUnread: computed('unreadCount', unreadCount => !!unreadCount),\n isRead: computed('unreadCount', unreadCount => app.session.user && !unreadCount),\n\n hiddenAt: Model.attribute('hiddenAt', Model.transformDate),\n hiddenUser: Model.hasOne('hiddenUser'),\n isHidden: computed('hiddenAt', hiddenAt => !!hiddenAt),\n\n canReply: Model.attribute('canReply'),\n canRename: Model.attribute('canRename'),\n canHide: Model.attribute('canHide'),\n canDelete: Model.attribute('canDelete'),\n\n /**\n * Remove a post from the discussion's posts relationship.\n *\n * @param {Integer} id The ID of the post to remove.\n * @public\n */\n removePost(id) {\n const relationships = this.data.relationships;\n const posts = relationships && relationships.posts;\n\n if (posts) {\n posts.data.some((data, i) => {\n if (id === data.id) {\n posts.data.splice(i, 1);\n return true;\n }\n });\n }\n },\n\n /**\n * Get the estimated number of unread posts in this discussion for the current\n * user.\n *\n * @return {Integer}\n * @public\n */\n unreadCount() {\n const user = app.session.user;\n\n if (user && user.markedAllAsReadAt() < this.lastPostedAt()) {\n return Math.max(0, this.lastPostNumber() - (this.lastReadPostNumber() || 0));\n }\n\n return 0;\n },\n\n /**\n * Get the Badge components that apply to this discussion.\n *\n * @return {ItemList}\n * @public\n */\n badges() {\n const items = new ItemList();\n\n if (this.isHidden()) {\n items.add('hidden', <Badge type=\"hidden\" icon=\"fas fa-trash\" label={app.translator.trans('core.lib.badge.hidden_tooltip')}/>);\n }\n\n return items;\n },\n\n /**\n * Get a list of all of the post IDs in this discussion.\n *\n * @return {Array}\n * @public\n */\n postIds() {\n const posts = this.data.relationships.posts;\n\n return posts ? posts.data.map(link => link.id) : [];\n }\n});\n","import humanTimeUtil from '../utils/humanTime';\n\n/**\n * The `humanTime` helper displays a time in a human-friendly time-ago format\n * (e.g. '12 days ago'), wrapped in a <time> tag with other information about\n * the time.\n *\n * @param {Date} time\n * @return {Object}\n */\nexport default function humanTime(time) {\n const mo = moment(time);\n\n const datetime = mo.format();\n const full = mo.format('LLLL');\n const ago = humanTimeUtil(time);\n\n return <time pubdate datetime={datetime} title={full} data-humantime>{ago}</time>;\n}\n","import Component from '../Component';\nimport LoadingIndicator from './LoadingIndicator';\nimport icon from '../helpers/icon';\n\n/**\n * The `Checkbox` component defines a checkbox input.\n *\n * ### Props\n *\n * - `state` Whether or not the checkbox is checked.\n * - `className` The class name for the root element.\n * - `disabled` Whether or not the checkbox is disabled.\n * - `onchange` A callback to run when the checkbox is checked/unchecked.\n * - `children` A text label to display next to the checkbox.\n */\nexport default class Checkbox extends Component {\n init() {\n /**\n * Whether or not the checkbox's value is in the process of being saved.\n *\n * @type {Boolean}\n * @public\n */\n this.loading = false;\n }\n\n view() {\n let className = 'Checkbox ' + (this.props.state ? 'on' : 'off') + ' ' + (this.props.className || '');\n if (this.loading) className += ' loading';\n if (this.props.disabled) className += ' disabled';\n\n return (\n <label className={className}>\n <input type=\"checkbox\"\n checked={this.props.state}\n disabled={this.props.disabled}\n onchange={m.withAttr('checked', this.onchange.bind(this))}/>\n <div className=\"Checkbox-display\">\n {this.getDisplay()}\n </div>\n {this.props.children}\n </label>\n );\n }\n\n /**\n * Get the template for the checkbox's display (tick/cross icon).\n *\n * @return {*}\n * @protected\n */\n getDisplay() {\n return this.loading\n ? LoadingIndicator.component({size: 'tiny'})\n : icon(this.props.state ? 'fas fa-check' : 'fas fa-times');\n }\n\n /**\n * Run a callback when the state of the checkbox is changed.\n *\n * @param {Boolean} checked\n * @protected\n */\n onchange(checked) {\n if (this.props.onchange) this.props.onchange(checked, this);\n }\n}\n","export default class RequestError {\n constructor(status, responseText, options, xhr) {\n this.status = status;\n this.responseText = responseText;\n this.options = options;\n this.xhr = xhr;\n\n try {\n this.response = JSON.parse(responseText);\n } catch (e) {\n this.response = null;\n }\n\n this.alert = null;\n }\n}\n","import Component from '../Component';\nimport Button from './Button';\nimport LinkButton from './LinkButton';\n\n/**\n * The `Navigation` component displays a set of navigation buttons. Typically\n * this is just a back button which pops the app's History. If the user is on\n * the root page and there is no history to pop, then in some instances it may\n * show a button that toggles the app's drawer.\n *\n * If the app has a pane, it will also include a 'pin' button which toggles the\n * pinned state of the pane.\n *\n * Accepts the following props:\n *\n * - `className` The name of a class to set on the root element.\n * - `drawer` Whether or not to show a button to toggle the app's drawer if\n * there is no more history to pop.\n */\nexport default class Navigation extends Component {\n view() {\n const {history, pane} = app;\n\n return (\n <div className={'Navigation ButtonGroup ' + (this.props.className || '')}\n onmouseenter={pane && pane.show.bind(pane)}\n onmouseleave={pane && pane.onmouseleave.bind(pane)}>\n {history.canGoBack()\n ? [this.getBackButton(), this.getPaneButton()]\n : this.getDrawerButton()}\n </div>\n );\n }\n\n config(isInitialized, context) {\n // Since this component is 'above' the content of the page (that is, it is a\n // part of the global UI that persists between routes), we will flag the DOM\n // to be retained across route changes.\n context.retain = true;\n }\n\n /**\n * Get the back button.\n *\n * @return {Object}\n * @protected\n */\n getBackButton() {\n const {history} = app;\n const previous = history.getPrevious() || {};\n\n return LinkButton.component({\n className: 'Button Navigation-back Button--icon',\n href: history.backUrl(),\n icon: 'fas fa-chevron-left',\n title: previous.title,\n config: () => {},\n onclick: e => {\n if (e.shiftKey || e.ctrlKey || e.metaKey || e.which === 2) return;\n e.preventDefault();\n history.back();\n }\n });\n }\n\n /**\n * Get the pane pinned toggle button.\n *\n * @return {Object|String}\n * @protected\n */\n getPaneButton() {\n const {pane} = app;\n\n if (!pane || !pane.active) return '';\n\n return Button.component({\n className: 'Button Button--icon Navigation-pin' + (pane.pinned ? ' active' : ''),\n onclick: pane.togglePinned.bind(pane),\n icon: 'fas fa-thumbtack'\n });\n }\n\n /**\n * Get the drawer toggle button.\n *\n * @return {Object|String}\n * @protected\n */\n getDrawerButton() {\n if (!this.props.drawer) return '';\n\n const {drawer} = app;\n const user = app.session.user;\n\n return Button.component({\n className: 'Button Button--icon Navigation-drawer' +\n (user && user.newNotificationCount() ? ' new' : ''),\n onclick: e => {\n e.stopPropagation();\n drawer.show();\n },\n icon: 'fas fa-bars'\n });\n }\n}\n","import Component from '../Component';\n\nexport default function patchMithril(global) {\n const mo = global.m;\n\n const m = function(comp, ...args) {\n if (comp.prototype && comp.prototype instanceof Component) {\n let children = args.slice(1);\n if (children.length === 1 && Array.isArray(children[0])) {\n children = children[0]\n }\n\n return comp.component(args[0], children);\n }\n\n const node = mo.apply(this, arguments);\n\n if (node.attrs.bidi) {\n m.bidi(node, node.attrs.bidi);\n }\n\n if (node.attrs.route) {\n node.attrs.href = node.attrs.route;\n node.attrs.config = m.route;\n\n delete node.attrs.route;\n }\n\n return node;\n };\n\n Object.keys(mo).forEach(key => m[key] = mo[key]);\n\n /**\n * Redraw only if not in the middle of a computation (e.g. a route change).\n *\n * @return {void}\n */\n m.lazyRedraw = function() {\n m.startComputation();\n m.endComputation();\n };\n\n global.m = m;\n}\n","import Component from '../Component';\nimport Modal from './Modal';\n\n/**\n * The `ModalManager` component manages a modal dialog. Only one modal dialog\n * can be shown at once; loading a new component into the ModalManager will\n * overwrite the previous one.\n */\nexport default class ModalManager extends Component {\n init() {\n this.showing = false;\n this.component = null;\n }\n\n view() {\n return (\n <div className=\"ModalManager modal fade\">\n {this.component && this.component.render()}\n </div>\n );\n }\n\n config(isInitialized, context) {\n if (isInitialized) return;\n\n // Since this component is 'above' the content of the page (that is, it is a\n // part of the global UI that persists between routes), we will flag the DOM\n // to be retained across route changes.\n context.retain = true;\n\n this.$()\n .on('hidden.bs.modal', this.clear.bind(this))\n .on('shown.bs.modal', this.onready.bind(this));\n }\n\n /**\n * Show a modal dialog.\n *\n * @param {Modal} component\n * @public\n */\n show(component) {\n if (!(component instanceof Modal)) {\n throw new Error('The ModalManager component can only show Modal components');\n }\n\n clearTimeout(this.hideTimeout);\n\n this.showing = true;\n this.component = component;\n\n if (app.current) app.current.retain = true;\n\n m.redraw(true);\n\n this.$().modal({backdrop: this.component.isDismissible() ? true : 'static'}).modal('show');\n this.onready();\n }\n\n /**\n * Close the modal dialog.\n *\n * @public\n */\n close() {\n if (!this.showing) return;\n\n // Don't hide the modal immediately, because if the consumer happens to call\n // the `show` method straight after to show another modal dialog, it will\n // cause Bootstrap's modal JS to misbehave. Instead we will wait for a tiny\n // bit to give the `show` method the opportunity to prevent this from going\n // ahead.\n this.hideTimeout = setTimeout(() => {\n this.$().modal('hide');\n this.showing = false;\n });\n }\n\n /**\n * Clear content from the modal area.\n *\n * @protected\n */\n clear() {\n if (this.component) {\n this.component.onhide();\n }\n\n this.component = null;\n\n app.current.retain = false;\n\n m.lazyRedraw();\n }\n\n /**\n * When the modal dialog is ready to be used, tell it!\n *\n * @protected\n */\n onready() {\n if (this.component && this.component.onready) {\n this.component.onready(this.$());\n }\n }\n}\n","import Component from '../Component';\nimport Alert from './Alert';\n\n/**\n * The `AlertManager` component provides an area in which `Alert` components can\n * be shown and dismissed.\n */\nexport default class AlertManager extends Component {\n init() {\n /**\n * An array of Alert components which are currently showing.\n *\n * @type {Alert[]}\n * @protected\n */\n this.components = [];\n }\n\n view() {\n return (\n <div className=\"AlertManager\">\n {this.components.map(component => <div className=\"AlertManager-alert\">{component}</div>)}\n </div>\n );\n }\n\n config(isInitialized, context) {\n // Since this component is 'above' the content of the page (that is, it is a\n // part of the global UI that persists between routes), we will flag the DOM\n // to be retained across route changes.\n context.retain = true;\n }\n\n /**\n * Show an Alert in the alerts area.\n *\n * @param {Alert} component\n * @public\n */\n show(component) {\n if (!(component instanceof Alert)) {\n throw new Error('The AlertManager component can only show Alert components');\n }\n\n component.props.ondismiss = this.dismiss.bind(this, component);\n\n this.components.push(component);\n m.redraw();\n }\n\n /**\n * Dismiss an alert.\n *\n * @param {Alert} component\n * @public\n */\n dismiss(component) {\n const index = this.components.indexOf(component);\n\n if (index !== -1) {\n this.components.splice(index, 1);\n m.redraw();\n }\n }\n\n /**\n * Clear all alerts.\n *\n * @public\n */\n clear() {\n this.components = [];\n m.redraw();\n }\n}\n","import Modal from './Modal';\n\nexport default class RequestErrorModal extends Modal {\n className() {\n return 'RequestErrorModal Modal--large';\n }\n\n title() {\n return this.props.error.xhr\n ? this.props.error.xhr.status+' '+this.props.error.xhr.statusText\n : '';\n }\n\n content() {\n let responseText;\n\n try {\n responseText = JSON.stringify(JSON.parse(this.props.error.responseText), null, 2);\n } catch (e) {\n responseText = this.props.error.responseText;\n }\n\n return <div className=\"Modal-body\">\n <pre>\n {this.props.error.options.method} {this.props.error.options.url}<br/><br/>\n {responseText}\n </pre>\n </div>;\n }\n}\n","import User from './models/User';\nimport username from './helpers/username';\nimport extract from './utils/extract';\n\n/**\n * Translator with the same API as Symfony's.\n *\n * Derived from https://github.com/willdurand/BazingaJsTranslationBundle\n * which is available under the MIT License.\n * Copyright (c) William Durand <william.durand1@gmail.com>\n */\nexport default class Translator {\n constructor() {\n /**\n * A map of translation keys to their translated values.\n *\n * @type {Object}\n * @public\n */\n this.translations = {};\n\n this.locale = null;\n }\n\n addTranslations(translations) {\n Object.assign(this.translations, translations);\n }\n\n trans(id, parameters) {\n const translation = this.translations[id];\n\n if (translation) {\n return this.apply(translation, parameters || {});\n }\n\n return id;\n }\n\n transChoice(id, number, parameters) {\n let translation = this.translations[id];\n\n if (translation) {\n number = parseInt(number, 10);\n\n translation = this.pluralize(translation, number);\n\n return this.apply(translation, parameters || {});\n }\n\n return id;\n }\n\n apply(translation, input) {\n // If we've been given a user model as one of the input parameters, then\n // we'll extract the username and use that for the translation. In the\n // future there should be a hook here to inspect the user and change the\n // translation key. This will allow a gender property to determine which\n // translation key is used.\n if ('user' in input) {\n const user = extract(input, 'user');\n\n if (!input.username) input.username = username(user);\n }\n\n translation = translation.split(new RegExp('({[a-z0-9_]+}|</?[a-z0-9_]+>)', 'gi'));\n\n const hydrated = [];\n const open = [hydrated];\n\n translation.forEach(part => {\n const match = part.match(new RegExp('{([a-z0-9_]+)}|<(/?)([a-z0-9_]+)>', 'i'));\n\n if (match) {\n if (match[1]) {\n open[0].push(input[match[1]]);\n } else if (match[3]) {\n if (match[2]) {\n open.shift();\n } else {\n let tag = input[match[3]] || {tag: match[3], children: []};\n open[0].push(tag);\n open.unshift(tag.children || tag);\n }\n }\n } else {\n open[0].push(part);\n }\n });\n\n return hydrated.filter(part => part);\n }\n\n pluralize(translation, number) {\n const sPluralRegex = new RegExp(/^\\w+\\: +(.+)$/),\n cPluralRegex = new RegExp(/^\\s*((\\{\\s*(\\-?\\d+[\\s*,\\s*\\-?\\d+]*)\\s*\\})|([\\[\\]])\\s*(-Inf|\\-?\\d+)\\s*,\\s*(\\+?Inf|\\-?\\d+)\\s*([\\[\\]]))\\s?(.+?)$/),\n iPluralRegex = new RegExp(/^\\s*(\\{\\s*(\\-?\\d+[\\s*,\\s*\\-?\\d+]*)\\s*\\})|([\\[\\]])\\s*(-Inf|\\-?\\d+)\\s*,\\s*(\\+?Inf|\\-?\\d+)\\s*([\\[\\]])/),\n standardRules = [],\n explicitRules = [];\n\n translation.split('|').forEach(part => {\n if (cPluralRegex.test(part)) {\n const matches = part.match(cPluralRegex);\n explicitRules[matches[0]] = matches[matches.length - 1];\n } else if (sPluralRegex.test(part)) {\n const matches = part.match(sPluralRegex);\n standardRules.push(matches[1]);\n } else {\n standardRules.push(part);\n }\n });\n\n explicitRules.forEach((rule, e) => {\n if (iPluralRegex.test(e)) {\n const matches = e.match(iPluralRegex);\n\n if (matches[1]) {\n const ns = matches[2].split(',');\n\n for (let n in ns) {\n if (number == ns[n]) {\n return explicitRules[e];\n }\n }\n } else {\n var leftNumber = this.convertNumber(matches[4]);\n var rightNumber = this.convertNumber(matches[5]);\n\n if (('[' === matches[3] ? number >= leftNumber : number > leftNumber) &&\n (']' === matches[6] ? number <= rightNumber : number < rightNumber)) {\n return explicitRules[e];\n }\n }\n }\n });\n\n return standardRules[this.pluralPosition(number, this.locale)] || standardRules[0] || undefined;\n }\n\n convertNumber(number) {\n if ('-Inf' === number) {\n return Number.NEGATIVE_INFINITY;\n } else if ('+Inf' === number || 'Inf' === number) {\n return Number.POSITIVE_INFINITY;\n }\n\n return parseInt(number, 10);\n }\n\n pluralPosition(number, locale) {\n if ('pt_BR' === locale) {\n locale = 'xbr';\n }\n\n if (locale.length > 3) {\n locale = locale.split('_')[0];\n }\n\n switch (locale) {\n case 'bo':\n case 'dz':\n case 'id':\n case 'ja':\n case 'jv':\n case 'ka':\n case 'km':\n case 'kn':\n case 'ko':\n case 'ms':\n case 'th':\n case 'vi':\n case 'zh':\n return 0;\n\n case 'af':\n case 'az':\n case 'bn':\n case 'bg':\n case 'ca':\n case 'da':\n case 'de':\n case 'el':\n case 'en':\n case 'eo':\n case 'es':\n case 'et':\n case 'eu':\n case 'fa':\n case 'fi':\n case 'fo':\n case 'fur':\n case 'fy':\n case 'gl':\n case 'gu':\n case 'ha':\n case 'he':\n case 'hu':\n case 'is':\n case 'it':\n case 'ku':\n case 'lb':\n case 'ml':\n case 'mn':\n case 'mr':\n case 'nah':\n case 'nb':\n case 'ne':\n case 'nl':\n case 'nn':\n case 'no':\n case 'om':\n case 'or':\n case 'pa':\n case 'pap':\n case 'ps':\n case 'pt':\n case 'so':\n case 'sq':\n case 'sv':\n case 'sw':\n case 'ta':\n case 'te':\n case 'tk':\n case 'tr':\n case 'ur':\n case 'zu':\n return (number == 1) ? 0 : 1;\n\n case 'am':\n case 'bh':\n case 'fil':\n case 'fr':\n case 'gun':\n case 'hi':\n case 'ln':\n case 'mg':\n case 'nso':\n case 'xbr':\n case 'ti':\n case 'wa':\n return ((number === 0) || (number == 1)) ? 0 : 1;\n\n case 'be':\n case 'bs':\n case 'hr':\n case 'ru':\n case 'sr':\n case 'uk':\n return ((number % 10 == 1) && (number % 100 != 11)) ? 0 : (((number % 10 >= 2) && (number % 10 <= 4) && ((number % 100 < 10) || (number % 100 >= 20))) ? 1 : 2);\n\n case 'cs':\n case 'sk':\n return (number == 1) ? 0 : (((number >= 2) && (number <= 4)) ? 1 : 2);\n\n case 'ga':\n return (number == 1) ? 0 : ((number == 2) ? 1 : 2);\n\n case 'lt':\n return ((number % 10 == 1) && (number % 100 != 11)) ? 0 : (((number % 10 >= 2) && ((number % 100 < 10) || (number % 100 >= 20))) ? 1 : 2);\n\n case 'sl':\n return (number % 100 == 1) ? 0 : ((number % 100 == 2) ? 1 : (((number % 100 == 3) || (number % 100 == 4)) ? 2 : 3));\n\n case 'mk':\n return (number % 10 == 1) ? 0 : 1;\n\n case 'mt':\n return (number == 1) ? 0 : (((number === 0) || ((number % 100 > 1) && (number % 100 < 11))) ? 1 : (((number % 100 > 10) && (number % 100 < 20)) ? 2 : 3));\n\n case 'lv':\n return (number === 0) ? 0 : (((number % 10 == 1) && (number % 100 != 11)) ? 1 : 2);\n\n case 'pl':\n return (number == 1) ? 0 : (((number % 10 >= 2) && (number % 10 <= 4) && ((number % 100 < 12) || (number % 100 > 14))) ? 1 : 2);\n\n case 'cy':\n return (number == 1) ? 0 : ((number == 2) ? 1 : (((number == 8) || (number == 11)) ? 2 : 3));\n\n case 'ro':\n return (number == 1) ? 0 : (((number === 0) || ((number % 100 > 0) && (number % 100 < 20))) ? 1 : 2);\n\n case 'ar':\n return (number === 0) ? 0 : ((number == 1) ? 1 : ((number == 2) ? 2 : (((number >= 3) && (number <= 10)) ? 3 : (((number >= 11) && (number <= 99)) ? 4 : 5))));\n\n default:\n return 0;\n }\n }\n}\n","function hsvToRgb(h, s, v) {\n let r;\n let g;\n let b;\n\n const i = Math.floor(h * 6);\n const f = h * 6 - i;\n const p = v * (1 - s);\n const q = v * (1 - f * s);\n const t = v * (1 - (1 - f) * s);\n\n switch (i % 6) {\n case 0: r = v; g = t; b = p; break;\n case 1: r = q; g = v; b = p; break;\n case 2: r = p; g = v; b = t; break;\n case 3: r = p; g = q; b = v; break;\n case 4: r = t; g = p; b = v; break;\n case 5: r = v; g = p; b = q; break;\n }\n\n return {\n r: Math.floor(r * 255),\n g: Math.floor(g * 255),\n b: Math.floor(b * 255)\n };\n}\n\n/**\n * Convert the given string to a unique color.\n *\n * @param {String} string\n * @return {String}\n */\nexport default function stringToColor(string) {\n let num = 0;\n\n // Convert the username into a number based on the ASCII value of each\n // character.\n for (let i = 0; i < string.length; i++) {\n num += string.charCodeAt(i);\n }\n\n // Construct a color using the remainder of that number divided by 360, and\n // some predefined saturation and value values.\n const hue = num % 360;\n const rgb = hsvToRgb(hue / 360, 0.3, 0.9);\n\n return '' + rgb.r.toString(16) + rgb.g.toString(16) + rgb.b.toString(16);\n}\n","/**\n * The `Store` class defines a local data store, and provides methods to\n * retrieve data from the API.\n */\nexport default class Store {\n constructor(models) {\n /**\n * The local data store. A tree of resource types to IDs, such that\n * accessing data[type][id] will return the model for that type/ID.\n *\n * @type {Object}\n * @protected\n */\n this.data = {};\n\n /**\n * The model registry. A map of resource types to the model class that\n * should be used to represent resources of that type.\n *\n * @type {Object}\n * @public\n */\n this.models = models;\n }\n\n /**\n * Push resources contained within an API payload into the store.\n *\n * @param {Object} payload\n * @return {Model|Model[]} The model(s) representing the resource(s) contained\n * within the 'data' key of the payload.\n * @public\n */\n pushPayload(payload) {\n if (payload.included) payload.included.map(this.pushObject.bind(this));\n\n const result = payload.data instanceof Array\n ? payload.data.map(this.pushObject.bind(this))\n : this.pushObject(payload.data);\n\n // Attach the original payload to the model that we give back. This is\n // useful to consumers as it allows them to access meta information\n // associated with their request.\n result.payload = payload;\n\n return result;\n }\n\n /**\n * Create a model to represent a resource object (or update an existing one),\n * and push it into the store.\n *\n * @param {Object} data The resource object\n * @return {Model|null} The model, or null if no model class has been\n * registered for this resource type.\n * @public\n */\n pushObject(data) {\n if (!this.models[data.type]) return null;\n\n const type = this.data[data.type] = this.data[data.type] || {};\n\n if (type[data.id]) {\n type[data.id].pushData(data);\n } else {\n type[data.id] = this.createRecord(data.type, data);\n }\n\n type[data.id].exists = true;\n\n return type[data.id];\n }\n\n /**\n * Make a request to the API to find record(s) of a specific type.\n *\n * @param {String} type The resource type.\n * @param {Integer|Integer[]|Object} [id] The ID(s) of the model(s) to retrieve.\n * Alternatively, if an object is passed, it will be handled as the\n * `query` parameter.\n * @param {Object} [query]\n * @param {Object} [options]\n * @return {Promise}\n * @public\n */\n find(type, id, query = {}, options = {}) {\n let data = query;\n let url = app.forum.attribute('apiUrl') + '/' + type;\n\n if (id instanceof Array) {\n url += '?filter[id]=' + id.join(',');\n } else if (typeof id === 'object') {\n data = id;\n } else if (id) {\n url += '/' + id;\n }\n\n return app.request(Object.assign({\n method: 'GET',\n url,\n data\n }, options)).then(this.pushPayload.bind(this));\n }\n\n /**\n * Get a record from the store by ID.\n *\n * @param {String} type The resource type.\n * @param {Integer} id The resource ID.\n * @return {Model}\n * @public\n */\n getById(type, id) {\n return this.data[type] && this.data[type][id];\n }\n\n /**\n * Get a record from the store by the value of a model attribute.\n *\n * @param {String} type The resource type.\n * @param {String} key The name of the method on the model.\n * @param {*} value The value of the model attribute.\n * @return {Model}\n * @public\n */\n getBy(type, key, value) {\n return this.all(type).filter(model => model[key]() === value)[0];\n }\n\n /**\n * Get all loaded records of a specific type.\n *\n * @param {String} type\n * @return {Model[]}\n * @public\n */\n all(type) {\n const records = this.data[type];\n\n return records ? Object.keys(records).map(id => records[id]) : [];\n }\n\n /**\n * Remove the given model from the store.\n *\n * @param {Model} model\n */\n remove(model) {\n delete this.data[model.data.type][model.id()];\n }\n\n /**\n * Create a new record of the given type.\n *\n * @param {String} type The resource type\n * @param {Object} [data] Any data to initialize the model with\n * @return {Model}\n * @public\n */\n createRecord(type, data = {}) {\n data.type = data.type || type;\n\n return new (this.models[type])(data, this);\n }\n}\n","/**\n * The `Session` class defines the current user session. It stores a reference\n * to the current authenticated user, and provides methods to log in/out.\n */\nexport default class Session {\n constructor(user, csrfToken) {\n /**\n * The current authenticated user.\n *\n * @type {User|null}\n * @public\n */\n this.user = user;\n\n /**\n * The CSRF token.\n *\n * @type {String|null}\n * @public\n */\n this.csrfToken = csrfToken;\n }\n\n /**\n * Attempt to log in a user.\n *\n * @param {String} identification The username/email.\n * @param {String} password\n * @param {Object} [options]\n * @return {Promise}\n * @public\n */\n login(data, options = {}) {\n return app.request(Object.assign({\n method: 'POST',\n url: app.forum.attribute('baseUrl') + '/login',\n data\n }, options));\n }\n\n /**\n * Log the user out.\n *\n * @public\n */\n logout() {\n window.location = app.forum.attribute('baseUrl') + '/logout?token=' + this.csrfToken;\n }\n}\n","/**\n * The `Drawer` class controls the page's drawer. The drawer is the area the\n * slides out from the left on mobile devices; it contains the header and the\n * footer.\n */\nexport default class Drawer {\n constructor() {\n // Set up an event handler so that whenever the content area is tapped,\n // the drawer will close.\n $('#content').click(e => {\n if (this.isOpen()) {\n e.preventDefault();\n this.hide();\n }\n });\n }\n\n /**\n * Check whether or not the drawer is currently open.\n *\n * @return {Boolean}\n * @public\n */\n isOpen() {\n return $('#app').hasClass('drawerOpen');\n }\n\n /**\n * Hide the drawer.\n *\n * @public\n */\n hide() {\n $('#app').removeClass('drawerOpen');\n\n if (this.$backdrop) this.$backdrop.remove();\n }\n\n /**\n * Show the drawer.\n *\n * @public\n */\n show() {\n $('#app').addClass('drawerOpen');\n\n this.$backdrop = $('<div/>')\n .addClass('drawer-backdrop fade')\n .appendTo('body')\n .click(() => this.hide());\n\n setTimeout(() => this.$backdrop.addClass('in'));\n }\n}\n","/**\n * The `mapRoutes` utility converts a map of named application routes into a\n * format that can be understood by Mithril.\n *\n * @see https://lhorie.github.io/mithril/mithril.route.html#defining-routes\n * @param {Object} routes\n * @param {String} [basePath]\n * @return {Object}\n */\nexport default function mapRoutes(routes, basePath = '') {\n const map = {};\n\n for (const key in routes) {\n const route = routes[key];\n\n if (route.component) route.component.props.routeName = key;\n\n map[basePath + route.path] = route.component;\n }\n\n return map;\n}\n","import Model from '../Model';\n\nexport default class Forum extends Model {\n apiEndpoint() {\n return '/';\n }\n}\n","import Model from '../Model';\nimport computed from '../utils/computed';\nimport { getPlainContent } from '../utils/string';\n\nexport default class Post extends Model {}\n\nObject.assign(Post.prototype, {\n number: Model.attribute('number'),\n discussion: Model.hasOne('discussion'),\n\n createdAt: Model.attribute('createdAt', Model.transformDate),\n user: Model.hasOne('user'),\n contentType: Model.attribute('contentType'),\n content: Model.attribute('content'),\n contentHtml: Model.attribute('contentHtml'),\n contentPlain: computed('contentHtml', getPlainContent),\n\n editedAt: Model.attribute('editedAt', Model.transformDate),\n editedUser: Model.hasOne('editedUser'),\n isEdited: computed('editedAt', editedAt => !!editedAt),\n\n hiddenAt: Model.attribute('hiddenAt', Model.transformDate),\n hiddenUser: Model.hasOne('hiddenUser'),\n isHidden: computed('hiddenAt', hiddenAt => !!hiddenAt),\n\n canEdit: Model.attribute('canEdit'),\n canHide: Model.attribute('canHide'),\n canDelete: Model.attribute('canDelete')\n});\n","import Model from '../Model';\n\nexport default class Notification extends Model {}\n\nObject.assign(Notification.prototype, {\n contentType: Model.attribute('contentType'),\n content: Model.attribute('content'),\n createdAt: Model.attribute('createdAt', Model.transformDate),\n\n isRead: Model.attribute('isRead'),\n\n user: Model.hasOne('user'),\n fromUser: Model.hasOne('fromUser'),\n subject: Model.hasOne('subject')\n});\n","/**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */\nfunction arrayPush(array, values) {\n var index = -1,\n length = values.length,\n offset = array.length;\n\n while (++index < length) {\n array[offset + index] = values[index];\n }\n return array;\n}\n\nexport default arrayPush;\n","import freeGlobal from './_freeGlobal.js';\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nexport default root;\n","import root from './_root.js';\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nexport default Symbol;\n","import Symbol from './_Symbol.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\nexport default getRawTag;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\nexport default objectToString;\n","import Symbol from './_Symbol.js';\nimport getRawTag from './_getRawTag.js';\nimport objectToString from './_objectToString.js';\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\nexport default baseGetTag;\n","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\nexport default isObjectLike;\n","import baseGetTag from './_baseGetTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]';\n\n/**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\nfunction baseIsArguments(value) {\n return isObjectLike(value) && baseGetTag(value) == argsTag;\n}\n\nexport default baseIsArguments;\n","import baseIsArguments from './_baseIsArguments.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nvar isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n !propertyIsEnumerable.call(value, 'callee');\n};\n\nexport default isArguments;\n","/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\nexport default isArray;\n","import Symbol from './_Symbol.js';\nimport isArguments from './isArguments.js';\nimport isArray from './isArray.js';\n\n/** Built-in value references. */\nvar spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined;\n\n/**\n * Checks if `value` is a flattenable `arguments` object or array.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is flattenable, else `false`.\n */\nfunction isFlattenable(value) {\n return isArray(value) || isArguments(value) ||\n !!(spreadableSymbol && value && value[spreadableSymbol]);\n}\n\nexport default isFlattenable;\n","import arrayPush from './_arrayPush.js';\nimport isFlattenable from './_isFlattenable.js';\n\n/**\n * The base implementation of `_.flatten` with support for restricting flattening.\n *\n * @private\n * @param {Array} array The array to flatten.\n * @param {number} depth The maximum recursion depth.\n * @param {boolean} [predicate=isFlattenable] The function invoked per iteration.\n * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks.\n * @param {Array} [result=[]] The initial result value.\n * @returns {Array} Returns the new flattened array.\n */\nfunction baseFlatten(array, depth, predicate, isStrict, result) {\n var index = -1,\n length = array.length;\n\n predicate || (predicate = isFlattenable);\n result || (result = []);\n\n while (++index < length) {\n var value = array[index];\n if (depth > 0 && predicate(value)) {\n if (depth > 1) {\n // Recursively flatten arrays (susceptible to call stack limits).\n baseFlatten(value, depth - 1, predicate, isStrict, result);\n } else {\n arrayPush(result, value);\n }\n } else if (!isStrict) {\n result[result.length] = value;\n }\n }\n return result;\n}\n\nexport default baseFlatten;\n","import baseFlatten from './_baseFlatten.js';\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/**\n * Recursively flattens `array`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to flatten.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * _.flattenDeep([1, [2, [3, [4]], 5]]);\n * // => [1, 2, 3, 4, 5]\n */\nfunction flattenDeep(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseFlatten(array, INFINITY) : [];\n}\n\nexport default flattenDeep;\n","import ItemList from './utils/ItemList';\nimport Alert from './components/Alert';\nimport Button from './components/Button';\nimport ModalManager from './components/ModalManager';\nimport AlertManager from './components/AlertManager';\nimport RequestErrorModal from './components/RequestErrorModal';\nimport Translator from './Translator';\nimport Store from './Store';\nimport Session from './Session';\nimport extract from './utils/extract';\nimport Drawer from './utils/Drawer';\nimport mapRoutes from './utils/mapRoutes';\nimport RequestError from './utils/RequestError';\nimport ScrollListener from './utils/ScrollListener';\nimport { extend } from './extend';\n\nimport Forum from './models/Forum';\nimport User from './models/User';\nimport Discussion from './models/Discussion';\nimport Post from './models/Post';\nimport Group from './models/Group';\nimport Notification from './models/Notification';\nimport { flattenDeep } from 'lodash-es';\n\n/**\n * The `App` class provides a container for an application, as well as various\n * utilities for the rest of the app to use.\n */\nexport default class Application {\n /**\n * The forum model for this application.\n *\n * @type {Forum}\n * @public\n */\n forum = null;\n\n /**\n * A map of routes, keyed by a unique route name. Each route is an object\n * containing the following properties:\n *\n * - `path` The path that the route is accessed at.\n * - `component` The Mithril component to render when this route is active.\n *\n * @example\n * app.routes.discussion = {path: '/d/:id', component: DiscussionPage.component()};\n *\n * @type {Object}\n * @public\n */\n routes = {};\n\n /**\n * An ordered list of initializers to bootstrap the application.\n *\n * @type {ItemList}\n * @public\n */\n initializers = new ItemList();\n\n /**\n * The app's session.\n *\n * @type {Session}\n * @public\n */\n session = null;\n\n /**\n * The app's translator.\n *\n * @type {Translator}\n * @public\n */\n translator = new Translator();\n\n /**\n * The app's data store.\n *\n * @type {Store}\n * @public\n */\n store = new Store({\n forums: Forum,\n users: User,\n discussions: Discussion,\n posts: Post,\n groups: Group,\n notifications: Notification\n });\n\n /**\n * A local cache that can be used to store data at the application level, so\n * that is persists between different routes.\n *\n * @type {Object}\n * @public\n */\n cache = {};\n\n /**\n * Whether or not the app has been booted.\n *\n * @type {Boolean}\n * @public\n */\n booted = false;\n\n /**\n * An Alert that was shown as a result of an AJAX request error. If present,\n * it will be dismissed on the next successful request.\n *\n * @type {null|Alert}\n * @private\n */\n requestError = null;\n\n data;\n\n title = '';\n titleCount = 0;\n\n load(payload) {\n this.data = payload;\n this.translator.locale = payload.locale;\n }\n\n boot() {\n this.initializers.toArray().forEach(initializer => initializer(this));\n\n this.store.pushPayload({data: this.data.resources});\n\n this.forum = this.store.getById('forums', 1);\n\n this.session = new Session(\n this.store.getById('users', this.data.session.userId),\n this.data.session.csrfToken\n );\n\n this.mount();\n }\n\n bootExtensions(extensions) {\n Object.keys(extensions).forEach(name => {\n const extension = extensions[name];\n \n const extenders = flattenDeep(extension.extend);\n\n for (const extender of extenders) {\n extender.extend(this, { name, exports: extension });\n }\n });\n }\n\n mount() {\n this.modal = m.mount(document.getElementById('modal'), <ModalManager/>);\n this.alerts = m.mount(document.getElementById('alerts'), <AlertManager/>);\n\n this.drawer = new Drawer();\n\n const basePath = this.forum.attribute('basePath');\n m.route(\n document.getElementById('content'),\n basePath + '/',\n mapRoutes(this.routes, basePath)\n );\n\n // Add a class to the body which indicates that the page has been scrolled\n // down.\n new ScrollListener(top => {\n const $app = $('#app');\n const offset = $app.offset().top;\n\n $app\n .toggleClass('affix', top >= offset)\n .toggleClass('scrolled', top > offset);\n }).start();\n\n $(() => {\n $('body').addClass('ontouchstart' in window ? 'touch' : 'no-touch');\n });\n }\n\n /**\n * Get the API response document that has been preloaded into the application.\n *\n * @return {Object|null}\n * @public\n */\n preloadedDocument() {\n if (this.data.document) {\n const results = this.store.pushPayload(this.data.document);\n\n this.data.document = null;\n\n return results;\n }\n\n return null;\n }\n\n /**\n * Set the <title> of the page.\n *\n * @param {String} title\n * @public\n */\n setTitle(title) {\n this.title = title;\n this.updateTitle();\n }\n\n /**\n * Set a number to display in the <title> of the page.\n *\n * @param {Integer} count\n */\n setTitleCount(count) {\n this.titleCount = count;\n this.updateTitle();\n }\n\n updateTitle() {\n document.title = (this.titleCount ? `(${this.titleCount}) ` : '') +\n (this.title ? this.title + ' - ' : '') +\n this.forum.attribute('title');\n }\n\n /**\n * Make an AJAX request, handling any low-level errors that may occur.\n *\n * @see https://lhorie.github.io/mithril/mithril.request.html\n * @param {Object} options\n * @return {Promise}\n * @public\n */\n request(originalOptions) {\n const options = Object.assign({}, originalOptions);\n\n // Set some default options if they haven't been overridden. We want to\n // authenticate all requests with the session token. We also want all\n // requests to run asynchronously in the background, so that they don't\n // prevent redraws from occurring.\n options.background = options.background || true;\n\n extend(options, 'config', (result, xhr) => xhr.setRequestHeader('X-CSRF-Token', this.session.csrfToken));\n\n // If the method is something like PATCH or DELETE, which not all servers\n // and clients support, then we'll send it as a POST request with the\n // intended method specified in the X-HTTP-Method-Override header.\n if (options.method !== 'GET' && options.method !== 'POST') {\n const method = options.method;\n extend(options, 'config', (result, xhr) => xhr.setRequestHeader('X-HTTP-Method-Override', method));\n options.method = 'POST';\n }\n\n // When we deserialize JSON data, if for some reason the server has provided\n // a dud response, we don't want the application to crash. We'll show an\n // error message to the user instead.\n options.deserialize = options.deserialize || (responseText => responseText);\n\n options.errorHandler = options.errorHandler || (error => {\n throw error;\n });\n\n // When extracting the data from the response, we can check the server\n // response code and show an error message to the user if something's gone\n // awry.\n const original = options.extract;\n options.extract = xhr => {\n let responseText;\n\n if (original) {\n responseText = original(xhr.responseText);\n } else {\n responseText = xhr.responseText || null;\n }\n\n const status = xhr.status;\n\n if (status < 200 || status > 299) {\n throw new RequestError(status, responseText, options, xhr);\n }\n\n if (xhr.getResponseHeader) {\n const csrfToken = xhr.getResponseHeader('X-CSRF-Token');\n if (csrfToken) app.session.csrfToken = csrfToken;\n }\n\n try {\n return JSON.parse(responseText);\n } catch (e) {\n throw new RequestError(500, responseText, options, xhr);\n }\n };\n\n if (this.requestError) this.alerts.dismiss(this.requestError.alert);\n\n // Now make the request. If it's a failure, inspect the error that was\n // returned and show an alert containing its contents.\n const deferred = m.deferred();\n\n m.request(options).then(response => deferred.resolve(response), error => {\n this.requestError = error;\n\n let children;\n\n switch (error.status) {\n case 422:\n children = error.response.errors\n .map(error => [error.detail, <br/>])\n .reduce((a, b) => a.concat(b), [])\n .slice(0, -1);\n break;\n\n case 401:\n case 403:\n children = app.translator.trans('core.lib.error.permission_denied_message');\n break;\n\n case 404:\n case 410:\n children = app.translator.trans('core.lib.error.not_found_message');\n break;\n\n case 429:\n children = app.translator.trans('core.lib.error.rate_limit_exceeded_message');\n break;\n\n default:\n children = app.translator.trans('core.lib.error.generic_message');\n }\n\n error.alert = new Alert({\n type: 'error',\n children,\n controls: app.forum.attribute('debug') ? [\n <Button className=\"Button Button--link\" onclick={this.showDebug.bind(this, error)}>Debug</Button>\n ] : undefined\n });\n\n try {\n options.errorHandler(error);\n } catch (error) {\n this.alerts.show(error.alert);\n }\n\n deferred.reject(error);\n });\n\n return deferred.promise;\n }\n\n /**\n * @param {RequestError} error\n * @private\n */\n showDebug(error) {\n this.alerts.dismiss(this.requestErrorAlert);\n\n this.modal.show(new RequestErrorModal({error}));\n }\n\n /**\n * Construct a URL to the route with the given name.\n *\n * @param {String} name\n * @param {Object} params\n * @return {String}\n * @public\n */\n route(name, params = {}) {\n const url = this.routes[name].path.replace(/:([^\\/]+)/g, (m, key) => extract(params, key));\n const queryString = m.route.buildQueryString(params);\n const prefix = m.route.mode === 'pathname' ? app.forum.attribute('basePath') : '';\n\n return prefix + url + (queryString ? '?' + queryString : '');\n }\n}\n","/**\n * The `formatNumber` utility localizes a number into a string with the\n * appropriate punctuation.\n *\n * @example\n * formatNumber(1234);\n * // 1,234\n *\n * @param {Number} number\n * @return {String}\n */\nexport default function formatNumber(number) {\n return number.toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',');\n}\n","/**\n * The `anchorScroll` utility saves the scroll position relative to an element,\n * and then restores it after a callback has been run.\n *\n * This is useful if a redraw will change the page's content above the viewport.\n * Normally doing this will result in the content in the viewport being pushed\n * down or pulled up. By wrapping the redraw with this utility, the scroll\n * position can be anchor to an element that is in or below the viewport, so\n * the content in the viewport will stay the same.\n *\n * @param {DOMElement} element The element to anchor the scroll position to.\n * @param {Function} callback The callback to run that will change page content.\n */\nexport default function anchorScroll(element, callback) {\n const $window = $(window);\n const relativeScroll = $(element).offset().top - $window.scrollTop();\n\n callback();\n\n $window.scrollTop($(element).offset().top - relativeScroll);\n}\n","export default function _extends() {\n _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}","/**\n * The `evented` mixin provides methods allowing an object to trigger events,\n * running externally registered event handlers.\n */\nexport default {\n /**\n * Arrays of registered event handlers, grouped by the event name.\n *\n * @type {Object}\n * @protected\n */\n handlers: null,\n\n /**\n * Get all of the registered handlers for an event.\n *\n * @param {String} event The name of the event.\n * @return {Array}\n * @protected\n */\n getHandlers(event) {\n this.handlers = this.handlers || {};\n\n this.handlers[event] = this.handlers[event] || [];\n\n return this.handlers[event];\n },\n\n /**\n * Trigger an event.\n *\n * @param {String} event The name of the event.\n * @param {...*} args Arguments to pass to event handlers.\n * @public\n */\n trigger(event, ...args) {\n this.getHandlers(event).forEach(handler => handler.apply(this, args));\n },\n\n /**\n * Register an event handler.\n *\n * @param {String} event The name of the event.\n * @param {function} handler The function to handle the event.\n */\n on(event, handler) {\n this.getHandlers(event).push(handler);\n },\n\n /**\n * Register an event handler so that it will run only once, and then\n * unregister itself.\n *\n * @param {String} event The name of the event.\n * @param {function} handler The function to handle the event.\n */\n one(event, handler) {\n const wrapper = function() {\n handler.apply(this, arguments);\n\n this.off(event, wrapper);\n };\n\n this.getHandlers(event).push(wrapper);\n },\n\n /**\n * Unregister an event handler.\n *\n * @param {String} event The name of the event.\n * @param {function} handler The function that handles the event.\n */\n off(event, handler) {\n const handlers = this.getHandlers(event);\n const index = handlers.indexOf(handler);\n\n if (index !== -1) {\n handlers.splice(index, 1);\n }\n }\n}\n","import Dropdown from './Dropdown';\nimport Button from './Button';\nimport icon from '../helpers/icon';\n\n/**\n * The `SplitDropdown` component is similar to `Dropdown`, but the first child\n * is displayed as its own button prior to the toggle button.\n */\nexport default class SplitDropdown extends Dropdown {\n static initProps(props) {\n super.initProps(props);\n\n props.className += ' Dropdown--split';\n props.menuClassName += ' Dropdown-menu--right';\n }\n\n getButton() {\n // Make a copy of the props of the first child component. We will assign\n // these props to a new button, so that it has exactly the same behaviour as\n // the first child.\n const firstChild = this.getFirstChild();\n const buttonProps = Object.assign({}, firstChild.props);\n buttonProps.className = (buttonProps.className || '') + ' SplitDropdown-button Button ' + this.props.buttonClassName;\n\n return [\n Button.component(buttonProps),\n <button\n className={'Dropdown-toggle Button Button--icon ' + this.props.buttonClassName}\n data-toggle=\"dropdown\">\n {icon(this.props.icon, {className: 'Button-icon'})}\n {icon('fas fa-caret-down', {className: 'Button-caret'})}\n </button>\n ];\n }\n\n /**\n * Get the first child. If the first child is an array, the first item in that\n * array will be returned.\n *\n * @return {*}\n * @protected\n */\n getFirstChild() {\n let firstChild = this.props.children;\n\n while (firstChild instanceof Array) firstChild = firstChild[0];\n\n return firstChild;\n }\n}\n","import icon from './icon';\n\n/**\n * The `useronline` helper displays a green circle if the user is online\n *\n * @param {User} user\n * @return {Object}\n */\nexport default function userOnline(user) {\n if (user.lastSeenAt() && user.isOnline()) {\n return <span className=\"UserOnline\">{icon('fas fa-circle')}</span>;\n }\n}\n","/**\n * The `fullTime` helper displays a formatted time string wrapped in a <time>\n * tag.\n *\n * @param {Date} time\n * @return {Object}\n */\nexport default function fullTime(time) {\n const mo = moment(time);\n\n const datetime = mo.format();\n const full = mo.format('LLLL');\n\n return <time pubdate datetime={datetime}>{full}</time>;\n}\n","/**\n * The `abbreviateNumber` utility converts a number to a shorter localized form.\n *\n * @example\n * abbreviateNumber(1234);\n * // \"1.2K\"\n *\n * @param {Integer} number\n * @return {String}\n */\nexport default function abbreviateNumber(number) {\n // TODO: translation\n if (number >= 1000000) {\n return Math.floor(number / 1000000) + app.translator.trans('core.lib.number_suffix.mega_text');\n } else if (number >= 1000) {\n return Math.floor(number / 1000) + app.translator.trans('core.lib.number_suffix.kilo_text');\n } else {\n return number.toString();\n }\n}\n","import Component from '../Component';\n\n/**\n * The `Placeholder` component displays a muted text with some call to action,\n * usually used as an empty state.\n *\n * ### Props\n *\n * - `text`\n */\nexport default class Placeholder extends Component {\n view() {\n return (\n <div className=\"Placeholder\">\n <p>{this.props.text}</p>\n </div>\n );\n }\n}\n","import Component from '../Component';\nimport icon from '../helpers/icon';\n\n/**\n * The `Select` component displays a <select> input, surrounded with some extra\n * elements for styling. It accepts the following props:\n *\n * - `options` A map of option values to labels.\n * - `onchange` A callback to run when the selected value is changed.\n * - `value` The value of the selected option.\n */\nexport default class Select extends Component {\n view() {\n const {options, onchange, value} = this.props;\n\n return (\n <span className=\"Select\">\n <select className=\"Select-input FormControl\" onchange={onchange ? m.withAttr('value', onchange.bind(this)) : undefined} value={value}>\n {Object.keys(options).map(key => <option value={key}>{options[key]}</option>)}\n </select>\n {icon('fas fa-sort', {className: 'Select-caret'})}\n </span>\n );\n }\n}\n","module.exports = function(module) {\n\tif (!module.webpackPolyfill) {\n\t\tmodule.deprecate = function() {};\n\t\tmodule.paths = [];\n\t\t// module.parent = undefined by default\n\t\tif (!module.children) module.children = [];\n\t\tObject.defineProperty(module, \"loaded\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.l;\n\t\t\t}\n\t\t});\n\t\tObject.defineProperty(module, \"id\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.i;\n\t\t\t}\n\t\t});\n\t\tmodule.webpackPolyfill = 1;\n\t}\n\treturn module;\n};\n","/**\n * The `mixin` utility assigns the properties of a set of 'mixin' objects to\n * the prototype of a parent object.\n *\n * @example\n * class MyClass extends mixin(ExistingClass, evented, etc) {}\n *\n * @param {Class} Parent The class to extend the new class from.\n * @param {...Object} mixins The objects to mix in.\n * @return {Class} A new class that extends Parent and contains the mixins.\n */\nexport default function mixin(Parent, ...mixins) {\n class Mixed extends Parent {}\n\n mixins.forEach(object => {\n Object.assign(Mixed.prototype, object);\n });\n\n return Mixed;\n}\n","/* global Promise */\r\n\r\n;(function (global, factory) { // eslint-disable-line\r\n\t\"use strict\"\r\n\t/* eslint-disable no-undef */\r\n\tvar m = factory(global)\r\n\t/*\tSet dependencies when no window for isomorphic compatibility */\r\n\tif(typeof window === \"undefined\") {\r\n\t\tm.deps({\r\n\t\t\tdocument: typeof document !== \"undefined\" ? document : {},\r\n\t\t\tlocation: typeof location !== \"undefined\" ? location : {},\r\n\t\t\tclearTimeout: clearTimeout,\r\n\t\t\tsetTimeout: setTimeout\r\n\t\t})\r\n\t}\r\n\tif (typeof module === \"object\" && module != null && module.exports) {\r\n\t\tmodule.exports = m\r\n\t} else if (typeof define === \"function\" && define.amd) {\r\n\t\tdefine(function () { return m })\r\n\t} else {\r\n\t\tglobal.m = m\r\n\t}\r\n\t/* eslint-enable no-undef */\r\n})(typeof window !== \"undefined\" ? window : this, function factory(global, undefined) { // eslint-disable-line\r\n\t\"use strict\"\r\n\r\n\tm.version = function () {\r\n\t\treturn \"v0.2.8\"\r\n\t}\r\n\r\n\tvar hasOwn = {}.hasOwnProperty\r\n\tvar type = {}.toString\r\n\r\n\tfunction isFunction(object) {\r\n\t\treturn typeof object === \"function\"\r\n\t}\r\n\r\n\tfunction isObject(object) {\r\n\t\treturn type.call(object) === \"[object Object]\"\r\n\t}\r\n\r\n\tfunction isString(object) {\r\n\t\treturn type.call(object) === \"[object String]\"\r\n\t}\r\n\r\n\tvar isArray = Array.isArray || function (object) {\r\n\t\treturn type.call(object) === \"[object Array]\"\r\n\t}\r\n\r\n\tfunction noop() {}\r\n\r\n\tvar voidElements = {\r\n\t\tAREA: 1,\r\n\t\tBASE: 1,\r\n\t\tBR: 1,\r\n\t\tCOL: 1,\r\n\t\tCOMMAND: 1,\r\n\t\tEMBED: 1,\r\n\t\tHR: 1,\r\n\t\tIMG: 1,\r\n\t\tINPUT: 1,\r\n\t\tKEYGEN: 1,\r\n\t\tLINK: 1,\r\n\t\tMETA: 1,\r\n\t\tPARAM: 1,\r\n\t\tSOURCE: 1,\r\n\t\tTRACK: 1,\r\n\t\tWBR: 1\r\n\t}\r\n\r\n\t// caching commonly used variables\r\n\tvar $document, $location, $requestAnimationFrame, $cancelAnimationFrame\r\n\r\n\t// self invoking function needed because of the way mocks work\r\n\tfunction initialize(mock) {\r\n\t\t$document = mock.document\r\n\t\t$location = mock.location\r\n\t\t$cancelAnimationFrame = mock.cancelAnimationFrame || mock.clearTimeout\r\n\t\t$requestAnimationFrame = mock.requestAnimationFrame || mock.setTimeout\r\n\t}\r\n\r\n\t// testing API\r\n\tm.deps = function (mock) {\r\n\t\tinitialize(global = mock || window)\r\n\t\treturn global\r\n\t}\r\n\r\n\tm.deps.factory = m.factory = factory\r\n\r\n\tm.deps(global)\r\n\r\n\t/**\r\n\t * @typedef {String} Tag\r\n\t * A string that looks like -> div.classname#id[param=one][param2=two]\r\n\t * Which describes a DOM node\r\n\t */\r\n\r\n\tfunction parseTagAttrs(cell, tag) {\r\n\t\tvar classes = []\r\n\t\t/* eslint-disable max-len */\r\n\t\tvar parser = /(?:(^|#|\\.)([^#\\.\\[\\]]+))|(\\[(.+?)(?:\\s*=\\s*(\"|'|)((?:\\\\[\"'\\]]|.)*?)\\5)?\\])/g\r\n\t\t/* eslint-enable max-len */\r\n\t\tvar match\r\n\r\n\t\twhile ((match = parser.exec(tag))) {\r\n\t\t\tif (match[1] === \"\" && match[2]) {\r\n\t\t\t\tcell.tag = match[2]\r\n\t\t\t} else if (match[1] === \"#\") {\r\n\t\t\t\tcell.attrs.id = match[2]\r\n\t\t\t} else if (match[1] === \".\") {\r\n\t\t\t\tclasses.push(match[2])\r\n\t\t\t} else if (match[3].charAt(0) === \"[\") { // #1195\r\n\t\t\t\tvar attrValue = match[6]\r\n\t\t\t\tif (attrValue) attrValue = attrValue.replace(/\\\\([\"'])/g, \"$1\")\r\n\t\t\t\tif (match[4] === \"class\") classes.push(attrValue)\r\n\t\t\t\telse cell.attrs[match[4]] = attrValue || true\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn classes\r\n\t}\r\n\r\n\tfunction getVirtualChildren(args, hasAttrs) {\r\n\t\tvar children = hasAttrs ? args.slice(1) : args\r\n\r\n\t\tif (children.length === 1 && isArray(children[0])) {\r\n\t\t\treturn children[0]\r\n\t\t} else {\r\n\t\t\treturn children\r\n\t\t}\r\n\t}\r\n\r\n\tfunction assignAttrs(target, attrs, classes) {\r\n\t\tvar classAttr = \"class\" in attrs ? \"class\" : \"className\"\r\n\r\n\t\tfor (var attrName in attrs) {\r\n\t\t\tif (hasOwn.call(attrs, attrName)) {\r\n\t\t\t\tif (attrName === classAttr &&\r\n\t\t\t\t\t\tattrs[attrName] != null &&\r\n\t\t\t\t\t\tattrs[attrName] !== \"\") {\r\n\t\t\t\t\tclasses.push(attrs[attrName])\r\n\t\t\t\t\t// create key in correct iteration order\r\n\t\t\t\t\ttarget[attrName] = \"\"\r\n\t\t\t\t} else {\r\n\t\t\t\t\ttarget[attrName] = attrs[attrName]\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (classes.length) target[classAttr] = classes.join(\" \")\r\n\t}\r\n\r\n\t/**\r\n\t *\r\n\t * @param {Tag} The DOM node tag\r\n\t * @param {Object=[]} optional key-value pairs to be mapped to DOM attrs\r\n\t * @param {...mNode=[]} Zero or more Mithril child nodes. Can be an array,\r\n\t * or splat (optional)\r\n\t */\r\n\tfunction m(tag, pairs) {\r\n\t\tvar args = []\r\n\r\n\t\tfor (var i = 1, length = arguments.length; i < length; i++) {\r\n\t\t\targs[i - 1] = arguments[i]\r\n\t\t}\r\n\r\n\t\tif (tag && isFunction(tag.view)) return parameterize(tag, args)\r\n\r\n\t\tif (!isString(tag)) {\r\n\t\t\tthrow new Error(\"selector in m(selector, attrs, children) should \" +\r\n\t\t\t\t\"be a string\")\r\n\t\t}\r\n\r\n\t\tvar hasAttrs = pairs != null && isObject(pairs) &&\r\n\t\t\t!(\"tag\" in pairs || \"view\" in pairs || \"subtree\" in pairs)\r\n\r\n\t\tvar attrs = hasAttrs ? pairs : {}\r\n\t\tvar cell = {\r\n\t\t\ttag: \"div\",\r\n\t\t\tattrs: {},\r\n\t\t\tchildren: getVirtualChildren(args, hasAttrs)\r\n\t\t}\r\n\r\n\t\tassignAttrs(cell.attrs, attrs, parseTagAttrs(cell, tag))\r\n\t\treturn cell\r\n\t}\r\n\r\n\tfunction forEach(list, f) {\r\n\t\tfor (var i = 0; i < list.length && !f(list[i], i++);) {\r\n\t\t\t// function called in condition\r\n\t\t}\r\n\t}\r\n\r\n\tfunction forKeys(list, f) {\r\n\t\tforEach(list, function (attrs, i) {\r\n\t\t\treturn (attrs = attrs && attrs.attrs) &&\r\n\t\t\t\tattrs.key != null &&\r\n\t\t\t\tf(attrs, i)\r\n\t\t})\r\n\t}\r\n\t// This function was causing deopts in Chrome.\r\n\tfunction dataToString(data) {\r\n\t\t// data.toString() might throw or return null if data is the return\r\n\t\t// value of Console.log in some versions of Firefox (behavior depends on\r\n\t\t// version)\r\n\t\ttry {\r\n\t\t\tif (typeof data !== \"boolean\" &&\r\n\t\t\t\t\tdata != null &&\r\n\t\t\t\t\tdata.toString() != null) return data\r\n\t\t} catch (e) {\r\n\t\t\t// silently ignore errors\r\n\t\t}\r\n\t\treturn \"\"\r\n\t}\r\n\r\n\t// This function was causing deopts in Chrome.\r\n\tfunction injectTextNode(parentElement, first, index, data) {\r\n\t\ttry {\r\n\t\t\tinsertNode(parentElement, first, index)\r\n\t\t\tfirst.nodeValue = data\r\n\t\t} catch (e) {\r\n\t\t\t// IE erroneously throws error when appending an empty text node\r\n\t\t\t// after a null\r\n\t\t}\r\n\t}\r\n\r\n\tfunction flatten(list) {\r\n\t\t// recursively flatten array\r\n\t\tfor (var i = 0; i < list.length; i++) {\r\n\t\t\tif (isArray(list[i])) {\r\n\t\t\t\tlist = list.concat.apply([], list)\r\n\t\t\t\t// check current index again and flatten until there are no more\r\n\t\t\t\t// nested arrays at that index\r\n\t\t\t\ti--\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn list\r\n\t}\r\n\r\n\tfunction insertNode(parentElement, node, index) {\r\n\t\tparentElement.insertBefore(node,\r\n\t\t\tparentElement.childNodes[index] || null)\r\n\t}\r\n\r\n\tvar DELETION = 1\r\n\tvar INSERTION = 2\r\n\tvar MOVE = 3\r\n\r\n\tfunction handleKeysDiffer(data, existing, cached, parentElement) {\r\n\t\tforKeys(data, function (key, i) {\r\n\t\t\texisting[key = key.key] = existing[key] ? {\r\n\t\t\t\taction: MOVE,\r\n\t\t\t\tindex: i,\r\n\t\t\t\tfrom: existing[key].index,\r\n\t\t\t\telement: cached.nodes[existing[key].index] ||\r\n\t\t\t\t\t$document.createElement(\"div\")\r\n\t\t\t} : {action: INSERTION, index: i}\r\n\t\t})\r\n\r\n\t\tvar actions = []\r\n\t\tfor (var prop in existing) {\r\n\t\t\tif (hasOwn.call(existing, prop)) {\r\n\t\t\t\tactions.push(existing[prop])\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tvar changes = actions.sort(sortChanges)\r\n\t\tvar newCached = new Array(cached.length)\r\n\r\n\t\tnewCached.nodes = cached.nodes.slice()\r\n\r\n\t\tforEach(changes, function (change) {\r\n\t\t\tvar index = change.index\r\n\t\t\tif (change.action === DELETION) {\r\n\t\t\t\tclear(cached[index].nodes, cached[index])\r\n\t\t\t\tnewCached.splice(index, 1)\r\n\t\t\t}\r\n\t\t\tif (change.action === INSERTION) {\r\n\t\t\t\tvar dummy = $document.createElement(\"div\")\r\n\t\t\t\tdummy.key = data[index].attrs.key\r\n\t\t\t\tinsertNode(parentElement, dummy, index)\r\n\t\t\t\tnewCached.splice(index, 0, {\r\n\t\t\t\t\tattrs: {key: data[index].attrs.key},\r\n\t\t\t\t\tnodes: [dummy]\r\n\t\t\t\t})\r\n\t\t\t\tnewCached.nodes[index] = dummy\r\n\t\t\t}\r\n\r\n\t\t\tif (change.action === MOVE) {\r\n\t\t\t\tvar changeElement = change.element\r\n\t\t\t\tvar maybeChanged = parentElement.childNodes[index]\r\n\t\t\t\tif (maybeChanged !== changeElement && changeElement !== null) {\r\n\t\t\t\t\tparentElement.insertBefore(changeElement,\r\n\t\t\t\t\t\tmaybeChanged || null)\r\n\t\t\t\t}\r\n\t\t\t\tnewCached[index] = cached[change.from]\r\n\t\t\t\tnewCached.nodes[index] = changeElement\r\n\t\t\t}\r\n\t\t})\r\n\r\n\t\treturn newCached\r\n\t}\r\n\r\n\tfunction diffKeys(data, cached, existing, parentElement) {\r\n\t\tvar keysDiffer = data.length !== cached.length\r\n\r\n\t\tif (!keysDiffer) {\r\n\t\t\tforKeys(data, function (attrs, i) {\r\n\t\t\t\tvar cachedCell = cached[i]\r\n\t\t\t\treturn keysDiffer = cachedCell &&\r\n\t\t\t\t\tcachedCell.attrs &&\r\n\t\t\t\t\tcachedCell.attrs.key !== attrs.key\r\n\t\t\t})\r\n\t\t}\r\n\r\n\t\tif (keysDiffer) {\r\n\t\t\treturn handleKeysDiffer(data, existing, cached, parentElement)\r\n\t\t} else {\r\n\t\t\treturn cached\r\n\t\t}\r\n\t}\r\n\r\n\tfunction diffArray(data, cached, nodes) {\r\n\t\t// diff the array itself\r\n\r\n\t\t// update the list of DOM nodes by collecting the nodes from each item\r\n\t\tforEach(data, function (_, i) {\r\n\t\t\tif (cached[i] != null) nodes.push.apply(nodes, cached[i].nodes)\r\n\t\t})\r\n\t\t// remove items from the end of the array if the new array is shorter\r\n\t\t// than the old one. if errors ever happen here, the issue is most\r\n\t\t// likely a bug in the construction of the `cached` data structure\r\n\t\t// somewhere earlier in the program\r\n\t\tforEach(cached.nodes, function (node, i) {\r\n\t\t\tif (node.parentNode != null && nodes.indexOf(node) < 0) {\r\n\t\t\t\tclear([node], [cached[i]])\r\n\t\t\t}\r\n\t\t})\r\n\r\n\t\tif (data.length < cached.length) cached.length = data.length\r\n\t\tcached.nodes = nodes\r\n\t}\r\n\r\n\tfunction buildArrayKeys(data) {\r\n\t\tvar guid = 0\r\n\t\tforKeys(data, function () {\r\n\t\t\tforEach(data, function (attrs) {\r\n\t\t\t\tif ((attrs = attrs && attrs.attrs) && attrs.key == null) {\r\n\t\t\t\t\tattrs.key = \"__mithril__\" + guid++\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\t\treturn 1\r\n\t\t})\r\n\t}\r\n\r\n\tfunction isDifferentEnough(data, cached, dataAttrKeys) {\r\n\t\tif (data.tag !== cached.tag) return true\r\n\r\n\t\tif (dataAttrKeys.sort().join() !==\r\n\t\t\t\tObject.keys(cached.attrs).sort().join()) {\r\n\t\t\treturn true\r\n\t\t}\r\n\r\n\t\tif (data.attrs.id !== cached.attrs.id) {\r\n\t\t\treturn true\r\n\t\t}\r\n\r\n\t\tif (data.attrs.key !== cached.attrs.key) {\r\n\t\t\treturn true\r\n\t\t}\r\n\r\n\t\tif (m.redraw.strategy() === \"all\") {\r\n\t\t\treturn !cached.configContext || cached.configContext.retain !== true\r\n\t\t}\r\n\r\n\t\tif (m.redraw.strategy() === \"diff\") {\r\n\t\t\treturn cached.configContext && cached.configContext.retain === false\r\n\t\t}\r\n\r\n\t\treturn false\r\n\t}\r\n\r\n\tfunction maybeRecreateObject(data, cached, dataAttrKeys) {\r\n\t\t// if an element is different enough from the one in cache, recreate it\r\n\t\tif (isDifferentEnough(data, cached, dataAttrKeys)) {\r\n\t\t\tif (cached.nodes.length) clear(cached.nodes)\r\n\r\n\t\t\tif (cached.configContext &&\r\n\t\t\t\t\tisFunction(cached.configContext.onunload)) {\r\n\t\t\t\tcached.configContext.onunload()\r\n\t\t\t}\r\n\r\n\t\t\tif (cached.controllers) {\r\n\t\t\t\tforEach(cached.controllers, function (controller) {\r\n\t\t\t\t\tif (controller.onunload) {\r\n\t\t\t\t\t\tcontroller.onunload({preventDefault: noop})\r\n\t\t\t\t\t}\r\n\t\t\t\t})\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tfunction getObjectNamespace(data, namespace) {\r\n\t\tif (data.attrs.xmlns) return data.attrs.xmlns\r\n\t\tif (data.tag === \"svg\") return \"http://www.w3.org/2000/svg\"\r\n\t\tif (data.tag === \"math\") return \"http://www.w3.org/1998/Math/MathML\"\r\n\t\treturn namespace\r\n\t}\r\n\r\n\tvar pendingRequests = 0\r\n\tm.startComputation = function () { pendingRequests++ }\r\n\tm.endComputation = function () {\r\n\t\tif (pendingRequests > 1) {\r\n\t\t\tpendingRequests--\r\n\t\t} else {\r\n\t\t\tpendingRequests = 0\r\n\t\t\tm.redraw()\r\n\t\t}\r\n\t}\r\n\r\n\tfunction unloadCachedControllers(cached, views, controllers) {\r\n\t\tif (controllers.length) {\r\n\t\t\tcached.views = views\r\n\t\t\tcached.controllers = controllers\r\n\t\t\tforEach(controllers, function (controller) {\r\n\t\t\t\tif (controller.onunload && controller.onunload.$old) {\r\n\t\t\t\t\tcontroller.onunload = controller.onunload.$old\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (pendingRequests && controller.onunload) {\r\n\t\t\t\t\tvar onunload = controller.onunload\r\n\t\t\t\t\tcontroller.onunload = function (){}\r\n\t\t\t\t\tcontroller.onunload.$old = onunload\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\t}\r\n\t}\r\n\r\n\tfunction scheduleConfigsToBeCalled(configs, data, node, isNew, cached) {\r\n\t\t// schedule configs to be called. They are called after `build` finishes\r\n\t\t// running\r\n\t\tif (isFunction(data.attrs.config)) {\r\n\t\t\tvar context = cached.configContext = cached.configContext || {}\r\n\r\n\t\t\t// bind\r\n\t\t\tconfigs.push(function () {\r\n\t\t\t\treturn data.attrs.config.call(data, node, !isNew, context,\r\n\t\t\t\t\tcached)\r\n\t\t\t})\r\n\t\t}\r\n\t}\r\n\r\n\tfunction buildUpdatedNode(\r\n\t\tcached,\r\n\t\tdata,\r\n\t\teditable,\r\n\t\thasKeys,\r\n\t\tnamespace,\r\n\t\tviews,\r\n\t\tconfigs,\r\n\t\tcontrollers\r\n\t) {\r\n\t\tvar node = cached.nodes[0]\r\n\r\n\t\tif (hasKeys) {\r\n\t\t\tsetAttributes(node, data.tag, data.attrs, cached.attrs, namespace)\r\n\t\t}\r\n\r\n\t\tcached.children = build(\r\n\t\t\tnode,\r\n\t\t\tdata.tag,\r\n\t\t\tundefined,\r\n\t\t\tundefined,\r\n\t\t\tdata.children,\r\n\t\t\tcached.children,\r\n\t\t\tfalse,\r\n\t\t\t0,\r\n\t\t\tdata.attrs.contenteditable ? node : editable,\r\n\t\t\tnamespace,\r\n\t\t\tconfigs\r\n\t\t)\r\n\r\n\t\tcached.nodes.intact = true\r\n\r\n\t\tif (controllers.length) {\r\n\t\t\tcached.views = views\r\n\t\t\tcached.controllers = controllers\r\n\t\t}\r\n\r\n\t\treturn node\r\n\t}\r\n\r\n\tfunction handleNonexistentNodes(data, parentElement, index) {\r\n\t\tvar nodes\r\n\t\tif (data.$trusted) {\r\n\t\t\tnodes = injectHTML(parentElement, index, data)\r\n\t\t} else {\r\n\t\t\tnodes = [$document.createTextNode(data)]\r\n\t\t\tif (!(parentElement.nodeName in voidElements)) {\r\n\t\t\t\tinsertNode(parentElement, nodes[0], index)\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tvar cached\r\n\r\n\t\tif (typeof data === \"string\" ||\r\n\t\t\t\ttypeof data === \"number\" ||\r\n\t\t\t\ttypeof data === \"boolean\") {\r\n\t\t\tcached = new data.constructor(data)\r\n\t\t} else {\r\n\t\t\tcached = data\r\n\t\t}\r\n\r\n\t\tcached.nodes = nodes\r\n\t\treturn cached\r\n\t}\r\n\r\n\tfunction reattachNodes(\r\n\t\tdata,\r\n\t\tcached,\r\n\t\tparentElement,\r\n\t\teditable,\r\n\t\tindex,\r\n\t\tparentTag\r\n\t) {\r\n\t\tvar nodes = cached.nodes\r\n\t\tif (!editable || editable !== $document.activeElement ||\r\n\t\t\t\tdata !== cached) {\r\n\t\t\tif (data.$trusted) {\r\n\t\t\t\tclear(nodes, cached)\r\n\t\t\t\tnodes = injectHTML(parentElement, index, data)\r\n\t\t\t} else if (parentTag === \"textarea\") {\r\n\t\t\t\t// <textarea> uses `value` instead of `nodeValue`.\r\n\t\t\t\tparentElement.value = data\r\n\t\t\t} else if (editable) {\r\n\t\t\t\t// contenteditable nodes use `innerHTML` instead of `nodeValue`.\r\n\t\t\t\teditable.innerHTML = data\r\n\t\t\t\tnodes = [].slice.call(editable.childNodes)\r\n\t\t\t} else {\r\n\t\t\t\t// was a trusted string\r\n\t\t\t\tif (nodes[0].nodeType === 1 || nodes.length > 1 ||\r\n\t\t\t\t\t\t(nodes[0].nodeValue.trim &&\r\n\t\t\t\t\t\t\t!nodes[0].nodeValue.trim())) {\r\n\t\t\t\t\tclear(cached.nodes, cached)\r\n\t\t\t\t\tnodes = [$document.createTextNode(data)]\r\n\t\t\t\t}\r\n\r\n\t\t\t\tinjectTextNode(parentElement, nodes[0], index, data)\r\n\t\t\t}\r\n\t\t}\r\n\t\tcached = new data.constructor(data)\r\n\t\tcached.nodes = nodes\r\n\t\tcached.$trusted = data.$trusted\r\n\t\treturn cached\r\n\t}\r\n\r\n\tfunction handleTextNode(\r\n\t\tcached,\r\n\t\tdata,\r\n\t\tindex,\r\n\t\tparentElement,\r\n\t\tshouldReattach,\r\n\t\teditable,\r\n\t\tparentTag\r\n\t) {\r\n\t\tif (!cached.nodes.length) {\r\n\t\t\treturn handleNonexistentNodes(data, parentElement, index)\r\n\t\t} else if (cached.valueOf() !== data.valueOf() || shouldReattach) {\r\n\t\t\treturn reattachNodes(data, cached, parentElement, editable, index,\r\n\t\t\t\tparentTag)\r\n\t\t} else {\r\n\t\t\treturn (cached.nodes.intact = true, cached)\r\n\t\t}\r\n\t}\r\n\r\n\tfunction getSubArrayCount(item) {\r\n\t\tif (item.$trusted) {\r\n\t\t\t// fix offset of next element if item was a trusted string w/ more\r\n\t\t\t// than one html element\r\n\t\t\treturn item.nodes.length\r\n\t\t} else if (isArray(item)) {\r\n\t\t\treturn item.length\r\n\t\t}\r\n\t\treturn 1\r\n\t}\r\n\r\n\tfunction buildArray(\r\n\t\tdata,\r\n\t\tcached,\r\n\t\tparentElement,\r\n\t\tindex,\r\n\t\tparentTag,\r\n\t\tshouldReattach,\r\n\t\teditable,\r\n\t\tnamespace,\r\n\t\tconfigs\r\n\t) {\r\n\t\tdata = flatten(data)\r\n\t\tvar nodes = []\r\n\t\tvar intact = cached.length === data.length\r\n\t\tvar subArrayCount = 0\r\n\r\n\t\t// keys algorithm: sort elements without recreating them if keys are\r\n\t\t// present\r\n\t\t//\r\n\t\t// 1) create a map of all existing keys, and mark all for deletion\r\n\t\t// 2) add new keys to map and mark them for addition\r\n\t\t// 3) if key exists in new list, change action from deletion to a move\r\n\t\t// 4) for each key, handle its corresponding action as marked in\r\n\t\t// previous steps\r\n\r\n\t\tvar existing = {}\r\n\t\tvar shouldMaintainIdentities = false\r\n\r\n\t\tforKeys(cached, function (attrs, i) {\r\n\t\t\tshouldMaintainIdentities = true\r\n\t\t\texisting[cached[i].attrs.key] = {action: DELETION, index: i}\r\n\t\t})\r\n\r\n\t\tbuildArrayKeys(data)\r\n\t\tif (shouldMaintainIdentities) {\r\n\t\t\tcached = diffKeys(data, cached, existing, parentElement)\r\n\t\t}\r\n\t\t// end key algorithm\r\n\r\n\t\tvar cacheCount = 0\r\n\t\t// faster explicitly written\r\n\t\tfor (var i = 0, len = data.length; i < len; i++) {\r\n\t\t\t// diff each item in the array\r\n\t\t\tvar item = build(\r\n\t\t\t\tparentElement,\r\n\t\t\t\tparentTag,\r\n\t\t\t\tcached,\r\n\t\t\t\tindex,\r\n\t\t\t\tdata[i],\r\n\t\t\t\tcached[cacheCount],\r\n\t\t\t\tshouldReattach,\r\n\t\t\t\tindex + subArrayCount || subArrayCount,\r\n\t\t\t\teditable,\r\n\t\t\t\tnamespace,\r\n\t\t\t\tconfigs)\r\n\r\n\t\t\tif (item !== undefined) {\r\n\t\t\t\tintact = intact && item.nodes.intact\r\n\t\t\t\tsubArrayCount += getSubArrayCount(item)\r\n\t\t\t\tcached[cacheCount++] = item\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (!intact) diffArray(data, cached, nodes)\r\n\t\treturn cached\r\n\t}\r\n\r\n\tfunction makeCache(data, cached, index, parentIndex, parentCache) {\r\n\t\tif (cached != null) {\r\n\t\t\tif (type.call(cached) === type.call(data)) return cached\r\n\r\n\t\t\tif (parentCache && parentCache.nodes) {\r\n\t\t\t\tvar offset = index - parentIndex\r\n\t\t\t\tvar end = offset + (isArray(data) ? data : cached.nodes).length\r\n\t\t\t\tclear(\r\n\t\t\t\t\tparentCache.nodes.slice(offset, end),\r\n\t\t\t\t\tparentCache.slice(offset, end))\r\n\t\t\t} else if (cached.nodes) {\r\n\t\t\t\tclear(cached.nodes, cached)\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tcached = new data.constructor()\r\n\t\t// if constructor creates a virtual dom element, use a blank object as\r\n\t\t// the base cached node instead of copying the virtual el (#277)\r\n\t\tif (cached.tag) cached = {}\r\n\t\tcached.nodes = []\r\n\t\treturn cached\r\n\t}\r\n\r\n\tfunction constructNode(data, namespace) {\r\n\t\tif (data.attrs.is) {\r\n\t\t\tif (namespace == null) {\r\n\t\t\t\treturn $document.createElement(data.tag, data.attrs.is)\r\n\t\t\t} else {\r\n\t\t\t\treturn $document.createElementNS(namespace, data.tag,\r\n\t\t\t\t\tdata.attrs.is)\r\n\t\t\t}\r\n\t\t} else if (namespace == null) {\r\n\t\t\treturn $document.createElement(data.tag)\r\n\t\t} else {\r\n\t\t\treturn $document.createElementNS(namespace, data.tag)\r\n\t\t}\r\n\t}\r\n\r\n\tfunction constructAttrs(data, node, namespace, hasKeys) {\r\n\t\tif (hasKeys) {\r\n\t\t\treturn setAttributes(node, data.tag, data.attrs, {}, namespace)\r\n\t\t} else {\r\n\t\t\treturn data.attrs\r\n\t\t}\r\n\t}\r\n\r\n\tfunction constructChildren(\r\n\t\tdata,\r\n\t\tnode,\r\n\t\tcached,\r\n\t\teditable,\r\n\t\tnamespace,\r\n\t\tconfigs\r\n\t) {\r\n\t\tif (data.children != null && data.children.length > 0) {\r\n\t\t\treturn build(\r\n\t\t\t\tnode,\r\n\t\t\t\tdata.tag,\r\n\t\t\t\tundefined,\r\n\t\t\t\tundefined,\r\n\t\t\t\tdata.children,\r\n\t\t\t\tcached.children,\r\n\t\t\t\ttrue,\r\n\t\t\t\t0,\r\n\t\t\t\tdata.attrs.contenteditable ? node : editable,\r\n\t\t\t\tnamespace,\r\n\t\t\t\tconfigs)\r\n\t\t} else {\r\n\t\t\treturn data.children\r\n\t\t}\r\n\t}\r\n\r\n\tfunction reconstructCached(\r\n\t\tdata,\r\n\t\tattrs,\r\n\t\tchildren,\r\n\t\tnode,\r\n\t\tnamespace,\r\n\t\tviews,\r\n\t\tcontrollers\r\n\t) {\r\n\t\tvar cached = {\r\n\t\t\ttag: data.tag,\r\n\t\t\tattrs: attrs,\r\n\t\t\tchildren: children,\r\n\t\t\tnodes: [node]\r\n\t\t}\r\n\r\n\t\tunloadCachedControllers(cached, views, controllers)\r\n\r\n\t\tif (cached.children && !cached.children.nodes) {\r\n\t\t\tcached.children.nodes = []\r\n\t\t}\r\n\r\n\t\treturn cached\r\n\t}\r\n\r\n\tfunction getController(views, view, cachedControllers, controller) {\r\n\t\tvar controllerIndex\r\n\r\n\t\tif (m.redraw.strategy() === \"diff\" && views) {\r\n\t\t\tcontrollerIndex = views.indexOf(view)\r\n\t\t} else {\r\n\t\t\tcontrollerIndex = -1\r\n\t\t}\r\n\r\n\t\tif (controllerIndex > -1) {\r\n\t\t\treturn cachedControllers[controllerIndex]\r\n\t\t} else if (isFunction(controller)) {\r\n\t\t\treturn new controller()\r\n\t\t} else {\r\n\t\t\treturn {}\r\n\t\t}\r\n\t}\r\n\r\n\tvar unloaders = []\r\n\r\n\tfunction updateLists(views, controllers, view, controller) {\r\n\t\tif (controller.onunload != null &&\r\n\t\t\t\tunloaders.map(function (u) { return u.handler })\r\n\t\t\t\t\t.indexOf(controller.onunload) < 0) {\r\n\t\t\tunloaders.push({\r\n\t\t\t\tcontroller: controller,\r\n\t\t\t\thandler: controller.onunload\r\n\t\t\t})\r\n\t\t}\r\n\r\n\t\tviews.push(view)\r\n\t\tcontrollers.push(controller)\r\n\t}\r\n\r\n\tvar forcing = false\r\n\tfunction checkView(\r\n\t\tdata,\r\n\t\tview,\r\n\t\tcached,\r\n\t\tcachedControllers,\r\n\t\tcontrollers,\r\n\t\tviews\r\n\t) {\r\n\t\tvar controller = getController(\r\n\t\t\tcached.views,\r\n\t\t\tview,\r\n\t\t\tcachedControllers,\r\n\t\t\tdata.controller)\r\n\r\n\t\tvar key = data && data.attrs && data.attrs.key\r\n\r\n\t\tif (pendingRequests === 0 ||\r\n\t\t\t\tforcing ||\r\n\t\t\t\tcachedControllers &&\r\n\t\t\t\t\tcachedControllers.indexOf(controller) > -1) {\r\n\t\t\tdata = data.view(controller)\r\n\t\t} else {\r\n\t\t\tdata = {tag: \"placeholder\"}\r\n\t\t}\r\n\r\n\t\tif (data.subtree === \"retain\") return data\r\n\t\tdata.attrs = data.attrs || {}\r\n\t\tdata.attrs.key = key\r\n\t\tupdateLists(views, controllers, view, controller)\r\n\t\treturn data\r\n\t}\r\n\r\n\tfunction markViews(data, cached, views, controllers) {\r\n\t\tvar cachedControllers = cached && cached.controllers\r\n\r\n\t\twhile (data.view != null) {\r\n\t\t\tdata = checkView(\r\n\t\t\t\tdata,\r\n\t\t\t\tdata.view.$original || data.view,\r\n\t\t\t\tcached,\r\n\t\t\t\tcachedControllers,\r\n\t\t\t\tcontrollers,\r\n\t\t\t\tviews)\r\n\t\t}\r\n\r\n\t\treturn data\r\n\t}\r\n\r\n\tfunction buildObject( // eslint-disable-line max-statements\r\n\t\tdata,\r\n\t\tcached,\r\n\t\teditable,\r\n\t\tparentElement,\r\n\t\tindex,\r\n\t\tshouldReattach,\r\n\t\tnamespace,\r\n\t\tconfigs\r\n\t) {\r\n\t\tvar views = []\r\n\t\tvar controllers = []\r\n\r\n\t\tdata = markViews(data, cached, views, controllers)\r\n\r\n\t\tif (data.subtree === \"retain\") return cached\r\n\r\n\t\tif (!data.tag && controllers.length) {\r\n\t\t\tthrow new Error(\"Component template must return a virtual \" +\r\n\t\t\t\t\"element, not an array, string, etc.\")\r\n\t\t}\r\n\r\n\t\tdata.attrs = data.attrs || {}\r\n\t\tcached.attrs = cached.attrs || {}\r\n\r\n\t\tvar dataAttrKeys = Object.keys(data.attrs)\r\n\t\tvar hasKeys = dataAttrKeys.length > (\"key\" in data.attrs ? 1 : 0)\r\n\r\n\t\tmaybeRecreateObject(data, cached, dataAttrKeys)\r\n\r\n\t\tif (!isString(data.tag)) return\r\n\r\n\t\tvar isNew = cached.nodes.length === 0\r\n\r\n\t\tnamespace = getObjectNamespace(data, namespace)\r\n\r\n\t\tvar node\r\n\t\tif (isNew) {\r\n\t\t\tnode = constructNode(data, namespace)\r\n\t\t\t// set attributes first, then create children\r\n\t\t\tvar attrs = constructAttrs(data, node, namespace, hasKeys)\r\n\r\n\t\t\t// add the node to its parent before attaching children to it\r\n\t\t\tinsertNode(parentElement, node, index)\r\n\r\n\t\t\tvar children = constructChildren(data, node, cached, editable,\r\n\t\t\t\tnamespace, configs)\r\n\r\n\t\t\tcached = reconstructCached(\r\n\t\t\t\tdata,\r\n\t\t\t\tattrs,\r\n\t\t\t\tchildren,\r\n\t\t\t\tnode,\r\n\t\t\t\tnamespace,\r\n\t\t\t\tviews,\r\n\t\t\t\tcontrollers)\r\n\t\t} else {\r\n\t\t\tnode = buildUpdatedNode(\r\n\t\t\t\tcached,\r\n\t\t\t\tdata,\r\n\t\t\t\teditable,\r\n\t\t\t\thasKeys,\r\n\t\t\t\tnamespace,\r\n\t\t\t\tviews,\r\n\t\t\t\tconfigs,\r\n\t\t\t\tcontrollers)\r\n\t\t}\r\n\r\n\t\t// edge case: setting value on <select> doesn't work before children\r\n\t\t// exist, so set it again after children have been created/updated\r\n\t\tif (data.tag === \"select\" && \"value\" in data.attrs) {\r\n\t\t\tsetAttributes(node, data.tag, {value: data.attrs.value}, {},\r\n\t\t\t\tnamespace)\r\n\t\t}\r\n\r\n\t\tif (!isNew && shouldReattach === true && node != null) {\r\n\t\t\tinsertNode(parentElement, node, index)\r\n\t\t}\r\n\r\n\t\t// The configs are called after `build` finishes running\r\n\t\tscheduleConfigsToBeCalled(configs, data, node, isNew, cached)\r\n\r\n\t\treturn cached\r\n\t}\r\n\r\n\tfunction build(\r\n\t\tparentElement,\r\n\t\tparentTag,\r\n\t\tparentCache,\r\n\t\tparentIndex,\r\n\t\tdata,\r\n\t\tcached,\r\n\t\tshouldReattach,\r\n\t\tindex,\r\n\t\teditable,\r\n\t\tnamespace,\r\n\t\tconfigs\r\n\t) {\r\n\t\t/*\r\n\t\t * `build` is a recursive function that manages creation/diffing/removal\r\n\t\t * of DOM elements based on comparison between `data` and `cached` the\r\n\t\t * diff algorithm can be summarized as this:\r\n\t\t *\r\n\t\t * 1 - compare `data` and `cached`\r\n\t\t * 2 - if they are different, copy `data` to `cached` and update the DOM\r\n\t\t * based on what the difference is\r\n\t\t * 3 - recursively apply this algorithm for every array and for the\r\n\t\t * children of every virtual element\r\n\t\t *\r\n\t\t * The `cached` data structure is essentially the same as the previous\r\n\t\t * redraw's `data` data structure, with a few additions:\r\n\t\t * - `cached` always has a property called `nodes`, which is a list of\r\n\t\t * DOM elements that correspond to the data represented by the\r\n\t\t * respective virtual element\r\n\t\t * - in order to support attaching `nodes` as a property of `cached`,\r\n\t\t * `cached` is *always* a non-primitive object, i.e. if the data was\r\n\t\t * a string, then cached is a String instance. If data was `null` or\r\n\t\t * `undefined`, cached is `new String(\"\")`\r\n\t\t * - `cached also has a `configContext` property, which is the state\r\n\t\t * storage object exposed by config(element, isInitialized, context)\r\n\t\t * - when `cached` is an Object, it represents a virtual element; when\r\n\t\t * it's an Array, it represents a list of elements; when it's a\r\n\t\t * String, Number or Boolean, it represents a text node\r\n\t\t *\r\n\t\t * `parentElement` is a DOM element used for W3C DOM API calls\r\n\t\t * `parentTag` is only used for handling a corner case for textarea\r\n\t\t * values\r\n\t\t * `parentCache` is used to remove nodes in some multi-node cases\r\n\t\t * `parentIndex` and `index` are used to figure out the offset of nodes.\r\n\t\t * They're artifacts from before arrays started being flattened and are\r\n\t\t * likely refactorable\r\n\t\t * `data` and `cached` are, respectively, the new and old nodes being\r\n\t\t * diffed\r\n\t\t * `shouldReattach` is a flag indicating whether a parent node was\r\n\t\t * recreated (if so, and if this node is reused, then this node must\r\n\t\t * reattach itself to the new parent)\r\n\t\t * `editable` is a flag that indicates whether an ancestor is\r\n\t\t * contenteditable\r\n\t\t * `namespace` indicates the closest HTML namespace as it cascades down\r\n\t\t * from an ancestor\r\n\t\t * `configs` is a list of config functions to run after the topmost\r\n\t\t * `build` call finishes running\r\n\t\t *\r\n\t\t * there's logic that relies on the assumption that null and undefined\r\n\t\t * data are equivalent to empty strings\r\n\t\t * - this prevents lifecycle surprises from procedural helpers that mix\r\n\t\t * implicit and explicit return statements (e.g.\r\n\t\t * function foo() {if (cond) return m(\"div\")}\r\n\t\t * - it simplifies diffing code\r\n\t\t */\r\n\t\tdata = dataToString(data)\r\n\t\tif (data.subtree === \"retain\") return cached\r\n\t\tcached = makeCache(data, cached, index, parentIndex, parentCache)\r\n\r\n\t\tif (isArray(data)) {\r\n\t\t\treturn buildArray(\r\n\t\t\t\tdata,\r\n\t\t\t\tcached,\r\n\t\t\t\tparentElement,\r\n\t\t\t\tindex,\r\n\t\t\t\tparentTag,\r\n\t\t\t\tshouldReattach,\r\n\t\t\t\teditable,\r\n\t\t\t\tnamespace,\r\n\t\t\t\tconfigs)\r\n\t\t} else if (data != null && isObject(data)) {\r\n\t\t\treturn buildObject(\r\n\t\t\t\tdata,\r\n\t\t\t\tcached,\r\n\t\t\t\teditable,\r\n\t\t\t\tparentElement,\r\n\t\t\t\tindex,\r\n\t\t\t\tshouldReattach,\r\n\t\t\t\tnamespace,\r\n\t\t\t\tconfigs)\r\n\t\t} else if (!isFunction(data)) {\r\n\t\t\treturn handleTextNode(\r\n\t\t\t\tcached,\r\n\t\t\t\tdata,\r\n\t\t\t\tindex,\r\n\t\t\t\tparentElement,\r\n\t\t\t\tshouldReattach,\r\n\t\t\t\teditable,\r\n\t\t\t\tparentTag)\r\n\t\t} else {\r\n\t\t\treturn cached\r\n\t\t}\r\n\t}\r\n\r\n\tfunction sortChanges(a, b) {\r\n\t\treturn a.action - b.action || a.index - b.index\r\n\t}\r\n\r\n\tfunction copyStyleAttrs(node, dataAttr, cachedAttr) {\r\n\t\tif (cachedAttr === dataAttr) {\r\n\t\t\tnode.style = \"\"\r\n\t\t\tcachedAttr = {}\r\n\t\t}\r\n\t\tfor (var rule in dataAttr) {\r\n\t\t\tif (hasOwn.call(dataAttr, rule)) {\r\n\t\t\t\tif (cachedAttr == null || cachedAttr[rule] !== dataAttr[rule]) {\r\n\t\t\t\t\tnode.style[rule] = dataAttr[rule]\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfor (rule in cachedAttr) {\r\n\t\t\tif (hasOwn.call(cachedAttr, rule)) {\r\n\t\t\t\tif (!hasOwn.call(dataAttr, rule)) node.style[rule] = \"\"\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tvar shouldUseSetAttribute = {\r\n\t\tlist: 1,\r\n\t\tstyle: 1,\r\n\t\tform: 1,\r\n\t\ttype: 1,\r\n\t\twidth: 1,\r\n\t\theight: 1\r\n\t}\r\n\r\n\tfunction setSingleAttr(\r\n\t\tnode,\r\n\t\tattrName,\r\n\t\tdataAttr,\r\n\t\tcachedAttr,\r\n\t\ttag,\r\n\t\tnamespace\r\n\t) {\r\n\t\tif (attrName === \"config\" || attrName === \"key\") {\r\n\t\t\t// `config` isn't a real attribute, so ignore it\r\n\t\t\treturn true\r\n\t\t} else if (isFunction(dataAttr) && attrName.slice(0, 2) === \"on\") {\r\n\t\t\t// hook event handlers to the auto-redrawing system\r\n\t\t\tnode[attrName] = autoredraw(dataAttr, node)\r\n\t\t} else if (attrName === \"style\" && dataAttr != null &&\r\n\t\t\t\tisObject(dataAttr)) {\r\n\t\t\t// handle `style: {...}`\r\n\t\t\tcopyStyleAttrs(node, dataAttr, cachedAttr)\r\n\t\t} else if (namespace != null) {\r\n\t\t\t// handle SVG\r\n\t\t\tif (attrName === \"href\") {\r\n\t\t\t\tnode.setAttributeNS(\"http://www.w3.org/1999/xlink\",\r\n\t\t\t\t\t\"href\", dataAttr)\r\n\t\t\t} else {\r\n\t\t\t\tnode.setAttribute(\r\n\t\t\t\t\tattrName === \"className\" ? \"class\" : attrName,\r\n\t\t\t\t\tdataAttr)\r\n\t\t\t}\r\n\t\t} else if (attrName in node && !shouldUseSetAttribute[attrName]) {\r\n\t\t\t// handle cases that are properties (but ignore cases where we\r\n\t\t\t// should use setAttribute instead)\r\n\t\t\t//\r\n\t\t\t// - list and form are typically used as strings, but are DOM\r\n\t\t\t// element references in js\r\n\t\t\t//\r\n\t\t\t// - when using CSS selectors (e.g. `m(\"[style='']\")`), style is\r\n\t\t\t// used as a string, but it's an object in js\r\n\t\t\t//\r\n\t\t\t// #348 don't set the value if not needed - otherwise, cursor\r\n\t\t\t// placement breaks in Chrome\r\n\t\t\t// #1252 likewise when `contenteditable` is set on an element.\r\n\t\t\ttry {\r\n\t\t\t\tif (\r\n\t\t\t\t\ttag !== \"input\" && !node.isContentEditable ||\r\n\t\t\t\t\tnode[attrName] != dataAttr // eslint-disable-line eqeqeq\r\n\t\t\t\t) {\r\n\t\t\t\t\tnode[attrName] = dataAttr\r\n\t\t\t\t}\r\n\t\t\t} catch (e) {\r\n\t\t\t\tnode.setAttribute(attrName, dataAttr)\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\ttry {\r\n\t\t\t\tnode.setAttribute(attrName, dataAttr)\r\n\t\t\t} catch (e) {\r\n\t\t\t\t// IE8 doesn't allow change input attributes and throws\r\n\t\t\t\t// an exception. Unfortunately it cannot be handled, because\r\n\t\t\t\t// error code is not informative.\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tfunction trySetAttr(\r\n\t\tnode,\r\n\t\tattrName,\r\n\t\tdataAttr,\r\n\t\tcachedAttr,\r\n\t\tcachedAttrs,\r\n\t\ttag,\r\n\t\tnamespace\r\n\t) {\r\n\t\tif (!(attrName in cachedAttrs) ||\r\n\t\t\t\t(cachedAttr !== dataAttr) ||\r\n\t\t\t\ttypeof dataAttr === \"object\" ||\r\n\t\t\t\t($document.activeElement === node)) {\r\n\t\t\tcachedAttrs[attrName] = dataAttr\r\n\t\t\ttry {\r\n\t\t\t\treturn setSingleAttr(\r\n\t\t\t\t\tnode,\r\n\t\t\t\t\tattrName,\r\n\t\t\t\t\tdataAttr,\r\n\t\t\t\t\tcachedAttr,\r\n\t\t\t\t\ttag,\r\n\t\t\t\t\tnamespace)\r\n\t\t\t} catch (e) {\r\n\t\t\t\t// swallow IE's invalid argument errors to mimic HTML's\r\n\t\t\t\t// fallback-to-doing-nothing-on-invalid-attributes behavior\r\n\t\t\t\tif (e.message.indexOf(\"Invalid argument\") < 0) throw e\r\n\t\t\t}\r\n\t\t} else if (attrName === \"value\" && tag === \"input\" &&\r\n\t\t\t\t\t\t\t\t/* eslint-disable eqeqeq */\r\n\t\t\t\t\t\t\t\tnode.value != dataAttr) {\r\n\t\t\t\t\t\t\t\t// #348 dataAttr may not be a string,\r\n\t\t\t\t\t\t\t\t// so use loose comparison\r\n\t\t\t\t\t\t\t\t/* eslint-enable eqeqeq */\r\n\t\t\tnode.value = dataAttr\r\n\t\t}\r\n\t}\r\n\r\n\tfunction setAttributes(node, tag, dataAttrs, cachedAttrs, namespace) {\r\n\t\tfor (var attrName in dataAttrs) {\r\n\t\t\tif (hasOwn.call(dataAttrs, attrName)) {\r\n\t\t\t\tif (trySetAttr(\r\n\t\t\t\t\t\tnode,\r\n\t\t\t\t\t\tattrName,\r\n\t\t\t\t\t\tdataAttrs[attrName],\r\n\t\t\t\t\t\tcachedAttrs[attrName],\r\n\t\t\t\t\t\tcachedAttrs,\r\n\t\t\t\t\t\ttag,\r\n\t\t\t\t\t\tnamespace)) {\r\n\t\t\t\t\tcontinue\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn cachedAttrs\r\n\t}\r\n\r\n\tfunction clear(nodes, cached) {\r\n\t\tfor (var i = nodes.length - 1; i > -1; i--) {\r\n\t\t\tif (nodes[i] && nodes[i].parentNode) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tnodes[i].parentNode.removeChild(nodes[i])\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\t/* eslint-disable max-len */\r\n\t\t\t\t\t// ignore if this fails due to order of events (see\r\n\t\t\t\t\t// http://stackoverflow.com/questions/21926083/failed-to-execute-removechild-on-node)\r\n\t\t\t\t\t/* eslint-enable max-len */\r\n\t\t\t\t}\r\n\t\t\t\tcached = [].concat(cached)\r\n\t\t\t\tif (cached[i]) unload(cached[i])\r\n\t\t\t}\r\n\t\t}\r\n\t\t// release memory if nodes is an array. This check should fail if nodes\r\n\t\t// is a NodeList (see loop above)\r\n\t\tif (nodes.length) {\r\n\t\t\tnodes.length = 0\r\n\t\t}\r\n\t}\r\n\r\n\tfunction unload(cached) {\r\n\t\tif (cached.configContext && isFunction(cached.configContext.onunload)) {\r\n\t\t\tcached.configContext.onunload()\r\n\t\t\tcached.configContext.onunload = null\r\n\t\t}\r\n\t\tif (cached.controllers) {\r\n\t\t\tforEach(cached.controllers, function (controller) {\r\n\t\t\t\tif (isFunction(controller.onunload)) {\r\n\t\t\t\t\tcontroller.onunload({preventDefault: noop})\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\t}\r\n\t\tif (cached.children) {\r\n\t\t\tif (isArray(cached.children)) forEach(cached.children, unload)\r\n\t\t\telse if (cached.children.tag) unload(cached.children)\r\n\t\t}\r\n\t}\r\n\r\n\tfunction appendTextFragment(parentElement, data) {\r\n\t\ttry {\r\n\t\t\tparentElement.appendChild(\r\n\t\t\t\t$document.createRange().createContextualFragment(data))\r\n\t\t} catch (e) {\r\n\t\t\tparentElement.insertAdjacentHTML(\"beforeend\", data)\r\n\t\t\treplaceScriptNodes(parentElement)\r\n\t\t}\r\n\t}\r\n\r\n\t// Replace script tags inside given DOM element with executable ones.\r\n\t// Will also check children recursively and replace any found script\r\n\t// tags in same manner.\r\n\tfunction replaceScriptNodes(node) {\r\n\t\tif (node.tagName === \"SCRIPT\") {\r\n\t\t\tnode.parentNode.replaceChild(buildExecutableNode(node), node)\r\n\t\t} else {\r\n\t\t\tvar children = node.childNodes\r\n\t\t\tif (children && children.length) {\r\n\t\t\t\tfor (var i = 0; i < children.length; i++) {\r\n\t\t\t\t\treplaceScriptNodes(children[i])\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn node\r\n\t}\r\n\r\n\t// Replace script element with one whose contents are executable.\r\n\tfunction buildExecutableNode(node){\r\n\t\tvar scriptEl = document.createElement(\"script\")\r\n\t\tvar attrs = node.attributes\r\n\r\n\t\tfor (var i = 0; i < attrs.length; i++) {\r\n\t\t\tscriptEl.setAttribute(attrs[i].name, attrs[i].value)\r\n\t\t}\r\n\r\n\t\tscriptEl.text = node.innerHTML\r\n\t\treturn scriptEl\r\n\t}\r\n\r\n\tfunction injectHTML(parentElement, index, data) {\r\n\t\tvar nextSibling = parentElement.childNodes[index]\r\n\t\tif (nextSibling) {\r\n\t\t\tvar isElement = nextSibling.nodeType !== 1\r\n\t\t\tvar placeholder = $document.createElement(\"span\")\r\n\t\t\tif (isElement) {\r\n\t\t\t\tparentElement.insertBefore(placeholder, nextSibling || null)\r\n\t\t\t\tplaceholder.insertAdjacentHTML(\"beforebegin\", data)\r\n\t\t\t\tparentElement.removeChild(placeholder)\r\n\t\t\t} else {\r\n\t\t\t\tnextSibling.insertAdjacentHTML(\"beforebegin\", data)\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tappendTextFragment(parentElement, data)\r\n\t\t}\r\n\r\n\t\tvar nodes = []\r\n\r\n\t\twhile (parentElement.childNodes[index] !== nextSibling) {\r\n\t\t\tnodes.push(parentElement.childNodes[index])\r\n\t\t\tindex++\r\n\t\t}\r\n\r\n\t\treturn nodes\r\n\t}\r\n\r\n\tfunction autoredraw(callback, object) {\r\n\t\treturn function (e) {\r\n\t\t\te = e || event\r\n\t\t\tm.redraw.strategy(\"diff\")\r\n\t\t\tm.startComputation()\r\n\t\t\ttry {\r\n\t\t\t\treturn callback.call(object, e)\r\n\t\t\t} finally {\r\n\t\t\t\tendFirstComputation()\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tvar html\r\n\tvar documentNode = {\r\n\t\tappendChild: function (node) {\r\n\t\t\tif (html === undefined) html = $document.createElement(\"html\")\r\n\t\t\tif ($document.documentElement &&\r\n\t\t\t\t\t$document.documentElement !== node) {\r\n\t\t\t\t$document.replaceChild(node, $document.documentElement)\r\n\t\t\t} else {\r\n\t\t\t\t$document.appendChild(node)\r\n\t\t\t}\r\n\r\n\t\t\tthis.childNodes = $document.childNodes\r\n\t\t},\r\n\r\n\t\tinsertBefore: function (node) {\r\n\t\t\tthis.appendChild(node)\r\n\t\t},\r\n\r\n\t\tchildNodes: []\r\n\t}\r\n\r\n\tvar nodeCache = []\r\n\tvar cellCache = {}\r\n\r\n\tm.render = function (root, cell, forceRecreation) {\r\n\t\tif (!root) {\r\n\t\t\tthrow new Error(\"Ensure the DOM element being passed to \" +\r\n\t\t\t\t\"m.route/m.mount/m.render is not undefined.\")\r\n\t\t}\r\n\t\tvar configs = []\r\n\t\tvar id = getCellCacheKey(root)\r\n\t\tvar isDocumentRoot = root === $document\r\n\t\tvar node\r\n\r\n\t\tif (isDocumentRoot || root === $document.documentElement) {\r\n\t\t\tnode = documentNode\r\n\t\t} else {\r\n\t\t\tnode = root\r\n\t\t}\r\n\r\n\t\tif (isDocumentRoot && cell.tag !== \"html\") {\r\n\t\t\tcell = {tag: \"html\", attrs: {}, children: cell}\r\n\t\t}\r\n\r\n\t\tif (cellCache[id] === undefined) clear(node.childNodes)\r\n\t\tif (forceRecreation === true) reset(root)\r\n\r\n\t\tcellCache[id] = build(\r\n\t\t\tnode,\r\n\t\t\tnull,\r\n\t\t\tundefined,\r\n\t\t\tundefined,\r\n\t\t\tcell,\r\n\t\t\tcellCache[id],\r\n\t\t\tfalse,\r\n\t\t\t0,\r\n\t\t\tnull,\r\n\t\t\tundefined,\r\n\t\t\tconfigs)\r\n\r\n\t\tforEach(configs, function (config) { config() })\r\n\t}\r\n\r\n\tfunction getCellCacheKey(element) {\r\n\t\tvar index = nodeCache.indexOf(element)\r\n\t\treturn index < 0 ? nodeCache.push(element) - 1 : index\r\n\t}\r\n\r\n\tm.trust = function (value) {\r\n\t\tvalue = new String(value) // eslint-disable-line no-new-wrappers\r\n\t\tvalue.$trusted = true\r\n\t\treturn value\r\n\t}\r\n\r\n\tfunction gettersetter(store) {\r\n\t\tfunction prop() {\r\n\t\t\tif (arguments.length) store = arguments[0]\r\n\t\t\treturn store\r\n\t\t}\r\n\r\n\t\tprop.toJSON = function () {\r\n\t\t\tif (store && isFunction(store.toJSON)) return store.toJSON()\r\n\t\t\treturn store\r\n\t\t}\r\n\r\n\t\treturn prop\r\n\t}\r\n\r\n\tm.prop = function (store) {\r\n\t\tif ((store != null && (isObject(store) || isFunction(store)) ||\r\n\t\t\t\t\t((typeof Promise !== \"undefined\") &&\r\n\t\t\t\t\t\t(store instanceof Promise))) &&\r\n\t\t\t\tisFunction(store.then)) {\r\n\t\t\treturn propify(store)\r\n\t\t}\r\n\r\n\t\treturn gettersetter(store)\r\n\t}\r\n\r\n\tvar roots = []\r\n\tvar components = []\r\n\tvar controllers = []\r\n\tvar lastRedrawId = null\r\n\tvar lastRedrawCallTime = 0\r\n\tvar computePreRedrawHook = null\r\n\tvar computePostRedrawHook = null\r\n\tvar topComponent\r\n\tvar FRAME_BUDGET = 16 // 60 frames per second = 1 call per 16 ms\r\n\r\n\tfunction parameterize(component, args) {\r\n\t\tfunction controller() {\r\n\t\t\t/* eslint-disable no-invalid-this */\r\n\t\t\treturn (component.controller || noop).apply(this, args) || this\r\n\t\t\t/* eslint-enable no-invalid-this */\r\n\t\t}\r\n\r\n\t\tif (component.controller) {\r\n\t\t\tcontroller.prototype = component.controller.prototype\r\n\t\t}\r\n\r\n\t\tfunction view(ctrl) {\r\n\t\t\tvar currentArgs = [ctrl].concat(args)\r\n\t\t\tfor (var i = 1; i < arguments.length; i++) {\r\n\t\t\t\tcurrentArgs.push(arguments[i])\r\n\t\t\t}\r\n\r\n\t\t\treturn component.view.apply(component, currentArgs)\r\n\t\t}\r\n\r\n\t\tview.$original = component.view\r\n\t\tvar output = {controller: controller, view: view}\r\n\t\tif (args[0] && args[0].key != null) output.attrs = {key: args[0].key}\r\n\t\treturn output\r\n\t}\r\n\r\n\tm.component = function (component) {\r\n\t\tvar args = new Array(arguments.length - 1)\r\n\r\n\t\tfor (var i = 1; i < arguments.length; i++) {\r\n\t\t\targs[i - 1] = arguments[i]\r\n\t\t}\r\n\r\n\t\treturn parameterize(component, args)\r\n\t}\r\n\r\n\tvar currentRoute, previousRoute\r\n\r\n\tfunction checkPrevented(component, root, index, isPrevented) {\r\n\t\tif (!isPrevented) {\r\n\t\t\tm.redraw.strategy(\"all\")\r\n\t\t\tm.startComputation()\r\n\t\t\troots[index] = root\r\n\t\t\tvar currentComponent\r\n\r\n\t\t\tif (component) {\r\n\t\t\t\tcurrentComponent = topComponent = component\r\n\t\t\t} else {\r\n\t\t\t\tcurrentComponent = topComponent = component = {controller: noop}\r\n\t\t\t}\r\n\r\n\t\t\tvar controller = new (component.controller || noop)()\r\n\r\n\t\t\t// controllers may call m.mount recursively (via m.route redirects,\r\n\t\t\t// for example)\r\n\t\t\t// this conditional ensures only the last recursive m.mount call is\r\n\t\t\t// applied\r\n\t\t\tif (currentComponent === topComponent) {\r\n\t\t\t\tcontrollers[index] = controller\r\n\t\t\t\tcomponents[index] = component\r\n\t\t\t}\r\n\t\t\tendFirstComputation()\r\n\t\t\tif (component === null) {\r\n\t\t\t\tremoveRootElement(root, index)\r\n\t\t\t}\r\n\t\t\treturn controllers[index]\r\n\t\t} else {\r\n\t\t\tif (component == null) {\r\n\t\t\t\tremoveRootElement(root, index)\r\n\t\t\t}\r\n\r\n\t\t\tif (previousRoute) {\r\n\t\t\t\tcurrentRoute = previousRoute\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tm.mount = m.module = function (root, component) {\r\n\t\tif (!root) {\r\n\t\t\tthrow new Error(\"Ensure the DOM element being passed to \" +\r\n\t\t\t\t\"m.route/m.mount/m.render is not undefined.\")\r\n\t\t}\r\n\r\n\t\tvar index = roots.indexOf(root)\r\n\t\tif (index < 0) index = roots.length\r\n\r\n\t\tvar isPrevented = false\r\n\t\tvar event = {\r\n\t\t\tpreventDefault: function () {\r\n\t\t\t\tisPrevented = true\r\n\t\t\t\tcomputePreRedrawHook = computePostRedrawHook = null\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tforEach(unloaders, function (unloader) {\r\n\t\t\tunloader.handler.call(unloader.controller, event)\r\n\t\t\tunloader.controller.onunload = null\r\n\t\t})\r\n\r\n\t\tif (isPrevented) {\r\n\t\t\tforEach(unloaders, function (unloader) {\r\n\t\t\t\tunloader.controller.onunload = unloader.handler\r\n\t\t\t})\r\n\t\t} else {\r\n\t\t\tunloaders = []\r\n\t\t}\r\n\r\n\t\tif (controllers[index] && isFunction(controllers[index].onunload)) {\r\n\t\t\tcontrollers[index].onunload(event)\r\n\t\t}\r\n\r\n\t\treturn checkPrevented(component, root, index, isPrevented)\r\n\t}\r\n\r\n\tfunction removeRootElement(root, index) {\r\n\t\troots.splice(index, 1)\r\n\t\tcontrollers.splice(index, 1)\r\n\t\tcomponents.splice(index, 1)\r\n\t\treset(root)\r\n\t\tnodeCache.splice(getCellCacheKey(root), 1)\r\n\t\tunloaders = []\r\n\t}\r\n\r\n\tvar redrawing = false\r\n\tm.redraw = function (force) {\r\n\t\tif (redrawing) return\r\n\t\tredrawing = true\r\n\t\tif (force) forcing = true\r\n\r\n\t\ttry {\r\n\t\t\t// lastRedrawId is a positive number if a second redraw is requested\r\n\t\t\t// before the next animation frame\r\n\t\t\t// lastRedrawId is null if it's the first redraw and not an event\r\n\t\t\t// handler\r\n\t\t\tif (lastRedrawId && !force) {\r\n\t\t\t\t// when setTimeout: only reschedule redraw if time between now\r\n\t\t\t\t// and previous redraw is bigger than a frame, otherwise keep\r\n\t\t\t\t// currently scheduled timeout\r\n\t\t\t\t// when rAF: always reschedule redraw\r\n\t\t\t\tif ($requestAnimationFrame === global.requestAnimationFrame ||\r\n\t\t\t\t\t\tnew Date() - lastRedrawCallTime > FRAME_BUDGET) {\r\n\t\t\t\t\tif (lastRedrawId > 0) $cancelAnimationFrame(lastRedrawId)\r\n\t\t\t\t\tlastRedrawId = $requestAnimationFrame(redraw, FRAME_BUDGET)\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tredraw()\r\n\t\t\t\tlastRedrawId = $requestAnimationFrame(function () {\r\n\t\t\t\t\tlastRedrawId = null\r\n\t\t\t\t}, FRAME_BUDGET)\r\n\t\t\t}\r\n\t\t} finally {\r\n\t\t\tredrawing = forcing = false\r\n\t\t}\r\n\t}\r\n\r\n\tm.redraw.strategy = m.prop()\r\n\tfunction redraw() {\r\n\t\tif (computePreRedrawHook) {\r\n\t\t\tcomputePreRedrawHook()\r\n\t\t\tcomputePreRedrawHook = null\r\n\t\t}\r\n\t\tforEach(roots, function (root, i) {\r\n\t\t\tvar component = components[i]\r\n\t\t\tif (controllers[i]) {\r\n\t\t\t\tvar args = [controllers[i]]\r\n\t\t\t\tm.render(root,\r\n\t\t\t\t\tcomponent.view ? component.view(controllers[i], args) : \"\")\r\n\t\t\t}\r\n\t\t})\r\n\t\t// after rendering within a routed context, we need to scroll back to\r\n\t\t// the top, and fetch the document title for history.pushState\r\n\t\tif (computePostRedrawHook) {\r\n\t\t\tcomputePostRedrawHook()\r\n\t\t\tcomputePostRedrawHook = null\r\n\t\t}\r\n\t\tlastRedrawId = null\r\n\t\tlastRedrawCallTime = new Date()\r\n\t\tm.redraw.strategy(\"diff\")\r\n\t}\r\n\r\n\tfunction endFirstComputation() {\r\n\t\tif (m.redraw.strategy() === \"none\") {\r\n\t\t\tpendingRequests--\r\n\t\t\tm.redraw.strategy(\"diff\")\r\n\t\t} else {\r\n\t\t\tm.endComputation()\r\n\t\t}\r\n\t}\r\n\r\n\tm.withAttr = function (prop, withAttrCallback, callbackThis) {\r\n\t\treturn function (e) {\r\n\t\t\te = e || window.event\r\n\t\t\t/* eslint-disable no-invalid-this */\r\n\t\t\tvar currentTarget = e.currentTarget || this\r\n\t\t\tvar _this = callbackThis || this\r\n\t\t\t/* eslint-enable no-invalid-this */\r\n\t\t\tvar target = prop in currentTarget ?\r\n\t\t\t\tcurrentTarget[prop] :\r\n\t\t\t\tcurrentTarget.getAttribute(prop)\r\n\t\t\twithAttrCallback.call(_this, target)\r\n\t\t}\r\n\t}\r\n\r\n\t// routing\r\n\tvar modes = {pathname: \"\", hash: \"#\", search: \"?\"}\r\n\tvar redirect = noop\r\n\tvar isDefaultRoute = false\r\n\tvar routeParams\r\n\r\n\tm.route = function (root, arg1, arg2, vdom) { // eslint-disable-line\r\n\t\t// m.route()\r\n\t\tif (arguments.length === 0) return currentRoute\r\n\t\t// m.route(el, defaultRoute, routes)\r\n\t\tif (arguments.length === 3 && isString(arg1)) {\r\n\t\t\tredirect = function (source) {\r\n\t\t\t\tvar path = currentRoute = normalizeRoute(source)\r\n\t\t\t\tif (!routeByValue(root, arg2, path)) {\r\n\t\t\t\t\tif (isDefaultRoute) {\r\n\t\t\t\t\t\tthrow new Error(\"Ensure the default route matches \" +\r\n\t\t\t\t\t\t\t\"one of the routes defined in m.route\")\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tisDefaultRoute = true\r\n\t\t\t\t\tm.route(arg1, true)\r\n\t\t\t\t\tisDefaultRoute = false\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tvar listener = m.route.mode === \"hash\" ?\r\n\t\t\t\t\"onhashchange\" :\r\n\t\t\t\t\"onpopstate\"\r\n\r\n\t\t\tglobal[listener] = function () {\r\n\t\t\t\tvar path = $location[m.route.mode]\r\n\t\t\t\tif (m.route.mode === \"pathname\") path += $location.search\r\n\t\t\t\tif (currentRoute !== normalizeRoute(path)) redirect(path)\r\n\t\t\t}\r\n\r\n\t\t\tcomputePreRedrawHook = setScroll\r\n\t\t\tglobal[listener]()\r\n\r\n\t\t\treturn\r\n\t\t}\r\n\r\n\t\t// config: m.route\r\n\t\tif (root.addEventListener || root.attachEvent) {\r\n\t\t\tvar base = m.route.mode !== \"pathname\" ? $location.pathname : \"\"\r\n\t\t\troot.href = base + modes[m.route.mode] + vdom.attrs.href\r\n\t\t\tif (root.addEventListener) {\r\n\t\t\t\troot.removeEventListener(\"click\", routeUnobtrusive)\r\n\t\t\t\troot.addEventListener(\"click\", routeUnobtrusive)\r\n\t\t\t} else {\r\n\t\t\t\troot.detachEvent(\"onclick\", routeUnobtrusive)\r\n\t\t\t\troot.attachEvent(\"onclick\", routeUnobtrusive)\r\n\t\t\t}\r\n\r\n\t\t\treturn\r\n\t\t}\r\n\t\t// m.route(route, params, shouldReplaceHistoryEntry)\r\n\t\tif (isString(root)) {\r\n\t\t\tpreviousRoute = currentRoute\r\n\t\t\tcurrentRoute = root\r\n\r\n\t\t\tvar args = arg1 || {}\r\n\t\t\tvar queryIndex = currentRoute.indexOf(\"?\")\r\n\t\t\tvar params\r\n\r\n\t\t\tif (queryIndex > -1) {\r\n\t\t\t\tparams = parseQueryString(currentRoute.slice(queryIndex + 1))\r\n\t\t\t} else {\r\n\t\t\t\tparams = {}\r\n\t\t\t}\r\n\r\n\t\t\tfor (var i in args) {\r\n\t\t\t\tif (hasOwn.call(args, i)) {\r\n\t\t\t\t\tparams[i] = args[i]\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tvar querystring = buildQueryString(params)\r\n\t\t\tvar currentPath\r\n\r\n\t\t\tif (queryIndex > -1) {\r\n\t\t\t\tcurrentPath = currentRoute.slice(0, queryIndex)\r\n\t\t\t} else {\r\n\t\t\t\tcurrentPath = currentRoute\r\n\t\t\t}\r\n\r\n\t\t\tif (querystring) {\r\n\t\t\t\tcurrentRoute = currentPath +\r\n\t\t\t\t\t(currentPath.indexOf(\"?\") === -1 ? \"?\" : \"&\") +\r\n\t\t\t\t\tquerystring\r\n\t\t\t}\r\n\r\n\t\t\tvar replaceHistory =\r\n\t\t\t\t(arguments.length === 3 ? arg2 : arg1) === true ||\r\n\t\t\t\tpreviousRoute === currentRoute\r\n\r\n\t\t\tif (global.history.pushState) {\r\n\t\t\t\tvar method = replaceHistory ? \"replaceState\" : \"pushState\"\r\n\t\t\t\tcomputePreRedrawHook = setScroll\r\n\t\t\t\tcomputePostRedrawHook = function () {\r\n\t\t\t\t\ttry {\r\n\t\t\t\t\t\tglobal.history[method](null, $document.title,\r\n\t\t\t\t\t\t\tmodes[m.route.mode] + currentRoute)\r\n\t\t\t\t\t} catch (err) {\r\n\t\t\t\t\t\t// In the event of a pushState or replaceState failure,\r\n\t\t\t\t\t\t// fallback to a standard redirect. This is specifically\r\n\t\t\t\t\t\t// to address a Safari security error when attempting to\r\n\t\t\t\t\t\t// call pushState more than 100 times.\r\n\t\t\t\t\t\t$location[m.route.mode] = currentRoute\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tredirect(modes[m.route.mode] + currentRoute)\r\n\t\t\t} else {\r\n\t\t\t\t$location[m.route.mode] = currentRoute\r\n\t\t\t\tredirect(modes[m.route.mode] + currentRoute)\r\n\t\t\t}\r\n\r\n\t\t\tpreviousRoute = null\r\n\t\t}\r\n\t}\r\n\r\n\tm.route.param = function (key) {\r\n\t\tif (!routeParams) {\r\n\t\t\tthrow new Error(\"You must call m.route(element, defaultRoute, \" +\r\n\t\t\t\t\"routes) before calling m.route.param()\")\r\n\t\t}\r\n\r\n\t\tif (!key) {\r\n\t\t\treturn routeParams\r\n\t\t}\r\n\r\n\t\treturn routeParams[key]\r\n\t}\r\n\r\n\tm.route.mode = \"search\"\r\n\r\n\tfunction normalizeRoute(route) {\r\n\t\treturn route.slice(modes[m.route.mode].length)\r\n\t}\r\n\r\n\tfunction routeByValue(root, router, path) {\r\n\t\trouteParams = {}\r\n\r\n\t\tvar queryStart = path.indexOf(\"?\")\r\n\t\tif (queryStart !== -1) {\r\n\t\t\trouteParams = parseQueryString(\r\n\t\t\t\tpath.substr(queryStart + 1, path.length))\r\n\t\t\tpath = path.substr(0, queryStart)\r\n\t\t}\r\n\r\n\t\t// Get all routes and check if there's\r\n\t\t// an exact match for the current path\r\n\t\tvar keys = Object.keys(router)\r\n\t\tvar index = keys.indexOf(path)\r\n\r\n\t\tif (index !== -1){\r\n\t\t\tm.mount(root, router[keys [index]])\r\n\t\t\treturn true\r\n\t\t}\r\n\r\n\t\tfor (var route in router) {\r\n\t\t\tif (hasOwn.call(router, route)) {\r\n\t\t\t\tif (route === path) {\r\n\t\t\t\t\tm.mount(root, router[route])\r\n\t\t\t\t\treturn true\r\n\t\t\t\t}\r\n\r\n\t\t\t\tvar matcher = new RegExp(\"^\" + route\r\n\t\t\t\t\t.replace(/:[^\\/]+?\\.{3}/g, \"(.*?)\")\r\n\t\t\t\t\t.replace(/:[^\\/]+/g, \"([^\\\\/]+)\") + \"\\/?$\")\r\n\r\n\t\t\t\tif (matcher.test(path)) {\r\n\t\t\t\t\t/* eslint-disable no-loop-func */\r\n\t\t\t\t\tpath.replace(matcher, function () {\r\n\t\t\t\t\t\tvar keys = route.match(/:[^\\/]+/g) || []\r\n\t\t\t\t\t\tvar values = [].slice.call(arguments, 1, -2)\r\n\t\t\t\t\t\tforEach(keys, function (key, i) {\r\n\t\t\t\t\t\t\trouteParams[key.replace(/:|\\./g, \"\")] =\r\n\t\t\t\t\t\t\t\tdecodeURIComponent(values[i])\r\n\t\t\t\t\t\t})\r\n\t\t\t\t\t\tm.mount(root, router[route])\r\n\t\t\t\t\t})\r\n\t\t\t\t\t/* eslint-enable no-loop-func */\r\n\t\t\t\t\treturn true\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tfunction routeUnobtrusive(e) {\r\n\t\te = e || event\r\n\t\tif (e.ctrlKey || e.metaKey || e.shiftKey || e.which === 2) return\r\n\r\n\t\tif (e.preventDefault) {\r\n\t\t\te.preventDefault()\r\n\t\t} else {\r\n\t\t\te.returnValue = false\r\n\t\t}\r\n\r\n\t\tvar currentTarget = e.currentTarget || e.srcElement\r\n\t\tvar args\r\n\r\n\t\tif (m.route.mode === \"pathname\" && currentTarget.search) {\r\n\t\t\targs = parseQueryString(currentTarget.search.slice(1))\r\n\t\t} else {\r\n\t\t\targs = {}\r\n\t\t}\r\n\r\n\t\twhile (currentTarget && !/a/i.test(currentTarget.nodeName)) {\r\n\t\t\tcurrentTarget = currentTarget.parentNode\r\n\t\t}\r\n\r\n\t\t// clear pendingRequests because we want an immediate route change\r\n\t\tpendingRequests = 0\r\n\t\tm.route(currentTarget[m.route.mode]\r\n\t\t\t.slice(modes[m.route.mode].length), args)\r\n\t}\r\n\r\n\tfunction setScroll() {\r\n\t\tif (m.route.mode !== \"hash\" && $location.hash) {\r\n\t\t\t$location.hash = $location.hash\r\n\t\t} else {\r\n\t\t\tglobal.scrollTo(0, 0)\r\n\t\t}\r\n\t}\r\n\r\n\tfunction buildQueryString(object, prefix) {\r\n\t\tvar duplicates = {}\r\n\t\tvar str = []\r\n\r\n\t\tfor (var prop in object) {\r\n\t\t\tif (hasOwn.call(object, prop)) {\r\n\t\t\t\tvar key = prefix ? prefix + \"[\" + prop + \"]\" : prop\r\n\t\t\t\tvar value = object[prop]\r\n\r\n\t\t\t\tif (value === null) {\r\n\t\t\t\t\tstr.push(encodeURIComponent(key))\r\n\t\t\t\t} else if (isObject(value)) {\r\n\t\t\t\t\tstr.push(buildQueryString(value, key))\r\n\t\t\t\t} else if (isArray(value)) {\r\n\t\t\t\t\tvar keys = []\r\n\t\t\t\t\tduplicates[key] = duplicates[key] || {}\r\n\t\t\t\t\t/* eslint-disable no-loop-func */\r\n\t\t\t\t\tforEach(value, function (item) {\r\n\t\t\t\t\t\t/* eslint-enable no-loop-func */\r\n\t\t\t\t\t\tif (!duplicates[key][item]) {\r\n\t\t\t\t\t\t\tduplicates[key][item] = true\r\n\t\t\t\t\t\t\tkeys.push(encodeURIComponent(key) + \"=\" +\r\n\t\t\t\t\t\t\t\tencodeURIComponent(item))\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t})\r\n\t\t\t\t\tstr.push(keys.join(\"&\"))\r\n\t\t\t\t} else if (value !== undefined) {\r\n\t\t\t\t\tstr.push(encodeURIComponent(key) + \"=\" +\r\n\t\t\t\t\t\tencodeURIComponent(value))\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn str.join(\"&\")\r\n\t}\r\n\r\n\tfunction parseQueryString(str) {\r\n\t\tif (str === \"\" || str == null) return {}\r\n\t\tif (str.charAt(0) === \"?\") str = str.slice(1)\r\n\r\n\t\tvar pairs = str.split(\"&\")\r\n\t\tvar params = {}\r\n\r\n\t\tforEach(pairs, function (string) {\r\n\t\t\tvar pair = string.split(\"=\")\r\n\t\t\tvar key = decodeURIComponent(pair[0])\r\n\t\t\tvar value = pair.length === 2 ? decodeURIComponent(pair[1]) : null\r\n\t\t\tif (params[key] != null) {\r\n\t\t\t\tif (!isArray(params[key])) params[key] = [params[key]]\r\n\t\t\t\tparams[key].push(value)\r\n\t\t\t} else params[key] = value\r\n\t\t})\r\n\r\n\t\treturn params\r\n\t}\r\n\r\n\tm.route.buildQueryString = buildQueryString\r\n\tm.route.parseQueryString = parseQueryString\r\n\r\n\tfunction reset(root) {\r\n\t\tvar cacheKey = getCellCacheKey(root)\r\n\t\tclear(root.childNodes, cellCache[cacheKey])\r\n\t\tcellCache[cacheKey] = undefined\r\n\t}\r\n\r\n\tm.deferred = function () {\r\n\t\tvar deferred = new Deferred()\r\n\t\tdeferred.promise = propify(deferred.promise)\r\n\t\treturn deferred\r\n\t}\r\n\r\n\tfunction propify(promise, initialValue) {\r\n\t\tvar prop = m.prop(initialValue)\r\n\t\tpromise.then(prop)\r\n\t\tprop.then = function (resolve, reject) {\r\n\t\t\treturn propify(promise.then(resolve, reject), initialValue)\r\n\t\t}\r\n\r\n\t\tprop[\"catch\"] = prop.then.bind(null, null)\r\n\t\treturn prop\r\n\t}\r\n\t// Promiz.mithril.js | Zolmeister | MIT\r\n\t// a modified version of Promiz.js, which does not conform to Promises/A+\r\n\t// for two reasons:\r\n\t//\r\n\t// 1) `then` callbacks are called synchronously (because setTimeout is too\r\n\t// slow, and the setImmediate polyfill is too big\r\n\t//\r\n\t// 2) throwing subclasses of Error cause the error to be bubbled up instead\r\n\t// of triggering rejection (because the spec does not account for the\r\n\t// important use case of default browser error handling, i.e. message w/\r\n\t// line number)\r\n\r\n\tvar RESOLVING = 1\r\n\tvar REJECTING = 2\r\n\tvar RESOLVED = 3\r\n\tvar REJECTED = 4\r\n\r\n\tfunction Deferred(onSuccess, onFailure) {\r\n\t\tvar self = this\r\n\t\tvar state = 0\r\n\t\tvar promiseValue = 0\r\n\t\tvar next = []\r\n\r\n\t\tself.promise = {}\r\n\r\n\t\tself.resolve = function (value) {\r\n\t\t\tif (!state) {\r\n\t\t\t\tpromiseValue = value\r\n\t\t\t\tstate = RESOLVING\r\n\r\n\t\t\t\tfire()\r\n\t\t\t}\r\n\r\n\t\t\treturn self\r\n\t\t}\r\n\r\n\t\tself.reject = function (value) {\r\n\t\t\tif (!state) {\r\n\t\t\t\tpromiseValue = value\r\n\t\t\t\tstate = REJECTING\r\n\r\n\t\t\t\tfire()\r\n\t\t\t}\r\n\r\n\t\t\treturn self\r\n\t\t}\r\n\r\n\t\tself.promise.then = function (onSuccess, onFailure) {\r\n\t\t\tvar deferred = new Deferred(onSuccess, onFailure)\r\n\r\n\t\t\tif (state === RESOLVED) {\r\n\t\t\t\tdeferred.resolve(promiseValue)\r\n\t\t\t} else if (state === REJECTED) {\r\n\t\t\t\tdeferred.reject(promiseValue)\r\n\t\t\t} else {\r\n\t\t\t\tnext.push(deferred)\r\n\t\t\t}\r\n\r\n\t\t\treturn deferred.promise\r\n\t\t}\r\n\r\n\t\tfunction finish(type) {\r\n\t\t\tstate = type || REJECTED\r\n\t\t\tnext.map(function (deferred) {\r\n\t\t\t\tif (state === RESOLVED) {\r\n\t\t\t\t\tdeferred.resolve(promiseValue)\r\n\t\t\t\t} else {\r\n\t\t\t\t\tdeferred.reject(promiseValue)\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\t}\r\n\r\n\t\tfunction thennable(then, success, failure, notThennable) {\r\n\t\t\tif (((promiseValue != null && isObject(promiseValue)) ||\r\n\t\t\t\t\tisFunction(promiseValue)) && isFunction(then)) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\t// count protects against abuse calls from spec checker\r\n\t\t\t\t\tvar count = 0\r\n\t\t\t\t\tthen.call(promiseValue, function (value) {\r\n\t\t\t\t\t\tif (count++) return\r\n\t\t\t\t\t\tpromiseValue = value\r\n\t\t\t\t\t\tsuccess()\r\n\t\t\t\t\t}, function (value) {\r\n\t\t\t\t\t\tif (count++) return\r\n\t\t\t\t\t\tpromiseValue = value\r\n\t\t\t\t\t\tfailure()\r\n\t\t\t\t\t})\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tm.deferred.onerror(e)\r\n\t\t\t\t\tpromiseValue = e\r\n\t\t\t\t\tfailure()\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tnotThennable()\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfunction fire() {\r\n\t\t\t// check if it's a thenable\r\n\t\t\tvar then\r\n\t\t\ttry {\r\n\t\t\t\tthen = promiseValue && promiseValue.then\r\n\t\t\t} catch (e) {\r\n\t\t\t\tm.deferred.onerror(e)\r\n\t\t\t\tpromiseValue = e\r\n\t\t\t\tstate = REJECTING\r\n\t\t\t\treturn fire()\r\n\t\t\t}\r\n\r\n\t\t\tif (state === REJECTING) {\r\n\t\t\t\tm.deferred.onerror(promiseValue)\r\n\t\t\t}\r\n\r\n\t\t\tthennable(then, function () {\r\n\t\t\t\tstate = RESOLVING\r\n\t\t\t\tfire()\r\n\t\t\t}, function () {\r\n\t\t\t\tstate = REJECTING\r\n\t\t\t\tfire()\r\n\t\t\t}, function () {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tif (state === RESOLVING && isFunction(onSuccess)) {\r\n\t\t\t\t\t\tpromiseValue = onSuccess(promiseValue)\r\n\t\t\t\t\t} else if (state === REJECTING && isFunction(onFailure)) {\r\n\t\t\t\t\t\tpromiseValue = onFailure(promiseValue)\r\n\t\t\t\t\t\tstate = RESOLVING\r\n\t\t\t\t\t}\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tm.deferred.onerror(e)\r\n\t\t\t\t\tpromiseValue = e\r\n\t\t\t\t\treturn finish()\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (promiseValue === self) {\r\n\t\t\t\t\tpromiseValue = TypeError()\r\n\t\t\t\t\tfinish()\r\n\t\t\t\t} else {\r\n\t\t\t\t\tthennable(then, function () {\r\n\t\t\t\t\t\tfinish(RESOLVED)\r\n\t\t\t\t\t}, finish, function () {\r\n\t\t\t\t\t\tfinish(state === RESOLVING && RESOLVED)\r\n\t\t\t\t\t})\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\t}\r\n\t}\r\n\r\n\tm.deferred.onerror = function (e) {\r\n\t\tif (type.call(e) === \"[object Error]\" &&\r\n\t\t\t\t!/ Error/.test(e.constructor.toString())) {\r\n\t\t\tpendingRequests = 0\r\n\t\t\tthrow e\r\n\t\t}\r\n\t}\r\n\r\n\tm.sync = function (args) {\r\n\t\tvar deferred = m.deferred()\r\n\t\tvar outstanding = args.length\r\n\t\tvar results = []\r\n\t\tvar method = \"resolve\"\r\n\r\n\t\tfunction synchronizer(pos, resolved) {\r\n\t\t\treturn function (value) {\r\n\t\t\t\tresults[pos] = value\r\n\t\t\t\tif (!resolved) method = \"reject\"\r\n\t\t\t\tif (--outstanding === 0) {\r\n\t\t\t\t\tdeferred.promise(results)\r\n\t\t\t\t\tdeferred[method](results)\r\n\t\t\t\t}\r\n\t\t\t\treturn value\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (args.length > 0) {\r\n\t\t\tforEach(args, function (arg, i) {\r\n\t\t\t\targ.then(synchronizer(i, true), synchronizer(i, false))\r\n\t\t\t})\r\n\t\t} else {\r\n\t\t\tdeferred.resolve([])\r\n\t\t}\r\n\r\n\t\treturn deferred.promise\r\n\t}\r\n\r\n\tfunction identity(value) { return value }\r\n\r\n\tfunction handleJsonp(options) {\r\n\t\tvar callbackKey = options.callbackName || \"mithril_callback_\" +\r\n\t\t\tnew Date().getTime() + \"_\" +\r\n\t\t\t(Math.round(Math.random() * 1e16)).toString(36)\r\n\r\n\t\tvar script = $document.createElement(\"script\")\r\n\r\n\t\tglobal[callbackKey] = function (resp) {\r\n\t\t\tscript.parentNode.removeChild(script)\r\n\t\t\toptions.onload({\r\n\t\t\t\ttype: \"load\",\r\n\t\t\t\ttarget: {\r\n\t\t\t\t\tresponseText: resp\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\t\tglobal[callbackKey] = undefined\r\n\t\t}\r\n\r\n\t\tscript.onerror = function () {\r\n\t\t\tscript.parentNode.removeChild(script)\r\n\r\n\t\t\toptions.onerror({\r\n\t\t\t\ttype: \"error\",\r\n\t\t\t\ttarget: {\r\n\t\t\t\t\tstatus: 500,\r\n\t\t\t\t\tresponseText: JSON.stringify({\r\n\t\t\t\t\t\terror: \"Error making jsonp request\"\r\n\t\t\t\t\t})\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\t\tglobal[callbackKey] = undefined\r\n\r\n\t\t\treturn false\r\n\t\t}\r\n\r\n\t\tscript.onload = function () {\r\n\t\t\treturn false\r\n\t\t}\r\n\r\n\t\tscript.src = options.url +\r\n\t\t\t(options.url.indexOf(\"?\") > 0 ? \"&\" : \"?\") +\r\n\t\t\t(options.callbackKey ? options.callbackKey : \"callback\") +\r\n\t\t\t\"=\" + callbackKey +\r\n\t\t\t\"&\" + buildQueryString(options.data || {})\r\n\r\n\t\t$document.body.appendChild(script)\r\n\t}\r\n\r\n\tfunction createXhr(options) {\r\n\t\tvar xhr = new global.XMLHttpRequest()\r\n\t\txhr.open(options.method, options.url, true, options.user,\r\n\t\t\toptions.password)\r\n\r\n\t\txhr.onreadystatechange = function () {\r\n\t\t\tif (xhr.readyState === 4) {\r\n\t\t\t\tif (xhr.status >= 200 && xhr.status < 300) {\r\n\t\t\t\t\toptions.onload({type: \"load\", target: xhr})\r\n\t\t\t\t} else {\r\n\t\t\t\t\toptions.onerror({type: \"error\", target: xhr})\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (options.serialize === JSON.stringify &&\r\n\t\t\t\toptions.data &&\r\n\t\t\t\toptions.method !== \"GET\") {\r\n\t\t\txhr.setRequestHeader(\"Content-Type\",\r\n\t\t\t\t\"application/json; charset=utf-8\")\r\n\t\t}\r\n\r\n\t\tif (options.deserialize === JSON.parse) {\r\n\t\t\txhr.setRequestHeader(\"Accept\", \"application/json, text/*\")\r\n\t\t}\r\n\r\n\t\tif (isObject(options.headers)) {\r\n\t\t\tfor (var header in options.headers) {\r\n\t\t\t\tif (hasOwn.call(options.headers, header)) {\r\n\t\t\t\t\txhr.setRequestHeader(header, options.headers[header])\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (isFunction(options.config)) {\r\n\t\t\tvar maybeXhr = options.config(xhr, options)\r\n\t\t\tif (maybeXhr != null) xhr = maybeXhr\r\n\t\t}\r\n\r\n\t\tvar data = options.method === \"GET\" || !options.data ? \"\" : options.data\r\n\r\n\t\tif (data && !isString(data) && data.constructor !== global.FormData) {\r\n\t\t\tthrow new Error(\"Request data should be either be a string or \" +\r\n\t\t\t\t\"FormData. Check the `serialize` option in `m.request`\")\r\n\t\t}\r\n\r\n\t\txhr.send(data)\r\n\t\treturn xhr\r\n\t}\r\n\r\n\tfunction ajax(options) {\r\n\t\tif (options.dataType && options.dataType.toLowerCase() === \"jsonp\") {\r\n\t\t\treturn handleJsonp(options)\r\n\t\t} else {\r\n\t\t\treturn createXhr(options)\r\n\t\t}\r\n\t}\r\n\r\n\tfunction bindData(options, data, serialize) {\r\n\t\tif (options.method === \"GET\" && options.dataType !== \"jsonp\") {\r\n\t\t\tvar prefix = options.url.indexOf(\"?\") < 0 ? \"?\" : \"&\"\r\n\t\t\tvar querystring = buildQueryString(data)\r\n\t\t\toptions.url += (querystring ? prefix + querystring : \"\")\r\n\t\t} else {\r\n\t\t\toptions.data = serialize(data)\r\n\t\t}\r\n\t}\r\n\r\n\tfunction parameterizeUrl(url, data) {\r\n\t\tif (data) {\r\n\t\t\turl = url.replace(/:[a-z]\\w+/gi, function (token){\r\n\t\t\t\tvar key = token.slice(1)\r\n\t\t\t\tvar value = data[key] || token\r\n\t\t\t\tdelete data[key]\r\n\t\t\t\treturn value\r\n\t\t\t})\r\n\t\t}\r\n\t\treturn url\r\n\t}\r\n\r\n\tm.request = function (options) {\r\n\t\tif (options.background !== true) m.startComputation()\r\n\t\tvar deferred = new Deferred()\r\n\t\tvar isJSONP = options.dataType &&\r\n\t\t\toptions.dataType.toLowerCase() === \"jsonp\"\r\n\r\n\t\tvar serialize, deserialize, extract\r\n\r\n\t\tif (isJSONP) {\r\n\t\t\tserialize = options.serialize =\r\n\t\t\tdeserialize = options.deserialize = identity\r\n\r\n\t\t\textract = function (jsonp) { return jsonp.responseText }\r\n\t\t} else {\r\n\t\t\tserialize = options.serialize = options.serialize || JSON.stringify\r\n\r\n\t\t\tdeserialize = options.deserialize =\r\n\t\t\t\toptions.deserialize || JSON.parse\r\n\t\t\textract = options.extract || function (xhr) {\r\n\t\t\t\tif (xhr.responseText.length || deserialize !== JSON.parse) {\r\n\t\t\t\t\treturn xhr.responseText\r\n\t\t\t\t} else {\r\n\t\t\t\t\treturn null\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\toptions.method = (options.method || \"GET\").toUpperCase()\r\n\t\toptions.url = parameterizeUrl(options.url, options.data)\r\n\t\tbindData(options, options.data, serialize)\r\n\t\toptions.onload = options.onerror = function (ev) {\r\n\t\t\ttry {\r\n\t\t\t\tev = ev || event\r\n\t\t\t\tvar response = deserialize(extract(ev.target, options))\r\n\t\t\t\tif (ev.type === \"load\") {\r\n\t\t\t\t\tif (options.unwrapSuccess) {\r\n\t\t\t\t\t\tresponse = options.unwrapSuccess(response, ev.target)\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (isArray(response) && options.type) {\r\n\t\t\t\t\t\tforEach(response, function (res, i) {\r\n\t\t\t\t\t\t\tresponse[i] = new options.type(res)\r\n\t\t\t\t\t\t})\r\n\t\t\t\t\t} else if (options.type) {\r\n\t\t\t\t\t\tresponse = new options.type(response)\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tdeferred.resolve(response)\r\n\t\t\t\t} else {\r\n\t\t\t\t\tif (options.unwrapError) {\r\n\t\t\t\t\t\tresponse = options.unwrapError(response, ev.target)\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tdeferred.reject(response)\r\n\t\t\t\t}\r\n\t\t\t} catch (e) {\r\n\t\t\t\tdeferred.reject(e)\r\n\t\t\t\tm.deferred.onerror(e)\r\n\t\t\t} finally {\r\n\t\t\t\tif (options.background !== true) m.endComputation()\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tajax(options)\r\n\t\tdeferred.promise = propify(deferred.promise, options.initialValue)\r\n\t\treturn deferred.promise\r\n\t}\r\n\r\n\treturn m\r\n}); // eslint-disable-line\r\n","export default class Routes {\n type;\n attributes = [];\n hasOnes = [];\n hasManys = [];\n\n constructor(type, model = null) {\n this.type = type;\n this.model = model;\n }\n\n attribute(name) {\n this.attributes.push(name);\n\n return this;\n }\n\n hasOne(type) {\n this.hasOnes.push(type);\n\n return this;\n }\n\n hasMany(type) {\n this.hasManys.push(type);\n\n return this;\n }\n\n extend(app, extension) {\n if (this.model) {\n app.store.models[this.type] = this.model;\n }\n \n const model = app.store.models[this.type];\n\n this.attributes.forEach(name => model.prototype[name] = model.attribute(name));\n this.hasOnes.forEach(name => model.prototype[name] = model.hasOne(name));\n this.hasManys.forEach(name => model.prototype[name] = model.hasMany(name));\n }\n}","export default class PostTypes {\n postComponents = {};\n\n add(name, component) {\n this.postComponents[name] = component;\n\n return this;\n }\n\n extend(app, extension) {\n Object.assign(app.postComponents, this.postComponents);\n }\n}","export default class Routes {\n routes = {};\n\n add(name, path, component) {\n this.routes[name] = { path, component };\n\n return this;\n }\n\n extend(app, extension) {\n Object.assign(app.routes, this.routes);\n }\n}","import 'expose-loader?$!expose-loader?jQuery!jquery';\nimport 'expose-loader?m!mithril';\nimport 'expose-loader?moment!moment';\nimport 'expose-loader?m.bidi!m.attrs.bidi';\nimport 'bootstrap/js/affix';\nimport 'bootstrap/js/dropdown';\nimport 'bootstrap/js/modal';\nimport 'bootstrap/js/tooltip';\nimport 'bootstrap/js/transition';\nimport 'jquery.hotkeys/jquery.hotkeys';\n\nimport patchMithril from './utils/patchMithril';\n\npatchMithril(window);\n\nimport * as Extend from './extend/index';\n\nexport { Extend };\n","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nexport default freeGlobal;\n","import humanTimeUtil from './humanTime';\n\nfunction updateHumanTimes() {\n $('[data-humantime]').each(function() {\n const $this = $(this);\n const ago = humanTimeUtil($this.attr('datetime'));\n\n $this.html(ago);\n });\n}\n\n/**\n * The `humanTime` initializer sets up a loop every 1 second to update\n * timestamps rendered with the `humanTime` helper.\n */\nexport default function humanTime() {\n setInterval(updateHumanTimes, 10000);\n}\n","import * as extend from './extend';\nimport Session from './Session';\nimport Store from './Store';\nimport evented from './utils/evented';\nimport liveHumanTimes from './utils/liveHumanTimes';\nimport ItemList from './utils/ItemList';\nimport mixin from './utils/mixin';\nimport humanTime from './utils/humanTime';\nimport computed from './utils/computed';\nimport Drawer from './utils/Drawer';\nimport anchorScroll from './utils/anchorScroll';\nimport RequestError from './utils/RequestError';\nimport abbreviateNumber from './utils/abbreviateNumber';\nimport * as string from './utils/string';\nimport SubtreeRetainer from './utils/SubtreeRetainer';\nimport extract from './utils/extract';\nimport ScrollListener from './utils/ScrollListener';\nimport stringToColor from './utils/stringToColor';\nimport patchMithril from './utils/patchMithril';\nimport classList from './utils/classList';\nimport extractText from './utils/extractText';\nimport formatNumber from './utils/formatNumber';\nimport mapRoutes from './utils/mapRoutes';\nimport Notification from './models/Notification';\nimport User from './models/User';\nimport Post from './models/Post';\nimport Discussion from './models/Discussion';\nimport Group from './models/Group';\nimport Forum from './models/Forum';\nimport Component from './Component';\nimport Translator from './Translator';\nimport AlertManager from './components/AlertManager';\nimport Switch from './components/Switch';\nimport Badge from './components/Badge';\nimport LoadingIndicator from './components/LoadingIndicator';\nimport Placeholder from './components/Placeholder';\nimport Separator from './components/Separator';\nimport Dropdown from './components/Dropdown';\nimport SplitDropdown from './components/SplitDropdown';\nimport RequestErrorModal from './components/RequestErrorModal';\nimport FieldSet from './components/FieldSet';\nimport Select from './components/Select';\nimport Navigation from './components/Navigation';\nimport Alert from './components/Alert';\nimport LinkButton from './components/LinkButton';\nimport Checkbox from './components/Checkbox';\nimport SelectDropdown from './components/SelectDropdown';\nimport ModalManager from './components/ModalManager';\nimport Button from './components/Button';\nimport Modal from './components/Modal';\nimport GroupBadge from './components/GroupBadge';\nimport Model from './Model';\nimport Application from './Application';\nimport fullTime from './helpers/fullTime';\nimport avatar from './helpers/avatar';\nimport icon from './helpers/icon';\nimport humanTimeHelper from './helpers/humanTime';\nimport punctuateSeries from './helpers/punctuateSeries';\nimport highlight from './helpers/highlight';\nimport username from './helpers/username';\nimport userOnline from './helpers/userOnline';\nimport listItems from './helpers/listItems';\n\nexport default {\n 'extend': extend,\n 'Session': Session,\n 'Store': Store,\n 'utils/evented': evented,\n 'utils/liveHumanTimes': liveHumanTimes,\n 'utils/ItemList': ItemList,\n 'utils/mixin': mixin,\n 'utils/humanTime': humanTime,\n 'utils/computed': computed,\n 'utils/Drawer': Drawer,\n 'utils/anchorScroll': anchorScroll,\n 'utils/RequestError': RequestError,\n 'utils/abbreviateNumber': abbreviateNumber,\n 'utils/string': string,\n 'utils/SubtreeRetainer': SubtreeRetainer,\n 'utils/extract': extract,\n 'utils/ScrollListener': ScrollListener,\n 'utils/stringToColor': stringToColor,\n 'utils/patchMithril': patchMithril,\n 'utils/classList': classList,\n 'utils/extractText': extractText,\n 'utils/formatNumber': formatNumber,\n 'utils/mapRoutes': mapRoutes,\n 'models/Notification': Notification,\n 'models/User': User,\n 'models/Post': Post,\n 'models/Discussion': Discussion,\n 'models/Group': Group,\n 'models/Forum': Forum,\n 'Component': Component,\n 'Translator': Translator,\n 'components/AlertManager': AlertManager,\n 'components/Switch': Switch,\n 'components/Badge': Badge,\n 'components/LoadingIndicator': LoadingIndicator,\n 'components/Placeholder': Placeholder,\n 'components/Separator': Separator,\n 'components/Dropdown': Dropdown,\n 'components/SplitDropdown': SplitDropdown,\n 'components/RequestErrorModal': RequestErrorModal,\n 'components/FieldSet': FieldSet,\n 'components/Select': Select,\n 'components/Navigation': Navigation,\n 'components/Alert': Alert,\n 'components/LinkButton': LinkButton,\n 'components/Checkbox': Checkbox,\n 'components/SelectDropdown': SelectDropdown,\n 'components/ModalManager': ModalManager,\n 'components/Button': Button,\n 'components/Modal': Modal,\n 'components/GroupBadge': GroupBadge,\n 'Model': Model,\n 'Application': Application,\n 'helpers/fullTime': fullTime,\n 'helpers/avatar': avatar,\n 'helpers/icon': icon,\n 'helpers/humanTime': humanTimeHelper,\n 'helpers/punctuateSeries': punctuateSeries,\n 'helpers/highlight': highlight,\n 'helpers/username': username,\n 'helpers/userOnline': userOnline,\n 'helpers/listItems': listItems\n};\n","/**\n * The `punctuateSeries` helper formats a list of strings (e.g. names) to read\n * fluently in the application's locale.\n *\n * ```js\n * punctuateSeries(['Toby', 'Franz', 'Dominion']) // Toby, Franz, and Dominion\n * ```\n *\n * @param {Array} items\n * @return {VirtualElement}\n */\nexport default function punctuateSeries(items) {\n if (items.length === 2) {\n return app.translator.trans('core.lib.series.two_text', {\n first: items[0],\n second: items[1]\n });\n } else if (items.length >= 3) {\n // If there are three or more items, we will join all but the first and\n // last items with the equivalent of a comma, and then we will feed that\n // into the translator along with the first and last item.\n const second = items\n .slice(1, items.length - 1)\n .reduce((list, item) => list.concat([item, app.translator.trans('core.lib.series.glue_text')]), [])\n .slice(0, -1);\n\n return app.translator.trans('core.lib.series.three_text', {\n first: items[0],\n second,\n third: items[items.length - 1]\n });\n }\n\n return items;\n}\n","module.exports = global[\"$\"] = require(\"-!/home/travis/build/flarum/core/js/node_modules/expose-loader/index.js?jQuery!./jquery.js\");","module.exports = global[\"jQuery\"] = require(\"-!./jquery.js\");","/*!\n * jQuery JavaScript Library v3.3.1\n * https://jquery.com/\n *\n * Includes Sizzle.js\n * https://sizzlejs.com/\n *\n * Copyright JS Foundation and other contributors\n * Released under the MIT license\n * https://jquery.org/license\n *\n * Date: 2018-01-20T17:24Z\n */\n( function( global, factory ) {\n\n\t\"use strict\";\n\n\tif ( typeof module === \"object\" && typeof module.exports === \"object\" ) {\n\n\t\t// For CommonJS and CommonJS-like environments where a proper `window`\n\t\t// is present, execute the factory and get jQuery.\n\t\t// For environments that do not have a `window` with a `document`\n\t\t// (such as Node.js), expose a factory as module.exports.\n\t\t// This accentuates the need for the creation of a real `window`.\n\t\t// e.g. var jQuery = require(\"jquery\")(window);\n\t\t// See ticket #14549 for more info.\n\t\tmodule.exports = global.document ?\n\t\t\tfactory( global, true ) :\n\t\t\tfunction( w ) {\n\t\t\t\tif ( !w.document ) {\n\t\t\t\t\tthrow new Error( \"jQuery requires a window with a document\" );\n\t\t\t\t}\n\t\t\t\treturn factory( w );\n\t\t\t};\n\t} else {\n\t\tfactory( global );\n\t}\n\n// Pass this if window is not defined yet\n} )( typeof window !== \"undefined\" ? window : this, function( window, noGlobal ) {\n\n// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1\n// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode\n// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common\n// enough that all such attempts are guarded in a try block.\n\"use strict\";\n\nvar arr = [];\n\nvar document = window.document;\n\nvar getProto = Object.getPrototypeOf;\n\nvar slice = arr.slice;\n\nvar concat = arr.concat;\n\nvar push = arr.push;\n\nvar indexOf = arr.indexOf;\n\nvar class2type = {};\n\nvar toString = class2type.toString;\n\nvar hasOwn = class2type.hasOwnProperty;\n\nvar fnToString = hasOwn.toString;\n\nvar ObjectFunctionString = fnToString.call( Object );\n\nvar support = {};\n\nvar isFunction = function isFunction( obj ) {\n\n // Support: Chrome <=57, Firefox <=52\n // In some browsers, typeof returns \"function\" for HTML <object> elements\n // (i.e., `typeof document.createElement( \"object\" ) === \"function\"`).\n // We don't want to classify *any* DOM node as a function.\n return typeof obj === \"function\" && typeof obj.nodeType !== \"number\";\n };\n\n\nvar isWindow = function isWindow( obj ) {\n\t\treturn obj != null && obj === obj.window;\n\t};\n\n\n\n\n\tvar preservedScriptAttributes = {\n\t\ttype: true,\n\t\tsrc: true,\n\t\tnoModule: true\n\t};\n\n\tfunction DOMEval( code, doc, node ) {\n\t\tdoc = doc || document;\n\n\t\tvar i,\n\t\t\tscript = doc.createElement( \"script\" );\n\n\t\tscript.text = code;\n\t\tif ( node ) {\n\t\t\tfor ( i in preservedScriptAttributes ) {\n\t\t\t\tif ( node[ i ] ) {\n\t\t\t\t\tscript[ i ] = node[ i ];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tdoc.head.appendChild( script ).parentNode.removeChild( script );\n\t}\n\n\nfunction toType( obj ) {\n\tif ( obj == null ) {\n\t\treturn obj + \"\";\n\t}\n\n\t// Support: Android <=2.3 only (functionish RegExp)\n\treturn typeof obj === \"object\" || typeof obj === \"function\" ?\n\t\tclass2type[ toString.call( obj ) ] || \"object\" :\n\t\ttypeof obj;\n}\n/* global Symbol */\n// Defining this global in .eslintrc.json would create a danger of using the global\n// unguarded in another place, it seems safer to define global only for this module\n\n\n\nvar\n\tversion = \"3.3.1\",\n\n\t// Define a local copy of jQuery\n\tjQuery = function( selector, context ) {\n\n\t\t// The jQuery object is actually just the init constructor 'enhanced'\n\t\t// Need init if jQuery is called (just allow error to be thrown if not included)\n\t\treturn new jQuery.fn.init( selector, context );\n\t},\n\n\t// Support: Android <=4.0 only\n\t// Make sure we trim BOM and NBSP\n\trtrim = /^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g;\n\njQuery.fn = jQuery.prototype = {\n\n\t// The current version of jQuery being used\n\tjquery: version,\n\n\tconstructor: jQuery,\n\n\t// The default length of a jQuery object is 0\n\tlength: 0,\n\n\ttoArray: function() {\n\t\treturn slice.call( this );\n\t},\n\n\t// Get the Nth element in the matched element set OR\n\t// Get the whole matched element set as a clean array\n\tget: function( num ) {\n\n\t\t// Return all the elements in a clean array\n\t\tif ( num == null ) {\n\t\t\treturn slice.call( this );\n\t\t}\n\n\t\t// Return just the one element from the set\n\t\treturn num < 0 ? this[ num + this.length ] : this[ num ];\n\t},\n\n\t// Take an array of elements and push it onto the stack\n\t// (returning the new matched element set)\n\tpushStack: function( elems ) {\n\n\t\t// Build a new jQuery matched element set\n\t\tvar ret = jQuery.merge( this.constructor(), elems );\n\n\t\t// Add the old object onto the stack (as a reference)\n\t\tret.prevObject = this;\n\n\t\t// Return the newly-formed element set\n\t\treturn ret;\n\t},\n\n\t// Execute a callback for every element in the matched set.\n\teach: function( callback ) {\n\t\treturn jQuery.each( this, callback );\n\t},\n\n\tmap: function( callback ) {\n\t\treturn this.pushStack( jQuery.map( this, function( elem, i ) {\n\t\t\treturn callback.call( elem, i, elem );\n\t\t} ) );\n\t},\n\n\tslice: function() {\n\t\treturn this.pushStack( slice.apply( this, arguments ) );\n\t},\n\n\tfirst: function() {\n\t\treturn this.eq( 0 );\n\t},\n\n\tlast: function() {\n\t\treturn this.eq( -1 );\n\t},\n\n\teq: function( i ) {\n\t\tvar len = this.length,\n\t\t\tj = +i + ( i < 0 ? len : 0 );\n\t\treturn this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );\n\t},\n\n\tend: function() {\n\t\treturn this.prevObject || this.constructor();\n\t},\n\n\t// For internal use only.\n\t// Behaves like an Array's method, not like a jQuery method.\n\tpush: push,\n\tsort: arr.sort,\n\tsplice: arr.splice\n};\n\njQuery.extend = jQuery.fn.extend = function() {\n\tvar options, name, src, copy, copyIsArray, clone,\n\t\ttarget = arguments[ 0 ] || {},\n\t\ti = 1,\n\t\tlength = arguments.length,\n\t\tdeep = false;\n\n\t// Handle a deep copy situation\n\tif ( typeof target === \"boolean\" ) {\n\t\tdeep = target;\n\n\t\t// Skip the boolean and the target\n\t\ttarget = arguments[ i ] || {};\n\t\ti++;\n\t}\n\n\t// Handle case when target is a string or something (possible in deep copy)\n\tif ( typeof target !== \"object\" && !isFunction( target ) ) {\n\t\ttarget = {};\n\t}\n\n\t// Extend jQuery itself if only one argument is passed\n\tif ( i === length ) {\n\t\ttarget = this;\n\t\ti--;\n\t}\n\n\tfor ( ; i < length; i++ ) {\n\n\t\t// Only deal with non-null/undefined values\n\t\tif ( ( options = arguments[ i ] ) != null ) {\n\n\t\t\t// Extend the base object\n\t\t\tfor ( name in options ) {\n\t\t\t\tsrc = target[ name ];\n\t\t\t\tcopy = options[ name ];\n\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif ( target === copy ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\tif ( deep && copy && ( jQuery.isPlainObject( copy ) ||\n\t\t\t\t\t( copyIsArray = Array.isArray( copy ) ) ) ) {\n\n\t\t\t\t\tif ( copyIsArray ) {\n\t\t\t\t\t\tcopyIsArray = false;\n\t\t\t\t\t\tclone = src && Array.isArray( src ) ? src : [];\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tclone = src && jQuery.isPlainObject( src ) ? src : {};\n\t\t\t\t\t}\n\n\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\ttarget[ name ] = jQuery.extend( deep, clone, copy );\n\n\t\t\t\t// Don't bring in undefined values\n\t\t\t\t} else if ( copy !== undefined ) {\n\t\t\t\t\ttarget[ name ] = copy;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n\njQuery.extend( {\n\n\t// Unique for each copy of jQuery on the page\n\texpando: \"jQuery\" + ( version + Math.random() ).replace( /\\D/g, \"\" ),\n\n\t// Assume jQuery is ready without the ready module\n\tisReady: true,\n\n\terror: function( msg ) {\n\t\tthrow new Error( msg );\n\t},\n\n\tnoop: function() {},\n\n\tisPlainObject: function( obj ) {\n\t\tvar proto, Ctor;\n\n\t\t// Detect obvious negatives\n\t\t// Use toString instead of jQuery.type to catch host objects\n\t\tif ( !obj || toString.call( obj ) !== \"[object Object]\" ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tproto = getProto( obj );\n\n\t\t// Objects with no prototype (e.g., `Object.create( null )`) are plain\n\t\tif ( !proto ) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// Objects with prototype are plain iff they were constructed by a global Object function\n\t\tCtor = hasOwn.call( proto, \"constructor\" ) && proto.constructor;\n\t\treturn typeof Ctor === \"function\" && fnToString.call( Ctor ) === ObjectFunctionString;\n\t},\n\n\tisEmptyObject: function( obj ) {\n\n\t\t/* eslint-disable no-unused-vars */\n\t\t// See https://github.com/eslint/eslint/issues/6125\n\t\tvar name;\n\n\t\tfor ( name in obj ) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t},\n\n\t// Evaluates a script in a global context\n\tglobalEval: function( code ) {\n\t\tDOMEval( code );\n\t},\n\n\teach: function( obj, callback ) {\n\t\tvar length, i = 0;\n\n\t\tif ( isArrayLike( obj ) ) {\n\t\t\tlength = obj.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tfor ( i in obj ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn obj;\n\t},\n\n\t// Support: Android <=4.0 only\n\ttrim: function( text ) {\n\t\treturn text == null ?\n\t\t\t\"\" :\n\t\t\t( text + \"\" ).replace( rtrim, \"\" );\n\t},\n\n\t// results is for internal usage only\n\tmakeArray: function( arr, results ) {\n\t\tvar ret = results || [];\n\n\t\tif ( arr != null ) {\n\t\t\tif ( isArrayLike( Object( arr ) ) ) {\n\t\t\t\tjQuery.merge( ret,\n\t\t\t\t\ttypeof arr === \"string\" ?\n\t\t\t\t\t[ arr ] : arr\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tpush.call( ret, arr );\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\n\t},\n\n\tinArray: function( elem, arr, i ) {\n\t\treturn arr == null ? -1 : indexOf.call( arr, elem, i );\n\t},\n\n\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t// push.apply(_, arraylike) throws on ancient WebKit\n\tmerge: function( first, second ) {\n\t\tvar len = +second.length,\n\t\t\tj = 0,\n\t\t\ti = first.length;\n\n\t\tfor ( ; j < len; j++ ) {\n\t\t\tfirst[ i++ ] = second[ j ];\n\t\t}\n\n\t\tfirst.length = i;\n\n\t\treturn first;\n\t},\n\n\tgrep: function( elems, callback, invert ) {\n\t\tvar callbackInverse,\n\t\t\tmatches = [],\n\t\t\ti = 0,\n\t\t\tlength = elems.length,\n\t\t\tcallbackExpect = !invert;\n\n\t\t// Go through the array, only saving the items\n\t\t// that pass the validator function\n\t\tfor ( ; i < length; i++ ) {\n\t\t\tcallbackInverse = !callback( elems[ i ], i );\n\t\t\tif ( callbackInverse !== callbackExpect ) {\n\t\t\t\tmatches.push( elems[ i ] );\n\t\t\t}\n\t\t}\n\n\t\treturn matches;\n\t},\n\n\t// arg is for internal usage only\n\tmap: function( elems, callback, arg ) {\n\t\tvar length, value,\n\t\t\ti = 0,\n\t\t\tret = [];\n\n\t\t// Go through the array, translating each of the items to their new values\n\t\tif ( isArrayLike( elems ) ) {\n\t\t\tlength = elems.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Go through every key on the object,\n\t\t} else {\n\t\t\tfor ( i in elems ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Flatten any nested arrays\n\t\treturn concat.apply( [], ret );\n\t},\n\n\t// A global GUID counter for objects\n\tguid: 1,\n\n\t// jQuery.support is not used in Core but other projects attach their\n\t// properties to it so it needs to exist.\n\tsupport: support\n} );\n\nif ( typeof Symbol === \"function\" ) {\n\tjQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ];\n}\n\n// Populate the class2type map\njQuery.each( \"Boolean Number String Function Array Date RegExp Object Error Symbol\".split( \" \" ),\nfunction( i, name ) {\n\tclass2type[ \"[object \" + name + \"]\" ] = name.toLowerCase();\n} );\n\nfunction isArrayLike( obj ) {\n\n\t// Support: real iOS 8.2 only (not reproducible in simulator)\n\t// `in` check used to prevent JIT error (gh-2145)\n\t// hasOwn isn't used here due to false negatives\n\t// regarding Nodelist length in IE\n\tvar length = !!obj && \"length\" in obj && obj.length,\n\t\ttype = toType( obj );\n\n\tif ( isFunction( obj ) || isWindow( obj ) ) {\n\t\treturn false;\n\t}\n\n\treturn type === \"array\" || length === 0 ||\n\t\ttypeof length === \"number\" && length > 0 && ( length - 1 ) in obj;\n}\nvar Sizzle =\n/*!\n * Sizzle CSS Selector Engine v2.3.3\n * https://sizzlejs.com/\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license\n * http://jquery.org/license\n *\n * Date: 2016-08-08\n */\n(function( window ) {\n\nvar i,\n\tsupport,\n\tExpr,\n\tgetText,\n\tisXML,\n\ttokenize,\n\tcompile,\n\tselect,\n\toutermostContext,\n\tsortInput,\n\thasDuplicate,\n\n\t// Local document vars\n\tsetDocument,\n\tdocument,\n\tdocElem,\n\tdocumentIsHTML,\n\trbuggyQSA,\n\trbuggyMatches,\n\tmatches,\n\tcontains,\n\n\t// Instance-specific data\n\texpando = \"sizzle\" + 1 * new Date(),\n\tpreferredDoc = window.document,\n\tdirruns = 0,\n\tdone = 0,\n\tclassCache = createCache(),\n\ttokenCache = createCache(),\n\tcompilerCache = createCache(),\n\tsortOrder = function( a, b ) {\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t}\n\t\treturn 0;\n\t},\n\n\t// Instance methods\n\thasOwn = ({}).hasOwnProperty,\n\tarr = [],\n\tpop = arr.pop,\n\tpush_native = arr.push,\n\tpush = arr.push,\n\tslice = arr.slice,\n\t// Use a stripped-down indexOf as it's faster than native\n\t// https://jsperf.com/thor-indexof-vs-for/5\n\tindexOf = function( list, elem ) {\n\t\tvar i = 0,\n\t\t\tlen = list.length;\n\t\tfor ( ; i < len; i++ ) {\n\t\t\tif ( list[i] === elem ) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t},\n\n\tbooleans = \"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped\",\n\n\t// Regular expressions\n\n\t// http://www.w3.org/TR/css3-selectors/#whitespace\n\twhitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\",\n\n\t// http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier\n\tidentifier = \"(?:\\\\\\\\.|[\\\\w-]|[^\\0-\\\\xa0])+\",\n\n\t// Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors\n\tattributes = \"\\\\[\" + whitespace + \"*(\" + identifier + \")(?:\" + whitespace +\n\t\t// Operator (capture 2)\n\t\t\"*([*^$|!~]?=)\" + whitespace +\n\t\t// \"Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]\"\n\t\t\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\" + identifier + \"))|)\" + whitespace +\n\t\t\"*\\\\]\",\n\n\tpseudos = \":(\" + identifier + \")(?:\\\\((\" +\n\t\t// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:\n\t\t// 1. quoted (capture 3; capture 4 or capture 5)\n\t\t\"('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|\" +\n\t\t// 2. simple (capture 6)\n\t\t\"((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\" + attributes + \")*)|\" +\n\t\t// 3. anything else (capture 2)\n\t\t\".*\" +\n\t\t\")\\\\)|)\",\n\n\t// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter\n\trwhitespace = new RegExp( whitespace + \"+\", \"g\" ),\n\trtrim = new RegExp( \"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" + whitespace + \"+$\", \"g\" ),\n\n\trcomma = new RegExp( \"^\" + whitespace + \"*,\" + whitespace + \"*\" ),\n\trcombinators = new RegExp( \"^\" + whitespace + \"*([>+~]|\" + whitespace + \")\" + whitespace + \"*\" ),\n\n\trattributeQuotes = new RegExp( \"=\" + whitespace + \"*([^\\\\]'\\\"]*?)\" + whitespace + \"*\\\\]\", \"g\" ),\n\n\trpseudo = new RegExp( pseudos ),\n\tridentifier = new RegExp( \"^\" + identifier + \"$\" ),\n\n\tmatchExpr = {\n\t\t\"ID\": new RegExp( \"^#(\" + identifier + \")\" ),\n\t\t\"CLASS\": new RegExp( \"^\\\\.(\" + identifier + \")\" ),\n\t\t\"TAG\": new RegExp( \"^(\" + identifier + \"|[*])\" ),\n\t\t\"ATTR\": new RegExp( \"^\" + attributes ),\n\t\t\"PSEUDO\": new RegExp( \"^\" + pseudos ),\n\t\t\"CHILD\": new RegExp( \"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\" + whitespace +\n\t\t\t\"*(even|odd|(([+-]|)(\\\\d*)n|)\" + whitespace + \"*(?:([+-]|)\" + whitespace +\n\t\t\t\"*(\\\\d+)|))\" + whitespace + \"*\\\\)|)\", \"i\" ),\n\t\t\"bool\": new RegExp( \"^(?:\" + booleans + \")$\", \"i\" ),\n\t\t// For use in libraries implementing .is()\n\t\t// We use this for POS matching in `select`\n\t\t\"needsContext\": new RegExp( \"^\" + whitespace + \"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\" +\n\t\t\twhitespace + \"*((?:-\\\\d)?\\\\d*)\" + whitespace + \"*\\\\)|)(?=[^-]|$)\", \"i\" )\n\t},\n\n\trinputs = /^(?:input|select|textarea|button)$/i,\n\trheader = /^h\\d$/i,\n\n\trnative = /^[^{]+\\{\\s*\\[native \\w/,\n\n\t// Easily-parseable/retrievable ID or TAG or CLASS selectors\n\trquickExpr = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,\n\n\trsibling = /[+~]/,\n\n\t// CSS escapes\n\t// http://www.w3.org/TR/CSS21/syndata.html#escaped-characters\n\trunescape = new RegExp( \"\\\\\\\\([\\\\da-f]{1,6}\" + whitespace + \"?|(\" + whitespace + \")|.)\", \"ig\" ),\n\tfunescape = function( _, escaped, escapedWhitespace ) {\n\t\tvar high = \"0x\" + escaped - 0x10000;\n\t\t// NaN means non-codepoint\n\t\t// Support: Firefox<24\n\t\t// Workaround erroneous numeric interpretation of +\"0x\"\n\t\treturn high !== high || escapedWhitespace ?\n\t\t\tescaped :\n\t\t\thigh < 0 ?\n\t\t\t\t// BMP codepoint\n\t\t\t\tString.fromCharCode( high + 0x10000 ) :\n\t\t\t\t// Supplemental Plane codepoint (surrogate pair)\n\t\t\t\tString.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );\n\t},\n\n\t// CSS string/identifier serialization\n\t// https://drafts.csswg.org/cssom/#common-serializing-idioms\n\trcssescape = /([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\0-\\x1f\\x7f-\\uFFFF\\w-]/g,\n\tfcssescape = function( ch, asCodePoint ) {\n\t\tif ( asCodePoint ) {\n\n\t\t\t// U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER\n\t\t\tif ( ch === \"\\0\" ) {\n\t\t\t\treturn \"\\uFFFD\";\n\t\t\t}\n\n\t\t\t// Control characters and (dependent upon position) numbers get escaped as code points\n\t\t\treturn ch.slice( 0, -1 ) + \"\\\\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + \" \";\n\t\t}\n\n\t\t// Other potentially-special ASCII characters get backslash-escaped\n\t\treturn \"\\\\\" + ch;\n\t},\n\n\t// Used for iframes\n\t// See setDocument()\n\t// Removing the function wrapper causes a \"Permission Denied\"\n\t// error in IE\n\tunloadHandler = function() {\n\t\tsetDocument();\n\t},\n\n\tdisabledAncestor = addCombinator(\n\t\tfunction( elem ) {\n\t\t\treturn elem.disabled === true && (\"form\" in elem || \"label\" in elem);\n\t\t},\n\t\t{ dir: \"parentNode\", next: \"legend\" }\n\t);\n\n// Optimize for push.apply( _, NodeList )\ntry {\n\tpush.apply(\n\t\t(arr = slice.call( preferredDoc.childNodes )),\n\t\tpreferredDoc.childNodes\n\t);\n\t// Support: Android<4.0\n\t// Detect silently failing push.apply\n\tarr[ preferredDoc.childNodes.length ].nodeType;\n} catch ( e ) {\n\tpush = { apply: arr.length ?\n\n\t\t// Leverage slice if possible\n\t\tfunction( target, els ) {\n\t\t\tpush_native.apply( target, slice.call(els) );\n\t\t} :\n\n\t\t// Support: IE<9\n\t\t// Otherwise append directly\n\t\tfunction( target, els ) {\n\t\t\tvar j = target.length,\n\t\t\t\ti = 0;\n\t\t\t// Can't trust NodeList.length\n\t\t\twhile ( (target[j++] = els[i++]) ) {}\n\t\t\ttarget.length = j - 1;\n\t\t}\n\t};\n}\n\nfunction Sizzle( selector, context, results, seed ) {\n\tvar m, i, elem, nid, match, groups, newSelector,\n\t\tnewContext = context && context.ownerDocument,\n\n\t\t// nodeType defaults to 9, since context defaults to document\n\t\tnodeType = context ? context.nodeType : 9;\n\n\tresults = results || [];\n\n\t// Return early from calls with invalid selector or context\n\tif ( typeof selector !== \"string\" || !selector ||\n\t\tnodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {\n\n\t\treturn results;\n\t}\n\n\t// Try to shortcut find operations (as opposed to filters) in HTML documents\n\tif ( !seed ) {\n\n\t\tif ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) {\n\t\t\tsetDocument( context );\n\t\t}\n\t\tcontext = context || document;\n\n\t\tif ( documentIsHTML ) {\n\n\t\t\t// If the selector is sufficiently simple, try using a \"get*By*\" DOM method\n\t\t\t// (excepting DocumentFragment context, where the methods don't exist)\n\t\t\tif ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) {\n\n\t\t\t\t// ID selector\n\t\t\t\tif ( (m = match[1]) ) {\n\n\t\t\t\t\t// Document context\n\t\t\t\t\tif ( nodeType === 9 ) {\n\t\t\t\t\t\tif ( (elem = context.getElementById( m )) ) {\n\n\t\t\t\t\t\t\t// Support: IE, Opera, Webkit\n\t\t\t\t\t\t\t// TODO: identify versions\n\t\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\t\tif ( elem.id === m ) {\n\t\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t// Element context\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// Support: IE, Opera, Webkit\n\t\t\t\t\t\t// TODO: identify versions\n\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\tif ( newContext && (elem = newContext.getElementById( m )) &&\n\t\t\t\t\t\t\tcontains( context, elem ) &&\n\t\t\t\t\t\t\telem.id === m ) {\n\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t// Type selector\n\t\t\t\t} else if ( match[2] ) {\n\t\t\t\t\tpush.apply( results, context.getElementsByTagName( selector ) );\n\t\t\t\t\treturn results;\n\n\t\t\t\t// Class selector\n\t\t\t\t} else if ( (m = match[3]) && support.getElementsByClassName &&\n\t\t\t\t\tcontext.getElementsByClassName ) {\n\n\t\t\t\t\tpush.apply( results, context.getElementsByClassName( m ) );\n\t\t\t\t\treturn results;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Take advantage of querySelectorAll\n\t\t\tif ( support.qsa &&\n\t\t\t\t!compilerCache[ selector + \" \" ] &&\n\t\t\t\t(!rbuggyQSA || !rbuggyQSA.test( selector )) ) {\n\n\t\t\t\tif ( nodeType !== 1 ) {\n\t\t\t\t\tnewContext = context;\n\t\t\t\t\tnewSelector = selector;\n\n\t\t\t\t// qSA looks outside Element context, which is not what we want\n\t\t\t\t// Thanks to Andrew Dupont for this workaround technique\n\t\t\t\t// Support: IE <=8\n\t\t\t\t// Exclude object elements\n\t\t\t\t} else if ( context.nodeName.toLowerCase() !== \"object\" ) {\n\n\t\t\t\t\t// Capture the context ID, setting it first if necessary\n\t\t\t\t\tif ( (nid = context.getAttribute( \"id\" )) ) {\n\t\t\t\t\t\tnid = nid.replace( rcssescape, fcssescape );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcontext.setAttribute( \"id\", (nid = expando) );\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prefix every selector in the list\n\t\t\t\t\tgroups = tokenize( selector );\n\t\t\t\t\ti = groups.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tgroups[i] = \"#\" + nid + \" \" + toSelector( groups[i] );\n\t\t\t\t\t}\n\t\t\t\t\tnewSelector = groups.join( \",\" );\n\n\t\t\t\t\t// Expand context for sibling selectors\n\t\t\t\t\tnewContext = rsibling.test( selector ) && testContext( context.parentNode ) ||\n\t\t\t\t\t\tcontext;\n\t\t\t\t}\n\n\t\t\t\tif ( newSelector ) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tpush.apply( results,\n\t\t\t\t\t\t\tnewContext.querySelectorAll( newSelector )\n\t\t\t\t\t\t);\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t} catch ( qsaError ) {\n\t\t\t\t\t} finally {\n\t\t\t\t\t\tif ( nid === expando ) {\n\t\t\t\t\t\t\tcontext.removeAttribute( \"id\" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// All others\n\treturn select( selector.replace( rtrim, \"$1\" ), context, results, seed );\n}\n\n/**\n * Create key-value caches of limited size\n * @returns {function(string, object)} Returns the Object data after storing it on itself with\n *\tproperty name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)\n *\tdeleting the oldest entry\n */\nfunction createCache() {\n\tvar keys = [];\n\n\tfunction cache( key, value ) {\n\t\t// Use (key + \" \") to avoid collision with native prototype properties (see Issue #157)\n\t\tif ( keys.push( key + \" \" ) > Expr.cacheLength ) {\n\t\t\t// Only keep the most recent entries\n\t\t\tdelete cache[ keys.shift() ];\n\t\t}\n\t\treturn (cache[ key + \" \" ] = value);\n\t}\n\treturn cache;\n}\n\n/**\n * Mark a function for special use by Sizzle\n * @param {Function} fn The function to mark\n */\nfunction markFunction( fn ) {\n\tfn[ expando ] = true;\n\treturn fn;\n}\n\n/**\n * Support testing using an element\n * @param {Function} fn Passed the created element and returns a boolean result\n */\nfunction assert( fn ) {\n\tvar el = document.createElement(\"fieldset\");\n\n\ttry {\n\t\treturn !!fn( el );\n\t} catch (e) {\n\t\treturn false;\n\t} finally {\n\t\t// Remove from its parent by default\n\t\tif ( el.parentNode ) {\n\t\t\tel.parentNode.removeChild( el );\n\t\t}\n\t\t// release memory in IE\n\t\tel = null;\n\t}\n}\n\n/**\n * Adds the same handler for all of the specified attrs\n * @param {String} attrs Pipe-separated list of attributes\n * @param {Function} handler The method that will be applied\n */\nfunction addHandle( attrs, handler ) {\n\tvar arr = attrs.split(\"|\"),\n\t\ti = arr.length;\n\n\twhile ( i-- ) {\n\t\tExpr.attrHandle[ arr[i] ] = handler;\n\t}\n}\n\n/**\n * Checks document order of two siblings\n * @param {Element} a\n * @param {Element} b\n * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b\n */\nfunction siblingCheck( a, b ) {\n\tvar cur = b && a,\n\t\tdiff = cur && a.nodeType === 1 && b.nodeType === 1 &&\n\t\t\ta.sourceIndex - b.sourceIndex;\n\n\t// Use IE sourceIndex if available on both nodes\n\tif ( diff ) {\n\t\treturn diff;\n\t}\n\n\t// Check if b follows a\n\tif ( cur ) {\n\t\twhile ( (cur = cur.nextSibling) ) {\n\t\t\tif ( cur === b ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn a ? 1 : -1;\n}\n\n/**\n * Returns a function to use in pseudos for input types\n * @param {String} type\n */\nfunction createInputPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn name === \"input\" && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for buttons\n * @param {String} type\n */\nfunction createButtonPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn (name === \"input\" || name === \"button\") && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for :enabled/:disabled\n * @param {Boolean} disabled true for :disabled; false for :enabled\n */\nfunction createDisabledPseudo( disabled ) {\n\n\t// Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable\n\treturn function( elem ) {\n\n\t\t// Only certain elements can match :enabled or :disabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled\n\t\tif ( \"form\" in elem ) {\n\n\t\t\t// Check for inherited disabledness on relevant non-disabled elements:\n\t\t\t// * listed form-associated elements in a disabled fieldset\n\t\t\t// https://html.spec.whatwg.org/multipage/forms.html#category-listed\n\t\t\t// https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled\n\t\t\t// * option elements in a disabled optgroup\n\t\t\t// https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled\n\t\t\t// All such elements have a \"form\" property.\n\t\t\tif ( elem.parentNode && elem.disabled === false ) {\n\n\t\t\t\t// Option elements defer to a parent optgroup if present\n\t\t\t\tif ( \"label\" in elem ) {\n\t\t\t\t\tif ( \"label\" in elem.parentNode ) {\n\t\t\t\t\t\treturn elem.parentNode.disabled === disabled;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn elem.disabled === disabled;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Support: IE 6 - 11\n\t\t\t\t// Use the isDisabled shortcut property to check for disabled fieldset ancestors\n\t\t\t\treturn elem.isDisabled === disabled ||\n\n\t\t\t\t\t// Where there is no isDisabled, check manually\n\t\t\t\t\t/* jshint -W018 */\n\t\t\t\t\telem.isDisabled !== !disabled &&\n\t\t\t\t\t\tdisabledAncestor( elem ) === disabled;\n\t\t\t}\n\n\t\t\treturn elem.disabled === disabled;\n\n\t\t// Try to winnow out elements that can't be disabled before trusting the disabled property.\n\t\t// Some victims get caught in our net (label, legend, menu, track), but it shouldn't\n\t\t// even exist on them, let alone have a boolean value.\n\t\t} else if ( \"label\" in elem ) {\n\t\t\treturn elem.disabled === disabled;\n\t\t}\n\n\t\t// Remaining elements are neither :enabled nor :disabled\n\t\treturn false;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for positionals\n * @param {Function} fn\n */\nfunction createPositionalPseudo( fn ) {\n\treturn markFunction(function( argument ) {\n\t\targument = +argument;\n\t\treturn markFunction(function( seed, matches ) {\n\t\t\tvar j,\n\t\t\t\tmatchIndexes = fn( [], seed.length, argument ),\n\t\t\t\ti = matchIndexes.length;\n\n\t\t\t// Match elements found at the specified indexes\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( seed[ (j = matchIndexes[i]) ] ) {\n\t\t\t\t\tseed[j] = !(matches[j] = seed[j]);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t});\n}\n\n/**\n * Checks a node for validity as a Sizzle context\n * @param {Element|Object=} context\n * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value\n */\nfunction testContext( context ) {\n\treturn context && typeof context.getElementsByTagName !== \"undefined\" && context;\n}\n\n// Expose support vars for convenience\nsupport = Sizzle.support = {};\n\n/**\n * Detects XML nodes\n * @param {Element|Object} elem An element or a document\n * @returns {Boolean} True iff elem is a non-HTML XML node\n */\nisXML = Sizzle.isXML = function( elem ) {\n\t// documentElement is verified for cases where it doesn't yet exist\n\t// (such as loading iframes in IE - #4833)\n\tvar documentElement = elem && (elem.ownerDocument || elem).documentElement;\n\treturn documentElement ? documentElement.nodeName !== \"HTML\" : false;\n};\n\n/**\n * Sets document-related variables once based on the current document\n * @param {Element|Object} [doc] An element or document object to use to set the document\n * @returns {Object} Returns the current document\n */\nsetDocument = Sizzle.setDocument = function( node ) {\n\tvar hasCompare, subWindow,\n\t\tdoc = node ? node.ownerDocument || node : preferredDoc;\n\n\t// Return early if doc is invalid or already selected\n\tif ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) {\n\t\treturn document;\n\t}\n\n\t// Update global variables\n\tdocument = doc;\n\tdocElem = document.documentElement;\n\tdocumentIsHTML = !isXML( document );\n\n\t// Support: IE 9-11, Edge\n\t// Accessing iframe documents after unload throws \"permission denied\" errors (jQuery #13936)\n\tif ( preferredDoc !== document &&\n\t\t(subWindow = document.defaultView) && subWindow.top !== subWindow ) {\n\n\t\t// Support: IE 11, Edge\n\t\tif ( subWindow.addEventListener ) {\n\t\t\tsubWindow.addEventListener( \"unload\", unloadHandler, false );\n\n\t\t// Support: IE 9 - 10 only\n\t\t} else if ( subWindow.attachEvent ) {\n\t\t\tsubWindow.attachEvent( \"onunload\", unloadHandler );\n\t\t}\n\t}\n\n\t/* Attributes\n\t---------------------------------------------------------------------- */\n\n\t// Support: IE<8\n\t// Verify that getAttribute really returns attributes and not properties\n\t// (excepting IE8 booleans)\n\tsupport.attributes = assert(function( el ) {\n\t\tel.className = \"i\";\n\t\treturn !el.getAttribute(\"className\");\n\t});\n\n\t/* getElement(s)By*\n\t---------------------------------------------------------------------- */\n\n\t// Check if getElementsByTagName(\"*\") returns only elements\n\tsupport.getElementsByTagName = assert(function( el ) {\n\t\tel.appendChild( document.createComment(\"\") );\n\t\treturn !el.getElementsByTagName(\"*\").length;\n\t});\n\n\t// Support: IE<9\n\tsupport.getElementsByClassName = rnative.test( document.getElementsByClassName );\n\n\t// Support: IE<10\n\t// Check if getElementById returns elements by name\n\t// The broken getElementById methods don't pick up programmatically-set names,\n\t// so use a roundabout getElementsByName test\n\tsupport.getById = assert(function( el ) {\n\t\tdocElem.appendChild( el ).id = expando;\n\t\treturn !document.getElementsByName || !document.getElementsByName( expando ).length;\n\t});\n\n\t// ID filter and find\n\tif ( support.getById ) {\n\t\tExpr.filter[\"ID\"] = function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn elem.getAttribute(\"id\") === attrId;\n\t\t\t};\n\t\t};\n\t\tExpr.find[\"ID\"] = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar elem = context.getElementById( id );\n\t\t\t\treturn elem ? [ elem ] : [];\n\t\t\t}\n\t\t};\n\t} else {\n\t\tExpr.filter[\"ID\"] = function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\tvar node = typeof elem.getAttributeNode !== \"undefined\" &&\n\t\t\t\t\telem.getAttributeNode(\"id\");\n\t\t\t\treturn node && node.value === attrId;\n\t\t\t};\n\t\t};\n\n\t\t// Support: IE 6 - 7 only\n\t\t// getElementById is not reliable as a find shortcut\n\t\tExpr.find[\"ID\"] = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar node, i, elems,\n\t\t\t\t\telem = context.getElementById( id );\n\n\t\t\t\tif ( elem ) {\n\n\t\t\t\t\t// Verify the id attribute\n\t\t\t\t\tnode = elem.getAttributeNode(\"id\");\n\t\t\t\t\tif ( node && node.value === id ) {\n\t\t\t\t\t\treturn [ elem ];\n\t\t\t\t\t}\n\n\t\t\t\t\t// Fall back on getElementsByName\n\t\t\t\t\telems = context.getElementsByName( id );\n\t\t\t\t\ti = 0;\n\t\t\t\t\twhile ( (elem = elems[i++]) ) {\n\t\t\t\t\t\tnode = elem.getAttributeNode(\"id\");\n\t\t\t\t\t\tif ( node && node.value === id ) {\n\t\t\t\t\t\t\treturn [ elem ];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn [];\n\t\t\t}\n\t\t};\n\t}\n\n\t// Tag\n\tExpr.find[\"TAG\"] = support.getElementsByTagName ?\n\t\tfunction( tag, context ) {\n\t\t\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\t\t\treturn context.getElementsByTagName( tag );\n\n\t\t\t// DocumentFragment nodes don't have gEBTN\n\t\t\t} else if ( support.qsa ) {\n\t\t\t\treturn context.querySelectorAll( tag );\n\t\t\t}\n\t\t} :\n\n\t\tfunction( tag, context ) {\n\t\t\tvar elem,\n\t\t\t\ttmp = [],\n\t\t\t\ti = 0,\n\t\t\t\t// By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too\n\t\t\t\tresults = context.getElementsByTagName( tag );\n\n\t\t\t// Filter out possible comments\n\t\t\tif ( tag === \"*\" ) {\n\t\t\t\twhile ( (elem = results[i++]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\ttmp.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn tmp;\n\t\t\t}\n\t\t\treturn results;\n\t\t};\n\n\t// Class\n\tExpr.find[\"CLASS\"] = support.getElementsByClassName && function( className, context ) {\n\t\tif ( typeof context.getElementsByClassName !== \"undefined\" && documentIsHTML ) {\n\t\t\treturn context.getElementsByClassName( className );\n\t\t}\n\t};\n\n\t/* QSA/matchesSelector\n\t---------------------------------------------------------------------- */\n\n\t// QSA and matchesSelector support\n\n\t// matchesSelector(:active) reports false when true (IE9/Opera 11.5)\n\trbuggyMatches = [];\n\n\t// qSa(:focus) reports false when true (Chrome 21)\n\t// We allow this because of a bug in IE8/9 that throws an error\n\t// whenever `document.activeElement` is accessed on an iframe\n\t// So, we allow :focus to pass through QSA all the time to avoid the IE error\n\t// See https://bugs.jquery.com/ticket/13378\n\trbuggyQSA = [];\n\n\tif ( (support.qsa = rnative.test( document.querySelectorAll )) ) {\n\t\t// Build QSA regex\n\t\t// Regex strategy adopted from Diego Perini\n\t\tassert(function( el ) {\n\t\t\t// Select is set to empty string on purpose\n\t\t\t// This is to test IE's treatment of not explicitly\n\t\t\t// setting a boolean content attribute,\n\t\t\t// since its presence should be enough\n\t\t\t// https://bugs.jquery.com/ticket/12359\n\t\t\tdocElem.appendChild( el ).innerHTML = \"<a id='\" + expando + \"'></a>\" +\n\t\t\t\t\"<select id='\" + expando + \"-\\r\\\\' msallowcapture=''>\" +\n\t\t\t\t\"<option selected=''></option></select>\";\n\n\t\t\t// Support: IE8, Opera 11-12.16\n\t\t\t// Nothing should be selected when empty strings follow ^= or $= or *=\n\t\t\t// The test attribute must be unknown in Opera but \"safe\" for WinRT\n\t\t\t// https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section\n\t\t\tif ( el.querySelectorAll(\"[msallowcapture^='']\").length ) {\n\t\t\t\trbuggyQSA.push( \"[*^$]=\" + whitespace + \"*(?:''|\\\"\\\")\" );\n\t\t\t}\n\n\t\t\t// Support: IE8\n\t\t\t// Boolean attributes and \"value\" are not treated correctly\n\t\t\tif ( !el.querySelectorAll(\"[selected]\").length ) {\n\t\t\t\trbuggyQSA.push( \"\\\\[\" + whitespace + \"*(?:value|\" + booleans + \")\" );\n\t\t\t}\n\n\t\t\t// Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+\n\t\t\tif ( !el.querySelectorAll( \"[id~=\" + expando + \"-]\" ).length ) {\n\t\t\t\trbuggyQSA.push(\"~=\");\n\t\t\t}\n\n\t\t\t// Webkit/Opera - :checked should return selected option elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( !el.querySelectorAll(\":checked\").length ) {\n\t\t\t\trbuggyQSA.push(\":checked\");\n\t\t\t}\n\n\t\t\t// Support: Safari 8+, iOS 8+\n\t\t\t// https://bugs.webkit.org/show_bug.cgi?id=136851\n\t\t\t// In-page `selector#id sibling-combinator selector` fails\n\t\t\tif ( !el.querySelectorAll( \"a#\" + expando + \"+*\" ).length ) {\n\t\t\t\trbuggyQSA.push(\".#.+[+~]\");\n\t\t\t}\n\t\t});\n\n\t\tassert(function( el ) {\n\t\t\tel.innerHTML = \"<a href='' disabled='disabled'></a>\" +\n\t\t\t\t\"<select disabled='disabled'><option/></select>\";\n\n\t\t\t// Support: Windows 8 Native Apps\n\t\t\t// The type and name attributes are restricted during .innerHTML assignment\n\t\t\tvar input = document.createElement(\"input\");\n\t\t\tinput.setAttribute( \"type\", \"hidden\" );\n\t\t\tel.appendChild( input ).setAttribute( \"name\", \"D\" );\n\n\t\t\t// Support: IE8\n\t\t\t// Enforce case-sensitivity of name attribute\n\t\t\tif ( el.querySelectorAll(\"[name=d]\").length ) {\n\t\t\t\trbuggyQSA.push( \"name\" + whitespace + \"*[*^$|!~]?=\" );\n\t\t\t}\n\n\t\t\t// FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( el.querySelectorAll(\":enabled\").length !== 2 ) {\n\t\t\t\trbuggyQSA.push( \":enabled\", \":disabled\" );\n\t\t\t}\n\n\t\t\t// Support: IE9-11+\n\t\t\t// IE's :disabled selector does not pick up the children of disabled fieldsets\n\t\t\tdocElem.appendChild( el ).disabled = true;\n\t\t\tif ( el.querySelectorAll(\":disabled\").length !== 2 ) {\n\t\t\t\trbuggyQSA.push( \":enabled\", \":disabled\" );\n\t\t\t}\n\n\t\t\t// Opera 10-11 does not throw on post-comma invalid pseudos\n\t\t\tel.querySelectorAll(\"*,:x\");\n\t\t\trbuggyQSA.push(\",.*:\");\n\t\t});\n\t}\n\n\tif ( (support.matchesSelector = rnative.test( (matches = docElem.matches ||\n\t\tdocElem.webkitMatchesSelector ||\n\t\tdocElem.mozMatchesSelector ||\n\t\tdocElem.oMatchesSelector ||\n\t\tdocElem.msMatchesSelector) )) ) {\n\n\t\tassert(function( el ) {\n\t\t\t// Check to see if it's possible to do matchesSelector\n\t\t\t// on a disconnected node (IE 9)\n\t\t\tsupport.disconnectedMatch = matches.call( el, \"*\" );\n\n\t\t\t// This should fail with an exception\n\t\t\t// Gecko does not error, returns false instead\n\t\t\tmatches.call( el, \"[s!='']:x\" );\n\t\t\trbuggyMatches.push( \"!=\", pseudos );\n\t\t});\n\t}\n\n\trbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join(\"|\") );\n\trbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join(\"|\") );\n\n\t/* Contains\n\t---------------------------------------------------------------------- */\n\thasCompare = rnative.test( docElem.compareDocumentPosition );\n\n\t// Element contains another\n\t// Purposefully self-exclusive\n\t// As in, an element does not contain itself\n\tcontains = hasCompare || rnative.test( docElem.contains ) ?\n\t\tfunction( a, b ) {\n\t\t\tvar adown = a.nodeType === 9 ? a.documentElement : a,\n\t\t\t\tbup = b && b.parentNode;\n\t\t\treturn a === bup || !!( bup && bup.nodeType === 1 && (\n\t\t\t\tadown.contains ?\n\t\t\t\t\tadown.contains( bup ) :\n\t\t\t\t\ta.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16\n\t\t\t));\n\t\t} :\n\t\tfunction( a, b ) {\n\t\t\tif ( b ) {\n\t\t\t\twhile ( (b = b.parentNode) ) {\n\t\t\t\t\tif ( b === a ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\n\t/* Sorting\n\t---------------------------------------------------------------------- */\n\n\t// Document order sorting\n\tsortOrder = hasCompare ?\n\tfunction( a, b ) {\n\n\t\t// Flag for duplicate removal\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\t// Sort on method existence if only one input has compareDocumentPosition\n\t\tvar compare = !a.compareDocumentPosition - !b.compareDocumentPosition;\n\t\tif ( compare ) {\n\t\t\treturn compare;\n\t\t}\n\n\t\t// Calculate position if both inputs belong to the same document\n\t\tcompare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ?\n\t\t\ta.compareDocumentPosition( b ) :\n\n\t\t\t// Otherwise we know they are disconnected\n\t\t\t1;\n\n\t\t// Disconnected nodes\n\t\tif ( compare & 1 ||\n\t\t\t(!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) {\n\n\t\t\t// Choose the first element that is related to our preferred document\n\t\t\tif ( a === document || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t\tif ( b === document || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\t// Maintain original order\n\t\t\treturn sortInput ?\n\t\t\t\t( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :\n\t\t\t\t0;\n\t\t}\n\n\t\treturn compare & 4 ? -1 : 1;\n\t} :\n\tfunction( a, b ) {\n\t\t// Exit early if the nodes are identical\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\taup = a.parentNode,\n\t\t\tbup = b.parentNode,\n\t\t\tap = [ a ],\n\t\t\tbp = [ b ];\n\n\t\t// Parentless nodes are either documents or disconnected\n\t\tif ( !aup || !bup ) {\n\t\t\treturn a === document ? -1 :\n\t\t\t\tb === document ? 1 :\n\t\t\t\taup ? -1 :\n\t\t\t\tbup ? 1 :\n\t\t\t\tsortInput ?\n\t\t\t\t( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :\n\t\t\t\t0;\n\n\t\t// If the nodes are siblings, we can do a quick check\n\t\t} else if ( aup === bup ) {\n\t\t\treturn siblingCheck( a, b );\n\t\t}\n\n\t\t// Otherwise we need full lists of their ancestors for comparison\n\t\tcur = a;\n\t\twhile ( (cur = cur.parentNode) ) {\n\t\t\tap.unshift( cur );\n\t\t}\n\t\tcur = b;\n\t\twhile ( (cur = cur.parentNode) ) {\n\t\t\tbp.unshift( cur );\n\t\t}\n\n\t\t// Walk down the tree looking for a discrepancy\n\t\twhile ( ap[i] === bp[i] ) {\n\t\t\ti++;\n\t\t}\n\n\t\treturn i ?\n\t\t\t// Do a sibling check if the nodes have a common ancestor\n\t\t\tsiblingCheck( ap[i], bp[i] ) :\n\n\t\t\t// Otherwise nodes in our document sort first\n\t\t\tap[i] === preferredDoc ? -1 :\n\t\t\tbp[i] === preferredDoc ? 1 :\n\t\t\t0;\n\t};\n\n\treturn document;\n};\n\nSizzle.matches = function( expr, elements ) {\n\treturn Sizzle( expr, null, null, elements );\n};\n\nSizzle.matchesSelector = function( elem, expr ) {\n\t// Set document vars if needed\n\tif ( ( elem.ownerDocument || elem ) !== document ) {\n\t\tsetDocument( elem );\n\t}\n\n\t// Make sure that attribute selectors are quoted\n\texpr = expr.replace( rattributeQuotes, \"='$1']\" );\n\n\tif ( support.matchesSelector && documentIsHTML &&\n\t\t!compilerCache[ expr + \" \" ] &&\n\t\t( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&\n\t\t( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) {\n\n\t\ttry {\n\t\t\tvar ret = matches.call( elem, expr );\n\n\t\t\t// IE 9's matchesSelector returns false on disconnected nodes\n\t\t\tif ( ret || support.disconnectedMatch ||\n\t\t\t\t\t// As well, disconnected nodes are said to be in a document\n\t\t\t\t\t// fragment in IE 9\n\t\t\t\t\telem.document && elem.document.nodeType !== 11 ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\t\t} catch (e) {}\n\t}\n\n\treturn Sizzle( expr, document, null, [ elem ] ).length > 0;\n};\n\nSizzle.contains = function( context, elem ) {\n\t// Set document vars if needed\n\tif ( ( context.ownerDocument || context ) !== document ) {\n\t\tsetDocument( context );\n\t}\n\treturn contains( context, elem );\n};\n\nSizzle.attr = function( elem, name ) {\n\t// Set document vars if needed\n\tif ( ( elem.ownerDocument || elem ) !== document ) {\n\t\tsetDocument( elem );\n\t}\n\n\tvar fn = Expr.attrHandle[ name.toLowerCase() ],\n\t\t// Don't get fooled by Object.prototype properties (jQuery #13807)\n\t\tval = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?\n\t\t\tfn( elem, name, !documentIsHTML ) :\n\t\t\tundefined;\n\n\treturn val !== undefined ?\n\t\tval :\n\t\tsupport.attributes || !documentIsHTML ?\n\t\t\telem.getAttribute( name ) :\n\t\t\t(val = elem.getAttributeNode(name)) && val.specified ?\n\t\t\t\tval.value :\n\t\t\t\tnull;\n};\n\nSizzle.escape = function( sel ) {\n\treturn (sel + \"\").replace( rcssescape, fcssescape );\n};\n\nSizzle.error = function( msg ) {\n\tthrow new Error( \"Syntax error, unrecognized expression: \" + msg );\n};\n\n/**\n * Document sorting and removing duplicates\n * @param {ArrayLike} results\n */\nSizzle.uniqueSort = function( results ) {\n\tvar elem,\n\t\tduplicates = [],\n\t\tj = 0,\n\t\ti = 0;\n\n\t// Unless we *know* we can detect duplicates, assume their presence\n\thasDuplicate = !support.detectDuplicates;\n\tsortInput = !support.sortStable && results.slice( 0 );\n\tresults.sort( sortOrder );\n\n\tif ( hasDuplicate ) {\n\t\twhile ( (elem = results[i++]) ) {\n\t\t\tif ( elem === results[ i ] ) {\n\t\t\t\tj = duplicates.push( i );\n\t\t\t}\n\t\t}\n\t\twhile ( j-- ) {\n\t\t\tresults.splice( duplicates[ j ], 1 );\n\t\t}\n\t}\n\n\t// Clear input after sorting to release objects\n\t// See https://github.com/jquery/sizzle/pull/225\n\tsortInput = null;\n\n\treturn results;\n};\n\n/**\n * Utility function for retrieving the text value of an array of DOM nodes\n * @param {Array|Element} elem\n */\ngetText = Sizzle.getText = function( elem ) {\n\tvar node,\n\t\tret = \"\",\n\t\ti = 0,\n\t\tnodeType = elem.nodeType;\n\n\tif ( !nodeType ) {\n\t\t// If no nodeType, this is expected to be an array\n\t\twhile ( (node = elem[i++]) ) {\n\t\t\t// Do not traverse comment nodes\n\t\t\tret += getText( node );\n\t\t}\n\t} else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {\n\t\t// Use textContent for elements\n\t\t// innerText usage removed for consistency of new lines (jQuery #11153)\n\t\tif ( typeof elem.textContent === \"string\" ) {\n\t\t\treturn elem.textContent;\n\t\t} else {\n\t\t\t// Traverse its children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tret += getText( elem );\n\t\t\t}\n\t\t}\n\t} else if ( nodeType === 3 || nodeType === 4 ) {\n\t\treturn elem.nodeValue;\n\t}\n\t// Do not include comment or processing instruction nodes\n\n\treturn ret;\n};\n\nExpr = Sizzle.selectors = {\n\n\t// Can be adjusted by the user\n\tcacheLength: 50,\n\n\tcreatePseudo: markFunction,\n\n\tmatch: matchExpr,\n\n\tattrHandle: {},\n\n\tfind: {},\n\n\trelative: {\n\t\t\">\": { dir: \"parentNode\", first: true },\n\t\t\" \": { dir: \"parentNode\" },\n\t\t\"+\": { dir: \"previousSibling\", first: true },\n\t\t\"~\": { dir: \"previousSibling\" }\n\t},\n\n\tpreFilter: {\n\t\t\"ATTR\": function( match ) {\n\t\t\tmatch[1] = match[1].replace( runescape, funescape );\n\n\t\t\t// Move the given value to match[3] whether quoted or unquoted\n\t\t\tmatch[3] = ( match[3] || match[4] || match[5] || \"\" ).replace( runescape, funescape );\n\n\t\t\tif ( match[2] === \"~=\" ) {\n\t\t\t\tmatch[3] = \" \" + match[3] + \" \";\n\t\t\t}\n\n\t\t\treturn match.slice( 0, 4 );\n\t\t},\n\n\t\t\"CHILD\": function( match ) {\n\t\t\t/* matches from matchExpr[\"CHILD\"]\n\t\t\t\t1 type (only|nth|...)\n\t\t\t\t2 what (child|of-type)\n\t\t\t\t3 argument (even|odd|\\d*|\\d*n([+-]\\d+)?|...)\n\t\t\t\t4 xn-component of xn+y argument ([+-]?\\d*n|)\n\t\t\t\t5 sign of xn-component\n\t\t\t\t6 x of xn-component\n\t\t\t\t7 sign of y-component\n\t\t\t\t8 y of y-component\n\t\t\t*/\n\t\t\tmatch[1] = match[1].toLowerCase();\n\n\t\t\tif ( match[1].slice( 0, 3 ) === \"nth\" ) {\n\t\t\t\t// nth-* requires argument\n\t\t\t\tif ( !match[3] ) {\n\t\t\t\t\tSizzle.error( match[0] );\n\t\t\t\t}\n\n\t\t\t\t// numeric x and y parameters for Expr.filter.CHILD\n\t\t\t\t// remember that false/true cast respectively to 0/1\n\t\t\t\tmatch[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === \"even\" || match[3] === \"odd\" ) );\n\t\t\t\tmatch[5] = +( ( match[7] + match[8] ) || match[3] === \"odd\" );\n\n\t\t\t// other types prohibit arguments\n\t\t\t} else if ( match[3] ) {\n\t\t\t\tSizzle.error( match[0] );\n\t\t\t}\n\n\t\t\treturn match;\n\t\t},\n\n\t\t\"PSEUDO\": function( match ) {\n\t\t\tvar excess,\n\t\t\t\tunquoted = !match[6] && match[2];\n\n\t\t\tif ( matchExpr[\"CHILD\"].test( match[0] ) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\t// Accept quoted arguments as-is\n\t\t\tif ( match[3] ) {\n\t\t\t\tmatch[2] = match[4] || match[5] || \"\";\n\n\t\t\t// Strip excess characters from unquoted arguments\n\t\t\t} else if ( unquoted && rpseudo.test( unquoted ) &&\n\t\t\t\t// Get excess from tokenize (recursively)\n\t\t\t\t(excess = tokenize( unquoted, true )) &&\n\t\t\t\t// advance to the next closing parenthesis\n\t\t\t\t(excess = unquoted.indexOf( \")\", unquoted.length - excess ) - unquoted.length) ) {\n\n\t\t\t\t// excess is a negative index\n\t\t\t\tmatch[0] = match[0].slice( 0, excess );\n\t\t\t\tmatch[2] = unquoted.slice( 0, excess );\n\t\t\t}\n\n\t\t\t// Return only captures needed by the pseudo filter method (type and argument)\n\t\t\treturn match.slice( 0, 3 );\n\t\t}\n\t},\n\n\tfilter: {\n\n\t\t\"TAG\": function( nodeNameSelector ) {\n\t\t\tvar nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn nodeNameSelector === \"*\" ?\n\t\t\t\tfunction() { return true; } :\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn elem.nodeName && elem.nodeName.toLowerCase() === nodeName;\n\t\t\t\t};\n\t\t},\n\n\t\t\"CLASS\": function( className ) {\n\t\t\tvar pattern = classCache[ className + \" \" ];\n\n\t\t\treturn pattern ||\n\t\t\t\t(pattern = new RegExp( \"(^|\" + whitespace + \")\" + className + \"(\" + whitespace + \"|$)\" )) &&\n\t\t\t\tclassCache( className, function( elem ) {\n\t\t\t\t\treturn pattern.test( typeof elem.className === \"string\" && elem.className || typeof elem.getAttribute !== \"undefined\" && elem.getAttribute(\"class\") || \"\" );\n\t\t\t\t});\n\t\t},\n\n\t\t\"ATTR\": function( name, operator, check ) {\n\t\t\treturn function( elem ) {\n\t\t\t\tvar result = Sizzle.attr( elem, name );\n\n\t\t\t\tif ( result == null ) {\n\t\t\t\t\treturn operator === \"!=\";\n\t\t\t\t}\n\t\t\t\tif ( !operator ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tresult += \"\";\n\n\t\t\t\treturn operator === \"=\" ? result === check :\n\t\t\t\t\toperator === \"!=\" ? result !== check :\n\t\t\t\t\toperator === \"^=\" ? check && result.indexOf( check ) === 0 :\n\t\t\t\t\toperator === \"*=\" ? check && result.indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"$=\" ? check && result.slice( -check.length ) === check :\n\t\t\t\t\toperator === \"~=\" ? ( \" \" + result.replace( rwhitespace, \" \" ) + \" \" ).indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"|=\" ? result === check || result.slice( 0, check.length + 1 ) === check + \"-\" :\n\t\t\t\t\tfalse;\n\t\t\t};\n\t\t},\n\n\t\t\"CHILD\": function( type, what, argument, first, last ) {\n\t\t\tvar simple = type.slice( 0, 3 ) !== \"nth\",\n\t\t\t\tforward = type.slice( -4 ) !== \"last\",\n\t\t\t\tofType = what === \"of-type\";\n\n\t\t\treturn first === 1 && last === 0 ?\n\n\t\t\t\t// Shortcut for :nth-*(n)\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn !!elem.parentNode;\n\t\t\t\t} :\n\n\t\t\t\tfunction( elem, context, xml ) {\n\t\t\t\t\tvar cache, uniqueCache, outerCache, node, nodeIndex, start,\n\t\t\t\t\t\tdir = simple !== forward ? \"nextSibling\" : \"previousSibling\",\n\t\t\t\t\t\tparent = elem.parentNode,\n\t\t\t\t\t\tname = ofType && elem.nodeName.toLowerCase(),\n\t\t\t\t\t\tuseCache = !xml && !ofType,\n\t\t\t\t\t\tdiff = false;\n\n\t\t\t\t\tif ( parent ) {\n\n\t\t\t\t\t\t// :(first|last|only)-(child|of-type)\n\t\t\t\t\t\tif ( simple ) {\n\t\t\t\t\t\t\twhile ( dir ) {\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\twhile ( (node = node[ dir ]) ) {\n\t\t\t\t\t\t\t\t\tif ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnode.nodeName.toLowerCase() === name :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) {\n\n\t\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// Reverse direction for :only-* (if we haven't yet done so)\n\t\t\t\t\t\t\t\tstart = dir = type === \"only\" && !start && \"nextSibling\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tstart = [ forward ? parent.firstChild : parent.lastChild ];\n\n\t\t\t\t\t\t// non-xml :nth-child(...) stores cache data on `parent`\n\t\t\t\t\t\tif ( forward && useCache ) {\n\n\t\t\t\t\t\t\t// Seek `elem` from a previously-cached index\n\n\t\t\t\t\t\t\t// ...in a gzip-friendly way\n\t\t\t\t\t\t\tnode = parent;\n\t\t\t\t\t\t\touterCache = node[ expando ] || (node[ expando ] = {});\n\n\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t(outerCache[ node.uniqueID ] = {});\n\n\t\t\t\t\t\t\tcache = uniqueCache[ type ] || [];\n\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\tdiff = nodeIndex && cache[ 2 ];\n\t\t\t\t\t\t\tnode = nodeIndex && parent.childNodes[ nodeIndex ];\n\n\t\t\t\t\t\t\twhile ( (node = ++nodeIndex && node && node[ dir ] ||\n\n\t\t\t\t\t\t\t\t// Fallback to seeking `elem` from the start\n\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop()) ) {\n\n\t\t\t\t\t\t\t\t// When found, cache indexes on `parent` and break\n\t\t\t\t\t\t\t\tif ( node.nodeType === 1 && ++diff && node === elem ) {\n\t\t\t\t\t\t\t\t\tuniqueCache[ type ] = [ dirruns, nodeIndex, diff ];\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Use previously-cached element index if available\n\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t// ...in a gzip-friendly way\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\touterCache = node[ expando ] || (node[ expando ] = {});\n\n\t\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t\t(outerCache[ node.uniqueID ] = {});\n\n\t\t\t\t\t\t\t\tcache = uniqueCache[ type ] || [];\n\t\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\t\tdiff = nodeIndex;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// xml :nth-child(...)\n\t\t\t\t\t\t\t// or :nth-last-child(...) or :nth(-last)?-of-type(...)\n\t\t\t\t\t\t\tif ( diff === false ) {\n\t\t\t\t\t\t\t\t// Use the same loop as above to seek `elem` from the start\n\t\t\t\t\t\t\t\twhile ( (node = ++nodeIndex && node && node[ dir ] ||\n\t\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop()) ) {\n\n\t\t\t\t\t\t\t\t\tif ( ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnode.nodeName.toLowerCase() === name :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) &&\n\t\t\t\t\t\t\t\t\t\t++diff ) {\n\n\t\t\t\t\t\t\t\t\t\t// Cache the index of each encountered element\n\t\t\t\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t\t\t\touterCache = node[ expando ] || (node[ expando ] = {});\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t\t\t\t\t(outerCache[ node.uniqueID ] = {});\n\n\t\t\t\t\t\t\t\t\t\t\tuniqueCache[ type ] = [ dirruns, diff ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tif ( node === elem ) {\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Incorporate the offset, then check against cycle size\n\t\t\t\t\t\tdiff -= last;\n\t\t\t\t\t\treturn diff === first || ( diff % first === 0 && diff / first >= 0 );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t},\n\n\t\t\"PSEUDO\": function( pseudo, argument ) {\n\t\t\t// pseudo-class names are case-insensitive\n\t\t\t// http://www.w3.org/TR/selectors/#pseudo-classes\n\t\t\t// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters\n\t\t\t// Remember that setFilters inherits from pseudos\n\t\t\tvar args,\n\t\t\t\tfn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||\n\t\t\t\t\tSizzle.error( \"unsupported pseudo: \" + pseudo );\n\n\t\t\t// The user may use createPseudo to indicate that\n\t\t\t// arguments are needed to create the filter function\n\t\t\t// just as Sizzle does\n\t\t\tif ( fn[ expando ] ) {\n\t\t\t\treturn fn( argument );\n\t\t\t}\n\n\t\t\t// But maintain support for old signatures\n\t\t\tif ( fn.length > 1 ) {\n\t\t\t\targs = [ pseudo, pseudo, \"\", argument ];\n\t\t\t\treturn Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?\n\t\t\t\t\tmarkFunction(function( seed, matches ) {\n\t\t\t\t\t\tvar idx,\n\t\t\t\t\t\t\tmatched = fn( seed, argument ),\n\t\t\t\t\t\t\ti = matched.length;\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tidx = indexOf( seed, matched[i] );\n\t\t\t\t\t\t\tseed[ idx ] = !( matches[ idx ] = matched[i] );\n\t\t\t\t\t\t}\n\t\t\t\t\t}) :\n\t\t\t\t\tfunction( elem ) {\n\t\t\t\t\t\treturn fn( elem, 0, args );\n\t\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn fn;\n\t\t}\n\t},\n\n\tpseudos: {\n\t\t// Potentially complex pseudos\n\t\t\"not\": markFunction(function( selector ) {\n\t\t\t// Trim the selector passed to compile\n\t\t\t// to avoid treating leading and trailing\n\t\t\t// spaces as combinators\n\t\t\tvar input = [],\n\t\t\t\tresults = [],\n\t\t\t\tmatcher = compile( selector.replace( rtrim, \"$1\" ) );\n\n\t\t\treturn matcher[ expando ] ?\n\t\t\t\tmarkFunction(function( seed, matches, context, xml ) {\n\t\t\t\t\tvar elem,\n\t\t\t\t\t\tunmatched = matcher( seed, null, xml, [] ),\n\t\t\t\t\t\ti = seed.length;\n\n\t\t\t\t\t// Match elements unmatched by `matcher`\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( (elem = unmatched[i]) ) {\n\t\t\t\t\t\t\tseed[i] = !(matches[i] = elem);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}) :\n\t\t\t\tfunction( elem, context, xml ) {\n\t\t\t\t\tinput[0] = elem;\n\t\t\t\t\tmatcher( input, null, xml, results );\n\t\t\t\t\t// Don't keep the element (issue #299)\n\t\t\t\t\tinput[0] = null;\n\t\t\t\t\treturn !results.pop();\n\t\t\t\t};\n\t\t}),\n\n\t\t\"has\": markFunction(function( selector ) {\n\t\t\treturn function( elem ) {\n\t\t\t\treturn Sizzle( selector, elem ).length > 0;\n\t\t\t};\n\t\t}),\n\n\t\t\"contains\": markFunction(function( text ) {\n\t\t\ttext = text.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1;\n\t\t\t};\n\t\t}),\n\n\t\t// \"Whether an element is represented by a :lang() selector\n\t\t// is based solely on the element's language value\n\t\t// being equal to the identifier C,\n\t\t// or beginning with the identifier C immediately followed by \"-\".\n\t\t// The matching of C against the element's language value is performed case-insensitively.\n\t\t// The identifier C does not have to be a valid language name.\"\n\t\t// http://www.w3.org/TR/selectors/#lang-pseudo\n\t\t\"lang\": markFunction( function( lang ) {\n\t\t\t// lang value must be a valid identifier\n\t\t\tif ( !ridentifier.test(lang || \"\") ) {\n\t\t\t\tSizzle.error( \"unsupported lang: \" + lang );\n\t\t\t}\n\t\t\tlang = lang.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn function( elem ) {\n\t\t\t\tvar elemLang;\n\t\t\t\tdo {\n\t\t\t\t\tif ( (elemLang = documentIsHTML ?\n\t\t\t\t\t\telem.lang :\n\t\t\t\t\t\telem.getAttribute(\"xml:lang\") || elem.getAttribute(\"lang\")) ) {\n\n\t\t\t\t\t\telemLang = elemLang.toLowerCase();\n\t\t\t\t\t\treturn elemLang === lang || elemLang.indexOf( lang + \"-\" ) === 0;\n\t\t\t\t\t}\n\t\t\t\t} while ( (elem = elem.parentNode) && elem.nodeType === 1 );\n\t\t\t\treturn false;\n\t\t\t};\n\t\t}),\n\n\t\t// Miscellaneous\n\t\t\"target\": function( elem ) {\n\t\t\tvar hash = window.location && window.location.hash;\n\t\t\treturn hash && hash.slice( 1 ) === elem.id;\n\t\t},\n\n\t\t\"root\": function( elem ) {\n\t\t\treturn elem === docElem;\n\t\t},\n\n\t\t\"focus\": function( elem ) {\n\t\t\treturn elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);\n\t\t},\n\n\t\t// Boolean properties\n\t\t\"enabled\": createDisabledPseudo( false ),\n\t\t\"disabled\": createDisabledPseudo( true ),\n\n\t\t\"checked\": function( elem ) {\n\t\t\t// In CSS3, :checked should return both checked and selected elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\tvar nodeName = elem.nodeName.toLowerCase();\n\t\t\treturn (nodeName === \"input\" && !!elem.checked) || (nodeName === \"option\" && !!elem.selected);\n\t\t},\n\n\t\t\"selected\": function( elem ) {\n\t\t\t// Accessing this property makes selected-by-default\n\t\t\t// options in Safari work properly\n\t\t\tif ( elem.parentNode ) {\n\t\t\t\telem.parentNode.selectedIndex;\n\t\t\t}\n\n\t\t\treturn elem.selected === true;\n\t\t},\n\n\t\t// Contents\n\t\t\"empty\": function( elem ) {\n\t\t\t// http://www.w3.org/TR/selectors/#empty-pseudo\n\t\t\t// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),\n\t\t\t// but not by others (comment: 8; processing instruction: 7; etc.)\n\t\t\t// nodeType < 6 works because attributes (2) do not appear as children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tif ( elem.nodeType < 6 ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\t\"parent\": function( elem ) {\n\t\t\treturn !Expr.pseudos[\"empty\"]( elem );\n\t\t},\n\n\t\t// Element/input types\n\t\t\"header\": function( elem ) {\n\t\t\treturn rheader.test( elem.nodeName );\n\t\t},\n\n\t\t\"input\": function( elem ) {\n\t\t\treturn rinputs.test( elem.nodeName );\n\t\t},\n\n\t\t\"button\": function( elem ) {\n\t\t\tvar name = elem.nodeName.toLowerCase();\n\t\t\treturn name === \"input\" && elem.type === \"button\" || name === \"button\";\n\t\t},\n\n\t\t\"text\": function( elem ) {\n\t\t\tvar attr;\n\t\t\treturn elem.nodeName.toLowerCase() === \"input\" &&\n\t\t\t\telem.type === \"text\" &&\n\n\t\t\t\t// Support: IE<8\n\t\t\t\t// New HTML5 attribute values (e.g., \"search\") appear with elem.type === \"text\"\n\t\t\t\t( (attr = elem.getAttribute(\"type\")) == null || attr.toLowerCase() === \"text\" );\n\t\t},\n\n\t\t// Position-in-collection\n\t\t\"first\": createPositionalPseudo(function() {\n\t\t\treturn [ 0 ];\n\t\t}),\n\n\t\t\"last\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\treturn [ length - 1 ];\n\t\t}),\n\n\t\t\"eq\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\treturn [ argument < 0 ? argument + length : argument ];\n\t\t}),\n\n\t\t\"even\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"odd\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\tvar i = 1;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"lt\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; --i >= 0; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"gt\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; ++i < length; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t})\n\t}\n};\n\nExpr.pseudos[\"nth\"] = Expr.pseudos[\"eq\"];\n\n// Add button/input type pseudos\nfor ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {\n\tExpr.pseudos[ i ] = createInputPseudo( i );\n}\nfor ( i in { submit: true, reset: true } ) {\n\tExpr.pseudos[ i ] = createButtonPseudo( i );\n}\n\n// Easy API for creating new setFilters\nfunction setFilters() {}\nsetFilters.prototype = Expr.filters = Expr.pseudos;\nExpr.setFilters = new setFilters();\n\ntokenize = Sizzle.tokenize = function( selector, parseOnly ) {\n\tvar matched, match, tokens, type,\n\t\tsoFar, groups, preFilters,\n\t\tcached = tokenCache[ selector + \" \" ];\n\n\tif ( cached ) {\n\t\treturn parseOnly ? 0 : cached.slice( 0 );\n\t}\n\n\tsoFar = selector;\n\tgroups = [];\n\tpreFilters = Expr.preFilter;\n\n\twhile ( soFar ) {\n\n\t\t// Comma and first run\n\t\tif ( !matched || (match = rcomma.exec( soFar )) ) {\n\t\t\tif ( match ) {\n\t\t\t\t// Don't consume trailing commas as valid\n\t\t\t\tsoFar = soFar.slice( match[0].length ) || soFar;\n\t\t\t}\n\t\t\tgroups.push( (tokens = []) );\n\t\t}\n\n\t\tmatched = false;\n\n\t\t// Combinators\n\t\tif ( (match = rcombinators.exec( soFar )) ) {\n\t\t\tmatched = match.shift();\n\t\t\ttokens.push({\n\t\t\t\tvalue: matched,\n\t\t\t\t// Cast descendant combinators to space\n\t\t\t\ttype: match[0].replace( rtrim, \" \" )\n\t\t\t});\n\t\t\tsoFar = soFar.slice( matched.length );\n\t\t}\n\n\t\t// Filters\n\t\tfor ( type in Expr.filter ) {\n\t\t\tif ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] ||\n\t\t\t\t(match = preFilters[ type ]( match ))) ) {\n\t\t\t\tmatched = match.shift();\n\t\t\t\ttokens.push({\n\t\t\t\t\tvalue: matched,\n\t\t\t\t\ttype: type,\n\t\t\t\t\tmatches: match\n\t\t\t\t});\n\t\t\t\tsoFar = soFar.slice( matched.length );\n\t\t\t}\n\t\t}\n\n\t\tif ( !matched ) {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\t// Return the length of the invalid excess\n\t// if we're just parsing\n\t// Otherwise, throw an error or return tokens\n\treturn parseOnly ?\n\t\tsoFar.length :\n\t\tsoFar ?\n\t\t\tSizzle.error( selector ) :\n\t\t\t// Cache the tokens\n\t\t\ttokenCache( selector, groups ).slice( 0 );\n};\n\nfunction toSelector( tokens ) {\n\tvar i = 0,\n\t\tlen = tokens.length,\n\t\tselector = \"\";\n\tfor ( ; i < len; i++ ) {\n\t\tselector += tokens[i].value;\n\t}\n\treturn selector;\n}\n\nfunction addCombinator( matcher, combinator, base ) {\n\tvar dir = combinator.dir,\n\t\tskip = combinator.next,\n\t\tkey = skip || dir,\n\t\tcheckNonElements = base && key === \"parentNode\",\n\t\tdoneName = done++;\n\n\treturn combinator.first ?\n\t\t// Check against closest ancestor/preceding element\n\t\tfunction( elem, context, xml ) {\n\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\treturn matcher( elem, context, xml );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t} :\n\n\t\t// Check against all ancestor/preceding elements\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar oldCache, uniqueCache, outerCache,\n\t\t\t\tnewCache = [ dirruns, doneName ];\n\n\t\t\t// We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching\n\t\t\tif ( xml ) {\n\t\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\tif ( matcher( elem, context, xml ) ) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\touterCache = elem[ expando ] || (elem[ expando ] = {});\n\n\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\tuniqueCache = outerCache[ elem.uniqueID ] || (outerCache[ elem.uniqueID ] = {});\n\n\t\t\t\t\t\tif ( skip && skip === elem.nodeName.toLowerCase() ) {\n\t\t\t\t\t\t\telem = elem[ dir ] || elem;\n\t\t\t\t\t\t} else if ( (oldCache = uniqueCache[ key ]) &&\n\t\t\t\t\t\t\toldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {\n\n\t\t\t\t\t\t\t// Assign to newCache so results back-propagate to previous elements\n\t\t\t\t\t\t\treturn (newCache[ 2 ] = oldCache[ 2 ]);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Reuse newcache so results back-propagate to previous elements\n\t\t\t\t\t\t\tuniqueCache[ key ] = newCache;\n\n\t\t\t\t\t\t\t// A match means we're done; a fail means we have to keep checking\n\t\t\t\t\t\t\tif ( (newCache[ 2 ] = matcher( elem, context, xml )) ) {\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n}\n\nfunction elementMatcher( matchers ) {\n\treturn matchers.length > 1 ?\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar i = matchers.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( !matchers[i]( elem, context, xml ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t} :\n\t\tmatchers[0];\n}\n\nfunction multipleContexts( selector, contexts, results ) {\n\tvar i = 0,\n\t\tlen = contexts.length;\n\tfor ( ; i < len; i++ ) {\n\t\tSizzle( selector, contexts[i], results );\n\t}\n\treturn results;\n}\n\nfunction condense( unmatched, map, filter, context, xml ) {\n\tvar elem,\n\t\tnewUnmatched = [],\n\t\ti = 0,\n\t\tlen = unmatched.length,\n\t\tmapped = map != null;\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( (elem = unmatched[i]) ) {\n\t\t\tif ( !filter || filter( elem, context, xml ) ) {\n\t\t\t\tnewUnmatched.push( elem );\n\t\t\t\tif ( mapped ) {\n\t\t\t\t\tmap.push( i );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn newUnmatched;\n}\n\nfunction setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {\n\tif ( postFilter && !postFilter[ expando ] ) {\n\t\tpostFilter = setMatcher( postFilter );\n\t}\n\tif ( postFinder && !postFinder[ expando ] ) {\n\t\tpostFinder = setMatcher( postFinder, postSelector );\n\t}\n\treturn markFunction(function( seed, results, context, xml ) {\n\t\tvar temp, i, elem,\n\t\t\tpreMap = [],\n\t\t\tpostMap = [],\n\t\t\tpreexisting = results.length,\n\n\t\t\t// Get initial elements from seed or context\n\t\t\telems = seed || multipleContexts( selector || \"*\", context.nodeType ? [ context ] : context, [] ),\n\n\t\t\t// Prefilter to get matcher input, preserving a map for seed-results synchronization\n\t\t\tmatcherIn = preFilter && ( seed || !selector ) ?\n\t\t\t\tcondense( elems, preMap, preFilter, context, xml ) :\n\t\t\t\telems,\n\n\t\t\tmatcherOut = matcher ?\n\t\t\t\t// If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,\n\t\t\t\tpostFinder || ( seed ? preFilter : preexisting || postFilter ) ?\n\n\t\t\t\t\t// ...intermediate processing is necessary\n\t\t\t\t\t[] :\n\n\t\t\t\t\t// ...otherwise use results directly\n\t\t\t\t\tresults :\n\t\t\t\tmatcherIn;\n\n\t\t// Find primary matches\n\t\tif ( matcher ) {\n\t\t\tmatcher( matcherIn, matcherOut, context, xml );\n\t\t}\n\n\t\t// Apply postFilter\n\t\tif ( postFilter ) {\n\t\t\ttemp = condense( matcherOut, postMap );\n\t\t\tpostFilter( temp, [], context, xml );\n\n\t\t\t// Un-match failing elements by moving them back to matcherIn\n\t\t\ti = temp.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( (elem = temp[i]) ) {\n\t\t\t\t\tmatcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( seed ) {\n\t\t\tif ( postFinder || preFilter ) {\n\t\t\t\tif ( postFinder ) {\n\t\t\t\t\t// Get the final matcherOut by condensing this intermediate into postFinder contexts\n\t\t\t\t\ttemp = [];\n\t\t\t\t\ti = matcherOut.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( (elem = matcherOut[i]) ) {\n\t\t\t\t\t\t\t// Restore matcherIn since elem is not yet a final match\n\t\t\t\t\t\t\ttemp.push( (matcherIn[i] = elem) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tpostFinder( null, (matcherOut = []), temp, xml );\n\t\t\t\t}\n\n\t\t\t\t// Move matched elements from seed to results to keep them synchronized\n\t\t\t\ti = matcherOut.length;\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\tif ( (elem = matcherOut[i]) &&\n\t\t\t\t\t\t(temp = postFinder ? indexOf( seed, elem ) : preMap[i]) > -1 ) {\n\n\t\t\t\t\t\tseed[temp] = !(results[temp] = elem);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Add elements to results, through postFinder if defined\n\t\t} else {\n\t\t\tmatcherOut = condense(\n\t\t\t\tmatcherOut === results ?\n\t\t\t\t\tmatcherOut.splice( preexisting, matcherOut.length ) :\n\t\t\t\t\tmatcherOut\n\t\t\t);\n\t\t\tif ( postFinder ) {\n\t\t\t\tpostFinder( null, results, matcherOut, xml );\n\t\t\t} else {\n\t\t\t\tpush.apply( results, matcherOut );\n\t\t\t}\n\t\t}\n\t});\n}\n\nfunction matcherFromTokens( tokens ) {\n\tvar checkContext, matcher, j,\n\t\tlen = tokens.length,\n\t\tleadingRelative = Expr.relative[ tokens[0].type ],\n\t\timplicitRelative = leadingRelative || Expr.relative[\" \"],\n\t\ti = leadingRelative ? 1 : 0,\n\n\t\t// The foundational matcher ensures that elements are reachable from top-level context(s)\n\t\tmatchContext = addCombinator( function( elem ) {\n\t\t\treturn elem === checkContext;\n\t\t}, implicitRelative, true ),\n\t\tmatchAnyContext = addCombinator( function( elem ) {\n\t\t\treturn indexOf( checkContext, elem ) > -1;\n\t\t}, implicitRelative, true ),\n\t\tmatchers = [ function( elem, context, xml ) {\n\t\t\tvar ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || (\n\t\t\t\t(checkContext = context).nodeType ?\n\t\t\t\t\tmatchContext( elem, context, xml ) :\n\t\t\t\t\tmatchAnyContext( elem, context, xml ) );\n\t\t\t// Avoid hanging onto element (issue #299)\n\t\t\tcheckContext = null;\n\t\t\treturn ret;\n\t\t} ];\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( (matcher = Expr.relative[ tokens[i].type ]) ) {\n\t\t\tmatchers = [ addCombinator(elementMatcher( matchers ), matcher) ];\n\t\t} else {\n\t\t\tmatcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches );\n\n\t\t\t// Return special upon seeing a positional matcher\n\t\t\tif ( matcher[ expando ] ) {\n\t\t\t\t// Find the next relative operator (if any) for proper handling\n\t\t\t\tj = ++i;\n\t\t\t\tfor ( ; j < len; j++ ) {\n\t\t\t\t\tif ( Expr.relative[ tokens[j].type ] ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn setMatcher(\n\t\t\t\t\ti > 1 && elementMatcher( matchers ),\n\t\t\t\t\ti > 1 && toSelector(\n\t\t\t\t\t\t// If the preceding token was a descendant combinator, insert an implicit any-element `*`\n\t\t\t\t\t\ttokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === \" \" ? \"*\" : \"\" })\n\t\t\t\t\t).replace( rtrim, \"$1\" ),\n\t\t\t\t\tmatcher,\n\t\t\t\t\ti < j && matcherFromTokens( tokens.slice( i, j ) ),\n\t\t\t\t\tj < len && matcherFromTokens( (tokens = tokens.slice( j )) ),\n\t\t\t\t\tj < len && toSelector( tokens )\n\t\t\t\t);\n\t\t\t}\n\t\t\tmatchers.push( matcher );\n\t\t}\n\t}\n\n\treturn elementMatcher( matchers );\n}\n\nfunction matcherFromGroupMatchers( elementMatchers, setMatchers ) {\n\tvar bySet = setMatchers.length > 0,\n\t\tbyElement = elementMatchers.length > 0,\n\t\tsuperMatcher = function( seed, context, xml, results, outermost ) {\n\t\t\tvar elem, j, matcher,\n\t\t\t\tmatchedCount = 0,\n\t\t\t\ti = \"0\",\n\t\t\t\tunmatched = seed && [],\n\t\t\t\tsetMatched = [],\n\t\t\t\tcontextBackup = outermostContext,\n\t\t\t\t// We must always have either seed elements or outermost context\n\t\t\t\telems = seed || byElement && Expr.find[\"TAG\"]( \"*\", outermost ),\n\t\t\t\t// Use integer dirruns iff this is the outermost matcher\n\t\t\t\tdirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1),\n\t\t\t\tlen = elems.length;\n\n\t\t\tif ( outermost ) {\n\t\t\t\toutermostContext = context === document || context || outermost;\n\t\t\t}\n\n\t\t\t// Add elements passing elementMatchers directly to results\n\t\t\t// Support: IE<9, Safari\n\t\t\t// Tolerate NodeList properties (IE: \"length\"; Safari: <number>) matching elements by id\n\t\t\tfor ( ; i !== len && (elem = elems[i]) != null; i++ ) {\n\t\t\t\tif ( byElement && elem ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\tif ( !context && elem.ownerDocument !== document ) {\n\t\t\t\t\t\tsetDocument( elem );\n\t\t\t\t\t\txml = !documentIsHTML;\n\t\t\t\t\t}\n\t\t\t\t\twhile ( (matcher = elementMatchers[j++]) ) {\n\t\t\t\t\t\tif ( matcher( elem, context || document, xml) ) {\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( outermost ) {\n\t\t\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Track unmatched elements for set filters\n\t\t\t\tif ( bySet ) {\n\t\t\t\t\t// They will have gone through all possible matchers\n\t\t\t\t\tif ( (elem = !matcher && elem) ) {\n\t\t\t\t\t\tmatchedCount--;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Lengthen the array for every element, matched or not\n\t\t\t\t\tif ( seed ) {\n\t\t\t\t\t\tunmatched.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// `i` is now the count of elements visited above, and adding it to `matchedCount`\n\t\t\t// makes the latter nonnegative.\n\t\t\tmatchedCount += i;\n\n\t\t\t// Apply set filters to unmatched elements\n\t\t\t// NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`\n\t\t\t// equals `i`), unless we didn't visit _any_ elements in the above loop because we have\n\t\t\t// no element matchers and no seed.\n\t\t\t// Incrementing an initially-string \"0\" `i` allows `i` to remain a string only in that\n\t\t\t// case, which will result in a \"00\" `matchedCount` that differs from `i` but is also\n\t\t\t// numerically zero.\n\t\t\tif ( bySet && i !== matchedCount ) {\n\t\t\t\tj = 0;\n\t\t\t\twhile ( (matcher = setMatchers[j++]) ) {\n\t\t\t\t\tmatcher( unmatched, setMatched, context, xml );\n\t\t\t\t}\n\n\t\t\t\tif ( seed ) {\n\t\t\t\t\t// Reintegrate element matches to eliminate the need for sorting\n\t\t\t\t\tif ( matchedCount > 0 ) {\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tif ( !(unmatched[i] || setMatched[i]) ) {\n\t\t\t\t\t\t\t\tsetMatched[i] = pop.call( results );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Discard index placeholder values to get only actual matches\n\t\t\t\t\tsetMatched = condense( setMatched );\n\t\t\t\t}\n\n\t\t\t\t// Add matches to results\n\t\t\t\tpush.apply( results, setMatched );\n\n\t\t\t\t// Seedless set matches succeeding multiple successful matchers stipulate sorting\n\t\t\t\tif ( outermost && !seed && setMatched.length > 0 &&\n\t\t\t\t\t( matchedCount + setMatchers.length ) > 1 ) {\n\n\t\t\t\t\tSizzle.uniqueSort( results );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Override manipulation of globals by nested matchers\n\t\t\tif ( outermost ) {\n\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\toutermostContext = contextBackup;\n\t\t\t}\n\n\t\t\treturn unmatched;\n\t\t};\n\n\treturn bySet ?\n\t\tmarkFunction( superMatcher ) :\n\t\tsuperMatcher;\n}\n\ncompile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) {\n\tvar i,\n\t\tsetMatchers = [],\n\t\telementMatchers = [],\n\t\tcached = compilerCache[ selector + \" \" ];\n\n\tif ( !cached ) {\n\t\t// Generate a function of recursive functions that can be used to check each element\n\t\tif ( !match ) {\n\t\t\tmatch = tokenize( selector );\n\t\t}\n\t\ti = match.length;\n\t\twhile ( i-- ) {\n\t\t\tcached = matcherFromTokens( match[i] );\n\t\t\tif ( cached[ expando ] ) {\n\t\t\t\tsetMatchers.push( cached );\n\t\t\t} else {\n\t\t\t\telementMatchers.push( cached );\n\t\t\t}\n\t\t}\n\n\t\t// Cache the compiled function\n\t\tcached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) );\n\n\t\t// Save selector and tokenization\n\t\tcached.selector = selector;\n\t}\n\treturn cached;\n};\n\n/**\n * A low-level selection function that works with Sizzle's compiled\n * selector functions\n * @param {String|Function} selector A selector or a pre-compiled\n * selector function built with Sizzle.compile\n * @param {Element} context\n * @param {Array} [results]\n * @param {Array} [seed] A set of elements to match against\n */\nselect = Sizzle.select = function( selector, context, results, seed ) {\n\tvar i, tokens, token, type, find,\n\t\tcompiled = typeof selector === \"function\" && selector,\n\t\tmatch = !seed && tokenize( (selector = compiled.selector || selector) );\n\n\tresults = results || [];\n\n\t// Try to minimize operations if there is only one selector in the list and no seed\n\t// (the latter of which guarantees us context)\n\tif ( match.length === 1 ) {\n\n\t\t// Reduce context if the leading compound selector is an ID\n\t\ttokens = match[0] = match[0].slice( 0 );\n\t\tif ( tokens.length > 2 && (token = tokens[0]).type === \"ID\" &&\n\t\t\t\tcontext.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[1].type ] ) {\n\n\t\t\tcontext = ( Expr.find[\"ID\"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0];\n\t\t\tif ( !context ) {\n\t\t\t\treturn results;\n\n\t\t\t// Precompiled matchers will still verify ancestry, so step up a level\n\t\t\t} else if ( compiled ) {\n\t\t\t\tcontext = context.parentNode;\n\t\t\t}\n\n\t\t\tselector = selector.slice( tokens.shift().value.length );\n\t\t}\n\n\t\t// Fetch a seed set for right-to-left matching\n\t\ti = matchExpr[\"needsContext\"].test( selector ) ? 0 : tokens.length;\n\t\twhile ( i-- ) {\n\t\t\ttoken = tokens[i];\n\n\t\t\t// Abort if we hit a combinator\n\t\t\tif ( Expr.relative[ (type = token.type) ] ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( (find = Expr.find[ type ]) ) {\n\t\t\t\t// Search, expanding context for leading sibling combinators\n\t\t\t\tif ( (seed = find(\n\t\t\t\t\ttoken.matches[0].replace( runescape, funescape ),\n\t\t\t\t\trsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context\n\t\t\t\t)) ) {\n\n\t\t\t\t\t// If seed is empty or no tokens remain, we can return early\n\t\t\t\t\ttokens.splice( i, 1 );\n\t\t\t\t\tselector = seed.length && toSelector( tokens );\n\t\t\t\t\tif ( !selector ) {\n\t\t\t\t\t\tpush.apply( results, seed );\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Compile and execute a filtering function if one is not provided\n\t// Provide `match` to avoid retokenization if we modified the selector above\n\t( compiled || compile( selector, match ) )(\n\t\tseed,\n\t\tcontext,\n\t\t!documentIsHTML,\n\t\tresults,\n\t\t!context || rsibling.test( selector ) && testContext( context.parentNode ) || context\n\t);\n\treturn results;\n};\n\n// One-time assignments\n\n// Sort stability\nsupport.sortStable = expando.split(\"\").sort( sortOrder ).join(\"\") === expando;\n\n// Support: Chrome 14-35+\n// Always assume duplicates if they aren't passed to the comparison function\nsupport.detectDuplicates = !!hasDuplicate;\n\n// Initialize against the default document\nsetDocument();\n\n// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)\n// Detached nodes confoundingly follow *each other*\nsupport.sortDetached = assert(function( el ) {\n\t// Should return 1, but returns 4 (following)\n\treturn el.compareDocumentPosition( document.createElement(\"fieldset\") ) & 1;\n});\n\n// Support: IE<8\n// Prevent attribute/property \"interpolation\"\n// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx\nif ( !assert(function( el ) {\n\tel.innerHTML = \"<a href='#'></a>\";\n\treturn el.firstChild.getAttribute(\"href\") === \"#\" ;\n}) ) {\n\taddHandle( \"type|href|height|width\", function( elem, name, isXML ) {\n\t\tif ( !isXML ) {\n\t\t\treturn elem.getAttribute( name, name.toLowerCase() === \"type\" ? 1 : 2 );\n\t\t}\n\t});\n}\n\n// Support: IE<9\n// Use defaultValue in place of getAttribute(\"value\")\nif ( !support.attributes || !assert(function( el ) {\n\tel.innerHTML = \"<input/>\";\n\tel.firstChild.setAttribute( \"value\", \"\" );\n\treturn el.firstChild.getAttribute( \"value\" ) === \"\";\n}) ) {\n\taddHandle( \"value\", function( elem, name, isXML ) {\n\t\tif ( !isXML && elem.nodeName.toLowerCase() === \"input\" ) {\n\t\t\treturn elem.defaultValue;\n\t\t}\n\t});\n}\n\n// Support: IE<9\n// Use getAttributeNode to fetch booleans when getAttribute lies\nif ( !assert(function( el ) {\n\treturn el.getAttribute(\"disabled\") == null;\n}) ) {\n\taddHandle( booleans, function( elem, name, isXML ) {\n\t\tvar val;\n\t\tif ( !isXML ) {\n\t\t\treturn elem[ name ] === true ? name.toLowerCase() :\n\t\t\t\t\t(val = elem.getAttributeNode( name )) && val.specified ?\n\t\t\t\t\tval.value :\n\t\t\t\tnull;\n\t\t}\n\t});\n}\n\nreturn Sizzle;\n\n})( window );\n\n\n\njQuery.find = Sizzle;\njQuery.expr = Sizzle.selectors;\n\n// Deprecated\njQuery.expr[ \":\" ] = jQuery.expr.pseudos;\njQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort;\njQuery.text = Sizzle.getText;\njQuery.isXMLDoc = Sizzle.isXML;\njQuery.contains = Sizzle.contains;\njQuery.escapeSelector = Sizzle.escape;\n\n\n\n\nvar dir = function( elem, dir, until ) {\n\tvar matched = [],\n\t\ttruncate = until !== undefined;\n\n\twhile ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) {\n\t\tif ( elem.nodeType === 1 ) {\n\t\t\tif ( truncate && jQuery( elem ).is( until ) ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tmatched.push( elem );\n\t\t}\n\t}\n\treturn matched;\n};\n\n\nvar siblings = function( n, elem ) {\n\tvar matched = [];\n\n\tfor ( ; n; n = n.nextSibling ) {\n\t\tif ( n.nodeType === 1 && n !== elem ) {\n\t\t\tmatched.push( n );\n\t\t}\n\t}\n\n\treturn matched;\n};\n\n\nvar rneedsContext = jQuery.expr.match.needsContext;\n\n\n\nfunction nodeName( elem, name ) {\n\n return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\n\n};\nvar rsingleTag = ( /^<([a-z][^\\/\\0>:\\x20\\t\\r\\n\\f]*)[\\x20\\t\\r\\n\\f]*\\/?>(?:<\\/\\1>|)$/i );\n\n\n\n// Implement the identical functionality for filter and not\nfunction winnow( elements, qualifier, not ) {\n\tif ( isFunction( qualifier ) ) {\n\t\treturn jQuery.grep( elements, function( elem, i ) {\n\t\t\treturn !!qualifier.call( elem, i, elem ) !== not;\n\t\t} );\n\t}\n\n\t// Single element\n\tif ( qualifier.nodeType ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( elem === qualifier ) !== not;\n\t\t} );\n\t}\n\n\t// Arraylike of elements (jQuery, arguments, Array)\n\tif ( typeof qualifier !== \"string\" ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( indexOf.call( qualifier, elem ) > -1 ) !== not;\n\t\t} );\n\t}\n\n\t// Filtered directly for both simple and complex selectors\n\treturn jQuery.filter( qualifier, elements, not );\n}\n\njQuery.filter = function( expr, elems, not ) {\n\tvar elem = elems[ 0 ];\n\n\tif ( not ) {\n\t\texpr = \":not(\" + expr + \")\";\n\t}\n\n\tif ( elems.length === 1 && elem.nodeType === 1 ) {\n\t\treturn jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [];\n\t}\n\n\treturn jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {\n\t\treturn elem.nodeType === 1;\n\t} ) );\n};\n\njQuery.fn.extend( {\n\tfind: function( selector ) {\n\t\tvar i, ret,\n\t\t\tlen = this.length,\n\t\t\tself = this;\n\n\t\tif ( typeof selector !== \"string\" ) {\n\t\t\treturn this.pushStack( jQuery( selector ).filter( function() {\n\t\t\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\t\t\tif ( jQuery.contains( self[ i ], this ) ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} ) );\n\t\t}\n\n\t\tret = this.pushStack( [] );\n\n\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\tjQuery.find( selector, self[ i ], ret );\n\t\t}\n\n\t\treturn len > 1 ? jQuery.uniqueSort( ret ) : ret;\n\t},\n\tfilter: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], false ) );\n\t},\n\tnot: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], true ) );\n\t},\n\tis: function( selector ) {\n\t\treturn !!winnow(\n\t\t\tthis,\n\n\t\t\t// If this is a positional/relative selector, check membership in the returned set\n\t\t\t// so $(\"p:first\").is(\"p:last\") won't return true for a doc with two \"p\".\n\t\t\ttypeof selector === \"string\" && rneedsContext.test( selector ) ?\n\t\t\t\tjQuery( selector ) :\n\t\t\t\tselector || [],\n\t\t\tfalse\n\t\t).length;\n\t}\n} );\n\n\n// Initialize a jQuery object\n\n\n// A central reference to the root jQuery(document)\nvar rootjQuery,\n\n\t// A simple way to check for HTML strings\n\t// Prioritize #id over <tag> to avoid XSS via location.hash (#9521)\n\t// Strict HTML recognition (#11290: must start with <)\n\t// Shortcut simple #id case for speed\n\trquickExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]+))$/,\n\n\tinit = jQuery.fn.init = function( selector, context, root ) {\n\t\tvar match, elem;\n\n\t\t// HANDLE: $(\"\"), $(null), $(undefined), $(false)\n\t\tif ( !selector ) {\n\t\t\treturn this;\n\t\t}\n\n\t\t// Method init() accepts an alternate rootjQuery\n\t\t// so migrate can support jQuery.sub (gh-2101)\n\t\troot = root || rootjQuery;\n\n\t\t// Handle HTML strings\n\t\tif ( typeof selector === \"string\" ) {\n\t\t\tif ( selector[ 0 ] === \"<\" &&\n\t\t\t\tselector[ selector.length - 1 ] === \">\" &&\n\t\t\t\tselector.length >= 3 ) {\n\n\t\t\t\t// Assume that strings that start and end with <> are HTML and skip the regex check\n\t\t\t\tmatch = [ null, selector, null ];\n\n\t\t\t} else {\n\t\t\t\tmatch = rquickExpr.exec( selector );\n\t\t\t}\n\n\t\t\t// Match html or make sure no context is specified for #id\n\t\t\tif ( match && ( match[ 1 ] || !context ) ) {\n\n\t\t\t\t// HANDLE: $(html) -> $(array)\n\t\t\t\tif ( match[ 1 ] ) {\n\t\t\t\t\tcontext = context instanceof jQuery ? context[ 0 ] : context;\n\n\t\t\t\t\t// Option to run scripts is true for back-compat\n\t\t\t\t\t// Intentionally let the error be thrown if parseHTML is not present\n\t\t\t\t\tjQuery.merge( this, jQuery.parseHTML(\n\t\t\t\t\t\tmatch[ 1 ],\n\t\t\t\t\t\tcontext && context.nodeType ? context.ownerDocument || context : document,\n\t\t\t\t\t\ttrue\n\t\t\t\t\t) );\n\n\t\t\t\t\t// HANDLE: $(html, props)\n\t\t\t\t\tif ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) {\n\t\t\t\t\t\tfor ( match in context ) {\n\n\t\t\t\t\t\t\t// Properties of context are called as methods if possible\n\t\t\t\t\t\t\tif ( isFunction( this[ match ] ) ) {\n\t\t\t\t\t\t\t\tthis[ match ]( context[ match ] );\n\n\t\t\t\t\t\t\t// ...and otherwise set as attributes\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis.attr( match, context[ match ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn this;\n\n\t\t\t\t// HANDLE: $(#id)\n\t\t\t\t} else {\n\t\t\t\t\telem = document.getElementById( match[ 2 ] );\n\n\t\t\t\t\tif ( elem ) {\n\n\t\t\t\t\t\t// Inject the element directly into the jQuery object\n\t\t\t\t\t\tthis[ 0 ] = elem;\n\t\t\t\t\t\tthis.length = 1;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\n\t\t\t// HANDLE: $(expr, $(...))\n\t\t\t} else if ( !context || context.jquery ) {\n\t\t\t\treturn ( context || root ).find( selector );\n\n\t\t\t// HANDLE: $(expr, context)\n\t\t\t// (which is just equivalent to: $(context).find(expr)\n\t\t\t} else {\n\t\t\t\treturn this.constructor( context ).find( selector );\n\t\t\t}\n\n\t\t// HANDLE: $(DOMElement)\n\t\t} else if ( selector.nodeType ) {\n\t\t\tthis[ 0 ] = selector;\n\t\t\tthis.length = 1;\n\t\t\treturn this;\n\n\t\t// HANDLE: $(function)\n\t\t// Shortcut for document ready\n\t\t} else if ( isFunction( selector ) ) {\n\t\t\treturn root.ready !== undefined ?\n\t\t\t\troot.ready( selector ) :\n\n\t\t\t\t// Execute immediately if ready is not present\n\t\t\t\tselector( jQuery );\n\t\t}\n\n\t\treturn jQuery.makeArray( selector, this );\n\t};\n\n// Give the init function the jQuery prototype for later instantiation\ninit.prototype = jQuery.fn;\n\n// Initialize central reference\nrootjQuery = jQuery( document );\n\n\nvar rparentsprev = /^(?:parents|prev(?:Until|All))/,\n\n\t// Methods guaranteed to produce a unique set when starting from a unique set\n\tguaranteedUnique = {\n\t\tchildren: true,\n\t\tcontents: true,\n\t\tnext: true,\n\t\tprev: true\n\t};\n\njQuery.fn.extend( {\n\thas: function( target ) {\n\t\tvar targets = jQuery( target, this ),\n\t\t\tl = targets.length;\n\n\t\treturn this.filter( function() {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tif ( jQuery.contains( this, targets[ i ] ) ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\tclosest: function( selectors, context ) {\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\tl = this.length,\n\t\t\tmatched = [],\n\t\t\ttargets = typeof selectors !== \"string\" && jQuery( selectors );\n\n\t\t// Positional selectors never match, since there's no _selection_ context\n\t\tif ( !rneedsContext.test( selectors ) ) {\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tfor ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {\n\n\t\t\t\t\t// Always skip document fragments\n\t\t\t\t\tif ( cur.nodeType < 11 && ( targets ?\n\t\t\t\t\t\ttargets.index( cur ) > -1 :\n\n\t\t\t\t\t\t// Don't pass non-elements to Sizzle\n\t\t\t\t\t\tcur.nodeType === 1 &&\n\t\t\t\t\t\t\tjQuery.find.matchesSelector( cur, selectors ) ) ) {\n\n\t\t\t\t\t\tmatched.push( cur );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched );\n\t},\n\n\t// Determine the position of an element within the set\n\tindex: function( elem ) {\n\n\t\t// No argument, return index in parent\n\t\tif ( !elem ) {\n\t\t\treturn ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;\n\t\t}\n\n\t\t// Index in selector\n\t\tif ( typeof elem === \"string\" ) {\n\t\t\treturn indexOf.call( jQuery( elem ), this[ 0 ] );\n\t\t}\n\n\t\t// Locate the position of the desired element\n\t\treturn indexOf.call( this,\n\n\t\t\t// If it receives a jQuery object, the first element is used\n\t\t\telem.jquery ? elem[ 0 ] : elem\n\t\t);\n\t},\n\n\tadd: function( selector, context ) {\n\t\treturn this.pushStack(\n\t\t\tjQuery.uniqueSort(\n\t\t\t\tjQuery.merge( this.get(), jQuery( selector, context ) )\n\t\t\t)\n\t\t);\n\t},\n\n\taddBack: function( selector ) {\n\t\treturn this.add( selector == null ?\n\t\t\tthis.prevObject : this.prevObject.filter( selector )\n\t\t);\n\t}\n} );\n\nfunction sibling( cur, dir ) {\n\twhile ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {}\n\treturn cur;\n}\n\njQuery.each( {\n\tparent: function( elem ) {\n\t\tvar parent = elem.parentNode;\n\t\treturn parent && parent.nodeType !== 11 ? parent : null;\n\t},\n\tparents: function( elem ) {\n\t\treturn dir( elem, \"parentNode\" );\n\t},\n\tparentsUntil: function( elem, i, until ) {\n\t\treturn dir( elem, \"parentNode\", until );\n\t},\n\tnext: function( elem ) {\n\t\treturn sibling( elem, \"nextSibling\" );\n\t},\n\tprev: function( elem ) {\n\t\treturn sibling( elem, \"previousSibling\" );\n\t},\n\tnextAll: function( elem ) {\n\t\treturn dir( elem, \"nextSibling\" );\n\t},\n\tprevAll: function( elem ) {\n\t\treturn dir( elem, \"previousSibling\" );\n\t},\n\tnextUntil: function( elem, i, until ) {\n\t\treturn dir( elem, \"nextSibling\", until );\n\t},\n\tprevUntil: function( elem, i, until ) {\n\t\treturn dir( elem, \"previousSibling\", until );\n\t},\n\tsiblings: function( elem ) {\n\t\treturn siblings( ( elem.parentNode || {} ).firstChild, elem );\n\t},\n\tchildren: function( elem ) {\n\t\treturn siblings( elem.firstChild );\n\t},\n\tcontents: function( elem ) {\n if ( nodeName( elem, \"iframe\" ) ) {\n return elem.contentDocument;\n }\n\n // Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only\n // Treat the template element as a regular one in browsers that\n // don't support it.\n if ( nodeName( elem, \"template\" ) ) {\n elem = elem.content || elem;\n }\n\n return jQuery.merge( [], elem.childNodes );\n\t}\n}, function( name, fn ) {\n\tjQuery.fn[ name ] = function( until, selector ) {\n\t\tvar matched = jQuery.map( this, fn, until );\n\n\t\tif ( name.slice( -5 ) !== \"Until\" ) {\n\t\t\tselector = until;\n\t\t}\n\n\t\tif ( selector && typeof selector === \"string\" ) {\n\t\t\tmatched = jQuery.filter( selector, matched );\n\t\t}\n\n\t\tif ( this.length > 1 ) {\n\n\t\t\t// Remove duplicates\n\t\t\tif ( !guaranteedUnique[ name ] ) {\n\t\t\t\tjQuery.uniqueSort( matched );\n\t\t\t}\n\n\t\t\t// Reverse order for parents* and prev-derivatives\n\t\t\tif ( rparentsprev.test( name ) ) {\n\t\t\t\tmatched.reverse();\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched );\n\t};\n} );\nvar rnothtmlwhite = ( /[^\\x20\\t\\r\\n\\f]+/g );\n\n\n\n// Convert String-formatted options into Object-formatted ones\nfunction createOptions( options ) {\n\tvar object = {};\n\tjQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) {\n\t\tobject[ flag ] = true;\n\t} );\n\treturn object;\n}\n\n/*\n * Create a callback list using the following parameters:\n *\n *\toptions: an optional list of space-separated options that will change how\n *\t\t\tthe callback list behaves or a more traditional option object\n *\n * By default a callback list will act like an event callback list and can be\n * \"fired\" multiple times.\n *\n * Possible options:\n *\n *\tonce:\t\t\twill ensure the callback list can only be fired once (like a Deferred)\n *\n *\tmemory:\t\t\twill keep track of previous values and will call any callback added\n *\t\t\t\t\tafter the list has been fired right away with the latest \"memorized\"\n *\t\t\t\t\tvalues (like a Deferred)\n *\n *\tunique:\t\t\twill ensure a callback can only be added once (no duplicate in the list)\n *\n *\tstopOnFalse:\tinterrupt callings when a callback returns false\n *\n */\njQuery.Callbacks = function( options ) {\n\n\t// Convert options from String-formatted to Object-formatted if needed\n\t// (we check in cache first)\n\toptions = typeof options === \"string\" ?\n\t\tcreateOptions( options ) :\n\t\tjQuery.extend( {}, options );\n\n\tvar // Flag to know if list is currently firing\n\t\tfiring,\n\n\t\t// Last fire value for non-forgettable lists\n\t\tmemory,\n\n\t\t// Flag to know if list was already fired\n\t\tfired,\n\n\t\t// Flag to prevent firing\n\t\tlocked,\n\n\t\t// Actual callback list\n\t\tlist = [],\n\n\t\t// Queue of execution data for repeatable lists\n\t\tqueue = [],\n\n\t\t// Index of currently firing callback (modified by add/remove as needed)\n\t\tfiringIndex = -1,\n\n\t\t// Fire callbacks\n\t\tfire = function() {\n\n\t\t\t// Enforce single-firing\n\t\t\tlocked = locked || options.once;\n\n\t\t\t// Execute callbacks for all pending executions,\n\t\t\t// respecting firingIndex overrides and runtime changes\n\t\t\tfired = firing = true;\n\t\t\tfor ( ; queue.length; firingIndex = -1 ) {\n\t\t\t\tmemory = queue.shift();\n\t\t\t\twhile ( ++firingIndex < list.length ) {\n\n\t\t\t\t\t// Run callback and check for early termination\n\t\t\t\t\tif ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &&\n\t\t\t\t\t\toptions.stopOnFalse ) {\n\n\t\t\t\t\t\t// Jump to end and forget the data so .add doesn't re-fire\n\t\t\t\t\t\tfiringIndex = list.length;\n\t\t\t\t\t\tmemory = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Forget the data if we're done with it\n\t\t\tif ( !options.memory ) {\n\t\t\t\tmemory = false;\n\t\t\t}\n\n\t\t\tfiring = false;\n\n\t\t\t// Clean up if we're done firing for good\n\t\t\tif ( locked ) {\n\n\t\t\t\t// Keep an empty list if we have data for future add calls\n\t\t\t\tif ( memory ) {\n\t\t\t\t\tlist = [];\n\n\t\t\t\t// Otherwise, this object is spent\n\t\t\t\t} else {\n\t\t\t\t\tlist = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t// Actual Callbacks object\n\t\tself = {\n\n\t\t\t// Add a callback or a collection of callbacks to the list\n\t\t\tadd: function() {\n\t\t\t\tif ( list ) {\n\n\t\t\t\t\t// If we have memory from a past run, we should fire after adding\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfiringIndex = list.length - 1;\n\t\t\t\t\t\tqueue.push( memory );\n\t\t\t\t\t}\n\n\t\t\t\t\t( function add( args ) {\n\t\t\t\t\t\tjQuery.each( args, function( _, arg ) {\n\t\t\t\t\t\t\tif ( isFunction( arg ) ) {\n\t\t\t\t\t\t\t\tif ( !options.unique || !self.has( arg ) ) {\n\t\t\t\t\t\t\t\t\tlist.push( arg );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if ( arg && arg.length && toType( arg ) !== \"string\" ) {\n\n\t\t\t\t\t\t\t\t// Inspect recursively\n\t\t\t\t\t\t\t\tadd( arg );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} );\n\t\t\t\t\t} )( arguments );\n\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Remove a callback from the list\n\t\t\tremove: function() {\n\t\t\t\tjQuery.each( arguments, function( _, arg ) {\n\t\t\t\t\tvar index;\n\t\t\t\t\twhile ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {\n\t\t\t\t\t\tlist.splice( index, 1 );\n\n\t\t\t\t\t\t// Handle firing indexes\n\t\t\t\t\t\tif ( index <= firingIndex ) {\n\t\t\t\t\t\t\tfiringIndex--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Check if a given callback is in the list.\n\t\t\t// If no argument is given, return whether or not list has callbacks attached.\n\t\t\thas: function( fn ) {\n\t\t\t\treturn fn ?\n\t\t\t\t\tjQuery.inArray( fn, list ) > -1 :\n\t\t\t\t\tlist.length > 0;\n\t\t\t},\n\n\t\t\t// Remove all callbacks from the list\n\t\t\tempty: function() {\n\t\t\t\tif ( list ) {\n\t\t\t\t\tlist = [];\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Disable .fire and .add\n\t\t\t// Abort any current/pending executions\n\t\t\t// Clear all callbacks and values\n\t\t\tdisable: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tlist = memory = \"\";\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tdisabled: function() {\n\t\t\t\treturn !list;\n\t\t\t},\n\n\t\t\t// Disable .fire\n\t\t\t// Also disable .add unless we have memory (since it would have no effect)\n\t\t\t// Abort any pending executions\n\t\t\tlock: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tif ( !memory && !firing ) {\n\t\t\t\t\tlist = memory = \"\";\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tlocked: function() {\n\t\t\t\treturn !!locked;\n\t\t\t},\n\n\t\t\t// Call all callbacks with the given context and arguments\n\t\t\tfireWith: function( context, args ) {\n\t\t\t\tif ( !locked ) {\n\t\t\t\t\targs = args || [];\n\t\t\t\t\targs = [ context, args.slice ? args.slice() : args ];\n\t\t\t\t\tqueue.push( args );\n\t\t\t\t\tif ( !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Call all the callbacks with the given arguments\n\t\t\tfire: function() {\n\t\t\t\tself.fireWith( this, arguments );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// To know if the callbacks have already been called at least once\n\t\t\tfired: function() {\n\t\t\t\treturn !!fired;\n\t\t\t}\n\t\t};\n\n\treturn self;\n};\n\n\nfunction Identity( v ) {\n\treturn v;\n}\nfunction Thrower( ex ) {\n\tthrow ex;\n}\n\nfunction adoptValue( value, resolve, reject, noValue ) {\n\tvar method;\n\n\ttry {\n\n\t\t// Check for promise aspect first to privilege synchronous behavior\n\t\tif ( value && isFunction( ( method = value.promise ) ) ) {\n\t\t\tmethod.call( value ).done( resolve ).fail( reject );\n\n\t\t// Other thenables\n\t\t} else if ( value && isFunction( ( method = value.then ) ) ) {\n\t\t\tmethod.call( value, resolve, reject );\n\n\t\t// Other non-thenables\n\t\t} else {\n\n\t\t\t// Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer:\n\t\t\t// * false: [ value ].slice( 0 ) => resolve( value )\n\t\t\t// * true: [ value ].slice( 1 ) => resolve()\n\t\t\tresolve.apply( undefined, [ value ].slice( noValue ) );\n\t\t}\n\n\t// For Promises/A+, convert exceptions into rejections\n\t// Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in\n\t// Deferred#then to conditionally suppress rejection.\n\t} catch ( value ) {\n\n\t\t// Support: Android 4.0 only\n\t\t// Strict mode functions invoked without .call/.apply get global-object context\n\t\treject.apply( undefined, [ value ] );\n\t}\n}\n\njQuery.extend( {\n\n\tDeferred: function( func ) {\n\t\tvar tuples = [\n\n\t\t\t\t// action, add listener, callbacks,\n\t\t\t\t// ... .then handlers, argument index, [final state]\n\t\t\t\t[ \"notify\", \"progress\", jQuery.Callbacks( \"memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"memory\" ), 2 ],\n\t\t\t\t[ \"resolve\", \"done\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 0, \"resolved\" ],\n\t\t\t\t[ \"reject\", \"fail\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 1, \"rejected\" ]\n\t\t\t],\n\t\t\tstate = \"pending\",\n\t\t\tpromise = {\n\t\t\t\tstate: function() {\n\t\t\t\t\treturn state;\n\t\t\t\t},\n\t\t\t\talways: function() {\n\t\t\t\t\tdeferred.done( arguments ).fail( arguments );\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\t\"catch\": function( fn ) {\n\t\t\t\t\treturn promise.then( null, fn );\n\t\t\t\t},\n\n\t\t\t\t// Keep pipe for back-compat\n\t\t\t\tpipe: function( /* fnDone, fnFail, fnProgress */ ) {\n\t\t\t\t\tvar fns = arguments;\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\t\t\t\t\t\tjQuery.each( tuples, function( i, tuple ) {\n\n\t\t\t\t\t\t\t// Map tuples (progress, done, fail) to arguments (done, fail, progress)\n\t\t\t\t\t\t\tvar fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ];\n\n\t\t\t\t\t\t\t// deferred.progress(function() { bind to newDefer or newDefer.notify })\n\t\t\t\t\t\t\t// deferred.done(function() { bind to newDefer or newDefer.resolve })\n\t\t\t\t\t\t\t// deferred.fail(function() { bind to newDefer or newDefer.reject })\n\t\t\t\t\t\t\tdeferred[ tuple[ 1 ] ]( function() {\n\t\t\t\t\t\t\t\tvar returned = fn && fn.apply( this, arguments );\n\t\t\t\t\t\t\t\tif ( returned && isFunction( returned.promise ) ) {\n\t\t\t\t\t\t\t\t\treturned.promise()\n\t\t\t\t\t\t\t\t\t\t.progress( newDefer.notify )\n\t\t\t\t\t\t\t\t\t\t.done( newDefer.resolve )\n\t\t\t\t\t\t\t\t\t\t.fail( newDefer.reject );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tnewDefer[ tuple[ 0 ] + \"With\" ](\n\t\t\t\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t\t\t\tfn ? [ returned ] : arguments\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t} );\n\t\t\t\t\t\tfns = null;\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\t\t\t\tthen: function( onFulfilled, onRejected, onProgress ) {\n\t\t\t\t\tvar maxDepth = 0;\n\t\t\t\t\tfunction resolve( depth, deferred, handler, special ) {\n\t\t\t\t\t\treturn function() {\n\t\t\t\t\t\t\tvar that = this,\n\t\t\t\t\t\t\t\targs = arguments,\n\t\t\t\t\t\t\t\tmightThrow = function() {\n\t\t\t\t\t\t\t\t\tvar returned, then;\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.3\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-59\n\t\t\t\t\t\t\t\t\t// Ignore double-resolution attempts\n\t\t\t\t\t\t\t\t\tif ( depth < maxDepth ) {\n\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\treturned = handler.apply( that, args );\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.1\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-48\n\t\t\t\t\t\t\t\t\tif ( returned === deferred.promise() ) {\n\t\t\t\t\t\t\t\t\t\tthrow new TypeError( \"Thenable self-resolution\" );\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ sections 2.3.3.1, 3.5\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-54\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-75\n\t\t\t\t\t\t\t\t\t// Retrieve `then` only once\n\t\t\t\t\t\t\t\t\tthen = returned &&\n\n\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.4\n\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-64\n\t\t\t\t\t\t\t\t\t\t// Only check objects and functions for thenability\n\t\t\t\t\t\t\t\t\t\t( typeof returned === \"object\" ||\n\t\t\t\t\t\t\t\t\t\t\ttypeof returned === \"function\" ) &&\n\t\t\t\t\t\t\t\t\t\treturned.then;\n\n\t\t\t\t\t\t\t\t\t// Handle a returned thenable\n\t\t\t\t\t\t\t\t\tif ( isFunction( then ) ) {\n\n\t\t\t\t\t\t\t\t\t\t// Special processors (notify) just wait for resolution\n\t\t\t\t\t\t\t\t\t\tif ( special ) {\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special )\n\t\t\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\t\t// Normal processors (resolve) also hook into progress\n\t\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t\t// ...and disregard older resolution values\n\t\t\t\t\t\t\t\t\t\t\tmaxDepth++;\n\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity,\n\t\t\t\t\t\t\t\t\t\t\t\t\tdeferred.notifyWith )\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Handle all other returned values\n\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\tif ( handler !== Identity ) {\n\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\targs = [ returned ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t// Process the value(s)\n\t\t\t\t\t\t\t\t\t\t// Default process is resolve\n\t\t\t\t\t\t\t\t\t\t( special || deferred.resolveWith )( that, args );\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\n\t\t\t\t\t\t\t\t// Only normal processors (resolve) catch and reject exceptions\n\t\t\t\t\t\t\t\tprocess = special ?\n\t\t\t\t\t\t\t\t\tmightThrow :\n\t\t\t\t\t\t\t\t\tfunction() {\n\t\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\t\tmightThrow();\n\t\t\t\t\t\t\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t\t\t\t\t\t\tif ( jQuery.Deferred.exceptionHook ) {\n\t\t\t\t\t\t\t\t\t\t\t\tjQuery.Deferred.exceptionHook( e,\n\t\t\t\t\t\t\t\t\t\t\t\t\tprocess.stackTrace );\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.4.1\n\t\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-61\n\t\t\t\t\t\t\t\t\t\t\t// Ignore post-resolution exceptions\n\t\t\t\t\t\t\t\t\t\t\tif ( depth + 1 >= maxDepth ) {\n\n\t\t\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\t\t\tif ( handler !== Thrower ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\t\t\targs = [ e ];\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\tdeferred.rejectWith( that, args );\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.1\n\t\t\t\t\t\t\t// https://promisesaplus.com/#point-57\n\t\t\t\t\t\t\t// Re-resolve promises immediately to dodge false rejection from\n\t\t\t\t\t\t\t// subsequent errors\n\t\t\t\t\t\t\tif ( depth ) {\n\t\t\t\t\t\t\t\tprocess();\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// Call an optional hook to record the stack, in case of exception\n\t\t\t\t\t\t\t\t// since it's otherwise lost when execution goes async\n\t\t\t\t\t\t\t\tif ( jQuery.Deferred.getStackHook ) {\n\t\t\t\t\t\t\t\t\tprocess.stackTrace = jQuery.Deferred.getStackHook();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\twindow.setTimeout( process );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\n\t\t\t\t\t\t// progress_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 0 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tisFunction( onProgress ) ?\n\t\t\t\t\t\t\t\t\tonProgress :\n\t\t\t\t\t\t\t\t\tIdentity,\n\t\t\t\t\t\t\t\tnewDefer.notifyWith\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// fulfilled_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 1 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tisFunction( onFulfilled ) ?\n\t\t\t\t\t\t\t\t\tonFulfilled :\n\t\t\t\t\t\t\t\t\tIdentity\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// rejected_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 2 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tisFunction( onRejected ) ?\n\t\t\t\t\t\t\t\t\tonRejected :\n\t\t\t\t\t\t\t\t\tThrower\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\n\t\t\t\t// Get a promise for this deferred\n\t\t\t\t// If obj is provided, the promise aspect is added to the object\n\t\t\t\tpromise: function( obj ) {\n\t\t\t\t\treturn obj != null ? jQuery.extend( obj, promise ) : promise;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdeferred = {};\n\n\t\t// Add list-specific methods\n\t\tjQuery.each( tuples, function( i, tuple ) {\n\t\t\tvar list = tuple[ 2 ],\n\t\t\t\tstateString = tuple[ 5 ];\n\n\t\t\t// promise.progress = list.add\n\t\t\t// promise.done = list.add\n\t\t\t// promise.fail = list.add\n\t\t\tpromise[ tuple[ 1 ] ] = list.add;\n\n\t\t\t// Handle state\n\t\t\tif ( stateString ) {\n\t\t\t\tlist.add(\n\t\t\t\t\tfunction() {\n\n\t\t\t\t\t\t// state = \"resolved\" (i.e., fulfilled)\n\t\t\t\t\t\t// state = \"rejected\"\n\t\t\t\t\t\tstate = stateString;\n\t\t\t\t\t},\n\n\t\t\t\t\t// rejected_callbacks.disable\n\t\t\t\t\t// fulfilled_callbacks.disable\n\t\t\t\t\ttuples[ 3 - i ][ 2 ].disable,\n\n\t\t\t\t\t// rejected_handlers.disable\n\t\t\t\t\t// fulfilled_handlers.disable\n\t\t\t\t\ttuples[ 3 - i ][ 3 ].disable,\n\n\t\t\t\t\t// progress_callbacks.lock\n\t\t\t\t\ttuples[ 0 ][ 2 ].lock,\n\n\t\t\t\t\t// progress_handlers.lock\n\t\t\t\t\ttuples[ 0 ][ 3 ].lock\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// progress_handlers.fire\n\t\t\t// fulfilled_handlers.fire\n\t\t\t// rejected_handlers.fire\n\t\t\tlist.add( tuple[ 3 ].fire );\n\n\t\t\t// deferred.notify = function() { deferred.notifyWith(...) }\n\t\t\t// deferred.resolve = function() { deferred.resolveWith(...) }\n\t\t\t// deferred.reject = function() { deferred.rejectWith(...) }\n\t\t\tdeferred[ tuple[ 0 ] ] = function() {\n\t\t\t\tdeferred[ tuple[ 0 ] + \"With\" ]( this === deferred ? undefined : this, arguments );\n\t\t\t\treturn this;\n\t\t\t};\n\n\t\t\t// deferred.notifyWith = list.fireWith\n\t\t\t// deferred.resolveWith = list.fireWith\n\t\t\t// deferred.rejectWith = list.fireWith\n\t\t\tdeferred[ tuple[ 0 ] + \"With\" ] = list.fireWith;\n\t\t} );\n\n\t\t// Make the deferred a promise\n\t\tpromise.promise( deferred );\n\n\t\t// Call given func if any\n\t\tif ( func ) {\n\t\t\tfunc.call( deferred, deferred );\n\t\t}\n\n\t\t// All done!\n\t\treturn deferred;\n\t},\n\n\t// Deferred helper\n\twhen: function( singleValue ) {\n\t\tvar\n\n\t\t\t// count of uncompleted subordinates\n\t\t\tremaining = arguments.length,\n\n\t\t\t// count of unprocessed arguments\n\t\t\ti = remaining,\n\n\t\t\t// subordinate fulfillment data\n\t\t\tresolveContexts = Array( i ),\n\t\t\tresolveValues = slice.call( arguments ),\n\n\t\t\t// the master Deferred\n\t\t\tmaster = jQuery.Deferred(),\n\n\t\t\t// subordinate callback factory\n\t\t\tupdateFunc = function( i ) {\n\t\t\t\treturn function( value ) {\n\t\t\t\t\tresolveContexts[ i ] = this;\n\t\t\t\t\tresolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;\n\t\t\t\t\tif ( !( --remaining ) ) {\n\t\t\t\t\t\tmaster.resolveWith( resolveContexts, resolveValues );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t};\n\n\t\t// Single- and empty arguments are adopted like Promise.resolve\n\t\tif ( remaining <= 1 ) {\n\t\t\tadoptValue( singleValue, master.done( updateFunc( i ) ).resolve, master.reject,\n\t\t\t\t!remaining );\n\n\t\t\t// Use .then() to unwrap secondary thenables (cf. gh-3000)\n\t\t\tif ( master.state() === \"pending\" ||\n\t\t\t\tisFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) {\n\n\t\t\t\treturn master.then();\n\t\t\t}\n\t\t}\n\n\t\t// Multiple arguments are aggregated like Promise.all array elements\n\t\twhile ( i-- ) {\n\t\t\tadoptValue( resolveValues[ i ], updateFunc( i ), master.reject );\n\t\t}\n\n\t\treturn master.promise();\n\t}\n} );\n\n\n// These usually indicate a programmer mistake during development,\n// warn about them ASAP rather than swallowing them by default.\nvar rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;\n\njQuery.Deferred.exceptionHook = function( error, stack ) {\n\n\t// Support: IE 8 - 9 only\n\t// Console exists when dev tools are open, which can happen at any time\n\tif ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) {\n\t\twindow.console.warn( \"jQuery.Deferred exception: \" + error.message, error.stack, stack );\n\t}\n};\n\n\n\n\njQuery.readyException = function( error ) {\n\twindow.setTimeout( function() {\n\t\tthrow error;\n\t} );\n};\n\n\n\n\n// The deferred used on DOM ready\nvar readyList = jQuery.Deferred();\n\njQuery.fn.ready = function( fn ) {\n\n\treadyList\n\t\t.then( fn )\n\n\t\t// Wrap jQuery.readyException in a function so that the lookup\n\t\t// happens at the time of error handling instead of callback\n\t\t// registration.\n\t\t.catch( function( error ) {\n\t\t\tjQuery.readyException( error );\n\t\t} );\n\n\treturn this;\n};\n\njQuery.extend( {\n\n\t// Is the DOM ready to be used? Set to true once it occurs.\n\tisReady: false,\n\n\t// A counter to track how many items to wait for before\n\t// the ready event fires. See #6781\n\treadyWait: 1,\n\n\t// Handle when the DOM is ready\n\tready: function( wait ) {\n\n\t\t// Abort if there are pending holds or we're already ready\n\t\tif ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Remember that the DOM is ready\n\t\tjQuery.isReady = true;\n\n\t\t// If a normal DOM Ready event fired, decrement, and wait if need be\n\t\tif ( wait !== true && --jQuery.readyWait > 0 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If there are functions bound, to execute\n\t\treadyList.resolveWith( document, [ jQuery ] );\n\t}\n} );\n\njQuery.ready.then = readyList.then;\n\n// The ready event handler and self cleanup method\nfunction completed() {\n\tdocument.removeEventListener( \"DOMContentLoaded\", completed );\n\twindow.removeEventListener( \"load\", completed );\n\tjQuery.ready();\n}\n\n// Catch cases where $(document).ready() is called\n// after the browser event has already occurred.\n// Support: IE <=9 - 10 only\n// Older IE sometimes signals \"interactive\" too soon\nif ( document.readyState === \"complete\" ||\n\t( document.readyState !== \"loading\" && !document.documentElement.doScroll ) ) {\n\n\t// Handle it asynchronously to allow scripts the opportunity to delay ready\n\twindow.setTimeout( jQuery.ready );\n\n} else {\n\n\t// Use the handy event callback\n\tdocument.addEventListener( \"DOMContentLoaded\", completed );\n\n\t// A fallback to window.onload, that will always work\n\twindow.addEventListener( \"load\", completed );\n}\n\n\n\n\n// Multifunctional method to get and set values of a collection\n// The value/s can optionally be executed if it's a function\nvar access = function( elems, fn, key, value, chainable, emptyGet, raw ) {\n\tvar i = 0,\n\t\tlen = elems.length,\n\t\tbulk = key == null;\n\n\t// Sets many values\n\tif ( toType( key ) === \"object\" ) {\n\t\tchainable = true;\n\t\tfor ( i in key ) {\n\t\t\taccess( elems, fn, i, key[ i ], true, emptyGet, raw );\n\t\t}\n\n\t// Sets one value\n\t} else if ( value !== undefined ) {\n\t\tchainable = true;\n\n\t\tif ( !isFunction( value ) ) {\n\t\t\traw = true;\n\t\t}\n\n\t\tif ( bulk ) {\n\n\t\t\t// Bulk operations run against the entire set\n\t\t\tif ( raw ) {\n\t\t\t\tfn.call( elems, value );\n\t\t\t\tfn = null;\n\n\t\t\t// ...except when executing function values\n\t\t\t} else {\n\t\t\t\tbulk = fn;\n\t\t\t\tfn = function( elem, key, value ) {\n\t\t\t\t\treturn bulk.call( jQuery( elem ), value );\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tif ( fn ) {\n\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\tfn(\n\t\t\t\t\telems[ i ], key, raw ?\n\t\t\t\t\tvalue :\n\t\t\t\t\tvalue.call( elems[ i ], i, fn( elems[ i ], key ) )\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( chainable ) {\n\t\treturn elems;\n\t}\n\n\t// Gets\n\tif ( bulk ) {\n\t\treturn fn.call( elems );\n\t}\n\n\treturn len ? fn( elems[ 0 ], key ) : emptyGet;\n};\n\n\n// Matches dashed string for camelizing\nvar rmsPrefix = /^-ms-/,\n\trdashAlpha = /-([a-z])/g;\n\n// Used by camelCase as callback to replace()\nfunction fcamelCase( all, letter ) {\n\treturn letter.toUpperCase();\n}\n\n// Convert dashed to camelCase; used by the css and data modules\n// Support: IE <=9 - 11, Edge 12 - 15\n// Microsoft forgot to hump their vendor prefix (#9572)\nfunction camelCase( string ) {\n\treturn string.replace( rmsPrefix, \"ms-\" ).replace( rdashAlpha, fcamelCase );\n}\nvar acceptData = function( owner ) {\n\n\t// Accepts only:\n\t// - Node\n\t// - Node.ELEMENT_NODE\n\t// - Node.DOCUMENT_NODE\n\t// - Object\n\t// - Any\n\treturn owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );\n};\n\n\n\n\nfunction Data() {\n\tthis.expando = jQuery.expando + Data.uid++;\n}\n\nData.uid = 1;\n\nData.prototype = {\n\n\tcache: function( owner ) {\n\n\t\t// Check if the owner object already has a cache\n\t\tvar value = owner[ this.expando ];\n\n\t\t// If not, create one\n\t\tif ( !value ) {\n\t\t\tvalue = {};\n\n\t\t\t// We can accept data for non-element nodes in modern browsers,\n\t\t\t// but we should not, see #8335.\n\t\t\t// Always return an empty object.\n\t\t\tif ( acceptData( owner ) ) {\n\n\t\t\t\t// If it is a node unlikely to be stringify-ed or looped over\n\t\t\t\t// use plain assignment\n\t\t\t\tif ( owner.nodeType ) {\n\t\t\t\t\towner[ this.expando ] = value;\n\n\t\t\t\t// Otherwise secure it in a non-enumerable property\n\t\t\t\t// configurable must be true to allow the property to be\n\t\t\t\t// deleted when data is removed\n\t\t\t\t} else {\n\t\t\t\t\tObject.defineProperty( owner, this.expando, {\n\t\t\t\t\t\tvalue: value,\n\t\t\t\t\t\tconfigurable: true\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn value;\n\t},\n\tset: function( owner, data, value ) {\n\t\tvar prop,\n\t\t\tcache = this.cache( owner );\n\n\t\t// Handle: [ owner, key, value ] args\n\t\t// Always use camelCase key (gh-2257)\n\t\tif ( typeof data === \"string\" ) {\n\t\t\tcache[ camelCase( data ) ] = value;\n\n\t\t// Handle: [ owner, { properties } ] args\n\t\t} else {\n\n\t\t\t// Copy the properties one-by-one to the cache object\n\t\t\tfor ( prop in data ) {\n\t\t\t\tcache[ camelCase( prop ) ] = data[ prop ];\n\t\t\t}\n\t\t}\n\t\treturn cache;\n\t},\n\tget: function( owner, key ) {\n\t\treturn key === undefined ?\n\t\t\tthis.cache( owner ) :\n\n\t\t\t// Always use camelCase key (gh-2257)\n\t\t\towner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ];\n\t},\n\taccess: function( owner, key, value ) {\n\n\t\t// In cases where either:\n\t\t//\n\t\t// 1. No key was specified\n\t\t// 2. A string key was specified, but no value provided\n\t\t//\n\t\t// Take the \"read\" path and allow the get method to determine\n\t\t// which value to return, respectively either:\n\t\t//\n\t\t// 1. The entire cache object\n\t\t// 2. The data stored at the key\n\t\t//\n\t\tif ( key === undefined ||\n\t\t\t\t( ( key && typeof key === \"string\" ) && value === undefined ) ) {\n\n\t\t\treturn this.get( owner, key );\n\t\t}\n\n\t\t// When the key is not a string, or both a key and value\n\t\t// are specified, set or extend (existing objects) with either:\n\t\t//\n\t\t// 1. An object of properties\n\t\t// 2. A key and value\n\t\t//\n\t\tthis.set( owner, key, value );\n\n\t\t// Since the \"set\" path can have two possible entry points\n\t\t// return the expected data based on which path was taken[*]\n\t\treturn value !== undefined ? value : key;\n\t},\n\tremove: function( owner, key ) {\n\t\tvar i,\n\t\t\tcache = owner[ this.expando ];\n\n\t\tif ( cache === undefined ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( key !== undefined ) {\n\n\t\t\t// Support array or space separated string of keys\n\t\t\tif ( Array.isArray( key ) ) {\n\n\t\t\t\t// If key is an array of keys...\n\t\t\t\t// We always set camelCase keys, so remove that.\n\t\t\t\tkey = key.map( camelCase );\n\t\t\t} else {\n\t\t\t\tkey = camelCase( key );\n\n\t\t\t\t// If a key with the spaces exists, use it.\n\t\t\t\t// Otherwise, create an array by matching non-whitespace\n\t\t\t\tkey = key in cache ?\n\t\t\t\t\t[ key ] :\n\t\t\t\t\t( key.match( rnothtmlwhite ) || [] );\n\t\t\t}\n\n\t\t\ti = key.length;\n\n\t\t\twhile ( i-- ) {\n\t\t\t\tdelete cache[ key[ i ] ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove the expando if there's no more data\n\t\tif ( key === undefined || jQuery.isEmptyObject( cache ) ) {\n\n\t\t\t// Support: Chrome <=35 - 45\n\t\t\t// Webkit & Blink performance suffers when deleting properties\n\t\t\t// from DOM nodes, so set to undefined instead\n\t\t\t// https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)\n\t\t\tif ( owner.nodeType ) {\n\t\t\t\towner[ this.expando ] = undefined;\n\t\t\t} else {\n\t\t\t\tdelete owner[ this.expando ];\n\t\t\t}\n\t\t}\n\t},\n\thasData: function( owner ) {\n\t\tvar cache = owner[ this.expando ];\n\t\treturn cache !== undefined && !jQuery.isEmptyObject( cache );\n\t}\n};\nvar dataPriv = new Data();\n\nvar dataUser = new Data();\n\n\n\n//\tImplementation Summary\n//\n//\t1. Enforce API surface and semantic compatibility with 1.9.x branch\n//\t2. Improve the module's maintainability by reducing the storage\n//\t\tpaths to a single mechanism.\n//\t3. Use the same single mechanism to support \"private\" and \"user\" data.\n//\t4. _Never_ expose \"private\" data to user code (TODO: Drop _data, _removeData)\n//\t5. Avoid exposing implementation details on user objects (eg. expando properties)\n//\t6. Provide a clear path for implementation upgrade to WeakMap in 2014\n\nvar rbrace = /^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,\n\trmultiDash = /[A-Z]/g;\n\nfunction getData( data ) {\n\tif ( data === \"true\" ) {\n\t\treturn true;\n\t}\n\n\tif ( data === \"false\" ) {\n\t\treturn false;\n\t}\n\n\tif ( data === \"null\" ) {\n\t\treturn null;\n\t}\n\n\t// Only convert to a number if it doesn't change the string\n\tif ( data === +data + \"\" ) {\n\t\treturn +data;\n\t}\n\n\tif ( rbrace.test( data ) ) {\n\t\treturn JSON.parse( data );\n\t}\n\n\treturn data;\n}\n\nfunction dataAttr( elem, key, data ) {\n\tvar name;\n\n\t// If nothing was found internally, try to fetch any\n\t// data from the HTML5 data-* attribute\n\tif ( data === undefined && elem.nodeType === 1 ) {\n\t\tname = \"data-\" + key.replace( rmultiDash, \"-$&\" ).toLowerCase();\n\t\tdata = elem.getAttribute( name );\n\n\t\tif ( typeof data === \"string\" ) {\n\t\t\ttry {\n\t\t\t\tdata = getData( data );\n\t\t\t} catch ( e ) {}\n\n\t\t\t// Make sure we set the data so it isn't changed later\n\t\t\tdataUser.set( elem, key, data );\n\t\t} else {\n\t\t\tdata = undefined;\n\t\t}\n\t}\n\treturn data;\n}\n\njQuery.extend( {\n\thasData: function( elem ) {\n\t\treturn dataUser.hasData( elem ) || dataPriv.hasData( elem );\n\t},\n\n\tdata: function( elem, name, data ) {\n\t\treturn dataUser.access( elem, name, data );\n\t},\n\n\tremoveData: function( elem, name ) {\n\t\tdataUser.remove( elem, name );\n\t},\n\n\t// TODO: Now that all calls to _data and _removeData have been replaced\n\t// with direct calls to dataPriv methods, these can be deprecated.\n\t_data: function( elem, name, data ) {\n\t\treturn dataPriv.access( elem, name, data );\n\t},\n\n\t_removeData: function( elem, name ) {\n\t\tdataPriv.remove( elem, name );\n\t}\n} );\n\njQuery.fn.extend( {\n\tdata: function( key, value ) {\n\t\tvar i, name, data,\n\t\t\telem = this[ 0 ],\n\t\t\tattrs = elem && elem.attributes;\n\n\t\t// Gets all values\n\t\tif ( key === undefined ) {\n\t\t\tif ( this.length ) {\n\t\t\t\tdata = dataUser.get( elem );\n\n\t\t\t\tif ( elem.nodeType === 1 && !dataPriv.get( elem, \"hasDataAttrs\" ) ) {\n\t\t\t\t\ti = attrs.length;\n\t\t\t\t\twhile ( i-- ) {\n\n\t\t\t\t\t\t// Support: IE 11 only\n\t\t\t\t\t\t// The attrs elements can be null (#14894)\n\t\t\t\t\t\tif ( attrs[ i ] ) {\n\t\t\t\t\t\t\tname = attrs[ i ].name;\n\t\t\t\t\t\t\tif ( name.indexOf( \"data-\" ) === 0 ) {\n\t\t\t\t\t\t\t\tname = camelCase( name.slice( 5 ) );\n\t\t\t\t\t\t\t\tdataAttr( elem, name, data[ name ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tdataPriv.set( elem, \"hasDataAttrs\", true );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn data;\n\t\t}\n\n\t\t// Sets multiple values\n\t\tif ( typeof key === \"object\" ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tdataUser.set( this, key );\n\t\t\t} );\n\t\t}\n\n\t\treturn access( this, function( value ) {\n\t\t\tvar data;\n\n\t\t\t// The calling jQuery object (element matches) is not empty\n\t\t\t// (and therefore has an element appears at this[ 0 ]) and the\n\t\t\t// `value` parameter was not undefined. An empty jQuery object\n\t\t\t// will result in `undefined` for elem = this[ 0 ] which will\n\t\t\t// throw an exception if an attempt to read a data cache is made.\n\t\t\tif ( elem && value === undefined ) {\n\n\t\t\t\t// Attempt to get data from the cache\n\t\t\t\t// The key will always be camelCased in Data\n\t\t\t\tdata = dataUser.get( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// Attempt to \"discover\" the data in\n\t\t\t\t// HTML5 custom data-* attrs\n\t\t\t\tdata = dataAttr( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// We tried really hard, but the data doesn't exist.\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Set the data...\n\t\t\tthis.each( function() {\n\n\t\t\t\t// We always store the camelCased key\n\t\t\t\tdataUser.set( this, key, value );\n\t\t\t} );\n\t\t}, null, value, arguments.length > 1, null, true );\n\t},\n\n\tremoveData: function( key ) {\n\t\treturn this.each( function() {\n\t\t\tdataUser.remove( this, key );\n\t\t} );\n\t}\n} );\n\n\njQuery.extend( {\n\tqueue: function( elem, type, data ) {\n\t\tvar queue;\n\n\t\tif ( elem ) {\n\t\t\ttype = ( type || \"fx\" ) + \"queue\";\n\t\t\tqueue = dataPriv.get( elem, type );\n\n\t\t\t// Speed up dequeue by getting out quickly if this is just a lookup\n\t\t\tif ( data ) {\n\t\t\t\tif ( !queue || Array.isArray( data ) ) {\n\t\t\t\t\tqueue = dataPriv.access( elem, type, jQuery.makeArray( data ) );\n\t\t\t\t} else {\n\t\t\t\t\tqueue.push( data );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn queue || [];\n\t\t}\n\t},\n\n\tdequeue: function( elem, type ) {\n\t\ttype = type || \"fx\";\n\n\t\tvar queue = jQuery.queue( elem, type ),\n\t\t\tstartLength = queue.length,\n\t\t\tfn = queue.shift(),\n\t\t\thooks = jQuery._queueHooks( elem, type ),\n\t\t\tnext = function() {\n\t\t\t\tjQuery.dequeue( elem, type );\n\t\t\t};\n\n\t\t// If the fx queue is dequeued, always remove the progress sentinel\n\t\tif ( fn === \"inprogress\" ) {\n\t\t\tfn = queue.shift();\n\t\t\tstartLength--;\n\t\t}\n\n\t\tif ( fn ) {\n\n\t\t\t// Add a progress sentinel to prevent the fx queue from being\n\t\t\t// automatically dequeued\n\t\t\tif ( type === \"fx\" ) {\n\t\t\t\tqueue.unshift( \"inprogress\" );\n\t\t\t}\n\n\t\t\t// Clear up the last queue stop function\n\t\t\tdelete hooks.stop;\n\t\t\tfn.call( elem, next, hooks );\n\t\t}\n\n\t\tif ( !startLength && hooks ) {\n\t\t\thooks.empty.fire();\n\t\t}\n\t},\n\n\t// Not public - generate a queueHooks object, or return the current one\n\t_queueHooks: function( elem, type ) {\n\t\tvar key = type + \"queueHooks\";\n\t\treturn dataPriv.get( elem, key ) || dataPriv.access( elem, key, {\n\t\t\tempty: jQuery.Callbacks( \"once memory\" ).add( function() {\n\t\t\t\tdataPriv.remove( elem, [ type + \"queue\", key ] );\n\t\t\t} )\n\t\t} );\n\t}\n} );\n\njQuery.fn.extend( {\n\tqueue: function( type, data ) {\n\t\tvar setter = 2;\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tdata = type;\n\t\t\ttype = \"fx\";\n\t\t\tsetter--;\n\t\t}\n\n\t\tif ( arguments.length < setter ) {\n\t\t\treturn jQuery.queue( this[ 0 ], type );\n\t\t}\n\n\t\treturn data === undefined ?\n\t\t\tthis :\n\t\t\tthis.each( function() {\n\t\t\t\tvar queue = jQuery.queue( this, type, data );\n\n\t\t\t\t// Ensure a hooks for this queue\n\t\t\t\tjQuery._queueHooks( this, type );\n\n\t\t\t\tif ( type === \"fx\" && queue[ 0 ] !== \"inprogress\" ) {\n\t\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t\t}\n\t\t\t} );\n\t},\n\tdequeue: function( type ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.dequeue( this, type );\n\t\t} );\n\t},\n\tclearQueue: function( type ) {\n\t\treturn this.queue( type || \"fx\", [] );\n\t},\n\n\t// Get a promise resolved when queues of a certain type\n\t// are emptied (fx is the type by default)\n\tpromise: function( type, obj ) {\n\t\tvar tmp,\n\t\t\tcount = 1,\n\t\t\tdefer = jQuery.Deferred(),\n\t\t\telements = this,\n\t\t\ti = this.length,\n\t\t\tresolve = function() {\n\t\t\t\tif ( !( --count ) ) {\n\t\t\t\t\tdefer.resolveWith( elements, [ elements ] );\n\t\t\t\t}\n\t\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tobj = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\ttype = type || \"fx\";\n\n\t\twhile ( i-- ) {\n\t\t\ttmp = dataPriv.get( elements[ i ], type + \"queueHooks\" );\n\t\t\tif ( tmp && tmp.empty ) {\n\t\t\t\tcount++;\n\t\t\t\ttmp.empty.add( resolve );\n\t\t\t}\n\t\t}\n\t\tresolve();\n\t\treturn defer.promise( obj );\n\t}\n} );\nvar pnum = ( /[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/ ).source;\n\nvar rcssNum = new RegExp( \"^(?:([+-])=|)(\" + pnum + \")([a-z%]*)$\", \"i\" );\n\n\nvar cssExpand = [ \"Top\", \"Right\", \"Bottom\", \"Left\" ];\n\nvar isHiddenWithinTree = function( elem, el ) {\n\n\t\t// isHiddenWithinTree might be called from jQuery#filter function;\n\t\t// in that case, element will be second argument\n\t\telem = el || elem;\n\n\t\t// Inline style trumps all\n\t\treturn elem.style.display === \"none\" ||\n\t\t\telem.style.display === \"\" &&\n\n\t\t\t// Otherwise, check computed style\n\t\t\t// Support: Firefox <=43 - 45\n\t\t\t// Disconnected elements can have computed display: none, so first confirm that elem is\n\t\t\t// in the document.\n\t\t\tjQuery.contains( elem.ownerDocument, elem ) &&\n\n\t\t\tjQuery.css( elem, \"display\" ) === \"none\";\n\t};\n\nvar swap = function( elem, options, callback, args ) {\n\tvar ret, name,\n\t\told = {};\n\n\t// Remember the old values, and insert the new ones\n\tfor ( name in options ) {\n\t\told[ name ] = elem.style[ name ];\n\t\telem.style[ name ] = options[ name ];\n\t}\n\n\tret = callback.apply( elem, args || [] );\n\n\t// Revert the old values\n\tfor ( name in options ) {\n\t\telem.style[ name ] = old[ name ];\n\t}\n\n\treturn ret;\n};\n\n\n\n\nfunction adjustCSS( elem, prop, valueParts, tween ) {\n\tvar adjusted, scale,\n\t\tmaxIterations = 20,\n\t\tcurrentValue = tween ?\n\t\t\tfunction() {\n\t\t\t\treturn tween.cur();\n\t\t\t} :\n\t\t\tfunction() {\n\t\t\t\treturn jQuery.css( elem, prop, \"\" );\n\t\t\t},\n\t\tinitial = currentValue(),\n\t\tunit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" ),\n\n\t\t// Starting value computation is required for potential unit mismatches\n\t\tinitialInUnit = ( jQuery.cssNumber[ prop ] || unit !== \"px\" && +initial ) &&\n\t\t\trcssNum.exec( jQuery.css( elem, prop ) );\n\n\tif ( initialInUnit && initialInUnit[ 3 ] !== unit ) {\n\n\t\t// Support: Firefox <=54\n\t\t// Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144)\n\t\tinitial = initial / 2;\n\n\t\t// Trust units reported by jQuery.css\n\t\tunit = unit || initialInUnit[ 3 ];\n\n\t\t// Iteratively approximate from a nonzero starting point\n\t\tinitialInUnit = +initial || 1;\n\n\t\twhile ( maxIterations-- ) {\n\n\t\t\t// Evaluate and update our best guess (doubling guesses that zero out).\n\t\t\t// Finish if the scale equals or crosses 1 (making the old*new product non-positive).\n\t\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\t\t\tif ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) {\n\t\t\t\tmaxIterations = 0;\n\t\t\t}\n\t\t\tinitialInUnit = initialInUnit / scale;\n\n\t\t}\n\n\t\tinitialInUnit = initialInUnit * 2;\n\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\n\t\t// Make sure we update the tween properties later on\n\t\tvalueParts = valueParts || [];\n\t}\n\n\tif ( valueParts ) {\n\t\tinitialInUnit = +initialInUnit || +initial || 0;\n\n\t\t// Apply relative offset (+=/-=) if specified\n\t\tadjusted = valueParts[ 1 ] ?\n\t\t\tinitialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :\n\t\t\t+valueParts[ 2 ];\n\t\tif ( tween ) {\n\t\t\ttween.unit = unit;\n\t\t\ttween.start = initialInUnit;\n\t\t\ttween.end = adjusted;\n\t\t}\n\t}\n\treturn adjusted;\n}\n\n\nvar defaultDisplayMap = {};\n\nfunction getDefaultDisplay( elem ) {\n\tvar temp,\n\t\tdoc = elem.ownerDocument,\n\t\tnodeName = elem.nodeName,\n\t\tdisplay = defaultDisplayMap[ nodeName ];\n\n\tif ( display ) {\n\t\treturn display;\n\t}\n\n\ttemp = doc.body.appendChild( doc.createElement( nodeName ) );\n\tdisplay = jQuery.css( temp, \"display\" );\n\n\ttemp.parentNode.removeChild( temp );\n\n\tif ( display === \"none\" ) {\n\t\tdisplay = \"block\";\n\t}\n\tdefaultDisplayMap[ nodeName ] = display;\n\n\treturn display;\n}\n\nfunction showHide( elements, show ) {\n\tvar display, elem,\n\t\tvalues = [],\n\t\tindex = 0,\n\t\tlength = elements.length;\n\n\t// Determine new display value for elements that need to change\n\tfor ( ; index < length; index++ ) {\n\t\telem = elements[ index ];\n\t\tif ( !elem.style ) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tdisplay = elem.style.display;\n\t\tif ( show ) {\n\n\t\t\t// Since we force visibility upon cascade-hidden elements, an immediate (and slow)\n\t\t\t// check is required in this first loop unless we have a nonempty display value (either\n\t\t\t// inline or about-to-be-restored)\n\t\t\tif ( display === \"none\" ) {\n\t\t\t\tvalues[ index ] = dataPriv.get( elem, \"display\" ) || null;\n\t\t\t\tif ( !values[ index ] ) {\n\t\t\t\t\telem.style.display = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( elem.style.display === \"\" && isHiddenWithinTree( elem ) ) {\n\t\t\t\tvalues[ index ] = getDefaultDisplay( elem );\n\t\t\t}\n\t\t} else {\n\t\t\tif ( display !== \"none\" ) {\n\t\t\t\tvalues[ index ] = \"none\";\n\n\t\t\t\t// Remember what we're overwriting\n\t\t\t\tdataPriv.set( elem, \"display\", display );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Set the display of the elements in a second loop to avoid constant reflow\n\tfor ( index = 0; index < length; index++ ) {\n\t\tif ( values[ index ] != null ) {\n\t\t\telements[ index ].style.display = values[ index ];\n\t\t}\n\t}\n\n\treturn elements;\n}\n\njQuery.fn.extend( {\n\tshow: function() {\n\t\treturn showHide( this, true );\n\t},\n\thide: function() {\n\t\treturn showHide( this );\n\t},\n\ttoggle: function( state ) {\n\t\tif ( typeof state === \"boolean\" ) {\n\t\t\treturn state ? this.show() : this.hide();\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tif ( isHiddenWithinTree( this ) ) {\n\t\t\t\tjQuery( this ).show();\n\t\t\t} else {\n\t\t\t\tjQuery( this ).hide();\n\t\t\t}\n\t\t} );\n\t}\n} );\nvar rcheckableType = ( /^(?:checkbox|radio)$/i );\n\nvar rtagName = ( /<([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]+)/i );\n\nvar rscriptType = ( /^$|^module$|\\/(?:java|ecma)script/i );\n\n\n\n// We have to close these tags to support XHTML (#13200)\nvar wrapMap = {\n\n\t// Support: IE <=9 only\n\toption: [ 1, \"<select multiple='multiple'>\", \"</select>\" ],\n\n\t// XHTML parsers do not magically insert elements in the\n\t// same way that tag soup parsers do. So we cannot shorten\n\t// this by omitting <tbody> or other required elements.\n\tthead: [ 1, \"<table>\", \"</table>\" ],\n\tcol: [ 2, \"<table><colgroup>\", \"</colgroup></table>\" ],\n\ttr: [ 2, \"<table><tbody>\", \"</tbody></table>\" ],\n\ttd: [ 3, \"<table><tbody><tr>\", \"</tr></tbody></table>\" ],\n\n\t_default: [ 0, \"\", \"\" ]\n};\n\n// Support: IE <=9 only\nwrapMap.optgroup = wrapMap.option;\n\nwrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\nwrapMap.th = wrapMap.td;\n\n\nfunction getAll( context, tag ) {\n\n\t// Support: IE <=9 - 11 only\n\t// Use typeof to avoid zero-argument method invocation on host objects (#15151)\n\tvar ret;\n\n\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\tret = context.getElementsByTagName( tag || \"*\" );\n\n\t} else if ( typeof context.querySelectorAll !== \"undefined\" ) {\n\t\tret = context.querySelectorAll( tag || \"*\" );\n\n\t} else {\n\t\tret = [];\n\t}\n\n\tif ( tag === undefined || tag && nodeName( context, tag ) ) {\n\t\treturn jQuery.merge( [ context ], ret );\n\t}\n\n\treturn ret;\n}\n\n\n// Mark scripts as having already been evaluated\nfunction setGlobalEval( elems, refElements ) {\n\tvar i = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\tdataPriv.set(\n\t\t\telems[ i ],\n\t\t\t\"globalEval\",\n\t\t\t!refElements || dataPriv.get( refElements[ i ], \"globalEval\" )\n\t\t);\n\t}\n}\n\n\nvar rhtml = /<|&#?\\w+;/;\n\nfunction buildFragment( elems, context, scripts, selection, ignored ) {\n\tvar elem, tmp, tag, wrap, contains, j,\n\t\tfragment = context.createDocumentFragment(),\n\t\tnodes = [],\n\t\ti = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\telem = elems[ i ];\n\n\t\tif ( elem || elem === 0 ) {\n\n\t\t\t// Add nodes directly\n\t\t\tif ( toType( elem ) === \"object\" ) {\n\n\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tjQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );\n\n\t\t\t// Convert non-html into a text node\n\t\t\t} else if ( !rhtml.test( elem ) ) {\n\t\t\t\tnodes.push( context.createTextNode( elem ) );\n\n\t\t\t// Convert html into DOM nodes\n\t\t\t} else {\n\t\t\t\ttmp = tmp || fragment.appendChild( context.createElement( \"div\" ) );\n\n\t\t\t\t// Deserialize a standard representation\n\t\t\t\ttag = ( rtagName.exec( elem ) || [ \"\", \"\" ] )[ 1 ].toLowerCase();\n\t\t\t\twrap = wrapMap[ tag ] || wrapMap._default;\n\t\t\t\ttmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ];\n\n\t\t\t\t// Descend through wrappers to the right content\n\t\t\t\tj = wrap[ 0 ];\n\t\t\t\twhile ( j-- ) {\n\t\t\t\t\ttmp = tmp.lastChild;\n\t\t\t\t}\n\n\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tjQuery.merge( nodes, tmp.childNodes );\n\n\t\t\t\t// Remember the top-level container\n\t\t\t\ttmp = fragment.firstChild;\n\n\t\t\t\t// Ensure the created nodes are orphaned (#12392)\n\t\t\t\ttmp.textContent = \"\";\n\t\t\t}\n\t\t}\n\t}\n\n\t// Remove wrapper from fragment\n\tfragment.textContent = \"\";\n\n\ti = 0;\n\twhile ( ( elem = nodes[ i++ ] ) ) {\n\n\t\t// Skip elements already in the context collection (trac-4087)\n\t\tif ( selection && jQuery.inArray( elem, selection ) > -1 ) {\n\t\t\tif ( ignored ) {\n\t\t\t\tignored.push( elem );\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tcontains = jQuery.contains( elem.ownerDocument, elem );\n\n\t\t// Append to fragment\n\t\ttmp = getAll( fragment.appendChild( elem ), \"script\" );\n\n\t\t// Preserve script evaluation history\n\t\tif ( contains ) {\n\t\t\tsetGlobalEval( tmp );\n\t\t}\n\n\t\t// Capture executables\n\t\tif ( scripts ) {\n\t\t\tj = 0;\n\t\t\twhile ( ( elem = tmp[ j++ ] ) ) {\n\t\t\t\tif ( rscriptType.test( elem.type || \"\" ) ) {\n\t\t\t\t\tscripts.push( elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn fragment;\n}\n\n\n( function() {\n\tvar fragment = document.createDocumentFragment(),\n\t\tdiv = fragment.appendChild( document.createElement( \"div\" ) ),\n\t\tinput = document.createElement( \"input\" );\n\n\t// Support: Android 4.0 - 4.3 only\n\t// Check state lost if the name is set (#11217)\n\t// Support: Windows Web Apps (WWA)\n\t// `name` and `type` must use .setAttribute for WWA (#14901)\n\tinput.setAttribute( \"type\", \"radio\" );\n\tinput.setAttribute( \"checked\", \"checked\" );\n\tinput.setAttribute( \"name\", \"t\" );\n\n\tdiv.appendChild( input );\n\n\t// Support: Android <=4.1 only\n\t// Older WebKit doesn't clone checked state correctly in fragments\n\tsupport.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;\n\n\t// Support: IE <=11 only\n\t// Make sure textarea (and checkbox) defaultValue is properly cloned\n\tdiv.innerHTML = \"<textarea>x</textarea>\";\n\tsupport.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;\n} )();\nvar documentElement = document.documentElement;\n\n\n\nvar\n\trkeyEvent = /^key/,\n\trmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/,\n\trtypenamespace = /^([^.]*)(?:\\.(.+)|)/;\n\nfunction returnTrue() {\n\treturn true;\n}\n\nfunction returnFalse() {\n\treturn false;\n}\n\n// Support: IE <=9 only\n// See #13393 for more info\nfunction safeActiveElement() {\n\ttry {\n\t\treturn document.activeElement;\n\t} catch ( err ) { }\n}\n\nfunction on( elem, types, selector, data, fn, one ) {\n\tvar origFn, type;\n\n\t// Types can be a map of types/handlers\n\tif ( typeof types === \"object\" ) {\n\n\t\t// ( types-Object, selector, data )\n\t\tif ( typeof selector !== \"string\" ) {\n\n\t\t\t// ( types-Object, data )\n\t\t\tdata = data || selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tfor ( type in types ) {\n\t\t\ton( elem, type, selector, data, types[ type ], one );\n\t\t}\n\t\treturn elem;\n\t}\n\n\tif ( data == null && fn == null ) {\n\n\t\t// ( types, fn )\n\t\tfn = selector;\n\t\tdata = selector = undefined;\n\t} else if ( fn == null ) {\n\t\tif ( typeof selector === \"string\" ) {\n\n\t\t\t// ( types, selector, fn )\n\t\t\tfn = data;\n\t\t\tdata = undefined;\n\t\t} else {\n\n\t\t\t// ( types, data, fn )\n\t\t\tfn = data;\n\t\t\tdata = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t}\n\tif ( fn === false ) {\n\t\tfn = returnFalse;\n\t} else if ( !fn ) {\n\t\treturn elem;\n\t}\n\n\tif ( one === 1 ) {\n\t\torigFn = fn;\n\t\tfn = function( event ) {\n\n\t\t\t// Can use an empty set, since event contains the info\n\t\t\tjQuery().off( event );\n\t\t\treturn origFn.apply( this, arguments );\n\t\t};\n\n\t\t// Use same guid so caller can remove using origFn\n\t\tfn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );\n\t}\n\treturn elem.each( function() {\n\t\tjQuery.event.add( this, types, fn, data, selector );\n\t} );\n}\n\n/*\n * Helper functions for managing events -- not part of the public interface.\n * Props to Dean Edwards' addEvent library for many of the ideas.\n */\njQuery.event = {\n\n\tglobal: {},\n\n\tadd: function( elem, types, handler, data, selector ) {\n\n\t\tvar handleObjIn, eventHandle, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.get( elem );\n\n\t\t// Don't attach events to noData or text/comment nodes (but allow plain objects)\n\t\tif ( !elemData ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Caller can pass in an object of custom data in lieu of the handler\n\t\tif ( handler.handler ) {\n\t\t\thandleObjIn = handler;\n\t\t\thandler = handleObjIn.handler;\n\t\t\tselector = handleObjIn.selector;\n\t\t}\n\n\t\t// Ensure that invalid selectors throw exceptions at attach time\n\t\t// Evaluate against documentElement in case elem is a non-element node (e.g., document)\n\t\tif ( selector ) {\n\t\t\tjQuery.find.matchesSelector( documentElement, selector );\n\t\t}\n\n\t\t// Make sure that the handler has a unique ID, used to find/remove it later\n\t\tif ( !handler.guid ) {\n\t\t\thandler.guid = jQuery.guid++;\n\t\t}\n\n\t\t// Init the element's event structure and main handler, if this is the first\n\t\tif ( !( events = elemData.events ) ) {\n\t\t\tevents = elemData.events = {};\n\t\t}\n\t\tif ( !( eventHandle = elemData.handle ) ) {\n\t\t\teventHandle = elemData.handle = function( e ) {\n\n\t\t\t\t// Discard the second event of a jQuery.event.trigger() and\n\t\t\t\t// when an event is called after a page has unloaded\n\t\t\t\treturn typeof jQuery !== \"undefined\" && jQuery.event.triggered !== e.type ?\n\t\t\t\t\tjQuery.event.dispatch.apply( elem, arguments ) : undefined;\n\t\t\t};\n\t\t}\n\n\t\t// Handle multiple events separated by a space\n\t\ttypes = ( types || \"\" ).match( rnothtmlwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// There *must* be a type, no attaching namespace-only handlers\n\t\t\tif ( !type ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// If event changes its type, use the special event handlers for the changed type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// If selector defined, determine special event api type, otherwise given type\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\n\t\t\t// Update special based on newly reset type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// handleObj is passed to all event handlers\n\t\t\thandleObj = jQuery.extend( {\n\t\t\t\ttype: type,\n\t\t\t\torigType: origType,\n\t\t\t\tdata: data,\n\t\t\t\thandler: handler,\n\t\t\t\tguid: handler.guid,\n\t\t\t\tselector: selector,\n\t\t\t\tneedsContext: selector && jQuery.expr.match.needsContext.test( selector ),\n\t\t\t\tnamespace: namespaces.join( \".\" )\n\t\t\t}, handleObjIn );\n\n\t\t\t// Init the event handler queue if we're the first\n\t\t\tif ( !( handlers = events[ type ] ) ) {\n\t\t\t\thandlers = events[ type ] = [];\n\t\t\t\thandlers.delegateCount = 0;\n\n\t\t\t\t// Only use addEventListener if the special events handler returns false\n\t\t\t\tif ( !special.setup ||\n\t\t\t\t\tspecial.setup.call( elem, data, namespaces, eventHandle ) === false ) {\n\n\t\t\t\t\tif ( elem.addEventListener ) {\n\t\t\t\t\t\telem.addEventListener( type, eventHandle );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( special.add ) {\n\t\t\t\tspecial.add.call( elem, handleObj );\n\n\t\t\t\tif ( !handleObj.handler.guid ) {\n\t\t\t\t\thandleObj.handler.guid = handler.guid;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Add to the element's handler list, delegates in front\n\t\t\tif ( selector ) {\n\t\t\t\thandlers.splice( handlers.delegateCount++, 0, handleObj );\n\t\t\t} else {\n\t\t\t\thandlers.push( handleObj );\n\t\t\t}\n\n\t\t\t// Keep track of which events have ever been used, for event optimization\n\t\t\tjQuery.event.global[ type ] = true;\n\t\t}\n\n\t},\n\n\t// Detach an event or set of events from an element\n\tremove: function( elem, types, handler, selector, mappedTypes ) {\n\n\t\tvar j, origCount, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.hasData( elem ) && dataPriv.get( elem );\n\n\t\tif ( !elemData || !( events = elemData.events ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Once for each type.namespace in types; type may be omitted\n\t\ttypes = ( types || \"\" ).match( rnothtmlwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// Unbind all events (on this namespace, if provided) for the element\n\t\t\tif ( !type ) {\n\t\t\t\tfor ( type in events ) {\n\t\t\t\t\tjQuery.event.remove( elem, type + types[ t ], handler, selector, true );\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\t\t\thandlers = events[ type ] || [];\n\t\t\ttmp = tmp[ 2 ] &&\n\t\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" );\n\n\t\t\t// Remove matching events\n\t\t\torigCount = j = handlers.length;\n\t\t\twhile ( j-- ) {\n\t\t\t\thandleObj = handlers[ j ];\n\n\t\t\t\tif ( ( mappedTypes || origType === handleObj.origType ) &&\n\t\t\t\t\t( !handler || handler.guid === handleObj.guid ) &&\n\t\t\t\t\t( !tmp || tmp.test( handleObj.namespace ) ) &&\n\t\t\t\t\t( !selector || selector === handleObj.selector ||\n\t\t\t\t\t\tselector === \"**\" && handleObj.selector ) ) {\n\t\t\t\t\thandlers.splice( j, 1 );\n\n\t\t\t\t\tif ( handleObj.selector ) {\n\t\t\t\t\t\thandlers.delegateCount--;\n\t\t\t\t\t}\n\t\t\t\t\tif ( special.remove ) {\n\t\t\t\t\t\tspecial.remove.call( elem, handleObj );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove generic event handler if we removed something and no more handlers exist\n\t\t\t// (avoids potential for endless recursion during removal of special event handlers)\n\t\t\tif ( origCount && !handlers.length ) {\n\t\t\t\tif ( !special.teardown ||\n\t\t\t\t\tspecial.teardown.call( elem, namespaces, elemData.handle ) === false ) {\n\n\t\t\t\t\tjQuery.removeEvent( elem, type, elemData.handle );\n\t\t\t\t}\n\n\t\t\t\tdelete events[ type ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove data and the expando if it's no longer used\n\t\tif ( jQuery.isEmptyObject( events ) ) {\n\t\t\tdataPriv.remove( elem, \"handle events\" );\n\t\t}\n\t},\n\n\tdispatch: function( nativeEvent ) {\n\n\t\t// Make a writable jQuery.Event from the native event object\n\t\tvar event = jQuery.event.fix( nativeEvent );\n\n\t\tvar i, j, ret, matched, handleObj, handlerQueue,\n\t\t\targs = new Array( arguments.length ),\n\t\t\thandlers = ( dataPriv.get( this, \"events\" ) || {} )[ event.type ] || [],\n\t\t\tspecial = jQuery.event.special[ event.type ] || {};\n\n\t\t// Use the fix-ed jQuery.Event rather than the (read-only) native event\n\t\targs[ 0 ] = event;\n\n\t\tfor ( i = 1; i < arguments.length; i++ ) {\n\t\t\targs[ i ] = arguments[ i ];\n\t\t}\n\n\t\tevent.delegateTarget = this;\n\n\t\t// Call the preDispatch hook for the mapped type, and let it bail if desired\n\t\tif ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine handlers\n\t\thandlerQueue = jQuery.event.handlers.call( this, event, handlers );\n\n\t\t// Run delegates first; they may want to stop propagation beneath us\n\t\ti = 0;\n\t\twhile ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tevent.currentTarget = matched.elem;\n\n\t\t\tj = 0;\n\t\t\twhile ( ( handleObj = matched.handlers[ j++ ] ) &&\n\t\t\t\t!event.isImmediatePropagationStopped() ) {\n\n\t\t\t\t// Triggered event must either 1) have no namespace, or 2) have namespace(s)\n\t\t\t\t// a subset or equal to those in the bound event (both can have no namespace).\n\t\t\t\tif ( !event.rnamespace || event.rnamespace.test( handleObj.namespace ) ) {\n\n\t\t\t\t\tevent.handleObj = handleObj;\n\t\t\t\t\tevent.data = handleObj.data;\n\n\t\t\t\t\tret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle ||\n\t\t\t\t\t\thandleObj.handler ).apply( matched.elem, args );\n\n\t\t\t\t\tif ( ret !== undefined ) {\n\t\t\t\t\t\tif ( ( event.result = ret ) === false ) {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Call the postDispatch hook for the mapped type\n\t\tif ( special.postDispatch ) {\n\t\t\tspecial.postDispatch.call( this, event );\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\thandlers: function( event, handlers ) {\n\t\tvar i, handleObj, sel, matchedHandlers, matchedSelectors,\n\t\t\thandlerQueue = [],\n\t\t\tdelegateCount = handlers.delegateCount,\n\t\t\tcur = event.target;\n\n\t\t// Find delegate handlers\n\t\tif ( delegateCount &&\n\n\t\t\t// Support: IE <=9\n\t\t\t// Black-hole SVG <use> instance trees (trac-13180)\n\t\t\tcur.nodeType &&\n\n\t\t\t// Support: Firefox <=42\n\t\t\t// Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)\n\t\t\t// https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click\n\t\t\t// Support: IE 11 only\n\t\t\t// ...but not arrow key \"clicks\" of radio inputs, which can have `button` -1 (gh-2343)\n\t\t\t!( event.type === \"click\" && event.button >= 1 ) ) {\n\n\t\t\tfor ( ; cur !== this; cur = cur.parentNode || this ) {\n\n\t\t\t\t// Don't check non-elements (#13208)\n\t\t\t\t// Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)\n\t\t\t\tif ( cur.nodeType === 1 && !( event.type === \"click\" && cur.disabled === true ) ) {\n\t\t\t\t\tmatchedHandlers = [];\n\t\t\t\t\tmatchedSelectors = {};\n\t\t\t\t\tfor ( i = 0; i < delegateCount; i++ ) {\n\t\t\t\t\t\thandleObj = handlers[ i ];\n\n\t\t\t\t\t\t// Don't conflict with Object.prototype properties (#13203)\n\t\t\t\t\t\tsel = handleObj.selector + \" \";\n\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] === undefined ) {\n\t\t\t\t\t\t\tmatchedSelectors[ sel ] = handleObj.needsContext ?\n\t\t\t\t\t\t\t\tjQuery( sel, this ).index( cur ) > -1 :\n\t\t\t\t\t\t\t\tjQuery.find( sel, this, null, [ cur ] ).length;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] ) {\n\t\t\t\t\t\t\tmatchedHandlers.push( handleObj );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( matchedHandlers.length ) {\n\t\t\t\t\t\thandlerQueue.push( { elem: cur, handlers: matchedHandlers } );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Add the remaining (directly-bound) handlers\n\t\tcur = this;\n\t\tif ( delegateCount < handlers.length ) {\n\t\t\thandlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } );\n\t\t}\n\n\t\treturn handlerQueue;\n\t},\n\n\taddProp: function( name, hook ) {\n\t\tObject.defineProperty( jQuery.Event.prototype, name, {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: true,\n\n\t\t\tget: isFunction( hook ) ?\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\t\treturn hook( this.originalEvent );\n\t\t\t\t\t}\n\t\t\t\t} :\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\t\treturn this.originalEvent[ name ];\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\tset: function( value ) {\n\t\t\t\tObject.defineProperty( this, name, {\n\t\t\t\t\tenumerable: true,\n\t\t\t\t\tconfigurable: true,\n\t\t\t\t\twritable: true,\n\t\t\t\t\tvalue: value\n\t\t\t\t} );\n\t\t\t}\n\t\t} );\n\t},\n\n\tfix: function( originalEvent ) {\n\t\treturn originalEvent[ jQuery.expando ] ?\n\t\t\toriginalEvent :\n\t\t\tnew jQuery.Event( originalEvent );\n\t},\n\n\tspecial: {\n\t\tload: {\n\n\t\t\t// Prevent triggered image.load events from bubbling to window.load\n\t\t\tnoBubble: true\n\t\t},\n\t\tfocus: {\n\n\t\t\t// Fire native event if possible so blur/focus sequence is correct\n\t\t\ttrigger: function() {\n\t\t\t\tif ( this !== safeActiveElement() && this.focus ) {\n\t\t\t\t\tthis.focus();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdelegateType: \"focusin\"\n\t\t},\n\t\tblur: {\n\t\t\ttrigger: function() {\n\t\t\t\tif ( this === safeActiveElement() && this.blur ) {\n\t\t\t\t\tthis.blur();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdelegateType: \"focusout\"\n\t\t},\n\t\tclick: {\n\n\t\t\t// For checkbox, fire native event so checked state will be right\n\t\t\ttrigger: function() {\n\t\t\t\tif ( this.type === \"checkbox\" && this.click && nodeName( this, \"input\" ) ) {\n\t\t\t\t\tthis.click();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// For cross-browser consistency, don't fire native .click() on links\n\t\t\t_default: function( event ) {\n\t\t\t\treturn nodeName( event.target, \"a\" );\n\t\t\t}\n\t\t},\n\n\t\tbeforeunload: {\n\t\t\tpostDispatch: function( event ) {\n\n\t\t\t\t// Support: Firefox 20+\n\t\t\t\t// Firefox doesn't alert if the returnValue field is not set.\n\t\t\t\tif ( event.result !== undefined && event.originalEvent ) {\n\t\t\t\t\tevent.originalEvent.returnValue = event.result;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n};\n\njQuery.removeEvent = function( elem, type, handle ) {\n\n\t// This \"if\" is needed for plain objects\n\tif ( elem.removeEventListener ) {\n\t\telem.removeEventListener( type, handle );\n\t}\n};\n\njQuery.Event = function( src, props ) {\n\n\t// Allow instantiation without the 'new' keyword\n\tif ( !( this instanceof jQuery.Event ) ) {\n\t\treturn new jQuery.Event( src, props );\n\t}\n\n\t// Event object\n\tif ( src && src.type ) {\n\t\tthis.originalEvent = src;\n\t\tthis.type = src.type;\n\n\t\t// Events bubbling up the document may have been marked as prevented\n\t\t// by a handler lower down the tree; reflect the correct value.\n\t\tthis.isDefaultPrevented = src.defaultPrevented ||\n\t\t\t\tsrc.defaultPrevented === undefined &&\n\n\t\t\t\t// Support: Android <=2.3 only\n\t\t\t\tsrc.returnValue === false ?\n\t\t\treturnTrue :\n\t\t\treturnFalse;\n\n\t\t// Create target properties\n\t\t// Support: Safari <=6 - 7 only\n\t\t// Target should not be a text node (#504, #13143)\n\t\tthis.target = ( src.target && src.target.nodeType === 3 ) ?\n\t\t\tsrc.target.parentNode :\n\t\t\tsrc.target;\n\n\t\tthis.currentTarget = src.currentTarget;\n\t\tthis.relatedTarget = src.relatedTarget;\n\n\t// Event type\n\t} else {\n\t\tthis.type = src;\n\t}\n\n\t// Put explicitly provided properties onto the event object\n\tif ( props ) {\n\t\tjQuery.extend( this, props );\n\t}\n\n\t// Create a timestamp if incoming event doesn't have one\n\tthis.timeStamp = src && src.timeStamp || Date.now();\n\n\t// Mark it as fixed\n\tthis[ jQuery.expando ] = true;\n};\n\n// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding\n// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html\njQuery.Event.prototype = {\n\tconstructor: jQuery.Event,\n\tisDefaultPrevented: returnFalse,\n\tisPropagationStopped: returnFalse,\n\tisImmediatePropagationStopped: returnFalse,\n\tisSimulated: false,\n\n\tpreventDefault: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isDefaultPrevented = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.preventDefault();\n\t\t}\n\t},\n\tstopPropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isPropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopPropagation();\n\t\t}\n\t},\n\tstopImmediatePropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isImmediatePropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopImmediatePropagation();\n\t\t}\n\n\t\tthis.stopPropagation();\n\t}\n};\n\n// Includes all common event props including KeyEvent and MouseEvent specific props\njQuery.each( {\n\taltKey: true,\n\tbubbles: true,\n\tcancelable: true,\n\tchangedTouches: true,\n\tctrlKey: true,\n\tdetail: true,\n\teventPhase: true,\n\tmetaKey: true,\n\tpageX: true,\n\tpageY: true,\n\tshiftKey: true,\n\tview: true,\n\t\"char\": true,\n\tcharCode: true,\n\tkey: true,\n\tkeyCode: true,\n\tbutton: true,\n\tbuttons: true,\n\tclientX: true,\n\tclientY: true,\n\toffsetX: true,\n\toffsetY: true,\n\tpointerId: true,\n\tpointerType: true,\n\tscreenX: true,\n\tscreenY: true,\n\ttargetTouches: true,\n\ttoElement: true,\n\ttouches: true,\n\n\twhich: function( event ) {\n\t\tvar button = event.button;\n\n\t\t// Add which for key events\n\t\tif ( event.which == null && rkeyEvent.test( event.type ) ) {\n\t\t\treturn event.charCode != null ? event.charCode : event.keyCode;\n\t\t}\n\n\t\t// Add which for click: 1 === left; 2 === middle; 3 === right\n\t\tif ( !event.which && button !== undefined && rmouseEvent.test( event.type ) ) {\n\t\t\tif ( button & 1 ) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\tif ( button & 2 ) {\n\t\t\t\treturn 3;\n\t\t\t}\n\n\t\t\tif ( button & 4 ) {\n\t\t\t\treturn 2;\n\t\t\t}\n\n\t\t\treturn 0;\n\t\t}\n\n\t\treturn event.which;\n\t}\n}, jQuery.event.addProp );\n\n// Create mouseenter/leave events using mouseover/out and event-time checks\n// so that event delegation works in jQuery.\n// Do the same for pointerenter/pointerleave and pointerover/pointerout\n//\n// Support: Safari 7 only\n// Safari sends mouseenter too often; see:\n// https://bugs.chromium.org/p/chromium/issues/detail?id=470258\n// for the description of the bug (it existed in older Chrome versions as well).\njQuery.each( {\n\tmouseenter: \"mouseover\",\n\tmouseleave: \"mouseout\",\n\tpointerenter: \"pointerover\",\n\tpointerleave: \"pointerout\"\n}, function( orig, fix ) {\n\tjQuery.event.special[ orig ] = {\n\t\tdelegateType: fix,\n\t\tbindType: fix,\n\n\t\thandle: function( event ) {\n\t\t\tvar ret,\n\t\t\t\ttarget = this,\n\t\t\t\trelated = event.relatedTarget,\n\t\t\t\thandleObj = event.handleObj;\n\n\t\t\t// For mouseenter/leave call the handler if related is outside the target.\n\t\t\t// NB: No relatedTarget if the mouse left/entered the browser window\n\t\t\tif ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) {\n\t\t\t\tevent.type = handleObj.origType;\n\t\t\t\tret = handleObj.handler.apply( this, arguments );\n\t\t\t\tevent.type = fix;\n\t\t\t}\n\t\t\treturn ret;\n\t\t}\n\t};\n} );\n\njQuery.fn.extend( {\n\n\ton: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn );\n\t},\n\tone: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn, 1 );\n\t},\n\toff: function( types, selector, fn ) {\n\t\tvar handleObj, type;\n\t\tif ( types && types.preventDefault && types.handleObj ) {\n\n\t\t\t// ( event ) dispatched jQuery.Event\n\t\t\thandleObj = types.handleObj;\n\t\t\tjQuery( types.delegateTarget ).off(\n\t\t\t\thandleObj.namespace ?\n\t\t\t\t\thandleObj.origType + \".\" + handleObj.namespace :\n\t\t\t\t\thandleObj.origType,\n\t\t\t\thandleObj.selector,\n\t\t\t\thandleObj.handler\n\t\t\t);\n\t\t\treturn this;\n\t\t}\n\t\tif ( typeof types === \"object\" ) {\n\n\t\t\t// ( types-object [, selector] )\n\t\t\tfor ( type in types ) {\n\t\t\t\tthis.off( type, selector, types[ type ] );\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\tif ( selector === false || typeof selector === \"function\" ) {\n\n\t\t\t// ( types [, fn] )\n\t\t\tfn = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tif ( fn === false ) {\n\t\t\tfn = returnFalse;\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.remove( this, types, fn, selector );\n\t\t} );\n\t}\n} );\n\n\nvar\n\n\t/* eslint-disable max-len */\n\n\t// See https://github.com/eslint/eslint/issues/3229\n\trxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)[^>]*)\\/>/gi,\n\n\t/* eslint-enable */\n\n\t// Support: IE <=10 - 11, Edge 12 - 13 only\n\t// In IE/Edge using regex groups here causes severe slowdowns.\n\t// See https://connect.microsoft.com/IE/feedback/details/1736512/\n\trnoInnerhtml = /<script|<style|<link/i,\n\n\t// checked=\"checked\" or checked\n\trchecked = /checked\\s*(?:[^=]|=\\s*.checked.)/i,\n\trcleanScript = /^\\s*<!(?:\\[CDATA\\[|--)|(?:\\]\\]|--)>\\s*$/g;\n\n// Prefer a tbody over its parent table for containing new rows\nfunction manipulationTarget( elem, content ) {\n\tif ( nodeName( elem, \"table\" ) &&\n\t\tnodeName( content.nodeType !== 11 ? content : content.firstChild, \"tr\" ) ) {\n\n\t\treturn jQuery( elem ).children( \"tbody\" )[ 0 ] || elem;\n\t}\n\n\treturn elem;\n}\n\n// Replace/restore the type attribute of script elements for safe DOM manipulation\nfunction disableScript( elem ) {\n\telem.type = ( elem.getAttribute( \"type\" ) !== null ) + \"/\" + elem.type;\n\treturn elem;\n}\nfunction restoreScript( elem ) {\n\tif ( ( elem.type || \"\" ).slice( 0, 5 ) === \"true/\" ) {\n\t\telem.type = elem.type.slice( 5 );\n\t} else {\n\t\telem.removeAttribute( \"type\" );\n\t}\n\n\treturn elem;\n}\n\nfunction cloneCopyEvent( src, dest ) {\n\tvar i, l, type, pdataOld, pdataCur, udataOld, udataCur, events;\n\n\tif ( dest.nodeType !== 1 ) {\n\t\treturn;\n\t}\n\n\t// 1. Copy private data: events, handlers, etc.\n\tif ( dataPriv.hasData( src ) ) {\n\t\tpdataOld = dataPriv.access( src );\n\t\tpdataCur = dataPriv.set( dest, pdataOld );\n\t\tevents = pdataOld.events;\n\n\t\tif ( events ) {\n\t\t\tdelete pdataCur.handle;\n\t\t\tpdataCur.events = {};\n\n\t\t\tfor ( type in events ) {\n\t\t\t\tfor ( i = 0, l = events[ type ].length; i < l; i++ ) {\n\t\t\t\t\tjQuery.event.add( dest, type, events[ type ][ i ] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// 2. Copy user data\n\tif ( dataUser.hasData( src ) ) {\n\t\tudataOld = dataUser.access( src );\n\t\tudataCur = jQuery.extend( {}, udataOld );\n\n\t\tdataUser.set( dest, udataCur );\n\t}\n}\n\n// Fix IE bugs, see support tests\nfunction fixInput( src, dest ) {\n\tvar nodeName = dest.nodeName.toLowerCase();\n\n\t// Fails to persist the checked state of a cloned checkbox or radio button.\n\tif ( nodeName === \"input\" && rcheckableType.test( src.type ) ) {\n\t\tdest.checked = src.checked;\n\n\t// Fails to return the selected option to the default selected state when cloning options\n\t} else if ( nodeName === \"input\" || nodeName === \"textarea\" ) {\n\t\tdest.defaultValue = src.defaultValue;\n\t}\n}\n\nfunction domManip( collection, args, callback, ignored ) {\n\n\t// Flatten any nested arrays\n\targs = concat.apply( [], args );\n\n\tvar fragment, first, scripts, hasScripts, node, doc,\n\t\ti = 0,\n\t\tl = collection.length,\n\t\tiNoClone = l - 1,\n\t\tvalue = args[ 0 ],\n\t\tvalueIsFunction = isFunction( value );\n\n\t// We can't cloneNode fragments that contain checked, in WebKit\n\tif ( valueIsFunction ||\n\t\t\t( l > 1 && typeof value === \"string\" &&\n\t\t\t\t!support.checkClone && rchecked.test( value ) ) ) {\n\t\treturn collection.each( function( index ) {\n\t\t\tvar self = collection.eq( index );\n\t\t\tif ( valueIsFunction ) {\n\t\t\t\targs[ 0 ] = value.call( this, index, self.html() );\n\t\t\t}\n\t\t\tdomManip( self, args, callback, ignored );\n\t\t} );\n\t}\n\n\tif ( l ) {\n\t\tfragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored );\n\t\tfirst = fragment.firstChild;\n\n\t\tif ( fragment.childNodes.length === 1 ) {\n\t\t\tfragment = first;\n\t\t}\n\n\t\t// Require either new content or an interest in ignored elements to invoke the callback\n\t\tif ( first || ignored ) {\n\t\t\tscripts = jQuery.map( getAll( fragment, \"script\" ), disableScript );\n\t\t\thasScripts = scripts.length;\n\n\t\t\t// Use the original fragment for the last item\n\t\t\t// instead of the first because it can end up\n\t\t\t// being emptied incorrectly in certain situations (#8070).\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tnode = fragment;\n\n\t\t\t\tif ( i !== iNoClone ) {\n\t\t\t\t\tnode = jQuery.clone( node, true, true );\n\n\t\t\t\t\t// Keep references to cloned scripts for later restoration\n\t\t\t\t\tif ( hasScripts ) {\n\n\t\t\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\t\t\tjQuery.merge( scripts, getAll( node, \"script\" ) );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tcallback.call( collection[ i ], node, i );\n\t\t\t}\n\n\t\t\tif ( hasScripts ) {\n\t\t\t\tdoc = scripts[ scripts.length - 1 ].ownerDocument;\n\n\t\t\t\t// Reenable scripts\n\t\t\t\tjQuery.map( scripts, restoreScript );\n\n\t\t\t\t// Evaluate executable scripts on first document insertion\n\t\t\t\tfor ( i = 0; i < hasScripts; i++ ) {\n\t\t\t\t\tnode = scripts[ i ];\n\t\t\t\t\tif ( rscriptType.test( node.type || \"\" ) &&\n\t\t\t\t\t\t!dataPriv.access( node, \"globalEval\" ) &&\n\t\t\t\t\t\tjQuery.contains( doc, node ) ) {\n\n\t\t\t\t\t\tif ( node.src && ( node.type || \"\" ).toLowerCase() !== \"module\" ) {\n\n\t\t\t\t\t\t\t// Optional AJAX dependency, but won't run scripts if not present\n\t\t\t\t\t\t\tif ( jQuery._evalUrl ) {\n\t\t\t\t\t\t\t\tjQuery._evalUrl( node.src );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tDOMEval( node.textContent.replace( rcleanScript, \"\" ), doc, node );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn collection;\n}\n\nfunction remove( elem, selector, keepData ) {\n\tvar node,\n\t\tnodes = selector ? jQuery.filter( selector, elem ) : elem,\n\t\ti = 0;\n\n\tfor ( ; ( node = nodes[ i ] ) != null; i++ ) {\n\t\tif ( !keepData && node.nodeType === 1 ) {\n\t\t\tjQuery.cleanData( getAll( node ) );\n\t\t}\n\n\t\tif ( node.parentNode ) {\n\t\t\tif ( keepData && jQuery.contains( node.ownerDocument, node ) ) {\n\t\t\t\tsetGlobalEval( getAll( node, \"script\" ) );\n\t\t\t}\n\t\t\tnode.parentNode.removeChild( node );\n\t\t}\n\t}\n\n\treturn elem;\n}\n\njQuery.extend( {\n\thtmlPrefilter: function( html ) {\n\t\treturn html.replace( rxhtmlTag, \"<$1></$2>\" );\n\t},\n\n\tclone: function( elem, dataAndEvents, deepDataAndEvents ) {\n\t\tvar i, l, srcElements, destElements,\n\t\t\tclone = elem.cloneNode( true ),\n\t\t\tinPage = jQuery.contains( elem.ownerDocument, elem );\n\n\t\t// Fix IE cloning issues\n\t\tif ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) &&\n\t\t\t\t!jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2\n\t\t\tdestElements = getAll( clone );\n\t\t\tsrcElements = getAll( elem );\n\n\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\tfixInput( srcElements[ i ], destElements[ i ] );\n\t\t\t}\n\t\t}\n\n\t\t// Copy the events from the original to the clone\n\t\tif ( dataAndEvents ) {\n\t\t\tif ( deepDataAndEvents ) {\n\t\t\t\tsrcElements = srcElements || getAll( elem );\n\t\t\t\tdestElements = destElements || getAll( clone );\n\n\t\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\t\tcloneCopyEvent( srcElements[ i ], destElements[ i ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcloneCopyEvent( elem, clone );\n\t\t\t}\n\t\t}\n\n\t\t// Preserve script evaluation history\n\t\tdestElements = getAll( clone, \"script\" );\n\t\tif ( destElements.length > 0 ) {\n\t\t\tsetGlobalEval( destElements, !inPage && getAll( elem, \"script\" ) );\n\t\t}\n\n\t\t// Return the cloned set\n\t\treturn clone;\n\t},\n\n\tcleanData: function( elems ) {\n\t\tvar data, elem, type,\n\t\t\tspecial = jQuery.event.special,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = elems[ i ] ) !== undefined; i++ ) {\n\t\t\tif ( acceptData( elem ) ) {\n\t\t\t\tif ( ( data = elem[ dataPriv.expando ] ) ) {\n\t\t\t\t\tif ( data.events ) {\n\t\t\t\t\t\tfor ( type in data.events ) {\n\t\t\t\t\t\t\tif ( special[ type ] ) {\n\t\t\t\t\t\t\t\tjQuery.event.remove( elem, type );\n\n\t\t\t\t\t\t\t// This is a shortcut to avoid jQuery.event.remove's overhead\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tjQuery.removeEvent( elem, type, data.handle );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataPriv.expando ] = undefined;\n\t\t\t\t}\n\t\t\t\tif ( elem[ dataUser.expando ] ) {\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataUser.expando ] = undefined;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n} );\n\njQuery.fn.extend( {\n\tdetach: function( selector ) {\n\t\treturn remove( this, selector, true );\n\t},\n\n\tremove: function( selector ) {\n\t\treturn remove( this, selector );\n\t},\n\n\ttext: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\treturn value === undefined ?\n\t\t\t\tjQuery.text( this ) :\n\t\t\t\tthis.empty().each( function() {\n\t\t\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\t\t\tthis.textContent = value;\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t}, null, value, arguments.length );\n\t},\n\n\tappend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.appendChild( elem );\n\t\t\t}\n\t\t} );\n\t},\n\n\tprepend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.insertBefore( elem, target.firstChild );\n\t\t\t}\n\t\t} );\n\t},\n\n\tbefore: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this );\n\t\t\t}\n\t\t} );\n\t},\n\n\tafter: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this.nextSibling );\n\t\t\t}\n\t\t} );\n\t},\n\n\tempty: function() {\n\t\tvar elem,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = this[ i ] ) != null; i++ ) {\n\t\t\tif ( elem.nodeType === 1 ) {\n\n\t\t\t\t// Prevent memory leaks\n\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\n\t\t\t\t// Remove any remaining nodes\n\t\t\t\telem.textContent = \"\";\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tclone: function( dataAndEvents, deepDataAndEvents ) {\n\t\tdataAndEvents = dataAndEvents == null ? false : dataAndEvents;\n\t\tdeepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;\n\n\t\treturn this.map( function() {\n\t\t\treturn jQuery.clone( this, dataAndEvents, deepDataAndEvents );\n\t\t} );\n\t},\n\n\thtml: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\tvar elem = this[ 0 ] || {},\n\t\t\t\ti = 0,\n\t\t\t\tl = this.length;\n\n\t\t\tif ( value === undefined && elem.nodeType === 1 ) {\n\t\t\t\treturn elem.innerHTML;\n\t\t\t}\n\n\t\t\t// See if we can take a shortcut and just use innerHTML\n\t\t\tif ( typeof value === \"string\" && !rnoInnerhtml.test( value ) &&\n\t\t\t\t!wrapMap[ ( rtagName.exec( value ) || [ \"\", \"\" ] )[ 1 ].toLowerCase() ] ) {\n\n\t\t\t\tvalue = jQuery.htmlPrefilter( value );\n\n\t\t\t\ttry {\n\t\t\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\t\t\telem = this[ i ] || {};\n\n\t\t\t\t\t\t// Remove element nodes and prevent memory leaks\n\t\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\t\t\t\t\t\t\telem.innerHTML = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\telem = 0;\n\n\t\t\t\t// If using innerHTML throws an exception, use the fallback method\n\t\t\t\t} catch ( e ) {}\n\t\t\t}\n\n\t\t\tif ( elem ) {\n\t\t\t\tthis.empty().append( value );\n\t\t\t}\n\t\t}, null, value, arguments.length );\n\t},\n\n\treplaceWith: function() {\n\t\tvar ignored = [];\n\n\t\t// Make the changes, replacing each non-ignored context element with the new content\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tvar parent = this.parentNode;\n\n\t\t\tif ( jQuery.inArray( this, ignored ) < 0 ) {\n\t\t\t\tjQuery.cleanData( getAll( this ) );\n\t\t\t\tif ( parent ) {\n\t\t\t\t\tparent.replaceChild( elem, this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Force callback invocation\n\t\t}, ignored );\n\t}\n} );\n\njQuery.each( {\n\tappendTo: \"append\",\n\tprependTo: \"prepend\",\n\tinsertBefore: \"before\",\n\tinsertAfter: \"after\",\n\treplaceAll: \"replaceWith\"\n}, function( name, original ) {\n\tjQuery.fn[ name ] = function( selector ) {\n\t\tvar elems,\n\t\t\tret = [],\n\t\t\tinsert = jQuery( selector ),\n\t\t\tlast = insert.length - 1,\n\t\t\ti = 0;\n\n\t\tfor ( ; i <= last; i++ ) {\n\t\t\telems = i === last ? this : this.clone( true );\n\t\t\tjQuery( insert[ i ] )[ original ]( elems );\n\n\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t// .get() because push.apply(_, arraylike) throws on ancient WebKit\n\t\t\tpush.apply( ret, elems.get() );\n\t\t}\n\n\t\treturn this.pushStack( ret );\n\t};\n} );\nvar rnumnonpx = new RegExp( \"^(\" + pnum + \")(?!px)[a-z%]+$\", \"i\" );\n\nvar getStyles = function( elem ) {\n\n\t\t// Support: IE <=11 only, Firefox <=30 (#15098, #14150)\n\t\t// IE throws on elements created in popups\n\t\t// FF meanwhile throws on frame elements through \"defaultView.getComputedStyle\"\n\t\tvar view = elem.ownerDocument.defaultView;\n\n\t\tif ( !view || !view.opener ) {\n\t\t\tview = window;\n\t\t}\n\n\t\treturn view.getComputedStyle( elem );\n\t};\n\nvar rboxStyle = new RegExp( cssExpand.join( \"|\" ), \"i\" );\n\n\n\n( function() {\n\n\t// Executing both pixelPosition & boxSizingReliable tests require only one layout\n\t// so they're executed at the same time to save the second computation.\n\tfunction computeStyleTests() {\n\n\t\t// This is a singleton, we need to execute it only once\n\t\tif ( !div ) {\n\t\t\treturn;\n\t\t}\n\n\t\tcontainer.style.cssText = \"position:absolute;left:-11111px;width:60px;\" +\n\t\t\t\"margin-top:1px;padding:0;border:0\";\n\t\tdiv.style.cssText =\n\t\t\t\"position:relative;display:block;box-sizing:border-box;overflow:scroll;\" +\n\t\t\t\"margin:auto;border:1px;padding:1px;\" +\n\t\t\t\"width:60%;top:1%\";\n\t\tdocumentElement.appendChild( container ).appendChild( div );\n\n\t\tvar divStyle = window.getComputedStyle( div );\n\t\tpixelPositionVal = divStyle.top !== \"1%\";\n\n\t\t// Support: Android 4.0 - 4.3 only, Firefox <=3 - 44\n\t\treliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12;\n\n\t\t// Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3\n\t\t// Some styles come back with percentage values, even though they shouldn't\n\t\tdiv.style.right = \"60%\";\n\t\tpixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36;\n\n\t\t// Support: IE 9 - 11 only\n\t\t// Detect misreporting of content dimensions for box-sizing:border-box elements\n\t\tboxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36;\n\n\t\t// Support: IE 9 only\n\t\t// Detect overflow:scroll screwiness (gh-3699)\n\t\tdiv.style.position = \"absolute\";\n\t\tscrollboxSizeVal = div.offsetWidth === 36 || \"absolute\";\n\n\t\tdocumentElement.removeChild( container );\n\n\t\t// Nullify the div so it wouldn't be stored in the memory and\n\t\t// it will also be a sign that checks already performed\n\t\tdiv = null;\n\t}\n\n\tfunction roundPixelMeasures( measure ) {\n\t\treturn Math.round( parseFloat( measure ) );\n\t}\n\n\tvar pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal,\n\t\treliableMarginLeftVal,\n\t\tcontainer = document.createElement( \"div\" ),\n\t\tdiv = document.createElement( \"div\" );\n\n\t// Finish early in limited (non-browser) environments\n\tif ( !div.style ) {\n\t\treturn;\n\t}\n\n\t// Support: IE <=9 - 11 only\n\t// Style of cloned element affects source element cloned (#8908)\n\tdiv.style.backgroundClip = \"content-box\";\n\tdiv.cloneNode( true ).style.backgroundClip = \"\";\n\tsupport.clearCloneStyle = div.style.backgroundClip === \"content-box\";\n\n\tjQuery.extend( support, {\n\t\tboxSizingReliable: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn boxSizingReliableVal;\n\t\t},\n\t\tpixelBoxStyles: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn pixelBoxStylesVal;\n\t\t},\n\t\tpixelPosition: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn pixelPositionVal;\n\t\t},\n\t\treliableMarginLeft: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn reliableMarginLeftVal;\n\t\t},\n\t\tscrollboxSize: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn scrollboxSizeVal;\n\t\t}\n\t} );\n} )();\n\n\nfunction curCSS( elem, name, computed ) {\n\tvar width, minWidth, maxWidth, ret,\n\n\t\t// Support: Firefox 51+\n\t\t// Retrieving style before computed somehow\n\t\t// fixes an issue with getting wrong values\n\t\t// on detached elements\n\t\tstyle = elem.style;\n\n\tcomputed = computed || getStyles( elem );\n\n\t// getPropertyValue is needed for:\n\t// .css('filter') (IE 9 only, #12537)\n\t// .css('--customProperty) (#3144)\n\tif ( computed ) {\n\t\tret = computed.getPropertyValue( name ) || computed[ name ];\n\n\t\tif ( ret === \"\" && !jQuery.contains( elem.ownerDocument, elem ) ) {\n\t\t\tret = jQuery.style( elem, name );\n\t\t}\n\n\t\t// A tribute to the \"awesome hack by Dean Edwards\"\n\t\t// Android Browser returns percentage for some values,\n\t\t// but width seems to be reliably pixels.\n\t\t// This is against the CSSOM draft spec:\n\t\t// https://drafts.csswg.org/cssom/#resolved-values\n\t\tif ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.test( name ) ) {\n\n\t\t\t// Remember the original values\n\t\t\twidth = style.width;\n\t\t\tminWidth = style.minWidth;\n\t\t\tmaxWidth = style.maxWidth;\n\n\t\t\t// Put in the new values to get a computed value out\n\t\t\tstyle.minWidth = style.maxWidth = style.width = ret;\n\t\t\tret = computed.width;\n\n\t\t\t// Revert the changed values\n\t\t\tstyle.width = width;\n\t\t\tstyle.minWidth = minWidth;\n\t\t\tstyle.maxWidth = maxWidth;\n\t\t}\n\t}\n\n\treturn ret !== undefined ?\n\n\t\t// Support: IE <=9 - 11 only\n\t\t// IE returns zIndex value as an integer.\n\t\tret + \"\" :\n\t\tret;\n}\n\n\nfunction addGetHookIf( conditionFn, hookFn ) {\n\n\t// Define the hook, we'll check on the first run if it's really needed.\n\treturn {\n\t\tget: function() {\n\t\t\tif ( conditionFn() ) {\n\n\t\t\t\t// Hook not needed (or it's not possible to use it due\n\t\t\t\t// to missing dependency), remove it.\n\t\t\t\tdelete this.get;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Hook needed; redefine it so that the support test is not executed again.\n\t\t\treturn ( this.get = hookFn ).apply( this, arguments );\n\t\t}\n\t};\n}\n\n\nvar\n\n\t// Swappable if display is none or starts with table\n\t// except \"table\", \"table-cell\", or \"table-caption\"\n\t// See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display\n\trdisplayswap = /^(none|table(?!-c[ea]).+)/,\n\trcustomProp = /^--/,\n\tcssShow = { position: \"absolute\", visibility: \"hidden\", display: \"block\" },\n\tcssNormalTransform = {\n\t\tletterSpacing: \"0\",\n\t\tfontWeight: \"400\"\n\t},\n\n\tcssPrefixes = [ \"Webkit\", \"Moz\", \"ms\" ],\n\temptyStyle = document.createElement( \"div\" ).style;\n\n// Return a css property mapped to a potentially vendor prefixed property\nfunction vendorPropName( name ) {\n\n\t// Shortcut for names that are not vendor prefixed\n\tif ( name in emptyStyle ) {\n\t\treturn name;\n\t}\n\n\t// Check for vendor prefixed names\n\tvar capName = name[ 0 ].toUpperCase() + name.slice( 1 ),\n\t\ti = cssPrefixes.length;\n\n\twhile ( i-- ) {\n\t\tname = cssPrefixes[ i ] + capName;\n\t\tif ( name in emptyStyle ) {\n\t\t\treturn name;\n\t\t}\n\t}\n}\n\n// Return a property mapped along what jQuery.cssProps suggests or to\n// a vendor prefixed property.\nfunction finalPropName( name ) {\n\tvar ret = jQuery.cssProps[ name ];\n\tif ( !ret ) {\n\t\tret = jQuery.cssProps[ name ] = vendorPropName( name ) || name;\n\t}\n\treturn ret;\n}\n\nfunction setPositiveNumber( elem, value, subtract ) {\n\n\t// Any relative (+/-) values have already been\n\t// normalized at this point\n\tvar matches = rcssNum.exec( value );\n\treturn matches ?\n\n\t\t// Guard against undefined \"subtract\", e.g., when used as in cssHooks\n\t\tMath.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || \"px\" ) :\n\t\tvalue;\n}\n\nfunction boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) {\n\tvar i = dimension === \"width\" ? 1 : 0,\n\t\textra = 0,\n\t\tdelta = 0;\n\n\t// Adjustment may not be necessary\n\tif ( box === ( isBorderBox ? \"border\" : \"content\" ) ) {\n\t\treturn 0;\n\t}\n\n\tfor ( ; i < 4; i += 2 ) {\n\n\t\t// Both box models exclude margin\n\t\tif ( box === \"margin\" ) {\n\t\t\tdelta += jQuery.css( elem, box + cssExpand[ i ], true, styles );\n\t\t}\n\n\t\t// If we get here with a content-box, we're seeking \"padding\" or \"border\" or \"margin\"\n\t\tif ( !isBorderBox ) {\n\n\t\t\t// Add padding\n\t\t\tdelta += jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\n\t\t\t// For \"border\" or \"margin\", add border\n\t\t\tif ( box !== \"padding\" ) {\n\t\t\t\tdelta += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\n\t\t\t// But still keep track of it otherwise\n\t\t\t} else {\n\t\t\t\textra += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\n\t\t// If we get here with a border-box (content + padding + border), we're seeking \"content\" or\n\t\t// \"padding\" or \"margin\"\n\t\t} else {\n\n\t\t\t// For \"content\", subtract padding\n\t\t\tif ( box === \"content\" ) {\n\t\t\t\tdelta -= jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\t\t\t}\n\n\t\t\t// For \"content\" or \"padding\", subtract border\n\t\t\tif ( box !== \"margin\" ) {\n\t\t\t\tdelta -= jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Account for positive content-box scroll gutter when requested by providing computedVal\n\tif ( !isBorderBox && computedVal >= 0 ) {\n\n\t\t// offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border\n\t\t// Assuming integer scroll gutter, subtract the rest and round down\n\t\tdelta += Math.max( 0, Math.ceil(\n\t\t\telem[ \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -\n\t\t\tcomputedVal -\n\t\t\tdelta -\n\t\t\textra -\n\t\t\t0.5\n\t\t) );\n\t}\n\n\treturn delta;\n}\n\nfunction getWidthOrHeight( elem, dimension, extra ) {\n\n\t// Start with computed style\n\tvar styles = getStyles( elem ),\n\t\tval = curCSS( elem, dimension, styles ),\n\t\tisBorderBox = jQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\tvalueIsBorderBox = isBorderBox;\n\n\t// Support: Firefox <=54\n\t// Return a confounding non-pixel value or feign ignorance, as appropriate.\n\tif ( rnumnonpx.test( val ) ) {\n\t\tif ( !extra ) {\n\t\t\treturn val;\n\t\t}\n\t\tval = \"auto\";\n\t}\n\n\t// Check for style in case a browser which returns unreliable values\n\t// for getComputedStyle silently falls back to the reliable elem.style\n\tvalueIsBorderBox = valueIsBorderBox &&\n\t\t( support.boxSizingReliable() || val === elem.style[ dimension ] );\n\n\t// Fall back to offsetWidth/offsetHeight when value is \"auto\"\n\t// This happens for inline elements with no explicit setting (gh-3571)\n\t// Support: Android <=4.1 - 4.3 only\n\t// Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602)\n\tif ( val === \"auto\" ||\n\t\t!parseFloat( val ) && jQuery.css( elem, \"display\", false, styles ) === \"inline\" ) {\n\n\t\tval = elem[ \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ];\n\n\t\t// offsetWidth/offsetHeight provide border-box values\n\t\tvalueIsBorderBox = true;\n\t}\n\n\t// Normalize \"\" and auto\n\tval = parseFloat( val ) || 0;\n\n\t// Adjust for the element's box model\n\treturn ( val +\n\t\tboxModelAdjustment(\n\t\t\telem,\n\t\t\tdimension,\n\t\t\textra || ( isBorderBox ? \"border\" : \"content\" ),\n\t\t\tvalueIsBorderBox,\n\t\t\tstyles,\n\n\t\t\t// Provide the current computed size to request scroll gutter calculation (gh-3589)\n\t\t\tval\n\t\t)\n\t) + \"px\";\n}\n\njQuery.extend( {\n\n\t// Add in style property hooks for overriding the default\n\t// behavior of getting and setting a style property\n\tcssHooks: {\n\t\topacity: {\n\t\t\tget: function( elem, computed ) {\n\t\t\t\tif ( computed ) {\n\n\t\t\t\t\t// We should always get a number back from opacity\n\t\t\t\t\tvar ret = curCSS( elem, \"opacity\" );\n\t\t\t\t\treturn ret === \"\" ? \"1\" : ret;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\t// Don't automatically add \"px\" to these possibly-unitless properties\n\tcssNumber: {\n\t\t\"animationIterationCount\": true,\n\t\t\"columnCount\": true,\n\t\t\"fillOpacity\": true,\n\t\t\"flexGrow\": true,\n\t\t\"flexShrink\": true,\n\t\t\"fontWeight\": true,\n\t\t\"lineHeight\": true,\n\t\t\"opacity\": true,\n\t\t\"order\": true,\n\t\t\"orphans\": true,\n\t\t\"widows\": true,\n\t\t\"zIndex\": true,\n\t\t\"zoom\": true\n\t},\n\n\t// Add in properties whose names you wish to fix before\n\t// setting or getting the value\n\tcssProps: {},\n\n\t// Get and set the style property on a DOM Node\n\tstyle: function( elem, name, value, extra ) {\n\n\t\t// Don't set styles on text and comment nodes\n\t\tif ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Make sure that we're working with the right name\n\t\tvar ret, type, hooks,\n\t\t\torigName = camelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name ),\n\t\t\tstyle = elem.style;\n\n\t\t// Make sure that we're working with the right name. We don't\n\t\t// want to query the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\n\n\t\t// Gets hook for the prefixed version, then unprefixed version\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// Check if we're setting a value\n\t\tif ( value !== undefined ) {\n\t\t\ttype = typeof value;\n\n\t\t\t// Convert \"+=\" or \"-=\" to relative numbers (#7345)\n\t\t\tif ( type === \"string\" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) {\n\t\t\t\tvalue = adjustCSS( elem, name, ret );\n\n\t\t\t\t// Fixes bug #9237\n\t\t\t\ttype = \"number\";\n\t\t\t}\n\n\t\t\t// Make sure that null and NaN values aren't set (#7116)\n\t\t\tif ( value == null || value !== value ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If a number was passed in, add the unit (except for certain CSS properties)\n\t\t\tif ( type === \"number\" ) {\n\t\t\t\tvalue += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? \"\" : \"px\" );\n\t\t\t}\n\n\t\t\t// background-* props affect original clone's values\n\t\t\tif ( !support.clearCloneStyle && value === \"\" && name.indexOf( \"background\" ) === 0 ) {\n\t\t\t\tstyle[ name ] = \"inherit\";\n\t\t\t}\n\n\t\t\t// If a hook was provided, use that value, otherwise just set the specified value\n\t\t\tif ( !hooks || !( \"set\" in hooks ) ||\n\t\t\t\t( value = hooks.set( elem, value, extra ) ) !== undefined ) {\n\n\t\t\t\tif ( isCustomProp ) {\n\t\t\t\t\tstyle.setProperty( name, value );\n\t\t\t\t} else {\n\t\t\t\t\tstyle[ name ] = value;\n\t\t\t\t}\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// If a hook was provided get the non-computed value from there\n\t\t\tif ( hooks && \"get\" in hooks &&\n\t\t\t\t( ret = hooks.get( elem, false, extra ) ) !== undefined ) {\n\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\t// Otherwise just get the value from the style object\n\t\t\treturn style[ name ];\n\t\t}\n\t},\n\n\tcss: function( elem, name, extra, styles ) {\n\t\tvar val, num, hooks,\n\t\t\torigName = camelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name );\n\n\t\t// Make sure that we're working with the right name. We don't\n\t\t// want to modify the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\n\n\t\t// Try prefixed name followed by the unprefixed name\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// If a hook was provided get the computed value from there\n\t\tif ( hooks && \"get\" in hooks ) {\n\t\t\tval = hooks.get( elem, true, extra );\n\t\t}\n\n\t\t// Otherwise, if a way to get the computed value exists, use that\n\t\tif ( val === undefined ) {\n\t\t\tval = curCSS( elem, name, styles );\n\t\t}\n\n\t\t// Convert \"normal\" to computed value\n\t\tif ( val === \"normal\" && name in cssNormalTransform ) {\n\t\t\tval = cssNormalTransform[ name ];\n\t\t}\n\n\t\t// Make numeric if forced or a qualifier was provided and val looks numeric\n\t\tif ( extra === \"\" || extra ) {\n\t\t\tnum = parseFloat( val );\n\t\t\treturn extra === true || isFinite( num ) ? num || 0 : val;\n\t\t}\n\n\t\treturn val;\n\t}\n} );\n\njQuery.each( [ \"height\", \"width\" ], function( i, dimension ) {\n\tjQuery.cssHooks[ dimension ] = {\n\t\tget: function( elem, computed, extra ) {\n\t\t\tif ( computed ) {\n\n\t\t\t\t// Certain elements can have dimension info if we invisibly show them\n\t\t\t\t// but it must have a current display style that would benefit\n\t\t\t\treturn rdisplayswap.test( jQuery.css( elem, \"display\" ) ) &&\n\n\t\t\t\t\t// Support: Safari 8+\n\t\t\t\t\t// Table columns in Safari have non-zero offsetWidth & zero\n\t\t\t\t\t// getBoundingClientRect().width unless display is changed.\n\t\t\t\t\t// Support: IE <=11 only\n\t\t\t\t\t// Running getBoundingClientRect on a disconnected node\n\t\t\t\t\t// in IE throws an error.\n\t\t\t\t\t( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ?\n\t\t\t\t\t\tswap( elem, cssShow, function() {\n\t\t\t\t\t\t\treturn getWidthOrHeight( elem, dimension, extra );\n\t\t\t\t\t\t} ) :\n\t\t\t\t\t\tgetWidthOrHeight( elem, dimension, extra );\n\t\t\t}\n\t\t},\n\n\t\tset: function( elem, value, extra ) {\n\t\t\tvar matches,\n\t\t\t\tstyles = getStyles( elem ),\n\t\t\t\tisBorderBox = jQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\t\t\tsubtract = extra && boxModelAdjustment(\n\t\t\t\t\telem,\n\t\t\t\t\tdimension,\n\t\t\t\t\textra,\n\t\t\t\t\tisBorderBox,\n\t\t\t\t\tstyles\n\t\t\t\t);\n\n\t\t\t// Account for unreliable border-box dimensions by comparing offset* to computed and\n\t\t\t// faking a content-box to get border and padding (gh-3699)\n\t\t\tif ( isBorderBox && support.scrollboxSize() === styles.position ) {\n\t\t\t\tsubtract -= Math.ceil(\n\t\t\t\t\telem[ \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -\n\t\t\t\t\tparseFloat( styles[ dimension ] ) -\n\t\t\t\t\tboxModelAdjustment( elem, dimension, \"border\", false, styles ) -\n\t\t\t\t\t0.5\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// Convert to pixels if value adjustment is needed\n\t\t\tif ( subtract && ( matches = rcssNum.exec( value ) ) &&\n\t\t\t\t( matches[ 3 ] || \"px\" ) !== \"px\" ) {\n\n\t\t\t\telem.style[ dimension ] = value;\n\t\t\t\tvalue = jQuery.css( elem, dimension );\n\t\t\t}\n\n\t\t\treturn setPositiveNumber( elem, value, subtract );\n\t\t}\n\t};\n} );\n\njQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft,\n\tfunction( elem, computed ) {\n\t\tif ( computed ) {\n\t\t\treturn ( parseFloat( curCSS( elem, \"marginLeft\" ) ) ||\n\t\t\t\telem.getBoundingClientRect().left -\n\t\t\t\t\tswap( elem, { marginLeft: 0 }, function() {\n\t\t\t\t\t\treturn elem.getBoundingClientRect().left;\n\t\t\t\t\t} )\n\t\t\t\t) + \"px\";\n\t\t}\n\t}\n);\n\n// These hooks are used by animate to expand properties\njQuery.each( {\n\tmargin: \"\",\n\tpadding: \"\",\n\tborder: \"Width\"\n}, function( prefix, suffix ) {\n\tjQuery.cssHooks[ prefix + suffix ] = {\n\t\texpand: function( value ) {\n\t\t\tvar i = 0,\n\t\t\t\texpanded = {},\n\n\t\t\t\t// Assumes a single number if not a string\n\t\t\t\tparts = typeof value === \"string\" ? value.split( \" \" ) : [ value ];\n\n\t\t\tfor ( ; i < 4; i++ ) {\n\t\t\t\texpanded[ prefix + cssExpand[ i ] + suffix ] =\n\t\t\t\t\tparts[ i ] || parts[ i - 2 ] || parts[ 0 ];\n\t\t\t}\n\n\t\t\treturn expanded;\n\t\t}\n\t};\n\n\tif ( prefix !== \"margin\" ) {\n\t\tjQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;\n\t}\n} );\n\njQuery.fn.extend( {\n\tcss: function( name, value ) {\n\t\treturn access( this, function( elem, name, value ) {\n\t\t\tvar styles, len,\n\t\t\t\tmap = {},\n\t\t\t\ti = 0;\n\n\t\t\tif ( Array.isArray( name ) ) {\n\t\t\t\tstyles = getStyles( elem );\n\t\t\t\tlen = name.length;\n\n\t\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\t\tmap[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );\n\t\t\t\t}\n\n\t\t\t\treturn map;\n\t\t\t}\n\n\t\t\treturn value !== undefined ?\n\t\t\t\tjQuery.style( elem, name, value ) :\n\t\t\t\tjQuery.css( elem, name );\n\t\t}, name, value, arguments.length > 1 );\n\t}\n} );\n\n\nfunction Tween( elem, options, prop, end, easing ) {\n\treturn new Tween.prototype.init( elem, options, prop, end, easing );\n}\njQuery.Tween = Tween;\n\nTween.prototype = {\n\tconstructor: Tween,\n\tinit: function( elem, options, prop, end, easing, unit ) {\n\t\tthis.elem = elem;\n\t\tthis.prop = prop;\n\t\tthis.easing = easing || jQuery.easing._default;\n\t\tthis.options = options;\n\t\tthis.start = this.now = this.cur();\n\t\tthis.end = end;\n\t\tthis.unit = unit || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" );\n\t},\n\tcur: function() {\n\t\tvar hooks = Tween.propHooks[ this.prop ];\n\n\t\treturn hooks && hooks.get ?\n\t\t\thooks.get( this ) :\n\t\t\tTween.propHooks._default.get( this );\n\t},\n\trun: function( percent ) {\n\t\tvar eased,\n\t\t\thooks = Tween.propHooks[ this.prop ];\n\n\t\tif ( this.options.duration ) {\n\t\t\tthis.pos = eased = jQuery.easing[ this.easing ](\n\t\t\t\tpercent, this.options.duration * percent, 0, 1, this.options.duration\n\t\t\t);\n\t\t} else {\n\t\t\tthis.pos = eased = percent;\n\t\t}\n\t\tthis.now = ( this.end - this.start ) * eased + this.start;\n\n\t\tif ( this.options.step ) {\n\t\t\tthis.options.step.call( this.elem, this.now, this );\n\t\t}\n\n\t\tif ( hooks && hooks.set ) {\n\t\t\thooks.set( this );\n\t\t} else {\n\t\t\tTween.propHooks._default.set( this );\n\t\t}\n\t\treturn this;\n\t}\n};\n\nTween.prototype.init.prototype = Tween.prototype;\n\nTween.propHooks = {\n\t_default: {\n\t\tget: function( tween ) {\n\t\t\tvar result;\n\n\t\t\t// Use a property on the element directly when it is not a DOM element,\n\t\t\t// or when there is no matching style property that exists.\n\t\t\tif ( tween.elem.nodeType !== 1 ||\n\t\t\t\ttween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) {\n\t\t\t\treturn tween.elem[ tween.prop ];\n\t\t\t}\n\n\t\t\t// Passing an empty string as a 3rd parameter to .css will automatically\n\t\t\t// attempt a parseFloat and fallback to a string if the parse fails.\n\t\t\t// Simple values such as \"10px\" are parsed to Float;\n\t\t\t// complex values such as \"rotate(1rad)\" are returned as-is.\n\t\t\tresult = jQuery.css( tween.elem, tween.prop, \"\" );\n\n\t\t\t// Empty strings, null, undefined and \"auto\" are converted to 0.\n\t\t\treturn !result || result === \"auto\" ? 0 : result;\n\t\t},\n\t\tset: function( tween ) {\n\n\t\t\t// Use step hook for back compat.\n\t\t\t// Use cssHook if its there.\n\t\t\t// Use .style if available and use plain properties where available.\n\t\t\tif ( jQuery.fx.step[ tween.prop ] ) {\n\t\t\t\tjQuery.fx.step[ tween.prop ]( tween );\n\t\t\t} else if ( tween.elem.nodeType === 1 &&\n\t\t\t\t( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null ||\n\t\t\t\t\tjQuery.cssHooks[ tween.prop ] ) ) {\n\t\t\t\tjQuery.style( tween.elem, tween.prop, tween.now + tween.unit );\n\t\t\t} else {\n\t\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t\t}\n\t\t}\n\t}\n};\n\n// Support: IE <=9 only\n// Panic based approach to setting things on disconnected nodes\nTween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {\n\tset: function( tween ) {\n\t\tif ( tween.elem.nodeType && tween.elem.parentNode ) {\n\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t}\n\t}\n};\n\njQuery.easing = {\n\tlinear: function( p ) {\n\t\treturn p;\n\t},\n\tswing: function( p ) {\n\t\treturn 0.5 - Math.cos( p * Math.PI ) / 2;\n\t},\n\t_default: \"swing\"\n};\n\njQuery.fx = Tween.prototype.init;\n\n// Back compat <1.8 extension point\njQuery.fx.step = {};\n\n\n\n\nvar\n\tfxNow, inProgress,\n\trfxtypes = /^(?:toggle|show|hide)$/,\n\trrun = /queueHooks$/;\n\nfunction schedule() {\n\tif ( inProgress ) {\n\t\tif ( document.hidden === false && window.requestAnimationFrame ) {\n\t\t\twindow.requestAnimationFrame( schedule );\n\t\t} else {\n\t\t\twindow.setTimeout( schedule, jQuery.fx.interval );\n\t\t}\n\n\t\tjQuery.fx.tick();\n\t}\n}\n\n// Animations created synchronously will run synchronously\nfunction createFxNow() {\n\twindow.setTimeout( function() {\n\t\tfxNow = undefined;\n\t} );\n\treturn ( fxNow = Date.now() );\n}\n\n// Generate parameters to create a standard animation\nfunction genFx( type, includeWidth ) {\n\tvar which,\n\t\ti = 0,\n\t\tattrs = { height: type };\n\n\t// If we include width, step value is 1 to do all cssExpand values,\n\t// otherwise step value is 2 to skip over Left and Right\n\tincludeWidth = includeWidth ? 1 : 0;\n\tfor ( ; i < 4; i += 2 - includeWidth ) {\n\t\twhich = cssExpand[ i ];\n\t\tattrs[ \"margin\" + which ] = attrs[ \"padding\" + which ] = type;\n\t}\n\n\tif ( includeWidth ) {\n\t\tattrs.opacity = attrs.width = type;\n\t}\n\n\treturn attrs;\n}\n\nfunction createTween( value, prop, animation ) {\n\tvar tween,\n\t\tcollection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ \"*\" ] ),\n\t\tindex = 0,\n\t\tlength = collection.length;\n\tfor ( ; index < length; index++ ) {\n\t\tif ( ( tween = collection[ index ].call( animation, prop, value ) ) ) {\n\n\t\t\t// We're done with this property\n\t\t\treturn tween;\n\t\t}\n\t}\n}\n\nfunction defaultPrefilter( elem, props, opts ) {\n\tvar prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display,\n\t\tisBox = \"width\" in props || \"height\" in props,\n\t\tanim = this,\n\t\torig = {},\n\t\tstyle = elem.style,\n\t\thidden = elem.nodeType && isHiddenWithinTree( elem ),\n\t\tdataShow = dataPriv.get( elem, \"fxshow\" );\n\n\t// Queue-skipping animations hijack the fx hooks\n\tif ( !opts.queue ) {\n\t\thooks = jQuery._queueHooks( elem, \"fx\" );\n\t\tif ( hooks.unqueued == null ) {\n\t\t\thooks.unqueued = 0;\n\t\t\toldfire = hooks.empty.fire;\n\t\t\thooks.empty.fire = function() {\n\t\t\t\tif ( !hooks.unqueued ) {\n\t\t\t\t\toldfire();\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t\thooks.unqueued++;\n\n\t\tanim.always( function() {\n\n\t\t\t// Ensure the complete handler is called before this completes\n\t\t\tanim.always( function() {\n\t\t\t\thooks.unqueued--;\n\t\t\t\tif ( !jQuery.queue( elem, \"fx\" ).length ) {\n\t\t\t\t\thooks.empty.fire();\n\t\t\t\t}\n\t\t\t} );\n\t\t} );\n\t}\n\n\t// Detect show/hide animations\n\tfor ( prop in props ) {\n\t\tvalue = props[ prop ];\n\t\tif ( rfxtypes.test( value ) ) {\n\t\t\tdelete props[ prop ];\n\t\t\ttoggle = toggle || value === \"toggle\";\n\t\t\tif ( value === ( hidden ? \"hide\" : \"show\" ) ) {\n\n\t\t\t\t// Pretend to be hidden if this is a \"show\" and\n\t\t\t\t// there is still data from a stopped show/hide\n\t\t\t\tif ( value === \"show\" && dataShow && dataShow[ prop ] !== undefined ) {\n\t\t\t\t\thidden = true;\n\n\t\t\t\t// Ignore all other no-op show/hide data\n\t\t\t\t} else {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\torig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );\n\t\t}\n\t}\n\n\t// Bail out if this is a no-op like .hide().hide()\n\tpropTween = !jQuery.isEmptyObject( props );\n\tif ( !propTween && jQuery.isEmptyObject( orig ) ) {\n\t\treturn;\n\t}\n\n\t// Restrict \"overflow\" and \"display\" styles during box animations\n\tif ( isBox && elem.nodeType === 1 ) {\n\n\t\t// Support: IE <=9 - 11, Edge 12 - 15\n\t\t// Record all 3 overflow attributes because IE does not infer the shorthand\n\t\t// from identically-valued overflowX and overflowY and Edge just mirrors\n\t\t// the overflowX value there.\n\t\topts.overflow = [ style.overflow, style.overflowX, style.overflowY ];\n\n\t\t// Identify a display type, preferring old show/hide data over the CSS cascade\n\t\trestoreDisplay = dataShow && dataShow.display;\n\t\tif ( restoreDisplay == null ) {\n\t\t\trestoreDisplay = dataPriv.get( elem, \"display\" );\n\t\t}\n\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\tif ( display === \"none\" ) {\n\t\t\tif ( restoreDisplay ) {\n\t\t\t\tdisplay = restoreDisplay;\n\t\t\t} else {\n\n\t\t\t\t// Get nonempty value(s) by temporarily forcing visibility\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t\trestoreDisplay = elem.style.display || restoreDisplay;\n\t\t\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\t\t\tshowHide( [ elem ] );\n\t\t\t}\n\t\t}\n\n\t\t// Animate inline elements as inline-block\n\t\tif ( display === \"inline\" || display === \"inline-block\" && restoreDisplay != null ) {\n\t\t\tif ( jQuery.css( elem, \"float\" ) === \"none\" ) {\n\n\t\t\t\t// Restore the original display value at the end of pure show/hide animations\n\t\t\t\tif ( !propTween ) {\n\t\t\t\t\tanim.done( function() {\n\t\t\t\t\t\tstyle.display = restoreDisplay;\n\t\t\t\t\t} );\n\t\t\t\t\tif ( restoreDisplay == null ) {\n\t\t\t\t\t\tdisplay = style.display;\n\t\t\t\t\t\trestoreDisplay = display === \"none\" ? \"\" : display;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tstyle.display = \"inline-block\";\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( opts.overflow ) {\n\t\tstyle.overflow = \"hidden\";\n\t\tanim.always( function() {\n\t\t\tstyle.overflow = opts.overflow[ 0 ];\n\t\t\tstyle.overflowX = opts.overflow[ 1 ];\n\t\t\tstyle.overflowY = opts.overflow[ 2 ];\n\t\t} );\n\t}\n\n\t// Implement show/hide animations\n\tpropTween = false;\n\tfor ( prop in orig ) {\n\n\t\t// General show/hide setup for this element animation\n\t\tif ( !propTween ) {\n\t\t\tif ( dataShow ) {\n\t\t\t\tif ( \"hidden\" in dataShow ) {\n\t\t\t\t\thidden = dataShow.hidden;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tdataShow = dataPriv.access( elem, \"fxshow\", { display: restoreDisplay } );\n\t\t\t}\n\n\t\t\t// Store hidden/visible for toggle so `.stop().toggle()` \"reverses\"\n\t\t\tif ( toggle ) {\n\t\t\t\tdataShow.hidden = !hidden;\n\t\t\t}\n\n\t\t\t// Show elements before animating them\n\t\t\tif ( hidden ) {\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t}\n\n\t\t\t/* eslint-disable no-loop-func */\n\n\t\t\tanim.done( function() {\n\n\t\t\t/* eslint-enable no-loop-func */\n\n\t\t\t\t// The final step of a \"hide\" animation is actually hiding the element\n\t\t\t\tif ( !hidden ) {\n\t\t\t\t\tshowHide( [ elem ] );\n\t\t\t\t}\n\t\t\t\tdataPriv.remove( elem, \"fxshow\" );\n\t\t\t\tfor ( prop in orig ) {\n\t\t\t\t\tjQuery.style( elem, prop, orig[ prop ] );\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\t// Per-property setup\n\t\tpropTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );\n\t\tif ( !( prop in dataShow ) ) {\n\t\t\tdataShow[ prop ] = propTween.start;\n\t\t\tif ( hidden ) {\n\t\t\t\tpropTween.end = propTween.start;\n\t\t\t\tpropTween.start = 0;\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction propFilter( props, specialEasing ) {\n\tvar index, name, easing, value, hooks;\n\n\t// camelCase, specialEasing and expand cssHook pass\n\tfor ( index in props ) {\n\t\tname = camelCase( index );\n\t\teasing = specialEasing[ name ];\n\t\tvalue = props[ index ];\n\t\tif ( Array.isArray( value ) ) {\n\t\t\teasing = value[ 1 ];\n\t\t\tvalue = props[ index ] = value[ 0 ];\n\t\t}\n\n\t\tif ( index !== name ) {\n\t\t\tprops[ name ] = value;\n\t\t\tdelete props[ index ];\n\t\t}\n\n\t\thooks = jQuery.cssHooks[ name ];\n\t\tif ( hooks && \"expand\" in hooks ) {\n\t\t\tvalue = hooks.expand( value );\n\t\t\tdelete props[ name ];\n\n\t\t\t// Not quite $.extend, this won't overwrite existing keys.\n\t\t\t// Reusing 'index' because we have the correct \"name\"\n\t\t\tfor ( index in value ) {\n\t\t\t\tif ( !( index in props ) ) {\n\t\t\t\t\tprops[ index ] = value[ index ];\n\t\t\t\t\tspecialEasing[ index ] = easing;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tspecialEasing[ name ] = easing;\n\t\t}\n\t}\n}\n\nfunction Animation( elem, properties, options ) {\n\tvar result,\n\t\tstopped,\n\t\tindex = 0,\n\t\tlength = Animation.prefilters.length,\n\t\tdeferred = jQuery.Deferred().always( function() {\n\n\t\t\t// Don't match elem in the :animated selector\n\t\t\tdelete tick.elem;\n\t\t} ),\n\t\ttick = function() {\n\t\t\tif ( stopped ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tvar currentTime = fxNow || createFxNow(),\n\t\t\t\tremaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),\n\n\t\t\t\t// Support: Android 2.3 only\n\t\t\t\t// Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497)\n\t\t\t\ttemp = remaining / animation.duration || 0,\n\t\t\t\tpercent = 1 - temp,\n\t\t\t\tindex = 0,\n\t\t\t\tlength = animation.tweens.length;\n\n\t\t\tfor ( ; index < length; index++ ) {\n\t\t\t\tanimation.tweens[ index ].run( percent );\n\t\t\t}\n\n\t\t\tdeferred.notifyWith( elem, [ animation, percent, remaining ] );\n\n\t\t\t// If there's more to do, yield\n\t\t\tif ( percent < 1 && length ) {\n\t\t\t\treturn remaining;\n\t\t\t}\n\n\t\t\t// If this was an empty animation, synthesize a final progress notification\n\t\t\tif ( !length ) {\n\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t}\n\n\t\t\t// Resolve the animation and report its conclusion\n\t\t\tdeferred.resolveWith( elem, [ animation ] );\n\t\t\treturn false;\n\t\t},\n\t\tanimation = deferred.promise( {\n\t\t\telem: elem,\n\t\t\tprops: jQuery.extend( {}, properties ),\n\t\t\topts: jQuery.extend( true, {\n\t\t\t\tspecialEasing: {},\n\t\t\t\teasing: jQuery.easing._default\n\t\t\t}, options ),\n\t\t\toriginalProperties: properties,\n\t\t\toriginalOptions: options,\n\t\t\tstartTime: fxNow || createFxNow(),\n\t\t\tduration: options.duration,\n\t\t\ttweens: [],\n\t\t\tcreateTween: function( prop, end ) {\n\t\t\t\tvar tween = jQuery.Tween( elem, animation.opts, prop, end,\n\t\t\t\t\t\tanimation.opts.specialEasing[ prop ] || animation.opts.easing );\n\t\t\t\tanimation.tweens.push( tween );\n\t\t\t\treturn tween;\n\t\t\t},\n\t\t\tstop: function( gotoEnd ) {\n\t\t\t\tvar index = 0,\n\n\t\t\t\t\t// If we are going to the end, we want to run all the tweens\n\t\t\t\t\t// otherwise we skip this part\n\t\t\t\t\tlength = gotoEnd ? animation.tweens.length : 0;\n\t\t\t\tif ( stopped ) {\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t\tstopped = true;\n\t\t\t\tfor ( ; index < length; index++ ) {\n\t\t\t\t\tanimation.tweens[ index ].run( 1 );\n\t\t\t\t}\n\n\t\t\t\t// Resolve when we played the last frame; otherwise, reject\n\t\t\t\tif ( gotoEnd ) {\n\t\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t\t\tdeferred.resolveWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t} else {\n\t\t\t\t\tdeferred.rejectWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} ),\n\t\tprops = animation.props;\n\n\tpropFilter( props, animation.opts.specialEasing );\n\n\tfor ( ; index < length; index++ ) {\n\t\tresult = Animation.prefilters[ index ].call( animation, elem, props, animation.opts );\n\t\tif ( result ) {\n\t\t\tif ( isFunction( result.stop ) ) {\n\t\t\t\tjQuery._queueHooks( animation.elem, animation.opts.queue ).stop =\n\t\t\t\t\tresult.stop.bind( result );\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\t}\n\n\tjQuery.map( props, createTween, animation );\n\n\tif ( isFunction( animation.opts.start ) ) {\n\t\tanimation.opts.start.call( elem, animation );\n\t}\n\n\t// Attach callbacks from options\n\tanimation\n\t\t.progress( animation.opts.progress )\n\t\t.done( animation.opts.done, animation.opts.complete )\n\t\t.fail( animation.opts.fail )\n\t\t.always( animation.opts.always );\n\n\tjQuery.fx.timer(\n\t\tjQuery.extend( tick, {\n\t\t\telem: elem,\n\t\t\tanim: animation,\n\t\t\tqueue: animation.opts.queue\n\t\t} )\n\t);\n\n\treturn animation;\n}\n\njQuery.Animation = jQuery.extend( Animation, {\n\n\ttweeners: {\n\t\t\"*\": [ function( prop, value ) {\n\t\t\tvar tween = this.createTween( prop, value );\n\t\t\tadjustCSS( tween.elem, prop, rcssNum.exec( value ), tween );\n\t\t\treturn tween;\n\t\t} ]\n\t},\n\n\ttweener: function( props, callback ) {\n\t\tif ( isFunction( props ) ) {\n\t\t\tcallback = props;\n\t\t\tprops = [ \"*\" ];\n\t\t} else {\n\t\t\tprops = props.match( rnothtmlwhite );\n\t\t}\n\n\t\tvar prop,\n\t\t\tindex = 0,\n\t\t\tlength = props.length;\n\n\t\tfor ( ; index < length; index++ ) {\n\t\t\tprop = props[ index ];\n\t\t\tAnimation.tweeners[ prop ] = Animation.tweeners[ prop ] || [];\n\t\t\tAnimation.tweeners[ prop ].unshift( callback );\n\t\t}\n\t},\n\n\tprefilters: [ defaultPrefilter ],\n\n\tprefilter: function( callback, prepend ) {\n\t\tif ( prepend ) {\n\t\t\tAnimation.prefilters.unshift( callback );\n\t\t} else {\n\t\t\tAnimation.prefilters.push( callback );\n\t\t}\n\t}\n} );\n\njQuery.speed = function( speed, easing, fn ) {\n\tvar opt = speed && typeof speed === \"object\" ? jQuery.extend( {}, speed ) : {\n\t\tcomplete: fn || !fn && easing ||\n\t\t\tisFunction( speed ) && speed,\n\t\tduration: speed,\n\t\teasing: fn && easing || easing && !isFunction( easing ) && easing\n\t};\n\n\t// Go to the end state if fx are off\n\tif ( jQuery.fx.off ) {\n\t\topt.duration = 0;\n\n\t} else {\n\t\tif ( typeof opt.duration !== \"number\" ) {\n\t\t\tif ( opt.duration in jQuery.fx.speeds ) {\n\t\t\t\topt.duration = jQuery.fx.speeds[ opt.duration ];\n\n\t\t\t} else {\n\t\t\t\topt.duration = jQuery.fx.speeds._default;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Normalize opt.queue - true/undefined/null -> \"fx\"\n\tif ( opt.queue == null || opt.queue === true ) {\n\t\topt.queue = \"fx\";\n\t}\n\n\t// Queueing\n\topt.old = opt.complete;\n\n\topt.complete = function() {\n\t\tif ( isFunction( opt.old ) ) {\n\t\t\topt.old.call( this );\n\t\t}\n\n\t\tif ( opt.queue ) {\n\t\t\tjQuery.dequeue( this, opt.queue );\n\t\t}\n\t};\n\n\treturn opt;\n};\n\njQuery.fn.extend( {\n\tfadeTo: function( speed, to, easing, callback ) {\n\n\t\t// Show any hidden elements after setting opacity to 0\n\t\treturn this.filter( isHiddenWithinTree ).css( \"opacity\", 0 ).show()\n\n\t\t\t// Animate to the value specified\n\t\t\t.end().animate( { opacity: to }, speed, easing, callback );\n\t},\n\tanimate: function( prop, speed, easing, callback ) {\n\t\tvar empty = jQuery.isEmptyObject( prop ),\n\t\t\toptall = jQuery.speed( speed, easing, callback ),\n\t\t\tdoAnimation = function() {\n\n\t\t\t\t// Operate on a copy of prop so per-property easing won't be lost\n\t\t\t\tvar anim = Animation( this, jQuery.extend( {}, prop ), optall );\n\n\t\t\t\t// Empty animations, or finishing resolves immediately\n\t\t\t\tif ( empty || dataPriv.get( this, \"finish\" ) ) {\n\t\t\t\t\tanim.stop( true );\n\t\t\t\t}\n\t\t\t};\n\t\t\tdoAnimation.finish = doAnimation;\n\n\t\treturn empty || optall.queue === false ?\n\t\t\tthis.each( doAnimation ) :\n\t\t\tthis.queue( optall.queue, doAnimation );\n\t},\n\tstop: function( type, clearQueue, gotoEnd ) {\n\t\tvar stopQueue = function( hooks ) {\n\t\t\tvar stop = hooks.stop;\n\t\t\tdelete hooks.stop;\n\t\t\tstop( gotoEnd );\n\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tgotoEnd = clearQueue;\n\t\t\tclearQueue = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\tif ( clearQueue && type !== false ) {\n\t\t\tthis.queue( type || \"fx\", [] );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar dequeue = true,\n\t\t\t\tindex = type != null && type + \"queueHooks\",\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tdata = dataPriv.get( this );\n\n\t\t\tif ( index ) {\n\t\t\t\tif ( data[ index ] && data[ index ].stop ) {\n\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor ( index in data ) {\n\t\t\t\t\tif ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {\n\t\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this &&\n\t\t\t\t\t( type == null || timers[ index ].queue === type ) ) {\n\n\t\t\t\t\ttimers[ index ].anim.stop( gotoEnd );\n\t\t\t\t\tdequeue = false;\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Start the next in the queue if the last step wasn't forced.\n\t\t\t// Timers currently will call their complete callbacks, which\n\t\t\t// will dequeue but only if they were gotoEnd.\n\t\t\tif ( dequeue || !gotoEnd ) {\n\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t}\n\t\t} );\n\t},\n\tfinish: function( type ) {\n\t\tif ( type !== false ) {\n\t\t\ttype = type || \"fx\";\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tvar index,\n\t\t\t\tdata = dataPriv.get( this ),\n\t\t\t\tqueue = data[ type + \"queue\" ],\n\t\t\t\thooks = data[ type + \"queueHooks\" ],\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tlength = queue ? queue.length : 0;\n\n\t\t\t// Enable finishing flag on private data\n\t\t\tdata.finish = true;\n\n\t\t\t// Empty the queue first\n\t\t\tjQuery.queue( this, type, [] );\n\n\t\t\tif ( hooks && hooks.stop ) {\n\t\t\t\thooks.stop.call( this, true );\n\t\t\t}\n\n\t\t\t// Look for any active animations, and finish them\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this && timers[ index ].queue === type ) {\n\t\t\t\t\ttimers[ index ].anim.stop( true );\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Look for any animations in the old queue and finish them\n\t\t\tfor ( index = 0; index < length; index++ ) {\n\t\t\t\tif ( queue[ index ] && queue[ index ].finish ) {\n\t\t\t\t\tqueue[ index ].finish.call( this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Turn off finishing flag\n\t\t\tdelete data.finish;\n\t\t} );\n\t}\n} );\n\njQuery.each( [ \"toggle\", \"show\", \"hide\" ], function( i, name ) {\n\tvar cssFn = jQuery.fn[ name ];\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn speed == null || typeof speed === \"boolean\" ?\n\t\t\tcssFn.apply( this, arguments ) :\n\t\t\tthis.animate( genFx( name, true ), speed, easing, callback );\n\t};\n} );\n\n// Generate shortcuts for custom animations\njQuery.each( {\n\tslideDown: genFx( \"show\" ),\n\tslideUp: genFx( \"hide\" ),\n\tslideToggle: genFx( \"toggle\" ),\n\tfadeIn: { opacity: \"show\" },\n\tfadeOut: { opacity: \"hide\" },\n\tfadeToggle: { opacity: \"toggle\" }\n}, function( name, props ) {\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn this.animate( props, speed, easing, callback );\n\t};\n} );\n\njQuery.timers = [];\njQuery.fx.tick = function() {\n\tvar timer,\n\t\ti = 0,\n\t\ttimers = jQuery.timers;\n\n\tfxNow = Date.now();\n\n\tfor ( ; i < timers.length; i++ ) {\n\t\ttimer = timers[ i ];\n\n\t\t// Run the timer and safely remove it when done (allowing for external removal)\n\t\tif ( !timer() && timers[ i ] === timer ) {\n\t\t\ttimers.splice( i--, 1 );\n\t\t}\n\t}\n\n\tif ( !timers.length ) {\n\t\tjQuery.fx.stop();\n\t}\n\tfxNow = undefined;\n};\n\njQuery.fx.timer = function( timer ) {\n\tjQuery.timers.push( timer );\n\tjQuery.fx.start();\n};\n\njQuery.fx.interval = 13;\njQuery.fx.start = function() {\n\tif ( inProgress ) {\n\t\treturn;\n\t}\n\n\tinProgress = true;\n\tschedule();\n};\n\njQuery.fx.stop = function() {\n\tinProgress = null;\n};\n\njQuery.fx.speeds = {\n\tslow: 600,\n\tfast: 200,\n\n\t// Default speed\n\t_default: 400\n};\n\n\n// Based off of the plugin by Clint Helfers, with permission.\n// https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/\njQuery.fn.delay = function( time, type ) {\n\ttime = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;\n\ttype = type || \"fx\";\n\n\treturn this.queue( type, function( next, hooks ) {\n\t\tvar timeout = window.setTimeout( next, time );\n\t\thooks.stop = function() {\n\t\t\twindow.clearTimeout( timeout );\n\t\t};\n\t} );\n};\n\n\n( function() {\n\tvar input = document.createElement( \"input\" ),\n\t\tselect = document.createElement( \"select\" ),\n\t\topt = select.appendChild( document.createElement( \"option\" ) );\n\n\tinput.type = \"checkbox\";\n\n\t// Support: Android <=4.3 only\n\t// Default value for a checkbox should be \"on\"\n\tsupport.checkOn = input.value !== \"\";\n\n\t// Support: IE <=11 only\n\t// Must access selectedIndex to make default options select\n\tsupport.optSelected = opt.selected;\n\n\t// Support: IE <=11 only\n\t// An input loses its value after becoming a radio\n\tinput = document.createElement( \"input\" );\n\tinput.value = \"t\";\n\tinput.type = \"radio\";\n\tsupport.radioValue = input.value === \"t\";\n} )();\n\n\nvar boolHook,\n\tattrHandle = jQuery.expr.attrHandle;\n\njQuery.fn.extend( {\n\tattr: function( name, value ) {\n\t\treturn access( this, jQuery.attr, name, value, arguments.length > 1 );\n\t},\n\n\tremoveAttr: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.removeAttr( this, name );\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tattr: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set attributes on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Fallback to prop when attributes are not supported\n\t\tif ( typeof elem.getAttribute === \"undefined\" ) {\n\t\t\treturn jQuery.prop( elem, name, value );\n\t\t}\n\n\t\t// Attribute hooks are determined by the lowercase version\n\t\t// Grab necessary hook if one is defined\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\t\t\thooks = jQuery.attrHooks[ name.toLowerCase() ] ||\n\t\t\t\t( jQuery.expr.match.bool.test( name ) ? boolHook : undefined );\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( value === null ) {\n\t\t\t\tjQuery.removeAttr( elem, name );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\telem.setAttribute( name, value + \"\" );\n\t\t\treturn value;\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\tret = jQuery.find.attr( elem, name );\n\n\t\t// Non-existent attributes return null, we normalize to undefined\n\t\treturn ret == null ? undefined : ret;\n\t},\n\n\tattrHooks: {\n\t\ttype: {\n\t\t\tset: function( elem, value ) {\n\t\t\t\tif ( !support.radioValue && value === \"radio\" &&\n\t\t\t\t\tnodeName( elem, \"input\" ) ) {\n\t\t\t\t\tvar val = elem.value;\n\t\t\t\t\telem.setAttribute( \"type\", value );\n\t\t\t\t\tif ( val ) {\n\t\t\t\t\t\telem.value = val;\n\t\t\t\t\t}\n\t\t\t\t\treturn value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\tremoveAttr: function( elem, value ) {\n\t\tvar name,\n\t\t\ti = 0,\n\n\t\t\t// Attribute names can contain non-HTML whitespace characters\n\t\t\t// https://html.spec.whatwg.org/multipage/syntax.html#attributes-2\n\t\t\tattrNames = value && value.match( rnothtmlwhite );\n\n\t\tif ( attrNames && elem.nodeType === 1 ) {\n\t\t\twhile ( ( name = attrNames[ i++ ] ) ) {\n\t\t\t\telem.removeAttribute( name );\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Hooks for boolean attributes\nboolHook = {\n\tset: function( elem, value, name ) {\n\t\tif ( value === false ) {\n\n\t\t\t// Remove boolean attributes when set to false\n\t\t\tjQuery.removeAttr( elem, name );\n\t\t} else {\n\t\t\telem.setAttribute( name, name );\n\t\t}\n\t\treturn name;\n\t}\n};\n\njQuery.each( jQuery.expr.match.bool.source.match( /\\w+/g ), function( i, name ) {\n\tvar getter = attrHandle[ name ] || jQuery.find.attr;\n\n\tattrHandle[ name ] = function( elem, name, isXML ) {\n\t\tvar ret, handle,\n\t\t\tlowercaseName = name.toLowerCase();\n\n\t\tif ( !isXML ) {\n\n\t\t\t// Avoid an infinite loop by temporarily removing this function from the getter\n\t\t\thandle = attrHandle[ lowercaseName ];\n\t\t\tattrHandle[ lowercaseName ] = ret;\n\t\t\tret = getter( elem, name, isXML ) != null ?\n\t\t\t\tlowercaseName :\n\t\t\t\tnull;\n\t\t\tattrHandle[ lowercaseName ] = handle;\n\t\t}\n\t\treturn ret;\n\t};\n} );\n\n\n\n\nvar rfocusable = /^(?:input|select|textarea|button)$/i,\n\trclickable = /^(?:a|area)$/i;\n\njQuery.fn.extend( {\n\tprop: function( name, value ) {\n\t\treturn access( this, jQuery.prop, name, value, arguments.length > 1 );\n\t},\n\n\tremoveProp: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tdelete this[ jQuery.propFix[ name ] || name ];\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tprop: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set properties on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// Fix name and attach hooks\n\t\t\tname = jQuery.propFix[ name ] || name;\n\t\t\thooks = jQuery.propHooks[ name ];\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\treturn ( elem[ name ] = value );\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\treturn elem[ name ];\n\t},\n\n\tpropHooks: {\n\t\ttabIndex: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\t// Support: IE <=9 - 11 only\n\t\t\t\t// elem.tabIndex doesn't always return the\n\t\t\t\t// correct value when it hasn't been explicitly set\n\t\t\t\t// https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/\n\t\t\t\t// Use proper attribute retrieval(#12072)\n\t\t\t\tvar tabindex = jQuery.find.attr( elem, \"tabindex\" );\n\n\t\t\t\tif ( tabindex ) {\n\t\t\t\t\treturn parseInt( tabindex, 10 );\n\t\t\t\t}\n\n\t\t\t\tif (\n\t\t\t\t\trfocusable.test( elem.nodeName ) ||\n\t\t\t\t\trclickable.test( elem.nodeName ) &&\n\t\t\t\t\telem.href\n\t\t\t\t) {\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t},\n\n\tpropFix: {\n\t\t\"for\": \"htmlFor\",\n\t\t\"class\": \"className\"\n\t}\n} );\n\n// Support: IE <=11 only\n// Accessing the selectedIndex property\n// forces the browser to respect setting selected\n// on the option\n// The getter ensures a default option is selected\n// when in an optgroup\n// eslint rule \"no-unused-expressions\" is disabled for this code\n// since it considers such accessions noop\nif ( !support.optSelected ) {\n\tjQuery.propHooks.selected = {\n\t\tget: function( elem ) {\n\n\t\t\t/* eslint no-unused-expressions: \"off\" */\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent && parent.parentNode ) {\n\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t}\n\t\t\treturn null;\n\t\t},\n\t\tset: function( elem ) {\n\n\t\t\t/* eslint no-unused-expressions: \"off\" */\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent ) {\n\t\t\t\tparent.selectedIndex;\n\n\t\t\t\tif ( parent.parentNode ) {\n\t\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\njQuery.each( [\n\t\"tabIndex\",\n\t\"readOnly\",\n\t\"maxLength\",\n\t\"cellSpacing\",\n\t\"cellPadding\",\n\t\"rowSpan\",\n\t\"colSpan\",\n\t\"useMap\",\n\t\"frameBorder\",\n\t\"contentEditable\"\n], function() {\n\tjQuery.propFix[ this.toLowerCase() ] = this;\n} );\n\n\n\n\n\t// Strip and collapse whitespace according to HTML spec\n\t// https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace\n\tfunction stripAndCollapse( value ) {\n\t\tvar tokens = value.match( rnothtmlwhite ) || [];\n\t\treturn tokens.join( \" \" );\n\t}\n\n\nfunction getClass( elem ) {\n\treturn elem.getAttribute && elem.getAttribute( \"class\" ) || \"\";\n}\n\nfunction classesToArray( value ) {\n\tif ( Array.isArray( value ) ) {\n\t\treturn value;\n\t}\n\tif ( typeof value === \"string\" ) {\n\t\treturn value.match( rnothtmlwhite ) || [];\n\t}\n\treturn [];\n}\n\njQuery.fn.extend( {\n\taddClass: function( value ) {\n\t\tvar classes, elem, cur, curValue, clazz, j, finalValue,\n\t\t\ti = 0;\n\n\t\tif ( isFunction( value ) ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).addClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tclasses = classesToArray( value );\n\n\t\tif ( classes.length ) {\n\t\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\t\tcurValue = getClass( elem );\n\t\t\t\tcur = elem.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( ( clazz = classes[ j++ ] ) ) {\n\t\t\t\t\t\tif ( cur.indexOf( \" \" + clazz + \" \" ) < 0 ) {\n\t\t\t\t\t\t\tcur += clazz + \" \";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\telem.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tremoveClass: function( value ) {\n\t\tvar classes, elem, cur, curValue, clazz, j, finalValue,\n\t\t\ti = 0;\n\n\t\tif ( isFunction( value ) ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).removeClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tif ( !arguments.length ) {\n\t\t\treturn this.attr( \"class\", \"\" );\n\t\t}\n\n\t\tclasses = classesToArray( value );\n\n\t\tif ( classes.length ) {\n\t\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\t\tcurValue = getClass( elem );\n\n\t\t\t\t// This expression is here for better compressibility (see addClass)\n\t\t\t\tcur = elem.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( ( clazz = classes[ j++ ] ) ) {\n\n\t\t\t\t\t\t// Remove *all* instances\n\t\t\t\t\t\twhile ( cur.indexOf( \" \" + clazz + \" \" ) > -1 ) {\n\t\t\t\t\t\t\tcur = cur.replace( \" \" + clazz + \" \", \" \" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\telem.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\ttoggleClass: function( value, stateVal ) {\n\t\tvar type = typeof value,\n\t\t\tisValidValue = type === \"string\" || Array.isArray( value );\n\n\t\tif ( typeof stateVal === \"boolean\" && isValidValue ) {\n\t\t\treturn stateVal ? this.addClass( value ) : this.removeClass( value );\n\t\t}\n\n\t\tif ( isFunction( value ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).toggleClass(\n\t\t\t\t\tvalue.call( this, i, getClass( this ), stateVal ),\n\t\t\t\t\tstateVal\n\t\t\t\t);\n\t\t\t} );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar className, i, self, classNames;\n\n\t\t\tif ( isValidValue ) {\n\n\t\t\t\t// Toggle individual class names\n\t\t\t\ti = 0;\n\t\t\t\tself = jQuery( this );\n\t\t\t\tclassNames = classesToArray( value );\n\n\t\t\t\twhile ( ( className = classNames[ i++ ] ) ) {\n\n\t\t\t\t\t// Check each className given, space separated list\n\t\t\t\t\tif ( self.hasClass( className ) ) {\n\t\t\t\t\t\tself.removeClass( className );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tself.addClass( className );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t// Toggle whole class name\n\t\t\t} else if ( value === undefined || type === \"boolean\" ) {\n\t\t\t\tclassName = getClass( this );\n\t\t\t\tif ( className ) {\n\n\t\t\t\t\t// Store className if set\n\t\t\t\t\tdataPriv.set( this, \"__className__\", className );\n\t\t\t\t}\n\n\t\t\t\t// If the element has a class name or if we're passed `false`,\n\t\t\t\t// then remove the whole classname (if there was one, the above saved it).\n\t\t\t\t// Otherwise bring back whatever was previously saved (if anything),\n\t\t\t\t// falling back to the empty string if nothing was stored.\n\t\t\t\tif ( this.setAttribute ) {\n\t\t\t\t\tthis.setAttribute( \"class\",\n\t\t\t\t\t\tclassName || value === false ?\n\t\t\t\t\t\t\"\" :\n\t\t\t\t\t\tdataPriv.get( this, \"__className__\" ) || \"\"\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\thasClass: function( selector ) {\n\t\tvar className, elem,\n\t\t\ti = 0;\n\n\t\tclassName = \" \" + selector + \" \";\n\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\tif ( elem.nodeType === 1 &&\n\t\t\t\t( \" \" + stripAndCollapse( getClass( elem ) ) + \" \" ).indexOf( className ) > -1 ) {\n\t\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n} );\n\n\n\n\nvar rreturn = /\\r/g;\n\njQuery.fn.extend( {\n\tval: function( value ) {\n\t\tvar hooks, ret, valueIsFunction,\n\t\t\telem = this[ 0 ];\n\n\t\tif ( !arguments.length ) {\n\t\t\tif ( elem ) {\n\t\t\t\thooks = jQuery.valHooks[ elem.type ] ||\n\t\t\t\t\tjQuery.valHooks[ elem.nodeName.toLowerCase() ];\n\n\t\t\t\tif ( hooks &&\n\t\t\t\t\t\"get\" in hooks &&\n\t\t\t\t\t( ret = hooks.get( elem, \"value\" ) ) !== undefined\n\t\t\t\t) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\tret = elem.value;\n\n\t\t\t\t// Handle most common string cases\n\t\t\t\tif ( typeof ret === \"string\" ) {\n\t\t\t\t\treturn ret.replace( rreturn, \"\" );\n\t\t\t\t}\n\n\t\t\t\t// Handle cases where value is null/undef or number\n\t\t\t\treturn ret == null ? \"\" : ret;\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tvalueIsFunction = isFunction( value );\n\n\t\treturn this.each( function( i ) {\n\t\t\tvar val;\n\n\t\t\tif ( this.nodeType !== 1 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( valueIsFunction ) {\n\t\t\t\tval = value.call( this, i, jQuery( this ).val() );\n\t\t\t} else {\n\t\t\t\tval = value;\n\t\t\t}\n\n\t\t\t// Treat null/undefined as \"\"; convert numbers to string\n\t\t\tif ( val == null ) {\n\t\t\t\tval = \"\";\n\n\t\t\t} else if ( typeof val === \"number\" ) {\n\t\t\t\tval += \"\";\n\n\t\t\t} else if ( Array.isArray( val ) ) {\n\t\t\t\tval = jQuery.map( val, function( value ) {\n\t\t\t\t\treturn value == null ? \"\" : value + \"\";\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\thooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];\n\n\t\t\t// If set returns undefined, fall back to normal setting\n\t\t\tif ( !hooks || !( \"set\" in hooks ) || hooks.set( this, val, \"value\" ) === undefined ) {\n\t\t\t\tthis.value = val;\n\t\t\t}\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tvalHooks: {\n\t\toption: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\tvar val = jQuery.find.attr( elem, \"value\" );\n\t\t\t\treturn val != null ?\n\t\t\t\t\tval :\n\n\t\t\t\t\t// Support: IE <=10 - 11 only\n\t\t\t\t\t// option.text throws exceptions (#14686, #14858)\n\t\t\t\t\t// Strip and collapse whitespace\n\t\t\t\t\t// https://html.spec.whatwg.org/#strip-and-collapse-whitespace\n\t\t\t\t\tstripAndCollapse( jQuery.text( elem ) );\n\t\t\t}\n\t\t},\n\t\tselect: {\n\t\t\tget: function( elem ) {\n\t\t\t\tvar value, option, i,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tindex = elem.selectedIndex,\n\t\t\t\t\tone = elem.type === \"select-one\",\n\t\t\t\t\tvalues = one ? null : [],\n\t\t\t\t\tmax = one ? index + 1 : options.length;\n\n\t\t\t\tif ( index < 0 ) {\n\t\t\t\t\ti = max;\n\n\t\t\t\t} else {\n\t\t\t\t\ti = one ? index : 0;\n\t\t\t\t}\n\n\t\t\t\t// Loop through all the selected options\n\t\t\t\tfor ( ; i < max; i++ ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t// IE8-9 doesn't update selected after form reset (#2551)\n\t\t\t\t\tif ( ( option.selected || i === index ) &&\n\n\t\t\t\t\t\t\t// Don't return options that are disabled or in a disabled optgroup\n\t\t\t\t\t\t\t!option.disabled &&\n\t\t\t\t\t\t\t( !option.parentNode.disabled ||\n\t\t\t\t\t\t\t\t!nodeName( option.parentNode, \"optgroup\" ) ) ) {\n\n\t\t\t\t\t\t// Get the specific value for the option\n\t\t\t\t\t\tvalue = jQuery( option ).val();\n\n\t\t\t\t\t\t// We don't need an array for one selects\n\t\t\t\t\t\tif ( one ) {\n\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Multi-Selects return an array\n\t\t\t\t\t\tvalues.push( value );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn values;\n\t\t\t},\n\n\t\t\tset: function( elem, value ) {\n\t\t\t\tvar optionSet, option,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tvalues = jQuery.makeArray( value ),\n\t\t\t\t\ti = options.length;\n\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\t/* eslint-disable no-cond-assign */\n\n\t\t\t\t\tif ( option.selected =\n\t\t\t\t\t\tjQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1\n\t\t\t\t\t) {\n\t\t\t\t\t\toptionSet = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t/* eslint-enable no-cond-assign */\n\t\t\t\t}\n\n\t\t\t\t// Force browsers to behave consistently when non-matching value is set\n\t\t\t\tif ( !optionSet ) {\n\t\t\t\t\telem.selectedIndex = -1;\n\t\t\t\t}\n\t\t\t\treturn values;\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Radios and checkboxes getter/setter\njQuery.each( [ \"radio\", \"checkbox\" ], function() {\n\tjQuery.valHooks[ this ] = {\n\t\tset: function( elem, value ) {\n\t\t\tif ( Array.isArray( value ) ) {\n\t\t\t\treturn ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 );\n\t\t\t}\n\t\t}\n\t};\n\tif ( !support.checkOn ) {\n\t\tjQuery.valHooks[ this ].get = function( elem ) {\n\t\t\treturn elem.getAttribute( \"value\" ) === null ? \"on\" : elem.value;\n\t\t};\n\t}\n} );\n\n\n\n\n// Return jQuery for attributes-only inclusion\n\n\nsupport.focusin = \"onfocusin\" in window;\n\n\nvar rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,\n\tstopPropagationCallback = function( e ) {\n\t\te.stopPropagation();\n\t};\n\njQuery.extend( jQuery.event, {\n\n\ttrigger: function( event, data, elem, onlyHandlers ) {\n\n\t\tvar i, cur, tmp, bubbleType, ontype, handle, special, lastElement,\n\t\t\teventPath = [ elem || document ],\n\t\t\ttype = hasOwn.call( event, \"type\" ) ? event.type : event,\n\t\t\tnamespaces = hasOwn.call( event, \"namespace\" ) ? event.namespace.split( \".\" ) : [];\n\n\t\tcur = lastElement = tmp = elem = elem || document;\n\n\t\t// Don't do events on text and comment nodes\n\t\tif ( elem.nodeType === 3 || elem.nodeType === 8 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// focus/blur morphs to focusin/out; ensure we're not firing them right now\n\t\tif ( rfocusMorph.test( type + jQuery.event.triggered ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( type.indexOf( \".\" ) > -1 ) {\n\n\t\t\t// Namespaced trigger; create a regexp to match event type in handle()\n\t\t\tnamespaces = type.split( \".\" );\n\t\t\ttype = namespaces.shift();\n\t\t\tnamespaces.sort();\n\t\t}\n\t\tontype = type.indexOf( \":\" ) < 0 && \"on\" + type;\n\n\t\t// Caller can pass in a jQuery.Event object, Object, or just an event type string\n\t\tevent = event[ jQuery.expando ] ?\n\t\t\tevent :\n\t\t\tnew jQuery.Event( type, typeof event === \"object\" && event );\n\n\t\t// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)\n\t\tevent.isTrigger = onlyHandlers ? 2 : 3;\n\t\tevent.namespace = namespaces.join( \".\" );\n\t\tevent.rnamespace = event.namespace ?\n\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" ) :\n\t\t\tnull;\n\n\t\t// Clean up the event in case it is being reused\n\t\tevent.result = undefined;\n\t\tif ( !event.target ) {\n\t\t\tevent.target = elem;\n\t\t}\n\n\t\t// Clone any incoming data and prepend the event, creating the handler arg list\n\t\tdata = data == null ?\n\t\t\t[ event ] :\n\t\t\tjQuery.makeArray( data, [ event ] );\n\n\t\t// Allow special events to draw outside the lines\n\t\tspecial = jQuery.event.special[ type ] || {};\n\t\tif ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine event propagation path in advance, per W3C events spec (#9951)\n\t\t// Bubble up to document, then to window; watch for a global ownerDocument var (#9724)\n\t\tif ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) {\n\n\t\t\tbubbleType = special.delegateType || type;\n\t\t\tif ( !rfocusMorph.test( bubbleType + type ) ) {\n\t\t\t\tcur = cur.parentNode;\n\t\t\t}\n\t\t\tfor ( ; cur; cur = cur.parentNode ) {\n\t\t\t\teventPath.push( cur );\n\t\t\t\ttmp = cur;\n\t\t\t}\n\n\t\t\t// Only add window if we got to document (e.g., not plain obj or detached DOM)\n\t\t\tif ( tmp === ( elem.ownerDocument || document ) ) {\n\t\t\t\teventPath.push( tmp.defaultView || tmp.parentWindow || window );\n\t\t\t}\n\t\t}\n\n\t\t// Fire handlers on the event path\n\t\ti = 0;\n\t\twhile ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tlastElement = cur;\n\t\t\tevent.type = i > 1 ?\n\t\t\t\tbubbleType :\n\t\t\t\tspecial.bindType || type;\n\n\t\t\t// jQuery handler\n\t\t\thandle = ( dataPriv.get( cur, \"events\" ) || {} )[ event.type ] &&\n\t\t\t\tdataPriv.get( cur, \"handle\" );\n\t\t\tif ( handle ) {\n\t\t\t\thandle.apply( cur, data );\n\t\t\t}\n\n\t\t\t// Native handler\n\t\t\thandle = ontype && cur[ ontype ];\n\t\t\tif ( handle && handle.apply && acceptData( cur ) ) {\n\t\t\t\tevent.result = handle.apply( cur, data );\n\t\t\t\tif ( event.result === false ) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tevent.type = type;\n\n\t\t// If nobody prevented the default action, do it now\n\t\tif ( !onlyHandlers && !event.isDefaultPrevented() ) {\n\n\t\t\tif ( ( !special._default ||\n\t\t\t\tspecial._default.apply( eventPath.pop(), data ) === false ) &&\n\t\t\t\tacceptData( elem ) ) {\n\n\t\t\t\t// Call a native DOM method on the target with the same name as the event.\n\t\t\t\t// Don't do default actions on window, that's where global variables be (#6170)\n\t\t\t\tif ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) {\n\n\t\t\t\t\t// Don't re-trigger an onFOO event when we call its FOO() method\n\t\t\t\t\ttmp = elem[ ontype ];\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = null;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prevent re-triggering of the same event, since we already bubbled it above\n\t\t\t\t\tjQuery.event.triggered = type;\n\n\t\t\t\t\tif ( event.isPropagationStopped() ) {\n\t\t\t\t\t\tlastElement.addEventListener( type, stopPropagationCallback );\n\t\t\t\t\t}\n\n\t\t\t\t\telem[ type ]();\n\n\t\t\t\t\tif ( event.isPropagationStopped() ) {\n\t\t\t\t\t\tlastElement.removeEventListener( type, stopPropagationCallback );\n\t\t\t\t\t}\n\n\t\t\t\t\tjQuery.event.triggered = undefined;\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = tmp;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\t// Piggyback on a donor event to simulate a different one\n\t// Used only for `focus(in | out)` events\n\tsimulate: function( type, elem, event ) {\n\t\tvar e = jQuery.extend(\n\t\t\tnew jQuery.Event(),\n\t\t\tevent,\n\t\t\t{\n\t\t\t\ttype: type,\n\t\t\t\tisSimulated: true\n\t\t\t}\n\t\t);\n\n\t\tjQuery.event.trigger( e, null, elem );\n\t}\n\n} );\n\njQuery.fn.extend( {\n\n\ttrigger: function( type, data ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.trigger( type, data, this );\n\t\t} );\n\t},\n\ttriggerHandler: function( type, data ) {\n\t\tvar elem = this[ 0 ];\n\t\tif ( elem ) {\n\t\t\treturn jQuery.event.trigger( type, data, elem, true );\n\t\t}\n\t}\n} );\n\n\n// Support: Firefox <=44\n// Firefox doesn't have focus(in | out) events\n// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787\n//\n// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1\n// focus(in | out) events fire after focus & blur events,\n// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order\n// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857\nif ( !support.focusin ) {\n\tjQuery.each( { focus: \"focusin\", blur: \"focusout\" }, function( orig, fix ) {\n\n\t\t// Attach a single capturing handler on the document while someone wants focusin/focusout\n\t\tvar handler = function( event ) {\n\t\t\tjQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) );\n\t\t};\n\n\t\tjQuery.event.special[ fix ] = {\n\t\t\tsetup: function() {\n\t\t\t\tvar doc = this.ownerDocument || this,\n\t\t\t\t\tattaches = dataPriv.access( doc, fix );\n\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tdoc.addEventListener( orig, handler, true );\n\t\t\t\t}\n\t\t\t\tdataPriv.access( doc, fix, ( attaches || 0 ) + 1 );\n\t\t\t},\n\t\t\tteardown: function() {\n\t\t\t\tvar doc = this.ownerDocument || this,\n\t\t\t\t\tattaches = dataPriv.access( doc, fix ) - 1;\n\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tdoc.removeEventListener( orig, handler, true );\n\t\t\t\t\tdataPriv.remove( doc, fix );\n\n\t\t\t\t} else {\n\t\t\t\t\tdataPriv.access( doc, fix, attaches );\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t} );\n}\nvar location = window.location;\n\nvar nonce = Date.now();\n\nvar rquery = ( /\\?/ );\n\n\n\n// Cross-browser xml parsing\njQuery.parseXML = function( data ) {\n\tvar xml;\n\tif ( !data || typeof data !== \"string\" ) {\n\t\treturn null;\n\t}\n\n\t// Support: IE 9 - 11 only\n\t// IE throws on parseFromString with invalid input.\n\ttry {\n\t\txml = ( new window.DOMParser() ).parseFromString( data, \"text/xml\" );\n\t} catch ( e ) {\n\t\txml = undefined;\n\t}\n\n\tif ( !xml || xml.getElementsByTagName( \"parsererror\" ).length ) {\n\t\tjQuery.error( \"Invalid XML: \" + data );\n\t}\n\treturn xml;\n};\n\n\nvar\n\trbracket = /\\[\\]$/,\n\trCRLF = /\\r?\\n/g,\n\trsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,\n\trsubmittable = /^(?:input|select|textarea|keygen)/i;\n\nfunction buildParams( prefix, obj, traditional, add ) {\n\tvar name;\n\n\tif ( Array.isArray( obj ) ) {\n\n\t\t// Serialize array item.\n\t\tjQuery.each( obj, function( i, v ) {\n\t\t\tif ( traditional || rbracket.test( prefix ) ) {\n\n\t\t\t\t// Treat each array item as a scalar.\n\t\t\t\tadd( prefix, v );\n\n\t\t\t} else {\n\n\t\t\t\t// Item is non-scalar (array or object), encode its numeric index.\n\t\t\t\tbuildParams(\n\t\t\t\t\tprefix + \"[\" + ( typeof v === \"object\" && v != null ? i : \"\" ) + \"]\",\n\t\t\t\t\tv,\n\t\t\t\t\ttraditional,\n\t\t\t\t\tadd\n\t\t\t\t);\n\t\t\t}\n\t\t} );\n\n\t} else if ( !traditional && toType( obj ) === \"object\" ) {\n\n\t\t// Serialize object item.\n\t\tfor ( name in obj ) {\n\t\t\tbuildParams( prefix + \"[\" + name + \"]\", obj[ name ], traditional, add );\n\t\t}\n\n\t} else {\n\n\t\t// Serialize scalar item.\n\t\tadd( prefix, obj );\n\t}\n}\n\n// Serialize an array of form elements or a set of\n// key/values into a query string\njQuery.param = function( a, traditional ) {\n\tvar prefix,\n\t\ts = [],\n\t\tadd = function( key, valueOrFunction ) {\n\n\t\t\t// If value is a function, invoke it and use its return value\n\t\t\tvar value = isFunction( valueOrFunction ) ?\n\t\t\t\tvalueOrFunction() :\n\t\t\t\tvalueOrFunction;\n\n\t\t\ts[ s.length ] = encodeURIComponent( key ) + \"=\" +\n\t\t\t\tencodeURIComponent( value == null ? \"\" : value );\n\t\t};\n\n\t// If an array was passed in, assume that it is an array of form elements.\n\tif ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {\n\n\t\t// Serialize the form elements\n\t\tjQuery.each( a, function() {\n\t\t\tadd( this.name, this.value );\n\t\t} );\n\n\t} else {\n\n\t\t// If traditional, encode the \"old\" way (the way 1.3.2 or older\n\t\t// did it), otherwise encode params recursively.\n\t\tfor ( prefix in a ) {\n\t\t\tbuildParams( prefix, a[ prefix ], traditional, add );\n\t\t}\n\t}\n\n\t// Return the resulting serialization\n\treturn s.join( \"&\" );\n};\n\njQuery.fn.extend( {\n\tserialize: function() {\n\t\treturn jQuery.param( this.serializeArray() );\n\t},\n\tserializeArray: function() {\n\t\treturn this.map( function() {\n\n\t\t\t// Can add propHook for \"elements\" to filter or add form elements\n\t\t\tvar elements = jQuery.prop( this, \"elements\" );\n\t\t\treturn elements ? jQuery.makeArray( elements ) : this;\n\t\t} )\n\t\t.filter( function() {\n\t\t\tvar type = this.type;\n\n\t\t\t// Use .is( \":disabled\" ) so that fieldset[disabled] works\n\t\t\treturn this.name && !jQuery( this ).is( \":disabled\" ) &&\n\t\t\t\trsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&\n\t\t\t\t( this.checked || !rcheckableType.test( type ) );\n\t\t} )\n\t\t.map( function( i, elem ) {\n\t\t\tvar val = jQuery( this ).val();\n\n\t\t\tif ( val == null ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tif ( Array.isArray( val ) ) {\n\t\t\t\treturn jQuery.map( val, function( val ) {\n\t\t\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t} ).get();\n\t}\n} );\n\n\nvar\n\tr20 = /%20/g,\n\trhash = /#.*$/,\n\trantiCache = /([?&])_=[^&]*/,\n\trheaders = /^(.*?):[ \\t]*([^\\r\\n]*)$/mg,\n\n\t// #7653, #8125, #8152: local protocol detection\n\trlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,\n\trnoContent = /^(?:GET|HEAD)$/,\n\trprotocol = /^\\/\\//,\n\n\t/* Prefilters\n\t * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)\n\t * 2) These are called:\n\t * - BEFORE asking for a transport\n\t * - AFTER param serialization (s.data is a string if s.processData is true)\n\t * 3) key is the dataType\n\t * 4) the catchall symbol \"*\" can be used\n\t * 5) execution will start with transport dataType and THEN continue down to \"*\" if needed\n\t */\n\tprefilters = {},\n\n\t/* Transports bindings\n\t * 1) key is the dataType\n\t * 2) the catchall symbol \"*\" can be used\n\t * 3) selection will start with transport dataType and THEN go to \"*\" if needed\n\t */\n\ttransports = {},\n\n\t// Avoid comment-prolog char sequence (#10098); must appease lint and evade compression\n\tallTypes = \"*/\".concat( \"*\" ),\n\n\t// Anchor tag for parsing the document origin\n\toriginAnchor = document.createElement( \"a\" );\n\toriginAnchor.href = location.href;\n\n// Base \"constructor\" for jQuery.ajaxPrefilter and jQuery.ajaxTransport\nfunction addToPrefiltersOrTransports( structure ) {\n\n\t// dataTypeExpression is optional and defaults to \"*\"\n\treturn function( dataTypeExpression, func ) {\n\n\t\tif ( typeof dataTypeExpression !== \"string\" ) {\n\t\t\tfunc = dataTypeExpression;\n\t\t\tdataTypeExpression = \"*\";\n\t\t}\n\n\t\tvar dataType,\n\t\t\ti = 0,\n\t\t\tdataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || [];\n\n\t\tif ( isFunction( func ) ) {\n\n\t\t\t// For each dataType in the dataTypeExpression\n\t\t\twhile ( ( dataType = dataTypes[ i++ ] ) ) {\n\n\t\t\t\t// Prepend if requested\n\t\t\t\tif ( dataType[ 0 ] === \"+\" ) {\n\t\t\t\t\tdataType = dataType.slice( 1 ) || \"*\";\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func );\n\n\t\t\t\t// Otherwise append\n\t\t\t\t} else {\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).push( func );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\n// Base inspection function for prefilters and transports\nfunction inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {\n\n\tvar inspected = {},\n\t\tseekingTransport = ( structure === transports );\n\n\tfunction inspect( dataType ) {\n\t\tvar selected;\n\t\tinspected[ dataType ] = true;\n\t\tjQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {\n\t\t\tvar dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );\n\t\t\tif ( typeof dataTypeOrTransport === \"string\" &&\n\t\t\t\t!seekingTransport && !inspected[ dataTypeOrTransport ] ) {\n\n\t\t\t\toptions.dataTypes.unshift( dataTypeOrTransport );\n\t\t\t\tinspect( dataTypeOrTransport );\n\t\t\t\treturn false;\n\t\t\t} else if ( seekingTransport ) {\n\t\t\t\treturn !( selected = dataTypeOrTransport );\n\t\t\t}\n\t\t} );\n\t\treturn selected;\n\t}\n\n\treturn inspect( options.dataTypes[ 0 ] ) || !inspected[ \"*\" ] && inspect( \"*\" );\n}\n\n// A special extend for ajax options\n// that takes \"flat\" options (not to be deep extended)\n// Fixes #9887\nfunction ajaxExtend( target, src ) {\n\tvar key, deep,\n\t\tflatOptions = jQuery.ajaxSettings.flatOptions || {};\n\n\tfor ( key in src ) {\n\t\tif ( src[ key ] !== undefined ) {\n\t\t\t( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];\n\t\t}\n\t}\n\tif ( deep ) {\n\t\tjQuery.extend( true, target, deep );\n\t}\n\n\treturn target;\n}\n\n/* Handles responses to an ajax request:\n * - finds the right dataType (mediates between content-type and expected dataType)\n * - returns the corresponding response\n */\nfunction ajaxHandleResponses( s, jqXHR, responses ) {\n\n\tvar ct, type, finalDataType, firstDataType,\n\t\tcontents = s.contents,\n\t\tdataTypes = s.dataTypes;\n\n\t// Remove auto dataType and get content-type in the process\n\twhile ( dataTypes[ 0 ] === \"*\" ) {\n\t\tdataTypes.shift();\n\t\tif ( ct === undefined ) {\n\t\t\tct = s.mimeType || jqXHR.getResponseHeader( \"Content-Type\" );\n\t\t}\n\t}\n\n\t// Check if we're dealing with a known content-type\n\tif ( ct ) {\n\t\tfor ( type in contents ) {\n\t\t\tif ( contents[ type ] && contents[ type ].test( ct ) ) {\n\t\t\t\tdataTypes.unshift( type );\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Check to see if we have a response for the expected dataType\n\tif ( dataTypes[ 0 ] in responses ) {\n\t\tfinalDataType = dataTypes[ 0 ];\n\t} else {\n\n\t\t// Try convertible dataTypes\n\t\tfor ( type in responses ) {\n\t\t\tif ( !dataTypes[ 0 ] || s.converters[ type + \" \" + dataTypes[ 0 ] ] ) {\n\t\t\t\tfinalDataType = type;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( !firstDataType ) {\n\t\t\t\tfirstDataType = type;\n\t\t\t}\n\t\t}\n\n\t\t// Or just use first one\n\t\tfinalDataType = finalDataType || firstDataType;\n\t}\n\n\t// If we found a dataType\n\t// We add the dataType to the list if needed\n\t// and return the corresponding response\n\tif ( finalDataType ) {\n\t\tif ( finalDataType !== dataTypes[ 0 ] ) {\n\t\t\tdataTypes.unshift( finalDataType );\n\t\t}\n\t\treturn responses[ finalDataType ];\n\t}\n}\n\n/* Chain conversions given the request and the original response\n * Also sets the responseXXX fields on the jqXHR instance\n */\nfunction ajaxConvert( s, response, jqXHR, isSuccess ) {\n\tvar conv2, current, conv, tmp, prev,\n\t\tconverters = {},\n\n\t\t// Work with a copy of dataTypes in case we need to modify it for conversion\n\t\tdataTypes = s.dataTypes.slice();\n\n\t// Create converters map with lowercased keys\n\tif ( dataTypes[ 1 ] ) {\n\t\tfor ( conv in s.converters ) {\n\t\t\tconverters[ conv.toLowerCase() ] = s.converters[ conv ];\n\t\t}\n\t}\n\n\tcurrent = dataTypes.shift();\n\n\t// Convert to each sequential dataType\n\twhile ( current ) {\n\n\t\tif ( s.responseFields[ current ] ) {\n\t\t\tjqXHR[ s.responseFields[ current ] ] = response;\n\t\t}\n\n\t\t// Apply the dataFilter if provided\n\t\tif ( !prev && isSuccess && s.dataFilter ) {\n\t\t\tresponse = s.dataFilter( response, s.dataType );\n\t\t}\n\n\t\tprev = current;\n\t\tcurrent = dataTypes.shift();\n\n\t\tif ( current ) {\n\n\t\t\t// There's only work to do if current dataType is non-auto\n\t\t\tif ( current === \"*\" ) {\n\n\t\t\t\tcurrent = prev;\n\n\t\t\t// Convert response if prev dataType is non-auto and differs from current\n\t\t\t} else if ( prev !== \"*\" && prev !== current ) {\n\n\t\t\t\t// Seek a direct converter\n\t\t\t\tconv = converters[ prev + \" \" + current ] || converters[ \"* \" + current ];\n\n\t\t\t\t// If none found, seek a pair\n\t\t\t\tif ( !conv ) {\n\t\t\t\t\tfor ( conv2 in converters ) {\n\n\t\t\t\t\t\t// If conv2 outputs current\n\t\t\t\t\t\ttmp = conv2.split( \" \" );\n\t\t\t\t\t\tif ( tmp[ 1 ] === current ) {\n\n\t\t\t\t\t\t\t// If prev can be converted to accepted input\n\t\t\t\t\t\t\tconv = converters[ prev + \" \" + tmp[ 0 ] ] ||\n\t\t\t\t\t\t\t\tconverters[ \"* \" + tmp[ 0 ] ];\n\t\t\t\t\t\t\tif ( conv ) {\n\n\t\t\t\t\t\t\t\t// Condense equivalence converters\n\t\t\t\t\t\t\t\tif ( conv === true ) {\n\t\t\t\t\t\t\t\t\tconv = converters[ conv2 ];\n\n\t\t\t\t\t\t\t\t// Otherwise, insert the intermediate dataType\n\t\t\t\t\t\t\t\t} else if ( converters[ conv2 ] !== true ) {\n\t\t\t\t\t\t\t\t\tcurrent = tmp[ 0 ];\n\t\t\t\t\t\t\t\t\tdataTypes.unshift( tmp[ 1 ] );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Apply converter (if not an equivalence)\n\t\t\t\tif ( conv !== true ) {\n\n\t\t\t\t\t// Unless errors are allowed to bubble, catch and return them\n\t\t\t\t\tif ( conv && s.throws ) {\n\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t\t} catch ( e ) {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tstate: \"parsererror\",\n\t\t\t\t\t\t\t\terror: conv ? e : \"No conversion from \" + prev + \" to \" + current\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn { state: \"success\", data: response };\n}\n\njQuery.extend( {\n\n\t// Counter for holding the number of active queries\n\tactive: 0,\n\n\t// Last-Modified header cache for next request\n\tlastModified: {},\n\tetag: {},\n\n\tajaxSettings: {\n\t\turl: location.href,\n\t\ttype: \"GET\",\n\t\tisLocal: rlocalProtocol.test( location.protocol ),\n\t\tglobal: true,\n\t\tprocessData: true,\n\t\tasync: true,\n\t\tcontentType: \"application/x-www-form-urlencoded; charset=UTF-8\",\n\n\t\t/*\n\t\ttimeout: 0,\n\t\tdata: null,\n\t\tdataType: null,\n\t\tusername: null,\n\t\tpassword: null,\n\t\tcache: null,\n\t\tthrows: false,\n\t\ttraditional: false,\n\t\theaders: {},\n\t\t*/\n\n\t\taccepts: {\n\t\t\t\"*\": allTypes,\n\t\t\ttext: \"text/plain\",\n\t\t\thtml: \"text/html\",\n\t\t\txml: \"application/xml, text/xml\",\n\t\t\tjson: \"application/json, text/javascript\"\n\t\t},\n\n\t\tcontents: {\n\t\t\txml: /\\bxml\\b/,\n\t\t\thtml: /\\bhtml/,\n\t\t\tjson: /\\bjson\\b/\n\t\t},\n\n\t\tresponseFields: {\n\t\t\txml: \"responseXML\",\n\t\t\ttext: \"responseText\",\n\t\t\tjson: \"responseJSON\"\n\t\t},\n\n\t\t// Data converters\n\t\t// Keys separate source (or catchall \"*\") and destination types with a single space\n\t\tconverters: {\n\n\t\t\t// Convert anything to text\n\t\t\t\"* text\": String,\n\n\t\t\t// Text to html (true = no transformation)\n\t\t\t\"text html\": true,\n\n\t\t\t// Evaluate text as a json expression\n\t\t\t\"text json\": JSON.parse,\n\n\t\t\t// Parse text as xml\n\t\t\t\"text xml\": jQuery.parseXML\n\t\t},\n\n\t\t// For options that shouldn't be deep extended:\n\t\t// you can add your own custom options here if\n\t\t// and when you create one that shouldn't be\n\t\t// deep extended (see ajaxExtend)\n\t\tflatOptions: {\n\t\t\turl: true,\n\t\t\tcontext: true\n\t\t}\n\t},\n\n\t// Creates a full fledged settings object into target\n\t// with both ajaxSettings and settings fields.\n\t// If target is omitted, writes into ajaxSettings.\n\tajaxSetup: function( target, settings ) {\n\t\treturn settings ?\n\n\t\t\t// Building a settings object\n\t\t\tajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :\n\n\t\t\t// Extending ajaxSettings\n\t\t\tajaxExtend( jQuery.ajaxSettings, target );\n\t},\n\n\tajaxPrefilter: addToPrefiltersOrTransports( prefilters ),\n\tajaxTransport: addToPrefiltersOrTransports( transports ),\n\n\t// Main method\n\tajax: function( url, options ) {\n\n\t\t// If url is an object, simulate pre-1.5 signature\n\t\tif ( typeof url === \"object\" ) {\n\t\t\toptions = url;\n\t\t\turl = undefined;\n\t\t}\n\n\t\t// Force options to be an object\n\t\toptions = options || {};\n\n\t\tvar transport,\n\n\t\t\t// URL without anti-cache param\n\t\t\tcacheURL,\n\n\t\t\t// Response headers\n\t\t\tresponseHeadersString,\n\t\t\tresponseHeaders,\n\n\t\t\t// timeout handle\n\t\t\ttimeoutTimer,\n\n\t\t\t// Url cleanup var\n\t\t\turlAnchor,\n\n\t\t\t// Request state (becomes false upon send and true upon completion)\n\t\t\tcompleted,\n\n\t\t\t// To know if global events are to be dispatched\n\t\t\tfireGlobals,\n\n\t\t\t// Loop variable\n\t\t\ti,\n\n\t\t\t// uncached part of the url\n\t\t\tuncached,\n\n\t\t\t// Create the final options object\n\t\t\ts = jQuery.ajaxSetup( {}, options ),\n\n\t\t\t// Callbacks context\n\t\t\tcallbackContext = s.context || s,\n\n\t\t\t// Context for global events is callbackContext if it is a DOM node or jQuery collection\n\t\t\tglobalEventContext = s.context &&\n\t\t\t\t( callbackContext.nodeType || callbackContext.jquery ) ?\n\t\t\t\t\tjQuery( callbackContext ) :\n\t\t\t\t\tjQuery.event,\n\n\t\t\t// Deferreds\n\t\t\tdeferred = jQuery.Deferred(),\n\t\t\tcompleteDeferred = jQuery.Callbacks( \"once memory\" ),\n\n\t\t\t// Status-dependent callbacks\n\t\t\tstatusCode = s.statusCode || {},\n\n\t\t\t// Headers (they are sent all at once)\n\t\t\trequestHeaders = {},\n\t\t\trequestHeadersNames = {},\n\n\t\t\t// Default abort message\n\t\t\tstrAbort = \"canceled\",\n\n\t\t\t// Fake xhr\n\t\t\tjqXHR = {\n\t\t\t\treadyState: 0,\n\n\t\t\t\t// Builds headers hashtable if needed\n\t\t\t\tgetResponseHeader: function( key ) {\n\t\t\t\t\tvar match;\n\t\t\t\t\tif ( completed ) {\n\t\t\t\t\t\tif ( !responseHeaders ) {\n\t\t\t\t\t\t\tresponseHeaders = {};\n\t\t\t\t\t\t\twhile ( ( match = rheaders.exec( responseHeadersString ) ) ) {\n\t\t\t\t\t\t\t\tresponseHeaders[ match[ 1 ].toLowerCase() ] = match[ 2 ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmatch = responseHeaders[ key.toLowerCase() ];\n\t\t\t\t\t}\n\t\t\t\t\treturn match == null ? null : match;\n\t\t\t\t},\n\n\t\t\t\t// Raw string\n\t\t\t\tgetAllResponseHeaders: function() {\n\t\t\t\t\treturn completed ? responseHeadersString : null;\n\t\t\t\t},\n\n\t\t\t\t// Caches the header\n\t\t\t\tsetRequestHeader: function( name, value ) {\n\t\t\t\t\tif ( completed == null ) {\n\t\t\t\t\t\tname = requestHeadersNames[ name.toLowerCase() ] =\n\t\t\t\t\t\t\trequestHeadersNames[ name.toLowerCase() ] || name;\n\t\t\t\t\t\trequestHeaders[ name ] = value;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Overrides response content-type header\n\t\t\t\toverrideMimeType: function( type ) {\n\t\t\t\t\tif ( completed == null ) {\n\t\t\t\t\t\ts.mimeType = type;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Status-dependent callbacks\n\t\t\t\tstatusCode: function( map ) {\n\t\t\t\t\tvar code;\n\t\t\t\t\tif ( map ) {\n\t\t\t\t\t\tif ( completed ) {\n\n\t\t\t\t\t\t\t// Execute the appropriate callbacks\n\t\t\t\t\t\t\tjqXHR.always( map[ jqXHR.status ] );\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Lazy-add the new callbacks in a way that preserves old ones\n\t\t\t\t\t\t\tfor ( code in map ) {\n\t\t\t\t\t\t\t\tstatusCode[ code ] = [ statusCode[ code ], map[ code ] ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Cancel the request\n\t\t\t\tabort: function( statusText ) {\n\t\t\t\t\tvar finalText = statusText || strAbort;\n\t\t\t\t\tif ( transport ) {\n\t\t\t\t\t\ttransport.abort( finalText );\n\t\t\t\t\t}\n\t\t\t\t\tdone( 0, finalText );\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t};\n\n\t\t// Attach deferreds\n\t\tdeferred.promise( jqXHR );\n\n\t\t// Add protocol if not provided (prefilters might expect it)\n\t\t// Handle falsy url in the settings object (#10093: consistency with old signature)\n\t\t// We also use the url parameter if available\n\t\ts.url = ( ( url || s.url || location.href ) + \"\" )\n\t\t\t.replace( rprotocol, location.protocol + \"//\" );\n\n\t\t// Alias method option to type as per ticket #12004\n\t\ts.type = options.method || options.type || s.method || s.type;\n\n\t\t// Extract dataTypes list\n\t\ts.dataTypes = ( s.dataType || \"*\" ).toLowerCase().match( rnothtmlwhite ) || [ \"\" ];\n\n\t\t// A cross-domain request is in order when the origin doesn't match the current origin.\n\t\tif ( s.crossDomain == null ) {\n\t\t\turlAnchor = document.createElement( \"a\" );\n\n\t\t\t// Support: IE <=8 - 11, Edge 12 - 15\n\t\t\t// IE throws exception on accessing the href property if url is malformed,\n\t\t\t// e.g. http://example.com:80x/\n\t\t\ttry {\n\t\t\t\turlAnchor.href = s.url;\n\n\t\t\t\t// Support: IE <=8 - 11 only\n\t\t\t\t// Anchor's host property isn't correctly set when s.url is relative\n\t\t\t\turlAnchor.href = urlAnchor.href;\n\t\t\t\ts.crossDomain = originAnchor.protocol + \"//\" + originAnchor.host !==\n\t\t\t\t\turlAnchor.protocol + \"//\" + urlAnchor.host;\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// If there is an error parsing the URL, assume it is crossDomain,\n\t\t\t\t// it can be rejected by the transport if it is invalid\n\t\t\t\ts.crossDomain = true;\n\t\t\t}\n\t\t}\n\n\t\t// Convert data if not already a string\n\t\tif ( s.data && s.processData && typeof s.data !== \"string\" ) {\n\t\t\ts.data = jQuery.param( s.data, s.traditional );\n\t\t}\n\n\t\t// Apply prefilters\n\t\tinspectPrefiltersOrTransports( prefilters, s, options, jqXHR );\n\n\t\t// If request was aborted inside a prefilter, stop there\n\t\tif ( completed ) {\n\t\t\treturn jqXHR;\n\t\t}\n\n\t\t// We can fire global events as of now if asked to\n\t\t// Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118)\n\t\tfireGlobals = jQuery.event && s.global;\n\n\t\t// Watch for a new set of requests\n\t\tif ( fireGlobals && jQuery.active++ === 0 ) {\n\t\t\tjQuery.event.trigger( \"ajaxStart\" );\n\t\t}\n\n\t\t// Uppercase the type\n\t\ts.type = s.type.toUpperCase();\n\n\t\t// Determine if request has content\n\t\ts.hasContent = !rnoContent.test( s.type );\n\n\t\t// Save the URL in case we're toying with the If-Modified-Since\n\t\t// and/or If-None-Match header later on\n\t\t// Remove hash to simplify url manipulation\n\t\tcacheURL = s.url.replace( rhash, \"\" );\n\n\t\t// More options handling for requests with no content\n\t\tif ( !s.hasContent ) {\n\n\t\t\t// Remember the hash so we can put it back\n\t\t\tuncached = s.url.slice( cacheURL.length );\n\n\t\t\t// If data is available and should be processed, append data to url\n\t\t\tif ( s.data && ( s.processData || typeof s.data === \"string\" ) ) {\n\t\t\t\tcacheURL += ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + s.data;\n\n\t\t\t\t// #9682: remove data so that it's not used in an eventual retry\n\t\t\t\tdelete s.data;\n\t\t\t}\n\n\t\t\t// Add or update anti-cache param if needed\n\t\t\tif ( s.cache === false ) {\n\t\t\t\tcacheURL = cacheURL.replace( rantiCache, \"$1\" );\n\t\t\t\tuncached = ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + \"_=\" + ( nonce++ ) + uncached;\n\t\t\t}\n\n\t\t\t// Put hash and anti-cache on the URL that will be requested (gh-1732)\n\t\t\ts.url = cacheURL + uncached;\n\n\t\t// Change '%20' to '+' if this is encoded form body content (gh-2658)\n\t\t} else if ( s.data && s.processData &&\n\t\t\t( s.contentType || \"\" ).indexOf( \"application/x-www-form-urlencoded\" ) === 0 ) {\n\t\t\ts.data = s.data.replace( r20, \"+\" );\n\t\t}\n\n\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\tif ( s.ifModified ) {\n\t\t\tif ( jQuery.lastModified[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-Modified-Since\", jQuery.lastModified[ cacheURL ] );\n\t\t\t}\n\t\t\tif ( jQuery.etag[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-None-Match\", jQuery.etag[ cacheURL ] );\n\t\t\t}\n\t\t}\n\n\t\t// Set the correct header, if data is being sent\n\t\tif ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {\n\t\t\tjqXHR.setRequestHeader( \"Content-Type\", s.contentType );\n\t\t}\n\n\t\t// Set the Accepts header for the server, depending on the dataType\n\t\tjqXHR.setRequestHeader(\n\t\t\t\"Accept\",\n\t\t\ts.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ?\n\t\t\t\ts.accepts[ s.dataTypes[ 0 ] ] +\n\t\t\t\t\t( s.dataTypes[ 0 ] !== \"*\" ? \", \" + allTypes + \"; q=0.01\" : \"\" ) :\n\t\t\t\ts.accepts[ \"*\" ]\n\t\t);\n\n\t\t// Check for headers option\n\t\tfor ( i in s.headers ) {\n\t\t\tjqXHR.setRequestHeader( i, s.headers[ i ] );\n\t\t}\n\n\t\t// Allow custom headers/mimetypes and early abort\n\t\tif ( s.beforeSend &&\n\t\t\t( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) {\n\n\t\t\t// Abort if not done already and return\n\t\t\treturn jqXHR.abort();\n\t\t}\n\n\t\t// Aborting is no longer a cancellation\n\t\tstrAbort = \"abort\";\n\n\t\t// Install callbacks on deferreds\n\t\tcompleteDeferred.add( s.complete );\n\t\tjqXHR.done( s.success );\n\t\tjqXHR.fail( s.error );\n\n\t\t// Get transport\n\t\ttransport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );\n\n\t\t// If no transport, we auto-abort\n\t\tif ( !transport ) {\n\t\t\tdone( -1, \"No Transport\" );\n\t\t} else {\n\t\t\tjqXHR.readyState = 1;\n\n\t\t\t// Send global event\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxSend\", [ jqXHR, s ] );\n\t\t\t}\n\n\t\t\t// If request was aborted inside ajaxSend, stop there\n\t\t\tif ( completed ) {\n\t\t\t\treturn jqXHR;\n\t\t\t}\n\n\t\t\t// Timeout\n\t\t\tif ( s.async && s.timeout > 0 ) {\n\t\t\t\ttimeoutTimer = window.setTimeout( function() {\n\t\t\t\t\tjqXHR.abort( \"timeout\" );\n\t\t\t\t}, s.timeout );\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tcompleted = false;\n\t\t\t\ttransport.send( requestHeaders, done );\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// Rethrow post-completion exceptions\n\t\t\t\tif ( completed ) {\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\n\t\t\t\t// Propagate others as results\n\t\t\t\tdone( -1, e );\n\t\t\t}\n\t\t}\n\n\t\t// Callback for when everything is done\n\t\tfunction done( status, nativeStatusText, responses, headers ) {\n\t\t\tvar isSuccess, success, error, response, modified,\n\t\t\t\tstatusText = nativeStatusText;\n\n\t\t\t// Ignore repeat invocations\n\t\t\tif ( completed ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tcompleted = true;\n\n\t\t\t// Clear timeout if it exists\n\t\t\tif ( timeoutTimer ) {\n\t\t\t\twindow.clearTimeout( timeoutTimer );\n\t\t\t}\n\n\t\t\t// Dereference transport for early garbage collection\n\t\t\t// (no matter how long the jqXHR object will be used)\n\t\t\ttransport = undefined;\n\n\t\t\t// Cache response headers\n\t\t\tresponseHeadersString = headers || \"\";\n\n\t\t\t// Set readyState\n\t\t\tjqXHR.readyState = status > 0 ? 4 : 0;\n\n\t\t\t// Determine if successful\n\t\t\tisSuccess = status >= 200 && status < 300 || status === 304;\n\n\t\t\t// Get response data\n\t\t\tif ( responses ) {\n\t\t\t\tresponse = ajaxHandleResponses( s, jqXHR, responses );\n\t\t\t}\n\n\t\t\t// Convert no matter what (that way responseXXX fields are always set)\n\t\t\tresponse = ajaxConvert( s, response, jqXHR, isSuccess );\n\n\t\t\t// If successful, handle type chaining\n\t\t\tif ( isSuccess ) {\n\n\t\t\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\t\t\tif ( s.ifModified ) {\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"Last-Modified\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.lastModified[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"etag\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.etag[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// if no content\n\t\t\t\tif ( status === 204 || s.type === \"HEAD\" ) {\n\t\t\t\t\tstatusText = \"nocontent\";\n\n\t\t\t\t// if not modified\n\t\t\t\t} else if ( status === 304 ) {\n\t\t\t\t\tstatusText = \"notmodified\";\n\n\t\t\t\t// If we have data, let's convert it\n\t\t\t\t} else {\n\t\t\t\t\tstatusText = response.state;\n\t\t\t\t\tsuccess = response.data;\n\t\t\t\t\terror = response.error;\n\t\t\t\t\tisSuccess = !error;\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// Extract error from statusText and normalize for non-aborts\n\t\t\t\terror = statusText;\n\t\t\t\tif ( status || !statusText ) {\n\t\t\t\t\tstatusText = \"error\";\n\t\t\t\t\tif ( status < 0 ) {\n\t\t\t\t\t\tstatus = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Set data for the fake xhr object\n\t\t\tjqXHR.status = status;\n\t\t\tjqXHR.statusText = ( nativeStatusText || statusText ) + \"\";\n\n\t\t\t// Success/Error\n\t\t\tif ( isSuccess ) {\n\t\t\t\tdeferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );\n\t\t\t} else {\n\t\t\t\tdeferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );\n\t\t\t}\n\n\t\t\t// Status-dependent callbacks\n\t\t\tjqXHR.statusCode( statusCode );\n\t\t\tstatusCode = undefined;\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( isSuccess ? \"ajaxSuccess\" : \"ajaxError\",\n\t\t\t\t\t[ jqXHR, s, isSuccess ? success : error ] );\n\t\t\t}\n\n\t\t\t// Complete\n\t\t\tcompleteDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxComplete\", [ jqXHR, s ] );\n\n\t\t\t\t// Handle the global AJAX counter\n\t\t\t\tif ( !( --jQuery.active ) ) {\n\t\t\t\t\tjQuery.event.trigger( \"ajaxStop\" );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn jqXHR;\n\t},\n\n\tgetJSON: function( url, data, callback ) {\n\t\treturn jQuery.get( url, data, callback, \"json\" );\n\t},\n\n\tgetScript: function( url, callback ) {\n\t\treturn jQuery.get( url, undefined, callback, \"script\" );\n\t}\n} );\n\njQuery.each( [ \"get\", \"post\" ], function( i, method ) {\n\tjQuery[ method ] = function( url, data, callback, type ) {\n\n\t\t// Shift arguments if data argument was omitted\n\t\tif ( isFunction( data ) ) {\n\t\t\ttype = type || callback;\n\t\t\tcallback = data;\n\t\t\tdata = undefined;\n\t\t}\n\n\t\t// The url can be an options object (which then must have .url)\n\t\treturn jQuery.ajax( jQuery.extend( {\n\t\t\turl: url,\n\t\t\ttype: method,\n\t\t\tdataType: type,\n\t\t\tdata: data,\n\t\t\tsuccess: callback\n\t\t}, jQuery.isPlainObject( url ) && url ) );\n\t};\n} );\n\n\njQuery._evalUrl = function( url ) {\n\treturn jQuery.ajax( {\n\t\turl: url,\n\n\t\t// Make this explicit, since user can override this through ajaxSetup (#11264)\n\t\ttype: \"GET\",\n\t\tdataType: \"script\",\n\t\tcache: true,\n\t\tasync: false,\n\t\tglobal: false,\n\t\t\"throws\": true\n\t} );\n};\n\n\njQuery.fn.extend( {\n\twrapAll: function( html ) {\n\t\tvar wrap;\n\n\t\tif ( this[ 0 ] ) {\n\t\t\tif ( isFunction( html ) ) {\n\t\t\t\thtml = html.call( this[ 0 ] );\n\t\t\t}\n\n\t\t\t// The elements to wrap the target around\n\t\t\twrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );\n\n\t\t\tif ( this[ 0 ].parentNode ) {\n\t\t\t\twrap.insertBefore( this[ 0 ] );\n\t\t\t}\n\n\t\t\twrap.map( function() {\n\t\t\t\tvar elem = this;\n\n\t\t\t\twhile ( elem.firstElementChild ) {\n\t\t\t\t\telem = elem.firstElementChild;\n\t\t\t\t}\n\n\t\t\t\treturn elem;\n\t\t\t} ).append( this );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\twrapInner: function( html ) {\n\t\tif ( isFunction( html ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).wrapInner( html.call( this, i ) );\n\t\t\t} );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar self = jQuery( this ),\n\t\t\t\tcontents = self.contents();\n\n\t\t\tif ( contents.length ) {\n\t\t\t\tcontents.wrapAll( html );\n\n\t\t\t} else {\n\t\t\t\tself.append( html );\n\t\t\t}\n\t\t} );\n\t},\n\n\twrap: function( html ) {\n\t\tvar htmlIsFunction = isFunction( html );\n\n\t\treturn this.each( function( i ) {\n\t\t\tjQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html );\n\t\t} );\n\t},\n\n\tunwrap: function( selector ) {\n\t\tthis.parent( selector ).not( \"body\" ).each( function() {\n\t\t\tjQuery( this ).replaceWith( this.childNodes );\n\t\t} );\n\t\treturn this;\n\t}\n} );\n\n\njQuery.expr.pseudos.hidden = function( elem ) {\n\treturn !jQuery.expr.pseudos.visible( elem );\n};\njQuery.expr.pseudos.visible = function( elem ) {\n\treturn !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length );\n};\n\n\n\n\njQuery.ajaxSettings.xhr = function() {\n\ttry {\n\t\treturn new window.XMLHttpRequest();\n\t} catch ( e ) {}\n};\n\nvar xhrSuccessStatus = {\n\n\t\t// File protocol always yields status code 0, assume 200\n\t\t0: 200,\n\n\t\t// Support: IE <=9 only\n\t\t// #1450: sometimes IE returns 1223 when it should be 204\n\t\t1223: 204\n\t},\n\txhrSupported = jQuery.ajaxSettings.xhr();\n\nsupport.cors = !!xhrSupported && ( \"withCredentials\" in xhrSupported );\nsupport.ajax = xhrSupported = !!xhrSupported;\n\njQuery.ajaxTransport( function( options ) {\n\tvar callback, errorCallback;\n\n\t// Cross domain only allowed if supported through XMLHttpRequest\n\tif ( support.cors || xhrSupported && !options.crossDomain ) {\n\t\treturn {\n\t\t\tsend: function( headers, complete ) {\n\t\t\t\tvar i,\n\t\t\t\t\txhr = options.xhr();\n\n\t\t\t\txhr.open(\n\t\t\t\t\toptions.type,\n\t\t\t\t\toptions.url,\n\t\t\t\t\toptions.async,\n\t\t\t\t\toptions.username,\n\t\t\t\t\toptions.password\n\t\t\t\t);\n\n\t\t\t\t// Apply custom fields if provided\n\t\t\t\tif ( options.xhrFields ) {\n\t\t\t\t\tfor ( i in options.xhrFields ) {\n\t\t\t\t\t\txhr[ i ] = options.xhrFields[ i ];\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Override mime type if needed\n\t\t\t\tif ( options.mimeType && xhr.overrideMimeType ) {\n\t\t\t\t\txhr.overrideMimeType( options.mimeType );\n\t\t\t\t}\n\n\t\t\t\t// X-Requested-With header\n\t\t\t\t// For cross-domain requests, seeing as conditions for a preflight are\n\t\t\t\t// akin to a jigsaw puzzle, we simply never set it to be sure.\n\t\t\t\t// (it can always be set on a per-request basis or even using ajaxSetup)\n\t\t\t\t// For same-domain requests, won't change header if already provided.\n\t\t\t\tif ( !options.crossDomain && !headers[ \"X-Requested-With\" ] ) {\n\t\t\t\t\theaders[ \"X-Requested-With\" ] = \"XMLHttpRequest\";\n\t\t\t\t}\n\n\t\t\t\t// Set headers\n\t\t\t\tfor ( i in headers ) {\n\t\t\t\t\txhr.setRequestHeader( i, headers[ i ] );\n\t\t\t\t}\n\n\t\t\t\t// Callback\n\t\t\t\tcallback = function( type ) {\n\t\t\t\t\treturn function() {\n\t\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\t\tcallback = errorCallback = xhr.onload =\n\t\t\t\t\t\t\t\txhr.onerror = xhr.onabort = xhr.ontimeout =\n\t\t\t\t\t\t\t\t\txhr.onreadystatechange = null;\n\n\t\t\t\t\t\t\tif ( type === \"abort\" ) {\n\t\t\t\t\t\t\t\txhr.abort();\n\t\t\t\t\t\t\t} else if ( type === \"error\" ) {\n\n\t\t\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t\t\t// On a manual native abort, IE9 throws\n\t\t\t\t\t\t\t\t// errors on any property access that is not readyState\n\t\t\t\t\t\t\t\tif ( typeof xhr.status !== \"number\" ) {\n\t\t\t\t\t\t\t\t\tcomplete( 0, \"error\" );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tcomplete(\n\n\t\t\t\t\t\t\t\t\t\t// File: protocol always yields status 0; see #8605, #14207\n\t\t\t\t\t\t\t\t\t\txhr.status,\n\t\t\t\t\t\t\t\t\t\txhr.statusText\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tcomplete(\n\t\t\t\t\t\t\t\t\txhrSuccessStatus[ xhr.status ] || xhr.status,\n\t\t\t\t\t\t\t\t\txhr.statusText,\n\n\t\t\t\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t\t\t\t// IE9 has no XHR2 but throws on binary (trac-11426)\n\t\t\t\t\t\t\t\t\t// For XHR2 non-text, let the caller handle it (gh-2498)\n\t\t\t\t\t\t\t\t\t( xhr.responseType || \"text\" ) !== \"text\" ||\n\t\t\t\t\t\t\t\t\ttypeof xhr.responseText !== \"string\" ?\n\t\t\t\t\t\t\t\t\t\t{ binary: xhr.response } :\n\t\t\t\t\t\t\t\t\t\t{ text: xhr.responseText },\n\t\t\t\t\t\t\t\t\txhr.getAllResponseHeaders()\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t};\n\n\t\t\t\t// Listen to events\n\t\t\t\txhr.onload = callback();\n\t\t\t\terrorCallback = xhr.onerror = xhr.ontimeout = callback( \"error\" );\n\n\t\t\t\t// Support: IE 9 only\n\t\t\t\t// Use onreadystatechange to replace onabort\n\t\t\t\t// to handle uncaught aborts\n\t\t\t\tif ( xhr.onabort !== undefined ) {\n\t\t\t\t\txhr.onabort = errorCallback;\n\t\t\t\t} else {\n\t\t\t\t\txhr.onreadystatechange = function() {\n\n\t\t\t\t\t\t// Check readyState before timeout as it changes\n\t\t\t\t\t\tif ( xhr.readyState === 4 ) {\n\n\t\t\t\t\t\t\t// Allow onerror to be called first,\n\t\t\t\t\t\t\t// but that will not handle a native abort\n\t\t\t\t\t\t\t// Also, save errorCallback to a variable\n\t\t\t\t\t\t\t// as xhr.onerror cannot be accessed\n\t\t\t\t\t\t\twindow.setTimeout( function() {\n\t\t\t\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\t\t\t\terrorCallback();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\t// Create the abort callback\n\t\t\t\tcallback = callback( \"abort\" );\n\n\t\t\t\ttry {\n\n\t\t\t\t\t// Do send the request (this may raise an exception)\n\t\t\t\t\txhr.send( options.hasContent && options.data || null );\n\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t// #14683: Only rethrow if this hasn't been notified as an error yet\n\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\tthrow e;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tabort: function() {\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n} );\n\n\n\n\n// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432)\njQuery.ajaxPrefilter( function( s ) {\n\tif ( s.crossDomain ) {\n\t\ts.contents.script = false;\n\t}\n} );\n\n// Install script dataType\njQuery.ajaxSetup( {\n\taccepts: {\n\t\tscript: \"text/javascript, application/javascript, \" +\n\t\t\t\"application/ecmascript, application/x-ecmascript\"\n\t},\n\tcontents: {\n\t\tscript: /\\b(?:java|ecma)script\\b/\n\t},\n\tconverters: {\n\t\t\"text script\": function( text ) {\n\t\t\tjQuery.globalEval( text );\n\t\t\treturn text;\n\t\t}\n\t}\n} );\n\n// Handle cache's special case and crossDomain\njQuery.ajaxPrefilter( \"script\", function( s ) {\n\tif ( s.cache === undefined ) {\n\t\ts.cache = false;\n\t}\n\tif ( s.crossDomain ) {\n\t\ts.type = \"GET\";\n\t}\n} );\n\n// Bind script tag hack transport\njQuery.ajaxTransport( \"script\", function( s ) {\n\n\t// This transport only deals with cross domain requests\n\tif ( s.crossDomain ) {\n\t\tvar script, callback;\n\t\treturn {\n\t\t\tsend: function( _, complete ) {\n\t\t\t\tscript = jQuery( \"<script>\" ).prop( {\n\t\t\t\t\tcharset: s.scriptCharset,\n\t\t\t\t\tsrc: s.url\n\t\t\t\t} ).on(\n\t\t\t\t\t\"load error\",\n\t\t\t\t\tcallback = function( evt ) {\n\t\t\t\t\t\tscript.remove();\n\t\t\t\t\t\tcallback = null;\n\t\t\t\t\t\tif ( evt ) {\n\t\t\t\t\t\t\tcomplete( evt.type === \"error\" ? 404 : 200, evt.type );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t);\n\n\t\t\t\t// Use native DOM manipulation to avoid our domManip AJAX trickery\n\t\t\t\tdocument.head.appendChild( script[ 0 ] );\n\t\t\t},\n\t\t\tabort: function() {\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n} );\n\n\n\n\nvar oldCallbacks = [],\n\trjsonp = /(=)\\?(?=&|$)|\\?\\?/;\n\n// Default jsonp settings\njQuery.ajaxSetup( {\n\tjsonp: \"callback\",\n\tjsonpCallback: function() {\n\t\tvar callback = oldCallbacks.pop() || ( jQuery.expando + \"_\" + ( nonce++ ) );\n\t\tthis[ callback ] = true;\n\t\treturn callback;\n\t}\n} );\n\n// Detect, normalize options and install callbacks for jsonp requests\njQuery.ajaxPrefilter( \"json jsonp\", function( s, originalSettings, jqXHR ) {\n\n\tvar callbackName, overwritten, responseContainer,\n\t\tjsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?\n\t\t\t\"url\" :\n\t\t\ttypeof s.data === \"string\" &&\n\t\t\t\t( s.contentType || \"\" )\n\t\t\t\t\t.indexOf( \"application/x-www-form-urlencoded\" ) === 0 &&\n\t\t\t\trjsonp.test( s.data ) && \"data\"\n\t\t);\n\n\t// Handle iff the expected data type is \"jsonp\" or we have a parameter to set\n\tif ( jsonProp || s.dataTypes[ 0 ] === \"jsonp\" ) {\n\n\t\t// Get callback name, remembering preexisting value associated with it\n\t\tcallbackName = s.jsonpCallback = isFunction( s.jsonpCallback ) ?\n\t\t\ts.jsonpCallback() :\n\t\t\ts.jsonpCallback;\n\n\t\t// Insert callback into url or form data\n\t\tif ( jsonProp ) {\n\t\t\ts[ jsonProp ] = s[ jsonProp ].replace( rjsonp, \"$1\" + callbackName );\n\t\t} else if ( s.jsonp !== false ) {\n\t\t\ts.url += ( rquery.test( s.url ) ? \"&\" : \"?\" ) + s.jsonp + \"=\" + callbackName;\n\t\t}\n\n\t\t// Use data converter to retrieve json after script execution\n\t\ts.converters[ \"script json\" ] = function() {\n\t\t\tif ( !responseContainer ) {\n\t\t\t\tjQuery.error( callbackName + \" was not called\" );\n\t\t\t}\n\t\t\treturn responseContainer[ 0 ];\n\t\t};\n\n\t\t// Force json dataType\n\t\ts.dataTypes[ 0 ] = \"json\";\n\n\t\t// Install callback\n\t\toverwritten = window[ callbackName ];\n\t\twindow[ callbackName ] = function() {\n\t\t\tresponseContainer = arguments;\n\t\t};\n\n\t\t// Clean-up function (fires after converters)\n\t\tjqXHR.always( function() {\n\n\t\t\t// If previous value didn't exist - remove it\n\t\t\tif ( overwritten === undefined ) {\n\t\t\t\tjQuery( window ).removeProp( callbackName );\n\n\t\t\t// Otherwise restore preexisting value\n\t\t\t} else {\n\t\t\t\twindow[ callbackName ] = overwritten;\n\t\t\t}\n\n\t\t\t// Save back as free\n\t\t\tif ( s[ callbackName ] ) {\n\n\t\t\t\t// Make sure that re-using the options doesn't screw things around\n\t\t\t\ts.jsonpCallback = originalSettings.jsonpCallback;\n\n\t\t\t\t// Save the callback name for future use\n\t\t\t\toldCallbacks.push( callbackName );\n\t\t\t}\n\n\t\t\t// Call if it was a function and we have a response\n\t\t\tif ( responseContainer && isFunction( overwritten ) ) {\n\t\t\t\toverwritten( responseContainer[ 0 ] );\n\t\t\t}\n\n\t\t\tresponseContainer = overwritten = undefined;\n\t\t} );\n\n\t\t// Delegate to script\n\t\treturn \"script\";\n\t}\n} );\n\n\n\n\n// Support: Safari 8 only\n// In Safari 8 documents created via document.implementation.createHTMLDocument\n// collapse sibling forms: the second one becomes a child of the first one.\n// Because of that, this security measure has to be disabled in Safari 8.\n// https://bugs.webkit.org/show_bug.cgi?id=137337\nsupport.createHTMLDocument = ( function() {\n\tvar body = document.implementation.createHTMLDocument( \"\" ).body;\n\tbody.innerHTML = \"<form></form><form></form>\";\n\treturn body.childNodes.length === 2;\n} )();\n\n\n// Argument \"data\" should be string of html\n// context (optional): If specified, the fragment will be created in this context,\n// defaults to document\n// keepScripts (optional): If true, will include scripts passed in the html string\njQuery.parseHTML = function( data, context, keepScripts ) {\n\tif ( typeof data !== \"string\" ) {\n\t\treturn [];\n\t}\n\tif ( typeof context === \"boolean\" ) {\n\t\tkeepScripts = context;\n\t\tcontext = false;\n\t}\n\n\tvar base, parsed, scripts;\n\n\tif ( !context ) {\n\n\t\t// Stop scripts or inline event handlers from being executed immediately\n\t\t// by using document.implementation\n\t\tif ( support.createHTMLDocument ) {\n\t\t\tcontext = document.implementation.createHTMLDocument( \"\" );\n\n\t\t\t// Set the base href for the created document\n\t\t\t// so any parsed elements with URLs\n\t\t\t// are based on the document's URL (gh-2965)\n\t\t\tbase = context.createElement( \"base\" );\n\t\t\tbase.href = document.location.href;\n\t\t\tcontext.head.appendChild( base );\n\t\t} else {\n\t\t\tcontext = document;\n\t\t}\n\t}\n\n\tparsed = rsingleTag.exec( data );\n\tscripts = !keepScripts && [];\n\n\t// Single tag\n\tif ( parsed ) {\n\t\treturn [ context.createElement( parsed[ 1 ] ) ];\n\t}\n\n\tparsed = buildFragment( [ data ], context, scripts );\n\n\tif ( scripts && scripts.length ) {\n\t\tjQuery( scripts ).remove();\n\t}\n\n\treturn jQuery.merge( [], parsed.childNodes );\n};\n\n\n/**\n * Load a url into a page\n */\njQuery.fn.load = function( url, params, callback ) {\n\tvar selector, type, response,\n\t\tself = this,\n\t\toff = url.indexOf( \" \" );\n\n\tif ( off > -1 ) {\n\t\tselector = stripAndCollapse( url.slice( off ) );\n\t\turl = url.slice( 0, off );\n\t}\n\n\t// If it's a function\n\tif ( isFunction( params ) ) {\n\n\t\t// We assume that it's the callback\n\t\tcallback = params;\n\t\tparams = undefined;\n\n\t// Otherwise, build a param string\n\t} else if ( params && typeof params === \"object\" ) {\n\t\ttype = \"POST\";\n\t}\n\n\t// If we have elements to modify, make the request\n\tif ( self.length > 0 ) {\n\t\tjQuery.ajax( {\n\t\t\turl: url,\n\n\t\t\t// If \"type\" variable is undefined, then \"GET\" method will be used.\n\t\t\t// Make value of this field explicit since\n\t\t\t// user can override it through ajaxSetup method\n\t\t\ttype: type || \"GET\",\n\t\t\tdataType: \"html\",\n\t\t\tdata: params\n\t\t} ).done( function( responseText ) {\n\n\t\t\t// Save response for use in complete callback\n\t\t\tresponse = arguments;\n\n\t\t\tself.html( selector ?\n\n\t\t\t\t// If a selector was specified, locate the right elements in a dummy div\n\t\t\t\t// Exclude scripts to avoid IE 'Permission Denied' errors\n\t\t\t\tjQuery( \"<div>\" ).append( jQuery.parseHTML( responseText ) ).find( selector ) :\n\n\t\t\t\t// Otherwise use the full result\n\t\t\t\tresponseText );\n\n\t\t// If the request succeeds, this function gets \"data\", \"status\", \"jqXHR\"\n\t\t// but they are ignored because response was set above.\n\t\t// If it fails, this function gets \"jqXHR\", \"status\", \"error\"\n\t\t} ).always( callback && function( jqXHR, status ) {\n\t\t\tself.each( function() {\n\t\t\t\tcallback.apply( this, response || [ jqXHR.responseText, status, jqXHR ] );\n\t\t\t} );\n\t\t} );\n\t}\n\n\treturn this;\n};\n\n\n\n\n// Attach a bunch of functions for handling common AJAX events\njQuery.each( [\n\t\"ajaxStart\",\n\t\"ajaxStop\",\n\t\"ajaxComplete\",\n\t\"ajaxError\",\n\t\"ajaxSuccess\",\n\t\"ajaxSend\"\n], function( i, type ) {\n\tjQuery.fn[ type ] = function( fn ) {\n\t\treturn this.on( type, fn );\n\t};\n} );\n\n\n\n\njQuery.expr.pseudos.animated = function( elem ) {\n\treturn jQuery.grep( jQuery.timers, function( fn ) {\n\t\treturn elem === fn.elem;\n\t} ).length;\n};\n\n\n\n\njQuery.offset = {\n\tsetOffset: function( elem, options, i ) {\n\t\tvar curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,\n\t\t\tposition = jQuery.css( elem, \"position\" ),\n\t\t\tcurElem = jQuery( elem ),\n\t\t\tprops = {};\n\n\t\t// Set position first, in-case top/left are set even on static elem\n\t\tif ( position === \"static\" ) {\n\t\t\telem.style.position = \"relative\";\n\t\t}\n\n\t\tcurOffset = curElem.offset();\n\t\tcurCSSTop = jQuery.css( elem, \"top\" );\n\t\tcurCSSLeft = jQuery.css( elem, \"left\" );\n\t\tcalculatePosition = ( position === \"absolute\" || position === \"fixed\" ) &&\n\t\t\t( curCSSTop + curCSSLeft ).indexOf( \"auto\" ) > -1;\n\n\t\t// Need to be able to calculate position if either\n\t\t// top or left is auto and position is either absolute or fixed\n\t\tif ( calculatePosition ) {\n\t\t\tcurPosition = curElem.position();\n\t\t\tcurTop = curPosition.top;\n\t\t\tcurLeft = curPosition.left;\n\n\t\t} else {\n\t\t\tcurTop = parseFloat( curCSSTop ) || 0;\n\t\t\tcurLeft = parseFloat( curCSSLeft ) || 0;\n\t\t}\n\n\t\tif ( isFunction( options ) ) {\n\n\t\t\t// Use jQuery.extend here to allow modification of coordinates argument (gh-1848)\n\t\t\toptions = options.call( elem, i, jQuery.extend( {}, curOffset ) );\n\t\t}\n\n\t\tif ( options.top != null ) {\n\t\t\tprops.top = ( options.top - curOffset.top ) + curTop;\n\t\t}\n\t\tif ( options.left != null ) {\n\t\t\tprops.left = ( options.left - curOffset.left ) + curLeft;\n\t\t}\n\n\t\tif ( \"using\" in options ) {\n\t\t\toptions.using.call( elem, props );\n\n\t\t} else {\n\t\t\tcurElem.css( props );\n\t\t}\n\t}\n};\n\njQuery.fn.extend( {\n\n\t// offset() relates an element's border box to the document origin\n\toffset: function( options ) {\n\n\t\t// Preserve chaining for setter\n\t\tif ( arguments.length ) {\n\t\t\treturn options === undefined ?\n\t\t\t\tthis :\n\t\t\t\tthis.each( function( i ) {\n\t\t\t\t\tjQuery.offset.setOffset( this, options, i );\n\t\t\t\t} );\n\t\t}\n\n\t\tvar rect, win,\n\t\t\telem = this[ 0 ];\n\n\t\tif ( !elem ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Return zeros for disconnected and hidden (display: none) elements (gh-2310)\n\t\t// Support: IE <=11 only\n\t\t// Running getBoundingClientRect on a\n\t\t// disconnected node in IE throws an error\n\t\tif ( !elem.getClientRects().length ) {\n\t\t\treturn { top: 0, left: 0 };\n\t\t}\n\n\t\t// Get document-relative position by adding viewport scroll to viewport-relative gBCR\n\t\trect = elem.getBoundingClientRect();\n\t\twin = elem.ownerDocument.defaultView;\n\t\treturn {\n\t\t\ttop: rect.top + win.pageYOffset,\n\t\t\tleft: rect.left + win.pageXOffset\n\t\t};\n\t},\n\n\t// position() relates an element's margin box to its offset parent's padding box\n\t// This corresponds to the behavior of CSS absolute positioning\n\tposition: function() {\n\t\tif ( !this[ 0 ] ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar offsetParent, offset, doc,\n\t\t\telem = this[ 0 ],\n\t\t\tparentOffset = { top: 0, left: 0 };\n\n\t\t// position:fixed elements are offset from the viewport, which itself always has zero offset\n\t\tif ( jQuery.css( elem, \"position\" ) === \"fixed\" ) {\n\n\t\t\t// Assume position:fixed implies availability of getBoundingClientRect\n\t\t\toffset = elem.getBoundingClientRect();\n\n\t\t} else {\n\t\t\toffset = this.offset();\n\n\t\t\t// Account for the *real* offset parent, which can be the document or its root element\n\t\t\t// when a statically positioned element is identified\n\t\t\tdoc = elem.ownerDocument;\n\t\t\toffsetParent = elem.offsetParent || doc.documentElement;\n\t\t\twhile ( offsetParent &&\n\t\t\t\t( offsetParent === doc.body || offsetParent === doc.documentElement ) &&\n\t\t\t\tjQuery.css( offsetParent, \"position\" ) === \"static\" ) {\n\n\t\t\t\toffsetParent = offsetParent.parentNode;\n\t\t\t}\n\t\t\tif ( offsetParent && offsetParent !== elem && offsetParent.nodeType === 1 ) {\n\n\t\t\t\t// Incorporate borders into its offset, since they are outside its content origin\n\t\t\t\tparentOffset = jQuery( offsetParent ).offset();\n\t\t\t\tparentOffset.top += jQuery.css( offsetParent, \"borderTopWidth\", true );\n\t\t\t\tparentOffset.left += jQuery.css( offsetParent, \"borderLeftWidth\", true );\n\t\t\t}\n\t\t}\n\n\t\t// Subtract parent offsets and element margins\n\t\treturn {\n\t\t\ttop: offset.top - parentOffset.top - jQuery.css( elem, \"marginTop\", true ),\n\t\t\tleft: offset.left - parentOffset.left - jQuery.css( elem, \"marginLeft\", true )\n\t\t};\n\t},\n\n\t// This method will return documentElement in the following cases:\n\t// 1) For the element inside the iframe without offsetParent, this method will return\n\t// documentElement of the parent window\n\t// 2) For the hidden or detached element\n\t// 3) For body or html element, i.e. in case of the html node - it will return itself\n\t//\n\t// but those exceptions were never presented as a real life use-cases\n\t// and might be considered as more preferable results.\n\t//\n\t// This logic, however, is not guaranteed and can change at any point in the future\n\toffsetParent: function() {\n\t\treturn this.map( function() {\n\t\t\tvar offsetParent = this.offsetParent;\n\n\t\t\twhile ( offsetParent && jQuery.css( offsetParent, \"position\" ) === \"static\" ) {\n\t\t\t\toffsetParent = offsetParent.offsetParent;\n\t\t\t}\n\n\t\t\treturn offsetParent || documentElement;\n\t\t} );\n\t}\n} );\n\n// Create scrollLeft and scrollTop methods\njQuery.each( { scrollLeft: \"pageXOffset\", scrollTop: \"pageYOffset\" }, function( method, prop ) {\n\tvar top = \"pageYOffset\" === prop;\n\n\tjQuery.fn[ method ] = function( val ) {\n\t\treturn access( this, function( elem, method, val ) {\n\n\t\t\t// Coalesce documents and windows\n\t\t\tvar win;\n\t\t\tif ( isWindow( elem ) ) {\n\t\t\t\twin = elem;\n\t\t\t} else if ( elem.nodeType === 9 ) {\n\t\t\t\twin = elem.defaultView;\n\t\t\t}\n\n\t\t\tif ( val === undefined ) {\n\t\t\t\treturn win ? win[ prop ] : elem[ method ];\n\t\t\t}\n\n\t\t\tif ( win ) {\n\t\t\t\twin.scrollTo(\n\t\t\t\t\t!top ? val : win.pageXOffset,\n\t\t\t\t\ttop ? val : win.pageYOffset\n\t\t\t\t);\n\n\t\t\t} else {\n\t\t\t\telem[ method ] = val;\n\t\t\t}\n\t\t}, method, val, arguments.length );\n\t};\n} );\n\n// Support: Safari <=7 - 9.1, Chrome <=37 - 49\n// Add the top/left cssHooks using jQuery.fn.position\n// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084\n// Blink bug: https://bugs.chromium.org/p/chromium/issues/detail?id=589347\n// getComputedStyle returns percent when specified for top/left/bottom/right;\n// rather than make the css module depend on the offset module, just check for it here\njQuery.each( [ \"top\", \"left\" ], function( i, prop ) {\n\tjQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition,\n\t\tfunction( elem, computed ) {\n\t\t\tif ( computed ) {\n\t\t\t\tcomputed = curCSS( elem, prop );\n\n\t\t\t\t// If curCSS returns percentage, fallback to offset\n\t\t\t\treturn rnumnonpx.test( computed ) ?\n\t\t\t\t\tjQuery( elem ).position()[ prop ] + \"px\" :\n\t\t\t\t\tcomputed;\n\t\t\t}\n\t\t}\n\t);\n} );\n\n\n// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods\njQuery.each( { Height: \"height\", Width: \"width\" }, function( name, type ) {\n\tjQuery.each( { padding: \"inner\" + name, content: type, \"\": \"outer\" + name },\n\t\tfunction( defaultExtra, funcName ) {\n\n\t\t// Margin is only for outerHeight, outerWidth\n\t\tjQuery.fn[ funcName ] = function( margin, value ) {\n\t\t\tvar chainable = arguments.length && ( defaultExtra || typeof margin !== \"boolean\" ),\n\t\t\t\textra = defaultExtra || ( margin === true || value === true ? \"margin\" : \"border\" );\n\n\t\t\treturn access( this, function( elem, type, value ) {\n\t\t\t\tvar doc;\n\n\t\t\t\tif ( isWindow( elem ) ) {\n\n\t\t\t\t\t// $( window ).outerWidth/Height return w/h including scrollbars (gh-1729)\n\t\t\t\t\treturn funcName.indexOf( \"outer\" ) === 0 ?\n\t\t\t\t\t\telem[ \"inner\" + name ] :\n\t\t\t\t\t\telem.document.documentElement[ \"client\" + name ];\n\t\t\t\t}\n\n\t\t\t\t// Get document width or height\n\t\t\t\tif ( elem.nodeType === 9 ) {\n\t\t\t\t\tdoc = elem.documentElement;\n\n\t\t\t\t\t// Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],\n\t\t\t\t\t// whichever is greatest\n\t\t\t\t\treturn Math.max(\n\t\t\t\t\t\telem.body[ \"scroll\" + name ], doc[ \"scroll\" + name ],\n\t\t\t\t\t\telem.body[ \"offset\" + name ], doc[ \"offset\" + name ],\n\t\t\t\t\t\tdoc[ \"client\" + name ]\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\treturn value === undefined ?\n\n\t\t\t\t\t// Get width or height on the element, requesting but not forcing parseFloat\n\t\t\t\t\tjQuery.css( elem, type, extra ) :\n\n\t\t\t\t\t// Set width or height on the element\n\t\t\t\t\tjQuery.style( elem, type, value, extra );\n\t\t\t}, type, chainable ? margin : undefined, chainable );\n\t\t};\n\t} );\n} );\n\n\njQuery.each( ( \"blur focus focusin focusout resize scroll click dblclick \" +\n\t\"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave \" +\n\t\"change select submit keydown keypress keyup contextmenu\" ).split( \" \" ),\n\tfunction( i, name ) {\n\n\t// Handle event binding\n\tjQuery.fn[ name ] = function( data, fn ) {\n\t\treturn arguments.length > 0 ?\n\t\t\tthis.on( name, null, data, fn ) :\n\t\t\tthis.trigger( name );\n\t};\n} );\n\njQuery.fn.extend( {\n\thover: function( fnOver, fnOut ) {\n\t\treturn this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );\n\t}\n} );\n\n\n\n\njQuery.fn.extend( {\n\n\tbind: function( types, data, fn ) {\n\t\treturn this.on( types, null, data, fn );\n\t},\n\tunbind: function( types, fn ) {\n\t\treturn this.off( types, null, fn );\n\t},\n\n\tdelegate: function( selector, types, data, fn ) {\n\t\treturn this.on( types, selector, data, fn );\n\t},\n\tundelegate: function( selector, types, fn ) {\n\n\t\t// ( namespace ) or ( selector, types [, fn] )\n\t\treturn arguments.length === 1 ?\n\t\t\tthis.off( selector, \"**\" ) :\n\t\t\tthis.off( types, selector || \"**\", fn );\n\t}\n} );\n\n// Bind a function to a context, optionally partially applying any\n// arguments.\n// jQuery.proxy is deprecated to promote standards (specifically Function#bind)\n// However, it is not slated for removal any time soon\njQuery.proxy = function( fn, context ) {\n\tvar tmp, args, proxy;\n\n\tif ( typeof context === \"string\" ) {\n\t\ttmp = fn[ context ];\n\t\tcontext = fn;\n\t\tfn = tmp;\n\t}\n\n\t// Quick check to determine if target is callable, in the spec\n\t// this throws a TypeError, but we will just return undefined.\n\tif ( !isFunction( fn ) ) {\n\t\treturn undefined;\n\t}\n\n\t// Simulated bind\n\targs = slice.call( arguments, 2 );\n\tproxy = function() {\n\t\treturn fn.apply( context || this, args.concat( slice.call( arguments ) ) );\n\t};\n\n\t// Set the guid of unique handler to the same of original handler, so it can be removed\n\tproxy.guid = fn.guid = fn.guid || jQuery.guid++;\n\n\treturn proxy;\n};\n\njQuery.holdReady = function( hold ) {\n\tif ( hold ) {\n\t\tjQuery.readyWait++;\n\t} else {\n\t\tjQuery.ready( true );\n\t}\n};\njQuery.isArray = Array.isArray;\njQuery.parseJSON = JSON.parse;\njQuery.nodeName = nodeName;\njQuery.isFunction = isFunction;\njQuery.isWindow = isWindow;\njQuery.camelCase = camelCase;\njQuery.type = toType;\n\njQuery.now = Date.now;\n\njQuery.isNumeric = function( obj ) {\n\n\t// As of jQuery 3.0, isNumeric is limited to\n\t// strings and numbers (primitives or objects)\n\t// that can be coerced to finite numbers (gh-2662)\n\tvar type = jQuery.type( obj );\n\treturn ( type === \"number\" || type === \"string\" ) &&\n\n\t\t// parseFloat NaNs numeric-cast false positives (\"\")\n\t\t// ...but misinterprets leading-number strings, particularly hex literals (\"0x...\")\n\t\t// subtraction forces infinities to NaN\n\t\t!isNaN( obj - parseFloat( obj ) );\n};\n\n\n\n\n// Register as a named AMD module, since jQuery can be concatenated with other\n// files that may use define, but not via a proper concatenation script that\n// understands anonymous AMD modules. A named AMD is safest and most robust\n// way to register. Lowercase jquery is used because AMD module names are\n// derived from file names, and jQuery is normally delivered in a lowercase\n// file name. Do this after creating the global so that if an AMD module wants\n// to call noConflict to hide this version of jQuery, it will work.\n\n// Note that for maximum portability, libraries that are not jQuery should\n// declare themselves as anonymous modules, and avoid setting a global if an\n// AMD loader is present. jQuery is a special case. For more information, see\n// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon\n\nif ( typeof define === \"function\" && define.amd ) {\n\tdefine( \"jquery\", [], function() {\n\t\treturn jQuery;\n\t} );\n}\n\n\n\n\nvar\n\n\t// Map over jQuery in case of overwrite\n\t_jQuery = window.jQuery,\n\n\t// Map over the $ in case of overwrite\n\t_$ = window.$;\n\njQuery.noConflict = function( deep ) {\n\tif ( window.$ === jQuery ) {\n\t\twindow.$ = _$;\n\t}\n\n\tif ( deep && window.jQuery === jQuery ) {\n\t\twindow.jQuery = _jQuery;\n\t}\n\n\treturn jQuery;\n};\n\n// Expose jQuery and $ identifiers, even in AMD\n// (#7102#comment:10, https://github.com/jquery/jquery/pull/557)\n// and CommonJS for browser emulators (#13566)\nif ( !noGlobal ) {\n\twindow.jQuery = window.$ = jQuery;\n}\n\n\n\n\nreturn jQuery;\n} );\n","module.exports = global[\"m\"] = require(\"-!./mithril.js\");","module.exports = global[\"moment\"] = require(\"-!./moment.js\");","//! moment.js\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n typeof define === 'function' && define.amd ? define(factory) :\n global.moment = factory()\n}(this, (function () { 'use strict';\n\n var hookCallback;\n\n function hooks () {\n return hookCallback.apply(null, arguments);\n }\n\n // This is done to register the method called with moment()\n // without creating circular dependencies.\n function setHookCallback (callback) {\n hookCallback = callback;\n }\n\n function isArray(input) {\n return input instanceof Array || Object.prototype.toString.call(input) === '[object Array]';\n }\n\n function isObject(input) {\n // IE8 will treat undefined and null as object if it wasn't for\n // input != null\n return input != null && Object.prototype.toString.call(input) === '[object Object]';\n }\n\n function isObjectEmpty(obj) {\n if (Object.getOwnPropertyNames) {\n return (Object.getOwnPropertyNames(obj).length === 0);\n } else {\n var k;\n for (k in obj) {\n if (obj.hasOwnProperty(k)) {\n return false;\n }\n }\n return true;\n }\n }\n\n function isUndefined(input) {\n return input === void 0;\n }\n\n function isNumber(input) {\n return typeof input === 'number' || Object.prototype.toString.call(input) === '[object Number]';\n }\n\n function isDate(input) {\n return input instanceof Date || Object.prototype.toString.call(input) === '[object Date]';\n }\n\n function map(arr, fn) {\n var res = [], i;\n for (i = 0; i < arr.length; ++i) {\n res.push(fn(arr[i], i));\n }\n return res;\n }\n\n function hasOwnProp(a, b) {\n return Object.prototype.hasOwnProperty.call(a, b);\n }\n\n function extend(a, b) {\n for (var i in b) {\n if (hasOwnProp(b, i)) {\n a[i] = b[i];\n }\n }\n\n if (hasOwnProp(b, 'toString')) {\n a.toString = b.toString;\n }\n\n if (hasOwnProp(b, 'valueOf')) {\n a.valueOf = b.valueOf;\n }\n\n return a;\n }\n\n function createUTC (input, format, locale, strict) {\n return createLocalOrUTC(input, format, locale, strict, true).utc();\n }\n\n function defaultParsingFlags() {\n // We need to deep clone this object.\n return {\n empty : false,\n unusedTokens : [],\n unusedInput : [],\n overflow : -2,\n charsLeftOver : 0,\n nullInput : false,\n invalidMonth : null,\n invalidFormat : false,\n userInvalidated : false,\n iso : false,\n parsedDateParts : [],\n meridiem : null,\n rfc2822 : false,\n weekdayMismatch : false\n };\n }\n\n function getParsingFlags(m) {\n if (m._pf == null) {\n m._pf = defaultParsingFlags();\n }\n return m._pf;\n }\n\n var some;\n if (Array.prototype.some) {\n some = Array.prototype.some;\n } else {\n some = function (fun) {\n var t = Object(this);\n var len = t.length >>> 0;\n\n for (var i = 0; i < len; i++) {\n if (i in t && fun.call(this, t[i], i, t)) {\n return true;\n }\n }\n\n return false;\n };\n }\n\n function isValid(m) {\n if (m._isValid == null) {\n var flags = getParsingFlags(m);\n var parsedParts = some.call(flags.parsedDateParts, function (i) {\n return i != null;\n });\n var isNowValid = !isNaN(m._d.getTime()) &&\n flags.overflow < 0 &&\n !flags.empty &&\n !flags.invalidMonth &&\n !flags.invalidWeekday &&\n !flags.weekdayMismatch &&\n !flags.nullInput &&\n !flags.invalidFormat &&\n !flags.userInvalidated &&\n (!flags.meridiem || (flags.meridiem && parsedParts));\n\n if (m._strict) {\n isNowValid = isNowValid &&\n flags.charsLeftOver === 0 &&\n flags.unusedTokens.length === 0 &&\n flags.bigHour === undefined;\n }\n\n if (Object.isFrozen == null || !Object.isFrozen(m)) {\n m._isValid = isNowValid;\n }\n else {\n return isNowValid;\n }\n }\n return m._isValid;\n }\n\n function createInvalid (flags) {\n var m = createUTC(NaN);\n if (flags != null) {\n extend(getParsingFlags(m), flags);\n }\n else {\n getParsingFlags(m).userInvalidated = true;\n }\n\n return m;\n }\n\n // Plugins that add properties should also add the key here (null value),\n // so we can properly clone ourselves.\n var momentProperties = hooks.momentProperties = [];\n\n function copyConfig(to, from) {\n var i, prop, val;\n\n if (!isUndefined(from._isAMomentObject)) {\n to._isAMomentObject = from._isAMomentObject;\n }\n if (!isUndefined(from._i)) {\n to._i = from._i;\n }\n if (!isUndefined(from._f)) {\n to._f = from._f;\n }\n if (!isUndefined(from._l)) {\n to._l = from._l;\n }\n if (!isUndefined(from._strict)) {\n to._strict = from._strict;\n }\n if (!isUndefined(from._tzm)) {\n to._tzm = from._tzm;\n }\n if (!isUndefined(from._isUTC)) {\n to._isUTC = from._isUTC;\n }\n if (!isUndefined(from._offset)) {\n to._offset = from._offset;\n }\n if (!isUndefined(from._pf)) {\n to._pf = getParsingFlags(from);\n }\n if (!isUndefined(from._locale)) {\n to._locale = from._locale;\n }\n\n if (momentProperties.length > 0) {\n for (i = 0; i < momentProperties.length; i++) {\n prop = momentProperties[i];\n val = from[prop];\n if (!isUndefined(val)) {\n to[prop] = val;\n }\n }\n }\n\n return to;\n }\n\n var updateInProgress = false;\n\n // Moment prototype object\n function Moment(config) {\n copyConfig(this, config);\n this._d = new Date(config._d != null ? config._d.getTime() : NaN);\n if (!this.isValid()) {\n this._d = new Date(NaN);\n }\n // Prevent infinite loop in case updateOffset creates new moment\n // objects.\n if (updateInProgress === false) {\n updateInProgress = true;\n hooks.updateOffset(this);\n updateInProgress = false;\n }\n }\n\n function isMoment (obj) {\n return obj instanceof Moment || (obj != null && obj._isAMomentObject != null);\n }\n\n function absFloor (number) {\n if (number < 0) {\n // -0 -> 0\n return Math.ceil(number) || 0;\n } else {\n return Math.floor(number);\n }\n }\n\n function toInt(argumentForCoercion) {\n var coercedNumber = +argumentForCoercion,\n value = 0;\n\n if (coercedNumber !== 0 && isFinite(coercedNumber)) {\n value = absFloor(coercedNumber);\n }\n\n return value;\n }\n\n // compare two arrays, return the number of differences\n function compareArrays(array1, array2, dontConvert) {\n var len = Math.min(array1.length, array2.length),\n lengthDiff = Math.abs(array1.length - array2.length),\n diffs = 0,\n i;\n for (i = 0; i < len; i++) {\n if ((dontConvert && array1[i] !== array2[i]) ||\n (!dontConvert && toInt(array1[i]) !== toInt(array2[i]))) {\n diffs++;\n }\n }\n return diffs + lengthDiff;\n }\n\n function warn(msg) {\n if (hooks.suppressDeprecationWarnings === false &&\n (typeof console !== 'undefined') && console.warn) {\n console.warn('Deprecation warning: ' + msg);\n }\n }\n\n function deprecate(msg, fn) {\n var firstTime = true;\n\n return extend(function () {\n if (hooks.deprecationHandler != null) {\n hooks.deprecationHandler(null, msg);\n }\n if (firstTime) {\n var args = [];\n var arg;\n for (var i = 0; i < arguments.length; i++) {\n arg = '';\n if (typeof arguments[i] === 'object') {\n arg += '\\n[' + i + '] ';\n for (var key in arguments[0]) {\n arg += key + ': ' + arguments[0][key] + ', ';\n }\n arg = arg.slice(0, -2); // Remove trailing comma and space\n } else {\n arg = arguments[i];\n }\n args.push(arg);\n }\n warn(msg + '\\nArguments: ' + Array.prototype.slice.call(args).join('') + '\\n' + (new Error()).stack);\n firstTime = false;\n }\n return fn.apply(this, arguments);\n }, fn);\n }\n\n var deprecations = {};\n\n function deprecateSimple(name, msg) {\n if (hooks.deprecationHandler != null) {\n hooks.deprecationHandler(name, msg);\n }\n if (!deprecations[name]) {\n warn(msg);\n deprecations[name] = true;\n }\n }\n\n hooks.suppressDeprecationWarnings = false;\n hooks.deprecationHandler = null;\n\n function isFunction(input) {\n return input instanceof Function || Object.prototype.toString.call(input) === '[object Function]';\n }\n\n function set (config) {\n var prop, i;\n for (i in config) {\n prop = config[i];\n if (isFunction(prop)) {\n this[i] = prop;\n } else {\n this['_' + i] = prop;\n }\n }\n this._config = config;\n // Lenient ordinal parsing accepts just a number in addition to\n // number + (possibly) stuff coming from _dayOfMonthOrdinalParse.\n // TODO: Remove \"ordinalParse\" fallback in next major release.\n this._dayOfMonthOrdinalParseLenient = new RegExp(\n (this._dayOfMonthOrdinalParse.source || this._ordinalParse.source) +\n '|' + (/\\d{1,2}/).source);\n }\n\n function mergeConfigs(parentConfig, childConfig) {\n var res = extend({}, parentConfig), prop;\n for (prop in childConfig) {\n if (hasOwnProp(childConfig, prop)) {\n if (isObject(parentConfig[prop]) && isObject(childConfig[prop])) {\n res[prop] = {};\n extend(res[prop], parentConfig[prop]);\n extend(res[prop], childConfig[prop]);\n } else if (childConfig[prop] != null) {\n res[prop] = childConfig[prop];\n } else {\n delete res[prop];\n }\n }\n }\n for (prop in parentConfig) {\n if (hasOwnProp(parentConfig, prop) &&\n !hasOwnProp(childConfig, prop) &&\n isObject(parentConfig[prop])) {\n // make sure changes to properties don't modify parent config\n res[prop] = extend({}, res[prop]);\n }\n }\n return res;\n }\n\n function Locale(config) {\n if (config != null) {\n this.set(config);\n }\n }\n\n var keys;\n\n if (Object.keys) {\n keys = Object.keys;\n } else {\n keys = function (obj) {\n var i, res = [];\n for (i in obj) {\n if (hasOwnProp(obj, i)) {\n res.push(i);\n }\n }\n return res;\n };\n }\n\n var defaultCalendar = {\n sameDay : '[Today at] LT',\n nextDay : '[Tomorrow at] LT',\n nextWeek : 'dddd [at] LT',\n lastDay : '[Yesterday at] LT',\n lastWeek : '[Last] dddd [at] LT',\n sameElse : 'L'\n };\n\n function calendar (key, mom, now) {\n var output = this._calendar[key] || this._calendar['sameElse'];\n return isFunction(output) ? output.call(mom, now) : output;\n }\n\n var defaultLongDateFormat = {\n LTS : 'h:mm:ss A',\n LT : 'h:mm A',\n L : 'MM/DD/YYYY',\n LL : 'MMMM D, YYYY',\n LLL : 'MMMM D, YYYY h:mm A',\n LLLL : 'dddd, MMMM D, YYYY h:mm A'\n };\n\n function longDateFormat (key) {\n var format = this._longDateFormat[key],\n formatUpper = this._longDateFormat[key.toUpperCase()];\n\n if (format || !formatUpper) {\n return format;\n }\n\n this._longDateFormat[key] = formatUpper.replace(/MMMM|MM|DD|dddd/g, function (val) {\n return val.slice(1);\n });\n\n return this._longDateFormat[key];\n }\n\n var defaultInvalidDate = 'Invalid date';\n\n function invalidDate () {\n return this._invalidDate;\n }\n\n var defaultOrdinal = '%d';\n var defaultDayOfMonthOrdinalParse = /\\d{1,2}/;\n\n function ordinal (number) {\n return this._ordinal.replace('%d', number);\n }\n\n var defaultRelativeTime = {\n future : 'in %s',\n past : '%s ago',\n s : 'a few seconds',\n ss : '%d seconds',\n m : 'a minute',\n mm : '%d minutes',\n h : 'an hour',\n hh : '%d hours',\n d : 'a day',\n dd : '%d days',\n M : 'a month',\n MM : '%d months',\n y : 'a year',\n yy : '%d years'\n };\n\n function relativeTime (number, withoutSuffix, string, isFuture) {\n var output = this._relativeTime[string];\n return (isFunction(output)) ?\n output(number, withoutSuffix, string, isFuture) :\n output.replace(/%d/i, number);\n }\n\n function pastFuture (diff, output) {\n var format = this._relativeTime[diff > 0 ? 'future' : 'past'];\n return isFunction(format) ? format(output) : format.replace(/%s/i, output);\n }\n\n var aliases = {};\n\n function addUnitAlias (unit, shorthand) {\n var lowerCase = unit.toLowerCase();\n aliases[lowerCase] = aliases[lowerCase + 's'] = aliases[shorthand] = unit;\n }\n\n function normalizeUnits(units) {\n return typeof units === 'string' ? aliases[units] || aliases[units.toLowerCase()] : undefined;\n }\n\n function normalizeObjectUnits(inputObject) {\n var normalizedInput = {},\n normalizedProp,\n prop;\n\n for (prop in inputObject) {\n if (hasOwnProp(inputObject, prop)) {\n normalizedProp = normalizeUnits(prop);\n if (normalizedProp) {\n normalizedInput[normalizedProp] = inputObject[prop];\n }\n }\n }\n\n return normalizedInput;\n }\n\n var priorities = {};\n\n function addUnitPriority(unit, priority) {\n priorities[unit] = priority;\n }\n\n function getPrioritizedUnits(unitsObj) {\n var units = [];\n for (var u in unitsObj) {\n units.push({unit: u, priority: priorities[u]});\n }\n units.sort(function (a, b) {\n return a.priority - b.priority;\n });\n return units;\n }\n\n function zeroFill(number, targetLength, forceSign) {\n var absNumber = '' + Math.abs(number),\n zerosToFill = targetLength - absNumber.length,\n sign = number >= 0;\n return (sign ? (forceSign ? '+' : '') : '-') +\n Math.pow(10, Math.max(0, zerosToFill)).toString().substr(1) + absNumber;\n }\n\n var formattingTokens = /(\\[[^\\[]*\\])|(\\\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|YYYYYY|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g;\n\n var localFormattingTokens = /(\\[[^\\[]*\\])|(\\\\)?(LTS|LT|LL?L?L?|l{1,4})/g;\n\n var formatFunctions = {};\n\n var formatTokenFunctions = {};\n\n // token: 'M'\n // padded: ['MM', 2]\n // ordinal: 'Mo'\n // callback: function () { this.month() + 1 }\n function addFormatToken (token, padded, ordinal, callback) {\n var func = callback;\n if (typeof callback === 'string') {\n func = function () {\n return this[callback]();\n };\n }\n if (token) {\n formatTokenFunctions[token] = func;\n }\n if (padded) {\n formatTokenFunctions[padded[0]] = function () {\n return zeroFill(func.apply(this, arguments), padded[1], padded[2]);\n };\n }\n if (ordinal) {\n formatTokenFunctions[ordinal] = function () {\n return this.localeData().ordinal(func.apply(this, arguments), token);\n };\n }\n }\n\n function removeFormattingTokens(input) {\n if (input.match(/\\[[\\s\\S]/)) {\n return input.replace(/^\\[|\\]$/g, '');\n }\n return input.replace(/\\\\/g, '');\n }\n\n function makeFormatFunction(format) {\n var array = format.match(formattingTokens), i, length;\n\n for (i = 0, length = array.length; i < length; i++) {\n if (formatTokenFunctions[array[i]]) {\n array[i] = formatTokenFunctions[array[i]];\n } else {\n array[i] = removeFormattingTokens(array[i]);\n }\n }\n\n return function (mom) {\n var output = '', i;\n for (i = 0; i < length; i++) {\n output += isFunction(array[i]) ? array[i].call(mom, format) : array[i];\n }\n return output;\n };\n }\n\n // format date using native date object\n function formatMoment(m, format) {\n if (!m.isValid()) {\n return m.localeData().invalidDate();\n }\n\n format = expandFormat(format, m.localeData());\n formatFunctions[format] = formatFunctions[format] || makeFormatFunction(format);\n\n return formatFunctions[format](m);\n }\n\n function expandFormat(format, locale) {\n var i = 5;\n\n function replaceLongDateFormatTokens(input) {\n return locale.longDateFormat(input) || input;\n }\n\n localFormattingTokens.lastIndex = 0;\n while (i >= 0 && localFormattingTokens.test(format)) {\n format = format.replace(localFormattingTokens, replaceLongDateFormatTokens);\n localFormattingTokens.lastIndex = 0;\n i -= 1;\n }\n\n return format;\n }\n\n var match1 = /\\d/; // 0 - 9\n var match2 = /\\d\\d/; // 00 - 99\n var match3 = /\\d{3}/; // 000 - 999\n var match4 = /\\d{4}/; // 0000 - 9999\n var match6 = /[+-]?\\d{6}/; // -999999 - 999999\n var match1to2 = /\\d\\d?/; // 0 - 99\n var match3to4 = /\\d\\d\\d\\d?/; // 999 - 9999\n var match5to6 = /\\d\\d\\d\\d\\d\\d?/; // 99999 - 999999\n var match1to3 = /\\d{1,3}/; // 0 - 999\n var match1to4 = /\\d{1,4}/; // 0 - 9999\n var match1to6 = /[+-]?\\d{1,6}/; // -999999 - 999999\n\n var matchUnsigned = /\\d+/; // 0 - inf\n var matchSigned = /[+-]?\\d+/; // -inf - inf\n\n var matchOffset = /Z|[+-]\\d\\d:?\\d\\d/gi; // +00:00 -00:00 +0000 -0000 or Z\n var matchShortOffset = /Z|[+-]\\d\\d(?::?\\d\\d)?/gi; // +00 -00 +00:00 -00:00 +0000 -0000 or Z\n\n var matchTimestamp = /[+-]?\\d+(\\.\\d{1,3})?/; // 123456789 123456789.123\n\n // any word (or two) characters or numbers including two/three word month in arabic.\n // includes scottish gaelic two word and hyphenated months\n var matchWord = /[0-9]{0,256}['a-z\\u00A0-\\u05FF\\u0700-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFF07\\uFF10-\\uFFEF]{1,256}|[\\u0600-\\u06FF\\/]{1,256}(\\s*?[\\u0600-\\u06FF]{1,256}){1,2}/i;\n\n var regexes = {};\n\n function addRegexToken (token, regex, strictRegex) {\n regexes[token] = isFunction(regex) ? regex : function (isStrict, localeData) {\n return (isStrict && strictRegex) ? strictRegex : regex;\n };\n }\n\n function getParseRegexForToken (token, config) {\n if (!hasOwnProp(regexes, token)) {\n return new RegExp(unescapeFormat(token));\n }\n\n return regexes[token](config._strict, config._locale);\n }\n\n // Code from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript\n function unescapeFormat(s) {\n return regexEscape(s.replace('\\\\', '').replace(/\\\\(\\[)|\\\\(\\])|\\[([^\\]\\[]*)\\]|\\\\(.)/g, function (matched, p1, p2, p3, p4) {\n return p1 || p2 || p3 || p4;\n }));\n }\n\n function regexEscape(s) {\n return s.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n }\n\n var tokens = {};\n\n function addParseToken (token, callback) {\n var i, func = callback;\n if (typeof token === 'string') {\n token = [token];\n }\n if (isNumber(callback)) {\n func = function (input, array) {\n array[callback] = toInt(input);\n };\n }\n for (i = 0; i < token.length; i++) {\n tokens[token[i]] = func;\n }\n }\n\n function addWeekParseToken (token, callback) {\n addParseToken(token, function (input, array, config, token) {\n config._w = config._w || {};\n callback(input, config._w, config, token);\n });\n }\n\n function addTimeToArrayFromToken(token, input, config) {\n if (input != null && hasOwnProp(tokens, token)) {\n tokens[token](input, config._a, config, token);\n }\n }\n\n var YEAR = 0;\n var MONTH = 1;\n var DATE = 2;\n var HOUR = 3;\n var MINUTE = 4;\n var SECOND = 5;\n var MILLISECOND = 6;\n var WEEK = 7;\n var WEEKDAY = 8;\n\n // FORMATTING\n\n addFormatToken('Y', 0, 0, function () {\n var y = this.year();\n return y <= 9999 ? '' + y : '+' + y;\n });\n\n addFormatToken(0, ['YY', 2], 0, function () {\n return this.year() % 100;\n });\n\n addFormatToken(0, ['YYYY', 4], 0, 'year');\n addFormatToken(0, ['YYYYY', 5], 0, 'year');\n addFormatToken(0, ['YYYYYY', 6, true], 0, 'year');\n\n // ALIASES\n\n addUnitAlias('year', 'y');\n\n // PRIORITIES\n\n addUnitPriority('year', 1);\n\n // PARSING\n\n addRegexToken('Y', matchSigned);\n addRegexToken('YY', match1to2, match2);\n addRegexToken('YYYY', match1to4, match4);\n addRegexToken('YYYYY', match1to6, match6);\n addRegexToken('YYYYYY', match1to6, match6);\n\n addParseToken(['YYYYY', 'YYYYYY'], YEAR);\n addParseToken('YYYY', function (input, array) {\n array[YEAR] = input.length === 2 ? hooks.parseTwoDigitYear(input) : toInt(input);\n });\n addParseToken('YY', function (input, array) {\n array[YEAR] = hooks.parseTwoDigitYear(input);\n });\n addParseToken('Y', function (input, array) {\n array[YEAR] = parseInt(input, 10);\n });\n\n // HELPERS\n\n function daysInYear(year) {\n return isLeapYear(year) ? 366 : 365;\n }\n\n function isLeapYear(year) {\n return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;\n }\n\n // HOOKS\n\n hooks.parseTwoDigitYear = function (input) {\n return toInt(input) + (toInt(input) > 68 ? 1900 : 2000);\n };\n\n // MOMENTS\n\n var getSetYear = makeGetSet('FullYear', true);\n\n function getIsLeapYear () {\n return isLeapYear(this.year());\n }\n\n function makeGetSet (unit, keepTime) {\n return function (value) {\n if (value != null) {\n set$1(this, unit, value);\n hooks.updateOffset(this, keepTime);\n return this;\n } else {\n return get(this, unit);\n }\n };\n }\n\n function get (mom, unit) {\n return mom.isValid() ?\n mom._d['get' + (mom._isUTC ? 'UTC' : '') + unit]() : NaN;\n }\n\n function set$1 (mom, unit, value) {\n if (mom.isValid() && !isNaN(value)) {\n if (unit === 'FullYear' && isLeapYear(mom.year()) && mom.month() === 1 && mom.date() === 29) {\n mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value, mom.month(), daysInMonth(value, mom.month()));\n }\n else {\n mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value);\n }\n }\n }\n\n // MOMENTS\n\n function stringGet (units) {\n units = normalizeUnits(units);\n if (isFunction(this[units])) {\n return this[units]();\n }\n return this;\n }\n\n\n function stringSet (units, value) {\n if (typeof units === 'object') {\n units = normalizeObjectUnits(units);\n var prioritized = getPrioritizedUnits(units);\n for (var i = 0; i < prioritized.length; i++) {\n this[prioritized[i].unit](units[prioritized[i].unit]);\n }\n } else {\n units = normalizeUnits(units);\n if (isFunction(this[units])) {\n return this[units](value);\n }\n }\n return this;\n }\n\n function mod(n, x) {\n return ((n % x) + x) % x;\n }\n\n var indexOf;\n\n if (Array.prototype.indexOf) {\n indexOf = Array.prototype.indexOf;\n } else {\n indexOf = function (o) {\n // I know\n var i;\n for (i = 0; i < this.length; ++i) {\n if (this[i] === o) {\n return i;\n }\n }\n return -1;\n };\n }\n\n function daysInMonth(year, month) {\n if (isNaN(year) || isNaN(month)) {\n return NaN;\n }\n var modMonth = mod(month, 12);\n year += (month - modMonth) / 12;\n return modMonth === 1 ? (isLeapYear(year) ? 29 : 28) : (31 - modMonth % 7 % 2);\n }\n\n // FORMATTING\n\n addFormatToken('M', ['MM', 2], 'Mo', function () {\n return this.month() + 1;\n });\n\n addFormatToken('MMM', 0, 0, function (format) {\n return this.localeData().monthsShort(this, format);\n });\n\n addFormatToken('MMMM', 0, 0, function (format) {\n return this.localeData().months(this, format);\n });\n\n // ALIASES\n\n addUnitAlias('month', 'M');\n\n // PRIORITY\n\n addUnitPriority('month', 8);\n\n // PARSING\n\n addRegexToken('M', match1to2);\n addRegexToken('MM', match1to2, match2);\n addRegexToken('MMM', function (isStrict, locale) {\n return locale.monthsShortRegex(isStrict);\n });\n addRegexToken('MMMM', function (isStrict, locale) {\n return locale.monthsRegex(isStrict);\n });\n\n addParseToken(['M', 'MM'], function (input, array) {\n array[MONTH] = toInt(input) - 1;\n });\n\n addParseToken(['MMM', 'MMMM'], function (input, array, config, token) {\n var month = config._locale.monthsParse(input, token, config._strict);\n // if we didn't find a month name, mark the date as invalid.\n if (month != null) {\n array[MONTH] = month;\n } else {\n getParsingFlags(config).invalidMonth = input;\n }\n });\n\n // LOCALES\n\n var MONTHS_IN_FORMAT = /D[oD]?(\\[[^\\[\\]]*\\]|\\s)+MMMM?/;\n var defaultLocaleMonths = 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_');\n function localeMonths (m, format) {\n if (!m) {\n return isArray(this._months) ? this._months :\n this._months['standalone'];\n }\n return isArray(this._months) ? this._months[m.month()] :\n this._months[(this._months.isFormat || MONTHS_IN_FORMAT).test(format) ? 'format' : 'standalone'][m.month()];\n }\n\n var defaultLocaleMonthsShort = 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_');\n function localeMonthsShort (m, format) {\n if (!m) {\n return isArray(this._monthsShort) ? this._monthsShort :\n this._monthsShort['standalone'];\n }\n return isArray(this._monthsShort) ? this._monthsShort[m.month()] :\n this._monthsShort[MONTHS_IN_FORMAT.test(format) ? 'format' : 'standalone'][m.month()];\n }\n\n function handleStrictParse(monthName, format, strict) {\n var i, ii, mom, llc = monthName.toLocaleLowerCase();\n if (!this._monthsParse) {\n // this is not used\n this._monthsParse = [];\n this._longMonthsParse = [];\n this._shortMonthsParse = [];\n for (i = 0; i < 12; ++i) {\n mom = createUTC([2000, i]);\n this._shortMonthsParse[i] = this.monthsShort(mom, '').toLocaleLowerCase();\n this._longMonthsParse[i] = this.months(mom, '').toLocaleLowerCase();\n }\n }\n\n if (strict) {\n if (format === 'MMM') {\n ii = indexOf.call(this._shortMonthsParse, llc);\n return ii !== -1 ? ii : null;\n } else {\n ii = indexOf.call(this._longMonthsParse, llc);\n return ii !== -1 ? ii : null;\n }\n } else {\n if (format === 'MMM') {\n ii = indexOf.call(this._shortMonthsParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._longMonthsParse, llc);\n return ii !== -1 ? ii : null;\n } else {\n ii = indexOf.call(this._longMonthsParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._shortMonthsParse, llc);\n return ii !== -1 ? ii : null;\n }\n }\n }\n\n function localeMonthsParse (monthName, format, strict) {\n var i, mom, regex;\n\n if (this._monthsParseExact) {\n return handleStrictParse.call(this, monthName, format, strict);\n }\n\n if (!this._monthsParse) {\n this._monthsParse = [];\n this._longMonthsParse = [];\n this._shortMonthsParse = [];\n }\n\n // TODO: add sorting\n // Sorting makes sure if one month (or abbr) is a prefix of another\n // see sorting in computeMonthsParse\n for (i = 0; i < 12; i++) {\n // make the regex if we don't have it already\n mom = createUTC([2000, i]);\n if (strict && !this._longMonthsParse[i]) {\n this._longMonthsParse[i] = new RegExp('^' + this.months(mom, '').replace('.', '') + '$', 'i');\n this._shortMonthsParse[i] = new RegExp('^' + this.monthsShort(mom, '').replace('.', '') + '$', 'i');\n }\n if (!strict && !this._monthsParse[i]) {\n regex = '^' + this.months(mom, '') + '|^' + this.monthsShort(mom, '');\n this._monthsParse[i] = new RegExp(regex.replace('.', ''), 'i');\n }\n // test the regex\n if (strict && format === 'MMMM' && this._longMonthsParse[i].test(monthName)) {\n return i;\n } else if (strict && format === 'MMM' && this._shortMonthsParse[i].test(monthName)) {\n return i;\n } else if (!strict && this._monthsParse[i].test(monthName)) {\n return i;\n }\n }\n }\n\n // MOMENTS\n\n function setMonth (mom, value) {\n var dayOfMonth;\n\n if (!mom.isValid()) {\n // No op\n return mom;\n }\n\n if (typeof value === 'string') {\n if (/^\\d+$/.test(value)) {\n value = toInt(value);\n } else {\n value = mom.localeData().monthsParse(value);\n // TODO: Another silent failure?\n if (!isNumber(value)) {\n return mom;\n }\n }\n }\n\n dayOfMonth = Math.min(mom.date(), daysInMonth(mom.year(), value));\n mom._d['set' + (mom._isUTC ? 'UTC' : '') + 'Month'](value, dayOfMonth);\n return mom;\n }\n\n function getSetMonth (value) {\n if (value != null) {\n setMonth(this, value);\n hooks.updateOffset(this, true);\n return this;\n } else {\n return get(this, 'Month');\n }\n }\n\n function getDaysInMonth () {\n return daysInMonth(this.year(), this.month());\n }\n\n var defaultMonthsShortRegex = matchWord;\n function monthsShortRegex (isStrict) {\n if (this._monthsParseExact) {\n if (!hasOwnProp(this, '_monthsRegex')) {\n computeMonthsParse.call(this);\n }\n if (isStrict) {\n return this._monthsShortStrictRegex;\n } else {\n return this._monthsShortRegex;\n }\n } else {\n if (!hasOwnProp(this, '_monthsShortRegex')) {\n this._monthsShortRegex = defaultMonthsShortRegex;\n }\n return this._monthsShortStrictRegex && isStrict ?\n this._monthsShortStrictRegex : this._monthsShortRegex;\n }\n }\n\n var defaultMonthsRegex = matchWord;\n function monthsRegex (isStrict) {\n if (this._monthsParseExact) {\n if (!hasOwnProp(this, '_monthsRegex')) {\n computeMonthsParse.call(this);\n }\n if (isStrict) {\n return this._monthsStrictRegex;\n } else {\n return this._monthsRegex;\n }\n } else {\n if (!hasOwnProp(this, '_monthsRegex')) {\n this._monthsRegex = defaultMonthsRegex;\n }\n return this._monthsStrictRegex && isStrict ?\n this._monthsStrictRegex : this._monthsRegex;\n }\n }\n\n function computeMonthsParse () {\n function cmpLenRev(a, b) {\n return b.length - a.length;\n }\n\n var shortPieces = [], longPieces = [], mixedPieces = [],\n i, mom;\n for (i = 0; i < 12; i++) {\n // make the regex if we don't have it already\n mom = createUTC([2000, i]);\n shortPieces.push(this.monthsShort(mom, ''));\n longPieces.push(this.months(mom, ''));\n mixedPieces.push(this.months(mom, ''));\n mixedPieces.push(this.monthsShort(mom, ''));\n }\n // Sorting makes sure if one month (or abbr) is a prefix of another it\n // will match the longer piece.\n shortPieces.sort(cmpLenRev);\n longPieces.sort(cmpLenRev);\n mixedPieces.sort(cmpLenRev);\n for (i = 0; i < 12; i++) {\n shortPieces[i] = regexEscape(shortPieces[i]);\n longPieces[i] = regexEscape(longPieces[i]);\n }\n for (i = 0; i < 24; i++) {\n mixedPieces[i] = regexEscape(mixedPieces[i]);\n }\n\n this._monthsRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n this._monthsShortRegex = this._monthsRegex;\n this._monthsStrictRegex = new RegExp('^(' + longPieces.join('|') + ')', 'i');\n this._monthsShortStrictRegex = new RegExp('^(' + shortPieces.join('|') + ')', 'i');\n }\n\n function createDate (y, m, d, h, M, s, ms) {\n // can't just apply() to create a date:\n // https://stackoverflow.com/q/181348\n var date = new Date(y, m, d, h, M, s, ms);\n\n // the date constructor remaps years 0-99 to 1900-1999\n if (y < 100 && y >= 0 && isFinite(date.getFullYear())) {\n date.setFullYear(y);\n }\n return date;\n }\n\n function createUTCDate (y) {\n var date = new Date(Date.UTC.apply(null, arguments));\n\n // the Date.UTC function remaps years 0-99 to 1900-1999\n if (y < 100 && y >= 0 && isFinite(date.getUTCFullYear())) {\n date.setUTCFullYear(y);\n }\n return date;\n }\n\n // start-of-first-week - start-of-year\n function firstWeekOffset(year, dow, doy) {\n var // first-week day -- which january is always in the first week (4 for iso, 1 for other)\n fwd = 7 + dow - doy,\n // first-week day local weekday -- which local weekday is fwd\n fwdlw = (7 + createUTCDate(year, 0, fwd).getUTCDay() - dow) % 7;\n\n return -fwdlw + fwd - 1;\n }\n\n // https://en.wikipedia.org/wiki/ISO_week_date#Calculating_a_date_given_the_year.2C_week_number_and_weekday\n function dayOfYearFromWeeks(year, week, weekday, dow, doy) {\n var localWeekday = (7 + weekday - dow) % 7,\n weekOffset = firstWeekOffset(year, dow, doy),\n dayOfYear = 1 + 7 * (week - 1) + localWeekday + weekOffset,\n resYear, resDayOfYear;\n\n if (dayOfYear <= 0) {\n resYear = year - 1;\n resDayOfYear = daysInYear(resYear) + dayOfYear;\n } else if (dayOfYear > daysInYear(year)) {\n resYear = year + 1;\n resDayOfYear = dayOfYear - daysInYear(year);\n } else {\n resYear = year;\n resDayOfYear = dayOfYear;\n }\n\n return {\n year: resYear,\n dayOfYear: resDayOfYear\n };\n }\n\n function weekOfYear(mom, dow, doy) {\n var weekOffset = firstWeekOffset(mom.year(), dow, doy),\n week = Math.floor((mom.dayOfYear() - weekOffset - 1) / 7) + 1,\n resWeek, resYear;\n\n if (week < 1) {\n resYear = mom.year() - 1;\n resWeek = week + weeksInYear(resYear, dow, doy);\n } else if (week > weeksInYear(mom.year(), dow, doy)) {\n resWeek = week - weeksInYear(mom.year(), dow, doy);\n resYear = mom.year() + 1;\n } else {\n resYear = mom.year();\n resWeek = week;\n }\n\n return {\n week: resWeek,\n year: resYear\n };\n }\n\n function weeksInYear(year, dow, doy) {\n var weekOffset = firstWeekOffset(year, dow, doy),\n weekOffsetNext = firstWeekOffset(year + 1, dow, doy);\n return (daysInYear(year) - weekOffset + weekOffsetNext) / 7;\n }\n\n // FORMATTING\n\n addFormatToken('w', ['ww', 2], 'wo', 'week');\n addFormatToken('W', ['WW', 2], 'Wo', 'isoWeek');\n\n // ALIASES\n\n addUnitAlias('week', 'w');\n addUnitAlias('isoWeek', 'W');\n\n // PRIORITIES\n\n addUnitPriority('week', 5);\n addUnitPriority('isoWeek', 5);\n\n // PARSING\n\n addRegexToken('w', match1to2);\n addRegexToken('ww', match1to2, match2);\n addRegexToken('W', match1to2);\n addRegexToken('WW', match1to2, match2);\n\n addWeekParseToken(['w', 'ww', 'W', 'WW'], function (input, week, config, token) {\n week[token.substr(0, 1)] = toInt(input);\n });\n\n // HELPERS\n\n // LOCALES\n\n function localeWeek (mom) {\n return weekOfYear(mom, this._week.dow, this._week.doy).week;\n }\n\n var defaultLocaleWeek = {\n dow : 0, // Sunday is the first day of the week.\n doy : 6 // The week that contains Jan 1st is the first week of the year.\n };\n\n function localeFirstDayOfWeek () {\n return this._week.dow;\n }\n\n function localeFirstDayOfYear () {\n return this._week.doy;\n }\n\n // MOMENTS\n\n function getSetWeek (input) {\n var week = this.localeData().week(this);\n return input == null ? week : this.add((input - week) * 7, 'd');\n }\n\n function getSetISOWeek (input) {\n var week = weekOfYear(this, 1, 4).week;\n return input == null ? week : this.add((input - week) * 7, 'd');\n }\n\n // FORMATTING\n\n addFormatToken('d', 0, 'do', 'day');\n\n addFormatToken('dd', 0, 0, function (format) {\n return this.localeData().weekdaysMin(this, format);\n });\n\n addFormatToken('ddd', 0, 0, function (format) {\n return this.localeData().weekdaysShort(this, format);\n });\n\n addFormatToken('dddd', 0, 0, function (format) {\n return this.localeData().weekdays(this, format);\n });\n\n addFormatToken('e', 0, 0, 'weekday');\n addFormatToken('E', 0, 0, 'isoWeekday');\n\n // ALIASES\n\n addUnitAlias('day', 'd');\n addUnitAlias('weekday', 'e');\n addUnitAlias('isoWeekday', 'E');\n\n // PRIORITY\n addUnitPriority('day', 11);\n addUnitPriority('weekday', 11);\n addUnitPriority('isoWeekday', 11);\n\n // PARSING\n\n addRegexToken('d', match1to2);\n addRegexToken('e', match1to2);\n addRegexToken('E', match1to2);\n addRegexToken('dd', function (isStrict, locale) {\n return locale.weekdaysMinRegex(isStrict);\n });\n addRegexToken('ddd', function (isStrict, locale) {\n return locale.weekdaysShortRegex(isStrict);\n });\n addRegexToken('dddd', function (isStrict, locale) {\n return locale.weekdaysRegex(isStrict);\n });\n\n addWeekParseToken(['dd', 'ddd', 'dddd'], function (input, week, config, token) {\n var weekday = config._locale.weekdaysParse(input, token, config._strict);\n // if we didn't get a weekday name, mark the date as invalid\n if (weekday != null) {\n week.d = weekday;\n } else {\n getParsingFlags(config).invalidWeekday = input;\n }\n });\n\n addWeekParseToken(['d', 'e', 'E'], function (input, week, config, token) {\n week[token] = toInt(input);\n });\n\n // HELPERS\n\n function parseWeekday(input, locale) {\n if (typeof input !== 'string') {\n return input;\n }\n\n if (!isNaN(input)) {\n return parseInt(input, 10);\n }\n\n input = locale.weekdaysParse(input);\n if (typeof input === 'number') {\n return input;\n }\n\n return null;\n }\n\n function parseIsoWeekday(input, locale) {\n if (typeof input === 'string') {\n return locale.weekdaysParse(input) % 7 || 7;\n }\n return isNaN(input) ? null : input;\n }\n\n // LOCALES\n\n var defaultLocaleWeekdays = 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_');\n function localeWeekdays (m, format) {\n if (!m) {\n return isArray(this._weekdays) ? this._weekdays :\n this._weekdays['standalone'];\n }\n return isArray(this._weekdays) ? this._weekdays[m.day()] :\n this._weekdays[this._weekdays.isFormat.test(format) ? 'format' : 'standalone'][m.day()];\n }\n\n var defaultLocaleWeekdaysShort = 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_');\n function localeWeekdaysShort (m) {\n return (m) ? this._weekdaysShort[m.day()] : this._weekdaysShort;\n }\n\n var defaultLocaleWeekdaysMin = 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_');\n function localeWeekdaysMin (m) {\n return (m) ? this._weekdaysMin[m.day()] : this._weekdaysMin;\n }\n\n function handleStrictParse$1(weekdayName, format, strict) {\n var i, ii, mom, llc = weekdayName.toLocaleLowerCase();\n if (!this._weekdaysParse) {\n this._weekdaysParse = [];\n this._shortWeekdaysParse = [];\n this._minWeekdaysParse = [];\n\n for (i = 0; i < 7; ++i) {\n mom = createUTC([2000, 1]).day(i);\n this._minWeekdaysParse[i] = this.weekdaysMin(mom, '').toLocaleLowerCase();\n this._shortWeekdaysParse[i] = this.weekdaysShort(mom, '').toLocaleLowerCase();\n this._weekdaysParse[i] = this.weekdays(mom, '').toLocaleLowerCase();\n }\n }\n\n if (strict) {\n if (format === 'dddd') {\n ii = indexOf.call(this._weekdaysParse, llc);\n return ii !== -1 ? ii : null;\n } else if (format === 'ddd') {\n ii = indexOf.call(this._shortWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n } else {\n ii = indexOf.call(this._minWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n }\n } else {\n if (format === 'dddd') {\n ii = indexOf.call(this._weekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._shortWeekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._minWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n } else if (format === 'ddd') {\n ii = indexOf.call(this._shortWeekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._weekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._minWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n } else {\n ii = indexOf.call(this._minWeekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._weekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._shortWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n }\n }\n }\n\n function localeWeekdaysParse (weekdayName, format, strict) {\n var i, mom, regex;\n\n if (this._weekdaysParseExact) {\n return handleStrictParse$1.call(this, weekdayName, format, strict);\n }\n\n if (!this._weekdaysParse) {\n this._weekdaysParse = [];\n this._minWeekdaysParse = [];\n this._shortWeekdaysParse = [];\n this._fullWeekdaysParse = [];\n }\n\n for (i = 0; i < 7; i++) {\n // make the regex if we don't have it already\n\n mom = createUTC([2000, 1]).day(i);\n if (strict && !this._fullWeekdaysParse[i]) {\n this._fullWeekdaysParse[i] = new RegExp('^' + this.weekdays(mom, '').replace('.', '\\\\.?') + '$', 'i');\n this._shortWeekdaysParse[i] = new RegExp('^' + this.weekdaysShort(mom, '').replace('.', '\\\\.?') + '$', 'i');\n this._minWeekdaysParse[i] = new RegExp('^' + this.weekdaysMin(mom, '').replace('.', '\\\\.?') + '$', 'i');\n }\n if (!this._weekdaysParse[i]) {\n regex = '^' + this.weekdays(mom, '') + '|^' + this.weekdaysShort(mom, '') + '|^' + this.weekdaysMin(mom, '');\n this._weekdaysParse[i] = new RegExp(regex.replace('.', ''), 'i');\n }\n // test the regex\n if (strict && format === 'dddd' && this._fullWeekdaysParse[i].test(weekdayName)) {\n return i;\n } else if (strict && format === 'ddd' && this._shortWeekdaysParse[i].test(weekdayName)) {\n return i;\n } else if (strict && format === 'dd' && this._minWeekdaysParse[i].test(weekdayName)) {\n return i;\n } else if (!strict && this._weekdaysParse[i].test(weekdayName)) {\n return i;\n }\n }\n }\n\n // MOMENTS\n\n function getSetDayOfWeek (input) {\n if (!this.isValid()) {\n return input != null ? this : NaN;\n }\n var day = this._isUTC ? this._d.getUTCDay() : this._d.getDay();\n if (input != null) {\n input = parseWeekday(input, this.localeData());\n return this.add(input - day, 'd');\n } else {\n return day;\n }\n }\n\n function getSetLocaleDayOfWeek (input) {\n if (!this.isValid()) {\n return input != null ? this : NaN;\n }\n var weekday = (this.day() + 7 - this.localeData()._week.dow) % 7;\n return input == null ? weekday : this.add(input - weekday, 'd');\n }\n\n function getSetISODayOfWeek (input) {\n if (!this.isValid()) {\n return input != null ? this : NaN;\n }\n\n // behaves the same as moment#day except\n // as a getter, returns 7 instead of 0 (1-7 range instead of 0-6)\n // as a setter, sunday should belong to the previous week.\n\n if (input != null) {\n var weekday = parseIsoWeekday(input, this.localeData());\n return this.day(this.day() % 7 ? weekday : weekday - 7);\n } else {\n return this.day() || 7;\n }\n }\n\n var defaultWeekdaysRegex = matchWord;\n function weekdaysRegex (isStrict) {\n if (this._weekdaysParseExact) {\n if (!hasOwnProp(this, '_weekdaysRegex')) {\n computeWeekdaysParse.call(this);\n }\n if (isStrict) {\n return this._weekdaysStrictRegex;\n } else {\n return this._weekdaysRegex;\n }\n } else {\n if (!hasOwnProp(this, '_weekdaysRegex')) {\n this._weekdaysRegex = defaultWeekdaysRegex;\n }\n return this._weekdaysStrictRegex && isStrict ?\n this._weekdaysStrictRegex : this._weekdaysRegex;\n }\n }\n\n var defaultWeekdaysShortRegex = matchWord;\n function weekdaysShortRegex (isStrict) {\n if (this._weekdaysParseExact) {\n if (!hasOwnProp(this, '_weekdaysRegex')) {\n computeWeekdaysParse.call(this);\n }\n if (isStrict) {\n return this._weekdaysShortStrictRegex;\n } else {\n return this._weekdaysShortRegex;\n }\n } else {\n if (!hasOwnProp(this, '_weekdaysShortRegex')) {\n this._weekdaysShortRegex = defaultWeekdaysShortRegex;\n }\n return this._weekdaysShortStrictRegex && isStrict ?\n this._weekdaysShortStrictRegex : this._weekdaysShortRegex;\n }\n }\n\n var defaultWeekdaysMinRegex = matchWord;\n function weekdaysMinRegex (isStrict) {\n if (this._weekdaysParseExact) {\n if (!hasOwnProp(this, '_weekdaysRegex')) {\n computeWeekdaysParse.call(this);\n }\n if (isStrict) {\n return this._weekdaysMinStrictRegex;\n } else {\n return this._weekdaysMinRegex;\n }\n } else {\n if (!hasOwnProp(this, '_weekdaysMinRegex')) {\n this._weekdaysMinRegex = defaultWeekdaysMinRegex;\n }\n return this._weekdaysMinStrictRegex && isStrict ?\n this._weekdaysMinStrictRegex : this._weekdaysMinRegex;\n }\n }\n\n\n function computeWeekdaysParse () {\n function cmpLenRev(a, b) {\n return b.length - a.length;\n }\n\n var minPieces = [], shortPieces = [], longPieces = [], mixedPieces = [],\n i, mom, minp, shortp, longp;\n for (i = 0; i < 7; i++) {\n // make the regex if we don't have it already\n mom = createUTC([2000, 1]).day(i);\n minp = this.weekdaysMin(mom, '');\n shortp = this.weekdaysShort(mom, '');\n longp = this.weekdays(mom, '');\n minPieces.push(minp);\n shortPieces.push(shortp);\n longPieces.push(longp);\n mixedPieces.push(minp);\n mixedPieces.push(shortp);\n mixedPieces.push(longp);\n }\n // Sorting makes sure if one weekday (or abbr) is a prefix of another it\n // will match the longer piece.\n minPieces.sort(cmpLenRev);\n shortPieces.sort(cmpLenRev);\n longPieces.sort(cmpLenRev);\n mixedPieces.sort(cmpLenRev);\n for (i = 0; i < 7; i++) {\n shortPieces[i] = regexEscape(shortPieces[i]);\n longPieces[i] = regexEscape(longPieces[i]);\n mixedPieces[i] = regexEscape(mixedPieces[i]);\n }\n\n this._weekdaysRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n this._weekdaysShortRegex = this._weekdaysRegex;\n this._weekdaysMinRegex = this._weekdaysRegex;\n\n this._weekdaysStrictRegex = new RegExp('^(' + longPieces.join('|') + ')', 'i');\n this._weekdaysShortStrictRegex = new RegExp('^(' + shortPieces.join('|') + ')', 'i');\n this._weekdaysMinStrictRegex = new RegExp('^(' + minPieces.join('|') + ')', 'i');\n }\n\n // FORMATTING\n\n function hFormat() {\n return this.hours() % 12 || 12;\n }\n\n function kFormat() {\n return this.hours() || 24;\n }\n\n addFormatToken('H', ['HH', 2], 0, 'hour');\n addFormatToken('h', ['hh', 2], 0, hFormat);\n addFormatToken('k', ['kk', 2], 0, kFormat);\n\n addFormatToken('hmm', 0, 0, function () {\n return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2);\n });\n\n addFormatToken('hmmss', 0, 0, function () {\n return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2) +\n zeroFill(this.seconds(), 2);\n });\n\n addFormatToken('Hmm', 0, 0, function () {\n return '' + this.hours() + zeroFill(this.minutes(), 2);\n });\n\n addFormatToken('Hmmss', 0, 0, function () {\n return '' + this.hours() + zeroFill(this.minutes(), 2) +\n zeroFill(this.seconds(), 2);\n });\n\n function meridiem (token, lowercase) {\n addFormatToken(token, 0, 0, function () {\n return this.localeData().meridiem(this.hours(), this.minutes(), lowercase);\n });\n }\n\n meridiem('a', true);\n meridiem('A', false);\n\n // ALIASES\n\n addUnitAlias('hour', 'h');\n\n // PRIORITY\n addUnitPriority('hour', 13);\n\n // PARSING\n\n function matchMeridiem (isStrict, locale) {\n return locale._meridiemParse;\n }\n\n addRegexToken('a', matchMeridiem);\n addRegexToken('A', matchMeridiem);\n addRegexToken('H', match1to2);\n addRegexToken('h', match1to2);\n addRegexToken('k', match1to2);\n addRegexToken('HH', match1to2, match2);\n addRegexToken('hh', match1to2, match2);\n addRegexToken('kk', match1to2, match2);\n\n addRegexToken('hmm', match3to4);\n addRegexToken('hmmss', match5to6);\n addRegexToken('Hmm', match3to4);\n addRegexToken('Hmmss', match5to6);\n\n addParseToken(['H', 'HH'], HOUR);\n addParseToken(['k', 'kk'], function (input, array, config) {\n var kInput = toInt(input);\n array[HOUR] = kInput === 24 ? 0 : kInput;\n });\n addParseToken(['a', 'A'], function (input, array, config) {\n config._isPm = config._locale.isPM(input);\n config._meridiem = input;\n });\n addParseToken(['h', 'hh'], function (input, array, config) {\n array[HOUR] = toInt(input);\n getParsingFlags(config).bigHour = true;\n });\n addParseToken('hmm', function (input, array, config) {\n var pos = input.length - 2;\n array[HOUR] = toInt(input.substr(0, pos));\n array[MINUTE] = toInt(input.substr(pos));\n getParsingFlags(config).bigHour = true;\n });\n addParseToken('hmmss', function (input, array, config) {\n var pos1 = input.length - 4;\n var pos2 = input.length - 2;\n array[HOUR] = toInt(input.substr(0, pos1));\n array[MINUTE] = toInt(input.substr(pos1, 2));\n array[SECOND] = toInt(input.substr(pos2));\n getParsingFlags(config).bigHour = true;\n });\n addParseToken('Hmm', function (input, array, config) {\n var pos = input.length - 2;\n array[HOUR] = toInt(input.substr(0, pos));\n array[MINUTE] = toInt(input.substr(pos));\n });\n addParseToken('Hmmss', function (input, array, config) {\n var pos1 = input.length - 4;\n var pos2 = input.length - 2;\n array[HOUR] = toInt(input.substr(0, pos1));\n array[MINUTE] = toInt(input.substr(pos1, 2));\n array[SECOND] = toInt(input.substr(pos2));\n });\n\n // LOCALES\n\n function localeIsPM (input) {\n // IE8 Quirks Mode & IE7 Standards Mode do not allow accessing strings like arrays\n // Using charAt should be more compatible.\n return ((input + '').toLowerCase().charAt(0) === 'p');\n }\n\n var defaultLocaleMeridiemParse = /[ap]\\.?m?\\.?/i;\n function localeMeridiem (hours, minutes, isLower) {\n if (hours > 11) {\n return isLower ? 'pm' : 'PM';\n } else {\n return isLower ? 'am' : 'AM';\n }\n }\n\n\n // MOMENTS\n\n // Setting the hour should keep the time, because the user explicitly\n // specified which hour they want. So trying to maintain the same hour (in\n // a new timezone) makes sense. Adding/subtracting hours does not follow\n // this rule.\n var getSetHour = makeGetSet('Hours', true);\n\n var baseConfig = {\n calendar: defaultCalendar,\n longDateFormat: defaultLongDateFormat,\n invalidDate: defaultInvalidDate,\n ordinal: defaultOrdinal,\n dayOfMonthOrdinalParse: defaultDayOfMonthOrdinalParse,\n relativeTime: defaultRelativeTime,\n\n months: defaultLocaleMonths,\n monthsShort: defaultLocaleMonthsShort,\n\n week: defaultLocaleWeek,\n\n weekdays: defaultLocaleWeekdays,\n weekdaysMin: defaultLocaleWeekdaysMin,\n weekdaysShort: defaultLocaleWeekdaysShort,\n\n meridiemParse: defaultLocaleMeridiemParse\n };\n\n // internal storage for locale config files\n var locales = {};\n var localeFamilies = {};\n var globalLocale;\n\n function normalizeLocale(key) {\n return key ? key.toLowerCase().replace('_', '-') : key;\n }\n\n // pick the locale from the array\n // try ['en-au', 'en-gb'] as 'en-au', 'en-gb', 'en', as in move through the list trying each\n // substring from most specific to least, but move to the next array item if it's a more specific variant than the current root\n function chooseLocale(names) {\n var i = 0, j, next, locale, split;\n\n while (i < names.length) {\n split = normalizeLocale(names[i]).split('-');\n j = split.length;\n next = normalizeLocale(names[i + 1]);\n next = next ? next.split('-') : null;\n while (j > 0) {\n locale = loadLocale(split.slice(0, j).join('-'));\n if (locale) {\n return locale;\n }\n if (next && next.length >= j && compareArrays(split, next, true) >= j - 1) {\n //the next array item is better than a shallower substring of this one\n break;\n }\n j--;\n }\n i++;\n }\n return globalLocale;\n }\n\n function loadLocale(name) {\n var oldLocale = null;\n // TODO: Find a better way to register and load all the locales in Node\n if (!locales[name] && (typeof module !== 'undefined') &&\n module && module.exports) {\n try {\n oldLocale = globalLocale._abbr;\n var aliasedRequire = require;\n aliasedRequire('./locale/' + name);\n getSetGlobalLocale(oldLocale);\n } catch (e) {}\n }\n return locales[name];\n }\n\n // This function will load locale and then set the global locale. If\n // no arguments are passed in, it will simply return the current global\n // locale key.\n function getSetGlobalLocale (key, values) {\n var data;\n if (key) {\n if (isUndefined(values)) {\n data = getLocale(key);\n }\n else {\n data = defineLocale(key, values);\n }\n\n if (data) {\n // moment.duration._locale = moment._locale = data;\n globalLocale = data;\n }\n else {\n if ((typeof console !== 'undefined') && console.warn) {\n //warn user if arguments are passed but the locale could not be set\n console.warn('Locale ' + key + ' not found. Did you forget to load it?');\n }\n }\n }\n\n return globalLocale._abbr;\n }\n\n function defineLocale (name, config) {\n if (config !== null) {\n var locale, parentConfig = baseConfig;\n config.abbr = name;\n if (locales[name] != null) {\n deprecateSimple('defineLocaleOverride',\n 'use moment.updateLocale(localeName, config) to change ' +\n 'an existing locale. moment.defineLocale(localeName, ' +\n 'config) should only be used for creating a new locale ' +\n 'See http://momentjs.com/guides/#/warnings/define-locale/ for more info.');\n parentConfig = locales[name]._config;\n } else if (config.parentLocale != null) {\n if (locales[config.parentLocale] != null) {\n parentConfig = locales[config.parentLocale]._config;\n } else {\n locale = loadLocale(config.parentLocale);\n if (locale != null) {\n parentConfig = locale._config;\n } else {\n if (!localeFamilies[config.parentLocale]) {\n localeFamilies[config.parentLocale] = [];\n }\n localeFamilies[config.parentLocale].push({\n name: name,\n config: config\n });\n return null;\n }\n }\n }\n locales[name] = new Locale(mergeConfigs(parentConfig, config));\n\n if (localeFamilies[name]) {\n localeFamilies[name].forEach(function (x) {\n defineLocale(x.name, x.config);\n });\n }\n\n // backwards compat for now: also set the locale\n // make sure we set the locale AFTER all child locales have been\n // created, so we won't end up with the child locale set.\n getSetGlobalLocale(name);\n\n\n return locales[name];\n } else {\n // useful for testing\n delete locales[name];\n return null;\n }\n }\n\n function updateLocale(name, config) {\n if (config != null) {\n var locale, tmpLocale, parentConfig = baseConfig;\n // MERGE\n tmpLocale = loadLocale(name);\n if (tmpLocale != null) {\n parentConfig = tmpLocale._config;\n }\n config = mergeConfigs(parentConfig, config);\n locale = new Locale(config);\n locale.parentLocale = locales[name];\n locales[name] = locale;\n\n // backwards compat for now: also set the locale\n getSetGlobalLocale(name);\n } else {\n // pass null for config to unupdate, useful for tests\n if (locales[name] != null) {\n if (locales[name].parentLocale != null) {\n locales[name] = locales[name].parentLocale;\n } else if (locales[name] != null) {\n delete locales[name];\n }\n }\n }\n return locales[name];\n }\n\n // returns locale data\n function getLocale (key) {\n var locale;\n\n if (key && key._locale && key._locale._abbr) {\n key = key._locale._abbr;\n }\n\n if (!key) {\n return globalLocale;\n }\n\n if (!isArray(key)) {\n //short-circuit everything else\n locale = loadLocale(key);\n if (locale) {\n return locale;\n }\n key = [key];\n }\n\n return chooseLocale(key);\n }\n\n function listLocales() {\n return keys(locales);\n }\n\n function checkOverflow (m) {\n var overflow;\n var a = m._a;\n\n if (a && getParsingFlags(m).overflow === -2) {\n overflow =\n a[MONTH] < 0 || a[MONTH] > 11 ? MONTH :\n a[DATE] < 1 || a[DATE] > daysInMonth(a[YEAR], a[MONTH]) ? DATE :\n a[HOUR] < 0 || a[HOUR] > 24 || (a[HOUR] === 24 && (a[MINUTE] !== 0 || a[SECOND] !== 0 || a[MILLISECOND] !== 0)) ? HOUR :\n a[MINUTE] < 0 || a[MINUTE] > 59 ? MINUTE :\n a[SECOND] < 0 || a[SECOND] > 59 ? SECOND :\n a[MILLISECOND] < 0 || a[MILLISECOND] > 999 ? MILLISECOND :\n -1;\n\n if (getParsingFlags(m)._overflowDayOfYear && (overflow < YEAR || overflow > DATE)) {\n overflow = DATE;\n }\n if (getParsingFlags(m)._overflowWeeks && overflow === -1) {\n overflow = WEEK;\n }\n if (getParsingFlags(m)._overflowWeekday && overflow === -1) {\n overflow = WEEKDAY;\n }\n\n getParsingFlags(m).overflow = overflow;\n }\n\n return m;\n }\n\n // Pick the first defined of two or three arguments.\n function defaults(a, b, c) {\n if (a != null) {\n return a;\n }\n if (b != null) {\n return b;\n }\n return c;\n }\n\n function currentDateArray(config) {\n // hooks is actually the exported moment object\n var nowValue = new Date(hooks.now());\n if (config._useUTC) {\n return [nowValue.getUTCFullYear(), nowValue.getUTCMonth(), nowValue.getUTCDate()];\n }\n return [nowValue.getFullYear(), nowValue.getMonth(), nowValue.getDate()];\n }\n\n // convert an array to a date.\n // the array should mirror the parameters below\n // note: all values past the year are optional and will default to the lowest possible value.\n // [year, month, day , hour, minute, second, millisecond]\n function configFromArray (config) {\n var i, date, input = [], currentDate, expectedWeekday, yearToUse;\n\n if (config._d) {\n return;\n }\n\n currentDate = currentDateArray(config);\n\n //compute day of the year from weeks and weekdays\n if (config._w && config._a[DATE] == null && config._a[MONTH] == null) {\n dayOfYearFromWeekInfo(config);\n }\n\n //if the day of the year is set, figure out what it is\n if (config._dayOfYear != null) {\n yearToUse = defaults(config._a[YEAR], currentDate[YEAR]);\n\n if (config._dayOfYear > daysInYear(yearToUse) || config._dayOfYear === 0) {\n getParsingFlags(config)._overflowDayOfYear = true;\n }\n\n date = createUTCDate(yearToUse, 0, config._dayOfYear);\n config._a[MONTH] = date.getUTCMonth();\n config._a[DATE] = date.getUTCDate();\n }\n\n // Default to current date.\n // * if no year, month, day of month are given, default to today\n // * if day of month is given, default month and year\n // * if month is given, default only year\n // * if year is given, don't default anything\n for (i = 0; i < 3 && config._a[i] == null; ++i) {\n config._a[i] = input[i] = currentDate[i];\n }\n\n // Zero out whatever was not defaulted, including time\n for (; i < 7; i++) {\n config._a[i] = input[i] = (config._a[i] == null) ? (i === 2 ? 1 : 0) : config._a[i];\n }\n\n // Check for 24:00:00.000\n if (config._a[HOUR] === 24 &&\n config._a[MINUTE] === 0 &&\n config._a[SECOND] === 0 &&\n config._a[MILLISECOND] === 0) {\n config._nextDay = true;\n config._a[HOUR] = 0;\n }\n\n config._d = (config._useUTC ? createUTCDate : createDate).apply(null, input);\n expectedWeekday = config._useUTC ? config._d.getUTCDay() : config._d.getDay();\n\n // Apply timezone offset from input. The actual utcOffset can be changed\n // with parseZone.\n if (config._tzm != null) {\n config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);\n }\n\n if (config._nextDay) {\n config._a[HOUR] = 24;\n }\n\n // check for mismatching day of week\n if (config._w && typeof config._w.d !== 'undefined' && config._w.d !== expectedWeekday) {\n getParsingFlags(config).weekdayMismatch = true;\n }\n }\n\n function dayOfYearFromWeekInfo(config) {\n var w, weekYear, week, weekday, dow, doy, temp, weekdayOverflow;\n\n w = config._w;\n if (w.GG != null || w.W != null || w.E != null) {\n dow = 1;\n doy = 4;\n\n // TODO: We need to take the current isoWeekYear, but that depends on\n // how we interpret now (local, utc, fixed offset). So create\n // a now version of current config (take local/utc/offset flags, and\n // create now).\n weekYear = defaults(w.GG, config._a[YEAR], weekOfYear(createLocal(), 1, 4).year);\n week = defaults(w.W, 1);\n weekday = defaults(w.E, 1);\n if (weekday < 1 || weekday > 7) {\n weekdayOverflow = true;\n }\n } else {\n dow = config._locale._week.dow;\n doy = config._locale._week.doy;\n\n var curWeek = weekOfYear(createLocal(), dow, doy);\n\n weekYear = defaults(w.gg, config._a[YEAR], curWeek.year);\n\n // Default to current week.\n week = defaults(w.w, curWeek.week);\n\n if (w.d != null) {\n // weekday -- low day numbers are considered next week\n weekday = w.d;\n if (weekday < 0 || weekday > 6) {\n weekdayOverflow = true;\n }\n } else if (w.e != null) {\n // local weekday -- counting starts from begining of week\n weekday = w.e + dow;\n if (w.e < 0 || w.e > 6) {\n weekdayOverflow = true;\n }\n } else {\n // default to begining of week\n weekday = dow;\n }\n }\n if (week < 1 || week > weeksInYear(weekYear, dow, doy)) {\n getParsingFlags(config)._overflowWeeks = true;\n } else if (weekdayOverflow != null) {\n getParsingFlags(config)._overflowWeekday = true;\n } else {\n temp = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy);\n config._a[YEAR] = temp.year;\n config._dayOfYear = temp.dayOfYear;\n }\n }\n\n // iso 8601 regex\n // 0000-00-00 0000-W00 or 0000-W00-0 + T + 00 or 00:00 or 00:00:00 or 00:00:00.000 + +00:00 or +0000 or +00)\n var extendedIsoRegex = /^\\s*((?:[+-]\\d{6}|\\d{4})-(?:\\d\\d-\\d\\d|W\\d\\d-\\d|W\\d\\d|\\d\\d\\d|\\d\\d))(?:(T| )(\\d\\d(?::\\d\\d(?::\\d\\d(?:[.,]\\d+)?)?)?)([\\+\\-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/;\n var basicIsoRegex = /^\\s*((?:[+-]\\d{6}|\\d{4})(?:\\d\\d\\d\\d|W\\d\\d\\d|W\\d\\d|\\d\\d\\d|\\d\\d))(?:(T| )(\\d\\d(?:\\d\\d(?:\\d\\d(?:[.,]\\d+)?)?)?)([\\+\\-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/;\n\n var tzRegex = /Z|[+-]\\d\\d(?::?\\d\\d)?/;\n\n var isoDates = [\n ['YYYYYY-MM-DD', /[+-]\\d{6}-\\d\\d-\\d\\d/],\n ['YYYY-MM-DD', /\\d{4}-\\d\\d-\\d\\d/],\n ['GGGG-[W]WW-E', /\\d{4}-W\\d\\d-\\d/],\n ['GGGG-[W]WW', /\\d{4}-W\\d\\d/, false],\n ['YYYY-DDD', /\\d{4}-\\d{3}/],\n ['YYYY-MM', /\\d{4}-\\d\\d/, false],\n ['YYYYYYMMDD', /[+-]\\d{10}/],\n ['YYYYMMDD', /\\d{8}/],\n // YYYYMM is NOT allowed by the standard\n ['GGGG[W]WWE', /\\d{4}W\\d{3}/],\n ['GGGG[W]WW', /\\d{4}W\\d{2}/, false],\n ['YYYYDDD', /\\d{7}/]\n ];\n\n // iso time formats and regexes\n var isoTimes = [\n ['HH:mm:ss.SSSS', /\\d\\d:\\d\\d:\\d\\d\\.\\d+/],\n ['HH:mm:ss,SSSS', /\\d\\d:\\d\\d:\\d\\d,\\d+/],\n ['HH:mm:ss', /\\d\\d:\\d\\d:\\d\\d/],\n ['HH:mm', /\\d\\d:\\d\\d/],\n ['HHmmss.SSSS', /\\d\\d\\d\\d\\d\\d\\.\\d+/],\n ['HHmmss,SSSS', /\\d\\d\\d\\d\\d\\d,\\d+/],\n ['HHmmss', /\\d\\d\\d\\d\\d\\d/],\n ['HHmm', /\\d\\d\\d\\d/],\n ['HH', /\\d\\d/]\n ];\n\n var aspNetJsonRegex = /^\\/?Date\\((\\-?\\d+)/i;\n\n // date from iso format\n function configFromISO(config) {\n var i, l,\n string = config._i,\n match = extendedIsoRegex.exec(string) || basicIsoRegex.exec(string),\n allowTime, dateFormat, timeFormat, tzFormat;\n\n if (match) {\n getParsingFlags(config).iso = true;\n\n for (i = 0, l = isoDates.length; i < l; i++) {\n if (isoDates[i][1].exec(match[1])) {\n dateFormat = isoDates[i][0];\n allowTime = isoDates[i][2] !== false;\n break;\n }\n }\n if (dateFormat == null) {\n config._isValid = false;\n return;\n }\n if (match[3]) {\n for (i = 0, l = isoTimes.length; i < l; i++) {\n if (isoTimes[i][1].exec(match[3])) {\n // match[2] should be 'T' or space\n timeFormat = (match[2] || ' ') + isoTimes[i][0];\n break;\n }\n }\n if (timeFormat == null) {\n config._isValid = false;\n return;\n }\n }\n if (!allowTime && timeFormat != null) {\n config._isValid = false;\n return;\n }\n if (match[4]) {\n if (tzRegex.exec(match[4])) {\n tzFormat = 'Z';\n } else {\n config._isValid = false;\n return;\n }\n }\n config._f = dateFormat + (timeFormat || '') + (tzFormat || '');\n configFromStringAndFormat(config);\n } else {\n config._isValid = false;\n }\n }\n\n // RFC 2822 regex: For details see https://tools.ietf.org/html/rfc2822#section-3.3\n var rfc2822 = /^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\\s)?(\\d{1,2})\\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\\s(\\d{2,4})\\s(\\d\\d):(\\d\\d)(?::(\\d\\d))?\\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\\d{4}))$/;\n\n function extractFromRFC2822Strings(yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr) {\n var result = [\n untruncateYear(yearStr),\n defaultLocaleMonthsShort.indexOf(monthStr),\n parseInt(dayStr, 10),\n parseInt(hourStr, 10),\n parseInt(minuteStr, 10)\n ];\n\n if (secondStr) {\n result.push(parseInt(secondStr, 10));\n }\n\n return result;\n }\n\n function untruncateYear(yearStr) {\n var year = parseInt(yearStr, 10);\n if (year <= 49) {\n return 2000 + year;\n } else if (year <= 999) {\n return 1900 + year;\n }\n return year;\n }\n\n function preprocessRFC2822(s) {\n // Remove comments and folding whitespace and replace multiple-spaces with a single space\n return s.replace(/\\([^)]*\\)|[\\n\\t]/g, ' ').replace(/(\\s\\s+)/g, ' ').replace(/^\\s\\s*/, '').replace(/\\s\\s*$/, '');\n }\n\n function checkWeekday(weekdayStr, parsedInput, config) {\n if (weekdayStr) {\n // TODO: Replace the vanilla JS Date object with an indepentent day-of-week check.\n var weekdayProvided = defaultLocaleWeekdaysShort.indexOf(weekdayStr),\n weekdayActual = new Date(parsedInput[0], parsedInput[1], parsedInput[2]).getDay();\n if (weekdayProvided !== weekdayActual) {\n getParsingFlags(config).weekdayMismatch = true;\n config._isValid = false;\n return false;\n }\n }\n return true;\n }\n\n var obsOffsets = {\n UT: 0,\n GMT: 0,\n EDT: -4 * 60,\n EST: -5 * 60,\n CDT: -5 * 60,\n CST: -6 * 60,\n MDT: -6 * 60,\n MST: -7 * 60,\n PDT: -7 * 60,\n PST: -8 * 60\n };\n\n function calculateOffset(obsOffset, militaryOffset, numOffset) {\n if (obsOffset) {\n return obsOffsets[obsOffset];\n } else if (militaryOffset) {\n // the only allowed military tz is Z\n return 0;\n } else {\n var hm = parseInt(numOffset, 10);\n var m = hm % 100, h = (hm - m) / 100;\n return h * 60 + m;\n }\n }\n\n // date and time from ref 2822 format\n function configFromRFC2822(config) {\n var match = rfc2822.exec(preprocessRFC2822(config._i));\n if (match) {\n var parsedArray = extractFromRFC2822Strings(match[4], match[3], match[2], match[5], match[6], match[7]);\n if (!checkWeekday(match[1], parsedArray, config)) {\n return;\n }\n\n config._a = parsedArray;\n config._tzm = calculateOffset(match[8], match[9], match[10]);\n\n config._d = createUTCDate.apply(null, config._a);\n config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);\n\n getParsingFlags(config).rfc2822 = true;\n } else {\n config._isValid = false;\n }\n }\n\n // date from iso format or fallback\n function configFromString(config) {\n var matched = aspNetJsonRegex.exec(config._i);\n\n if (matched !== null) {\n config._d = new Date(+matched[1]);\n return;\n }\n\n configFromISO(config);\n if (config._isValid === false) {\n delete config._isValid;\n } else {\n return;\n }\n\n configFromRFC2822(config);\n if (config._isValid === false) {\n delete config._isValid;\n } else {\n return;\n }\n\n // Final attempt, use Input Fallback\n hooks.createFromInputFallback(config);\n }\n\n hooks.createFromInputFallback = deprecate(\n 'value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), ' +\n 'which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are ' +\n 'discouraged and will be removed in an upcoming major release. Please refer to ' +\n 'http://momentjs.com/guides/#/warnings/js-date/ for more info.',\n function (config) {\n config._d = new Date(config._i + (config._useUTC ? ' UTC' : ''));\n }\n );\n\n // constant that refers to the ISO standard\n hooks.ISO_8601 = function () {};\n\n // constant that refers to the RFC 2822 form\n hooks.RFC_2822 = function () {};\n\n // date from string and format string\n function configFromStringAndFormat(config) {\n // TODO: Move this to another part of the creation flow to prevent circular deps\n if (config._f === hooks.ISO_8601) {\n configFromISO(config);\n return;\n }\n if (config._f === hooks.RFC_2822) {\n configFromRFC2822(config);\n return;\n }\n config._a = [];\n getParsingFlags(config).empty = true;\n\n // This array is used to make a Date, either with `new Date` or `Date.UTC`\n var string = '' + config._i,\n i, parsedInput, tokens, token, skipped,\n stringLength = string.length,\n totalParsedInputLength = 0;\n\n tokens = expandFormat(config._f, config._locale).match(formattingTokens) || [];\n\n for (i = 0; i < tokens.length; i++) {\n token = tokens[i];\n parsedInput = (string.match(getParseRegexForToken(token, config)) || [])[0];\n // console.log('token', token, 'parsedInput', parsedInput,\n // 'regex', getParseRegexForToken(token, config));\n if (parsedInput) {\n skipped = string.substr(0, string.indexOf(parsedInput));\n if (skipped.length > 0) {\n getParsingFlags(config).unusedInput.push(skipped);\n }\n string = string.slice(string.indexOf(parsedInput) + parsedInput.length);\n totalParsedInputLength += parsedInput.length;\n }\n // don't parse if it's not a known token\n if (formatTokenFunctions[token]) {\n if (parsedInput) {\n getParsingFlags(config).empty = false;\n }\n else {\n getParsingFlags(config).unusedTokens.push(token);\n }\n addTimeToArrayFromToken(token, parsedInput, config);\n }\n else if (config._strict && !parsedInput) {\n getParsingFlags(config).unusedTokens.push(token);\n }\n }\n\n // add remaining unparsed input length to the string\n getParsingFlags(config).charsLeftOver = stringLength - totalParsedInputLength;\n if (string.length > 0) {\n getParsingFlags(config).unusedInput.push(string);\n }\n\n // clear _12h flag if hour is <= 12\n if (config._a[HOUR] <= 12 &&\n getParsingFlags(config).bigHour === true &&\n config._a[HOUR] > 0) {\n getParsingFlags(config).bigHour = undefined;\n }\n\n getParsingFlags(config).parsedDateParts = config._a.slice(0);\n getParsingFlags(config).meridiem = config._meridiem;\n // handle meridiem\n config._a[HOUR] = meridiemFixWrap(config._locale, config._a[HOUR], config._meridiem);\n\n configFromArray(config);\n checkOverflow(config);\n }\n\n\n function meridiemFixWrap (locale, hour, meridiem) {\n var isPm;\n\n if (meridiem == null) {\n // nothing to do\n return hour;\n }\n if (locale.meridiemHour != null) {\n return locale.meridiemHour(hour, meridiem);\n } else if (locale.isPM != null) {\n // Fallback\n isPm = locale.isPM(meridiem);\n if (isPm && hour < 12) {\n hour += 12;\n }\n if (!isPm && hour === 12) {\n hour = 0;\n }\n return hour;\n } else {\n // this is not supposed to happen\n return hour;\n }\n }\n\n // date from string and array of format strings\n function configFromStringAndArray(config) {\n var tempConfig,\n bestMoment,\n\n scoreToBeat,\n i,\n currentScore;\n\n if (config._f.length === 0) {\n getParsingFlags(config).invalidFormat = true;\n config._d = new Date(NaN);\n return;\n }\n\n for (i = 0; i < config._f.length; i++) {\n currentScore = 0;\n tempConfig = copyConfig({}, config);\n if (config._useUTC != null) {\n tempConfig._useUTC = config._useUTC;\n }\n tempConfig._f = config._f[i];\n configFromStringAndFormat(tempConfig);\n\n if (!isValid(tempConfig)) {\n continue;\n }\n\n // if there is any input that was not parsed add a penalty for that format\n currentScore += getParsingFlags(tempConfig).charsLeftOver;\n\n //or tokens\n currentScore += getParsingFlags(tempConfig).unusedTokens.length * 10;\n\n getParsingFlags(tempConfig).score = currentScore;\n\n if (scoreToBeat == null || currentScore < scoreToBeat) {\n scoreToBeat = currentScore;\n bestMoment = tempConfig;\n }\n }\n\n extend(config, bestMoment || tempConfig);\n }\n\n function configFromObject(config) {\n if (config._d) {\n return;\n }\n\n var i = normalizeObjectUnits(config._i);\n config._a = map([i.year, i.month, i.day || i.date, i.hour, i.minute, i.second, i.millisecond], function (obj) {\n return obj && parseInt(obj, 10);\n });\n\n configFromArray(config);\n }\n\n function createFromConfig (config) {\n var res = new Moment(checkOverflow(prepareConfig(config)));\n if (res._nextDay) {\n // Adding is smart enough around DST\n res.add(1, 'd');\n res._nextDay = undefined;\n }\n\n return res;\n }\n\n function prepareConfig (config) {\n var input = config._i,\n format = config._f;\n\n config._locale = config._locale || getLocale(config._l);\n\n if (input === null || (format === undefined && input === '')) {\n return createInvalid({nullInput: true});\n }\n\n if (typeof input === 'string') {\n config._i = input = config._locale.preparse(input);\n }\n\n if (isMoment(input)) {\n return new Moment(checkOverflow(input));\n } else if (isDate(input)) {\n config._d = input;\n } else if (isArray(format)) {\n configFromStringAndArray(config);\n } else if (format) {\n configFromStringAndFormat(config);\n } else {\n configFromInput(config);\n }\n\n if (!isValid(config)) {\n config._d = null;\n }\n\n return config;\n }\n\n function configFromInput(config) {\n var input = config._i;\n if (isUndefined(input)) {\n config._d = new Date(hooks.now());\n } else if (isDate(input)) {\n config._d = new Date(input.valueOf());\n } else if (typeof input === 'string') {\n configFromString(config);\n } else if (isArray(input)) {\n config._a = map(input.slice(0), function (obj) {\n return parseInt(obj, 10);\n });\n configFromArray(config);\n } else if (isObject(input)) {\n configFromObject(config);\n } else if (isNumber(input)) {\n // from milliseconds\n config._d = new Date(input);\n } else {\n hooks.createFromInputFallback(config);\n }\n }\n\n function createLocalOrUTC (input, format, locale, strict, isUTC) {\n var c = {};\n\n if (locale === true || locale === false) {\n strict = locale;\n locale = undefined;\n }\n\n if ((isObject(input) && isObjectEmpty(input)) ||\n (isArray(input) && input.length === 0)) {\n input = undefined;\n }\n // object construction must be done this way.\n // https://github.com/moment/moment/issues/1423\n c._isAMomentObject = true;\n c._useUTC = c._isUTC = isUTC;\n c._l = locale;\n c._i = input;\n c._f = format;\n c._strict = strict;\n\n return createFromConfig(c);\n }\n\n function createLocal (input, format, locale, strict) {\n return createLocalOrUTC(input, format, locale, strict, false);\n }\n\n var prototypeMin = deprecate(\n 'moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/',\n function () {\n var other = createLocal.apply(null, arguments);\n if (this.isValid() && other.isValid()) {\n return other < this ? this : other;\n } else {\n return createInvalid();\n }\n }\n );\n\n var prototypeMax = deprecate(\n 'moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/',\n function () {\n var other = createLocal.apply(null, arguments);\n if (this.isValid() && other.isValid()) {\n return other > this ? this : other;\n } else {\n return createInvalid();\n }\n }\n );\n\n // Pick a moment m from moments so that m[fn](other) is true for all\n // other. This relies on the function fn to be transitive.\n //\n // moments should either be an array of moment objects or an array, whose\n // first element is an array of moment objects.\n function pickBy(fn, moments) {\n var res, i;\n if (moments.length === 1 && isArray(moments[0])) {\n moments = moments[0];\n }\n if (!moments.length) {\n return createLocal();\n }\n res = moments[0];\n for (i = 1; i < moments.length; ++i) {\n if (!moments[i].isValid() || moments[i][fn](res)) {\n res = moments[i];\n }\n }\n return res;\n }\n\n // TODO: Use [].sort instead?\n function min () {\n var args = [].slice.call(arguments, 0);\n\n return pickBy('isBefore', args);\n }\n\n function max () {\n var args = [].slice.call(arguments, 0);\n\n return pickBy('isAfter', args);\n }\n\n var now = function () {\n return Date.now ? Date.now() : +(new Date());\n };\n\n var ordering = ['year', 'quarter', 'month', 'week', 'day', 'hour', 'minute', 'second', 'millisecond'];\n\n function isDurationValid(m) {\n for (var key in m) {\n if (!(indexOf.call(ordering, key) !== -1 && (m[key] == null || !isNaN(m[key])))) {\n return false;\n }\n }\n\n var unitHasDecimal = false;\n for (var i = 0; i < ordering.length; ++i) {\n if (m[ordering[i]]) {\n if (unitHasDecimal) {\n return false; // only allow non-integers for smallest unit\n }\n if (parseFloat(m[ordering[i]]) !== toInt(m[ordering[i]])) {\n unitHasDecimal = true;\n }\n }\n }\n\n return true;\n }\n\n function isValid$1() {\n return this._isValid;\n }\n\n function createInvalid$1() {\n return createDuration(NaN);\n }\n\n function Duration (duration) {\n var normalizedInput = normalizeObjectUnits(duration),\n years = normalizedInput.year || 0,\n quarters = normalizedInput.quarter || 0,\n months = normalizedInput.month || 0,\n weeks = normalizedInput.week || 0,\n days = normalizedInput.day || 0,\n hours = normalizedInput.hour || 0,\n minutes = normalizedInput.minute || 0,\n seconds = normalizedInput.second || 0,\n milliseconds = normalizedInput.millisecond || 0;\n\n this._isValid = isDurationValid(normalizedInput);\n\n // representation for dateAddRemove\n this._milliseconds = +milliseconds +\n seconds * 1e3 + // 1000\n minutes * 6e4 + // 1000 * 60\n hours * 1000 * 60 * 60; //using 1000 * 60 * 60 instead of 36e5 to avoid floating point rounding errors https://github.com/moment/moment/issues/2978\n // Because of dateAddRemove treats 24 hours as different from a\n // day when working around DST, we need to store them separately\n this._days = +days +\n weeks * 7;\n // It is impossible to translate months into days without knowing\n // which months you are are talking about, so we have to store\n // it separately.\n this._months = +months +\n quarters * 3 +\n years * 12;\n\n this._data = {};\n\n this._locale = getLocale();\n\n this._bubble();\n }\n\n function isDuration (obj) {\n return obj instanceof Duration;\n }\n\n function absRound (number) {\n if (number < 0) {\n return Math.round(-1 * number) * -1;\n } else {\n return Math.round(number);\n }\n }\n\n // FORMATTING\n\n function offset (token, separator) {\n addFormatToken(token, 0, 0, function () {\n var offset = this.utcOffset();\n var sign = '+';\n if (offset < 0) {\n offset = -offset;\n sign = '-';\n }\n return sign + zeroFill(~~(offset / 60), 2) + separator + zeroFill(~~(offset) % 60, 2);\n });\n }\n\n offset('Z', ':');\n offset('ZZ', '');\n\n // PARSING\n\n addRegexToken('Z', matchShortOffset);\n addRegexToken('ZZ', matchShortOffset);\n addParseToken(['Z', 'ZZ'], function (input, array, config) {\n config._useUTC = true;\n config._tzm = offsetFromString(matchShortOffset, input);\n });\n\n // HELPERS\n\n // timezone chunker\n // '+10:00' > ['10', '00']\n // '-1530' > ['-15', '30']\n var chunkOffset = /([\\+\\-]|\\d\\d)/gi;\n\n function offsetFromString(matcher, string) {\n var matches = (string || '').match(matcher);\n\n if (matches === null) {\n return null;\n }\n\n var chunk = matches[matches.length - 1] || [];\n var parts = (chunk + '').match(chunkOffset) || ['-', 0, 0];\n var minutes = +(parts[1] * 60) + toInt(parts[2]);\n\n return minutes === 0 ?\n 0 :\n parts[0] === '+' ? minutes : -minutes;\n }\n\n // Return a moment from input, that is local/utc/zone equivalent to model.\n function cloneWithOffset(input, model) {\n var res, diff;\n if (model._isUTC) {\n res = model.clone();\n diff = (isMoment(input) || isDate(input) ? input.valueOf() : createLocal(input).valueOf()) - res.valueOf();\n // Use low-level api, because this fn is low-level api.\n res._d.setTime(res._d.valueOf() + diff);\n hooks.updateOffset(res, false);\n return res;\n } else {\n return createLocal(input).local();\n }\n }\n\n function getDateOffset (m) {\n // On Firefox.24 Date#getTimezoneOffset returns a floating point.\n // https://github.com/moment/moment/pull/1871\n return -Math.round(m._d.getTimezoneOffset() / 15) * 15;\n }\n\n // HOOKS\n\n // This function will be called whenever a moment is mutated.\n // It is intended to keep the offset in sync with the timezone.\n hooks.updateOffset = function () {};\n\n // MOMENTS\n\n // keepLocalTime = true means only change the timezone, without\n // affecting the local hour. So 5:31:26 +0300 --[utcOffset(2, true)]-->\n // 5:31:26 +0200 It is possible that 5:31:26 doesn't exist with offset\n // +0200, so we adjust the time as needed, to be valid.\n //\n // Keeping the time actually adds/subtracts (one hour)\n // from the actual represented time. That is why we call updateOffset\n // a second time. In case it wants us to change the offset again\n // _changeInProgress == true case, then we have to adjust, because\n // there is no such time in the given timezone.\n function getSetOffset (input, keepLocalTime, keepMinutes) {\n var offset = this._offset || 0,\n localAdjust;\n if (!this.isValid()) {\n return input != null ? this : NaN;\n }\n if (input != null) {\n if (typeof input === 'string') {\n input = offsetFromString(matchShortOffset, input);\n if (input === null) {\n return this;\n }\n } else if (Math.abs(input) < 16 && !keepMinutes) {\n input = input * 60;\n }\n if (!this._isUTC && keepLocalTime) {\n localAdjust = getDateOffset(this);\n }\n this._offset = input;\n this._isUTC = true;\n if (localAdjust != null) {\n this.add(localAdjust, 'm');\n }\n if (offset !== input) {\n if (!keepLocalTime || this._changeInProgress) {\n addSubtract(this, createDuration(input - offset, 'm'), 1, false);\n } else if (!this._changeInProgress) {\n this._changeInProgress = true;\n hooks.updateOffset(this, true);\n this._changeInProgress = null;\n }\n }\n return this;\n } else {\n return this._isUTC ? offset : getDateOffset(this);\n }\n }\n\n function getSetZone (input, keepLocalTime) {\n if (input != null) {\n if (typeof input !== 'string') {\n input = -input;\n }\n\n this.utcOffset(input, keepLocalTime);\n\n return this;\n } else {\n return -this.utcOffset();\n }\n }\n\n function setOffsetToUTC (keepLocalTime) {\n return this.utcOffset(0, keepLocalTime);\n }\n\n function setOffsetToLocal (keepLocalTime) {\n if (this._isUTC) {\n this.utcOffset(0, keepLocalTime);\n this._isUTC = false;\n\n if (keepLocalTime) {\n this.subtract(getDateOffset(this), 'm');\n }\n }\n return this;\n }\n\n function setOffsetToParsedOffset () {\n if (this._tzm != null) {\n this.utcOffset(this._tzm, false, true);\n } else if (typeof this._i === 'string') {\n var tZone = offsetFromString(matchOffset, this._i);\n if (tZone != null) {\n this.utcOffset(tZone);\n }\n else {\n this.utcOffset(0, true);\n }\n }\n return this;\n }\n\n function hasAlignedHourOffset (input) {\n if (!this.isValid()) {\n return false;\n }\n input = input ? createLocal(input).utcOffset() : 0;\n\n return (this.utcOffset() - input) % 60 === 0;\n }\n\n function isDaylightSavingTime () {\n return (\n this.utcOffset() > this.clone().month(0).utcOffset() ||\n this.utcOffset() > this.clone().month(5).utcOffset()\n );\n }\n\n function isDaylightSavingTimeShifted () {\n if (!isUndefined(this._isDSTShifted)) {\n return this._isDSTShifted;\n }\n\n var c = {};\n\n copyConfig(c, this);\n c = prepareConfig(c);\n\n if (c._a) {\n var other = c._isUTC ? createUTC(c._a) : createLocal(c._a);\n this._isDSTShifted = this.isValid() &&\n compareArrays(c._a, other.toArray()) > 0;\n } else {\n this._isDSTShifted = false;\n }\n\n return this._isDSTShifted;\n }\n\n function isLocal () {\n return this.isValid() ? !this._isUTC : false;\n }\n\n function isUtcOffset () {\n return this.isValid() ? this._isUTC : false;\n }\n\n function isUtc () {\n return this.isValid() ? this._isUTC && this._offset === 0 : false;\n }\n\n // ASP.NET json date format regex\n var aspNetRegex = /^(\\-|\\+)?(?:(\\d*)[. ])?(\\d+)\\:(\\d+)(?:\\:(\\d+)(\\.\\d*)?)?$/;\n\n // from http://docs.closure-library.googlecode.com/git/closure_goog_date_date.js.source.html\n // somewhat more in line with 4.4.3.2 2004 spec, but allows decimal anywhere\n // and further modified to allow for strings containing both week and day\n var isoRegex = /^(-|\\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;\n\n function createDuration (input, key) {\n var duration = input,\n // matching against regexp is expensive, do it on demand\n match = null,\n sign,\n ret,\n diffRes;\n\n if (isDuration(input)) {\n duration = {\n ms : input._milliseconds,\n d : input._days,\n M : input._months\n };\n } else if (isNumber(input)) {\n duration = {};\n if (key) {\n duration[key] = input;\n } else {\n duration.milliseconds = input;\n }\n } else if (!!(match = aspNetRegex.exec(input))) {\n sign = (match[1] === '-') ? -1 : 1;\n duration = {\n y : 0,\n d : toInt(match[DATE]) * sign,\n h : toInt(match[HOUR]) * sign,\n m : toInt(match[MINUTE]) * sign,\n s : toInt(match[SECOND]) * sign,\n ms : toInt(absRound(match[MILLISECOND] * 1000)) * sign // the millisecond decimal point is included in the match\n };\n } else if (!!(match = isoRegex.exec(input))) {\n sign = (match[1] === '-') ? -1 : (match[1] === '+') ? 1 : 1;\n duration = {\n y : parseIso(match[2], sign),\n M : parseIso(match[3], sign),\n w : parseIso(match[4], sign),\n d : parseIso(match[5], sign),\n h : parseIso(match[6], sign),\n m : parseIso(match[7], sign),\n s : parseIso(match[8], sign)\n };\n } else if (duration == null) {// checks for null or undefined\n duration = {};\n } else if (typeof duration === 'object' && ('from' in duration || 'to' in duration)) {\n diffRes = momentsDifference(createLocal(duration.from), createLocal(duration.to));\n\n duration = {};\n duration.ms = diffRes.milliseconds;\n duration.M = diffRes.months;\n }\n\n ret = new Duration(duration);\n\n if (isDuration(input) && hasOwnProp(input, '_locale')) {\n ret._locale = input._locale;\n }\n\n return ret;\n }\n\n createDuration.fn = Duration.prototype;\n createDuration.invalid = createInvalid$1;\n\n function parseIso (inp, sign) {\n // We'd normally use ~~inp for this, but unfortunately it also\n // converts floats to ints.\n // inp may be undefined, so careful calling replace on it.\n var res = inp && parseFloat(inp.replace(',', '.'));\n // apply sign while we're at it\n return (isNaN(res) ? 0 : res) * sign;\n }\n\n function positiveMomentsDifference(base, other) {\n var res = {milliseconds: 0, months: 0};\n\n res.months = other.month() - base.month() +\n (other.year() - base.year()) * 12;\n if (base.clone().add(res.months, 'M').isAfter(other)) {\n --res.months;\n }\n\n res.milliseconds = +other - +(base.clone().add(res.months, 'M'));\n\n return res;\n }\n\n function momentsDifference(base, other) {\n var res;\n if (!(base.isValid() && other.isValid())) {\n return {milliseconds: 0, months: 0};\n }\n\n other = cloneWithOffset(other, base);\n if (base.isBefore(other)) {\n res = positiveMomentsDifference(base, other);\n } else {\n res = positiveMomentsDifference(other, base);\n res.milliseconds = -res.milliseconds;\n res.months = -res.months;\n }\n\n return res;\n }\n\n // TODO: remove 'name' arg after deprecation is removed\n function createAdder(direction, name) {\n return function (val, period) {\n var dur, tmp;\n //invert the arguments, but complain about it\n if (period !== null && !isNaN(+period)) {\n deprecateSimple(name, 'moment().' + name + '(period, number) is deprecated. Please use moment().' + name + '(number, period). ' +\n 'See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info.');\n tmp = val; val = period; period = tmp;\n }\n\n val = typeof val === 'string' ? +val : val;\n dur = createDuration(val, period);\n addSubtract(this, dur, direction);\n return this;\n };\n }\n\n function addSubtract (mom, duration, isAdding, updateOffset) {\n var milliseconds = duration._milliseconds,\n days = absRound(duration._days),\n months = absRound(duration._months);\n\n if (!mom.isValid()) {\n // No op\n return;\n }\n\n updateOffset = updateOffset == null ? true : updateOffset;\n\n if (months) {\n setMonth(mom, get(mom, 'Month') + months * isAdding);\n }\n if (days) {\n set$1(mom, 'Date', get(mom, 'Date') + days * isAdding);\n }\n if (milliseconds) {\n mom._d.setTime(mom._d.valueOf() + milliseconds * isAdding);\n }\n if (updateOffset) {\n hooks.updateOffset(mom, days || months);\n }\n }\n\n var add = createAdder(1, 'add');\n var subtract = createAdder(-1, 'subtract');\n\n function getCalendarFormat(myMoment, now) {\n var diff = myMoment.diff(now, 'days', true);\n return diff < -6 ? 'sameElse' :\n diff < -1 ? 'lastWeek' :\n diff < 0 ? 'lastDay' :\n diff < 1 ? 'sameDay' :\n diff < 2 ? 'nextDay' :\n diff < 7 ? 'nextWeek' : 'sameElse';\n }\n\n function calendar$1 (time, formats) {\n // We want to compare the start of today, vs this.\n // Getting start-of-today depends on whether we're local/utc/offset or not.\n var now = time || createLocal(),\n sod = cloneWithOffset(now, this).startOf('day'),\n format = hooks.calendarFormat(this, sod) || 'sameElse';\n\n var output = formats && (isFunction(formats[format]) ? formats[format].call(this, now) : formats[format]);\n\n return this.format(output || this.localeData().calendar(format, this, createLocal(now)));\n }\n\n function clone () {\n return new Moment(this);\n }\n\n function isAfter (input, units) {\n var localInput = isMoment(input) ? input : createLocal(input);\n if (!(this.isValid() && localInput.isValid())) {\n return false;\n }\n units = normalizeUnits(!isUndefined(units) ? units : 'millisecond');\n if (units === 'millisecond') {\n return this.valueOf() > localInput.valueOf();\n } else {\n return localInput.valueOf() < this.clone().startOf(units).valueOf();\n }\n }\n\n function isBefore (input, units) {\n var localInput = isMoment(input) ? input : createLocal(input);\n if (!(this.isValid() && localInput.isValid())) {\n return false;\n }\n units = normalizeUnits(!isUndefined(units) ? units : 'millisecond');\n if (units === 'millisecond') {\n return this.valueOf() < localInput.valueOf();\n } else {\n return this.clone().endOf(units).valueOf() < localInput.valueOf();\n }\n }\n\n function isBetween (from, to, units, inclusivity) {\n inclusivity = inclusivity || '()';\n return (inclusivity[0] === '(' ? this.isAfter(from, units) : !this.isBefore(from, units)) &&\n (inclusivity[1] === ')' ? this.isBefore(to, units) : !this.isAfter(to, units));\n }\n\n function isSame (input, units) {\n var localInput = isMoment(input) ? input : createLocal(input),\n inputMs;\n if (!(this.isValid() && localInput.isValid())) {\n return false;\n }\n units = normalizeUnits(units || 'millisecond');\n if (units === 'millisecond') {\n return this.valueOf() === localInput.valueOf();\n } else {\n inputMs = localInput.valueOf();\n return this.clone().startOf(units).valueOf() <= inputMs && inputMs <= this.clone().endOf(units).valueOf();\n }\n }\n\n function isSameOrAfter (input, units) {\n return this.isSame(input, units) || this.isAfter(input,units);\n }\n\n function isSameOrBefore (input, units) {\n return this.isSame(input, units) || this.isBefore(input,units);\n }\n\n function diff (input, units, asFloat) {\n var that,\n zoneDelta,\n output;\n\n if (!this.isValid()) {\n return NaN;\n }\n\n that = cloneWithOffset(input, this);\n\n if (!that.isValid()) {\n return NaN;\n }\n\n zoneDelta = (that.utcOffset() - this.utcOffset()) * 6e4;\n\n units = normalizeUnits(units);\n\n switch (units) {\n case 'year': output = monthDiff(this, that) / 12; break;\n case 'month': output = monthDiff(this, that); break;\n case 'quarter': output = monthDiff(this, that) / 3; break;\n case 'second': output = (this - that) / 1e3; break; // 1000\n case 'minute': output = (this - that) / 6e4; break; // 1000 * 60\n case 'hour': output = (this - that) / 36e5; break; // 1000 * 60 * 60\n case 'day': output = (this - that - zoneDelta) / 864e5; break; // 1000 * 60 * 60 * 24, negate dst\n case 'week': output = (this - that - zoneDelta) / 6048e5; break; // 1000 * 60 * 60 * 24 * 7, negate dst\n default: output = this - that;\n }\n\n return asFloat ? output : absFloor(output);\n }\n\n function monthDiff (a, b) {\n // difference in months\n var wholeMonthDiff = ((b.year() - a.year()) * 12) + (b.month() - a.month()),\n // b is in (anchor - 1 month, anchor + 1 month)\n anchor = a.clone().add(wholeMonthDiff, 'months'),\n anchor2, adjust;\n\n if (b - anchor < 0) {\n anchor2 = a.clone().add(wholeMonthDiff - 1, 'months');\n // linear across the month\n adjust = (b - anchor) / (anchor - anchor2);\n } else {\n anchor2 = a.clone().add(wholeMonthDiff + 1, 'months');\n // linear across the month\n adjust = (b - anchor) / (anchor2 - anchor);\n }\n\n //check for negative zero, return zero if negative zero\n return -(wholeMonthDiff + adjust) || 0;\n }\n\n hooks.defaultFormat = 'YYYY-MM-DDTHH:mm:ssZ';\n hooks.defaultFormatUtc = 'YYYY-MM-DDTHH:mm:ss[Z]';\n\n function toString () {\n return this.clone().locale('en').format('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ');\n }\n\n function toISOString(keepOffset) {\n if (!this.isValid()) {\n return null;\n }\n var utc = keepOffset !== true;\n var m = utc ? this.clone().utc() : this;\n if (m.year() < 0 || m.year() > 9999) {\n return formatMoment(m, utc ? 'YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]' : 'YYYYYY-MM-DD[T]HH:mm:ss.SSSZ');\n }\n if (isFunction(Date.prototype.toISOString)) {\n // native implementation is ~50x faster, use it when we can\n if (utc) {\n return this.toDate().toISOString();\n } else {\n return new Date(this.valueOf() + this.utcOffset() * 60 * 1000).toISOString().replace('Z', formatMoment(m, 'Z'));\n }\n }\n return formatMoment(m, utc ? 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]' : 'YYYY-MM-DD[T]HH:mm:ss.SSSZ');\n }\n\n /**\n * Return a human readable representation of a moment that can\n * also be evaluated to get a new moment which is the same\n *\n * @link https://nodejs.org/dist/latest/docs/api/util.html#util_custom_inspect_function_on_objects\n */\n function inspect () {\n if (!this.isValid()) {\n return 'moment.invalid(/* ' + this._i + ' */)';\n }\n var func = 'moment';\n var zone = '';\n if (!this.isLocal()) {\n func = this.utcOffset() === 0 ? 'moment.utc' : 'moment.parseZone';\n zone = 'Z';\n }\n var prefix = '[' + func + '(\"]';\n var year = (0 <= this.year() && this.year() <= 9999) ? 'YYYY' : 'YYYYYY';\n var datetime = '-MM-DD[T]HH:mm:ss.SSS';\n var suffix = zone + '[\")]';\n\n return this.format(prefix + year + datetime + suffix);\n }\n\n function format (inputString) {\n if (!inputString) {\n inputString = this.isUtc() ? hooks.defaultFormatUtc : hooks.defaultFormat;\n }\n var output = formatMoment(this, inputString);\n return this.localeData().postformat(output);\n }\n\n function from (time, withoutSuffix) {\n if (this.isValid() &&\n ((isMoment(time) && time.isValid()) ||\n createLocal(time).isValid())) {\n return createDuration({to: this, from: time}).locale(this.locale()).humanize(!withoutSuffix);\n } else {\n return this.localeData().invalidDate();\n }\n }\n\n function fromNow (withoutSuffix) {\n return this.from(createLocal(), withoutSuffix);\n }\n\n function to (time, withoutSuffix) {\n if (this.isValid() &&\n ((isMoment(time) && time.isValid()) ||\n createLocal(time).isValid())) {\n return createDuration({from: this, to: time}).locale(this.locale()).humanize(!withoutSuffix);\n } else {\n return this.localeData().invalidDate();\n }\n }\n\n function toNow (withoutSuffix) {\n return this.to(createLocal(), withoutSuffix);\n }\n\n // If passed a locale key, it will set the locale for this\n // instance. Otherwise, it will return the locale configuration\n // variables for this instance.\n function locale (key) {\n var newLocaleData;\n\n if (key === undefined) {\n return this._locale._abbr;\n } else {\n newLocaleData = getLocale(key);\n if (newLocaleData != null) {\n this._locale = newLocaleData;\n }\n return this;\n }\n }\n\n var lang = deprecate(\n 'moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.',\n function (key) {\n if (key === undefined) {\n return this.localeData();\n } else {\n return this.locale(key);\n }\n }\n );\n\n function localeData () {\n return this._locale;\n }\n\n function startOf (units) {\n units = normalizeUnits(units);\n // the following switch intentionally omits break keywords\n // to utilize falling through the cases.\n switch (units) {\n case 'year':\n this.month(0);\n /* falls through */\n case 'quarter':\n case 'month':\n this.date(1);\n /* falls through */\n case 'week':\n case 'isoWeek':\n case 'day':\n case 'date':\n this.hours(0);\n /* falls through */\n case 'hour':\n this.minutes(0);\n /* falls through */\n case 'minute':\n this.seconds(0);\n /* falls through */\n case 'second':\n this.milliseconds(0);\n }\n\n // weeks are a special case\n if (units === 'week') {\n this.weekday(0);\n }\n if (units === 'isoWeek') {\n this.isoWeekday(1);\n }\n\n // quarters are also special\n if (units === 'quarter') {\n this.month(Math.floor(this.month() / 3) * 3);\n }\n\n return this;\n }\n\n function endOf (units) {\n units = normalizeUnits(units);\n if (units === undefined || units === 'millisecond') {\n return this;\n }\n\n // 'date' is an alias for 'day', so it should be considered as such.\n if (units === 'date') {\n units = 'day';\n }\n\n return this.startOf(units).add(1, (units === 'isoWeek' ? 'week' : units)).subtract(1, 'ms');\n }\n\n function valueOf () {\n return this._d.valueOf() - ((this._offset || 0) * 60000);\n }\n\n function unix () {\n return Math.floor(this.valueOf() / 1000);\n }\n\n function toDate () {\n return new Date(this.valueOf());\n }\n\n function toArray () {\n var m = this;\n return [m.year(), m.month(), m.date(), m.hour(), m.minute(), m.second(), m.millisecond()];\n }\n\n function toObject () {\n var m = this;\n return {\n years: m.year(),\n months: m.month(),\n date: m.date(),\n hours: m.hours(),\n minutes: m.minutes(),\n seconds: m.seconds(),\n milliseconds: m.milliseconds()\n };\n }\n\n function toJSON () {\n // new Date(NaN).toJSON() === null\n return this.isValid() ? this.toISOString() : null;\n }\n\n function isValid$2 () {\n return isValid(this);\n }\n\n function parsingFlags () {\n return extend({}, getParsingFlags(this));\n }\n\n function invalidAt () {\n return getParsingFlags(this).overflow;\n }\n\n function creationData() {\n return {\n input: this._i,\n format: this._f,\n locale: this._locale,\n isUTC: this._isUTC,\n strict: this._strict\n };\n }\n\n // FORMATTING\n\n addFormatToken(0, ['gg', 2], 0, function () {\n return this.weekYear() % 100;\n });\n\n addFormatToken(0, ['GG', 2], 0, function () {\n return this.isoWeekYear() % 100;\n });\n\n function addWeekYearFormatToken (token, getter) {\n addFormatToken(0, [token, token.length], 0, getter);\n }\n\n addWeekYearFormatToken('gggg', 'weekYear');\n addWeekYearFormatToken('ggggg', 'weekYear');\n addWeekYearFormatToken('GGGG', 'isoWeekYear');\n addWeekYearFormatToken('GGGGG', 'isoWeekYear');\n\n // ALIASES\n\n addUnitAlias('weekYear', 'gg');\n addUnitAlias('isoWeekYear', 'GG');\n\n // PRIORITY\n\n addUnitPriority('weekYear', 1);\n addUnitPriority('isoWeekYear', 1);\n\n\n // PARSING\n\n addRegexToken('G', matchSigned);\n addRegexToken('g', matchSigned);\n addRegexToken('GG', match1to2, match2);\n addRegexToken('gg', match1to2, match2);\n addRegexToken('GGGG', match1to4, match4);\n addRegexToken('gggg', match1to4, match4);\n addRegexToken('GGGGG', match1to6, match6);\n addRegexToken('ggggg', match1to6, match6);\n\n addWeekParseToken(['gggg', 'ggggg', 'GGGG', 'GGGGG'], function (input, week, config, token) {\n week[token.substr(0, 2)] = toInt(input);\n });\n\n addWeekParseToken(['gg', 'GG'], function (input, week, config, token) {\n week[token] = hooks.parseTwoDigitYear(input);\n });\n\n // MOMENTS\n\n function getSetWeekYear (input) {\n return getSetWeekYearHelper.call(this,\n input,\n this.week(),\n this.weekday(),\n this.localeData()._week.dow,\n this.localeData()._week.doy);\n }\n\n function getSetISOWeekYear (input) {\n return getSetWeekYearHelper.call(this,\n input, this.isoWeek(), this.isoWeekday(), 1, 4);\n }\n\n function getISOWeeksInYear () {\n return weeksInYear(this.year(), 1, 4);\n }\n\n function getWeeksInYear () {\n var weekInfo = this.localeData()._week;\n return weeksInYear(this.year(), weekInfo.dow, weekInfo.doy);\n }\n\n function getSetWeekYearHelper(input, week, weekday, dow, doy) {\n var weeksTarget;\n if (input == null) {\n return weekOfYear(this, dow, doy).year;\n } else {\n weeksTarget = weeksInYear(input, dow, doy);\n if (week > weeksTarget) {\n week = weeksTarget;\n }\n return setWeekAll.call(this, input, week, weekday, dow, doy);\n }\n }\n\n function setWeekAll(weekYear, week, weekday, dow, doy) {\n var dayOfYearData = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy),\n date = createUTCDate(dayOfYearData.year, 0, dayOfYearData.dayOfYear);\n\n this.year(date.getUTCFullYear());\n this.month(date.getUTCMonth());\n this.date(date.getUTCDate());\n return this;\n }\n\n // FORMATTING\n\n addFormatToken('Q', 0, 'Qo', 'quarter');\n\n // ALIASES\n\n addUnitAlias('quarter', 'Q');\n\n // PRIORITY\n\n addUnitPriority('quarter', 7);\n\n // PARSING\n\n addRegexToken('Q', match1);\n addParseToken('Q', function (input, array) {\n array[MONTH] = (toInt(input) - 1) * 3;\n });\n\n // MOMENTS\n\n function getSetQuarter (input) {\n return input == null ? Math.ceil((this.month() + 1) / 3) : this.month((input - 1) * 3 + this.month() % 3);\n }\n\n // FORMATTING\n\n addFormatToken('D', ['DD', 2], 'Do', 'date');\n\n // ALIASES\n\n addUnitAlias('date', 'D');\n\n // PRIORITY\n addUnitPriority('date', 9);\n\n // PARSING\n\n addRegexToken('D', match1to2);\n addRegexToken('DD', match1to2, match2);\n addRegexToken('Do', function (isStrict, locale) {\n // TODO: Remove \"ordinalParse\" fallback in next major release.\n return isStrict ?\n (locale._dayOfMonthOrdinalParse || locale._ordinalParse) :\n locale._dayOfMonthOrdinalParseLenient;\n });\n\n addParseToken(['D', 'DD'], DATE);\n addParseToken('Do', function (input, array) {\n array[DATE] = toInt(input.match(match1to2)[0]);\n });\n\n // MOMENTS\n\n var getSetDayOfMonth = makeGetSet('Date', true);\n\n // FORMATTING\n\n addFormatToken('DDD', ['DDDD', 3], 'DDDo', 'dayOfYear');\n\n // ALIASES\n\n addUnitAlias('dayOfYear', 'DDD');\n\n // PRIORITY\n addUnitPriority('dayOfYear', 4);\n\n // PARSING\n\n addRegexToken('DDD', match1to3);\n addRegexToken('DDDD', match3);\n addParseToken(['DDD', 'DDDD'], function (input, array, config) {\n config._dayOfYear = toInt(input);\n });\n\n // HELPERS\n\n // MOMENTS\n\n function getSetDayOfYear (input) {\n var dayOfYear = Math.round((this.clone().startOf('day') - this.clone().startOf('year')) / 864e5) + 1;\n return input == null ? dayOfYear : this.add((input - dayOfYear), 'd');\n }\n\n // FORMATTING\n\n addFormatToken('m', ['mm', 2], 0, 'minute');\n\n // ALIASES\n\n addUnitAlias('minute', 'm');\n\n // PRIORITY\n\n addUnitPriority('minute', 14);\n\n // PARSING\n\n addRegexToken('m', match1to2);\n addRegexToken('mm', match1to2, match2);\n addParseToken(['m', 'mm'], MINUTE);\n\n // MOMENTS\n\n var getSetMinute = makeGetSet('Minutes', false);\n\n // FORMATTING\n\n addFormatToken('s', ['ss', 2], 0, 'second');\n\n // ALIASES\n\n addUnitAlias('second', 's');\n\n // PRIORITY\n\n addUnitPriority('second', 15);\n\n // PARSING\n\n addRegexToken('s', match1to2);\n addRegexToken('ss', match1to2, match2);\n addParseToken(['s', 'ss'], SECOND);\n\n // MOMENTS\n\n var getSetSecond = makeGetSet('Seconds', false);\n\n // FORMATTING\n\n addFormatToken('S', 0, 0, function () {\n return ~~(this.millisecond() / 100);\n });\n\n addFormatToken(0, ['SS', 2], 0, function () {\n return ~~(this.millisecond() / 10);\n });\n\n addFormatToken(0, ['SSS', 3], 0, 'millisecond');\n addFormatToken(0, ['SSSS', 4], 0, function () {\n return this.millisecond() * 10;\n });\n addFormatToken(0, ['SSSSS', 5], 0, function () {\n return this.millisecond() * 100;\n });\n addFormatToken(0, ['SSSSSS', 6], 0, function () {\n return this.millisecond() * 1000;\n });\n addFormatToken(0, ['SSSSSSS', 7], 0, function () {\n return this.millisecond() * 10000;\n });\n addFormatToken(0, ['SSSSSSSS', 8], 0, function () {\n return this.millisecond() * 100000;\n });\n addFormatToken(0, ['SSSSSSSSS', 9], 0, function () {\n return this.millisecond() * 1000000;\n });\n\n\n // ALIASES\n\n addUnitAlias('millisecond', 'ms');\n\n // PRIORITY\n\n addUnitPriority('millisecond', 16);\n\n // PARSING\n\n addRegexToken('S', match1to3, match1);\n addRegexToken('SS', match1to3, match2);\n addRegexToken('SSS', match1to3, match3);\n\n var token;\n for (token = 'SSSS'; token.length <= 9; token += 'S') {\n addRegexToken(token, matchUnsigned);\n }\n\n function parseMs(input, array) {\n array[MILLISECOND] = toInt(('0.' + input) * 1000);\n }\n\n for (token = 'S'; token.length <= 9; token += 'S') {\n addParseToken(token, parseMs);\n }\n // MOMENTS\n\n var getSetMillisecond = makeGetSet('Milliseconds', false);\n\n // FORMATTING\n\n addFormatToken('z', 0, 0, 'zoneAbbr');\n addFormatToken('zz', 0, 0, 'zoneName');\n\n // MOMENTS\n\n function getZoneAbbr () {\n return this._isUTC ? 'UTC' : '';\n }\n\n function getZoneName () {\n return this._isUTC ? 'Coordinated Universal Time' : '';\n }\n\n var proto = Moment.prototype;\n\n proto.add = add;\n proto.calendar = calendar$1;\n proto.clone = clone;\n proto.diff = diff;\n proto.endOf = endOf;\n proto.format = format;\n proto.from = from;\n proto.fromNow = fromNow;\n proto.to = to;\n proto.toNow = toNow;\n proto.get = stringGet;\n proto.invalidAt = invalidAt;\n proto.isAfter = isAfter;\n proto.isBefore = isBefore;\n proto.isBetween = isBetween;\n proto.isSame = isSame;\n proto.isSameOrAfter = isSameOrAfter;\n proto.isSameOrBefore = isSameOrBefore;\n proto.isValid = isValid$2;\n proto.lang = lang;\n proto.locale = locale;\n proto.localeData = localeData;\n proto.max = prototypeMax;\n proto.min = prototypeMin;\n proto.parsingFlags = parsingFlags;\n proto.set = stringSet;\n proto.startOf = startOf;\n proto.subtract = subtract;\n proto.toArray = toArray;\n proto.toObject = toObject;\n proto.toDate = toDate;\n proto.toISOString = toISOString;\n proto.inspect = inspect;\n proto.toJSON = toJSON;\n proto.toString = toString;\n proto.unix = unix;\n proto.valueOf = valueOf;\n proto.creationData = creationData;\n proto.year = getSetYear;\n proto.isLeapYear = getIsLeapYear;\n proto.weekYear = getSetWeekYear;\n proto.isoWeekYear = getSetISOWeekYear;\n proto.quarter = proto.quarters = getSetQuarter;\n proto.month = getSetMonth;\n proto.daysInMonth = getDaysInMonth;\n proto.week = proto.weeks = getSetWeek;\n proto.isoWeek = proto.isoWeeks = getSetISOWeek;\n proto.weeksInYear = getWeeksInYear;\n proto.isoWeeksInYear = getISOWeeksInYear;\n proto.date = getSetDayOfMonth;\n proto.day = proto.days = getSetDayOfWeek;\n proto.weekday = getSetLocaleDayOfWeek;\n proto.isoWeekday = getSetISODayOfWeek;\n proto.dayOfYear = getSetDayOfYear;\n proto.hour = proto.hours = getSetHour;\n proto.minute = proto.minutes = getSetMinute;\n proto.second = proto.seconds = getSetSecond;\n proto.millisecond = proto.milliseconds = getSetMillisecond;\n proto.utcOffset = getSetOffset;\n proto.utc = setOffsetToUTC;\n proto.local = setOffsetToLocal;\n proto.parseZone = setOffsetToParsedOffset;\n proto.hasAlignedHourOffset = hasAlignedHourOffset;\n proto.isDST = isDaylightSavingTime;\n proto.isLocal = isLocal;\n proto.isUtcOffset = isUtcOffset;\n proto.isUtc = isUtc;\n proto.isUTC = isUtc;\n proto.zoneAbbr = getZoneAbbr;\n proto.zoneName = getZoneName;\n proto.dates = deprecate('dates accessor is deprecated. Use date instead.', getSetDayOfMonth);\n proto.months = deprecate('months accessor is deprecated. Use month instead', getSetMonth);\n proto.years = deprecate('years accessor is deprecated. Use year instead', getSetYear);\n proto.zone = deprecate('moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/', getSetZone);\n proto.isDSTShifted = deprecate('isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information', isDaylightSavingTimeShifted);\n\n function createUnix (input) {\n return createLocal(input * 1000);\n }\n\n function createInZone () {\n return createLocal.apply(null, arguments).parseZone();\n }\n\n function preParsePostFormat (string) {\n return string;\n }\n\n var proto$1 = Locale.prototype;\n\n proto$1.calendar = calendar;\n proto$1.longDateFormat = longDateFormat;\n proto$1.invalidDate = invalidDate;\n proto$1.ordinal = ordinal;\n proto$1.preparse = preParsePostFormat;\n proto$1.postformat = preParsePostFormat;\n proto$1.relativeTime = relativeTime;\n proto$1.pastFuture = pastFuture;\n proto$1.set = set;\n\n proto$1.months = localeMonths;\n proto$1.monthsShort = localeMonthsShort;\n proto$1.monthsParse = localeMonthsParse;\n proto$1.monthsRegex = monthsRegex;\n proto$1.monthsShortRegex = monthsShortRegex;\n proto$1.week = localeWeek;\n proto$1.firstDayOfYear = localeFirstDayOfYear;\n proto$1.firstDayOfWeek = localeFirstDayOfWeek;\n\n proto$1.weekdays = localeWeekdays;\n proto$1.weekdaysMin = localeWeekdaysMin;\n proto$1.weekdaysShort = localeWeekdaysShort;\n proto$1.weekdaysParse = localeWeekdaysParse;\n\n proto$1.weekdaysRegex = weekdaysRegex;\n proto$1.weekdaysShortRegex = weekdaysShortRegex;\n proto$1.weekdaysMinRegex = weekdaysMinRegex;\n\n proto$1.isPM = localeIsPM;\n proto$1.meridiem = localeMeridiem;\n\n function get$1 (format, index, field, setter) {\n var locale = getLocale();\n var utc = createUTC().set(setter, index);\n return locale[field](utc, format);\n }\n\n function listMonthsImpl (format, index, field) {\n if (isNumber(format)) {\n index = format;\n format = undefined;\n }\n\n format = format || '';\n\n if (index != null) {\n return get$1(format, index, field, 'month');\n }\n\n var i;\n var out = [];\n for (i = 0; i < 12; i++) {\n out[i] = get$1(format, i, field, 'month');\n }\n return out;\n }\n\n // ()\n // (5)\n // (fmt, 5)\n // (fmt)\n // (true)\n // (true, 5)\n // (true, fmt, 5)\n // (true, fmt)\n function listWeekdaysImpl (localeSorted, format, index, field) {\n if (typeof localeSorted === 'boolean') {\n if (isNumber(format)) {\n index = format;\n format = undefined;\n }\n\n format = format || '';\n } else {\n format = localeSorted;\n index = format;\n localeSorted = false;\n\n if (isNumber(format)) {\n index = format;\n format = undefined;\n }\n\n format = format || '';\n }\n\n var locale = getLocale(),\n shift = localeSorted ? locale._week.dow : 0;\n\n if (index != null) {\n return get$1(format, (index + shift) % 7, field, 'day');\n }\n\n var i;\n var out = [];\n for (i = 0; i < 7; i++) {\n out[i] = get$1(format, (i + shift) % 7, field, 'day');\n }\n return out;\n }\n\n function listMonths (format, index) {\n return listMonthsImpl(format, index, 'months');\n }\n\n function listMonthsShort (format, index) {\n return listMonthsImpl(format, index, 'monthsShort');\n }\n\n function listWeekdays (localeSorted, format, index) {\n return listWeekdaysImpl(localeSorted, format, index, 'weekdays');\n }\n\n function listWeekdaysShort (localeSorted, format, index) {\n return listWeekdaysImpl(localeSorted, format, index, 'weekdaysShort');\n }\n\n function listWeekdaysMin (localeSorted, format, index) {\n return listWeekdaysImpl(localeSorted, format, index, 'weekdaysMin');\n }\n\n getSetGlobalLocale('en', {\n dayOfMonthOrdinalParse: /\\d{1,2}(th|st|nd|rd)/,\n ordinal : function (number) {\n var b = number % 10,\n output = (toInt(number % 100 / 10) === 1) ? 'th' :\n (b === 1) ? 'st' :\n (b === 2) ? 'nd' :\n (b === 3) ? 'rd' : 'th';\n return number + output;\n }\n });\n\n // Side effect imports\n\n hooks.lang = deprecate('moment.lang is deprecated. Use moment.locale instead.', getSetGlobalLocale);\n hooks.langData = deprecate('moment.langData is deprecated. Use moment.localeData instead.', getLocale);\n\n var mathAbs = Math.abs;\n\n function abs () {\n var data = this._data;\n\n this._milliseconds = mathAbs(this._milliseconds);\n this._days = mathAbs(this._days);\n this._months = mathAbs(this._months);\n\n data.milliseconds = mathAbs(data.milliseconds);\n data.seconds = mathAbs(data.seconds);\n data.minutes = mathAbs(data.minutes);\n data.hours = mathAbs(data.hours);\n data.months = mathAbs(data.months);\n data.years = mathAbs(data.years);\n\n return this;\n }\n\n function addSubtract$1 (duration, input, value, direction) {\n var other = createDuration(input, value);\n\n duration._milliseconds += direction * other._milliseconds;\n duration._days += direction * other._days;\n duration._months += direction * other._months;\n\n return duration._bubble();\n }\n\n // supports only 2.0-style add(1, 's') or add(duration)\n function add$1 (input, value) {\n return addSubtract$1(this, input, value, 1);\n }\n\n // supports only 2.0-style subtract(1, 's') or subtract(duration)\n function subtract$1 (input, value) {\n return addSubtract$1(this, input, value, -1);\n }\n\n function absCeil (number) {\n if (number < 0) {\n return Math.floor(number);\n } else {\n return Math.ceil(number);\n }\n }\n\n function bubble () {\n var milliseconds = this._milliseconds;\n var days = this._days;\n var months = this._months;\n var data = this._data;\n var seconds, minutes, hours, years, monthsFromDays;\n\n // if we have a mix of positive and negative values, bubble down first\n // check: https://github.com/moment/moment/issues/2166\n if (!((milliseconds >= 0 && days >= 0 && months >= 0) ||\n (milliseconds <= 0 && days <= 0 && months <= 0))) {\n milliseconds += absCeil(monthsToDays(months) + days) * 864e5;\n days = 0;\n months = 0;\n }\n\n // The following code bubbles up values, see the tests for\n // examples of what that means.\n data.milliseconds = milliseconds % 1000;\n\n seconds = absFloor(milliseconds / 1000);\n data.seconds = seconds % 60;\n\n minutes = absFloor(seconds / 60);\n data.minutes = minutes % 60;\n\n hours = absFloor(minutes / 60);\n data.hours = hours % 24;\n\n days += absFloor(hours / 24);\n\n // convert days to months\n monthsFromDays = absFloor(daysToMonths(days));\n months += monthsFromDays;\n days -= absCeil(monthsToDays(monthsFromDays));\n\n // 12 months -> 1 year\n years = absFloor(months / 12);\n months %= 12;\n\n data.days = days;\n data.months = months;\n data.years = years;\n\n return this;\n }\n\n function daysToMonths (days) {\n // 400 years have 146097 days (taking into account leap year rules)\n // 400 years have 12 months === 4800\n return days * 4800 / 146097;\n }\n\n function monthsToDays (months) {\n // the reverse of daysToMonths\n return months * 146097 / 4800;\n }\n\n function as (units) {\n if (!this.isValid()) {\n return NaN;\n }\n var days;\n var months;\n var milliseconds = this._milliseconds;\n\n units = normalizeUnits(units);\n\n if (units === 'month' || units === 'year') {\n days = this._days + milliseconds / 864e5;\n months = this._months + daysToMonths(days);\n return units === 'month' ? months : months / 12;\n } else {\n // handle milliseconds separately because of floating point math errors (issue #1867)\n days = this._days + Math.round(monthsToDays(this._months));\n switch (units) {\n case 'week' : return days / 7 + milliseconds / 6048e5;\n case 'day' : return days + milliseconds / 864e5;\n case 'hour' : return days * 24 + milliseconds / 36e5;\n case 'minute' : return days * 1440 + milliseconds / 6e4;\n case 'second' : return days * 86400 + milliseconds / 1000;\n // Math.floor prevents floating point math errors here\n case 'millisecond': return Math.floor(days * 864e5) + milliseconds;\n default: throw new Error('Unknown unit ' + units);\n }\n }\n }\n\n // TODO: Use this.as('ms')?\n function valueOf$1 () {\n if (!this.isValid()) {\n return NaN;\n }\n return (\n this._milliseconds +\n this._days * 864e5 +\n (this._months % 12) * 2592e6 +\n toInt(this._months / 12) * 31536e6\n );\n }\n\n function makeAs (alias) {\n return function () {\n return this.as(alias);\n };\n }\n\n var asMilliseconds = makeAs('ms');\n var asSeconds = makeAs('s');\n var asMinutes = makeAs('m');\n var asHours = makeAs('h');\n var asDays = makeAs('d');\n var asWeeks = makeAs('w');\n var asMonths = makeAs('M');\n var asYears = makeAs('y');\n\n function clone$1 () {\n return createDuration(this);\n }\n\n function get$2 (units) {\n units = normalizeUnits(units);\n return this.isValid() ? this[units + 's']() : NaN;\n }\n\n function makeGetter(name) {\n return function () {\n return this.isValid() ? this._data[name] : NaN;\n };\n }\n\n var milliseconds = makeGetter('milliseconds');\n var seconds = makeGetter('seconds');\n var minutes = makeGetter('minutes');\n var hours = makeGetter('hours');\n var days = makeGetter('days');\n var months = makeGetter('months');\n var years = makeGetter('years');\n\n function weeks () {\n return absFloor(this.days() / 7);\n }\n\n var round = Math.round;\n var thresholds = {\n ss: 44, // a few seconds to seconds\n s : 45, // seconds to minute\n m : 45, // minutes to hour\n h : 22, // hours to day\n d : 26, // days to month\n M : 11 // months to year\n };\n\n // helper function for moment.fn.from, moment.fn.fromNow, and moment.duration.fn.humanize\n function substituteTimeAgo(string, number, withoutSuffix, isFuture, locale) {\n return locale.relativeTime(number || 1, !!withoutSuffix, string, isFuture);\n }\n\n function relativeTime$1 (posNegDuration, withoutSuffix, locale) {\n var duration = createDuration(posNegDuration).abs();\n var seconds = round(duration.as('s'));\n var minutes = round(duration.as('m'));\n var hours = round(duration.as('h'));\n var days = round(duration.as('d'));\n var months = round(duration.as('M'));\n var years = round(duration.as('y'));\n\n var a = seconds <= thresholds.ss && ['s', seconds] ||\n seconds < thresholds.s && ['ss', seconds] ||\n minutes <= 1 && ['m'] ||\n minutes < thresholds.m && ['mm', minutes] ||\n hours <= 1 && ['h'] ||\n hours < thresholds.h && ['hh', hours] ||\n days <= 1 && ['d'] ||\n days < thresholds.d && ['dd', days] ||\n months <= 1 && ['M'] ||\n months < thresholds.M && ['MM', months] ||\n years <= 1 && ['y'] || ['yy', years];\n\n a[2] = withoutSuffix;\n a[3] = +posNegDuration > 0;\n a[4] = locale;\n return substituteTimeAgo.apply(null, a);\n }\n\n // This function allows you to set the rounding function for relative time strings\n function getSetRelativeTimeRounding (roundingFunction) {\n if (roundingFunction === undefined) {\n return round;\n }\n if (typeof(roundingFunction) === 'function') {\n round = roundingFunction;\n return true;\n }\n return false;\n }\n\n // This function allows you to set a threshold for relative time strings\n function getSetRelativeTimeThreshold (threshold, limit) {\n if (thresholds[threshold] === undefined) {\n return false;\n }\n if (limit === undefined) {\n return thresholds[threshold];\n }\n thresholds[threshold] = limit;\n if (threshold === 's') {\n thresholds.ss = limit - 1;\n }\n return true;\n }\n\n function humanize (withSuffix) {\n if (!this.isValid()) {\n return this.localeData().invalidDate();\n }\n\n var locale = this.localeData();\n var output = relativeTime$1(this, !withSuffix, locale);\n\n if (withSuffix) {\n output = locale.pastFuture(+this, output);\n }\n\n return locale.postformat(output);\n }\n\n var abs$1 = Math.abs;\n\n function sign(x) {\n return ((x > 0) - (x < 0)) || +x;\n }\n\n function toISOString$1() {\n // for ISO strings we do not use the normal bubbling rules:\n // * milliseconds bubble up until they become hours\n // * days do not bubble at all\n // * months bubble up until they become years\n // This is because there is no context-free conversion between hours and days\n // (think of clock changes)\n // and also not between days and months (28-31 days per month)\n if (!this.isValid()) {\n return this.localeData().invalidDate();\n }\n\n var seconds = abs$1(this._milliseconds) / 1000;\n var days = abs$1(this._days);\n var months = abs$1(this._months);\n var minutes, hours, years;\n\n // 3600 seconds -> 60 minutes -> 1 hour\n minutes = absFloor(seconds / 60);\n hours = absFloor(minutes / 60);\n seconds %= 60;\n minutes %= 60;\n\n // 12 months -> 1 year\n years = absFloor(months / 12);\n months %= 12;\n\n\n // inspired by https://github.com/dordille/moment-isoduration/blob/master/moment.isoduration.js\n var Y = years;\n var M = months;\n var D = days;\n var h = hours;\n var m = minutes;\n var s = seconds ? seconds.toFixed(3).replace(/\\.?0+$/, '') : '';\n var total = this.asSeconds();\n\n if (!total) {\n // this is the same as C#'s (Noda) and python (isodate)...\n // but not other JS (goog.date)\n return 'P0D';\n }\n\n var totalSign = total < 0 ? '-' : '';\n var ymSign = sign(this._months) !== sign(total) ? '-' : '';\n var daysSign = sign(this._days) !== sign(total) ? '-' : '';\n var hmsSign = sign(this._milliseconds) !== sign(total) ? '-' : '';\n\n return totalSign + 'P' +\n (Y ? ymSign + Y + 'Y' : '') +\n (M ? ymSign + M + 'M' : '') +\n (D ? daysSign + D + 'D' : '') +\n ((h || m || s) ? 'T' : '') +\n (h ? hmsSign + h + 'H' : '') +\n (m ? hmsSign + m + 'M' : '') +\n (s ? hmsSign + s + 'S' : '');\n }\n\n var proto$2 = Duration.prototype;\n\n proto$2.isValid = isValid$1;\n proto$2.abs = abs;\n proto$2.add = add$1;\n proto$2.subtract = subtract$1;\n proto$2.as = as;\n proto$2.asMilliseconds = asMilliseconds;\n proto$2.asSeconds = asSeconds;\n proto$2.asMinutes = asMinutes;\n proto$2.asHours = asHours;\n proto$2.asDays = asDays;\n proto$2.asWeeks = asWeeks;\n proto$2.asMonths = asMonths;\n proto$2.asYears = asYears;\n proto$2.valueOf = valueOf$1;\n proto$2._bubble = bubble;\n proto$2.clone = clone$1;\n proto$2.get = get$2;\n proto$2.milliseconds = milliseconds;\n proto$2.seconds = seconds;\n proto$2.minutes = minutes;\n proto$2.hours = hours;\n proto$2.days = days;\n proto$2.weeks = weeks;\n proto$2.months = months;\n proto$2.years = years;\n proto$2.humanize = humanize;\n proto$2.toISOString = toISOString$1;\n proto$2.toString = toISOString$1;\n proto$2.toJSON = toISOString$1;\n proto$2.locale = locale;\n proto$2.localeData = localeData;\n\n proto$2.toIsoString = deprecate('toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)', toISOString$1);\n proto$2.lang = lang;\n\n // Side effect imports\n\n // FORMATTING\n\n addFormatToken('X', 0, 0, 'unix');\n addFormatToken('x', 0, 0, 'valueOf');\n\n // PARSING\n\n addRegexToken('x', matchSigned);\n addRegexToken('X', matchTimestamp);\n addParseToken('X', function (input, array, config) {\n config._d = new Date(parseFloat(input, 10) * 1000);\n });\n addParseToken('x', function (input, array, config) {\n config._d = new Date(toInt(input));\n });\n\n // Side effect imports\n\n\n hooks.version = '2.22.2';\n\n setHookCallback(createLocal);\n\n hooks.fn = proto;\n hooks.min = min;\n hooks.max = max;\n hooks.now = now;\n hooks.utc = createUTC;\n hooks.unix = createUnix;\n hooks.months = listMonths;\n hooks.isDate = isDate;\n hooks.locale = getSetGlobalLocale;\n hooks.invalid = createInvalid;\n hooks.duration = createDuration;\n hooks.isMoment = isMoment;\n hooks.weekdays = listWeekdays;\n hooks.parseZone = createInZone;\n hooks.localeData = getLocale;\n hooks.isDuration = isDuration;\n hooks.monthsShort = listMonthsShort;\n hooks.weekdaysMin = listWeekdaysMin;\n hooks.defineLocale = defineLocale;\n hooks.updateLocale = updateLocale;\n hooks.locales = listLocales;\n hooks.weekdaysShort = listWeekdaysShort;\n hooks.normalizeUnits = normalizeUnits;\n hooks.relativeTimeRounding = getSetRelativeTimeRounding;\n hooks.relativeTimeThreshold = getSetRelativeTimeThreshold;\n hooks.calendarFormat = getCalendarFormat;\n hooks.prototype = proto;\n\n // currently HTML5 input type only supports 24-hour formats\n hooks.HTML5_FMT = {\n DATETIME_LOCAL: 'YYYY-MM-DDTHH:mm', // <input type=\"datetime-local\" />\n DATETIME_LOCAL_SECONDS: 'YYYY-MM-DDTHH:mm:ss', // <input type=\"datetime-local\" step=\"1\" />\n DATETIME_LOCAL_MS: 'YYYY-MM-DDTHH:mm:ss.SSS', // <input type=\"datetime-local\" step=\"0.001\" />\n DATE: 'YYYY-MM-DD', // <input type=\"date\" />\n TIME: 'HH:mm', // <input type=\"time\" />\n TIME_SECONDS: 'HH:mm:ss', // <input type=\"time\" step=\"1\" />\n TIME_MS: 'HH:mm:ss.SSS', // <input type=\"time\" step=\"0.001\" />\n WEEK: 'YYYY-[W]WW', // <input type=\"week\" />\n MONTH: 'YYYY-MM' // <input type=\"month\" />\n };\n\n return hooks;\n\n})));\n","if(!global[\"m\"]) global[\"m\"] = {};\nmodule.exports = global[\"m\"][\"bidi\"] = require(\"-!./bidi.js\");","( function _package( factory ){\n\tif( typeof define === 'function' && define.amd ){\n\t\tdefine( [ 'mithril' ], factory )\n\t}\n\telse if( typeof exports === 'object' ){\n\t\tmodule.exports = factory( require( 'mithril' ) )\n\t}\n\telse{\n\t\tfactory( m )\n\t}\n}( function define( m ){\n\tfunction bidi( node, prop ){\n\t\tvar type = node.tag === 'select'\n\t\t\t? node.attrs.multi\n\t\t\t\t? 'multi'\n\t\t\t\t: 'select'\n\t\t\t: node.attrs.type\n\n\t\t// Setup: bind listeners\n\t\tif( type === 'multi' ){\n\t\t\tnode.attrs.onchange = function(){\n\t\t\t\tprop( [].slice.call( this.selectedOptions, function( x ){\n\t\t\t\t\treturn x.value\n\t\t\t\t} ) )\n\t\t\t}\n\t\t}\n\t\telse if( type === 'select' ){\n\t\t\tnode.attrs.onchange = function( e ){\n\t\t\t\tprop( this.selectedOptions[ 0 ].value )\n\t\t\t}\n\t\t}\n\t\telse if( type === 'checkbox' ){\n\t\t\tnode.attrs.onchange = function( e ){\n\t\t\t\tprop( this.checked )\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tnode.attrs.onchange = node.attrs.oninput = function( e ){\n\t\t\t\tprop( this.value )\n\t\t\t}\n\t\t}\n\n\t\tif( node.tag === 'select' ){\n\t\t\tnode.children.forEach( function( option ){\n\t\t\t\tif( option.attrs.value === prop() || option.children[ 0 ] === prop() ){\n\t\t\t\t\toption.attrs.selected = true\n\t\t\t\t}\n\t\t\t} )\n\t\t}\n\t\telse if( type === 'checkbox' ){\n\t\t\tnode.attrs.checked = prop()\n\t\t}\n\t\telse if( type === 'radio' ){\n\t\t\tnode.attrs.checked = prop() === node.attrs.value\n\t\t}\n\t\telse {\n\t\t\tnode.attrs.value = prop()\n\t\t}\n\n\t\treturn node\n\t}\n\n\tbidi.view = function( ctrl, node, prop ){\n\t return bidi( node, node.attrs.bidi )\n\t}\n\n\tif( m.attrs ) m.attrs.bidi = bidi\n\t\n\tm.bidi = bidi\n\n\treturn bidi\n} ) )\n","/* ========================================================================\n * Bootstrap: affix.js v3.3.7\n * http://getbootstrap.com/javascript/#affix\n * ========================================================================\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n 'use strict';\n\n // AFFIX CLASS DEFINITION\n // ======================\n\n var Affix = function (element, options) {\n this.options = $.extend({}, Affix.DEFAULTS, options)\n\n this.$target = $(this.options.target)\n .on('scroll.bs.affix.data-api', $.proxy(this.checkPosition, this))\n .on('click.bs.affix.data-api', $.proxy(this.checkPositionWithEventLoop, this))\n\n this.$element = $(element)\n this.affixed = null\n this.unpin = null\n this.pinnedOffset = null\n\n this.checkPosition()\n }\n\n Affix.VERSION = '3.3.7'\n\n Affix.RESET = 'affix affix-top affix-bottom'\n\n Affix.DEFAULTS = {\n offset: 0,\n target: window\n }\n\n Affix.prototype.getState = function (scrollHeight, height, offsetTop, offsetBottom) {\n var scrollTop = this.$target.scrollTop()\n var position = this.$element.offset()\n var targetHeight = this.$target.height()\n\n if (offsetTop != null && this.affixed == 'top') return scrollTop < offsetTop ? 'top' : false\n\n if (this.affixed == 'bottom') {\n if (offsetTop != null) return (scrollTop + this.unpin <= position.top) ? false : 'bottom'\n return (scrollTop + targetHeight <= scrollHeight - offsetBottom) ? false : 'bottom'\n }\n\n var initializing = this.affixed == null\n var colliderTop = initializing ? scrollTop : position.top\n var colliderHeight = initializing ? targetHeight : height\n\n if (offsetTop != null && scrollTop <= offsetTop) return 'top'\n if (offsetBottom != null && (colliderTop + colliderHeight >= scrollHeight - offsetBottom)) return 'bottom'\n\n return false\n }\n\n Affix.prototype.getPinnedOffset = function () {\n if (this.pinnedOffset) return this.pinnedOffset\n this.$element.removeClass(Affix.RESET).addClass('affix')\n var scrollTop = this.$target.scrollTop()\n var position = this.$element.offset()\n return (this.pinnedOffset = position.top - scrollTop)\n }\n\n Affix.prototype.checkPositionWithEventLoop = function () {\n setTimeout($.proxy(this.checkPosition, this), 1)\n }\n\n Affix.prototype.checkPosition = function () {\n if (!this.$element.is(':visible')) return\n\n var height = this.$element.height()\n var offset = this.options.offset\n var offsetTop = offset.top\n var offsetBottom = offset.bottom\n var scrollHeight = Math.max($(document).height(), $(document.body).height())\n\n if (typeof offset != 'object') offsetBottom = offsetTop = offset\n if (typeof offsetTop == 'function') offsetTop = offset.top(this.$element)\n if (typeof offsetBottom == 'function') offsetBottom = offset.bottom(this.$element)\n\n var affix = this.getState(scrollHeight, height, offsetTop, offsetBottom)\n\n if (this.affixed != affix) {\n if (this.unpin != null) this.$element.css('top', '')\n\n var affixType = 'affix' + (affix ? '-' + affix : '')\n var e = $.Event(affixType + '.bs.affix')\n\n this.$element.trigger(e)\n\n if (e.isDefaultPrevented()) return\n\n this.affixed = affix\n this.unpin = affix == 'bottom' ? this.getPinnedOffset() : null\n\n this.$element\n .removeClass(Affix.RESET)\n .addClass(affixType)\n .trigger(affixType.replace('affix', 'affixed') + '.bs.affix')\n }\n\n if (affix == 'bottom') {\n this.$element.offset({\n top: scrollHeight - height - offsetBottom\n })\n }\n }\n\n\n // AFFIX PLUGIN DEFINITION\n // =======================\n\n function Plugin(option) {\n return this.each(function () {\n var $this = $(this)\n var data = $this.data('bs.affix')\n var options = typeof option == 'object' && option\n\n if (!data) $this.data('bs.affix', (data = new Affix(this, options)))\n if (typeof option == 'string') data[option]()\n })\n }\n\n var old = $.fn.affix\n\n $.fn.affix = Plugin\n $.fn.affix.Constructor = Affix\n\n\n // AFFIX NO CONFLICT\n // =================\n\n $.fn.affix.noConflict = function () {\n $.fn.affix = old\n return this\n }\n\n\n // AFFIX DATA-API\n // ==============\n\n $(window).on('load', function () {\n $('[data-spy=\"affix\"]').each(function () {\n var $spy = $(this)\n var data = $spy.data()\n\n data.offset = data.offset || {}\n\n if (data.offsetBottom != null) data.offset.bottom = data.offsetBottom\n if (data.offsetTop != null) data.offset.top = data.offsetTop\n\n Plugin.call($spy, data)\n })\n })\n\n}(jQuery);\n","/* ========================================================================\n * Bootstrap: dropdown.js v3.3.7\n * http://getbootstrap.com/javascript/#dropdowns\n * ========================================================================\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n 'use strict';\n\n // DROPDOWN CLASS DEFINITION\n // =========================\n\n var backdrop = '.dropdown-backdrop'\n var toggle = '[data-toggle=\"dropdown\"]'\n var Dropdown = function (element) {\n $(element).on('click.bs.dropdown', this.toggle)\n }\n\n Dropdown.VERSION = '3.3.7'\n\n function getParent($this) {\n var selector = $this.attr('data-target')\n\n if (!selector) {\n selector = $this.attr('href')\n selector = selector && /#[A-Za-z]/.test(selector) && selector.replace(/.*(?=#[^\\s]*$)/, '') // strip for ie7\n }\n\n var $parent = selector && $(selector)\n\n return $parent && $parent.length ? $parent : $this.parent()\n }\n\n function clearMenus(e) {\n if (e && e.which === 3) return\n $(backdrop).remove()\n $(toggle).each(function () {\n var $this = $(this)\n var $parent = getParent($this)\n var relatedTarget = { relatedTarget: this }\n\n if (!$parent.hasClass('open')) return\n\n if (e && e.type == 'click' && /input|textarea/i.test(e.target.tagName) && $.contains($parent[0], e.target)) return\n\n $parent.trigger(e = $.Event('hide.bs.dropdown', relatedTarget))\n\n if (e.isDefaultPrevented()) return\n\n $this.attr('aria-expanded', 'false')\n $parent.removeClass('open').trigger($.Event('hidden.bs.dropdown', relatedTarget))\n })\n }\n\n Dropdown.prototype.toggle = function (e) {\n var $this = $(this)\n\n if ($this.is('.disabled, :disabled')) return\n\n var $parent = getParent($this)\n var isActive = $parent.hasClass('open')\n\n clearMenus()\n\n if (!isActive) {\n if ('ontouchstart' in document.documentElement && !$parent.closest('.navbar-nav').length) {\n // if mobile we use a backdrop because click events don't delegate\n $(document.createElement('div'))\n .addClass('dropdown-backdrop')\n .insertAfter($(this))\n .on('click', clearMenus)\n }\n\n var relatedTarget = { relatedTarget: this }\n $parent.trigger(e = $.Event('show.bs.dropdown', relatedTarget))\n\n if (e.isDefaultPrevented()) return\n\n $this\n .trigger('focus')\n .attr('aria-expanded', 'true')\n\n $parent\n .toggleClass('open')\n .trigger($.Event('shown.bs.dropdown', relatedTarget))\n }\n\n return false\n }\n\n Dropdown.prototype.keydown = function (e) {\n if (!/(38|40|27|32)/.test(e.which) || /input|textarea/i.test(e.target.tagName)) return\n\n var $this = $(this)\n\n e.preventDefault()\n e.stopPropagation()\n\n if ($this.is('.disabled, :disabled')) return\n\n var $parent = getParent($this)\n var isActive = $parent.hasClass('open')\n\n if (!isActive && e.which != 27 || isActive && e.which == 27) {\n if (e.which == 27) $parent.find(toggle).trigger('focus')\n return $this.trigger('click')\n }\n\n var desc = ' li:not(.disabled):visible a'\n var $items = $parent.find('.dropdown-menu' + desc)\n\n if (!$items.length) return\n\n var index = $items.index(e.target)\n\n if (e.which == 38 && index > 0) index-- // up\n if (e.which == 40 && index < $items.length - 1) index++ // down\n if (!~index) index = 0\n\n $items.eq(index).trigger('focus')\n }\n\n\n // DROPDOWN PLUGIN DEFINITION\n // ==========================\n\n function Plugin(option) {\n return this.each(function () {\n var $this = $(this)\n var data = $this.data('bs.dropdown')\n\n if (!data) $this.data('bs.dropdown', (data = new Dropdown(this)))\n if (typeof option == 'string') data[option].call($this)\n })\n }\n\n var old = $.fn.dropdown\n\n $.fn.dropdown = Plugin\n $.fn.dropdown.Constructor = Dropdown\n\n\n // DROPDOWN NO CONFLICT\n // ====================\n\n $.fn.dropdown.noConflict = function () {\n $.fn.dropdown = old\n return this\n }\n\n\n // APPLY TO STANDARD DROPDOWN ELEMENTS\n // ===================================\n\n $(document)\n .on('click.bs.dropdown.data-api', clearMenus)\n .on('click.bs.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() })\n .on('click.bs.dropdown.data-api', toggle, Dropdown.prototype.toggle)\n .on('keydown.bs.dropdown.data-api', toggle, Dropdown.prototype.keydown)\n .on('keydown.bs.dropdown.data-api', '.dropdown-menu', Dropdown.prototype.keydown)\n\n}(jQuery);\n","/* ========================================================================\n * Bootstrap: modal.js v3.3.7\n * http://getbootstrap.com/javascript/#modals\n * ========================================================================\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n 'use strict';\n\n // MODAL CLASS DEFINITION\n // ======================\n\n var Modal = function (element, options) {\n this.options = options\n this.$body = $(document.body)\n this.$element = $(element)\n this.$dialog = this.$element.find('.modal-dialog')\n this.$backdrop = null\n this.isShown = null\n this.originalBodyPad = null\n this.scrollbarWidth = 0\n this.ignoreBackdropClick = false\n\n if (this.options.remote) {\n this.$element\n .find('.modal-content')\n .load(this.options.remote, $.proxy(function () {\n this.$element.trigger('loaded.bs.modal')\n }, this))\n }\n }\n\n Modal.VERSION = '3.3.7'\n\n Modal.TRANSITION_DURATION = 300\n Modal.BACKDROP_TRANSITION_DURATION = 150\n\n Modal.DEFAULTS = {\n backdrop: true,\n keyboard: true,\n show: true\n }\n\n Modal.prototype.toggle = function (_relatedTarget) {\n return this.isShown ? this.hide() : this.show(_relatedTarget)\n }\n\n Modal.prototype.show = function (_relatedTarget) {\n var that = this\n var e = $.Event('show.bs.modal', { relatedTarget: _relatedTarget })\n\n this.$element.trigger(e)\n\n if (this.isShown || e.isDefaultPrevented()) return\n\n this.isShown = true\n\n this.checkScrollbar()\n this.setScrollbar()\n this.$body.addClass('modal-open')\n\n this.escape()\n this.resize()\n\n this.$element.on('click.dismiss.bs.modal', '[data-dismiss=\"modal\"]', $.proxy(this.hide, this))\n\n this.$dialog.on('mousedown.dismiss.bs.modal', function () {\n that.$element.one('mouseup.dismiss.bs.modal', function (e) {\n if ($(e.target).is(that.$element)) that.ignoreBackdropClick = true\n })\n })\n\n this.backdrop(function () {\n var transition = $.support.transition && that.$element.hasClass('fade')\n\n if (!that.$element.parent().length) {\n that.$element.appendTo(that.$body) // don't move modals dom position\n }\n\n that.$element\n .show()\n .scrollTop(0)\n\n that.adjustDialog()\n\n if (transition) {\n that.$element[0].offsetWidth // force reflow\n }\n\n that.$element.addClass('in')\n\n that.enforceFocus()\n\n var e = $.Event('shown.bs.modal', { relatedTarget: _relatedTarget })\n\n transition ?\n that.$dialog // wait for modal to slide in\n .one('bsTransitionEnd', function () {\n that.$element.trigger('focus').trigger(e)\n })\n .emulateTransitionEnd(Modal.TRANSITION_DURATION) :\n that.$element.trigger('focus').trigger(e)\n })\n }\n\n Modal.prototype.hide = function (e) {\n if (e) e.preventDefault()\n\n e = $.Event('hide.bs.modal')\n\n this.$element.trigger(e)\n\n if (!this.isShown || e.isDefaultPrevented()) return\n\n this.isShown = false\n\n this.escape()\n this.resize()\n\n $(document).off('focusin.bs.modal')\n\n this.$element\n .removeClass('in')\n .off('click.dismiss.bs.modal')\n .off('mouseup.dismiss.bs.modal')\n\n this.$dialog.off('mousedown.dismiss.bs.modal')\n\n $.support.transition && this.$element.hasClass('fade') ?\n this.$element\n .one('bsTransitionEnd', $.proxy(this.hideModal, this))\n .emulateTransitionEnd(Modal.TRANSITION_DURATION) :\n this.hideModal()\n }\n\n Modal.prototype.enforceFocus = function () {\n $(document)\n .off('focusin.bs.modal') // guard against infinite focus loop\n .on('focusin.bs.modal', $.proxy(function (e) {\n if (document !== e.target &&\n this.$element[0] !== e.target &&\n !this.$element.has(e.target).length) {\n this.$element.trigger('focus')\n }\n }, this))\n }\n\n Modal.prototype.escape = function () {\n if (this.isShown && this.options.keyboard) {\n this.$element.on('keydown.dismiss.bs.modal', $.proxy(function (e) {\n e.which == 27 && this.hide()\n }, this))\n } else if (!this.isShown) {\n this.$element.off('keydown.dismiss.bs.modal')\n }\n }\n\n Modal.prototype.resize = function () {\n if (this.isShown) {\n $(window).on('resize.bs.modal', $.proxy(this.handleUpdate, this))\n } else {\n $(window).off('resize.bs.modal')\n }\n }\n\n Modal.prototype.hideModal = function () {\n var that = this\n this.$element.hide()\n this.backdrop(function () {\n that.$body.removeClass('modal-open')\n that.resetAdjustments()\n that.resetScrollbar()\n that.$element.trigger('hidden.bs.modal')\n })\n }\n\n Modal.prototype.removeBackdrop = function () {\n this.$backdrop && this.$backdrop.remove()\n this.$backdrop = null\n }\n\n Modal.prototype.backdrop = function (callback) {\n var that = this\n var animate = this.$element.hasClass('fade') ? 'fade' : ''\n\n if (this.isShown && this.options.backdrop) {\n var doAnimate = $.support.transition && animate\n\n this.$backdrop = $(document.createElement('div'))\n .addClass('modal-backdrop ' + animate)\n .appendTo(this.$body)\n\n this.$element.on('click.dismiss.bs.modal', $.proxy(function (e) {\n if (this.ignoreBackdropClick) {\n this.ignoreBackdropClick = false\n return\n }\n if (e.target !== e.currentTarget) return\n this.options.backdrop == 'static'\n ? this.$element[0].focus()\n : this.hide()\n }, this))\n\n if (doAnimate) this.$backdrop[0].offsetWidth // force reflow\n\n this.$backdrop.addClass('in')\n\n if (!callback) return\n\n doAnimate ?\n this.$backdrop\n .one('bsTransitionEnd', callback)\n .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) :\n callback()\n\n } else if (!this.isShown && this.$backdrop) {\n this.$backdrop.removeClass('in')\n\n var callbackRemove = function () {\n that.removeBackdrop()\n callback && callback()\n }\n $.support.transition && this.$element.hasClass('fade') ?\n this.$backdrop\n .one('bsTransitionEnd', callbackRemove)\n .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) :\n callbackRemove()\n\n } else if (callback) {\n callback()\n }\n }\n\n // these following methods are used to handle overflowing modals\n\n Modal.prototype.handleUpdate = function () {\n this.adjustDialog()\n }\n\n Modal.prototype.adjustDialog = function () {\n var modalIsOverflowing = this.$element[0].scrollHeight > document.documentElement.clientHeight\n\n this.$element.css({\n paddingLeft: !this.bodyIsOverflowing && modalIsOverflowing ? this.scrollbarWidth : '',\n paddingRight: this.bodyIsOverflowing && !modalIsOverflowing ? this.scrollbarWidth : ''\n })\n }\n\n Modal.prototype.resetAdjustments = function () {\n this.$element.css({\n paddingLeft: '',\n paddingRight: ''\n })\n }\n\n Modal.prototype.checkScrollbar = function () {\n var fullWindowWidth = window.innerWidth\n if (!fullWindowWidth) { // workaround for missing window.innerWidth in IE8\n var documentElementRect = document.documentElement.getBoundingClientRect()\n fullWindowWidth = documentElementRect.right - Math.abs(documentElementRect.left)\n }\n this.bodyIsOverflowing = document.body.clientWidth < fullWindowWidth\n this.scrollbarWidth = this.measureScrollbar()\n }\n\n Modal.prototype.setScrollbar = function () {\n var bodyPad = parseInt((this.$body.css('padding-right') || 0), 10)\n this.originalBodyPad = document.body.style.paddingRight || ''\n if (this.bodyIsOverflowing) this.$body.css('padding-right', bodyPad + this.scrollbarWidth)\n }\n\n Modal.prototype.resetScrollbar = function () {\n this.$body.css('padding-right', this.originalBodyPad)\n }\n\n Modal.prototype.measureScrollbar = function () { // thx walsh\n var scrollDiv = document.createElement('div')\n scrollDiv.className = 'modal-scrollbar-measure'\n this.$body.append(scrollDiv)\n var scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth\n this.$body[0].removeChild(scrollDiv)\n return scrollbarWidth\n }\n\n\n // MODAL PLUGIN DEFINITION\n // =======================\n\n function Plugin(option, _relatedTarget) {\n return this.each(function () {\n var $this = $(this)\n var data = $this.data('bs.modal')\n var options = $.extend({}, Modal.DEFAULTS, $this.data(), typeof option == 'object' && option)\n\n if (!data) $this.data('bs.modal', (data = new Modal(this, options)))\n if (typeof option == 'string') data[option](_relatedTarget)\n else if (options.show) data.show(_relatedTarget)\n })\n }\n\n var old = $.fn.modal\n\n $.fn.modal = Plugin\n $.fn.modal.Constructor = Modal\n\n\n // MODAL NO CONFLICT\n // =================\n\n $.fn.modal.noConflict = function () {\n $.fn.modal = old\n return this\n }\n\n\n // MODAL DATA-API\n // ==============\n\n $(document).on('click.bs.modal.data-api', '[data-toggle=\"modal\"]', function (e) {\n var $this = $(this)\n var href = $this.attr('href')\n var $target = $($this.attr('data-target') || (href && href.replace(/.*(?=#[^\\s]+$)/, ''))) // strip for ie7\n var option = $target.data('bs.modal') ? 'toggle' : $.extend({ remote: !/#/.test(href) && href }, $target.data(), $this.data())\n\n if ($this.is('a')) e.preventDefault()\n\n $target.one('show.bs.modal', function (showEvent) {\n if (showEvent.isDefaultPrevented()) return // only register focus restorer if modal will actually get shown\n $target.one('hidden.bs.modal', function () {\n $this.is(':visible') && $this.trigger('focus')\n })\n })\n Plugin.call($target, option, this)\n })\n\n}(jQuery);\n","/* ========================================================================\n * Bootstrap: tooltip.js v3.3.7\n * http://getbootstrap.com/javascript/#tooltip\n * Inspired by the original jQuery.tipsy by Jason Frame\n * ========================================================================\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n 'use strict';\n\n // TOOLTIP PUBLIC CLASS DEFINITION\n // ===============================\n\n var Tooltip = function (element, options) {\n this.type = null\n this.options = null\n this.enabled = null\n this.timeout = null\n this.hoverState = null\n this.$element = null\n this.inState = null\n\n this.init('tooltip', element, options)\n }\n\n Tooltip.VERSION = '3.3.7'\n\n Tooltip.TRANSITION_DURATION = 150\n\n Tooltip.DEFAULTS = {\n animation: true,\n placement: 'top',\n selector: false,\n template: '<div class=\"tooltip\" role=\"tooltip\"><div class=\"tooltip-arrow\"></div><div class=\"tooltip-inner\"></div></div>',\n trigger: 'hover focus',\n title: '',\n delay: 0,\n html: false,\n container: false,\n viewport: {\n selector: 'body',\n padding: 0\n }\n }\n\n Tooltip.prototype.init = function (type, element, options) {\n this.enabled = true\n this.type = type\n this.$element = $(element)\n this.options = this.getOptions(options)\n this.$viewport = this.options.viewport && $($.isFunction(this.options.viewport) ? this.options.viewport.call(this, this.$element) : (this.options.viewport.selector || this.options.viewport))\n this.inState = { click: false, hover: false, focus: false }\n\n if (this.$element[0] instanceof document.constructor && !this.options.selector) {\n throw new Error('`selector` option must be specified when initializing ' + this.type + ' on the window.document object!')\n }\n\n var triggers = this.options.trigger.split(' ')\n\n for (var i = triggers.length; i--;) {\n var trigger = triggers[i]\n\n if (trigger == 'click') {\n this.$element.on('click.' + this.type, this.options.selector, $.proxy(this.toggle, this))\n } else if (trigger != 'manual') {\n var eventIn = trigger == 'hover' ? 'mouseenter' : 'focusin'\n var eventOut = trigger == 'hover' ? 'mouseleave' : 'focusout'\n\n this.$element.on(eventIn + '.' + this.type, this.options.selector, $.proxy(this.enter, this))\n this.$element.on(eventOut + '.' + this.type, this.options.selector, $.proxy(this.leave, this))\n }\n }\n\n this.options.selector ?\n (this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) :\n this.fixTitle()\n }\n\n Tooltip.prototype.getDefaults = function () {\n return Tooltip.DEFAULTS\n }\n\n Tooltip.prototype.getOptions = function (options) {\n options = $.extend({}, this.getDefaults(), this.$element.data(), options)\n\n if (options.delay && typeof options.delay == 'number') {\n options.delay = {\n show: options.delay,\n hide: options.delay\n }\n }\n\n return options\n }\n\n Tooltip.prototype.getDelegateOptions = function () {\n var options = {}\n var defaults = this.getDefaults()\n\n this._options && $.each(this._options, function (key, value) {\n if (defaults[key] != value) options[key] = value\n })\n\n return options\n }\n\n Tooltip.prototype.enter = function (obj) {\n var self = obj instanceof this.constructor ?\n obj : $(obj.currentTarget).data('bs.' + this.type)\n\n if (!self) {\n self = new this.constructor(obj.currentTarget, this.getDelegateOptions())\n $(obj.currentTarget).data('bs.' + this.type, self)\n }\n\n if (obj instanceof $.Event) {\n self.inState[obj.type == 'focusin' ? 'focus' : 'hover'] = true\n }\n\n if (self.tip().hasClass('in') || self.hoverState == 'in') {\n self.hoverState = 'in'\n return\n }\n\n clearTimeout(self.timeout)\n\n self.hoverState = 'in'\n\n if (!self.options.delay || !self.options.delay.show) return self.show()\n\n self.timeout = setTimeout(function () {\n if (self.hoverState == 'in') self.show()\n }, self.options.delay.show)\n }\n\n Tooltip.prototype.isInStateTrue = function () {\n for (var key in this.inState) {\n if (this.inState[key]) return true\n }\n\n return false\n }\n\n Tooltip.prototype.leave = function (obj) {\n var self = obj instanceof this.constructor ?\n obj : $(obj.currentTarget).data('bs.' + this.type)\n\n if (!self) {\n self = new this.constructor(obj.currentTarget, this.getDelegateOptions())\n $(obj.currentTarget).data('bs.' + this.type, self)\n }\n\n if (obj instanceof $.Event) {\n self.inState[obj.type == 'focusout' ? 'focus' : 'hover'] = false\n }\n\n if (self.isInStateTrue()) return\n\n clearTimeout(self.timeout)\n\n self.hoverState = 'out'\n\n if (!self.options.delay || !self.options.delay.hide) return self.hide()\n\n self.timeout = setTimeout(function () {\n if (self.hoverState == 'out') self.hide()\n }, self.options.delay.hide)\n }\n\n Tooltip.prototype.show = function () {\n var e = $.Event('show.bs.' + this.type)\n\n if (this.hasContent() && this.enabled) {\n this.$element.trigger(e)\n\n var inDom = $.contains(this.$element[0].ownerDocument.documentElement, this.$element[0])\n if (e.isDefaultPrevented() || !inDom) return\n var that = this\n\n var $tip = this.tip()\n\n var tipId = this.getUID(this.type)\n\n this.setContent()\n $tip.attr('id', tipId)\n this.$element.attr('aria-describedby', tipId)\n\n if (this.options.animation) $tip.addClass('fade')\n\n var placement = typeof this.options.placement == 'function' ?\n this.options.placement.call(this, $tip[0], this.$element[0]) :\n this.options.placement\n\n var autoToken = /\\s?auto?\\s?/i\n var autoPlace = autoToken.test(placement)\n if (autoPlace) placement = placement.replace(autoToken, '') || 'top'\n\n $tip\n .detach()\n .css({ top: 0, left: 0, display: 'block' })\n .addClass(placement)\n .data('bs.' + this.type, this)\n\n this.options.container ? $tip.appendTo(this.options.container) : $tip.insertAfter(this.$element)\n this.$element.trigger('inserted.bs.' + this.type)\n\n var pos = this.getPosition()\n var actualWidth = $tip[0].offsetWidth\n var actualHeight = $tip[0].offsetHeight\n\n if (autoPlace) {\n var orgPlacement = placement\n var viewportDim = this.getPosition(this.$viewport)\n\n placement = placement == 'bottom' && pos.bottom + actualHeight > viewportDim.bottom ? 'top' :\n placement == 'top' && pos.top - actualHeight < viewportDim.top ? 'bottom' :\n placement == 'right' && pos.right + actualWidth > viewportDim.width ? 'left' :\n placement == 'left' && pos.left - actualWidth < viewportDim.left ? 'right' :\n placement\n\n $tip\n .removeClass(orgPlacement)\n .addClass(placement)\n }\n\n var calculatedOffset = this.getCalculatedOffset(placement, pos, actualWidth, actualHeight)\n\n this.applyPlacement(calculatedOffset, placement)\n\n var complete = function () {\n var prevHoverState = that.hoverState\n that.$element.trigger('shown.bs.' + that.type)\n that.hoverState = null\n\n if (prevHoverState == 'out') that.leave(that)\n }\n\n $.support.transition && this.$tip.hasClass('fade') ?\n $tip\n .one('bsTransitionEnd', complete)\n .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) :\n complete()\n }\n }\n\n Tooltip.prototype.applyPlacement = function (offset, placement) {\n var $tip = this.tip()\n var width = $tip[0].offsetWidth\n var height = $tip[0].offsetHeight\n\n // manually read margins because getBoundingClientRect includes difference\n var marginTop = parseInt($tip.css('margin-top'), 10)\n var marginLeft = parseInt($tip.css('margin-left'), 10)\n\n // we must check for NaN for ie 8/9\n if (isNaN(marginTop)) marginTop = 0\n if (isNaN(marginLeft)) marginLeft = 0\n\n offset.top += marginTop\n offset.left += marginLeft\n\n // $.fn.offset doesn't round pixel values\n // so we use setOffset directly with our own function B-0\n $.offset.setOffset($tip[0], $.extend({\n using: function (props) {\n $tip.css({\n top: Math.round(props.top),\n left: Math.round(props.left)\n })\n }\n }, offset), 0)\n\n $tip.addClass('in')\n\n // check to see if placing tip in new offset caused the tip to resize itself\n var actualWidth = $tip[0].offsetWidth\n var actualHeight = $tip[0].offsetHeight\n\n if (placement == 'top' && actualHeight != height) {\n offset.top = offset.top + height - actualHeight\n }\n\n var delta = this.getViewportAdjustedDelta(placement, offset, actualWidth, actualHeight)\n\n if (delta.left) offset.left += delta.left\n else offset.top += delta.top\n\n var isVertical = /top|bottom/.test(placement)\n var arrowDelta = isVertical ? delta.left * 2 - width + actualWidth : delta.top * 2 - height + actualHeight\n var arrowOffsetPosition = isVertical ? 'offsetWidth' : 'offsetHeight'\n\n $tip.offset(offset)\n this.replaceArrow(arrowDelta, $tip[0][arrowOffsetPosition], isVertical)\n }\n\n Tooltip.prototype.replaceArrow = function (delta, dimension, isVertical) {\n this.arrow()\n .css(isVertical ? 'left' : 'top', 50 * (1 - delta / dimension) + '%')\n .css(isVertical ? 'top' : 'left', '')\n }\n\n Tooltip.prototype.setContent = function () {\n var $tip = this.tip()\n var title = this.getTitle()\n\n $tip.find('.tooltip-inner')[this.options.html ? 'html' : 'text'](title)\n $tip.removeClass('fade in top bottom left right')\n }\n\n Tooltip.prototype.hide = function (callback) {\n var that = this\n var $tip = $(this.$tip)\n var e = $.Event('hide.bs.' + this.type)\n\n function complete() {\n if (that.hoverState != 'in') $tip.detach()\n if (that.$element) { // TODO: Check whether guarding this code with this `if` is really necessary.\n that.$element\n .removeAttr('aria-describedby')\n .trigger('hidden.bs.' + that.type)\n }\n callback && callback()\n }\n\n this.$element.trigger(e)\n\n if (e.isDefaultPrevented()) return\n\n $tip.removeClass('in')\n\n $.support.transition && $tip.hasClass('fade') ?\n $tip\n .one('bsTransitionEnd', complete)\n .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) :\n complete()\n\n this.hoverState = null\n\n return this\n }\n\n Tooltip.prototype.fixTitle = function () {\n var $e = this.$element\n if ($e.attr('title') || typeof $e.attr('data-original-title') != 'string') {\n $e.attr('data-original-title', $e.attr('title') || '').attr('title', '')\n }\n }\n\n Tooltip.prototype.hasContent = function () {\n return this.getTitle()\n }\n\n Tooltip.prototype.getPosition = function ($element) {\n $element = $element || this.$element\n\n var el = $element[0]\n var isBody = el.tagName == 'BODY'\n\n var elRect = el.getBoundingClientRect()\n if (elRect.width == null) {\n // width and height are missing in IE8, so compute them manually; see https://github.com/twbs/bootstrap/issues/14093\n elRect = $.extend({}, elRect, { width: elRect.right - elRect.left, height: elRect.bottom - elRect.top })\n }\n var isSvg = window.SVGElement && el instanceof window.SVGElement\n // Avoid using $.offset() on SVGs since it gives incorrect results in jQuery 3.\n // See https://github.com/twbs/bootstrap/issues/20280\n var elOffset = isBody ? { top: 0, left: 0 } : (isSvg ? null : $element.offset())\n var scroll = { scroll: isBody ? document.documentElement.scrollTop || document.body.scrollTop : $element.scrollTop() }\n var outerDims = isBody ? { width: $(window).width(), height: $(window).height() } : null\n\n return $.extend({}, elRect, scroll, outerDims, elOffset)\n }\n\n Tooltip.prototype.getCalculatedOffset = function (placement, pos, actualWidth, actualHeight) {\n return placement == 'bottom' ? { top: pos.top + pos.height, left: pos.left + pos.width / 2 - actualWidth / 2 } :\n placement == 'top' ? { top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2 } :\n placement == 'left' ? { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth } :\n /* placement == 'right' */ { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width }\n\n }\n\n Tooltip.prototype.getViewportAdjustedDelta = function (placement, pos, actualWidth, actualHeight) {\n var delta = { top: 0, left: 0 }\n if (!this.$viewport) return delta\n\n var viewportPadding = this.options.viewport && this.options.viewport.padding || 0\n var viewportDimensions = this.getPosition(this.$viewport)\n\n if (/right|left/.test(placement)) {\n var topEdgeOffset = pos.top - viewportPadding - viewportDimensions.scroll\n var bottomEdgeOffset = pos.top + viewportPadding - viewportDimensions.scroll + actualHeight\n if (topEdgeOffset < viewportDimensions.top) { // top overflow\n delta.top = viewportDimensions.top - topEdgeOffset\n } else if (bottomEdgeOffset > viewportDimensions.top + viewportDimensions.height) { // bottom overflow\n delta.top = viewportDimensions.top + viewportDimensions.height - bottomEdgeOffset\n }\n } else {\n var leftEdgeOffset = pos.left - viewportPadding\n var rightEdgeOffset = pos.left + viewportPadding + actualWidth\n if (leftEdgeOffset < viewportDimensions.left) { // left overflow\n delta.left = viewportDimensions.left - leftEdgeOffset\n } else if (rightEdgeOffset > viewportDimensions.right) { // right overflow\n delta.left = viewportDimensions.left + viewportDimensions.width - rightEdgeOffset\n }\n }\n\n return delta\n }\n\n Tooltip.prototype.getTitle = function () {\n var title\n var $e = this.$element\n var o = this.options\n\n title = $e.attr('data-original-title')\n || (typeof o.title == 'function' ? o.title.call($e[0]) : o.title)\n\n return title\n }\n\n Tooltip.prototype.getUID = function (prefix) {\n do prefix += ~~(Math.random() * 1000000)\n while (document.getElementById(prefix))\n return prefix\n }\n\n Tooltip.prototype.tip = function () {\n if (!this.$tip) {\n this.$tip = $(this.options.template)\n if (this.$tip.length != 1) {\n throw new Error(this.type + ' `template` option must consist of exactly 1 top-level element!')\n }\n }\n return this.$tip\n }\n\n Tooltip.prototype.arrow = function () {\n return (this.$arrow = this.$arrow || this.tip().find('.tooltip-arrow'))\n }\n\n Tooltip.prototype.enable = function () {\n this.enabled = true\n }\n\n Tooltip.prototype.disable = function () {\n this.enabled = false\n }\n\n Tooltip.prototype.toggleEnabled = function () {\n this.enabled = !this.enabled\n }\n\n Tooltip.prototype.toggle = function (e) {\n var self = this\n if (e) {\n self = $(e.currentTarget).data('bs.' + this.type)\n if (!self) {\n self = new this.constructor(e.currentTarget, this.getDelegateOptions())\n $(e.currentTarget).data('bs.' + this.type, self)\n }\n }\n\n if (e) {\n self.inState.click = !self.inState.click\n if (self.isInStateTrue()) self.enter(self)\n else self.leave(self)\n } else {\n self.tip().hasClass('in') ? self.leave(self) : self.enter(self)\n }\n }\n\n Tooltip.prototype.destroy = function () {\n var that = this\n clearTimeout(this.timeout)\n this.hide(function () {\n that.$element.off('.' + that.type).removeData('bs.' + that.type)\n if (that.$tip) {\n that.$tip.detach()\n }\n that.$tip = null\n that.$arrow = null\n that.$viewport = null\n that.$element = null\n })\n }\n\n\n // TOOLTIP PLUGIN DEFINITION\n // =========================\n\n function Plugin(option) {\n return this.each(function () {\n var $this = $(this)\n var data = $this.data('bs.tooltip')\n var options = typeof option == 'object' && option\n\n if (!data && /destroy|hide/.test(option)) return\n if (!data) $this.data('bs.tooltip', (data = new Tooltip(this, options)))\n if (typeof option == 'string') data[option]()\n })\n }\n\n var old = $.fn.tooltip\n\n $.fn.tooltip = Plugin\n $.fn.tooltip.Constructor = Tooltip\n\n\n // TOOLTIP NO CONFLICT\n // ===================\n\n $.fn.tooltip.noConflict = function () {\n $.fn.tooltip = old\n return this\n }\n\n}(jQuery);\n","/* ========================================================================\n * Bootstrap: transition.js v3.3.7\n * http://getbootstrap.com/javascript/#transitions\n * ========================================================================\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n 'use strict';\n\n // CSS TRANSITION SUPPORT (Shoutout: http://www.modernizr.com/)\n // ============================================================\n\n function transitionEnd() {\n var el = document.createElement('bootstrap')\n\n var transEndEventNames = {\n WebkitTransition : 'webkitTransitionEnd',\n MozTransition : 'transitionend',\n OTransition : 'oTransitionEnd otransitionend',\n transition : 'transitionend'\n }\n\n for (var name in transEndEventNames) {\n if (el.style[name] !== undefined) {\n return { end: transEndEventNames[name] }\n }\n }\n\n return false // explicit for ie8 ( ._.)\n }\n\n // http://blog.alexmaccaw.com/css-transitions\n $.fn.emulateTransitionEnd = function (duration) {\n var called = false\n var $el = this\n $(this).one('bsTransitionEnd', function () { called = true })\n var callback = function () { if (!called) $($el).trigger($.support.transition.end) }\n setTimeout(callback, duration)\n return this\n }\n\n $(function () {\n $.support.transition = transitionEnd()\n\n if (!$.support.transition) return\n\n $.event.special.bsTransitionEnd = {\n bindType: $.support.transition.end,\n delegateType: $.support.transition.end,\n handle: function (e) {\n if ($(e.target).is(this)) return e.handleObj.handler.apply(this, arguments)\n }\n }\n })\n\n}(jQuery);\n","/*jslint browser: true*/\r\n/*jslint jquery: true*/\r\n\r\n/*\r\n * jQuery Hotkeys Plugin\r\n * Copyright 2010, John Resig\r\n * Dual licensed under the MIT or GPL Version 2 licenses.\r\n *\r\n * Based upon the plugin by Tzury Bar Yochay:\r\n * https://github.com/tzuryby/jquery.hotkeys\r\n *\r\n * Original idea by:\r\n * Binny V A, http://www.openjs.com/scripts/events/keyboard_shortcuts/\r\n */\r\n\r\n/*\r\n * One small change is: now keys are passed by object { keys: '...' }\r\n * Might be useful, when you want to pass some other data to your handler\r\n */\r\n\r\n(function(jQuery) {\r\n\r\n jQuery.hotkeys = {\r\n version: \"0.2.0\",\r\n\r\n specialKeys: {\r\n 8: \"backspace\",\r\n 9: \"tab\",\r\n 10: \"return\",\r\n 13: \"return\",\r\n 16: \"shift\",\r\n 17: \"ctrl\",\r\n 18: \"alt\",\r\n 19: \"pause\",\r\n 20: \"capslock\",\r\n 27: \"esc\",\r\n 32: \"space\",\r\n 33: \"pageup\",\r\n 34: \"pagedown\",\r\n 35: \"end\",\r\n 36: \"home\",\r\n 37: \"left\",\r\n 38: \"up\",\r\n 39: \"right\",\r\n 40: \"down\",\r\n 45: \"insert\",\r\n 46: \"del\",\r\n 59: \";\",\r\n 61: \"=\",\r\n 96: \"0\",\r\n 97: \"1\",\r\n 98: \"2\",\r\n 99: \"3\",\r\n 100: \"4\",\r\n 101: \"5\",\r\n 102: \"6\",\r\n 103: \"7\",\r\n 104: \"8\",\r\n 105: \"9\",\r\n 106: \"*\",\r\n 107: \"+\",\r\n 109: \"-\",\r\n 110: \".\",\r\n 111: \"/\",\r\n 112: \"f1\",\r\n 113: \"f2\",\r\n 114: \"f3\",\r\n 115: \"f4\",\r\n 116: \"f5\",\r\n 117: \"f6\",\r\n 118: \"f7\",\r\n 119: \"f8\",\r\n 120: \"f9\",\r\n 121: \"f10\",\r\n 122: \"f11\",\r\n 123: \"f12\",\r\n 144: \"numlock\",\r\n 145: \"scroll\",\r\n 173: \"-\",\r\n 186: \";\",\r\n 187: \"=\",\r\n 188: \",\",\r\n 189: \"-\",\r\n 190: \".\",\r\n 191: \"/\",\r\n 192: \"`\",\r\n 219: \"[\",\r\n 220: \"\\\\\",\r\n 221: \"]\",\r\n 222: \"'\"\r\n },\r\n\r\n shiftNums: {\r\n \"`\": \"~\",\r\n \"1\": \"!\",\r\n \"2\": \"@\",\r\n \"3\": \"#\",\r\n \"4\": \"$\",\r\n \"5\": \"%\",\r\n \"6\": \"^\",\r\n \"7\": \"&\",\r\n \"8\": \"*\",\r\n \"9\": \"(\",\r\n \"0\": \")\",\r\n \"-\": \"_\",\r\n \"=\": \"+\",\r\n \";\": \": \",\r\n \"'\": \"\\\"\",\r\n \",\": \"<\",\r\n \".\": \">\",\r\n \"/\": \"?\",\r\n \"\\\\\": \"|\"\r\n },\r\n\r\n // excludes: button, checkbox, file, hidden, image, password, radio, reset, search, submit, url\r\n textAcceptingInputTypes: [\r\n \"text\", \"password\", \"number\", \"email\", \"url\", \"range\", \"date\", \"month\", \"week\", \"time\", \"datetime\",\r\n \"datetime-local\", \"search\", \"color\", \"tel\"],\r\n\r\n // default input types not to bind to unless bound directly\r\n textInputTypes: /textarea|input|select/i,\r\n\r\n options: {\r\n filterInputAcceptingElements: true,\r\n filterTextInputs: true,\r\n filterContentEditable: true\r\n }\r\n };\r\n\r\n function keyHandler(handleObj) {\r\n if (typeof handleObj.data === \"string\") {\r\n handleObj.data = {\r\n keys: handleObj.data\r\n };\r\n }\r\n\r\n // Only care when a possible input has been specified\r\n if (!handleObj.data || !handleObj.data.keys || typeof handleObj.data.keys !== \"string\") {\r\n return;\r\n }\r\n\r\n var origHandler = handleObj.handler,\r\n keys = handleObj.data.keys.toLowerCase().split(\" \");\r\n\r\n handleObj.handler = function(event) {\r\n // Don't fire in text-accepting inputs that we didn't directly bind to\r\n if (this !== event.target &&\r\n (jQuery.hotkeys.options.filterInputAcceptingElements &&\r\n jQuery.hotkeys.textInputTypes.test(event.target.nodeName) ||\r\n (jQuery.hotkeys.options.filterContentEditable && jQuery(event.target).attr('contenteditable')) ||\r\n (jQuery.hotkeys.options.filterTextInputs &&\r\n jQuery.inArray(event.target.type, jQuery.hotkeys.textAcceptingInputTypes) > -1))) {\r\n return;\r\n }\r\n\r\n var special = event.type !== \"keypress\" && jQuery.hotkeys.specialKeys[event.which],\r\n character = String.fromCharCode(event.which).toLowerCase(),\r\n modif = \"\",\r\n possible = {};\r\n\r\n jQuery.each([\"alt\", \"ctrl\", \"shift\"], function(index, specialKey) {\r\n\r\n if (event[specialKey + 'Key'] && special !== specialKey) {\r\n modif += specialKey + '+';\r\n }\r\n });\r\n\r\n // metaKey is triggered off ctrlKey erronously\r\n if (event.metaKey && !event.ctrlKey && special !== \"meta\") {\r\n modif += \"meta+\";\r\n }\r\n\r\n if (event.metaKey && special !== \"meta\" && modif.indexOf(\"alt+ctrl+shift+\") > -1) {\r\n modif = modif.replace(\"alt+ctrl+shift+\", \"hyper+\");\r\n }\r\n\r\n if (special) {\r\n possible[modif + special] = true;\r\n }\r\n else {\r\n possible[modif + character] = true;\r\n possible[modif + jQuery.hotkeys.shiftNums[character]] = true;\r\n\r\n // \"$\" can be triggered as \"Shift+4\" or \"Shift+$\" or just \"$\"\r\n if (modif === \"shift+\") {\r\n possible[jQuery.hotkeys.shiftNums[character]] = true;\r\n }\r\n }\r\n\r\n for (var i = 0, l = keys.length; i < l; i++) {\r\n if (possible[keys[i]]) {\r\n return origHandler.apply(this, arguments);\r\n }\r\n }\r\n };\r\n }\r\n\r\n jQuery.each([\"keydown\", \"keyup\", \"keypress\"], function() {\r\n jQuery.event.special[this] = {\r\n add: keyHandler\r\n };\r\n });\r\n\r\n})(jQuery || this.jQuery || window.jQuery);\r\n","module.exports = global[\"punycode\"] = require(\"-!./punycode.js\");","/*! https://mths.be/punycode v1.4.1 by @mathias */\n;(function(root) {\n\n\t/** Detect free variables */\n\tvar freeExports = typeof exports == 'object' && exports &&\n\t\t!exports.nodeType && exports;\n\tvar freeModule = typeof module == 'object' && module &&\n\t\t!module.nodeType && module;\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (\n\t\tfreeGlobal.global === freeGlobal ||\n\t\tfreeGlobal.window === freeGlobal ||\n\t\tfreeGlobal.self === freeGlobal\n\t) {\n\t\troot = freeGlobal;\n\t}\n\n\t/**\n\t * The `punycode` object.\n\t * @name punycode\n\t * @type Object\n\t */\n\tvar punycode,\n\n\t/** Highest positive signed 32-bit float value */\n\tmaxInt = 2147483647, // aka. 0x7FFFFFFF or 2^31-1\n\n\t/** Bootstring parameters */\n\tbase = 36,\n\ttMin = 1,\n\ttMax = 26,\n\tskew = 38,\n\tdamp = 700,\n\tinitialBias = 72,\n\tinitialN = 128, // 0x80\n\tdelimiter = '-', // '\\x2D'\n\n\t/** Regular expressions */\n\tregexPunycode = /^xn--/,\n\tregexNonASCII = /[^\\x20-\\x7E]/, // unprintable ASCII chars + non-ASCII chars\n\tregexSeparators = /[\\x2E\\u3002\\uFF0E\\uFF61]/g, // RFC 3490 separators\n\n\t/** Error messages */\n\terrors = {\n\t\t'overflow': 'Overflow: input needs wider integers to process',\n\t\t'not-basic': 'Illegal input >= 0x80 (not a basic code point)',\n\t\t'invalid-input': 'Invalid input'\n\t},\n\n\t/** Convenience shortcuts */\n\tbaseMinusTMin = base - tMin,\n\tfloor = Math.floor,\n\tstringFromCharCode = String.fromCharCode,\n\n\t/** Temporary variable */\n\tkey;\n\n\t/*--------------------------------------------------------------------------*/\n\n\t/**\n\t * A generic error utility function.\n\t * @private\n\t * @param {String} type The error type.\n\t * @returns {Error} Throws a `RangeError` with the applicable error message.\n\t */\n\tfunction error(type) {\n\t\tthrow new RangeError(errors[type]);\n\t}\n\n\t/**\n\t * A generic `Array#map` utility function.\n\t * @private\n\t * @param {Array} array The array to iterate over.\n\t * @param {Function} callback The function that gets called for every array\n\t * item.\n\t * @returns {Array} A new array of values returned by the callback function.\n\t */\n\tfunction map(array, fn) {\n\t\tvar length = array.length;\n\t\tvar result = [];\n\t\twhile (length--) {\n\t\t\tresult[length] = fn(array[length]);\n\t\t}\n\t\treturn result;\n\t}\n\n\t/**\n\t * A simple `Array#map`-like wrapper to work with domain name strings or email\n\t * addresses.\n\t * @private\n\t * @param {String} domain The domain name or email address.\n\t * @param {Function} callback The function that gets called for every\n\t * character.\n\t * @returns {Array} A new string of characters returned by the callback\n\t * function.\n\t */\n\tfunction mapDomain(string, fn) {\n\t\tvar parts = string.split('@');\n\t\tvar result = '';\n\t\tif (parts.length > 1) {\n\t\t\t// In email addresses, only the domain name should be punycoded. Leave\n\t\t\t// the local part (i.e. everything up to `@`) intact.\n\t\t\tresult = parts[0] + '@';\n\t\t\tstring = parts[1];\n\t\t}\n\t\t// Avoid `split(regex)` for IE8 compatibility. See #17.\n\t\tstring = string.replace(regexSeparators, '\\x2E');\n\t\tvar labels = string.split('.');\n\t\tvar encoded = map(labels, fn).join('.');\n\t\treturn result + encoded;\n\t}\n\n\t/**\n\t * Creates an array containing the numeric code points of each Unicode\n\t * character in the string. While JavaScript uses UCS-2 internally,\n\t * this function will convert a pair of surrogate halves (each of which\n\t * UCS-2 exposes as separate characters) into a single code point,\n\t * matching UTF-16.\n\t * @see `punycode.ucs2.encode`\n\t * @see <https://mathiasbynens.be/notes/javascript-encoding>\n\t * @memberOf punycode.ucs2\n\t * @name decode\n\t * @param {String} string The Unicode input string (UCS-2).\n\t * @returns {Array} The new array of code points.\n\t */\n\tfunction ucs2decode(string) {\n\t\tvar output = [],\n\t\t counter = 0,\n\t\t length = string.length,\n\t\t value,\n\t\t extra;\n\t\twhile (counter < length) {\n\t\t\tvalue = string.charCodeAt(counter++);\n\t\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t\t// high surrogate, and there is a next character\n\t\t\t\textra = string.charCodeAt(counter++);\n\t\t\t\tif ((extra & 0xFC00) == 0xDC00) { // low surrogate\n\t\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t\t} else {\n\t\t\t\t\t// unmatched surrogate; only append this code unit, in case the next\n\t\t\t\t\t// code unit is the high surrogate of a surrogate pair\n\t\t\t\t\toutput.push(value);\n\t\t\t\t\tcounter--;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\toutput.push(value);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t}\n\n\t/**\n\t * Creates a string based on an array of numeric code points.\n\t * @see `punycode.ucs2.decode`\n\t * @memberOf punycode.ucs2\n\t * @name encode\n\t * @param {Array} codePoints The array of numeric code points.\n\t * @returns {String} The new Unicode string (UCS-2).\n\t */\n\tfunction ucs2encode(array) {\n\t\treturn map(array, function(value) {\n\t\t\tvar output = '';\n\t\t\tif (value > 0xFFFF) {\n\t\t\t\tvalue -= 0x10000;\n\t\t\t\toutput += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);\n\t\t\t\tvalue = 0xDC00 | value & 0x3FF;\n\t\t\t}\n\t\t\toutput += stringFromCharCode(value);\n\t\t\treturn output;\n\t\t}).join('');\n\t}\n\n\t/**\n\t * Converts a basic code point into a digit/integer.\n\t * @see `digitToBasic()`\n\t * @private\n\t * @param {Number} codePoint The basic numeric code point value.\n\t * @returns {Number} The numeric value of a basic code point (for use in\n\t * representing integers) in the range `0` to `base - 1`, or `base` if\n\t * the code point does not represent a value.\n\t */\n\tfunction basicToDigit(codePoint) {\n\t\tif (codePoint - 48 < 10) {\n\t\t\treturn codePoint - 22;\n\t\t}\n\t\tif (codePoint - 65 < 26) {\n\t\t\treturn codePoint - 65;\n\t\t}\n\t\tif (codePoint - 97 < 26) {\n\t\t\treturn codePoint - 97;\n\t\t}\n\t\treturn base;\n\t}\n\n\t/**\n\t * Converts a digit/integer into a basic code point.\n\t * @see `basicToDigit()`\n\t * @private\n\t * @param {Number} digit The numeric value of a basic code point.\n\t * @returns {Number} The basic code point whose value (when used for\n\t * representing integers) is `digit`, which needs to be in the range\n\t * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is\n\t * used; else, the lowercase form is used. The behavior is undefined\n\t * if `flag` is non-zero and `digit` has no uppercase form.\n\t */\n\tfunction digitToBasic(digit, flag) {\n\t\t// 0..25 map to ASCII a..z or A..Z\n\t\t// 26..35 map to ASCII 0..9\n\t\treturn digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5);\n\t}\n\n\t/**\n\t * Bias adaptation function as per section 3.4 of RFC 3492.\n\t * https://tools.ietf.org/html/rfc3492#section-3.4\n\t * @private\n\t */\n\tfunction adapt(delta, numPoints, firstTime) {\n\t\tvar k = 0;\n\t\tdelta = firstTime ? floor(delta / damp) : delta >> 1;\n\t\tdelta += floor(delta / numPoints);\n\t\tfor (/* no initialization */; delta > baseMinusTMin * tMax >> 1; k += base) {\n\t\t\tdelta = floor(delta / baseMinusTMin);\n\t\t}\n\t\treturn floor(k + (baseMinusTMin + 1) * delta / (delta + skew));\n\t}\n\n\t/**\n\t * Converts a Punycode string of ASCII-only symbols to a string of Unicode\n\t * symbols.\n\t * @memberOf punycode\n\t * @param {String} input The Punycode string of ASCII-only symbols.\n\t * @returns {String} The resulting string of Unicode symbols.\n\t */\n\tfunction decode(input) {\n\t\t// Don't use UCS-2\n\t\tvar output = [],\n\t\t inputLength = input.length,\n\t\t out,\n\t\t i = 0,\n\t\t n = initialN,\n\t\t bias = initialBias,\n\t\t basic,\n\t\t j,\n\t\t index,\n\t\t oldi,\n\t\t w,\n\t\t k,\n\t\t digit,\n\t\t t,\n\t\t /** Cached calculation results */\n\t\t baseMinusT;\n\n\t\t// Handle the basic code points: let `basic` be the number of input code\n\t\t// points before the last delimiter, or `0` if there is none, then copy\n\t\t// the first basic code points to the output.\n\n\t\tbasic = input.lastIndexOf(delimiter);\n\t\tif (basic < 0) {\n\t\t\tbasic = 0;\n\t\t}\n\n\t\tfor (j = 0; j < basic; ++j) {\n\t\t\t// if it's not a basic code point\n\t\t\tif (input.charCodeAt(j) >= 0x80) {\n\t\t\t\terror('not-basic');\n\t\t\t}\n\t\t\toutput.push(input.charCodeAt(j));\n\t\t}\n\n\t\t// Main decoding loop: start just after the last delimiter if any basic code\n\t\t// points were copied; start at the beginning otherwise.\n\n\t\tfor (index = basic > 0 ? basic + 1 : 0; index < inputLength; /* no final expression */) {\n\n\t\t\t// `index` is the index of the next character to be consumed.\n\t\t\t// Decode a generalized variable-length integer into `delta`,\n\t\t\t// which gets added to `i`. The overflow checking is easier\n\t\t\t// if we increase `i` as we go, then subtract off its starting\n\t\t\t// value at the end to obtain `delta`.\n\t\t\tfor (oldi = i, w = 1, k = base; /* no condition */; k += base) {\n\n\t\t\t\tif (index >= inputLength) {\n\t\t\t\t\terror('invalid-input');\n\t\t\t\t}\n\n\t\t\t\tdigit = basicToDigit(input.charCodeAt(index++));\n\n\t\t\t\tif (digit >= base || digit > floor((maxInt - i) / w)) {\n\t\t\t\t\terror('overflow');\n\t\t\t\t}\n\n\t\t\t\ti += digit * w;\n\t\t\t\tt = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\n\t\t\t\tif (digit < t) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tbaseMinusT = base - t;\n\t\t\t\tif (w > floor(maxInt / baseMinusT)) {\n\t\t\t\t\terror('overflow');\n\t\t\t\t}\n\n\t\t\t\tw *= baseMinusT;\n\n\t\t\t}\n\n\t\t\tout = output.length + 1;\n\t\t\tbias = adapt(i - oldi, out, oldi == 0);\n\n\t\t\t// `i` was supposed to wrap around from `out` to `0`,\n\t\t\t// incrementing `n` each time, so we'll fix that now:\n\t\t\tif (floor(i / out) > maxInt - n) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\tn += floor(i / out);\n\t\t\ti %= out;\n\n\t\t\t// Insert `n` at position `i` of the output\n\t\t\toutput.splice(i++, 0, n);\n\n\t\t}\n\n\t\treturn ucs2encode(output);\n\t}\n\n\t/**\n\t * Converts a string of Unicode symbols (e.g. a domain name label) to a\n\t * Punycode string of ASCII-only symbols.\n\t * @memberOf punycode\n\t * @param {String} input The string of Unicode symbols.\n\t * @returns {String} The resulting Punycode string of ASCII-only symbols.\n\t */\n\tfunction encode(input) {\n\t\tvar n,\n\t\t delta,\n\t\t handledCPCount,\n\t\t basicLength,\n\t\t bias,\n\t\t j,\n\t\t m,\n\t\t q,\n\t\t k,\n\t\t t,\n\t\t currentValue,\n\t\t output = [],\n\t\t /** `inputLength` will hold the number of code points in `input`. */\n\t\t inputLength,\n\t\t /** Cached calculation results */\n\t\t handledCPCountPlusOne,\n\t\t baseMinusT,\n\t\t qMinusT;\n\n\t\t// Convert the input in UCS-2 to Unicode\n\t\tinput = ucs2decode(input);\n\n\t\t// Cache the length\n\t\tinputLength = input.length;\n\n\t\t// Initialize the state\n\t\tn = initialN;\n\t\tdelta = 0;\n\t\tbias = initialBias;\n\n\t\t// Handle the basic code points\n\t\tfor (j = 0; j < inputLength; ++j) {\n\t\t\tcurrentValue = input[j];\n\t\t\tif (currentValue < 0x80) {\n\t\t\t\toutput.push(stringFromCharCode(currentValue));\n\t\t\t}\n\t\t}\n\n\t\thandledCPCount = basicLength = output.length;\n\n\t\t// `handledCPCount` is the number of code points that have been handled;\n\t\t// `basicLength` is the number of basic code points.\n\n\t\t// Finish the basic string - if it is not empty - with a delimiter\n\t\tif (basicLength) {\n\t\t\toutput.push(delimiter);\n\t\t}\n\n\t\t// Main encoding loop:\n\t\twhile (handledCPCount < inputLength) {\n\n\t\t\t// All non-basic code points < n have been handled already. Find the next\n\t\t\t// larger one:\n\t\t\tfor (m = maxInt, j = 0; j < inputLength; ++j) {\n\t\t\t\tcurrentValue = input[j];\n\t\t\t\tif (currentValue >= n && currentValue < m) {\n\t\t\t\t\tm = currentValue;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Increase `delta` enough to advance the decoder's <n,i> state to <m,0>,\n\t\t\t// but guard against overflow\n\t\t\thandledCPCountPlusOne = handledCPCount + 1;\n\t\t\tif (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\tdelta += (m - n) * handledCPCountPlusOne;\n\t\t\tn = m;\n\n\t\t\tfor (j = 0; j < inputLength; ++j) {\n\t\t\t\tcurrentValue = input[j];\n\n\t\t\t\tif (currentValue < n && ++delta > maxInt) {\n\t\t\t\t\terror('overflow');\n\t\t\t\t}\n\n\t\t\t\tif (currentValue == n) {\n\t\t\t\t\t// Represent delta as a generalized variable-length integer\n\t\t\t\t\tfor (q = delta, k = base; /* no condition */; k += base) {\n\t\t\t\t\t\tt = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\t\t\t\t\t\tif (q < t) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tqMinusT = q - t;\n\t\t\t\t\t\tbaseMinusT = base - t;\n\t\t\t\t\t\toutput.push(\n\t\t\t\t\t\t\tstringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0))\n\t\t\t\t\t\t);\n\t\t\t\t\t\tq = floor(qMinusT / baseMinusT);\n\t\t\t\t\t}\n\n\t\t\t\t\toutput.push(stringFromCharCode(digitToBasic(q, 0)));\n\t\t\t\t\tbias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength);\n\t\t\t\t\tdelta = 0;\n\t\t\t\t\t++handledCPCount;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t++delta;\n\t\t\t++n;\n\n\t\t}\n\t\treturn output.join('');\n\t}\n\n\t/**\n\t * Converts a Punycode string representing a domain name or an email address\n\t * to Unicode. Only the Punycoded parts of the input will be converted, i.e.\n\t * it doesn't matter if you call it on a string that has already been\n\t * converted to Unicode.\n\t * @memberOf punycode\n\t * @param {String} input The Punycoded domain name or email address to\n\t * convert to Unicode.\n\t * @returns {String} The Unicode representation of the given Punycode\n\t * string.\n\t */\n\tfunction toUnicode(input) {\n\t\treturn mapDomain(input, function(string) {\n\t\t\treturn regexPunycode.test(string)\n\t\t\t\t? decode(string.slice(4).toLowerCase())\n\t\t\t\t: string;\n\t\t});\n\t}\n\n\t/**\n\t * Converts a Unicode string representing a domain name or an email address to\n\t * Punycode. Only the non-ASCII parts of the domain name will be converted,\n\t * i.e. it doesn't matter if you call it with a domain that's already in\n\t * ASCII.\n\t * @memberOf punycode\n\t * @param {String} input The domain name or email address to convert, as a\n\t * Unicode string.\n\t * @returns {String} The Punycode representation of the given domain name or\n\t * email address.\n\t */\n\tfunction toASCII(input) {\n\t\treturn mapDomain(input, function(string) {\n\t\t\treturn regexNonASCII.test(string)\n\t\t\t\t? 'xn--' + encode(string)\n\t\t\t\t: string;\n\t\t});\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\t/** Define the public API */\n\tpunycode = {\n\t\t/**\n\t\t * A string representing the current Punycode.js version number.\n\t\t * @memberOf punycode\n\t\t * @type String\n\t\t */\n\t\t'version': '1.4.1',\n\t\t/**\n\t\t * An object of methods to convert from JavaScript's internal character\n\t\t * representation (UCS-2) to Unicode code points, and back.\n\t\t * @see <https://mathiasbynens.be/notes/javascript-encoding>\n\t\t * @memberOf punycode\n\t\t * @type Object\n\t\t */\n\t\t'ucs2': {\n\t\t\t'decode': ucs2decode,\n\t\t\t'encode': ucs2encode\n\t\t},\n\t\t'decode': decode,\n\t\t'encode': encode,\n\t\t'toASCII': toASCII,\n\t\t'toUnicode': toUnicode\n\t};\n\n\t/** Expose `punycode` */\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine('punycode', function() {\n\t\t\treturn punycode;\n\t\t});\n\t} else if (freeExports && freeModule) {\n\t\tif (module.exports == freeExports) {\n\t\t\t// in Node.js, io.js, or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = punycode;\n\t\t} else {\n\t\t\t// in Narwhal or RingoJS v0.7.0-\n\t\t\tfor (key in punycode) {\n\t\t\t\tpunycode.hasOwnProperty(key) && (freeExports[key] = punycode[key]);\n\t\t\t}\n\t\t}\n\t} else {\n\t\t// in Rhino or a web browser\n\t\troot.punycode = punycode;\n\t}\n\n}(this));\n","module.exports = global[\"ColorThief\"] = require(\"-!./color-thief.min.js\");","/*!\r\n * Color Thief v2.0\r\n * by Lokesh Dhakar - http://www.lokeshdhakar.com\r\n *\r\n * Thanks\r\n * ------\r\n * Nick Rabinowitz - For creating quantize.js.\r\n * John Schulz - For clean up and optimization. @JFSIII\r\n * Nathan Spady - For adding drag and drop support to the demo page.\r\n *\r\n * License\r\n * -------\r\n * Copyright 2011, 2015 Lokesh Dhakar\r\n * Released under the MIT license\r\n * https://raw.githubusercontent.com/lokesh/color-thief/master/LICENSE\r\n *\r\n */\r\nvar CanvasImage=function(a){this.canvas=document.createElement(\"canvas\"),this.context=this.canvas.getContext(\"2d\"),document.body.appendChild(this.canvas),this.width=this.canvas.width=a.width,this.height=this.canvas.height=a.height,this.context.drawImage(a,0,0,this.width,this.height)};CanvasImage.prototype.clear=function(){this.context.clearRect(0,0,this.width,this.height)},CanvasImage.prototype.update=function(a){this.context.putImageData(a,0,0)},CanvasImage.prototype.getPixelCount=function(){return this.width*this.height},CanvasImage.prototype.getImageData=function(){return this.context.getImageData(0,0,this.width,this.height)},CanvasImage.prototype.removeCanvas=function(){this.canvas.parentNode.removeChild(this.canvas)};var ColorThief=function(){};/*!\r\n * quantize.js Copyright 2008 Nick Rabinowitz.\r\n * Licensed under the MIT license: http://www.opensource.org/licenses/mit-license.php\r\n */\r\n/*!\r\n * Block below copied from Protovis: http://mbostock.github.com/protovis/\r\n * Copyright 2010 Stanford Visualization Group\r\n * Licensed under the BSD License: http://www.opensource.org/licenses/bsd-license.php\r\n */\r\nif(ColorThief.prototype.getColor=function(a,b){var c=this.getPalette(a,5,b),d=c[0];return d},ColorThief.prototype.getPalette=function(a,b,c){\"undefined\"==typeof b&&(b=10),(\"undefined\"==typeof c||1>c)&&(c=10);for(var d,e,f,g,h,i=new CanvasImage(a),j=i.getImageData(),k=j.data,l=i.getPixelCount(),m=[],n=0;l>n;n+=c)d=4*n,e=k[d+0],f=k[d+1],g=k[d+2],h=k[d+3],h>=125&&(e>250&&f>250&&g>250||m.push([e,f,g]));var o=MMCQ.quantize(m,b),p=o?o.palette():null;return i.removeCanvas(),p},!pv)var pv={map:function(a,b){var c={};return b?a.map(function(a,d){return c.index=d,b.call(c,a)}):a.slice()},naturalOrder:function(a,b){return b>a?-1:a>b?1:0},sum:function(a,b){var c={};return a.reduce(b?function(a,d,e){return c.index=e,a+b.call(c,d)}:function(a,b){return a+b},0)},max:function(a,b){return Math.max.apply(null,b?pv.map(a,b):a)}};var MMCQ=function(){function a(a,b,c){return(a<<2*i)+(b<<i)+c}function b(a){function b(){c.sort(a),d=!0}var c=[],d=!1;return{push:function(a){c.push(a),d=!1},peek:function(a){return d||b(),void 0===a&&(a=c.length-1),c[a]},pop:function(){return d||b(),c.pop()},size:function(){return c.length},map:function(a){return c.map(a)},debug:function(){return d||b(),c}}}function c(a,b,c,d,e,f,g){var h=this;h.r1=a,h.r2=b,h.g1=c,h.g2=d,h.b1=e,h.b2=f,h.histo=g}function d(){this.vboxes=new b(function(a,b){return pv.naturalOrder(a.vbox.count()*a.vbox.volume(),b.vbox.count()*b.vbox.volume())})}function e(b){var c,d,e,f,g=1<<3*i,h=new Array(g);return b.forEach(function(b){d=b[0]>>j,e=b[1]>>j,f=b[2]>>j,c=a(d,e,f),h[c]=(h[c]||0)+1}),h}function f(a,b){var d,e,f,g=1e6,h=0,i=1e6,k=0,l=1e6,m=0;return a.forEach(function(a){d=a[0]>>j,e=a[1]>>j,f=a[2]>>j,g>d?g=d:d>h&&(h=d),i>e?i=e:e>k&&(k=e),l>f?l=f:f>m&&(m=f)}),new c(g,h,i,k,l,m,b)}function g(b,c){function d(a){var b,d,e,f,g,h=a+\"1\",j=a+\"2\",k=0;for(i=c[h];i<=c[j];i++)if(o[i]>n/2){for(e=c.copy(),f=c.copy(),b=i-c[h],d=c[j]-i,g=d>=b?Math.min(c[j]-1,~~(i+d/2)):Math.max(c[h],~~(i-1-b/2));!o[g];)g++;for(k=p[g];!k&&o[g-1];)k=p[--g];return e[j]=g,f[h]=e[j]+1,[e,f]}}if(c.count()){var e=c.r2-c.r1+1,f=c.g2-c.g1+1,g=c.b2-c.b1+1,h=pv.max([e,f,g]);if(1==c.count())return[c.copy()];var i,j,k,l,m,n=0,o=[],p=[];if(h==e)for(i=c.r1;i<=c.r2;i++){for(l=0,j=c.g1;j<=c.g2;j++)for(k=c.b1;k<=c.b2;k++)m=a(i,j,k),l+=b[m]||0;n+=l,o[i]=n}else if(h==f)for(i=c.g1;i<=c.g2;i++){for(l=0,j=c.r1;j<=c.r2;j++)for(k=c.b1;k<=c.b2;k++)m=a(j,i,k),l+=b[m]||0;n+=l,o[i]=n}else for(i=c.b1;i<=c.b2;i++){for(l=0,j=c.r1;j<=c.r2;j++)for(k=c.g1;k<=c.g2;k++)m=a(j,k,i),l+=b[m]||0;n+=l,o[i]=n}return o.forEach(function(a,b){p[b]=n-a}),d(h==e?\"r\":h==f?\"g\":\"b\")}}function h(a,c){function h(a,b){for(var c,d=1,e=0;k>e;)if(c=a.pop(),c.count()){var f=g(i,c),h=f[0],j=f[1];if(!h)return;if(a.push(h),j&&(a.push(j),d++),d>=b)return;if(e++>k)return}else a.push(c),e++}if(!a.length||2>c||c>256)return!1;var i=e(a),j=0;i.forEach(function(){j++});var m=f(a,i),n=new b(function(a,b){return pv.naturalOrder(a.count(),b.count())});n.push(m),h(n,l*c);for(var o=new b(function(a,b){return pv.naturalOrder(a.count()*a.volume(),b.count()*b.volume())});n.size();)o.push(n.pop());h(o,c-o.size());for(var p=new d;o.size();)p.push(o.pop());return p}var i=5,j=8-i,k=1e3,l=.75;return c.prototype={volume:function(a){var b=this;return(!b._volume||a)&&(b._volume=(b.r2-b.r1+1)*(b.g2-b.g1+1)*(b.b2-b.b1+1)),b._volume},count:function(b){var c=this,d=c.histo;if(!c._count_set||b){var e,f,g,h=0;for(e=c.r1;e<=c.r2;e++)for(f=c.g1;f<=c.g2;f++)for(g=c.b1;g<=c.b2;g++)index=a(e,f,g),h+=d[index]||0;c._count=h,c._count_set=!0}return c._count},copy:function(){var a=this;return new c(a.r1,a.r2,a.g1,a.g2,a.b1,a.b2,a.histo)},avg:function(b){var c=this,d=c.histo;if(!c._avg||b){var e,f,g,h,j,k=0,l=1<<8-i,m=0,n=0,o=0;for(f=c.r1;f<=c.r2;f++)for(g=c.g1;g<=c.g2;g++)for(h=c.b1;h<=c.b2;h++)j=a(f,g,h),e=d[j]||0,k+=e,m+=e*(f+.5)*l,n+=e*(g+.5)*l,o+=e*(h+.5)*l;k?c._avg=[~~(m/k),~~(n/k),~~(o/k)]:c._avg=[~~(l*(c.r1+c.r2+1)/2),~~(l*(c.g1+c.g2+1)/2),~~(l*(c.b1+c.b2+1)/2)]}return c._avg},contains:function(a){var b=this,c=a[0]>>j;return gval=a[1]>>j,bval=a[2]>>j,c>=b.r1&&c<=b.r2&&gval>=b.g1&&gval<=b.g2&&bval>=b.b1&&bval<=b.b2}},d.prototype={push:function(a){this.vboxes.push({vbox:a,color:a.avg()})},palette:function(){return this.vboxes.map(function(a){return a.color})},size:function(){return this.vboxes.size()},map:function(a){for(var b=this.vboxes,c=0;c<b.size();c++)if(b.peek(c).vbox.contains(a))return b.peek(c).color;return this.nearest(a)},nearest:function(a){for(var b,c,d,e=this.vboxes,f=0;f<e.size();f++)c=Math.sqrt(Math.pow(a[0]-e.peek(f).color[0],2)+Math.pow(a[1]-e.peek(f).color[1],2)+Math.pow(a[2]-e.peek(f).color[2],2)),(b>c||void 0===b)&&(b=c,d=e.peek(f).color);return d},forcebw:function(){var a=this.vboxes;a.sort(function(a,b){return pv.naturalOrder(pv.sum(a.color),pv.sum(b.color))});var b=a[0].color;b[0]<5&&b[1]<5&&b[2]<5&&(a[0].color=[0,0,0]);var c=a.length-1,d=a[c].color;d[0]>251&&d[1]>251&&d[2]>251&&(a[c].color=[255,255,255])}},{quantize:h}}();\r\nmodule.exports = ColorThief;\r\n","/**\n * The `History` class keeps track and manages a stack of routes that the user\n * has navigated to in their session.\n *\n * An item can be pushed to the top of the stack using the `push` method. An\n * item in the stack has a name and a URL. The name need not be unique; if it is\n * the same as the item before it, that will be overwritten with the new URL. In\n * this way, if a user visits a discussion, and then visits another discussion,\n * popping the history stack will still take them back to the discussion list\n * rather than the previous discussion.\n */\nexport default class History {\n constructor(defaultRoute) {\n /**\n * The stack of routes that have been navigated to.\n *\n * @type {Array}\n * @protected\n */\n this.stack = [];\n }\n\n /**\n * Get the item on the top of the stack.\n *\n * @return {Object}\n * @public\n */\n getCurrent() {\n return this.stack[this.stack.length - 1];\n }\n\n /**\n * Get the previous item on the stack.\n *\n * @return {Object}\n * @public\n */\n getPrevious() {\n return this.stack[this.stack.length - 2];\n }\n\n /**\n * Push an item to the top of the stack.\n *\n * @param {String} name The name of the route.\n * @param {String} title The title of the route.\n * @param {String} [url] The URL of the route. The current URL will be used if\n * not provided.\n * @public\n */\n push(name, title, url = m.route()) {\n // If we're pushing an item with the same name as second-to-top item in the\n // stack, we will assume that the user has clicked the 'back' button in\n // their browser. In this case, we don't want to push a new item, so we will\n // pop off the top item, and then the second-to-top item will be overwritten\n // below.\n const secondTop = this.stack[this.stack.length - 2];\n if (secondTop && secondTop.name === name) {\n this.stack.pop();\n }\n\n // If we're pushing an item with the same name as the top item in the stack,\n // then we'll overwrite it with the new URL.\n const top = this.getCurrent();\n if (top && top.name === name) {\n Object.assign(top, {url, title});\n } else {\n this.stack.push({name, url, title});\n }\n }\n\n /**\n * Check whether or not the history stack is able to be popped.\n *\n * @return {Boolean}\n * @public\n */\n canGoBack() {\n return this.stack.length > 1;\n }\n\n /**\n * Go back to the previous route in the history stack.\n *\n * @public\n */\n back() {\n this.stack.pop();\n\n m.route(this.getCurrent().url);\n }\n\n /**\n * Get the URL of the previous page.\n *\n * @public\n */\n backUrl() {\n const secondTop = this.stack[this.stack.length - 2];\n\n return secondTop.url;\n }\n\n /**\n * Go to the first route in the history stack.\n *\n * @public\n */\n home() {\n this.stack.splice(0);\n\n m.route('/');\n }\n}\n","/**\n * The `Pane` class manages the page's discussion list sidepane. The pane is a\n * part of the content view (DiscussionPage component), but its visibility is\n * determined by CSS classes applied to the outer page element. This class\n * manages the application of those CSS classes.\n */\nexport default class Pane {\n constructor(element) {\n /**\n * The localStorage key to store the pane's pinned state with.\n *\n * @type {String}\n * @protected\n */\n this.pinnedKey = 'panePinned';\n\n /**\n * The page element.\n *\n * @type {jQuery}\n * @protected\n */\n this.$element = $(element);\n\n /**\n * Whether or not the pane is currently pinned.\n *\n * @type {Boolean}\n * @protected\n */\n this.pinned = localStorage.getItem(this.pinnedKey) === 'true';\n\n /**\n * Whether or not the pane is currently exists.\n *\n * @type {Boolean}\n * @protected\n */\n this.active = false;\n\n /**\n * Whether or not the pane is currently showing, or is hidden off the edge\n * of the screen.\n *\n * @type {Boolean}\n * @protected\n */\n this.showing = false;\n\n this.render();\n }\n\n /**\n * Enable the pane.\n *\n * @public\n */\n enable() {\n this.active = true;\n this.render();\n }\n\n /**\n * Disable the pane.\n *\n * @public\n */\n disable() {\n this.active = false;\n this.showing = false;\n this.render();\n }\n\n /**\n * Show the pane.\n *\n * @public\n */\n show() {\n clearTimeout(this.hideTimeout);\n this.showing = true;\n this.render();\n }\n\n /**\n * Hide the pane.\n *\n * @public\n */\n hide() {\n this.showing = false;\n this.render();\n }\n\n /**\n * Begin a timeout to hide the pane, which can be cancelled by showing the\n * pane.\n *\n * @public\n */\n onmouseleave() {\n this.hideTimeout = setTimeout(this.hide.bind(this), 250);\n }\n\n /**\n * Toggle whether or not the pane is pinned.\n *\n * @public\n */\n togglePinned() {\n this.pinned = !this.pinned;\n\n localStorage.setItem(this.pinnedKey, this.pinned ? 'true' : 'false');\n\n this.render();\n }\n\n /**\n * Apply the appropriate CSS classes to the page element.\n *\n * @protected\n */\n render() {\n this.$element\n .toggleClass('panePinned', this.pinned)\n .toggleClass('hasPane', this.active)\n .toggleClass('paneShowing', this.showing);\n }\n}\n","/**\n * The `KeyboardNavigatable` class manages lists that can be navigated with the\n * keyboard, calling callbacks for each actions.\n *\n * This helper encapsulates the key binding logic, providing a simple fluent\n * API for use.\n */\nexport default class KeyboardNavigatable {\n constructor() {\n this.callbacks = {};\n\n // By default, always handle keyboard navigation.\n this.whenCallback = () => true;\n }\n\n /**\n * Provide a callback to be executed when navigating upwards.\n *\n * This will be triggered by the Up key.\n *\n * @public\n * @param {Function} callback\n * @return {KeyboardNavigatable}\n */\n onUp(callback) {\n this.callbacks[38] = e => {\n e.preventDefault();\n callback(e);\n };\n\n return this;\n }\n\n /**\n * Provide a callback to be executed when navigating downwards.\n *\n * This will be triggered by the Down key.\n *\n * @public\n * @param {Function} callback\n * @return {KeyboardNavigatable}\n */\n onDown(callback) {\n this.callbacks[40] = e => {\n e.preventDefault();\n callback(e);\n };\n\n return this;\n }\n\n /**\n * Provide a callback to be executed when the current item is selected..\n *\n * This will be triggered by the Return and Tab keys..\n *\n * @public\n * @param {Function} callback\n * @return {KeyboardNavigatable}\n */\n onSelect(callback) {\n this.callbacks[9] = this.callbacks[13] = e => {\n e.preventDefault();\n callback(e);\n };\n\n return this;\n }\n\n /**\n * Provide a callback to be executed when the navigation is canceled.\n *\n * This will be triggered by the Escape key.\n *\n * @public\n * @param {Function} callback\n * @return {KeyboardNavigatable}\n */\n onCancel(callback) {\n this.callbacks[27] = e => {\n e.stopPropagation();\n e.preventDefault();\n callback(e);\n }\n\n return this;\n }\n\n /**\n * Provide a callback to be executed when previous input is removed.\n *\n * This will be triggered by the Backspace key.\n *\n * @public\n * @param {Function} callback\n * @return {KeyboardNavigatable}\n */\n onRemove(callback) {\n this.callbacks[8] = e => {\n if (e.target.selectionStart === 0 && e.target.selectionEnd === 0) {\n callback(e);\n e.preventDefault();\n }\n };\n\n return this;\n }\n\n /**\n * Provide a callback that determines whether keyboard input should be handled.\n *\n * @public\n * @param {Function} callback\n * @return {KeyboardNavigatable}\n */\n when(callback) {\n this.whenCallback = callback;\n\n return this;\n }\n\n /**\n * Set up the navigation key bindings on the given jQuery element.\n *\n * @public\n * @param {jQuery} $element\n */\n bindTo($element) {\n // Handle navigation key events on the navigatable element.\n $element.on('keydown', this.navigate.bind(this));\n }\n\n /**\n * Interpret the given keyboard event as navigation commands.\n *\n * @public\n * @param {KeyboardEvent} event\n */\n navigate(event) {\n // This callback determines whether keyboard should be handled or ignored.\n if (!this.whenCallback()) return;\n\n const keyCallback = this.callbacks[event.which];\n if (keyCallback) {\n keyCallback(event);\n }\n }\n}\n","import highlight from '../../common/helpers/highlight';\nimport LinkButton from '../../common/components/LinkButton';\n\n/**\n * The `DiscussionsSearchSource` finds and displays discussion search results in\n * the search dropdown.\n *\n * @implements SearchSource\n */\nexport default class DiscussionsSearchSource {\n constructor() {\n this.results = {};\n }\n\n search(query) {\n query = query.toLowerCase();\n\n this.results[query] = [];\n\n const params = {\n filter: {q: query},\n page: {limit: 3},\n include: 'mostRelevantPost'\n };\n\n return app.store.find('discussions', params).then(results => this.results[query] = results);\n }\n\n view(query) {\n query = query.toLowerCase();\n\n const results = this.results[query] || [];\n\n return [\n <li className=\"Dropdown-header\">{app.translator.trans('core.forum.search.discussions_heading')}</li>,\n <li>\n {LinkButton.component({\n icon: 'fas fa-search',\n children: app.translator.trans('core.forum.search.all_discussions_button', {query}),\n href: app.route('index', {q: query})\n })}\n </li>,\n results.map(discussion => {\n const mostRelevantPost = discussion.mostRelevantPost();\n\n return (\n <li className=\"DiscussionSearchResult\" data-index={'discussions' + discussion.id()}>\n <a href={app.route.discussion(discussion, mostRelevantPost && mostRelevantPost.number())} config={m.route}>\n <div className=\"DiscussionSearchResult-title\">{highlight(discussion.title(), query)}</div>\n {mostRelevantPost ? <div className=\"DiscussionSearchResult-excerpt\">{highlight(mostRelevantPost.contentPlain(), query, 100)}</div> : ''}\n </a>\n </li>\n );\n })\n ];\n }\n}\n","import highlight from '../../common/helpers/highlight';\nimport avatar from '../../common/helpers/avatar';\nimport username from '../../common/helpers/username';\n\n/**\n * The `UsersSearchSource` finds and displays user search results in the search\n * dropdown.\n *\n * @implements SearchSource\n */\nexport default class UsersSearchResults {\n constructor() {\n this.results = {};\n }\n\n search(query) {\n return app.store.find('users', {\n filter: {q: query},\n page: {limit: 5}\n }).then(results => {\n this.results[query] = results;\n m.redraw();\n });\n }\n\n view(query) {\n query = query.toLowerCase();\n\n const results = (this.results[query] || [])\n .concat(app.store.all('users').filter(user => [user.username(), user.displayName()].some(value => value.toLowerCase().substr(0, query.length) === query)))\n .filter((e, i, arr) => arr.lastIndexOf(e) === i)\n .sort((a, b) => a.displayName().localeCompare(b.displayName()));\n\n if (!results.length) return '';\n\n return [\n <li className=\"Dropdown-header\">{app.translator.trans('core.forum.search.users_heading')}</li>,\n results.map(user => {\n const name = username(user);\n name.children[0] = highlight(name.children[0], query);\n\n return (\n <li className=\"UserSearchResult\" data-index={'users' + user.id()}>\n <a href={app.route.user(user)} config={m.route}>\n {avatar(user)}\n {name}\n </a>\n </li>\n );\n })\n ];\n }\n}\n","import Component from '../../common/Component';\nimport LoadingIndicator from '../../common/components/LoadingIndicator';\nimport ItemList from '../../common/utils/ItemList';\nimport classList from '../../common/utils/classList';\nimport extractText from '../../common/utils/extractText';\nimport KeyboardNavigatable from '../utils/KeyboardNavigatable';\nimport icon from '../../common/helpers/icon';\nimport DiscussionsSearchSource from './DiscussionsSearchSource';\nimport UsersSearchSource from './UsersSearchSource';\n\n/**\n * The `Search` component displays a menu of as-you-type results from a variety\n * of sources.\n *\n * The search box will be 'activated' if the app's current controller implements\n * a `searching` method that returns a truthy value. If this is the case, an 'x'\n * button will be shown next to the search field, and clicking it will call the\n * `clearSearch` method on the controller.\n */\nexport default class Search extends Component {\n init() {\n /**\n * The value of the search input.\n *\n * @type {Function}\n */\n this.value = m.prop('');\n\n /**\n * Whether or not the search input has focus.\n *\n * @type {Boolean}\n */\n this.hasFocus = false;\n\n /**\n * An array of SearchSources.\n *\n * @type {SearchSource[]}\n */\n this.sources = null;\n\n /**\n * The number of sources that are still loading results.\n *\n * @type {Integer}\n */\n this.loadingSources = 0;\n\n /**\n * A list of queries that have been searched for.\n *\n * @type {Array}\n */\n this.searched = [];\n\n /**\n * The index of the currently-selected <li> in the results list. This can be\n * a unique string (to account for the fact that an item's position may jump\n * around as new results load), but otherwise it will be numeric (the\n * sequential position within the list).\n *\n * @type {String|Integer}\n */\n this.index = 0;\n }\n\n view() {\n const currentSearch = this.getCurrentSearch();\n\n // Initialize search input value in the view rather than the constructor so\n // that we have access to app.current.\n if (typeof this.value() === 'undefined') {\n this.value(currentSearch || '');\n }\n\n // Initialize search sources in the view rather than the constructor so\n // that we have access to app.forum.\n if (!this.sources) {\n this.sources = this.sourceItems().toArray();\n }\n\n // Hide the search view if no sources were loaded\n if (!this.sources.length) return <div></div>;\n\n return (\n <div className={'Search ' + classList({\n open: this.value() && this.hasFocus,\n focused: this.hasFocus,\n active: !!currentSearch,\n loading: !!this.loadingSources\n })}>\n <div className=\"Search-input\">\n <input className=\"FormControl\"\n type=\"search\"\n placeholder={extractText(app.translator.trans('core.forum.header.search_placeholder'))}\n value={this.value()}\n oninput={m.withAttr('value', this.value)}\n onfocus={() => this.hasFocus = true}\n onblur={() => this.hasFocus = false}/>\n {this.loadingSources\n ? LoadingIndicator.component({size: 'tiny', className: 'Button Button--icon Button--link'})\n : currentSearch\n ? <button className=\"Search-clear Button Button--icon Button--link\" onclick={this.clear.bind(this)}>{icon('fas fa-times-circle')}</button>\n : ''}\n </div>\n <ul className=\"Dropdown-menu Search-results\">\n {this.value() && this.hasFocus\n ? this.sources.map(source => source.view(this.value()))\n : ''}\n </ul>\n </div>\n );\n }\n\n config(isInitialized) {\n // Highlight the item that is currently selected.\n this.setIndex(this.getCurrentNumericIndex());\n\n if (isInitialized) return;\n\n const search = this;\n\n this.$('.Search-results')\n .on('mousedown', e => e.preventDefault())\n .on('click', () => this.$('input').blur())\n\n // Whenever the mouse is hovered over a search result, highlight it.\n .on('mouseenter', '> li:not(.Dropdown-header)', function() {\n search.setIndex(\n search.selectableItems().index(this)\n );\n });\n\n const $input = this.$('input');\n\n this.navigator = new KeyboardNavigatable();\n this.navigator\n .onUp(() => this.setIndex(this.getCurrentNumericIndex() - 1, true))\n .onDown(() => this.setIndex(this.getCurrentNumericIndex() + 1, true))\n .onSelect(this.selectResult.bind(this))\n .onCancel(this.clear.bind(this))\n .bindTo($input);\n\n // Handle input key events on the search input, triggering results to load.\n $input\n .on('input focus', function() {\n const query = this.value.toLowerCase();\n\n if (!query) return;\n\n clearTimeout(search.searchTimeout);\n search.searchTimeout = setTimeout(() => {\n if (search.searched.indexOf(query) !== -1) return;\n\n if (query.length >= 3) {\n search.sources.map(source => {\n if (!source.search) return;\n\n search.loadingSources++;\n\n source.search(query).then(() => {\n search.loadingSources--;\n m.redraw();\n });\n });\n }\n\n search.searched.push(query);\n m.redraw();\n }, 250);\n })\n\n .on('focus', function() {\n $(this).one('mouseup', e => e.preventDefault()).select();\n });\n }\n\n /**\n * Get the active search in the app's current controller.\n *\n * @return {String}\n */\n getCurrentSearch() {\n return app.current && typeof app.current.searching === 'function' && app.current.searching();\n }\n\n /**\n * Navigate to the currently selected search result and close the list.\n */\n selectResult() {\n if (this.value()) {\n m.route(this.getItem(this.index).find('a').attr('href'));\n } else {\n this.clear();\n }\n\n this.$('input').blur();\n }\n\n /**\n * Clear the search input and the current controller's active search.\n */\n clear() {\n this.value('');\n\n if (this.getCurrentSearch()) {\n app.current.clearSearch();\n } else {\n m.redraw();\n }\n }\n\n /**\n * Build an item list of SearchSources.\n *\n * @return {ItemList}\n */\n sourceItems() {\n const items = new ItemList();\n\n if (app.forum.attribute('canViewDiscussions')) items.add('discussions', new DiscussionsSearchSource());\n if (app.forum.attribute('canViewUserList')) items.add('users', new UsersSearchSource());\n\n return items;\n }\n\n /**\n * Get all of the search result items that are selectable.\n *\n * @return {jQuery}\n */\n selectableItems() {\n return this.$('.Search-results > li:not(.Dropdown-header)');\n }\n\n /**\n * Get the position of the currently selected search result item.\n *\n * @return {Integer}\n */\n getCurrentNumericIndex() {\n return this.selectableItems().index(\n this.getItem(this.index)\n );\n }\n\n /**\n * Get the <li> in the search results with the given index (numeric or named).\n *\n * @param {String} index\n * @return {DOMElement}\n */\n getItem(index) {\n const $items = this.selectableItems();\n let $item = $items.filter(`[data-index=\"${index}\"]`);\n\n if (!$item.length) {\n $item = $items.eq(index);\n }\n\n return $item;\n }\n\n /**\n * Set the currently-selected search result item to the one with the given\n * index.\n *\n * @param {Integer} index\n * @param {Boolean} scrollToItem Whether or not to scroll the dropdown so that\n * the item is in view.\n */\n setIndex(index, scrollToItem) {\n const $items = this.selectableItems();\n const $dropdown = $items.parent();\n\n let fixedIndex = index;\n if (index < 0) {\n fixedIndex = $items.length - 1;\n } else if (index >= $items.length) {\n fixedIndex = 0;\n }\n\n const $item = $items.removeClass('active').eq(fixedIndex).addClass('active');\n\n this.index = $item.attr('data-index') || fixedIndex;\n\n if (scrollToItem) {\n const dropdownScroll = $dropdown.scrollTop();\n const dropdownTop = $dropdown.offset().top;\n const dropdownBottom = dropdownTop + $dropdown.outerHeight();\n const itemTop = $item.offset().top;\n const itemBottom = itemTop + $item.outerHeight();\n\n let scrollTop;\n if (itemTop < dropdownTop) {\n scrollTop = dropdownScroll - dropdownTop + itemTop - parseInt($dropdown.css('padding-top'), 10);\n } else if (itemBottom > dropdownBottom) {\n scrollTop = dropdownScroll - dropdownBottom + itemBottom + parseInt($dropdown.css('padding-bottom'), 10);\n }\n\n if (typeof scrollTop !== 'undefined') {\n $dropdown.stop(true).animate({scrollTop}, 100);\n }\n }\n }\n}\n","import Component from '../../common/Component';\nimport ItemList from '../../common/utils/ItemList';\nimport listItems from '../../common/helpers/listItems';\nimport Button from '../../common/components/Button';\n\n/**\n * The `TextEditor` component displays a textarea with controls, including a\n * submit button.\n *\n * ### Props\n *\n * - `submitLabel`\n * - `value`\n * - `placeholder`\n * - `disabled`\n */\nexport default class TextEditor extends Component {\n init() {\n /**\n * The value of the textarea.\n *\n * @type {String}\n */\n this.value = m.prop(this.props.value || '');\n }\n\n view() {\n return (\n <div className=\"TextEditor\">\n <textarea className=\"FormControl Composer-flexible\"\n config={this.configTextarea.bind(this)}\n oninput={m.withAttr('value', this.oninput.bind(this))}\n placeholder={this.props.placeholder || ''}\n disabled={!!this.props.disabled}\n value={this.value()}/>\n\n <ul className=\"TextEditor-controls Composer-footer\">\n {listItems(this.controlItems().toArray())}\n </ul>\n </div>\n );\n }\n\n /**\n * Configure the textarea element.\n *\n * @param {DOMElement} element\n * @param {Boolean} isInitialized\n */\n configTextarea(element, isInitialized) {\n if (isInitialized) return;\n\n const handler = () => {\n this.onsubmit();\n m.redraw();\n };\n\n $(element).bind('keydown', 'meta+return', handler);\n $(element).bind('keydown', 'ctrl+return', handler);\n }\n\n /**\n * Build an item list for the text editor controls.\n *\n * @return {ItemList}\n */\n controlItems() {\n const items = new ItemList();\n\n items.add('submit',\n Button.component({\n children: this.props.submitLabel,\n icon: 'fas fa-check',\n className: 'Button Button--primary',\n itemClassName: 'App-primaryControl',\n onclick: this.onsubmit.bind(this)\n })\n );\n\n if (this.props.preview) {\n items.add('preview',\n Button.component({\n icon: 'fas fa-eye',\n className: 'Button Button--icon',\n onclick: this.props.preview,\n title: app.translator.trans('core.forum.composer.preview_tooltip')\n })\n );\n }\n\n return items;\n }\n\n /**\n * Set the value of the text editor.\n *\n * @param {String} value\n */\n setValue(value) {\n this.$('textarea').val(value).trigger('input');\n }\n\n /**\n * Set the selected range of the textarea.\n *\n * @param {Integer} start\n * @param {Integer} end\n */\n setSelectionRange(start, end) {\n const $textarea = this.$('textarea');\n\n $textarea[0].setSelectionRange(start, end);\n $textarea.focus();\n }\n\n /**\n * Get the selected range of the textarea.\n *\n * @return {Array}\n */\n getSelectionRange() {\n const $textarea = this.$('textarea');\n\n return [$textarea[0].selectionStart, $textarea[0].selectionEnd];\n }\n\n /**\n * Insert content into the textarea at the position of the cursor.\n *\n * @param {String} insert\n */\n insertAtCursor(insert) {\n const textarea = this.$('textarea')[0];\n const value = this.value();\n const index = textarea ? textarea.selectionStart : value.length;\n\n this.setValue(value.slice(0, index) + insert + value.slice(index));\n\n // Move the textarea cursor to the end of the content we just inserted.\n if (textarea) {\n const pos = index + insert.length;\n this.setSelectionRange(pos, pos);\n }\n }\n\n /**\n * Handle input into the textarea.\n *\n * @param {String} value\n */\n oninput(value) {\n this.value(value);\n\n this.props.onchange(this.value());\n\n m.redraw.strategy('none');\n }\n\n /**\n * Handle the submit button being clicked.\n */\n onsubmit() {\n this.props.onsubmit(this.value());\n }\n}\n","import Component from '../../common/Component';\nimport LoadingIndicator from '../../common/components/LoadingIndicator';\nimport TextEditor from './TextEditor';\nimport avatar from '../../common/helpers/avatar';\nimport listItems from '../../common/helpers/listItems';\nimport ItemList from '../../common/utils/ItemList';\n\n/**\n * The `ComposerBody` component handles the body, or the content, of the\n * composer. Subclasses should implement the `onsubmit` method and override\n * `headerTimes`.\n *\n * ### Props\n *\n * - `originalContent`\n * - `submitLabel`\n * - `placeholder`\n * - `user`\n * - `confirmExit`\n * - `disabled`\n *\n * @abstract\n */\nexport default class ComposerBody extends Component {\n init() {\n /**\n * Whether or not the component is loading.\n *\n * @type {Boolean}\n */\n this.loading = false;\n\n /**\n * The content of the text editor.\n *\n * @type {Function}\n */\n this.content = m.prop(this.props.originalContent);\n\n /**\n * The text editor component instance.\n *\n * @type {TextEditor}\n */\n this.editor = new TextEditor({\n submitLabel: this.props.submitLabel,\n placeholder: this.props.placeholder,\n onchange: this.content,\n onsubmit: this.onsubmit.bind(this),\n value: this.content()\n });\n }\n\n view() {\n // If the component is loading, we should disable the text editor.\n this.editor.props.disabled = this.loading;\n\n return (\n <div className={'ComposerBody ' + (this.props.className || '')}>\n {avatar(this.props.user, {className: 'ComposerBody-avatar'})}\n <div className=\"ComposerBody-content\">\n <ul className=\"ComposerBody-header\">{listItems(this.headerItems().toArray())}</ul>\n <div className=\"ComposerBody-editor\">{this.editor.render()}</div>\n </div>\n {LoadingIndicator.component({className: 'ComposerBody-loading' + (this.loading ? ' active' : '')})}\n </div>\n );\n }\n\n /**\n * Draw focus to the text editor.\n */\n focus() {\n this.$(':input:enabled:visible:first').focus();\n }\n\n /**\n * Check if there is any unsaved data – if there is, return a confirmation\n * message to prompt the user with.\n *\n * @return {String}\n */\n preventExit() {\n const content = this.content();\n\n return content && content !== this.props.originalContent && this.props.confirmExit;\n }\n\n /**\n * Build an item list for the composer's header.\n *\n * @return {ItemList}\n */\n headerItems() {\n return new ItemList();\n }\n\n /**\n * Handle the submit event of the text editor.\n *\n * @abstract\n */\n onsubmit() {\n }\n\n /**\n * Stop loading.\n */\n loaded() {\n this.loading = false;\n m.redraw();\n }\n}\n","import ComposerBody from './ComposerBody';\nimport Alert from '../../common/components/Alert';\nimport Button from '../../common/components/Button';\nimport icon from '../../common/helpers/icon';\nimport extractText from '../../common/utils/extractText';\n\nfunction minimizeComposerIfFullScreen(e) {\n if (app.composer.isFullScreen()) {\n app.composer.minimize();\n e.stopPropagation();\n }\n}\n\n/**\n * The `ReplyComposer` component displays the composer content for replying to a\n * discussion.\n *\n * ### Props\n *\n * - All of the props of ComposerBody\n * - `discussion`\n */\nexport default class ReplyComposer extends ComposerBody {\n init() {\n super.init();\n\n this.editor.props.preview = e => {\n minimizeComposerIfFullScreen(e);\n\n m.route(app.route.discussion(this.props.discussion, 'reply'));\n };\n }\n\n static initProps(props) {\n super.initProps(props);\n\n props.placeholder = props.placeholder || extractText(app.translator.trans('core.forum.composer_reply.body_placeholder'));\n props.submitLabel = props.submitLabel || app.translator.trans('core.forum.composer_reply.submit_button');\n props.confirmExit = props.confirmExit || extractText(app.translator.trans('core.forum.composer_reply.discard_confirmation'));\n }\n\n headerItems() {\n const items = super.headerItems();\n const discussion = this.props.discussion;\n\n const routeAndMinimize = function(element, isInitialized) {\n if (isInitialized) return;\n $(element).on('click', minimizeComposerIfFullScreen);\n m.route.apply(this, arguments);\n };\n\n items.add('title', (\n <h3>\n {icon('fas fa-reply')} {' '}\n <a href={app.route.discussion(discussion)} config={routeAndMinimize}>{discussion.title()}</a>\n </h3>\n ));\n\n return items;\n }\n\n /**\n * Get the data to submit to the server when the reply is saved.\n *\n * @return {Object}\n */\n data() {\n return {\n content: this.content(),\n relationships: {discussion: this.props.discussion}\n };\n }\n\n onsubmit() {\n const discussion = this.props.discussion;\n\n this.loading = true;\n m.redraw();\n\n const data = this.data();\n\n app.store.createRecord('posts').save(data).then(\n post => {\n // If we're currently viewing the discussion which this reply was made\n // in, then we can update the post stream and scroll to the post.\n if (app.viewingDiscussion(discussion)) {\n app.current.stream.update().then(() => app.current.stream.goToNumber(post.number()));\n\n } else {\n // Otherwise, we'll create an alert message to inform the user that\n // their reply has been posted, containing a button which will\n // transition to their new post when clicked.\n let alert;\n const viewButton = Button.component({\n className: 'Button Button--link',\n children: app.translator.trans('core.forum.composer_reply.view_button'),\n onclick: () => {\n m.route(app.route.post(post));\n app.alerts.dismiss(alert);\n }\n });\n app.alerts.show(\n alert = new Alert({\n type: 'success',\n message: app.translator.trans('core.forum.composer_reply.posted_message'),\n controls: [viewButton]\n })\n );\n }\n\n app.composer.hide();\n },\n this.loaded.bind(this)\n );\n }\n}\n","import Component from '../../common/Component';\n\n/**\n * The `Page` component\n *\n * @abstract\n */\nexport default class Page extends Component {\n init() {\n app.previous = app.current;\n app.current = this;\n\n app.drawer.hide();\n app.modal.close();\n\n /**\n * A class name to apply to the body while the route is active.\n *\n * @type {String}\n */\n this.bodyClass = '';\n }\n\n config(isInitialized, context) {\n if (isInitialized) return;\n\n if (this.bodyClass) {\n $('#app').addClass(this.bodyClass);\n\n context.onunload = () => $('#app').removeClass(this.bodyClass);\n }\n }\n}\n","import Component from '../../common/Component';\nimport ItemList from '../../common/utils/ItemList';\nimport listItems from '../../common/helpers/listItems';\n\n/**\n * The `DiscussionHero` component displays the hero on a discussion page.\n *\n * ### Props\n *\n * - `discussion`\n */\nexport default class DiscussionHero extends Component {\n view() {\n return (\n <header className=\"Hero DiscussionHero\">\n <div className=\"container\">\n <ul className=\"DiscussionHero-items\">{listItems(this.items().toArray())}</ul>\n </div>\n </header>\n );\n }\n\n /**\n * Build an item list for the contents of the discussion hero.\n *\n * @return {ItemList}\n */\n items() {\n const items = new ItemList();\n const discussion = this.props.discussion;\n const badges = discussion.badges().toArray();\n\n if (badges.length) {\n items.add('badges', <ul className=\"DiscussionHero-badges badges\">{listItems(badges)}</ul>, 10);\n }\n\n items.add('title', <h2 className=\"DiscussionHero-title\">{discussion.title()}</h2>);\n\n return items;\n }\n}\n","import Component from '../../common/Component';\nimport avatar from '../../common/helpers/avatar';\n\n/**\n * The `LoadingPost` component shows a placeholder that looks like a post,\n * indicating that the post is loading.\n */\nexport default class LoadingPost extends Component {\n view() {\n return (\n <div className=\"Post CommentPost LoadingPost\">\n <header className=\"Post-header\">\n {avatar(null, {className: 'PostUser-avatar'})}\n <div className=\"fakeText\"/>\n </header>\n\n <div className=\"Post-body\">\n <div className=\"fakeText\"/>\n <div className=\"fakeText\"/>\n <div className=\"fakeText\"/>\n </div>\n </div>\n );\n }\n}\n","import Modal from '../../common/components/Modal';\nimport Alert from '../../common/components/Alert';\nimport Button from '../../common/components/Button';\nimport extractText from '../../common/utils/extractText';\n\n/**\n * The `ForgotPasswordModal` component displays a modal which allows the user to\n * enter their email address and request a link to reset their password.\n *\n * ### Props\n *\n * - `email`\n */\nexport default class ForgotPasswordModal extends Modal {\n init() {\n super.init();\n\n /**\n * The value of the email input.\n *\n * @type {Function}\n */\n this.email = m.prop(this.props.email || '');\n\n /**\n * Whether or not the password reset email was sent successfully.\n *\n * @type {Boolean}\n */\n this.success = false;\n }\n\n className() {\n return 'ForgotPasswordModal Modal--small';\n }\n\n title() {\n return app.translator.trans('core.forum.forgot_password.title');\n }\n\n content() {\n if (this.success) {\n return (\n <div className=\"Modal-body\">\n <div className=\"Form Form--centered\">\n <p className=\"helpText\">{app.translator.trans('core.forum.forgot_password.email_sent_message')}</p>\n <div className=\"Form-group\">\n <Button className=\"Button Button--primary Button--block\" onclick={this.hide.bind(this)}>\n {app.translator.trans('core.forum.forgot_password.dismiss_button')}\n </Button>\n </div>\n </div>\n </div>\n );\n }\n\n return (\n <div className=\"Modal-body\">\n <div className=\"Form Form--centered\">\n <p className=\"helpText\">{app.translator.trans('core.forum.forgot_password.text')}</p>\n <div className=\"Form-group\">\n <input className=\"FormControl\" name=\"email\" type=\"email\" placeholder={extractText(app.translator.trans('core.forum.forgot_password.email_placeholder'))}\n value={this.email()}\n onchange={m.withAttr('value', this.email)}\n disabled={this.loading} />\n </div>\n <div className=\"Form-group\">\n {Button.component({\n className: 'Button Button--primary Button--block',\n type: 'submit',\n loading: this.loading,\n children: app.translator.trans('core.forum.forgot_password.submit_button')\n })}\n </div>\n </div>\n </div>\n );\n }\n\n onsubmit(e) {\n e.preventDefault();\n\n this.loading = true;\n\n app.request({\n method: 'POST',\n url: app.forum.attribute('apiUrl') + '/forgot',\n data: {email: this.email()},\n errorHandler: this.onerror.bind(this)\n })\n .then(() => {\n this.success = true;\n this.alert = null;\n })\n .catch(() => {})\n .then(this.loaded.bind(this));\n }\n\n onerror(error) {\n if (error.status === 404) {\n error.alert.props.children = app.translator.trans('core.forum.forgot_password.not_found_message');\n }\n\n super.onerror(error);\n }\n}\n","import Component from '../../common/Component';\nimport ItemList from '../../common/utils/ItemList';\n\n/**\n * The `LogInButtons` component displays a collection of social login buttons.\n */\nexport default class LogInButtons extends Component {\n view() {\n return (\n <div className=\"LogInButtons\">\n {this.items().toArray()}\n </div>\n );\n }\n\n /**\n * Build a list of LogInButton components.\n *\n * @return {ItemList}\n * @public\n */\n items() {\n return new ItemList();\n }\n}\n","import Modal from '../../common/components/Modal';\nimport LogInModal from './LogInModal';\nimport Button from '../../common/components/Button';\nimport LogInButtons from './LogInButtons';\nimport extractText from '../../common/utils/extractText';\nimport ItemList from '../../common/utils/ItemList';\n\n/**\n * The `SignUpModal` component displays a modal dialog with a singup form.\n *\n * ### Props\n *\n * - `username`\n * - `email`\n * - `password`\n * - `token` An email token to sign up with.\n */\nexport default class SignUpModal extends Modal {\n init() {\n super.init();\n\n /**\n * The value of the username input.\n *\n * @type {Function}\n */\n this.username = m.prop(this.props.username || '');\n\n /**\n * The value of the email input.\n *\n * @type {Function}\n */\n this.email = m.prop(this.props.email || '');\n\n /**\n * The value of the password input.\n *\n * @type {Function}\n */\n this.password = m.prop(this.props.password || '');\n }\n\n className() {\n return 'Modal--small SignUpModal' + (this.welcomeUser ? ' SignUpModal--success' : '');\n }\n\n title() {\n return app.translator.trans('core.forum.sign_up.title');\n }\n\n content() {\n return [\n <div className=\"Modal-body\">\n {this.body()}\n </div>,\n <div className=\"Modal-footer\">\n {this.footer()}\n </div>\n ];\n }\n\n isProvided(field) {\n return this.props.identificationFields && this.props.identificationFields.indexOf(field) !== -1;\n }\n\n body() {\n return [\n this.props.token ? '' : <LogInButtons/>,\n\n <div className=\"Form Form--centered\">\n {this.fields().toArray()}\n </div>\n ];\n }\n\n fields() {\n const items = new ItemList();\n\n items.add('username', <div className=\"Form-group\">\n <input className=\"FormControl\" name=\"username\" type=\"text\" placeholder={extractText(app.translator.trans('core.forum.sign_up.username_placeholder'))}\n value={this.username()}\n onchange={m.withAttr('value', this.username)}\n disabled={this.loading || this.isProvided('username')} />\n </div>, 30);\n\n items.add('email', <div className=\"Form-group\">\n <input className=\"FormControl\" name=\"email\" type=\"email\" placeholder={extractText(app.translator.trans('core.forum.sign_up.email_placeholder'))}\n value={this.email()}\n onchange={m.withAttr('value', this.email)}\n disabled={this.loading || this.isProvided('email')} />\n </div>, 20);\n\n if (!this.props.token) {\n items.add('password', <div className=\"Form-group\">\n <input className=\"FormControl\" name=\"password\" type=\"password\" placeholder={extractText(app.translator.trans('core.forum.sign_up.password_placeholder'))}\n value={this.password()}\n onchange={m.withAttr('value', this.password)}\n disabled={this.loading} />\n </div>, 10);\n }\n\n items.add('submit', <div className=\"Form-group\">\n <Button\n className=\"Button Button--primary Button--block\"\n type=\"submit\"\n loading={this.loading}>\n {app.translator.trans('core.forum.sign_up.submit_button')}\n </Button>\n </div>, -10);\n\n return items;\n }\n\n footer() {\n return [\n <p className=\"SignUpModal-logIn\">\n {app.translator.trans('core.forum.sign_up.log_in_text', {a: <a onclick={this.logIn.bind(this)}/>})}\n </p>\n ];\n }\n\n /**\n * Open the log in modal, prefilling it with an email/username/password if\n * the user has entered one.\n *\n * @public\n */\n logIn() {\n const props = {\n identification: this.email() || this.username(),\n password: this.password()\n };\n\n app.modal.show(new LogInModal(props));\n }\n\n onready() {\n if (this.props.username && !this.props.email) {\n this.$('[name=email]').select();\n } else {\n this.$('[name=username]').select();\n }\n }\n\n onsubmit(e) {\n e.preventDefault();\n\n this.loading = true;\n\n const data = this.submitData();\n\n app.request({\n url: app.forum.attribute('baseUrl') + '/register',\n method: 'POST',\n data,\n errorHandler: this.onerror.bind(this)\n }).then(\n () => window.location.reload(),\n this.loaded.bind(this)\n );\n }\n\n /**\n * Get the data that should be submitted in the sign-up request.\n *\n * @return {Object}\n * @public\n */\n submitData() {\n const data = {\n username: this.username(),\n email: this.email()\n };\n\n if (this.props.token) {\n data.token = this.props.token;\n } else {\n data.password = this.password();\n }\n\n if (this.props.avatarUrl) {\n data.avatarUrl = this.props.avatarUrl;\n }\n\n return data;\n }\n}\n","import Modal from '../../common/components/Modal';\nimport ForgotPasswordModal from './ForgotPasswordModal';\nimport SignUpModal from './SignUpModal';\nimport Button from '../../common/components/Button';\nimport LogInButtons from './LogInButtons';\nimport extractText from '../../common/utils/extractText';\nimport ItemList from '../../common/utils/ItemList';\n\n/**\n * The `LogInModal` component displays a modal dialog with a login form.\n *\n * ### Props\n *\n * - `identification`\n * - `password`\n */\nexport default class LogInModal extends Modal {\n init() {\n super.init();\n\n /**\n * The value of the identification input.\n *\n * @type {Function}\n */\n this.identification = m.prop(this.props.identification || '');\n\n /**\n * The value of the password input.\n *\n * @type {Function}\n */\n this.password = m.prop(this.props.password || '');\n\n /**\n * The value of the remember me input.\n *\n * @type {Function}\n */\n this.remember = m.prop(!!this.props.remember);\n }\n\n className() {\n return 'LogInModal Modal--small';\n }\n\n title() {\n return app.translator.trans('core.forum.log_in.title');\n }\n\n content() {\n return [\n <div className=\"Modal-body\">\n {this.body()}\n </div>,\n <div className=\"Modal-footer\">\n {this.footer()}\n </div>\n ];\n }\n\n body() {\n return [\n <LogInButtons/>,\n\n <div className=\"Form Form--centered\">\n {this.fields().toArray()}\n </div>\n ];\n }\n\n fields() {\n const items = new ItemList();\n\n items.add('identification', <div className=\"Form-group\">\n <input className=\"FormControl\" name=\"identification\" type=\"text\" placeholder={extractText(app.translator.trans('core.forum.log_in.username_or_email_placeholder'))}\n bidi={this.identification}\n disabled={this.loading} />\n </div>, 30);\n\n items.add('password', <div className=\"Form-group\">\n <input className=\"FormControl\" name=\"password\" type=\"password\" placeholder={extractText(app.translator.trans('core.forum.log_in.password_placeholder'))}\n bidi={this.password}\n disabled={this.loading} />\n </div>, 20);\n\n items.add('remember', <div className=\"Form-group\">\n <div>\n <label className=\"checkbox\">\n <input type=\"checkbox\" bidi={this.remember} disabled={this.loading} />\n {app.translator.trans('core.forum.log_in.remember_me_label')}\n </label>\n </div>\n </div>, 10);\n\n items.add('submit', <div className=\"Form-group\">\n {Button.component({\n className: 'Button Button--primary Button--block',\n type: 'submit',\n loading: this.loading,\n children: app.translator.trans('core.forum.log_in.submit_button')\n })}\n </div>, -10);\n\n return items;\n }\n\n footer() {\n return [\n <p className=\"LogInModal-forgotPassword\">\n <a onclick={this.forgotPassword.bind(this)}>{app.translator.trans('core.forum.log_in.forgot_password_link')}</a>\n </p>,\n\n app.forum.attribute('allowSignUp') ? (\n <p className=\"LogInModal-signUp\">\n {app.translator.trans('core.forum.log_in.sign_up_text', {a: <a onclick={this.signUp.bind(this)}/>})}\n </p>\n ) : ''\n ];\n }\n\n /**\n * Open the forgot password modal, prefilling it with an email if the user has\n * entered one.\n *\n * @public\n */\n forgotPassword() {\n const email = this.identification();\n const props = email.indexOf('@') !== -1 ? {email} : undefined;\n\n app.modal.show(new ForgotPasswordModal(props));\n }\n\n /**\n * Open the sign up modal, prefilling it with an email/username/password if\n * the user has entered one.\n *\n * @public\n */\n signUp() {\n const props = {password: this.password()};\n const identification = this.identification();\n props[identification.indexOf('@') !== -1 ? 'email' : 'username'] = identification;\n\n app.modal.show(new SignUpModal(props));\n }\n\n onready() {\n this.$('[name=' + (this.identification() ? 'password' : 'identification') + ']').select();\n }\n\n onsubmit(e) {\n e.preventDefault();\n\n this.loading = true;\n\n const identification = this.identification();\n const password = this.password();\n const remember = this.remember();\n\n app.session.login({identification, password, remember}, {errorHandler: this.onerror.bind(this)})\n .then(\n () => window.location.reload(),\n this.loaded.bind(this)\n );\n }\n\n onerror(error) {\n if (error.status === 401) {\n error.alert.props.children = app.translator.trans('core.forum.log_in.invalid_login_message');\n }\n\n super.onerror(error);\n }\n}\n","import Modal from '../../common/components/Modal';\nimport Button from '../../common/components/Button';\n\n/**\n * The 'RenameDiscussionModal' displays a modal dialog with an input to rename a discussion\n */\nexport default class RenameDiscussionModal extends Modal {\n init() {\n super.init();\n\n this.discussion = this.props.discussion;\n this.currentTitle = this.props.currentTitle;\n this.newTitle = m.prop(this.currentTitle);\n }\n\n className() {\n return 'RenameDiscussionModal Modal--small';\n }\n\n title() {\n return app.translator.trans('core.forum.rename_discussion.title');\n }\n\n content() {\n return (\n <div className=\"Modal-body\">\n <div className=\"Form Form--centered\">\n <div className=\"Form-group\">\n <input className=\"FormControl\" bidi={this.newTitle} type=\"text\" />\n </div>\n <div className=\"Form-group\">\n {Button.component({\n className: 'Button Button--primary Button--block',\n type: 'submit',\n loading: this.loading,\n children: app.translator.trans('core.forum.rename_discussion.submit_button')\n })}\n </div>\n </div>\n </div>\n )\n }\n\n onsubmit(e) {\n e.preventDefault();\n\n this.loading = true;\n\n const title = this.newTitle;\n const currentTitle = this.currentTitle;\n\n // If the title is different to what it was before, then save it. After the\n // save has completed, update the post stream as there will be a new post\n // indicating that the discussion was renamed.\n if (title && title !== currentTitle) {\n return this.discussion.save({title}).then(() => {\n if (app.viewingDiscussion(this.discussion)) {\n app.current.stream.update();\n }\n m.redraw();\n this.hide();\n }).catch(() => {\n this.loading = false;\n m.redraw();\n });\n } else {\n this.hide();\n }\n }\n}\n","import DiscussionPage from '../components/DiscussionPage';\nimport ReplyComposer from '../components/ReplyComposer';\nimport LogInModal from '../components/LogInModal';\nimport Button from '../../common/components/Button';\nimport Separator from '../../common/components/Separator';\nimport RenameDiscussionModal from '../components/RenameDiscussionModal';\nimport ItemList from '../../common/utils/ItemList';\nimport extractText from '../../common/utils/extractText';\n\n/**\n * The `DiscussionControls` utility constructs a list of buttons for a\n * discussion which perform actions on it.\n */\nexport default {\n /**\n * Get a list of controls for a discussion.\n *\n * @param {Discussion} discussion\n * @param {*} context The parent component under which the controls menu will\n * be displayed.\n * @return {ItemList}\n * @public\n */\n controls(discussion, context) {\n const items = new ItemList();\n\n ['user', 'moderation', 'destructive'].forEach(section => {\n const controls = this[section + 'Controls'](discussion, context).toArray();\n if (controls.length) {\n controls.forEach(item => items.add(item.itemName, item));\n items.add(section + 'Separator', Separator.component());\n }\n });\n\n return items;\n },\n\n /**\n * Get controls for a discussion pertaining to the current user (e.g. reply,\n * follow).\n *\n * @param {Discussion} discussion\n * @param {*} context The parent component under which the controls menu will\n * be displayed.\n * @return {ItemList}\n * @protected\n */\n userControls(discussion, context) {\n const items = new ItemList();\n\n // Only add a reply control if this is the discussion's controls dropdown\n // for the discussion page itself. We don't want it to show up for\n // discussions in the discussion list, etc.\n if (context instanceof DiscussionPage) {\n items.add('reply',\n !app.session.user || discussion.canReply()\n ? Button.component({\n icon: 'fas fa-reply',\n children: app.translator.trans(app.session.user ? 'core.forum.discussion_controls.reply_button' : 'core.forum.discussion_controls.log_in_to_reply_button'),\n onclick: this.replyAction.bind(discussion, true, false)\n })\n : Button.component({\n icon: 'fas fa-reply',\n children: app.translator.trans('core.forum.discussion_controls.cannot_reply_button'),\n className: 'disabled',\n title: app.translator.trans('core.forum.discussion_controls.cannot_reply_text')\n })\n );\n }\n\n return items;\n },\n\n /**\n * Get controls for a discussion pertaining to moderation (e.g. rename, lock).\n *\n * @param {Discussion} discussion\n * @param {*} context The parent component under which the controls menu will\n * be displayed.\n * @return {ItemList}\n * @protected\n */\n moderationControls(discussion) {\n const items = new ItemList();\n\n if (discussion.canRename()) {\n items.add('rename', Button.component({\n icon: 'fas fa-pencil-alt',\n children: app.translator.trans('core.forum.discussion_controls.rename_button'),\n onclick: this.renameAction.bind(discussion)\n }));\n }\n\n return items;\n },\n\n /**\n * Get controls for a discussion which are destructive (e.g. delete).\n *\n * @param {Discussion} discussion\n * @param {*} context The parent component under which the controls menu will\n * be displayed.\n * @return {ItemList}\n * @protected\n */\n destructiveControls(discussion) {\n const items = new ItemList();\n\n if (!discussion.isHidden()) {\n if (discussion.canHide()) {\n items.add('hide', Button.component({\n icon: 'far fa-trash-alt',\n children: app.translator.trans('core.forum.discussion_controls.delete_button'),\n onclick: this.hideAction.bind(discussion)\n }));\n }\n } else {\n if (discussion.canHide()) {\n items.add('restore', Button.component({\n icon: 'fas fa-reply',\n children: app.translator.trans('core.forum.discussion_controls.restore_button'),\n onclick: this.restoreAction.bind(discussion)\n }));\n }\n\n if (discussion.canDelete()) {\n items.add('delete', Button.component({\n icon: 'fas fa-times',\n children: app.translator.trans('core.forum.discussion_controls.delete_forever_button'),\n onclick: this.deleteAction.bind(discussion)\n }));\n }\n }\n\n return items;\n },\n\n /**\n * Open the reply composer for the discussion. A promise will be returned,\n * which resolves when the composer opens successfully. If the user is not\n * logged in, they will be prompted. If they don't have permission to\n * reply, the promise will be rejected.\n *\n * @param {Boolean} goToLast Whether or not to scroll down to the last post if\n * the discussion is being viewed.\n * @param {Boolean} forceRefresh Whether or not to force a reload of the\n * composer component, even if it is already open for this discussion.\n * @return {Promise}\n */\n replyAction(goToLast, forceRefresh) {\n const deferred = m.deferred();\n\n if (app.session.user) {\n if (this.canReply()) {\n let component = app.composer.component;\n if (!app.composingReplyTo(this) || forceRefresh) {\n component = new ReplyComposer({\n user: app.session.user,\n discussion: this\n });\n app.composer.load(component);\n }\n app.composer.show();\n\n if (goToLast && app.viewingDiscussion(this) && ! app.composer.isFullScreen()) {\n app.current.stream.goToNumber('reply');\n }\n\n deferred.resolve(component);\n } else {\n deferred.reject();\n }\n } else {\n app.modal.show(new LogInModal());\n }\n\n return deferred.promise;\n },\n\n /**\n * Hide a discussion.\n *\n * @return {Promise}\n */\n hideAction() {\n this.pushAttributes({ hiddenAt: new Date(), hiddenUser: app.session.user });\n\n return this.save({ isHidden: true });\n },\n\n /**\n * Restore a discussion.\n *\n * @return {Promise}\n */\n restoreAction() {\n this.pushAttributes({ hiddenAt: null, hiddenUser: null });\n\n return this.save({ isHidden: false });\n },\n\n /**\n * Delete the discussion after confirming with the user.\n *\n * @return {Promise}\n */\n deleteAction() {\n if (confirm(extractText(app.translator.trans('core.forum.discussion_controls.delete_confirmation')))) {\n // If we're currently viewing the discussion that was deleted, go back\n // to the previous page.\n if (app.viewingDiscussion(this)) {\n app.history.back();\n }\n\n return this.delete().then(() => {\n // If there is a discussion list in the cache, remove this discussion.\n if (app.cache.discussionList) {\n app.cache.discussionList.removeDiscussion(this);\n m.redraw();\n }\n });\n }\n },\n\n /**\n * Rename the discussion.\n *\n * @return {Promise}\n */\n renameAction() {\n return app.modal.show(new RenameDiscussionModal({\n currentTitle: this.title(),\n discussion: this\n }));\n }\n};\n","/*global s9e*/\n\nimport Component from '../../common/Component';\nimport avatar from '../../common/helpers/avatar';\nimport username from '../../common/helpers/username';\nimport DiscussionControls from '../utils/DiscussionControls';\n\n/**\n * The `ReplyPlaceholder` component displays a placeholder for a reply, which,\n * when clicked, opens the reply composer.\n *\n * ### Props\n *\n * - `discussion`\n */\nexport default class ReplyPlaceholder extends Component {\n view() {\n if (app.composingReplyTo(this.props.discussion)) {\n return (\n <article className=\"Post CommentPost editing\">\n <header className=\"Post-header\">\n <div className=\"PostUser\">\n <h3>\n {avatar(app.session.user, {className: 'PostUser-avatar'})}\n {username(app.session.user)}\n </h3>\n </div>\n </header>\n <div className=\"Post-body\" config={this.configPreview.bind(this)}/>\n </article>\n );\n }\n\n const reply = () => {\n DiscussionControls.replyAction.call(this.props.discussion, true);\n };\n\n return (\n <article className=\"Post ReplyPlaceholder\" onclick={reply}>\n <header className=\"Post-header\">\n {avatar(app.session.user, {className: 'PostUser-avatar'})}{' '}\n {app.translator.trans('core.forum.post_stream.reply_placeholder')}\n </header>\n </article>\n );\n }\n\n configPreview(element, isInitialized, context) {\n if (isInitialized) return;\n\n // Every 50ms, if the composer content has changed, then update the post's\n // body with a preview.\n let preview;\n const updateInterval = setInterval(() => {\n const content = app.composer.component.content();\n\n if (preview === content) return;\n\n preview = content;\n\n const anchorToBottom = $(window).scrollTop() + $(window).height() >= $(document).height();\n\n s9e.TextFormatter.preview(preview || '', element);\n\n if (anchorToBottom) {\n $(window).scrollTop($(document).height());\n }\n }, 50);\n\n context.onunload = () => clearInterval(updateInterval);\n }\n}\n","import Component from '../../common/Component';\nimport ScrollListener from '../../common/utils/ScrollListener';\nimport PostLoading from './LoadingPost';\nimport anchorScroll from '../../common/utils/anchorScroll';\nimport mixin from '../../common/utils/mixin';\nimport evented from '../../common/utils/evented';\nimport ReplyPlaceholder from './ReplyPlaceholder';\nimport Button from '../../common/components/Button';\n\n/**\n * The `PostStream` component displays an infinitely-scrollable wall of posts in\n * a discussion. Posts that have not loaded will be displayed as placeholders.\n *\n * ### Props\n *\n * - `discussion`\n * - `includedPosts`\n */\nclass PostStream extends Component {\n init() {\n /**\n * The discussion to display the post stream for.\n *\n * @type {Discussion}\n */\n this.discussion = this.props.discussion;\n\n /**\n * Whether or not the infinite-scrolling auto-load functionality is\n * disabled.\n *\n * @type {Boolean}\n */\n this.paused = false;\n\n this.scrollListener = new ScrollListener(this.onscroll.bind(this));\n this.loadPageTimeouts = {};\n this.pagesLoading = 0;\n\n this.show(this.props.includedPosts);\n }\n\n /**\n * Load and scroll to a post with a certain number.\n *\n * @param {Integer|String} number The post number to go to. If 'reply', go to\n * the last post and scroll the reply preview into view.\n * @param {Boolean} noAnimation\n * @return {Promise}\n */\n goToNumber(number, noAnimation) {\n // If we want to go to the reply preview, then we will go to the end of the\n // discussion and then scroll to the very bottom of the page.\n if (number === 'reply') {\n return this.goToLast().then(() => {\n $('html,body').stop(true).animate({\n scrollTop: $(document).height() - $(window).height()\n }, 'fast', () => {\n this.flashItem(this.$('.PostStream-item:last-child'));\n });\n });\n }\n\n this.paused = true;\n\n const promise = this.loadNearNumber(number);\n\n m.redraw(true);\n\n return promise.then(() => {\n m.redraw(true);\n\n this.scrollToNumber(number, noAnimation).done(this.unpause.bind(this));\n });\n }\n\n /**\n * Load and scroll to a certain index within the discussion.\n *\n * @param {Integer} index\n * @param {Boolean} backwards Whether or not to load backwards from the given\n * index.\n * @param {Boolean} noAnimation\n * @return {Promise}\n */\n goToIndex(index, backwards, noAnimation) {\n this.paused = true;\n\n const promise = this.loadNearIndex(index);\n\n m.redraw(true);\n\n return promise.then(() => {\n anchorScroll(this.$('.PostStream-item:' + (backwards ? 'last' : 'first')), () => m.redraw(true));\n\n this.scrollToIndex(index, noAnimation, backwards).done(this.unpause.bind(this));\n });\n }\n\n /**\n * Load and scroll up to the first post in the discussion.\n *\n * @return {Promise}\n */\n goToFirst() {\n return this.goToIndex(0);\n }\n\n /**\n * Load and scroll down to the last post in the discussion.\n *\n * @return {Promise}\n */\n goToLast() {\n return this.goToIndex(this.count() - 1, true);\n }\n\n /**\n * Update the stream so that it loads and includes the latest posts in the\n * discussion, if the end is being viewed.\n *\n * @public\n */\n update() {\n if (!this.viewingEnd) return m.deferred().resolve().promise;\n\n this.visibleEnd = this.count();\n\n return this.loadRange(this.visibleStart, this.visibleEnd).then(() => m.redraw());\n }\n\n /**\n * Get the total number of posts in the discussion.\n *\n * @return {Integer}\n */\n count() {\n return this.discussion.postIds().length;\n }\n\n /**\n * Make sure that the given index is not outside of the possible range of\n * indexes in the discussion.\n *\n * @param {Integer} index\n * @protected\n */\n sanitizeIndex(index) {\n return Math.max(0, Math.min(this.count(), index));\n }\n\n /**\n * Set up the stream with the given array of posts.\n *\n * @param {Post[]} posts\n */\n show(posts) {\n this.visibleStart = posts.length ? this.discussion.postIds().indexOf(posts[0].id()) : 0;\n this.visibleEnd = this.visibleStart + posts.length;\n }\n\n /**\n * Reset the stream so that a specific range of posts is displayed. If a range\n * is not specified, the first page of posts will be displayed.\n *\n * @param {Integer} [start]\n * @param {Integer} [end]\n */\n reset(start, end) {\n this.visibleStart = start || 0;\n this.visibleEnd = this.sanitizeIndex(end || this.constructor.loadCount);\n }\n\n /**\n * Get the visible page of posts.\n *\n * @return {Post[]}\n */\n posts() {\n return this.discussion.postIds()\n .slice(this.visibleStart, this.visibleEnd)\n .map(id => {\n const post = app.store.getById('posts', id);\n\n return post && post.discussion() && typeof post.canEdit() !== 'undefined' ? post : null;\n });\n }\n\n view() {\n function fadeIn(element, isInitialized, context) {\n if (!context.fadedIn) $(element).hide().fadeIn();\n context.fadedIn = true;\n }\n\n let lastTime;\n\n this.visibleEnd = this.sanitizeIndex(this.visibleEnd);\n this.viewingEnd = this.visibleEnd === this.count();\n\n const posts = this.posts();\n const postIds = this.discussion.postIds();\n\n const items = posts.map((post, i) => {\n let content;\n const attrs = {'data-index': this.visibleStart + i};\n\n if (post) {\n const time = post.createdAt();\n const PostComponent = app.postComponents[post.contentType()];\n content = PostComponent ? PostComponent.component({post}) : '';\n\n attrs.key = 'post' + post.id();\n attrs.config = fadeIn;\n attrs['data-time'] = time.toISOString();\n attrs['data-number'] = post.number();\n attrs['data-id'] = post.id();\n attrs['data-type'] = post.contentType();\n\n // If the post before this one was more than 4 hours ago, we will\n // display a 'time gap' indicating how long it has been in between\n // the posts.\n const dt = time - lastTime;\n\n if (dt > 1000 * 60 * 60 * 24 * 4) {\n content = [\n <div className=\"PostStream-timeGap\">\n <span>{app.translator.trans('core.forum.post_stream.time_lapsed_text', {period: moment.duration(dt).humanize()})}</span>\n </div>,\n content\n ];\n }\n\n lastTime = time;\n } else {\n attrs.key = 'post' + postIds[this.visibleStart + i];\n\n content = PostLoading.component();\n }\n\n return <div className=\"PostStream-item\" {...attrs}>{content}</div>;\n });\n\n if (!this.viewingEnd && posts[this.visibleEnd - this.visibleStart - 1]) {\n items.push(\n <div className=\"PostStream-loadMore\" key=\"loadMore\">\n <Button className=\"Button\" onclick={this.loadNext.bind(this)}>\n {app.translator.trans('core.forum.post_stream.load_more_button')}\n </Button>\n </div>\n );\n }\n\n // If we're viewing the end of the discussion, the user can reply, and\n // is not already doing so, then show a 'write a reply' placeholder.\n if (this.viewingEnd && (!app.session.user || this.discussion.canReply())) {\n items.push(\n <div className=\"PostStream-item\" key=\"reply\">\n {ReplyPlaceholder.component({discussion: this.discussion})}\n </div>\n );\n }\n\n return (\n <div className=\"PostStream\">\n {items}\n </div>\n );\n }\n\n config(isInitialized, context) {\n if (isInitialized) return;\n\n // This is wrapped in setTimeout due to the following Mithril issue:\n // https://github.com/lhorie/mithril.js/issues/637\n setTimeout(() => this.scrollListener.start());\n\n context.onunload = () => {\n this.scrollListener.stop();\n clearTimeout(this.calculatePositionTimeout);\n };\n }\n\n /**\n * When the window is scrolled, check if either extreme of the post stream is\n * in the viewport, and if so, trigger loading the next/previous page.\n *\n * @param {Integer} top\n */\n onscroll(top) {\n if (this.paused) return;\n\n const marginTop = this.getMarginTop();\n const viewportHeight = $(window).height() - marginTop;\n const viewportTop = top + marginTop;\n const loadAheadDistance = 300;\n\n if (this.visibleStart > 0) {\n const $item = this.$('.PostStream-item[data-index=' + this.visibleStart + ']');\n\n if ($item.length && $item.offset().top > viewportTop - loadAheadDistance) {\n this.loadPrevious();\n }\n }\n\n if (this.visibleEnd < this.count()) {\n const $item = this.$('.PostStream-item[data-index=' + (this.visibleEnd - 1) + ']');\n\n if ($item.length && $item.offset().top + $item.outerHeight(true) < viewportTop + viewportHeight + loadAheadDistance) {\n this.loadNext();\n }\n }\n\n // Throttle calculation of our position (start/end numbers of posts in the\n // viewport) to 100ms.\n clearTimeout(this.calculatePositionTimeout);\n this.calculatePositionTimeout = setTimeout(this.calculatePosition.bind(this), 100);\n }\n\n /**\n * Load the next page of posts.\n */\n loadNext() {\n const start = this.visibleEnd;\n const end = this.visibleEnd = this.sanitizeIndex(this.visibleEnd + this.constructor.loadCount);\n\n // Unload the posts which are two pages back from the page we're currently\n // loading.\n const twoPagesAway = start - this.constructor.loadCount * 2;\n if (twoPagesAway > this.visibleStart && twoPagesAway >= 0) {\n this.visibleStart = twoPagesAway + this.constructor.loadCount + 1;\n\n if (this.loadPageTimeouts[twoPagesAway]) {\n clearTimeout(this.loadPageTimeouts[twoPagesAway]);\n this.loadPageTimeouts[twoPagesAway] = null;\n this.pagesLoading--;\n }\n }\n\n this.loadPage(start, end);\n }\n\n /**\n * Load the previous page of posts.\n */\n loadPrevious() {\n const end = this.visibleStart;\n const start = this.visibleStart = this.sanitizeIndex(this.visibleStart - this.constructor.loadCount);\n\n // Unload the posts which are two pages back from the page we're currently\n // loading.\n const twoPagesAway = start + this.constructor.loadCount * 2;\n if (twoPagesAway < this.visibleEnd && twoPagesAway <= this.count()) {\n this.visibleEnd = twoPagesAway;\n\n if (this.loadPageTimeouts[twoPagesAway]) {\n clearTimeout(this.loadPageTimeouts[twoPagesAway]);\n this.loadPageTimeouts[twoPagesAway] = null;\n this.pagesLoading--;\n }\n }\n\n this.loadPage(start, end, true);\n }\n\n /**\n * Load a page of posts into the stream and redraw.\n *\n * @param {Integer} start\n * @param {Integer} end\n * @param {Boolean} backwards\n */\n loadPage(start, end, backwards) {\n const redraw = () => {\n if (start < this.visibleStart || end > this.visibleEnd) return;\n\n const anchorIndex = backwards ? this.visibleEnd - 1 : this.visibleStart;\n anchorScroll(`.PostStream-item[data-index=\"${anchorIndex}\"]`, () => m.redraw(true));\n\n this.unpause();\n };\n redraw();\n\n this.loadPageTimeouts[start] = setTimeout(() => {\n this.loadRange(start, end).then(() => {\n redraw();\n this.pagesLoading--;\n });\n this.loadPageTimeouts[start] = null;\n }, this.pagesLoading ? 1000 : 0);\n\n this.pagesLoading++;\n }\n\n /**\n * Load and inject the specified range of posts into the stream, without\n * clearing it.\n *\n * @param {Integer} start\n * @param {Integer} end\n * @return {Promise}\n */\n loadRange(start, end) {\n const loadIds = [];\n const loaded = [];\n\n this.discussion.postIds().slice(start, end).forEach(id => {\n const post = app.store.getById('posts', id);\n\n if (post && post.discussion() && typeof post.canEdit() !== 'undefined') {\n loaded.push(post);\n } else {\n loadIds.push(id);\n }\n });\n\n return loadIds.length\n ? app.store.find('posts', loadIds)\n : m.deferred().resolve(loaded).promise;\n }\n\n /**\n * Clear the stream and load posts near a certain number. Returns a promise.\n * If the post with the given number is already loaded, the promise will be\n * resolved immediately.\n *\n * @param {Integer} number\n * @return {Promise}\n */\n loadNearNumber(number) {\n if (this.posts().some(post => post && Number(post.number()) === Number(number))) {\n return m.deferred().resolve().promise;\n }\n\n this.reset();\n\n return app.store.find('posts', {\n filter: {discussion: this.discussion.id()},\n page: {near: number}\n }).then(this.show.bind(this));\n }\n\n /**\n * Clear the stream and load posts near a certain index. A page of posts\n * surrounding the given index will be loaded. Returns a promise. If the given\n * index is already loaded, the promise will be resolved immediately.\n *\n * @param {Integer} index\n * @return {Promise}\n */\n loadNearIndex(index) {\n if (index >= this.visibleStart && index <= this.visibleEnd) {\n return m.deferred().resolve().promise;\n }\n\n const start = this.sanitizeIndex(index - this.constructor.loadCount / 2);\n const end = start + this.constructor.loadCount;\n\n this.reset(start, end);\n\n return this.loadRange(start, end).then(this.show.bind(this));\n }\n\n /**\n * Work out which posts (by number) are currently visible in the viewport, and\n * fire an event with the information.\n */\n calculatePosition() {\n const marginTop = this.getMarginTop();\n const $window = $(window);\n const viewportHeight = $window.height() - marginTop;\n const scrollTop = $window.scrollTop() + marginTop;\n let startNumber;\n let endNumber;\n\n this.$('.PostStream-item').each(function() {\n const $item = $(this);\n const top = $item.offset().top;\n const height = $item.outerHeight(true);\n\n if (top + height > scrollTop) {\n if (!startNumber) {\n startNumber = endNumber = $item.data('number');\n }\n\n if (top + height < scrollTop + viewportHeight) {\n if ($item.data('number')) {\n endNumber = $item.data('number');\n }\n } else return false;\n }\n });\n\n if (startNumber) {\n this.trigger('positionChanged', startNumber || 1, endNumber);\n }\n }\n\n /**\n * Get the distance from the top of the viewport to the point at which we\n * would consider a post to be the first one visible.\n *\n * @return {Integer}\n */\n getMarginTop() {\n return this.$() && $('#header').outerHeight() + parseInt(this.$().css('margin-top'), 10);\n }\n\n /**\n * Scroll down to a certain post by number and 'flash' it.\n *\n * @param {Integer} number\n * @param {Boolean} noAnimation\n * @return {jQuery.Deferred}\n */\n scrollToNumber(number, noAnimation) {\n const $item = this.$(`.PostStream-item[data-number=${number}]`);\n\n return this.scrollToItem($item, noAnimation).done(this.flashItem.bind(this, $item));\n }\n\n /**\n * Scroll down to a certain post by index.\n *\n * @param {Integer} index\n * @param {Boolean} noAnimation\n * @param {Boolean} bottom Whether or not to scroll to the bottom of the post\n * at the given index, instead of the top of it.\n * @return {jQuery.Deferred}\n */\n scrollToIndex(index, noAnimation, bottom) {\n const $item = this.$(`.PostStream-item[data-index=${index}]`);\n\n return this.scrollToItem($item, noAnimation, true, bottom);\n }\n\n /**\n * Scroll down to the given post.\n *\n * @param {jQuery} $item\n * @param {Boolean} noAnimation\n * @param {Boolean} force Whether or not to force scrolling to the item, even\n * if it is already in the viewport.\n * @param {Boolean} bottom Whether or not to scroll to the bottom of the post\n * at the given index, instead of the top of it.\n * @return {jQuery.Deferred}\n */\n scrollToItem($item, noAnimation, force, bottom) {\n const $container = $('html, body').stop(true);\n\n if ($item.length) {\n const itemTop = $item.offset().top - this.getMarginTop();\n const itemBottom = $item.offset().top + $item.height();\n const scrollTop = $(document).scrollTop();\n const scrollBottom = scrollTop + $(window).height();\n\n // If the item is already in the viewport, we may not need to scroll.\n // If we're scrolling to the bottom of an item, then we'll make sure the\n // bottom will line up with the top of the composer.\n if (force || itemTop < scrollTop || itemBottom > scrollBottom) {\n const top = bottom\n ? itemBottom - $(window).height() + app.composer.computedHeight()\n : ($item.is(':first-child') ? 0 : itemTop);\n\n if (noAnimation) {\n $container.scrollTop(top);\n } else if (top !== scrollTop) {\n $container.animate({scrollTop: top}, 'fast');\n }\n }\n }\n\n return $container.promise();\n }\n\n /**\n * 'Flash' the given post, drawing the user's attention to it.\n *\n * @param {jQuery} $item\n */\n flashItem($item) {\n $item.addClass('flash').one('animationend webkitAnimationEnd', () => $item.removeClass('flash'));\n }\n\n /**\n * Resume the stream's ability to auto-load posts on scroll.\n */\n unpause() {\n this.paused = false;\n this.scrollListener.update(true);\n this.trigger('unpaused');\n }\n}\n\n/**\n * The number of posts to load per page.\n *\n * @type {Integer}\n */\nPostStream.loadCount = 20;\n\nObject.assign(PostStream.prototype, evented);\n\nexport default PostStream;\n","import Component from '../../common/Component';\nimport icon from '../../common/helpers/icon';\nimport ScrollListener from '../../common/utils/ScrollListener';\nimport SubtreeRetainer from '../../common/utils/SubtreeRetainer';\nimport computed from '../../common/utils/computed';\nimport formatNumber from '../../common/utils/formatNumber';\n\n/**\n * The `PostStreamScrubber` component displays a scrubber which can be used to\n * navigate/scrub through a post stream.\n *\n * ### Props\n *\n * - `stream`\n * - `className`\n */\nexport default class PostStreamScrubber extends Component {\n init() {\n this.handlers = {};\n\n /**\n * The index of the post that is currently at the top of the viewport.\n *\n * @type {Number}\n */\n this.index = 0;\n\n /**\n * The number of posts that are currently visible in the viewport.\n *\n * @type {Number}\n */\n this.visible = 1;\n\n /**\n * The description to render on the scrubber.\n *\n * @type {String}\n */\n this.description = '';\n\n // When the post stream begins loading posts at a certain index, we want our\n // scrubber scrollbar to jump to that position.\n this.props.stream.on('unpaused', this.handlers.streamWasUnpaused = this.streamWasUnpaused.bind(this));\n\n // Define a handler to update the state of the scrollbar to reflect the\n // current scroll position of the page.\n this.scrollListener = new ScrollListener(this.onscroll.bind(this));\n\n // Create a subtree retainer that will always cache the subtree after the\n // initial draw. We render parts of the scrubber using this because we\n // modify their DOM directly, and do not want Mithril messing around with\n // our changes.\n this.subtree = new SubtreeRetainer(() => true);\n }\n\n view() {\n const retain = this.subtree.retain();\n const count = this.count();\n const unreadCount = this.props.stream.discussion.unreadCount();\n const unreadPercent = count ? Math.min(count - this.index, unreadCount) / count : 0;\n\n const viewing = app.translator.transChoice('core.forum.post_scrubber.viewing_text', count, {\n index: <span className=\"Scrubber-index\">{retain || formatNumber(Math.min(Math.ceil(this.index + this.visible), count))}</span>,\n count: <span className=\"Scrubber-count\">{formatNumber(count)}</span>\n });\n\n function styleUnread(element, isInitialized, context) {\n const $element = $(element);\n const newStyle = {\n top: (100 - unreadPercent * 100) + '%',\n height: (unreadPercent * 100) + '%'\n };\n\n if (context.oldStyle) {\n $element.stop(true).css(context.oldStyle).animate(newStyle);\n } else {\n $element.css(newStyle);\n }\n\n context.oldStyle = newStyle;\n }\n\n return (\n <div className={'PostStreamScrubber Dropdown ' + (this.disabled() ? 'disabled ' : '') + (this.props.className || '')}>\n <button className=\"Button Dropdown-toggle\" data-toggle=\"dropdown\">\n {viewing} {icon('fas fa-sort')}\n </button>\n\n <div className=\"Dropdown-menu dropdown-menu\">\n <div className=\"Scrubber\">\n <a className=\"Scrubber-first\" onclick={this.goToFirst.bind(this)}>\n {icon('fas fa-angle-double-up')} {app.translator.trans('core.forum.post_scrubber.original_post_link')}\n </a>\n\n <div className=\"Scrubber-scrollbar\">\n <div className=\"Scrubber-before\"/>\n <div className=\"Scrubber-handle\">\n <div className=\"Scrubber-bar\"/>\n <div className=\"Scrubber-info\">\n <strong>{viewing}</strong>\n <span class=\"Scrubber-description\">{retain || this.description}</span>\n </div>\n </div>\n <div className=\"Scrubber-after\"/>\n\n <div className=\"Scrubber-unread\" config={styleUnread}>\n {app.translator.trans('core.forum.post_scrubber.unread_text', {count: unreadCount})}\n </div>\n </div>\n\n <a className=\"Scrubber-last\" onclick={this.goToLast.bind(this)}>\n {icon('fas fa-angle-double-down')} {app.translator.trans('core.forum.post_scrubber.now_link')}\n </a>\n </div>\n </div>\n </div>\n );\n }\n\n /**\n * Go to the first post in the discussion.\n */\n goToFirst() {\n this.props.stream.goToFirst();\n this.index = 0;\n this.renderScrollbar(true);\n }\n\n /**\n * Go to the last post in the discussion.\n */\n goToLast() {\n this.props.stream.goToLast();\n this.index = this.props.stream.count();\n this.renderScrollbar(true);\n }\n\n /**\n * Get the number of posts in the discussion.\n *\n * @return {Integer}\n */\n count() {\n return this.props.stream.count();\n }\n\n /**\n * When the stream is unpaused, update the scrubber to reflect its position.\n */\n streamWasUnpaused() {\n this.update(window.pageYOffset);\n this.renderScrollbar(true);\n }\n\n /**\n * Check whether or not the scrubber should be disabled, i.e. if all of the\n * posts are visible in the viewport.\n *\n * @return {Boolean}\n */\n disabled() {\n return this.visible >= this.count();\n }\n\n /**\n * When the page is scrolled, update the scrollbar to reflect the visible\n * posts.\n *\n * @param {Integer} top\n */\n onscroll(top) {\n const stream = this.props.stream;\n\n if (stream.paused || !stream.$()) return;\n\n this.update(top);\n this.renderScrollbar();\n }\n\n /**\n * Update the index/visible/description properties according to the window's\n * current scroll position.\n *\n * @param {Integer} scrollTop\n */\n update(scrollTop) {\n const stream = this.props.stream;\n\n const marginTop = stream.getMarginTop();\n const viewportTop = scrollTop + marginTop;\n const viewportHeight = $(window).height() - marginTop;\n const viewportBottom = viewportTop + viewportHeight;\n\n // Before looping through all of the posts, we reset the scrollbar\n // properties to a 'default' state. These values reflect what would be\n // seen if the browser were scrolled right up to the top of the page,\n // and the viewport had a height of 0.\n const $items = stream.$('> .PostStream-item[data-index]');\n let index = $items.first().data('index') || 0;\n let visible = 0;\n let period = '';\n\n // Now loop through each of the items in the discussion. An 'item' is\n // either a single post or a 'gap' of one or more posts that haven't\n // been loaded yet.\n $items.each(function() {\n const $this = $(this);\n const top = $this.offset().top;\n const height = $this.outerHeight(true);\n\n // If this item is above the top of the viewport, skip to the next\n // one. If it's below the bottom of the viewport, break out of the\n // loop.\n if (top + height < viewportTop) {\n return true;\n }\n if (top > viewportTop + viewportHeight) {\n return false;\n }\n\n // Work out how many pixels of this item are visible inside the viewport.\n // Then add the proportion of this item's total height to the index.\n const visibleTop = Math.max(0, viewportTop - top);\n const visibleBottom = Math.min(height, viewportTop + viewportHeight - top);\n const visiblePost = visibleBottom - visibleTop;\n\n if (top <= viewportTop) {\n index = parseFloat($this.data('index')) + visibleTop / height;\n }\n\n if (visiblePost > 0) {\n visible += visiblePost / height;\n }\n\n // If this item has a time associated with it, then set the\n // scrollbar's current period to a formatted version of this time.\n const time = $this.data('time');\n if (time) period = time;\n });\n\n this.index = index;\n this.visible = visible;\n this.description = period ? moment(period).format('MMMM YYYY') : '';\n }\n\n config(isInitialized, context) {\n if (isInitialized) return;\n\n context.onunload = this.ondestroy.bind(this);\n\n this.scrollListener.start();\n\n // Whenever the window is resized, adjust the height of the scrollbar\n // so that it fills the height of the sidebar.\n $(window).on('resize', this.handlers.onresize = this.onresize.bind(this)).resize();\n\n // When any part of the whole scrollbar is clicked, we want to jump to\n // that position.\n this.$('.Scrubber-scrollbar')\n .bind('click', this.onclick.bind(this))\n\n // Now we want to make the scrollbar handle draggable. Let's start by\n // preventing default browser events from messing things up.\n .css({ cursor: 'pointer', 'user-select': 'none' })\n .bind('dragstart mousedown touchstart', e => e.preventDefault());\n\n // When the mouse is pressed on the scrollbar handle, we capture some\n // information about its current position. We will store this\n // information in an object and pass it on to the document's\n // mousemove/mouseup events later.\n this.dragging = false;\n this.mouseStart = 0;\n this.indexStart = 0;\n\n this.$('.Scrubber-handle')\n .css('cursor', 'move')\n .bind('mousedown touchstart', this.onmousedown.bind(this))\n\n // Exempt the scrollbar handle from the 'jump to' click event.\n .click(e => e.stopPropagation());\n\n // When the mouse moves and when it is released, we pass the\n // information that we captured when the mouse was first pressed onto\n // some event handlers. These handlers will move the scrollbar/stream-\n // content as appropriate.\n $(document)\n .on('mousemove touchmove', this.handlers.onmousemove = this.onmousemove.bind(this))\n .on('mouseup touchend', this.handlers.onmouseup = this.onmouseup.bind(this));\n }\n\n ondestroy() {\n this.scrollListener.stop();\n\n this.props.stream.off('unpaused', this.handlers.streamWasUnpaused);\n\n $(window)\n .off('resize', this.handlers.onresize);\n\n $(document)\n .off('mousemove touchmove', this.handlers.onmousemove)\n .off('mouseup touchend', this.handlers.onmouseup);\n }\n\n /**\n * Update the scrollbar's position to reflect the current values of the\n * index/visible properties.\n *\n * @param {Boolean} animate\n */\n renderScrollbar(animate) {\n const percentPerPost = this.percentPerPost();\n const index = this.index;\n const count = this.count();\n const visible = this.visible || 1;\n\n const $scrubber = this.$();\n $scrubber.find('.Scrubber-index').text(formatNumber(Math.ceil(index + visible)));\n $scrubber.find('.Scrubber-description').text(this.description);\n $scrubber.toggleClass('disabled', this.disabled());\n\n const heights = {};\n heights.before = Math.max(0, percentPerPost.index * Math.min(index, count - visible));\n heights.handle = Math.min(100 - heights.before, percentPerPost.visible * visible);\n heights.after = 100 - heights.before - heights.handle;\n\n const func = animate ? 'animate' : 'css';\n for (const part in heights) {\n const $part = $scrubber.find(`.Scrubber-${part}`);\n $part.stop(true, true)[func]({height: heights[part] + '%'}, 'fast');\n\n // jQuery likes to put overflow:hidden, but because the scrollbar handle\n // has a negative margin-left, we need to override.\n if (func === 'animate') $part.css('overflow', 'visible');\n }\n }\n\n /**\n * Get the percentage of the height of the scrubber that should be allocated\n * to each post.\n *\n * @return {Object}\n * @property {Number} index The percent per post for posts on either side of\n * the visible part of the scrubber.\n * @property {Number} visible The percent per post for the visible part of the\n * scrubber.\n */\n percentPerPost() {\n const count = this.count() || 1;\n const visible = this.visible || 1;\n\n // To stop the handle of the scrollbar from getting too small when there\n // are many posts, we define a minimum percentage height for the handle\n // calculated from a 50 pixel limit. From this, we can calculate the\n // minimum percentage per visible post. If this is greater than the actual\n // percentage per post, then we need to adjust the 'before' percentage to\n // account for it.\n const minPercentVisible = 50 / this.$('.Scrubber-scrollbar').outerHeight() * 100;\n const percentPerVisiblePost = Math.max(100 / count, minPercentVisible / visible);\n const percentPerPost = count === visible ? 0 : (100 - percentPerVisiblePost * visible) / (count - visible);\n\n return {\n index: percentPerPost,\n visible: percentPerVisiblePost\n };\n }\n\n onresize() {\n this.scrollListener.update(true);\n\n // Adjust the height of the scrollbar so that it fills the height of\n // the sidebar and doesn't overlap the footer.\n const scrubber = this.$();\n const scrollbar = this.$('.Scrubber-scrollbar');\n\n scrollbar.css('max-height', $(window).height() -\n scrubber.offset().top + $(window).scrollTop() -\n parseInt($('#app').css('padding-bottom'), 10) -\n (scrubber.outerHeight() - scrollbar.outerHeight()));\n }\n\n onmousedown(e) {\n this.mouseStart = e.clientY || e.originalEvent.touches[0].clientY;\n this.indexStart = this.index;\n this.dragging = true;\n this.props.stream.paused = true;\n $('body').css('cursor', 'move');\n }\n\n onmousemove(e) {\n if (!this.dragging) return;\n\n // Work out how much the mouse has moved by - first in pixels, then\n // convert it to a percentage of the scrollbar's height, and then\n // finally convert it into an index. Add this delta index onto\n // the index at which the drag was started, and then scroll there.\n const deltaPixels = (e.clientY || e.originalEvent.touches[0].clientY) - this.mouseStart;\n const deltaPercent = deltaPixels / this.$('.Scrubber-scrollbar').outerHeight() * 100;\n const deltaIndex = (deltaPercent / this.percentPerPost().index) || 0;\n const newIndex = Math.min(this.indexStart + deltaIndex, this.count() - 1);\n\n this.index = Math.max(0, newIndex);\n this.renderScrollbar();\n }\n\n onmouseup() {\n if (!this.dragging) return;\n\n this.mouseStart = 0;\n this.indexStart = 0;\n this.dragging = false;\n $('body').css('cursor', '');\n\n this.$().removeClass('open');\n\n // If the index we've landed on is in a gap, then tell the stream-\n // content that we want to load those posts.\n const intIndex = Math.floor(this.index);\n this.props.stream.goToIndex(intIndex);\n this.renderScrollbar(true);\n }\n\n onclick(e) {\n // Calculate the index which we want to jump to based on the click position.\n\n // 1. Get the offset of the click from the top of the scrollbar, as a\n // percentage of the scrollbar's height.\n const $scrollbar = this.$('.Scrubber-scrollbar');\n const offsetPixels = (e.clientY || e.originalEvent.touches[0].clientY) - $scrollbar.offset().top + $('body').scrollTop();\n let offsetPercent = offsetPixels / $scrollbar.outerHeight() * 100;\n\n // 2. We want the handle of the scrollbar to end up centered on the click\n // position. Thus, we calculate the height of the handle in percent and\n // use that to find a new offset percentage.\n offsetPercent = offsetPercent - parseFloat($scrollbar.find('.Scrubber-handle')[0].style.height) / 2;\n\n // 3. Now we can convert the percentage into an index, and tell the stream-\n // content component to jump to that index.\n let offsetIndex = offsetPercent / this.percentPerPost().index;\n offsetIndex = Math.max(0, Math.min(this.count() - 1, offsetIndex));\n this.props.stream.goToIndex(Math.floor(offsetIndex));\n this.index = offsetIndex;\n this.renderScrollbar(true);\n\n this.$().removeClass('open');\n }\n}\n","import Page from './Page';\nimport ItemList from '../../common/utils/ItemList';\nimport DiscussionHero from './DiscussionHero';\nimport PostStream from './PostStream';\nimport PostStreamScrubber from './PostStreamScrubber';\nimport LoadingIndicator from '../../common/components/LoadingIndicator';\nimport SplitDropdown from '../../common/components/SplitDropdown';\nimport listItems from '../../common/helpers/listItems';\nimport DiscussionControls from '../utils/DiscussionControls';\n\n/**\n * The `DiscussionPage` component displays a whole discussion page, including\n * the discussion list pane, the hero, the posts, and the sidebar.\n */\nexport default class DiscussionPage extends Page {\n init() {\n super.init();\n\n /**\n * The discussion that is being viewed.\n *\n * @type {Discussion}\n */\n this.discussion = null;\n\n /**\n * The number of the first post that is currently visible in the viewport.\n *\n * @type {Integer}\n */\n this.near = null;\n\n this.refresh();\n\n // If the discussion list has been loaded, then we'll enable the pane (and\n // hide it by default). Also, if we've just come from another discussion\n // page, then we don't want Mithril to redraw the whole page – if it did,\n // then the pane would which would be slow and would cause problems with\n // event handlers.\n if (app.cache.discussionList) {\n app.pane.enable();\n app.pane.hide();\n\n if (app.previous instanceof DiscussionPage) {\n m.redraw.strategy('diff');\n }\n }\n\n app.history.push('discussion');\n\n this.bodyClass = 'App--discussion';\n }\n\n onunload(e) {\n // If we have routed to the same discussion as we were viewing previously,\n // cancel the unloading of this controller and instead prompt the post\n // stream to jump to the new 'near' param.\n if (this.discussion) {\n const idParam = m.route.param('id');\n\n if (idParam && idParam.split('-')[0] === this.discussion.id()) {\n e.preventDefault();\n\n const near = m.route.param('near') || '1';\n\n if (near !== String(this.near)) {\n this.stream.goToNumber(near);\n }\n\n this.near = null;\n return;\n }\n }\n\n // If we are indeed navigating away from this discussion, then disable the\n // discussion list pane. Also, if we're composing a reply to this\n // discussion, minimize the composer – unless it's empty, in which case\n // we'll just close it.\n app.pane.disable();\n\n if (app.composingReplyTo(this.discussion) && !app.composer.component.content()) {\n app.composer.hide();\n } else {\n app.composer.minimize();\n }\n }\n\n view() {\n const discussion = this.discussion;\n\n return (\n <div className=\"DiscussionPage\">\n {app.cache.discussionList\n ? <div className=\"DiscussionPage-list\" config={this.configPane.bind(this)}>\n {!$('.App-navigation').is(':visible') ? app.cache.discussionList.render() : ''}\n </div>\n : ''}\n\n <div className=\"DiscussionPage-discussion\">\n {discussion\n ? [\n DiscussionHero.component({discussion}),\n <div className=\"container\">\n <nav className=\"DiscussionPage-nav\">\n <ul>{listItems(this.sidebarItems().toArray())}</ul>\n </nav>\n <div className=\"DiscussionPage-stream\">\n {this.stream.render()}\n </div>\n </div>\n ]\n : LoadingIndicator.component({className: 'LoadingIndicator--block'})}\n </div>\n </div>\n );\n }\n\n config(...args) {\n super.config(...args);\n\n if (this.discussion) {\n app.setTitle(this.discussion.title());\n }\n }\n\n /**\n * Clear and reload the discussion.\n */\n refresh() {\n this.near = m.route.param('near') || 0;\n this.discussion = null;\n\n const preloadedDiscussion = app.preloadedDocument();\n if (preloadedDiscussion) {\n // We must wrap this in a setTimeout because if we are mounting this\n // component for the first time on page load, then any calls to m.redraw\n // will be ineffective and thus any configs (scroll code) will be run\n // before stuff is drawn to the page.\n setTimeout(this.show.bind(this, preloadedDiscussion), 0);\n } else {\n const params = this.requestParams();\n\n app.store.find('discussions', m.route.param('id').split('-')[0], params)\n .then(this.show.bind(this));\n }\n\n m.lazyRedraw();\n }\n\n /**\n * Get the parameters that should be passed in the API request to get the\n * discussion.\n *\n * @return {Object}\n */\n requestParams() {\n return {\n page: {near: this.near}\n };\n }\n\n /**\n * Initialize the component to display the given discussion.\n *\n * @param {Discussion} discussion\n */\n show(discussion) {\n this.discussion = discussion;\n\n app.history.push('discussion', discussion.title());\n app.setTitleCount(0);\n\n // When the API responds with a discussion, it will also include a number of\n // posts. Some of these posts are included because they are on the first\n // page of posts we want to display (determined by the `near` parameter) –\n // others may be included because due to other relationships introduced by\n // extensions. We need to distinguish the two so we don't end up displaying\n // the wrong posts. We do so by filtering out the posts that don't have\n // the 'discussion' relationship linked, then sorting and splicing.\n let includedPosts = [];\n if (discussion.payload && discussion.payload.included) {\n const discussionId = discussion.id();\n\n includedPosts = discussion.payload.included\n .filter(record => record.type === 'posts'\n && record.relationships\n && record.relationships.discussion\n && record.relationships.discussion.data.id === discussionId)\n .map(record => app.store.getById('posts', record.id))\n .sort((a, b) => a.id() - b.id())\n .slice(0, 20);\n }\n\n // Set up the post stream for this discussion, along with the first page of\n // posts we want to display. Tell the stream to scroll down and highlight\n // the specific post that was routed to.\n this.stream = new PostStream({discussion, includedPosts});\n this.stream.on('positionChanged', this.positionChanged.bind(this));\n this.stream.goToNumber(m.route.param('near') || (includedPosts[0] && includedPosts[0].number()), true);\n }\n\n /**\n * Configure the discussion list pane.\n *\n * @param {DOMElement} element\n * @param {Boolean} isInitialized\n * @param {Object} context\n */\n configPane(element, isInitialized, context) {\n if (isInitialized) return;\n\n context.retain = true;\n\n const $list = $(element);\n\n // When the mouse enters and leaves the discussions pane, we want to show\n // and hide the pane respectively. We also create a 10px 'hot edge' on the\n // left of the screen to activate the pane.\n const pane = app.pane;\n $list.hover(pane.show.bind(pane), pane.onmouseleave.bind(pane));\n\n const hotEdge = e => {\n if (e.pageX < 10) pane.show();\n };\n $(document).on('mousemove', hotEdge);\n context.onunload = () => $(document).off('mousemove', hotEdge);\n\n // If the discussion we are viewing is listed in the discussion list, then\n // we will make sure it is visible in the viewport – if it is not we will\n // scroll the list down to it.\n const $discussion = $list.find('.DiscussionListItem.active');\n if ($discussion.length) {\n const listTop = $list.offset().top;\n const listBottom = listTop + $list.outerHeight();\n const discussionTop = $discussion.offset().top;\n const discussionBottom = discussionTop + $discussion.outerHeight();\n\n if (discussionTop < listTop || discussionBottom > listBottom) {\n $list.scrollTop($list.scrollTop() - listTop + discussionTop);\n }\n }\n }\n\n /**\n * Build an item list for the contents of the sidebar.\n *\n * @return {ItemList}\n */\n sidebarItems() {\n const items = new ItemList();\n\n items.add('controls',\n SplitDropdown.component({\n children: DiscussionControls.controls(this.discussion, this).toArray(),\n icon: 'fas fa-ellipsis-v',\n className: 'App-primaryControl',\n buttonClassName: 'Button--primary'\n })\n );\n\n items.add('scrubber',\n PostStreamScrubber.component({\n stream: this.stream,\n className: 'App-titleControl'\n }),\n -100\n );\n\n return items;\n }\n\n /**\n * When the posts that are visible in the post stream change (i.e. the user\n * scrolls up or down), then we update the URL and mark the posts as read.\n *\n * @param {Integer} startNumber\n * @param {Integer} endNumber\n */\n positionChanged(startNumber, endNumber) {\n const discussion = this.discussion;\n\n // Construct a URL to this discussion with the updated position, then\n // replace it into the window's history and our own history stack.\n const url = app.route.discussion(discussion, this.near = startNumber);\n\n m.route(url, true);\n window.history.replaceState(null, document.title, url);\n\n app.history.push('discussion', discussion.title());\n\n // If the user hasn't read past here before, then we'll update their read\n // state and redraw.\n if (app.session.user && endNumber > (discussion.lastReadPostNumber() || 0)) {\n discussion.save({lastReadPostNumber: endNumber});\n m.redraw();\n }\n }\n}\n","import Component from '../../common/Component';\nimport ItemList from '../../common/utils/ItemList';\nimport listItems from '../../common/helpers/listItems';\n\n/**\n * The `HeaderPrimary` component displays primary header controls. On the\n * default skin, these are shown just to the right of the forum title.\n */\nexport default class HeaderPrimary extends Component {\n view() {\n return (\n <ul className=\"Header-controls\">\n {listItems(this.items().toArray())}\n </ul>\n );\n }\n\n config(isInitialized, context) {\n // Since this component is 'above' the content of the page (that is, it is a\n // part of the global UI that persists between routes), we will flag the DOM\n // to be retained across route changes.\n context.retain = true;\n }\n\n /**\n * Build an item list for the controls.\n *\n * @return {ItemList}\n */\n items() {\n return new ItemList();\n }\n}\n","import avatar from '../../common/helpers/avatar';\nimport username from '../../common/helpers/username';\nimport Dropdown from '../../common/components/Dropdown';\nimport LinkButton from '../../common/components/LinkButton';\nimport Button from '../../common/components/Button';\nimport ItemList from '../../common/utils/ItemList';\nimport Separator from '../../common/components/Separator';\nimport Group from '../../common/models/Group';\n\n/**\n * The `SessionDropdown` component shows a button with the current user's\n * avatar/name, with a dropdown of session controls.\n */\nexport default class SessionDropdown extends Dropdown {\n static initProps(props) {\n super.initProps(props);\n\n props.className = 'SessionDropdown';\n props.buttonClassName = 'Button Button--user Button--flat';\n props.menuClassName = 'Dropdown-menu--right';\n }\n\n view() {\n this.props.children = this.items().toArray();\n\n return super.view();\n }\n\n getButtonContent() {\n const user = app.session.user;\n\n return [\n avatar(user), ' ',\n <span className=\"Button-label\">{username(user)}</span>\n ];\n }\n\n /**\n * Build an item list for the contents of the dropdown menu.\n *\n * @return {ItemList}\n */\n items() {\n const items = new ItemList();\n const user = app.session.user;\n\n items.add('profile',\n LinkButton.component({\n icon: 'fas fa-user',\n children: app.translator.trans('core.forum.header.profile_button'),\n href: app.route.user(user)\n }),\n 100\n );\n\n items.add('settings',\n LinkButton.component({\n icon: 'fas fa-cog',\n children: app.translator.trans('core.forum.header.settings_button'),\n href: app.route('settings')\n }),\n 50\n );\n\n if (app.forum.attribute('adminUrl')) {\n items.add('administration',\n LinkButton.component({\n icon: 'fas fa-wrench',\n children: app.translator.trans('core.forum.header.admin_button'),\n href: app.forum.attribute('adminUrl'),\n target: '_blank',\n config: () => {}\n }),\n 0\n );\n }\n\n items.add('separator', Separator.component(), -90);\n\n items.add('logOut',\n Button.component({\n icon: 'fas fa-sign-out-alt',\n children: app.translator.trans('core.forum.header.log_out_button'),\n onclick: app.session.logout.bind(app.session)\n }),\n -100\n );\n\n return items;\n }\n}\n","import Component from '../../common/Component';\nimport listItems from '../../common/helpers/listItems';\nimport Button from '../../common/components/Button';\nimport LoadingIndicator from '../../common/components/LoadingIndicator';\nimport Discussion from '../../common/models/Discussion';\n\n/**\n * The `NotificationList` component displays a list of the logged-in user's\n * notifications, grouped by discussion.\n */\nexport default class NotificationList extends Component {\n init() {\n /**\n * Whether or not the notifications are loading.\n *\n * @type {Boolean}\n */\n this.loading = false;\n\n /**\n * Whether or not there are more results that can be loaded.\n *\n * @type {Boolean}\n */\n this.moreResults = false;\n }\n\n view() {\n const pages = app.cache.notifications || [];\n\n return (\n <div className=\"NotificationList\">\n <div className=\"NotificationList-header\">\n <div className=\"App-primaryControl\">\n {Button.component({\n className: 'Button Button--icon Button--link',\n icon: 'fas fa-check',\n title: app.translator.trans('core.forum.notifications.mark_all_as_read_tooltip'),\n onclick: this.markAllAsRead.bind(this)\n })}\n </div>\n\n <h4 className=\"App-titleControl App-titleControl--text\">{app.translator.trans('core.forum.notifications.title')}</h4>\n </div>\n\n <div className=\"NotificationList-content\">\n {pages.length ? pages.map(notifications => {\n const groups = [];\n const discussions = {};\n\n notifications.forEach(notification => {\n const subject = notification.subject();\n\n if (typeof subject === 'undefined') return;\n\n // Get the discussion that this notification is related to. If it's not\n // directly related to a discussion, it may be related to a post or\n // other entity which is related to a discussion.\n let discussion = false;\n if (subject instanceof Discussion) discussion = subject;\n else if (subject && subject.discussion) discussion = subject.discussion();\n\n // If the notification is not related to a discussion directly or\n // indirectly, then we will assign it to a neutral group.\n const key = discussion ? discussion.id() : 0;\n discussions[key] = discussions[key] || {discussion: discussion, notifications: []};\n discussions[key].notifications.push(notification);\n\n if (groups.indexOf(discussions[key]) === -1) {\n groups.push(discussions[key]);\n }\n });\n\n return groups.map(group => {\n const badges = group.discussion && group.discussion.badges().toArray();\n\n return (\n <div className=\"NotificationGroup\">\n {group.discussion\n ? (\n <a className=\"NotificationGroup-header\"\n href={app.route.discussion(group.discussion)}\n config={m.route}>\n {badges && badges.length ? <ul className=\"NotificationGroup-badges badges\">{listItems(badges)}</ul> : ''}\n {group.discussion.title()}\n </a>\n ) : (\n <div className=\"NotificationGroup-header\">\n {app.forum.attribute('title')}\n </div>\n )}\n\n <ul className=\"NotificationGroup-content\">\n {group.notifications.map(notification => {\n const NotificationComponent = app.notificationComponents[notification.contentType()];\n return NotificationComponent ? <li>{NotificationComponent.component({notification})}</li> : '';\n })}\n </ul>\n </div>\n );\n });\n }) : ''}\n {this.loading\n ? <LoadingIndicator className=\"LoadingIndicator--block\" />\n : (pages.length ? '' : <div className=\"NotificationList-empty\">{app.translator.trans('core.forum.notifications.empty_text')}</div>)}\n </div>\n </div>\n );\n }\n\n config(isInitialized, context) {\n if (isInitialized) return;\n\n const $notifications = this.$('.NotificationList-content');\n const $scrollParent = $notifications.css('overflow') === 'auto' ? $notifications : $(window);\n\n const scrollHandler = () => {\n const scrollTop = $scrollParent.scrollTop();\n const viewportHeight = $scrollParent.height();\n const contentTop = $scrollParent === $notifications ? 0 : $notifications.offset().top;\n const contentHeight = $notifications[0].scrollHeight;\n\n if (this.moreResults && !this.loading && scrollTop + viewportHeight >= contentTop + contentHeight) {\n this.loadMore();\n }\n };\n\n $scrollParent.on('scroll', scrollHandler);\n\n context.onunload = () => {\n $scrollParent.off('scroll', scrollHandler);\n };\n }\n\n /**\n * Load notifications into the application's cache if they haven't already\n * been loaded.\n */\n load() {\n if (app.session.user.newNotificationCount()) {\n delete app.cache.notifications;\n }\n\n if (app.cache.notifications) {\n return;\n }\n\n app.session.user.pushAttributes({newNotificationCount: 0});\n\n this.loadMore();\n }\n\n /**\n * Load the next page of notification results.\n *\n * @public\n */\n loadMore() {\n this.loading = true;\n m.redraw();\n\n const params = app.cache.notifications ? {page: {offset: app.cache.notifications.length * 10}} : null;\n\n return app.store.find('notifications', params)\n .then(this.parseResults.bind(this))\n .catch(() => {})\n .then(() => {\n this.loading = false;\n m.redraw();\n });\n }\n\n /**\n * Parse results and append them to the notification list.\n *\n * @param {Notification[]} results\n * @return {Notification[]}\n */\n parseResults(results) {\n app.cache.notifications = app.cache.notifications || [];\n app.cache.notifications.push(results);\n\n this.moreResults = !!results.payload.links.next;\n\n return results;\n }\n\n /**\n * Mark all of the notifications as read.\n */\n markAllAsRead() {\n if (!app.cache.notifications) return;\n\n app.session.user.pushAttributes({unreadNotificationCount: 0});\n\n app.cache.notifications.forEach(notifications => {\n notifications.forEach(notification => notification.pushAttributes({isRead: true}))\n });\n\n app.request({\n url: app.forum.attribute('apiUrl') + '/notifications/read',\n method: 'POST'\n });\n }\n}\n","import Dropdown from '../../common/components/Dropdown';\nimport icon from '../../common/helpers/icon';\nimport NotificationList from './NotificationList';\n\nexport default class NotificationsDropdown extends Dropdown {\n static initProps(props) {\n props.className = props.className || 'NotificationsDropdown';\n props.buttonClassName = props.buttonClassName || 'Button Button--flat';\n props.menuClassName = props.menuClassName || 'Dropdown-menu--right';\n props.label = props.label || app.translator.trans('core.forum.notifications.tooltip');\n props.icon = props.icon || 'fas fa-bell';\n\n super.initProps(props);\n }\n\n init() {\n super.init();\n\n this.list = new NotificationList();\n }\n\n getButton() {\n const newNotifications = this.getNewCount();\n const vdom = super.getButton();\n\n vdom.attrs.title = this.props.label;\n\n vdom.attrs.className += (newNotifications ? ' new' : '');\n vdom.attrs.onclick = this.onclick.bind(this);\n\n return vdom;\n }\n\n getButtonContent() {\n const unread = this.getUnreadCount();\n\n return [\n icon(this.props.icon, {className: 'Button-icon'}),\n unread ? <span className=\"NotificationsDropdown-unread\">{unread}</span> : '',\n <span className=\"Button-label\">{this.props.label}</span>\n ];\n }\n\n getMenu() {\n return (\n <div className={'Dropdown-menu ' + this.props.menuClassName} onclick={this.menuClick.bind(this)}>\n {this.showing ? this.list.render() : ''}\n </div>\n );\n }\n\n onclick() {\n if (app.drawer.isOpen()) {\n this.goToRoute();\n } else {\n this.list.load();\n }\n }\n\n goToRoute() {\n m.route(app.route('notifications'));\n }\n\n getUnreadCount() {\n return app.session.user.unreadNotificationCount();\n }\n\n getNewCount() {\n return app.session.user.newNotificationCount();\n }\n\n menuClick(e) {\n // Don't close the notifications dropdown if the user is opening a link in a\n // new tab or window.\n if (e.shiftKey || e.metaKey || e.ctrlKey || e.which === 2) e.stopPropagation();\n }\n}\n","import Component from '../../common/Component';\nimport Button from '../../common/components/Button';\nimport LogInModal from './LogInModal';\nimport SignUpModal from './SignUpModal';\nimport SessionDropdown from './SessionDropdown';\nimport SelectDropdown from '../../common/components/SelectDropdown';\nimport NotificationsDropdown from './NotificationsDropdown';\nimport ItemList from '../../common/utils/ItemList';\nimport listItems from '../../common/helpers/listItems';\n\n/**\n * The `HeaderSecondary` component displays secondary header controls, such as\n * the search box and the user menu. On the default skin, these are shown on the\n * right side of the header.\n */\nexport default class HeaderSecondary extends Component {\n view() {\n return (\n <ul className=\"Header-controls\">\n {listItems(this.items().toArray())}\n </ul>\n );\n }\n\n config(isInitialized, context) {\n // Since this component is 'above' the content of the page (that is, it is a\n // part of the global UI that persists between routes), we will flag the DOM\n // to be retained across route changes.\n context.retain = true;\n }\n\n /**\n * Build an item list for the controls.\n *\n * @return {ItemList}\n */\n items() {\n const items = new ItemList();\n\n items.add('search', app.search.render(), 30);\n\n if (app.forum.attribute(\"showLanguageSelector\") && Object.keys(app.data.locales).length > 1) {\n const locales = [];\n\n for (const locale in app.data.locales) {\n locales.push(Button.component({\n active: app.data.locale === locale,\n children: app.data.locales[locale],\n icon: app.data.locale === locale ? 'fas fa-check' : true,\n onclick: () => {\n if (app.session.user) {\n app.session.user.savePreferences({locale}).then(() => window.location.reload());\n } else {\n document.cookie = `locale=${locale}; path=/; expires=Tue, 19 Jan 2038 03:14:07 GMT`;\n window.location.reload();\n }\n }\n }));\n }\n\n items.add('locale', SelectDropdown.component({\n children: locales,\n buttonClassName: 'Button Button--link'\n }), 20);\n }\n\n if (app.session.user) {\n items.add('notifications', NotificationsDropdown.component(), 10);\n items.add('session', SessionDropdown.component(), 0);\n } else {\n if (app.forum.attribute('allowSignUp')) {\n items.add('signUp',\n Button.component({\n children: app.translator.trans('core.forum.header.sign_up_link'),\n className: 'Button Button--link',\n onclick: () => app.modal.show(new SignUpModal())\n }), 10\n );\n }\n\n items.add('logIn',\n Button.component({\n children: app.translator.trans('core.forum.header.log_in_link'),\n className: 'Button Button--link',\n onclick: () => app.modal.show(new LogInModal())\n }), 0\n );\n }\n\n return items;\n }\n}\n","import Button from '../../common/components/Button';\n\n/**\n * The `ComposerButton` component displays a button suitable for the composer\n * controls.\n */\nexport default class ComposerButton extends Button {\n static initProps(props) {\n super.initProps(props);\n\n props.className = props.className || 'Button Button--icon Button--link';\n }\n}\n","import Component from '../../common/Component';\nimport ItemList from '../../common/utils/ItemList';\nimport ComposerButton from './ComposerButton';\nimport listItems from '../../common/helpers/listItems';\nimport classList from '../../common/utils/classList';\n\n/**\n * The `Composer` component displays the composer. It can be loaded with a\n * content component with `load` and then its position/state can be altered with\n * `show`, `hide`, `close`, `minimize`, `fullScreen`, and `exitFullScreen`.\n */\nclass Composer extends Component {\n init() {\n /**\n * The composer's current position.\n *\n * @type {Composer.PositionEnum}\n */\n this.position = Composer.PositionEnum.HIDDEN;\n\n /**\n * The composer's intended height, which can be modified by the user\n * (by dragging the composer handle).\n *\n * @type {Integer}\n */\n this.height = null;\n\n /**\n * Whether or not the composer currently has focus.\n *\n * @type {Boolean}\n */\n this.active = false;\n }\n\n view() {\n const classes = {\n 'normal': this.position === Composer.PositionEnum.NORMAL,\n 'minimized': this.position === Composer.PositionEnum.MINIMIZED,\n 'fullScreen': this.position === Composer.PositionEnum.FULLSCREEN,\n 'active': this.active\n };\n classes.visible = classes.normal || classes.minimized || classes.fullScreen;\n\n // If the composer is minimized, tell the composer's content component that\n // it shouldn't let the user interact with it. Set up a handler so that if\n // the content IS clicked, the composer will be shown.\n if (this.component) this.component.props.disabled = classes.minimized;\n\n const showIfMinimized = this.position === Composer.PositionEnum.MINIMIZED ? this.show.bind(this) : undefined;\n\n return (\n <div className={'Composer ' + classList(classes)}>\n <div className=\"Composer-handle\" config={this.configHandle.bind(this)}/>\n <ul className=\"Composer-controls\">{listItems(this.controlItems().toArray())}</ul>\n <div className=\"Composer-content\" onclick={showIfMinimized}>\n {this.component ? this.component.render() : ''}\n </div>\n </div>\n );\n }\n\n config(isInitialized, context) {\n // Set the height of the Composer element and its contents on each redraw,\n // so that they do not lose it if their DOM elements are recreated.\n this.updateHeight();\n\n if (isInitialized) return;\n\n // Since this component is a part of the global UI that persists between\n // routes, we will flag the DOM to be retained across route changes.\n context.retain = true;\n\n this.initializeHeight();\n this.$().hide().css('bottom', -this.computedHeight());\n\n // Whenever any of the inputs inside the composer are have focus, we want to\n // add a class to the composer to draw attention to it.\n this.$().on('focus blur', ':input', e => {\n this.active = e.type === 'focusin';\n m.redraw();\n });\n\n // When the escape key is pressed on any inputs, close the composer.\n this.$().on('keydown', ':input', 'esc', () => this.close());\n\n // Don't let the user leave the page without first giving the composer's\n // component a chance to scream at the user to make sure they don't\n // unintentionally lose any contnet.\n window.onbeforeunload = () => {\n return (this.component && this.component.preventExit()) || undefined;\n };\n\n const handlers = {};\n\n $(window).on('resize', handlers.onresize = this.updateHeight.bind(this)).resize();\n\n $(document)\n .on('mousemove', handlers.onmousemove = this.onmousemove.bind(this))\n .on('mouseup', handlers.onmouseup = this.onmouseup.bind(this));\n\n context.onunload = () => {\n $(window).off('resize', handlers.onresize);\n\n $(document)\n .off('mousemove', handlers.onmousemove)\n .off('mouseup', handlers.onmouseup);\n };\n }\n\n /**\n * Add the necessary event handlers to the composer's handle so that it can\n * be used to resize the composer.\n *\n * @param {DOMElement} element\n * @param {Boolean} isInitialized\n */\n configHandle(element, isInitialized) {\n if (isInitialized) return;\n\n const composer = this;\n\n $(element).css('cursor', 'row-resize')\n .bind('dragstart mousedown', e => e.preventDefault())\n .mousedown(function(e) {\n composer.mouseStart = e.clientY;\n composer.heightStart = composer.$().height();\n composer.handle = $(this);\n $('body').css('cursor', 'row-resize');\n });\n }\n\n /**\n * Resize the composer according to mouse movement.\n *\n * @param {Event} e\n */\n onmousemove(e) {\n if (!this.handle) return;\n\n // Work out how much the mouse has been moved, and set the height\n // relative to the old one based on that. Then update the content's\n // height so that it fills the height of the composer, and update the\n // body's padding.\n const deltaPixels = this.mouseStart - e.clientY;\n this.changeHeight(this.heightStart + deltaPixels);\n\n // Update the body's padding-bottom so that no content on the page will ever\n // get permanently hidden behind the composer. If the user is already\n // scrolled to the bottom of the page, then we will keep them scrolled to\n // the bottom after the padding has been updated.\n const scrollTop = $(window).scrollTop();\n const anchorToBottom = scrollTop > 0 && scrollTop + $(window).height() >= $(document).height();\n this.updateBodyPadding(anchorToBottom);\n }\n\n /**\n * Finish resizing the composer when the mouse is released.\n */\n onmouseup() {\n if (!this.handle) return;\n\n this.handle = null;\n $('body').css('cursor', '');\n }\n\n /**\n * Update the DOM to reflect the composer's current height. This involves\n * setting the height of the composer's root element, and adjusting the height\n * of any flexible elements inside the composer's body.\n */\n updateHeight() {\n const height = this.computedHeight();\n const $flexible = this.$('.Composer-flexible');\n\n this.$().height(height);\n\n if ($flexible.length) {\n const headerHeight = $flexible.offset().top - this.$().offset().top;\n const paddingBottom = parseInt($flexible.css('padding-bottom'), 10);\n const footerHeight = this.$('.Composer-footer').outerHeight(true);\n\n $flexible.height(this.$().outerHeight() - headerHeight - paddingBottom - footerHeight);\n }\n }\n\n /**\n * Update the amount of padding-bottom on the body so that the page's\n * content will still be visible above the composer when the page is\n * scrolled right to the bottom.\n */\n updateBodyPadding() {\n const visible = this.position !== Composer.PositionEnum.HIDDEN &&\n this.position !== Composer.PositionEnum.MINIMIZED &&\n this.$().css('position') !== 'absolute';\n\n const paddingBottom = visible\n ? this.computedHeight() - parseInt($('#app').css('padding-bottom'), 10)\n : 0;\n\n $('#content').css({paddingBottom});\n }\n\n /**\n * Determine whether or not the Composer is covering the screen.\n *\n * This will be true if the Composer is in full-screen mode on desktop, or\n * if the Composer is positioned absolutely as on mobile devices.\n *\n * @return {Boolean}\n * @public\n */\n isFullScreen() {\n return this.position === Composer.PositionEnum.FULLSCREEN || this.$().css('position') === 'absolute';\n }\n\n /**\n * Confirm with the user that they want to close the composer and lose their\n * content.\n *\n * @return {Boolean} Whether or not the exit was cancelled.\n */\n preventExit() {\n if (this.component) {\n const preventExit = this.component.preventExit();\n\n if (preventExit) {\n return !confirm(preventExit);\n }\n }\n }\n\n /**\n * Load a content component into the composer.\n *\n * @param {Component} component\n * @public\n */\n load(component) {\n if (this.preventExit()) return;\n\n // If we load a similar component into the composer, then Mithril will be\n // able to diff the old/new contents and some DOM-related state from the\n // old composer will remain. To prevent this from happening, we clear the\n // component and force a redraw, so that the new component will be working\n // on a blank slate.\n if (this.component) {\n this.clear();\n m.redraw(true);\n }\n\n this.component = component;\n }\n\n /**\n * Clear the composer's content component.\n *\n * @public\n */\n clear() {\n this.component = null;\n }\n\n /**\n * Animate the Composer into the given position.\n *\n * @param {Composer.PositionEnum} position\n */\n animateToPosition(position) {\n // Before we redraw the composer to its new state, we need to save the\n // current height of the composer, as well as the page's scroll position, so\n // that we can smoothly transition from the old to the new state.\n const oldPosition = this.position;\n const $composer = this.$().stop(true);\n const oldHeight = $composer.outerHeight();\n const scrollTop = $(window).scrollTop();\n\n this.position = position;\n\n m.redraw(true);\n\n // Now that we've redrawn and the composer's DOM has been updated, we want\n // to update the composer's height. Once we've done that, we'll capture the\n // real value to use as the end point for our animation later on.\n $composer.show();\n this.updateHeight();\n\n const newHeight = $composer.outerHeight();\n\n if (oldPosition === Composer.PositionEnum.HIDDEN) {\n $composer.css({bottom: -newHeight, height: newHeight});\n } else {\n $composer.css({height: oldHeight});\n }\n\n $composer.animate({bottom: 0, height: newHeight}, 'fast', () => this.component.focus());\n\n this.updateBodyPadding();\n $(window).scrollTop(scrollTop);\n }\n\n /**\n * Show the Composer backdrop.\n */\n showBackdrop() {\n this.$backdrop = $('<div/>')\n .addClass('composer-backdrop')\n .appendTo('body');\n }\n\n /**\n * Hide the Composer backdrop.\n */\n hideBackdrop() {\n if (this.$backdrop) this.$backdrop.remove();\n }\n\n /**\n * Show the composer.\n *\n * @public\n */\n show() {\n if (this.position === Composer.PositionEnum.NORMAL || this.position === Composer.PositionEnum.FULLSCREEN) {\n return;\n }\n\n this.animateToPosition(Composer.PositionEnum.NORMAL);\n\n if (this.isFullScreen()) {\n this.$().css('top', $(window).scrollTop());\n this.showBackdrop();\n this.component.focus();\n }\n }\n\n /**\n * Close the composer.\n *\n * @public\n */\n hide() {\n const $composer = this.$();\n\n // Animate the composer sliding down off the bottom edge of the viewport.\n // Only when the animation is completed, update the Composer state flag and\n // other elements on the page.\n $composer.stop(true).animate({bottom: -$composer.height()}, 'fast', () => {\n this.position = Composer.PositionEnum.HIDDEN;\n this.clear();\n m.redraw();\n\n $composer.hide();\n this.hideBackdrop();\n this.updateBodyPadding();\n });\n }\n\n /**\n * Confirm with the user so they don't lose their content, then close the\n * composer.\n *\n * @public\n */\n close() {\n if (!this.preventExit()) {\n this.hide();\n }\n }\n\n /**\n * Minimize the composer. Has no effect if the composer is hidden.\n *\n * @public\n */\n minimize() {\n if (this.position === Composer.PositionEnum.HIDDEN) return;\n\n this.animateToPosition(Composer.PositionEnum.MINIMIZED);\n\n this.$().css('top', 'auto');\n this.hideBackdrop();\n }\n\n /**\n * Take the composer into fullscreen mode. Has no effect if the composer is\n * hidden.\n *\n * @public\n */\n fullScreen() {\n if (this.position !== Composer.PositionEnum.HIDDEN) {\n this.position = Composer.PositionEnum.FULLSCREEN;\n m.redraw();\n this.updateHeight();\n this.component.focus();\n }\n }\n\n /**\n * Exit fullscreen mode.\n *\n * @public\n */\n exitFullScreen() {\n if (this.position === Composer.PositionEnum.FULLSCREEN) {\n this.position = Composer.PositionEnum.NORMAL;\n m.redraw();\n this.updateHeight();\n this.component.focus();\n }\n }\n\n /**\n * Build an item list for the composer's controls.\n *\n * @return {ItemList}\n */\n controlItems() {\n const items = new ItemList();\n\n if (this.position === Composer.PositionEnum.FULLSCREEN) {\n items.add('exitFullScreen', ComposerButton.component({\n icon: 'fas fa-compress',\n title: app.translator.trans('core.forum.composer.exit_full_screen_tooltip'),\n onclick: this.exitFullScreen.bind(this)\n }));\n } else {\n if (this.position !== Composer.PositionEnum.MINIMIZED) {\n items.add('minimize', ComposerButton.component({\n icon: 'fas fa-minus minimize',\n title: app.translator.trans('core.forum.composer.minimize_tooltip'),\n onclick: this.minimize.bind(this),\n itemClassName: 'App-backControl'\n }));\n\n items.add('fullScreen', ComposerButton.component({\n icon: 'fas fa-expand',\n title: app.translator.trans('core.forum.composer.full_screen_tooltip'),\n onclick: this.fullScreen.bind(this)\n }));\n }\n\n items.add('close', ComposerButton.component({\n icon: 'fas fa-times',\n title: app.translator.trans('core.forum.composer.close_tooltip'),\n onclick: this.close.bind(this)\n }));\n }\n\n return items;\n }\n\n /**\n * Initialize default Composer height.\n */\n initializeHeight() {\n this.height = localStorage.getItem('composerHeight');\n\n if (!this.height) {\n this.height = this.defaultHeight();\n }\n }\n\n /**\n * Default height of the Composer in case none is saved.\n * @returns {Integer}\n */\n defaultHeight() {\n return this.$().height();\n }\n\n /**\n * Minimum height of the Composer.\n * @returns {Integer}\n */\n minimumHeight() {\n return 200;\n }\n\n /**\n * Maxmimum height of the Composer.\n * @returns {Integer}\n */\n maximumHeight() {\n return $(window).height() - $('#header').outerHeight();\n }\n\n /**\n * Computed the composer's current height, based on the intended height, and\n * the composer's current state. This will be applied to the composer's\n * content's DOM element.\n * @returns {Integer|String}\n */\n computedHeight() {\n // If the composer is minimized, then we don't want to set a height; we'll\n // let the CSS decide how high it is. If it's fullscreen, then we need to\n // make it as high as the window.\n if (this.position === Composer.PositionEnum.MINIMIZED) {\n return '';\n } else if (this.position === Composer.PositionEnum.FULLSCREEN) {\n return $(window).height();\n }\n\n // Otherwise, if it's normal or hidden, then we use the intended height.\n // We don't let the composer get too small or too big, though.\n return Math.max(this.minimumHeight(), Math.min(this.height, this.maximumHeight()));\n }\n\n /**\n * Save a new Composer height and update the DOM.\n * @param {Integer} height\n */\n changeHeight(height) {\n this.height = height;\n this.updateHeight();\n\n localStorage.setItem('composerHeight', this.height);\n }\n}\n\nComposer.PositionEnum = {\n HIDDEN: 'hidden',\n NORMAL: 'normal',\n MINIMIZED: 'minimized',\n FULLSCREEN: 'fullScreen'\n};\n\nexport default Composer;\n","import Component from '../../common/Component';\nimport avatar from '../../common/helpers/avatar';\nimport icon from '../../common/helpers/icon';\nimport humanTime from '../../common/helpers/humanTime';\n\n/**\n * The `Notification` component abstract displays a single notification.\n * Subclasses should implement the `icon`, `href`, and `content` methods.\n *\n * ### Props\n *\n * - `notification`\n *\n * @abstract\n */\nexport default class Notification extends Component {\n view() {\n const notification = this.props.notification;\n const href = this.href();\n\n return (\n <a className={'Notification Notification--' + notification.contentType() + ' ' + (!notification.isRead() ? 'unread' : '')}\n href={href}\n config={function(element, isInitialized) {\n if (href.indexOf('://') === -1) m.route.apply(this, arguments);\n\n if (!isInitialized) $(element).click(this.markAsRead.bind(this));\n }}>\n {avatar(notification.fromUser())}\n {icon(this.icon(), {className: 'Notification-icon'})}\n <span className=\"Notification-content\">{this.content()}</span>\n {humanTime(notification.createdAt())}\n <div className=\"Notification-excerpt\">\n {this.excerpt()}\n </div>\n </a>\n );\n }\n\n /**\n * Get the name of the icon that should be displayed in the notification.\n *\n * @return {String}\n * @abstract\n */\n icon() {\n }\n\n /**\n * Get the URL that the notification should link to.\n *\n * @return {String}\n * @abstract\n */\n href() {\n }\n\n /**\n * Get the content of the notification.\n *\n * @return {VirtualElement}\n * @abstract\n */\n content() {\n }\n\n /**\n * Get the excerpt of the notification.\n *\n * @return {VirtualElement}\n * @abstract\n */\n excerpt() {\n }\n\n /**\n * Mark the notification as read.\n */\n markAsRead() {\n if (this.props.notification.isRead()) return;\n\n app.session.user.pushAttributes({unreadNotificationCount: app.session.user.unreadNotificationCount() - 1});\n\n this.props.notification.save({isRead: true});\n }\n}\n","import Notification from './Notification';\n\n/**\n * The `DiscussionRenamedNotification` component displays a notification which\n * indicates that a discussion has had its title changed.\n *\n * ### Props\n *\n * - All of the props for Notification\n */\nexport default class DiscussionRenamedNotification extends Notification {\n icon() {\n return 'fas fa-pencil-alt';\n }\n\n href() {\n const notification = this.props.notification;\n\n return app.route.discussion(notification.subject(), notification.content().postNumber);\n }\n\n content() {\n return app.translator.trans('core.forum.notifications.discussion_renamed_text', {user: this.props.notification.fromUser()});\n }\n}\n","import ComposerBody from './ComposerBody';\nimport icon from '../../common/helpers/icon';\n\nfunction minimizeComposerIfFullScreen(e) {\n if (app.composer.isFullScreen()) {\n app.composer.minimize();\n e.stopPropagation();\n }\n}\n\n/**\n * The `EditPostComposer` component displays the composer content for editing a\n * post. It sets the initial content to the content of the post that is being\n * edited, and adds a header control to indicate which post is being edited.\n *\n * ### Props\n *\n * - All of the props for ComposerBody\n * - `post`\n */\nexport default class EditPostComposer extends ComposerBody {\n init() {\n super.init();\n\n this.editor.props.preview = e => {\n minimizeComposerIfFullScreen(e);\n\n m.route(app.route.post(this.props.post));\n };\n }\n\n static initProps(props) {\n super.initProps(props);\n\n props.submitLabel = props.submitLabel || app.translator.trans('core.forum.composer_edit.submit_button');\n props.confirmExit = props.confirmExit || app.translator.trans('core.forum.composer_edit.discard_confirmation');\n props.originalContent = props.originalContent || props.post.content();\n props.user = props.user || props.post.user();\n\n props.post.editedContent = props.originalContent;\n }\n\n headerItems() {\n const items = super.headerItems();\n const post = this.props.post;\n\n const routeAndMinimize = function(element, isInitialized) {\n if (isInitialized) return;\n $(element).on('click', minimizeComposerIfFullScreen);\n m.route.apply(this, arguments);\n };\n\n items.add('title', (\n <h3>\n {icon('fas fa-pencil-alt')} {' '}\n <a href={app.route.discussion(post.discussion(), post.number())} config={routeAndMinimize}>\n {app.translator.trans('core.forum.composer_edit.post_link', {number: post.number(), discussion: post.discussion().title()})}\n </a>\n </h3>\n ));\n\n return items;\n }\n\n /**\n * Get the data to submit to the server when the post is saved.\n *\n * @return {Object}\n */\n data() {\n return {\n content: this.content()\n };\n }\n\n onsubmit() {\n this.loading = true;\n\n const data = this.data();\n\n this.props.post.save(data).then(\n () => app.composer.hide(),\n this.loaded.bind(this)\n );\n }\n}\n","import EditPostComposer from '../components/EditPostComposer';\nimport Button from '../../common/components/Button';\nimport Separator from '../../common/components/Separator';\nimport ItemList from '../../common/utils/ItemList';\n\n/**\n * The `PostControls` utility constructs a list of buttons for a post which\n * perform actions on it.\n */\nexport default {\n /**\n * Get a list of controls for a post.\n *\n * @param {Post} post\n * @param {*} context The parent component under which the controls menu will\n * be displayed.\n * @return {ItemList}\n * @public\n */\n controls(post, context) {\n const items = new ItemList();\n\n ['user', 'moderation', 'destructive'].forEach(section => {\n const controls = this[section + 'Controls'](post, context).toArray();\n if (controls.length) {\n controls.forEach(item => items.add(item.itemName, item));\n items.add(section + 'Separator', Separator.component());\n }\n });\n\n return items;\n },\n\n /**\n * Get controls for a post pertaining to the current user (e.g. report).\n *\n * @param {Post} post\n * @param {*} context The parent component under which the controls menu will\n * be displayed.\n * @return {ItemList}\n * @protected\n */\n userControls(post, context) {\n return new ItemList();\n },\n\n /**\n * Get controls for a post pertaining to moderation (e.g. edit).\n *\n * @param {Post} post\n * @param {*} context The parent component under which the controls menu will\n * be displayed.\n * @return {ItemList}\n * @protected\n */\n moderationControls(post, context) {\n const items = new ItemList();\n\n if (post.contentType() === 'comment' && post.canEdit()) {\n if (!post.isHidden()) {\n items.add('edit', Button.component({\n icon: 'fas fa-pencil-alt',\n children: app.translator.trans('core.forum.post_controls.edit_button'),\n onclick: this.editAction.bind(post)\n }));\n }\n }\n\n return items;\n },\n\n /**\n * Get controls for a post that are destructive (e.g. delete).\n *\n * @param {Post} post\n * @param {*} context The parent component under which the controls menu will\n * be displayed.\n * @return {ItemList}\n * @protected\n */\n destructiveControls(post, context) {\n const items = new ItemList();\n\n if (post.contentType() === 'comment' && !post.isHidden()) {\n if (post.canHide()) {\n items.add('hide', Button.component({\n icon: 'far fa-trash-alt',\n children: app.translator.trans('core.forum.post_controls.delete_button'),\n onclick: this.hideAction.bind(post)\n }));\n }\n } else {\n if (post.contentType() === 'comment' && post.canHide()) {\n items.add('restore', Button.component({\n icon: 'fas fa-reply',\n children: app.translator.trans('core.forum.post_controls.restore_button'),\n onclick: this.restoreAction.bind(post)\n }));\n }\n if (post.canDelete()) {\n items.add('delete', Button.component({\n icon: 'fas fa-times',\n children: app.translator.trans('core.forum.post_controls.delete_forever_button'),\n onclick: this.deleteAction.bind(post, context)\n }));\n }\n }\n\n return items;\n },\n\n /**\n * Open the composer to edit a post.\n */\n editAction() {\n app.composer.load(new EditPostComposer({ post: this }));\n app.composer.show();\n },\n\n /**\n * Hide a post.\n *\n * @return {Promise}\n */\n hideAction() {\n this.pushAttributes({ hiddenAt: new Date(), hiddenUser: app.session.user });\n\n return this.save({ isHidden: true }).then(() => m.redraw());\n },\n\n /**\n * Restore a post.\n *\n * @return {Promise}\n */\n restoreAction() {\n this.pushAttributes({ hiddenAt: null, hiddenUser: null });\n\n return this.save({ isHidden: false }).then(() => m.redraw());\n },\n\n /**\n * Delete a post.\n *\n * @return {Promise}\n */\n deleteAction(context) {\n if (context) context.loading = true;\n\n return this.delete()\n .then(() => {\n const discussion = this.discussion();\n\n discussion.removePost(this.id());\n\n // If this was the last post in the discussion, then we will assume that\n // the whole discussion was deleted too.\n if (!discussion.postIds().length) {\n // If there is a discussion list in the cache, remove this discussion.\n if (app.cache.discussionList) {\n app.cache.discussionList.removeDiscussion(discussion);\n }\n\n if (app.viewingDiscussion(discussion)) {\n app.history.back();\n }\n }\n })\n .catch(() => {})\n .then(() => {\n if (context) context.loading = false;\n m.redraw();\n });\n }\n};\n","import Component from '../../common/Component';\nimport SubtreeRetainer from '../../common/utils/SubtreeRetainer';\nimport Dropdown from '../../common/components/Dropdown';\nimport PostControls from '../utils/PostControls';\nimport listItems from '../../common/helpers/listItems';\nimport ItemList from '../../common/utils/ItemList';\n\n/**\n * The `Post` component displays a single post. The basic post template just\n * includes a controls dropdown; subclasses must implement `content` and `attrs`\n * methods.\n *\n * ### Props\n *\n * - `post`\n *\n * @abstract\n */\nexport default class Post extends Component {\n init() {\n this.loading = false;\n\n /**\n * Set up a subtree retainer so that the post will not be redrawn\n * unless new data comes in.\n *\n * @type {SubtreeRetainer}\n */\n this.subtree = new SubtreeRetainer(\n () => this.props.post.freshness,\n () => {\n const user = this.props.post.user();\n return user && user.freshness;\n },\n () => this.controlsOpen\n );\n }\n\n view() {\n const attrs = this.attrs();\n\n attrs.className = 'Post ' + (this.loading ? 'Post--loading ' : '') + (attrs.className || '');\n\n return (\n <article {...attrs}>\n {this.subtree.retain() || (() => {\n const controls = PostControls.controls(this.props.post, this).toArray();\n\n return (\n <div>\n {this.content()}\n <aside className=\"Post-actions\">\n <ul>\n {listItems(this.actionItems().toArray())}\n {controls.length ? <li>\n <Dropdown\n className=\"Post-controls\"\n buttonClassName=\"Button Button--icon Button--flat\"\n menuClassName=\"Dropdown-menu--right\"\n icon=\"fas fa-ellipsis-h\"\n onshow={() => this.$('.Post-actions').addClass('open')}\n onhide={() => this.$('.Post-actions').removeClass('open')}>\n {controls}\n </Dropdown>\n </li> : ''}\n </ul>\n </aside>\n <footer className=\"Post-footer\"><ul>{listItems(this.footerItems().toArray())}</ul></footer>\n </div>\n );\n })()}\n </article>\n );\n }\n\n config(isInitialized) {\n const $actions = this.$('.Post-actions');\n const $controls = this.$('.Post-controls');\n\n $actions.toggleClass('open', $controls.hasClass('open'));\n }\n\n /**\n * Get attributes for the post element.\n *\n * @return {Object}\n */\n attrs() {\n return {};\n }\n\n /**\n * Get the post's content.\n *\n * @return {Array}\n */\n content() {\n return [];\n }\n\n /**\n * Build an item list for the post's actions.\n *\n * @return {ItemList}\n */\n actionItems() {\n return new ItemList();\n }\n\n /**\n * Build an item list for the post's footer.\n *\n * @return {ItemList}\n */\n footerItems() {\n return new ItemList();\n }\n}\n","import Modal from '../../common/components/Modal';\nimport Button from '../../common/components/Button';\nimport GroupBadge from '../../common/components/GroupBadge';\nimport Group from '../../common/models/Group';\nimport extractText from '../../common/utils/extractText';\n\n/**\n * The `EditUserModal` component displays a modal dialog with a login form.\n */\nexport default class EditUserModal extends Modal {\n init() {\n super.init();\n\n const user = this.props.user;\n\n this.username = m.prop(user.username() || '');\n this.email = m.prop(user.email() || '');\n this.isEmailConfirmed = m.prop(user.isEmailConfirmed() || false);\n this.setPassword = m.prop(false);\n this.password = m.prop(user.password() || '');\n this.groups = {};\n\n app.store.all('groups')\n .filter(group => [Group.GUEST_ID, Group.MEMBER_ID].indexOf(group.id()) === -1)\n .forEach(group => this.groups[group.id()] = m.prop(user.groups().indexOf(group) !== -1));\n }\n\n className() {\n return 'EditUserModal Modal--small';\n }\n\n title() {\n return app.translator.trans('core.forum.edit_user.title');\n }\n\n content() {\n return (\n <div className=\"Modal-body\">\n <div className=\"Form\">\n <div className=\"Form-group\">\n <label>{app.translator.trans('core.forum.edit_user.username_heading')}</label>\n <input className=\"FormControl\" placeholder={extractText(app.translator.trans('core.forum.edit_user.username_label'))}\n bidi={this.username} />\n </div>\n\n {app.session.user !== this.props.user ? [\n <div className=\"Form-group\">\n <label>{app.translator.trans('core.forum.edit_user.email_heading')}</label>\n <div>\n <input className=\"FormControl\" placeholder={extractText(app.translator.trans('core.forum.edit_user.email_label'))}\n bidi={this.email} />\n </div>\n {!this.isEmailConfirmed() ? (\n <div>\n {Button.component({\n className: 'Button Button--block',\n children: app.translator.trans('core.forum.edit_user.activate_button'),\n loading: this.loading,\n onclick: this.activate.bind(this)\n })}\n </div>\n ) : ''}\n </div>,\n\n <div className=\"Form-group\">\n <label>{app.translator.trans('core.forum.edit_user.password_heading')}</label>\n <div>\n <label className=\"checkbox\">\n <input type=\"checkbox\" checked={this.setPassword()} onchange={e => {\n this.setPassword(e.target.checked);\n m.redraw(true);\n if (e.target.checked) this.$('[name=password]').select();\n m.redraw.strategy('none');\n }}/>\n {app.translator.trans('core.forum.edit_user.set_password_label')}\n </label>\n {this.setPassword() ? (\n <input className=\"FormControl\" type=\"password\" name=\"password\" placeholder={extractText(app.translator.trans('core.forum.edit_user.password_label'))}\n bidi={this.password} />\n ) : ''}\n </div>\n </div>\n ] : ''}\n\n <div className=\"Form-group EditUserModal-groups\">\n <label>{app.translator.trans('core.forum.edit_user.groups_heading')}</label>\n <div>\n {Object.keys(this.groups)\n .map(id => app.store.getById('groups', id))\n .map(group => (\n <label className=\"checkbox\">\n <input type=\"checkbox\"\n bidi={this.groups[group.id()]}\n disabled={this.props.user.id() === '1' && group.id() === Group.ADMINISTRATOR_ID} />\n {GroupBadge.component({group, label: ''})} {group.nameSingular()}\n </label>\n ))}\n </div>\n </div>\n\n <div className=\"Form-group\">\n {Button.component({\n className: 'Button Button--primary',\n type: 'submit',\n loading: this.loading,\n children: app.translator.trans('core.forum.edit_user.submit_button')\n })}\n </div>\n </div>\n </div>\n );\n }\n\n activate() {\n this.loading = true;\n const data = {\n username: this.username(),\n isEmailConfirmed: true,\n };\n this.props.user.save(data, {errorHandler: this.onerror.bind(this)})\n .then(() => {\n this.isEmailConfirmed(true);\n this.loading = false;\n m.redraw();\n })\n .catch(() => {\n this.loading = false;\n m.redraw();\n });\n }\n\n data() {\n const groups = Object.keys(this.groups)\n .filter(id => this.groups[id]())\n .map(id => app.store.getById('groups', id));\n\n const data = {\n username: this.username(),\n relationships: {groups}\n };\n\n if (app.session.user !== this.props.user) {\n data.email = this.email();\n }\n\n if (this.setPassword()) {\n data.password = this.password();\n }\n\n return data;\n }\n\n onsubmit(e) {\n e.preventDefault();\n\n this.loading = true;\n\n this.props.user.save(this.data(), {errorHandler: this.onerror.bind(this)})\n .then(this.hide.bind(this))\n .catch(() => {\n this.loading = false;\n m.redraw();\n });\n }\n}\n","/**\n * Setup the sidebar DOM element to be affixed to the top of the viewport\n * using Bootstrap's affix plugin.\n *\n * @param {DOMElement} element\n * @param {Boolean} isInitialized\n * @param {Object} context\n */\nexport default function affixSidebar(element, isInitialized, context) {\n if (isInitialized) return;\n\n const onresize = () => {\n const $sidebar = $(element);\n const $header = $('#header');\n const $footer = $('#footer');\n const $affixElement = $sidebar.find('> ul');\n\n $(window).off('.affix');\n $affixElement\n .removeClass('affix affix-top affix-bottom')\n .removeData('bs.affix');\n\n // Don't affix the sidebar if it is taller than the viewport (otherwise\n // there would be no way to scroll through its content).\n if ($sidebar.outerHeight(true) > $(window).height() - $header.outerHeight(true)) return;\n\n $affixElement.affix({\n offset: {\n top: () => $sidebar.offset().top - $header.outerHeight(true) - parseInt($sidebar.css('margin-top'), 10),\n bottom: () => this.bottom = $footer.outerHeight(true)\n }\n });\n };\n\n // Register the affix plugin to execute on every window resize (and trigger)\n $(window).on('resize', onresize).resize();\n\n context.onunload = () => {\n $(window).off('resize', onresize);\n }\n}\n","import Page from './Page';\nimport ItemList from '../../common/utils/ItemList';\nimport affixSidebar from '../utils/affixSidebar';\nimport UserCard from './UserCard';\nimport LoadingIndicator from '../../common/components/LoadingIndicator';\nimport SelectDropdown from '../../common/components/SelectDropdown';\nimport LinkButton from '../../common/components/LinkButton';\nimport Separator from '../../common/components/Separator';\nimport listItems from '../../common/helpers/listItems';\n\n/**\n * The `UserPage` component shows a user's profile. It can be extended to show\n * content inside of the content area. See `ActivityPage` and `SettingsPage` for\n * examples.\n *\n * @abstract\n */\nexport default class UserPage extends Page {\n init() {\n super.init();\n\n /**\n * The user this page is for.\n *\n * @type {User}\n */\n this.user = null;\n\n this.bodyClass = 'App--user';\n }\n\n view() {\n return (\n <div className=\"UserPage\">\n {this.user ? [\n UserCard.component({\n user: this.user,\n className: 'Hero UserHero',\n editable: this.user.canEdit() || this.user === app.session.user,\n controlsButtonClassName: 'Button'\n }),\n <div className=\"container\">\n <div className=\"sideNavContainer\">\n <nav className=\"sideNav UserPage-nav\" config={affixSidebar}>\n <ul>{listItems(this.sidebarItems().toArray())}</ul>\n </nav>\n <div className=\"sideNavOffset UserPage-content\">\n {this.content()}\n </div>\n </div>\n </div>\n ] : [\n LoadingIndicator.component({className: 'LoadingIndicator--block'})\n ]}\n </div>\n );\n }\n\n /**\n * Get the content to display in the user page.\n *\n * @return {VirtualElement}\n */\n content() {\n }\n\n /**\n * Initialize the component with a user, and trigger the loading of their\n * activity feed.\n *\n * @param {User} user\n * @protected\n */\n show(user) {\n this.user = user;\n\n app.setTitle(user.displayName());\n\n m.redraw();\n }\n\n /**\n * Given a username, load the user's profile from the store, or make a request\n * if we don't have it yet. Then initialize the profile page with that user.\n *\n * @param {String} username\n */\n loadUser(username) {\n const lowercaseUsername = username.toLowerCase();\n\n app.store.all('users').some(user => {\n if (user.username().toLowerCase() === lowercaseUsername && user.joinTime()) {\n this.show(user);\n return true;\n }\n });\n\n if (!this.user) {\n app.store.find('users', username).then(this.show.bind(this));\n }\n }\n\n /**\n * Build an item list for the content of the sidebar.\n *\n * @return {ItemList}\n */\n sidebarItems() {\n const items = new ItemList();\n\n items.add('nav',\n SelectDropdown.component({\n children: this.navItems().toArray(),\n className: 'App-titleControl',\n buttonClassName: 'Button'\n })\n );\n\n return items;\n }\n\n /**\n * Build an item list for the navigation in the sidebar.\n *\n * @return {ItemList}\n */\n navItems() {\n const items = new ItemList();\n const user = this.user;\n\n items.add('posts',\n LinkButton.component({\n href: app.route('user.posts', {username: user.username()}),\n children: [app.translator.trans('core.forum.user.posts_link'), <span className=\"Button-badge\">{user.commentCount()}</span>],\n icon: 'far fa-comment'\n }),\n 100\n );\n\n items.add('discussions',\n LinkButton.component({\n href: app.route('user.discussions', {username: user.username()}),\n children: [app.translator.trans('core.forum.user.discussions_link'), <span className=\"Button-badge\">{user.discussionCount()}</span>],\n icon: 'fas fa-bars'\n }),\n 90\n );\n\n if (app.session.user === user) {\n items.add('separator', Separator.component(), -90);\n items.add('settings',\n LinkButton.component({\n href: app.route('settings'),\n children: app.translator.trans('core.forum.user.settings_link'),\n icon: 'fas fa-cog'\n }),\n -100\n );\n }\n\n return items;\n }\n}\n","import Button from '../../common/components/Button';\nimport Separator from '../../common/components/Separator';\nimport EditUserModal from '../components/EditUserModal';\nimport UserPage from '../components/UserPage';\nimport ItemList from '../../common/utils/ItemList';\n\n/**\n * The `UserControls` utility constructs a list of buttons for a user which\n * perform actions on it.\n */\nexport default {\n /**\n * Get a list of controls for a user.\n *\n * @param {User} user\n * @param {*} context The parent component under which the controls menu will\n * be displayed.\n * @return {ItemList}\n * @public\n */\n controls(user, context) {\n const items = new ItemList();\n\n ['user', 'moderation', 'destructive'].forEach(section => {\n const controls = this[section + 'Controls'](user, context).toArray();\n if (controls.length) {\n controls.forEach(item => items.add(item.itemName, item));\n items.add(section + 'Separator', Separator.component());\n }\n });\n\n return items;\n },\n\n /**\n * Get controls for a user pertaining to the current user (e.g. poke, follow).\n *\n * @param {User} user\n * @param {*} context The parent component under which the controls menu will\n * be displayed.\n * @return {ItemList}\n * @protected\n */\n userControls() {\n return new ItemList();\n },\n\n /**\n * Get controls for a user pertaining to moderation (e.g. suspend, edit).\n *\n * @param {User} user\n * @param {*} context The parent component under which the controls menu will\n * be displayed.\n * @return {ItemList}\n * @protected\n */\n moderationControls(user) {\n const items = new ItemList();\n\n if (user.canEdit()) {\n items.add('edit', Button.component({\n icon: 'fas fa-pencil-alt',\n children: app.translator.trans('core.forum.user_controls.edit_button'),\n onclick: this.editAction.bind(user)\n }));\n }\n\n return items;\n },\n\n /**\n * Get controls for a user which are destructive (e.g. delete).\n *\n * @param {User} user\n * @param {*} context The parent component under which the controls menu will\n * be displayed.\n * @return {ItemList}\n * @protected\n */\n destructiveControls(user) {\n const items = new ItemList();\n\n if (user.id() !== '1' && user.canDelete()) {\n items.add('delete', Button.component({\n icon: 'fas fa-times',\n children: app.translator.trans('core.forum.user_controls.delete_button'),\n onclick: this.deleteAction.bind(user)\n }));\n }\n\n return items;\n },\n\n /**\n * Delete the user.\n */\n deleteAction() {\n if (confirm(app.translator.trans('core.forum.user_controls.delete_confirmation'))) {\n this.delete().then(() => {\n if (app.current instanceof UserPage && app.current.user === this) {\n app.history.back();\n } else {\n window.location.reload();\n }\n });\n }\n },\n\n /**\n * Edit the user.\n */\n editAction() {\n app.modal.show(new EditUserModal({user: this}));\n }\n};\n","import Component from '../../common/Component';\nimport avatar from '../../common/helpers/avatar';\nimport icon from '../../common/helpers/icon';\nimport listItems from '../../common/helpers/listItems';\nimport ItemList from '../../common/utils/ItemList';\nimport Button from '../../common/components/Button';\nimport LoadingIndicator from '../../common/components/LoadingIndicator';\n\n/**\n * The `AvatarEditor` component displays a user's avatar along with a dropdown\n * menu which allows the user to upload/remove the avatar.\n *\n * ### Props\n *\n * - `className`\n * - `user`\n */\nexport default class AvatarEditor extends Component {\n init() {\n /**\n * Whether or not an avatar upload is in progress.\n *\n * @type {Boolean}\n */\n this.loading = false;\n\n /**\n * Whether or not an image has been dragged over the dropzone.\n *\n * @type {Boolean}\n */\n this.isDraggedOver = false;\n }\n\n static initProps(props) {\n super.initProps(props);\n\n props.className = props.className || '';\n }\n\n view() {\n const user = this.props.user;\n\n return (\n <div className={'AvatarEditor Dropdown ' + this.props.className + (this.loading ? ' loading' : '') + (this.isDraggedOver ? ' dragover' : '')}>\n {avatar(user)}\n <a className={ user.avatarUrl() ? \"Dropdown-toggle\" : \"Dropdown-toggle AvatarEditor--noAvatar\" }\n title={app.translator.trans('core.forum.user.avatar_upload_tooltip')}\n data-toggle=\"dropdown\"\n onclick={this.quickUpload.bind(this)}\n ondragover={this.enableDragover.bind(this)}\n ondragenter={this.enableDragover.bind(this)}\n ondragleave={this.disableDragover.bind(this)}\n ondragend={this.disableDragover.bind(this)}\n ondrop={this.dropUpload.bind(this)}>\n {this.loading ? LoadingIndicator.component() : (user.avatarUrl() ? icon('fas fa-pencil-alt') : icon('fas fa-plus-circle'))}\n </a>\n <ul className=\"Dropdown-menu Menu\">\n {listItems(this.controlItems().toArray())}\n </ul>\n </div>\n );\n }\n\n /**\n * Get the items in the edit avatar dropdown menu.\n *\n * @return {ItemList}\n */\n controlItems() {\n const items = new ItemList();\n\n items.add('upload',\n Button.component({\n icon: 'fas fa-upload',\n children: app.translator.trans('core.forum.user.avatar_upload_button'),\n onclick: this.openPicker.bind(this)\n })\n );\n\n items.add('remove',\n Button.component({\n icon: 'fas fa-times',\n children: app.translator.trans('core.forum.user.avatar_remove_button'),\n onclick: this.remove.bind(this)\n })\n );\n\n return items;\n }\n\n /**\n * Enable dragover style\n *\n * @param {Event} e\n */\n enableDragover(e) {\n e.preventDefault();\n e.stopPropagation();\n this.isDraggedOver = true;\n }\n\n /**\n * Disable dragover style\n *\n * @param {Event} e\n */\n disableDragover(e) {\n e.preventDefault();\n e.stopPropagation();\n this.isDraggedOver = false;\n }\n\n /**\n * Upload avatar when file is dropped into dropzone.\n *\n * @param {Event} e\n */\n dropUpload(e) {\n e.preventDefault();\n e.stopPropagation();\n this.isDraggedOver = false;\n this.upload(e.dataTransfer.files[0]);\n }\n\n /**\n * If the user doesn't have an avatar, there's no point in showing the\n * controls dropdown, because only one option would be viable: uploading.\n * Thus, when the avatar editor's dropdown toggle button is clicked, we prompt\n * the user to upload an avatar immediately.\n *\n * @param {Event} e\n */\n quickUpload(e) {\n if (!this.props.user.avatarUrl()) {\n e.preventDefault();\n e.stopPropagation();\n this.openPicker();\n }\n }\n\n /**\n * Upload avatar using file picker\n */\n openPicker() {\n if (this.loading) return;\n\n // Create a hidden HTML input element and click on it so the user can select\n // an avatar file. Once they have, we will upload it via the API.\n const user = this.props.user;\n const $input = $('<input type=\"file\">');\n\n $input.appendTo('body').hide().click().on('change', e => {\n this.upload($(e.target)[0].files[0]);\n });\n }\n\n /**\n * Upload avatar\n *\n * @param {File} file\n */\n upload(file) {\n if (this.loading) return;\n\n const user = this.props.user;\n const data = new FormData();\n data.append('avatar', file);\n\n this.loading = true;\n m.redraw();\n\n app.request({\n method: 'POST',\n url: app.forum.attribute('apiUrl') + '/users/' + user.id() + '/avatar',\n serialize: raw => raw,\n data\n }).then(\n this.success.bind(this),\n this.failure.bind(this)\n );\n }\n\n /**\n * Remove the user's avatar.\n */\n remove() {\n const user = this.props.user;\n\n this.loading = true;\n m.redraw();\n\n app.request({\n method: 'DELETE',\n url: app.forum.attribute('apiUrl') + '/users/' + user.id() + '/avatar'\n }).then(\n this.success.bind(this),\n this.failure.bind(this)\n );\n }\n\n /**\n * After a successful upload/removal, push the updated user data into the\n * store, and force a recomputation of the user's avatar color.\n *\n * @param {Object} response\n * @protected\n */\n success(response) {\n app.store.pushPayload(response);\n delete this.props.user.avatarColor;\n\n this.loading = false;\n m.redraw();\n }\n\n /**\n * If avatar upload/removal fails, stop loading.\n *\n * @param {Object} response\n * @protected\n */\n failure(response) {\n this.loading = false;\n m.redraw();\n }\n}\n","import Component from '../../common/Component';\nimport humanTime from '../../common/utils/humanTime';\nimport ItemList from '../../common/utils/ItemList';\nimport UserControls from '../utils/UserControls';\nimport avatar from '../../common/helpers/avatar';\nimport username from '../../common/helpers/username';\nimport icon from '../../common/helpers/icon';\nimport Dropdown from '../../common/components/Dropdown';\nimport AvatarEditor from './AvatarEditor';\nimport listItems from '../../common/helpers/listItems';\n\n/**\n * The `UserCard` component displays a user's profile card. This is used both on\n * the `UserPage` (in the hero) and in discussions, shown when hovering over a\n * post author.\n *\n * ### Props\n *\n * - `user`\n * - `className`\n * - `editable`\n * - `controlsButtonClassName`\n */\nexport default class UserCard extends Component {\n view() {\n const user = this.props.user;\n const controls = UserControls.controls(user, this).toArray();\n const color = user.color();\n const badges = user.badges().toArray();\n\n return (\n <div className={'UserCard ' + (this.props.className || '')}\n style={color ? {backgroundColor: color} : ''}>\n <div className=\"darkenBackground\">\n\n <div className=\"container\">\n {controls.length ? Dropdown.component({\n children: controls,\n className: 'UserCard-controls App-primaryControl',\n menuClassName: 'Dropdown-menu--right',\n buttonClassName: this.props.controlsButtonClassName,\n label: app.translator.trans('core.forum.user_controls.button'),\n icon: 'fas fa-ellipsis-v'\n }) : ''}\n\n <div className=\"UserCard-profile\">\n <h2 className=\"UserCard-identity\">\n {this.props.editable\n ? [AvatarEditor.component({user, className: 'UserCard-avatar'}), username(user)]\n : (\n <a href={app.route.user(user)} config={m.route}>\n <div className=\"UserCard-avatar\">{avatar(user)}</div>\n {username(user)}\n </a>\n )}\n </h2>\n\n {badges.length ? (\n <ul className=\"UserCard-badges badges\">\n {listItems(badges)}\n </ul>\n ) : ''}\n\n <ul className=\"UserCard-info\">\n {listItems(this.infoItems().toArray())}\n </ul>\n </div>\n </div>\n </div>\n </div>\n );\n }\n\n /**\n * Build an item list of tidbits of info to show on this user's profile.\n *\n * @return {ItemList}\n */\n infoItems() {\n const items = new ItemList();\n const user = this.props.user;\n const lastSeenAt = user.lastSeenAt();\n\n if (lastSeenAt) {\n const online = user.isOnline();\n\n items.add('lastSeen', (\n <span className={'UserCard-lastSeen' + (online ? ' online' : '')}>\n {online\n ? [icon('fas fa-circle'), ' ', app.translator.trans('core.forum.user.online_text')]\n : [icon('far fa-clock'), ' ', humanTime(lastSeenAt)]}\n </span>\n ));\n }\n\n items.add('joined', app.translator.trans('core.forum.user.joined_date_text', {ago: humanTime(user.joinTime())}));\n\n return items;\n }\n}\n","import Component from '../../common/Component';\nimport UserCard from './UserCard';\nimport avatar from '../../common/helpers/avatar';\nimport username from '../../common/helpers/username';\nimport userOnline from '../../common/helpers/userOnline';\nimport listItems from '../../common/helpers/listItems';\n\n/**\n * The `PostUser` component shows the avatar and username of a post's author.\n *\n * ### Props\n *\n * - `post`\n */\nexport default class PostUser extends Component {\n init() {\n /**\n * Whether or not the user hover card is visible.\n *\n * @type {Boolean}\n */\n this.cardVisible = false;\n }\n\n view() {\n const post = this.props.post;\n const user = post.user();\n\n if (!user) {\n return (\n <div className=\"PostUser\">\n <h3>{avatar(user, {className: 'PostUser-avatar'})} {username(user)}</h3>\n </div>\n );\n }\n\n let card = '';\n\n if (!post.isHidden() && this.cardVisible) {\n card = UserCard.component({\n user,\n className: 'UserCard--popover',\n controlsButtonClassName: 'Button Button--icon Button--flat'\n });\n }\n\n return (\n <div className=\"PostUser\">\n <h3>\n <a href={app.route.user(user)} config={m.route}>\n {avatar(user, {className: 'PostUser-avatar'})}\n {userOnline(user)}\n {username(user)}\n </a>\n </h3>\n <ul className=\"PostUser-badges badges\">\n {listItems(user.badges().toArray())}\n </ul>\n {card}\n </div>\n );\n }\n\n config(isInitialized) {\n if (isInitialized) return;\n\n let timeout;\n\n this.$()\n .on('mouseover', 'h3 a, .UserCard', () => {\n clearTimeout(timeout);\n timeout = setTimeout(this.showCard.bind(this), 500);\n })\n .on('mouseout', 'h3 a, .UserCard', () => {\n clearTimeout(timeout);\n timeout = setTimeout(this.hideCard.bind(this), 250);\n });\n }\n\n /**\n * Show the user card.\n */\n showCard() {\n this.cardVisible = true;\n\n m.redraw();\n\n setTimeout(() => this.$('.UserCard').addClass('in'));\n }\n\n /**\n * Hide the user card.\n */\n hideCard() {\n this.$('.UserCard').removeClass('in')\n .one('transitionend webkitTransitionEnd oTransitionEnd', () => {\n this.cardVisible = false;\n m.redraw();\n });\n }\n}\n","import Component from '../../common/Component';\nimport humanTime from '../../common/helpers/humanTime';\nimport fullTime from '../../common/helpers/fullTime';\n\n/**\n * The `PostMeta` component displays the time of a post, and when clicked, shows\n * a dropdown containing more information about the post (number, full time,\n * permalink).\n *\n * ### Props\n *\n * - `post`\n */\nexport default class PostMeta extends Component {\n view() {\n const post = this.props.post;\n const time = post.createdAt();\n const permalink = this.getPermalink(post);\n const touch = 'ontouchstart' in document.documentElement;\n\n // When the dropdown menu is shown, select the contents of the permalink\n // input so that the user can quickly copy the URL.\n const selectPermalink = function() {\n setTimeout(() => $(this).parent().find('.PostMeta-permalink').select());\n\n m.redraw.strategy('none');\n };\n\n return (\n <div className=\"Dropdown PostMeta\">\n <a className=\"Dropdown-toggle\" onclick={selectPermalink} data-toggle=\"dropdown\">\n {humanTime(time)}\n </a>\n\n <div className=\"Dropdown-menu dropdown-menu\">\n <span className=\"PostMeta-number\">{app.translator.trans('core.forum.post.number_tooltip', {number: post.number()})}</span>{' '}\n <span className=\"PostMeta-time\">{fullTime(time)}</span>{' '}\n <span className=\"PostMeta-ip\">{post.data.attributes.ipAddress}</span>\n {touch\n ? <a className=\"Button PostMeta-permalink\" href={permalink}>{permalink}</a>\n : <input className=\"FormControl PostMeta-permalink\" value={permalink} onclick={e => e.stopPropagation()} />}\n </div>\n </div>\n );\n }\n\n /**\n * Get the permalink for the given post.\n *\n * @param {Post} post\n * @returns {String}\n */\n getPermalink(post) {\n return window.location.origin + app.route.post(post);\n }\n}\n","import Component from '../../common/Component';\nimport humanTime from '../../common/utils/humanTime';\nimport extractText from '../../common/utils/extractText';\n\n/**\n * The `PostEdited` component displays information about when and by whom a post\n * was edited.\n *\n * ### Props\n *\n * - `post`\n */\nexport default class PostEdited extends Component {\n init() {\n this.shouldUpdateTooltip = false;\n this.oldEditedInfo = null;\n }\n\n view() {\n const post = this.props.post;\n const editedUser = post.editedUser();\n const editedInfo = extractText(app.translator.trans(\n 'core.forum.post.edited_tooltip',\n {user: editedUser, ago: humanTime(post.editedAt())}\n ));\n if (editedInfo !== this.oldEditedInfo) {\n this.shouldUpdateTooltip = true;\n this.oldEditedInfo = editedInfo;\n }\n\n return (\n <span className=\"PostEdited\" title={editedInfo}>\n {app.translator.trans('core.forum.post.edited_text')}\n </span>\n );\n }\n\n config(isInitialized) {\n if (this.shouldUpdateTooltip) {\n this.$().tooltip('destroy').tooltip();\n this.shouldUpdateTooltip = false;\n }\n }\n}\n","/*global s9e, hljs*/\n\nimport Post from './Post';\nimport classList from '../../common/utils/classList';\nimport PostUser from './PostUser';\nimport PostMeta from './PostMeta';\nimport PostEdited from './PostEdited';\nimport EditPostComposer from './EditPostComposer';\nimport ItemList from '../../common/utils/ItemList';\nimport listItems from '../../common/helpers/listItems';\nimport Button from '../../common/components/Button';\n\n/**\n * The `CommentPost` component displays a standard `comment`-typed post. This\n * includes a number of item lists (controls, header, and footer) surrounding\n * the post's HTML content.\n *\n * ### Props\n *\n * - `post`\n */\nexport default class CommentPost extends Post {\n init() {\n super.init();\n\n /**\n * If the post has been hidden, then this flag determines whether or not its\n * content has been expanded.\n *\n * @type {Boolean}\n */\n this.revealContent = false;\n\n // Create an instance of the component that displays the post's author so\n // that we can force the post to rerender when the user card is shown.\n this.postUser = new PostUser({post: this.props.post});\n this.subtree.check(\n () => this.postUser.cardVisible,\n () => this.isEditing()\n );\n }\n\n content() {\n // Note: we avoid using JSX for the <ul> below because it results in some\n // weirdness in Mithril.js 0.1.x (see flarum/core#975). This workaround can\n // be reverted when we upgrade to Mithril 1.0.\n return super.content().concat([\n <header className=\"Post-header\">{m('ul', listItems(this.headerItems().toArray()))}</header>,\n <div className=\"Post-body\">\n {this.isEditing()\n ? <div className=\"Post-preview\" config={this.configPreview.bind(this)}/>\n : m.trust(this.props.post.contentHtml())}\n </div>\n ]);\n }\n\n config(isInitialized, context) {\n super.config(...arguments);\n\n const contentHtml = this.isEditing() ? '' : this.props.post.contentHtml();\n\n // If the post content has changed since the last render, we'll run through\n // all of the <script> tags in the content and evaluate them. This is\n // necessary because TextFormatter outputs them for e.g. syntax highlighting.\n if (context.contentHtml !== contentHtml) {\n this.$('.Post-body script').each(function() {\n eval.call(window, $(this).text());\n });\n }\n\n context.contentHtml = contentHtml;\n }\n\n isEditing() {\n return app.composer.component instanceof EditPostComposer &&\n app.composer.component.props.post === this.props.post;\n }\n\n attrs() {\n const post = this.props.post;\n const attrs = super.attrs();\n\n attrs.className = (attrs.className || '') + ' ' + classList({\n 'CommentPost': true,\n 'Post--hidden': post.isHidden(),\n 'Post--edited': post.isEdited(),\n 'revealContent': this.revealContent,\n 'editing': this.isEditing()\n });\n\n return attrs;\n }\n\n configPreview(element, isInitialized, context) {\n if (isInitialized) return;\n\n // Every 50ms, if the composer content has changed, then update the post's\n // body with a preview.\n let preview;\n const updatePreview = () => {\n const content = app.composer.component.content();\n\n if (preview === content) return;\n\n preview = content;\n\n s9e.TextFormatter.preview(preview || '', element);\n };\n updatePreview();\n\n const updateInterval = setInterval(updatePreview, 50);\n context.onunload = () => clearInterval(updateInterval);\n }\n\n /**\n * Toggle the visibility of a hidden post's content.\n */\n toggleContent() {\n this.revealContent = !this.revealContent;\n }\n\n /**\n * Build an item list for the post's header.\n *\n * @return {ItemList}\n */\n headerItems() {\n const items = new ItemList();\n const post = this.props.post;\n const props = {post};\n\n items.add('user', this.postUser.render(), 100);\n items.add('meta', PostMeta.component(props));\n\n if (post.isEdited() && !post.isHidden()) {\n items.add('edited', PostEdited.component(props));\n }\n\n // If the post is hidden, add a button that allows toggling the visibility\n // of the post's content.\n if (post.isHidden()) {\n items.add('toggle', (\n Button.component({\n className: 'Button Button--default Button--more',\n icon: 'fas fa-ellipsis-h',\n onclick: this.toggleContent.bind(this)\n })\n ));\n }\n\n return items;\n }\n}\n","import Post from './Post';\nimport { ucfirst } from '../../common/utils/string';\nimport usernameHelper from '../../common/helpers/username';\nimport icon from '../../common/helpers/icon';\n\n/**\n * The `EventPost` component displays a post which indicating a discussion\n * event, like a discussion being renamed or stickied. Subclasses must implement\n * the `icon` and `description` methods.\n *\n * ### Props\n *\n * - All of the props for `Post`\n *\n * @abstract\n */\nexport default class EventPost extends Post {\n attrs() {\n const attrs = super.attrs();\n\n attrs.className = (attrs.className || '') + ' EventPost ' + ucfirst(this.props.post.contentType()) + 'Post';\n\n return attrs;\n }\n\n content() {\n const user = this.props.post.user();\n const username = usernameHelper(user);\n const data = Object.assign(this.descriptionData(), {\n user,\n username: user\n ? <a className=\"EventPost-user\" href={app.route.user(user)} config={m.route}>{username}</a>\n : username\n });\n\n return super.content().concat([\n icon(this.icon(), {className: 'EventPost-icon'}),\n <div class=\"EventPost-info\">\n {this.description(data)}\n </div>\n ]);\n }\n\n /**\n * Get the name of the event icon.\n *\n * @return {String}\n */\n icon() {\n return '';\n }\n\n /**\n * Get the description text for the event.\n *\n * @param {Object} data\n * @return {String|Object} The description to render in the DOM\n */\n description(data) {\n return app.translator.transChoice(this.descriptionKey(), data.count, data);\n }\n\n /**\n * Get the translation key for the description of the event.\n *\n * @return {String}\n */\n descriptionKey() {\n return '';\n }\n\n /**\n * Get the translation data for the description of the event.\n *\n * @return {Object}\n */\n descriptionData() {\n return {};\n }\n}\n","import EventPost from './EventPost';\nimport extractText from '../../common/utils/extractText';\n\n/**\n * The `DiscussionRenamedPost` component displays a discussion event post\n * indicating that the discussion has been renamed.\n *\n * ### Props\n *\n * - All of the props for EventPost\n */\nexport default class DiscussionRenamedPost extends EventPost {\n icon() {\n return 'fas fa-pencil-alt';\n }\n\n description(data) {\n const renamed = app.translator.trans('core.forum.post_stream.discussion_renamed_text', data);\n const oldName = app.translator.trans('core.forum.post_stream.discussion_renamed_old_tooltip', data);\n\n return <span title={extractText(oldName)}>{renamed}</span>;\n }\n\n descriptionData() {\n const post = this.props.post;\n const oldTitle = post.content()[0];\n const newTitle = post.content()[1];\n\n return {\n 'old': oldTitle,\n 'new': <strong className=\"DiscussionRenamedPost-new\">{newTitle}</strong>\n };\n }\n}\n","import Component from '../../common/Component';\nimport humanTime from '../../common/helpers/humanTime';\nimport icon from '../../common/helpers/icon';\n\n/**\n * Displays information about a the first or last post in a discussion.\n *\n * ### Props\n *\n * - `discussion`\n * - `lastPost`\n */\nexport default class TerminalPost extends Component {\n view() {\n const discussion = this.props.discussion;\n const lastPost = this.props.lastPost && discussion.replyCount();\n\n const user = discussion[lastPost ? 'lastPostedUser' : 'user']();\n const time = discussion[lastPost ? 'lastPostedAt' : 'createdAt']();\n\n return (\n <span>\n {lastPost ? icon('fas fa-reply') : ''}{' '}\n {app.translator.trans('core.forum.discussion_list.' + (lastPost ? 'replied' : 'started') + '_text', {\n user,\n ago: humanTime(time)\n })}\n </span>\n );\n }\n}\n","import Component from '../../common/Component';\nimport avatar from '../../common/helpers/avatar';\nimport username from '../../common/helpers/username';\nimport highlight from '../../common/helpers/highlight';\n\n/**\n * The `PostPreview` component shows a link to a post containing the avatar and\n * username of the author, and a short excerpt of the post's content.\n *\n * ### Props\n *\n * - `post`\n */\nexport default class PostPreview extends Component {\n view() {\n const post = this.props.post;\n const user = post.user();\n const excerpt = highlight(post.contentPlain(), this.props.highlight, 300);\n\n return (\n <a className=\"PostPreview\" href={app.route.post(post)} config={m.route} onclick={this.props.onclick}>\n <span className=\"PostPreview-content\">\n {avatar(user)}\n {username(user)}{' '}\n <span className=\"PostPreview-excerpt\">{excerpt}</span>\n </span>\n </a>\n );\n }\n}\n","/**\n * The `slidable` utility adds touch gestures to an element so that it can be\n * slid away to reveal controls underneath, and then released to activate those\n * controls.\n *\n * It relies on the element having children with particular CSS classes.\n * TODO: document\n *\n * @param {DOMElement} element\n * @return {Object}\n * @property {function} reset Revert the slider to its original position. This\n * should be called, for example, when a controls dropdown is closed.\n */\nexport default function slidable(element) {\n const $element = $(element);\n const threshold = 50;\n\n let $underneathLeft;\n let $underneathRight;\n\n let startX;\n let startY;\n let couldBeSliding = false;\n let isSliding = false;\n let pos = 0;\n\n /**\n * Animate the slider to a new position.\n *\n * @param {Integer} newPos\n * @param {Object} [options]\n */\n const animatePos = (newPos, options = {}) => {\n // Since we can't animate the transform property with jQuery, we'll use a\n // bit of a workaround. We set up the animation with a step function that\n // will set the transform property, but then we animate an unused property\n // (background-position-x) with jQuery.\n options.duration = options.duration || 'fast';\n options.step = function(x) {\n $(this).css('transform', 'translate(' + x + 'px, 0)');\n };\n\n $element.find('.Slidable-content').animate({'background-position-x': newPos}, options);\n };\n\n /**\n * Revert the slider to its original position.\n */\n const reset = () => {\n animatePos(0, {\n complete: function() {\n $element.removeClass('sliding');\n $underneathLeft.hide();\n $underneathRight.hide();\n isSliding = false;\n }\n });\n };\n\n $element.find('.Slidable-content')\n .on('touchstart', function(e) {\n // Update the references to the elements underneath the slider, provided\n // they're not disabled.\n $underneathLeft = $element.find('.Slidable-underneath--left:not(.disabled)');\n $underneathRight = $element.find('.Slidable-underneath--right:not(.disabled)');\n\n startX = e.originalEvent.targetTouches[0].clientX;\n startY = e.originalEvent.targetTouches[0].clientY;\n\n couldBeSliding = true;\n pos = 0;\n })\n\n .on('touchmove', function(e) {\n const newX = e.originalEvent.targetTouches[0].clientX;\n const newY = e.originalEvent.targetTouches[0].clientY;\n\n // Once the user moves their touch in a direction that's more up/down than\n // left/right, we'll assume they're scrolling the page. But if they do\n // move in a horizontal direction at first, then we'll lock their touch\n // into the slider.\n if (couldBeSliding && Math.abs(newX - startX) > Math.abs(newY - startY)) {\n isSliding = true;\n }\n couldBeSliding = false;\n\n if (isSliding) {\n pos = newX - startX;\n\n // If there are controls underneath the either side, then we'll show/hide\n // them depending on the slider's position. We also make the controls\n // icon get a bit bigger the further they slide.\n const toggle = ($underneath, side) => {\n if ($underneath.length) {\n const active = side === 'left' ? pos > 0 : pos < 0;\n\n if (active && $underneath.hasClass('Slidable-underneath--elastic')) {\n pos -= pos * 0.5;\n }\n $underneath.toggle(active);\n\n const scale = Math.max(0, Math.min(1, (Math.abs(pos) - 25) / threshold));\n $underneath.find('.icon').css('transform', 'scale(' + scale + ')');\n } else {\n pos = Math[side === 'left' ? 'min' : 'max'](0, pos);\n }\n };\n\n toggle($underneathLeft, 'left');\n toggle($underneathRight, 'right');\n\n $(this).css('transform', 'translate(' + pos + 'px, 0)');\n $(this).css('background-position-x', pos + 'px');\n\n $element.toggleClass('sliding', !!pos);\n\n e.preventDefault();\n }\n })\n\n .on('touchend', function() {\n // If the user releases the touch and the slider is past the threshold\n // position on either side, then we will activate the control for that\n // side. We will also animate the slider's position all the way to the\n // other side, or back to its original position, depending on whether or\n // not the side is 'elastic'.\n const activate = $underneath => {\n $underneath.click();\n\n if ($underneath.hasClass('Slidable-underneath--elastic')) {\n reset();\n } else {\n animatePos((pos > 0 ? 1 : -1) * $element.width());\n }\n };\n\n if ($underneathRight.length && pos < -threshold) {\n activate($underneathRight);\n } else if ($underneathLeft.length && pos > threshold) {\n activate($underneathLeft);\n } else {\n reset();\n }\n\n couldBeSliding = false;\n isSliding = false;\n });\n\n return {reset};\n};\n","import Component from '../../common/Component';\nimport avatar from '../../common/helpers/avatar';\nimport listItems from '../../common/helpers/listItems';\nimport highlight from '../../common/helpers/highlight';\nimport icon from '../../common/helpers/icon';\nimport humanTime from '../../common/utils/humanTime';\nimport ItemList from '../../common/utils/ItemList';\nimport abbreviateNumber from '../../common/utils/abbreviateNumber';\nimport Dropdown from '../../common/components/Dropdown';\nimport TerminalPost from './TerminalPost';\nimport PostPreview from './PostPreview';\nimport SubtreeRetainer from '../../common/utils/SubtreeRetainer';\nimport DiscussionControls from '../utils/DiscussionControls';\nimport slidable from '../utils/slidable';\nimport extractText from '../../common/utils/extractText';\nimport classList from '../../common/utils/classList';\n\n/**\n * The `DiscussionListItem` component shows a single discussion in the\n * discussion list.\n *\n * ### Props\n *\n * - `discussion`\n * - `params`\n */\nexport default class DiscussionListItem extends Component {\n init() {\n /**\n * Set up a subtree retainer so that the discussion will not be redrawn\n * unless new data comes in.\n *\n * @type {SubtreeRetainer}\n */\n this.subtree = new SubtreeRetainer(\n () => this.props.discussion.freshness,\n () => {\n const time = app.session.user && app.session.user.markedAllAsReadAt();\n return time && time.getTime();\n },\n () => this.active()\n );\n }\n\n attrs() {\n return {\n className: classList([\n 'DiscussionListItem',\n this.active() ? 'active' : '',\n this.props.discussion.isHidden() ? 'DiscussionListItem--hidden' : ''\n ])\n };\n }\n\n view() {\n const retain = this.subtree.retain();\n\n if (retain) return retain;\n\n const discussion = this.props.discussion;\n const user = discussion.user();\n const isUnread = discussion.isUnread();\n const isRead = discussion.isRead();\n const showUnread = !this.showRepliesCount() && isUnread;\n let jumpTo = 0;\n const controls = DiscussionControls.controls(discussion, this).toArray();\n const attrs = this.attrs();\n\n if (this.props.params.q) {\n const post = discussion.mostRelevantPost();\n if (post) {\n jumpTo = post.number();\n }\n\n const phrase = this.props.params.q;\n this.highlightRegExp = new RegExp(phrase+'|'+phrase.trim().replace(/\\s+/g, '|'), 'gi');\n } else {\n jumpTo = Math.min(discussion.lastPostNumber(), (discussion.lastReadPostNumber() || 0) + 1);\n }\n\n return (\n <div {...attrs}>\n {controls.length ? Dropdown.component({\n icon: 'fas fa-ellipsis-v',\n children: controls,\n className: 'DiscussionListItem-controls',\n buttonClassName: 'Button Button--icon Button--flat Slidable-underneath Slidable-underneath--right'\n }) : ''}\n\n <a className={'Slidable-underneath Slidable-underneath--left Slidable-underneath--elastic' + (isUnread ? '' : ' disabled')}\n onclick={this.markAsRead.bind(this)}>\n {icon('fas fa-check')}\n </a>\n\n <div className={'DiscussionListItem-content Slidable-content' + (isUnread ? ' unread' : '') + (isRead ? ' read' : '')}>\n <a href={user ? app.route.user(user) : '#'}\n className=\"DiscussionListItem-author\"\n title={extractText(app.translator.trans('core.forum.discussion_list.started_text', {user: user, ago: humanTime(discussion.createdAt())}))}\n config={function(element) {\n $(element).tooltip({placement: 'right'});\n m.route.apply(this, arguments);\n }}>\n {avatar(user, {title: ''})}\n </a>\n\n <ul className=\"DiscussionListItem-badges badges\">\n {listItems(discussion.badges().toArray())}\n </ul>\n\n <a href={app.route.discussion(discussion, jumpTo)}\n config={m.route}\n className=\"DiscussionListItem-main\">\n <h3 className=\"DiscussionListItem-title\">{highlight(discussion.title(), this.highlightRegExp)}</h3>\n <ul className=\"DiscussionListItem-info\">{listItems(this.infoItems().toArray())}</ul>\n </a>\n\n <span className=\"DiscussionListItem-count\"\n onclick={this.markAsRead.bind(this)}\n title={showUnread ? app.translator.trans('core.forum.discussion_list.mark_as_read_tooltip') : ''}>\n {abbreviateNumber(discussion[showUnread ? 'unreadCount' : 'replyCount']())}\n </span>\n </div>\n </div>\n );\n }\n\n config(isInitialized) {\n if (isInitialized) return;\n\n // If we're on a touch device, set up the discussion row to be slidable.\n // This allows the user to drag the row to either side of the screen to\n // reveal controls.\n if ('ontouchstart' in window) {\n const slidableInstance = slidable(this.$().addClass('Slidable'));\n\n this.$('.DiscussionListItem-controls')\n .on('hidden.bs.dropdown', () => slidableInstance.reset());\n }\n }\n\n /**\n * Determine whether or not the discussion is currently being viewed.\n *\n * @return {Boolean}\n */\n active() {\n const idParam = m.route.param('id');\n\n return idParam && idParam.split('-')[0] === this.props.discussion.id();\n }\n\n /**\n * Determine whether or not information about who started the discussion\n * should be displayed instead of information about the most recent reply to\n * the discussion.\n *\n * @return {Boolean}\n */\n showFirstPost() {\n return ['newest', 'oldest'].indexOf(this.props.params.sort) !== -1;\n }\n\n /**\n * Determine whether or not the number of replies should be shown instead of\n * the number of unread posts.\n *\n * @return {Boolean}\n */\n showRepliesCount() {\n return this.props.params.sort === 'replies';\n }\n\n /**\n * Mark the discussion as read.\n */\n markAsRead() {\n const discussion = this.props.discussion;\n\n if (discussion.isUnread()) {\n discussion.save({lastReadPostNumber: discussion.lastPostNumber()});\n m.redraw();\n }\n }\n\n /**\n * Build an item list of info for a discussion listing. By default this is\n * just the first/last post indicator.\n *\n * @return {ItemList}\n */\n infoItems() {\n const items = new ItemList();\n\n if (this.props.params.q) {\n const post = this.props.discussion.mostRelevantPost() || this.props.discussion.firstPost();\n\n if (post && post.contentType() === 'comment') {\n const excerpt = highlight(post.contentPlain(), this.highlightRegExp, 175);\n items.add('excerpt', excerpt, -100);\n }\n } else {\n items.add('terminalPost',\n TerminalPost.component({\n discussion: this.props.discussion,\n lastPost: !this.showFirstPost()\n })\n );\n }\n\n return items;\n }\n}\n","import Component from '../../common/Component';\nimport DiscussionListItem from './DiscussionListItem';\nimport Button from '../../common/components/Button';\nimport LoadingIndicator from '../../common/components/LoadingIndicator';\nimport Placeholder from '../../common/components/Placeholder';\n\n/**\n * The `DiscussionList` component displays a list of discussions.\n *\n * ### Props\n *\n * - `params` A map of parameters used to construct a refined parameter object\n * to send along in the API request to get discussion results.\n */\nexport default class DiscussionList extends Component {\n init() {\n /**\n * Whether or not discussion results are loading.\n *\n * @type {Boolean}\n */\n this.loading = true;\n\n /**\n * Whether or not there are more results that can be loaded.\n *\n * @type {Boolean}\n */\n this.moreResults = false;\n\n /**\n * The discussions in the discussion list.\n *\n * @type {Discussion[]}\n */\n this.discussions = [];\n\n this.refresh();\n }\n\n view() {\n const params = this.props.params;\n let loading;\n\n if (this.loading) {\n loading = LoadingIndicator.component();\n } else if (this.moreResults) {\n loading = Button.component({\n children: app.translator.trans('core.forum.discussion_list.load_more_button'),\n className: 'Button',\n onclick: this.loadMore.bind(this)\n });\n }\n\n if (this.discussions.length === 0 && !this.loading) {\n const text = app.translator.trans('core.forum.discussion_list.empty_text');\n return (\n <div className=\"DiscussionList\">\n {Placeholder.component({text})}\n </div>\n );\n }\n\n return (\n <div className={'DiscussionList'+(this.props.params.q ? ' DiscussionList--searchResults' : '')}>\n <ul className=\"DiscussionList-discussions\">\n {this.discussions.map(discussion => {\n return (\n <li key={discussion.id()} data-id={discussion.id()}>\n {DiscussionListItem.component({discussion, params})}\n </li>\n );\n })}\n </ul>\n <div className=\"DiscussionList-loadMore\">\n {loading}\n </div>\n </div>\n );\n }\n\n /**\n * Get the parameters that should be passed in the API request to get\n * discussion results.\n *\n * @return {Object}\n * @api\n */\n requestParams() {\n const params = {include: ['user', 'lastPostedUser'], filter: {}};\n\n params.sort = this.sortMap()[this.props.params.sort];\n\n if (this.props.params.q) {\n params.filter.q = this.props.params.q;\n\n params.include.push('mostRelevantPost', 'mostRelevantPost.user');\n }\n\n return params;\n }\n\n /**\n * Get a map of sort keys (which appear in the URL, and are used for\n * translation) to the API sort value that they represent.\n *\n * @return {Object}\n */\n sortMap() {\n const map = {};\n\n if (this.props.params.q) {\n map.relevance = '';\n }\n map.latest = '-lastPostedAt';\n map.top = '-commentCount';\n map.newest = '-createdAt';\n map.oldest = 'createdAt';\n\n return map;\n }\n\n /**\n * Clear and reload the discussion list.\n *\n * @public\n */\n refresh(clear = true) {\n if (clear) {\n this.loading = true;\n this.discussions = [];\n }\n\n return this.loadResults().then(\n results => {\n this.discussions = [];\n this.parseResults(results);\n },\n () => {\n this.loading = false;\n m.redraw();\n }\n );\n }\n\n /**\n * Load a new page of discussion results.\n *\n * @param {Integer} offset The index to start the page at.\n * @return {Promise}\n */\n loadResults(offset) {\n const preloadedDiscussions = app.preloadedDocument();\n\n if (preloadedDiscussions) {\n return m.deferred().resolve(preloadedDiscussions).promise;\n }\n\n const params = this.requestParams();\n params.page = {offset};\n params.include = params.include.join(',');\n\n return app.store.find('discussions', params);\n }\n\n /**\n * Load the next page of discussion results.\n *\n * @public\n */\n loadMore() {\n this.loading = true;\n\n this.loadResults(this.discussions.length)\n .then(this.parseResults.bind(this));\n }\n\n /**\n * Parse results and append them to the discussion list.\n *\n * @param {Discussion[]} results\n * @return {Discussion[]}\n */\n parseResults(results) {\n [].push.apply(this.discussions, results);\n\n this.loading = false;\n this.moreResults = !!results.payload.links.next;\n\n m.lazyRedraw();\n\n return results;\n }\n\n /**\n * Remove a discussion from the list if it is present.\n *\n * @param {Discussion} discussion\n * @public\n */\n removeDiscussion(discussion) {\n const index = this.discussions.indexOf(discussion);\n\n if (index !== -1) {\n this.discussions.splice(index, 1);\n }\n }\n\n /**\n * Add a discussion to the top of the list.\n *\n * @param {Discussion} discussion\n * @public\n */\n addDiscussion(discussion) {\n this.discussions.unshift(discussion);\n }\n}\n","import Component from '../../common/Component';\nimport Button from '../../common/components/Button';\n\n/**\n * The `WelcomeHero` component displays a hero that welcomes the user to the\n * forum.\n */\nexport default class WelcomeHero extends Component {\n init() {\n this.hidden = localStorage.getItem('welcomeHidden');\n }\n\n view() {\n if (this.hidden) return <div/>;\n\n const slideUp = () => {\n this.$().slideUp(this.hide.bind(this));\n };\n\n return (\n <header className=\"Hero WelcomeHero\">\n <div class=\"container\">\n {Button.component({\n icon: 'fas fa-times',\n onclick: slideUp,\n className: 'Hero-close Button Button--icon Button--link'\n })}\n\n <div className=\"containerNarrow\">\n <h2 className=\"Hero-title\">{app.forum.attribute('welcomeTitle')}</h2>\n <div className=\"Hero-subtitle\">{m.trust(app.forum.attribute('welcomeMessage'))}</div>\n </div>\n </div>\n </header>\n );\n }\n\n /**\n * Hide the welcome hero.\n */\n hide() {\n localStorage.setItem('welcomeHidden', 'true');\n\n this.hidden = true;\n }\n}\n","import ComposerBody from './ComposerBody';\nimport extractText from '../../common/utils/extractText';\n\n/**\n * The `DiscussionComposer` component displays the composer content for starting\n * a new discussion. It adds a text field as a header control so the user can\n * enter the title of their discussion. It also overrides the `submit` and\n * `willExit` actions to account for the title.\n *\n * ### Props\n *\n * - All of the props for ComposerBody\n * - `titlePlaceholder`\n */\nexport default class DiscussionComposer extends ComposerBody {\n init() {\n super.init();\n\n /**\n * The value of the title input.\n *\n * @type {Function}\n */\n this.title = m.prop('');\n }\n\n static initProps(props) {\n super.initProps(props);\n\n props.placeholder = props.placeholder || extractText(app.translator.trans('core.forum.composer_discussion.body_placeholder'));\n props.submitLabel = props.submitLabel || app.translator.trans('core.forum.composer_discussion.submit_button');\n props.confirmExit = props.confirmExit || extractText(app.translator.trans('core.forum.composer_discussion.discard_confirmation'));\n props.titlePlaceholder = props.titlePlaceholder || extractText(app.translator.trans('core.forum.composer_discussion.title_placeholder'));\n props.className = 'ComposerBody--discussion';\n }\n\n headerItems() {\n const items = super.headerItems();\n\n items.add('title', <h3>{app.translator.trans('core.forum.composer_discussion.title')}</h3>, 100);\n\n items.add('discussionTitle', (\n <h3>\n <input className=\"FormControl\"\n value={this.title()}\n oninput={m.withAttr('value', this.title)}\n placeholder={this.props.titlePlaceholder}\n disabled={!!this.props.disabled}\n onkeydown={this.onkeydown.bind(this)}/>\n </h3>\n ));\n\n return items;\n }\n\n /**\n * Handle the title input's keydown event. When the return key is pressed,\n * move the focus to the start of the text editor.\n *\n * @param {Event} e\n */\n onkeydown(e) {\n if (e.which === 13) { // Return\n e.preventDefault();\n this.editor.setSelectionRange(0, 0);\n }\n\n m.redraw.strategy('none');\n }\n\n preventExit() {\n return (this.title() || this.content()) && this.props.confirmExit;\n }\n\n /**\n * Get the data to submit to the server when the discussion is saved.\n *\n * @return {Object}\n */\n data() {\n return {\n title: this.title(),\n content: this.content()\n };\n }\n\n onsubmit() {\n this.loading = true;\n\n const data = this.data();\n\n app.store.createRecord('discussions').save(data).then(\n discussion => {\n app.composer.hide();\n app.cache.discussionList.addDiscussion(discussion);\n m.route(app.route.discussion(discussion));\n },\n this.loaded.bind(this)\n );\n }\n}\n","import { extend } from '../../common/extend';\nimport Page from './Page';\nimport ItemList from '../../common/utils/ItemList';\nimport listItems from '../../common/helpers/listItems';\nimport icon from '../../common/helpers/icon';\nimport DiscussionList from './DiscussionList';\nimport WelcomeHero from './WelcomeHero';\nimport DiscussionComposer from './DiscussionComposer';\nimport LogInModal from './LogInModal';\nimport DiscussionPage from './DiscussionPage';\nimport Dropdown from '../../common/components/Dropdown';\nimport Button from '../../common/components/Button';\nimport LinkButton from '../../common/components/LinkButton';\nimport SelectDropdown from '../../common/components/SelectDropdown';\n\n/**\n * The `IndexPage` component displays the index page, including the welcome\n * hero, the sidebar, and the discussion list.\n */\nexport default class IndexPage extends Page {\n init() {\n super.init();\n\n // If the user is returning from a discussion page, then take note of which\n // discussion they have just visited. After the view is rendered, we will\n // scroll down so that this discussion is in view.\n if (app.previous instanceof DiscussionPage) {\n this.lastDiscussion = app.previous.discussion;\n }\n\n // If the user is coming from the discussion list, then they have either\n // just switched one of the parameters (filter, sort, search) or they\n // probably want to refresh the results. We will clear the discussion list\n // cache so that results are reloaded.\n if (app.previous instanceof IndexPage) {\n app.cache.discussionList = null;\n }\n\n const params = this.params();\n\n if (app.cache.discussionList) {\n // Compare the requested parameters (sort, search query) to the ones that\n // are currently present in the cached discussion list. If they differ, we\n // will clear the cache and set up a new discussion list component with\n // the new parameters.\n Object.keys(params).some(key => {\n if (app.cache.discussionList.props.params[key] !== params[key]) {\n app.cache.discussionList = null;\n return true;\n }\n });\n }\n\n if (!app.cache.discussionList) {\n app.cache.discussionList = new DiscussionList({params});\n }\n\n app.history.push('index', app.translator.trans('core.forum.header.back_to_index_tooltip'));\n\n this.bodyClass = 'App--index';\n }\n\n onunload() {\n // Save the scroll position so we can restore it when we return to the\n // discussion list.\n app.cache.scrollTop = $(window).scrollTop();\n }\n\n view() {\n return (\n <div className=\"IndexPage\">\n {this.hero()}\n <div className=\"container\">\n <div className=\"sideNavContainer\">\n <nav className=\"IndexPage-nav sideNav\">\n <ul>{listItems(this.sidebarItems().toArray())}</ul>\n </nav>\n <div className=\"IndexPage-results sideNavOffset\">\n <div className=\"IndexPage-toolbar\">\n <ul className=\"IndexPage-toolbar-view\">{listItems(this.viewItems().toArray())}</ul>\n <ul className=\"IndexPage-toolbar-action\">{listItems(this.actionItems().toArray())}</ul>\n </div>\n {app.cache.discussionList.render()}\n </div>\n </div>\n </div>\n </div>\n );\n }\n\n config(isInitialized, context) {\n super.config(...arguments);\n\n if (isInitialized) return;\n\n extend(context, 'onunload', () => $('#app').css('min-height', ''));\n\n app.setTitle('');\n app.setTitleCount(0);\n\n // Work out the difference between the height of this hero and that of the\n // previous hero. Maintain the same scroll position relative to the bottom\n // of the hero so that the sidebar doesn't jump around.\n const oldHeroHeight = app.cache.heroHeight;\n const heroHeight = app.cache.heroHeight = this.$('.Hero').outerHeight();\n const scrollTop = app.cache.scrollTop;\n\n $('#app').css('min-height', $(window).height() + heroHeight);\n\n // Scroll to the remembered position. We do this after a short delay so that\n // it happens after the browser has done its own \"back button\" scrolling,\n // which isn't right. https://github.com/flarum/core/issues/835\n const scroll = () => $(window).scrollTop(scrollTop - oldHeroHeight + heroHeight);\n scroll();\n setTimeout(scroll, 1);\n\n // If we've just returned from a discussion page, then the constructor will\n // have set the `lastDiscussion` property. If this is the case, we want to\n // scroll down to that discussion so that it's in view.\n if (this.lastDiscussion) {\n const $discussion = this.$(`.DiscussionListItem[data-id=\"${this.lastDiscussion.id()}\"]`);\n\n if ($discussion.length) {\n const indexTop = $('#header').outerHeight();\n const indexBottom = $(window).height();\n const discussionTop = $discussion.offset().top;\n const discussionBottom = discussionTop + $discussion.outerHeight();\n\n if (discussionTop < scrollTop + indexTop || discussionBottom > scrollTop + indexBottom) {\n $(window).scrollTop(discussionTop - indexTop);\n }\n }\n }\n }\n\n /**\n * Get the component to display as the hero.\n *\n * @return {MithrilComponent}\n */\n hero() {\n return WelcomeHero.component();\n }\n\n /**\n * Build an item list for the sidebar of the index page. By default this is a\n * \"New Discussion\" button, and then a DropdownSelect component containing a\n * list of navigation items.\n *\n * @return {ItemList}\n */\n sidebarItems() {\n const items = new ItemList();\n const canStartDiscussion = app.forum.attribute('canStartDiscussion') || !app.session.user;\n\n items.add('newDiscussion',\n Button.component({\n children: app.translator.trans(canStartDiscussion ? 'core.forum.index.start_discussion_button' : 'core.forum.index.cannot_start_discussion_button'),\n icon: 'fas fa-edit',\n className: 'Button Button--primary IndexPage-newDiscussion',\n itemClassName: 'App-primaryControl',\n onclick: this.newDiscussion.bind(this),\n disabled: !canStartDiscussion\n })\n );\n\n items.add('nav',\n SelectDropdown.component({\n children: this.navItems(this).toArray(),\n buttonClassName: 'Button',\n className: 'App-titleControl'\n })\n );\n\n return items;\n }\n\n /**\n * Build an item list for the navigation in the sidebar of the index page. By\n * default this is just the 'All Discussions' link.\n *\n * @return {ItemList}\n */\n navItems() {\n const items = new ItemList();\n const params = this.stickyParams();\n\n items.add('allDiscussions',\n LinkButton.component({\n href: app.route('index', params),\n children: app.translator.trans('core.forum.index.all_discussions_link'),\n icon: 'far fa-comments'\n }),\n 100\n );\n\n return items;\n }\n\n /**\n * Build an item list for the part of the toolbar which is concerned with how\n * the results are displayed. By default this is just a select box to change\n * the way discussions are sorted.\n *\n * @return {ItemList}\n */\n viewItems() {\n const items = new ItemList();\n const sortMap = app.cache.discussionList.sortMap();\n\n const sortOptions = {};\n for (const i in sortMap) {\n sortOptions[i] = app.translator.trans('core.forum.index_sort.' + i + '_button');\n }\n\n items.add('sort',\n Dropdown.component({\n buttonClassName: 'Button',\n label: sortOptions[this.params().sort] || Object.keys(sortMap).map(key => sortOptions[key])[0],\n children: Object.keys(sortOptions).map(value => {\n const label = sortOptions[value];\n const active = (this.params().sort || Object.keys(sortMap)[0]) === value;\n\n return Button.component({\n children: label,\n icon: active ? 'fas fa-check' : true,\n onclick: this.changeSort.bind(this, value),\n active: active,\n })\n }),\n })\n );\n\n return items;\n }\n\n /**\n * Build an item list for the part of the toolbar which is about taking action\n * on the results. By default this is just a \"mark all as read\" button.\n *\n * @return {ItemList}\n */\n actionItems() {\n const items = new ItemList();\n\n items.add('refresh',\n Button.component({\n title: app.translator.trans('core.forum.index.refresh_tooltip'),\n icon: 'fas fa-sync',\n className: 'Button Button--icon',\n onclick: () => {\n app.cache.discussionList.refresh();\n if (app.session.user) {\n app.store.find('users', app.session.user.id());\n m.redraw();\n }\n }\n })\n );\n\n if (app.session.user) {\n items.add('markAllAsRead',\n Button.component({\n title: app.translator.trans('core.forum.index.mark_all_as_read_tooltip'),\n icon: 'fas fa-check',\n className: 'Button Button--icon',\n onclick: this.markAllAsRead.bind(this)\n })\n );\n }\n\n return items;\n }\n\n /**\n * Return the current search query, if any. This is implemented to activate\n * the search box in the header.\n *\n * @see Search\n * @return {String}\n */\n searching() {\n return this.params().q;\n }\n\n /**\n * Redirect to the index page without a search filter. This is called when the\n * 'x' is clicked in the search box in the header.\n *\n * @see Search\n */\n clearSearch() {\n const params = this.params();\n delete params.q;\n\n m.route(app.route(this.props.routeName, params));\n }\n\n /**\n * Redirect to the index page using the given sort parameter.\n *\n * @param {String} sort\n */\n changeSort(sort) {\n const params = this.params();\n\n if (sort === Object.keys(app.cache.discussionList.sortMap())[0]) {\n delete params.sort;\n } else {\n params.sort = sort;\n }\n\n m.route(app.route(this.props.routeName, params));\n }\n\n /**\n * Get URL parameters that stick between filter changes.\n *\n * @return {Object}\n */\n stickyParams() {\n return {\n sort: m.route.param('sort'),\n q: m.route.param('q')\n };\n }\n\n /**\n * Get parameters to pass to the DiscussionList component.\n *\n * @return {Object}\n */\n params() {\n const params = this.stickyParams();\n\n params.filter = m.route.param('filter');\n\n return params;\n }\n\n /**\n * Log the user in and then open the composer for a new discussion.\n *\n * @return {Promise}\n */\n newDiscussion() {\n const deferred = m.deferred();\n\n if (app.session.user) {\n this.composeNewDiscussion(deferred);\n } else {\n app.modal.show(\n new LogInModal({\n onlogin: this.composeNewDiscussion.bind(this, deferred)\n })\n );\n }\n\n return deferred.promise;\n }\n\n /**\n * Initialize the composer for a new discussion.\n *\n * @param {Deferred} deferred\n * @return {Promise}\n */\n composeNewDiscussion(deferred) {\n const component = new DiscussionComposer({user: app.session.user});\n\n app.composer.load(component);\n app.composer.show();\n\n deferred.resolve(component);\n\n return deferred.promise;\n }\n\n /**\n * Mark all discussions as read.\n *\n * @return void\n */\n markAllAsRead() {\n const confirmation = confirm(app.translator.trans('core.forum.index.mark_all_as_read_confirmation'));\n\n if (confirmation) {\n app.session.user.save({markedAllAsReadAt: new Date()});\n }\n }\n}\n","import UserPage from './UserPage';\nimport LoadingIndicator from '../../common/components/LoadingIndicator';\nimport Button from '../../common/components/Button';\nimport CommentPost from './CommentPost';\n\n/**\n * The `PostsUserPage` component shows a user's activity feed inside of their\n * profile.\n */\nexport default class PostsUserPage extends UserPage {\n init() {\n super.init();\n\n /**\n * Whether or not the activity feed is currently loading.\n *\n * @type {Boolean}\n */\n this.loading = true;\n\n /**\n * Whether or not there are any more activity items that can be loaded.\n *\n * @type {Boolean}\n */\n this.moreResults = false;\n\n /**\n * The Post models in the feed.\n *\n * @type {Post[]}\n */\n this.posts = [];\n\n /**\n * The number of activity items to load per request.\n *\n * @type {Integer}\n */\n this.loadLimit = 20;\n\n this.loadUser(m.route.param('username'));\n }\n\n content() {\n let footer;\n\n if (this.loading) {\n footer = LoadingIndicator.component();\n } else if (this.moreResults) {\n footer = (\n <div className=\"PostsUserPage-loadMore\">\n {Button.component({\n children: app.translator.trans('core.forum.user.posts_load_more_button'),\n className: 'Button',\n onclick: this.loadMore.bind(this)\n })}\n </div>\n );\n }\n\n return (\n <div className=\"PostsUserPage\">\n <ul className=\"PostsUserPage-list\">\n {this.posts.map(post => (\n <li>\n <div className=\"PostsUserPage-discussion\">\n {app.translator.trans('core.forum.user.in_discussion_text', {discussion: <a href={app.route.post(post)} config={m.route}>{post.discussion().title()}</a>})}\n </div>\n {CommentPost.component({post})}\n </li>\n ))}\n </ul>\n {footer}\n </div>\n );\n }\n\n /**\n * Initialize the component with a user, and trigger the loading of their\n * activity feed.\n */\n show(user) {\n super.show(user);\n\n this.refresh();\n }\n\n /**\n * Clear and reload the user's activity feed.\n *\n * @public\n */\n refresh() {\n this.loading = true;\n this.posts = [];\n\n m.lazyRedraw();\n\n this.loadResults().then(this.parseResults.bind(this));\n }\n\n /**\n * Load a new page of the user's activity feed.\n *\n * @param {Integer} [offset] The position to start getting results from.\n * @return {Promise}\n * @protected\n */\n loadResults(offset) {\n return app.store.find('posts', {\n filter: {\n user: this.user.id(),\n type: 'comment'\n },\n page: {offset, limit: this.loadLimit},\n sort: '-createdAt'\n });\n }\n\n /**\n * Load the next page of results.\n *\n * @public\n */\n loadMore() {\n this.loading = true;\n this.loadResults(this.posts.length).then(this.parseResults.bind(this));\n }\n\n /**\n * Parse results and append them to the activity feed.\n *\n * @param {Post[]} results\n * @return {Post[]}\n */\n parseResults(results) {\n this.loading = false;\n\n [].push.apply(this.posts, results);\n\n this.moreResults = results.length >= this.loadLimit;\n m.redraw();\n\n return results;\n }\n}\n","import UserPage from './UserPage';\nimport DiscussionList from './DiscussionList';\n\n/**\n * The `DiscussionsUserPage` component shows a discussion list inside of a user\n * page.\n */\nexport default class DiscussionsUserPage extends UserPage {\n init() {\n super.init();\n\n this.loadUser(m.route.param('username'));\n }\n\n content() {\n return (\n <div className=\"DiscussionsUserPage\">\n {DiscussionList.component({\n params: {\n q: 'author:' + this.user.username(),\n sort: 'newest'\n }\n })}\n </div>\n );\n }\n}\n","import Component from '../../common/Component';\nimport Checkbox from '../../common/components/Checkbox';\nimport icon from '../../common/helpers/icon';\nimport ItemList from '../../common/utils/ItemList';\n\n/**\n * The `NotificationGrid` component displays a table of notification types and\n * methods, allowing the user to toggle each combination.\n *\n * ### Props\n *\n * - `user`\n */\nexport default class NotificationGrid extends Component {\n init() {\n /**\n * Information about the available notification methods.\n *\n * @type {Array}\n */\n this.methods = this.notificationMethods().toArray();\n\n /**\n * A map of notification type-method combinations to the checkbox instances\n * that represent them.\n *\n * @type {Object}\n */\n this.inputs = {};\n\n /**\n * Information about the available notification types.\n *\n * @type {Array}\n */\n this.types = this.notificationTypes().toArray();\n\n // For each of the notification type-method combinations, create and store a\n // new checkbox component instance, which we will render in the view.\n this.types.forEach(type => {\n this.methods.forEach(method => {\n const key = this.preferenceKey(type.name, method.name);\n const preference = this.props.user.preferences()[key];\n\n this.inputs[key] = new Checkbox({\n state: !!preference,\n disabled: typeof preference === 'undefined',\n onchange: () => this.toggle([key])\n });\n });\n });\n }\n\n view() {\n return (\n <table className=\"NotificationGrid\">\n <thead>\n <tr>\n <td/>\n {this.methods.map(method => (\n <th className=\"NotificationGrid-groupToggle\" onclick={this.toggleMethod.bind(this, method.name)}>\n {icon(method.icon)} {method.label}\n </th>\n ))}\n </tr>\n </thead>\n\n <tbody>\n {this.types.map(type => (\n <tr>\n <td className=\"NotificationGrid-groupToggle\" onclick={this.toggleType.bind(this, type.name)}>\n {icon(type.icon)} {type.label}\n </td>\n {this.methods.map(method => (\n <td className=\"NotificationGrid-checkbox\">\n {this.inputs[this.preferenceKey(type.name, method.name)].render()}\n </td>\n ))}\n </tr>\n ))}\n </tbody>\n </table>\n );\n }\n\n config(isInitialized) {\n if (isInitialized) return;\n\n this.$('thead .NotificationGrid-groupToggle').bind('mouseenter mouseleave', function(e) {\n const i = parseInt($(this).index(), 10) + 1;\n $(this).parents('table').find('td:nth-child(' + i + ')').toggleClass('highlighted', e.type === 'mouseenter');\n });\n\n this.$('tbody .NotificationGrid-groupToggle').bind('mouseenter mouseleave', function(e) {\n $(this).parent().find('td').toggleClass('highlighted', e.type === 'mouseenter');\n });\n }\n\n /**\n * Toggle the state of the given preferences, based on the value of the first\n * one.\n *\n * @param {Array} keys\n */\n toggle(keys) {\n const user = this.props.user;\n const preferences = user.preferences();\n const enabled = !preferences[keys[0]];\n\n keys.forEach(key => {\n const control = this.inputs[key];\n\n control.loading = true;\n preferences[key] = control.props.state = enabled;\n });\n\n m.redraw();\n\n user.save({preferences}).then(() => {\n keys.forEach(key => this.inputs[key].loading = false);\n\n m.redraw();\n });\n }\n\n /**\n * Toggle all notification types for the given method.\n *\n * @param {String} method\n */\n toggleMethod(method) {\n const keys = this.types\n .map(type => this.preferenceKey(type.name, method))\n .filter(key => !this.inputs[key].props.disabled);\n\n this.toggle(keys);\n }\n\n /**\n * Toggle all notification methods for the given type.\n *\n * @param {String} type\n */\n toggleType(type) {\n const keys = this.methods\n .map(method => this.preferenceKey(type, method.name))\n .filter(key => !this.inputs[key].props.disabled);\n\n this.toggle(keys);\n }\n\n /**\n * Get the name of the preference key for the given notification type-method\n * combination.\n *\n * @param {String} type\n * @param {String} method\n * @return {String}\n */\n preferenceKey(type, method) {\n return 'notify_' + type + '_' + method;\n }\n\n /**\n * Build an item list for the notification methods to display in the grid.\n *\n * Each notification method is an object which has the following properties:\n *\n * - `name` The name of the notification method.\n * - `icon` The icon to display in the column header.\n * - `label` The label to display in the column header.\n *\n * @return {ItemList}\n */\n notificationMethods() {\n const items = new ItemList();\n\n items.add('alert', {\n name: 'alert',\n icon: 'fas fa-bell',\n label: app.translator.trans('core.forum.settings.notify_by_web_heading'),\n });\n\n items.add('email', {\n name: 'email',\n icon: 'far fa-envelope',\n label: app.translator.trans('core.forum.settings.notify_by_email_heading'),\n });\n\n return items;\n }\n\n /**\n * Build an item list for the notification types to display in the grid.\n *\n * Each notification type is an object which has the following properties:\n *\n * - `name` The name of the notification type.\n * - `icon` The icon to display in the notification grid row.\n * - `label` The label to display in the notification grid row.\n *\n * @return {ItemList}\n */\n notificationTypes() {\n const items = new ItemList();\n\n items.add('discussionRenamed', {\n name: 'discussionRenamed',\n icon: 'fas fa-pencil-alt',\n label: app.translator.trans('core.forum.settings.notify_discussion_renamed_label')\n });\n\n return items;\n }\n}\n","import Modal from '../../common/components/Modal';\nimport Button from '../../common/components/Button';\n\n/**\n * The `ChangePasswordModal` component shows a modal dialog which allows the\n * user to send themself a password reset email.\n */\nexport default class ChangePasswordModal extends Modal {\n className() {\n return 'ChangePasswordModal Modal--small';\n }\n\n title() {\n return app.translator.trans('core.forum.change_password.title');\n }\n\n content() {\n return (\n <div className=\"Modal-body\">\n <div className=\"Form Form--centered\">\n <p className=\"helpText\">{app.translator.trans('core.forum.change_password.text')}</p>\n <div className=\"Form-group\">\n {Button.component({\n className: 'Button Button--primary Button--block',\n type: 'submit',\n loading: this.loading,\n children: app.translator.trans('core.forum.change_password.send_button')\n })}\n </div>\n </div>\n </div>\n );\n }\n\n onsubmit(e) {\n e.preventDefault();\n\n this.loading = true;\n\n app.request({\n method: 'POST',\n url: app.forum.attribute('apiUrl') + '/forgot',\n data: {email: app.session.user.email()}\n }).then(\n this.hide.bind(this),\n this.loaded.bind(this)\n );\n }\n}\n","import Modal from '../../common/components/Modal';\nimport Button from '../../common/components/Button';\n\n/**\n * The `ChangeEmailModal` component shows a modal dialog which allows the user\n * to change their email address.\n */\nexport default class ChangeEmailModal extends Modal {\n init() {\n super.init();\n\n /**\n * Whether or not the email has been changed successfully.\n *\n * @type {Boolean}\n */\n this.success = false;\n\n /**\n * The value of the email input.\n *\n * @type {function}\n */\n this.email = m.prop(app.session.user.email());\n\n /**\n * The value of the password input.\n *\n * @type {function}\n */\n this.password = m.prop('');\n }\n\n className() {\n return 'ChangeEmailModal Modal--small';\n }\n\n title() {\n return app.translator.trans('core.forum.change_email.title');\n }\n\n content() {\n if (this.success) {\n return (\n <div className=\"Modal-body\">\n <div className=\"Form Form--centered\">\n <p className=\"helpText\">{app.translator.trans('core.forum.change_email.confirmation_message', {email: <strong>{this.email()}</strong>})}</p>\n <div className=\"Form-group\">\n <Button className=\"Button Button--primary Button--block\" onclick={this.hide.bind(this)}>\n {app.translator.trans('core.forum.change_email.dismiss_button')}\n </Button>\n </div>\n </div>\n </div>\n );\n }\n\n return (\n <div className=\"Modal-body\">\n <div className=\"Form Form--centered\">\n <div className=\"Form-group\">\n <input type=\"email\" name=\"email\" className=\"FormControl\"\n placeholder={app.session.user.email()}\n bidi={this.email}\n disabled={this.loading}/>\n </div>\n <div className=\"Form-group\">\n <input type=\"password\" name=\"password\" className=\"FormControl\"\n placeholder={app.translator.trans('core.forum.change_email.confirm_password_placeholder')}\n bidi={this.password}\n disabled={this.loading}/>\n </div>\n <div className=\"Form-group\">\n {Button.component({\n className: 'Button Button--primary Button--block',\n type: 'submit',\n loading: this.loading,\n children: app.translator.trans('core.forum.change_email.submit_button')\n })}\n </div>\n </div>\n </div>\n );\n }\n\n onsubmit(e) {\n e.preventDefault();\n\n // If the user hasn't actually entered a different email address, we don't\n // need to do anything. Woot!\n if (this.email() === app.session.user.email()) {\n this.hide();\n return;\n }\n\n const oldEmail = app.session.user.email();\n\n this.loading = true;\n\n app.session.user.save({email: this.email()}, {\n errorHandler: this.onerror.bind(this),\n meta: {password: this.password()}\n })\n .then(() => this.success = true)\n .catch(() => {})\n .then(this.loaded.bind(this));\n }\n\n onerror(error) {\n if (error.status === 401) {\n error.alert.props.children = app.translator.trans('core.forum.change_email.incorrect_password_message');\n }\n\n super.onerror(error);\n }\n}\n","import UserPage from './UserPage';\nimport ItemList from '../../common/utils/ItemList';\nimport Switch from '../../common/components/Switch';\nimport Button from '../../common/components/Button';\nimport FieldSet from '../../common/components/FieldSet';\nimport NotificationGrid from './NotificationGrid';\nimport ChangePasswordModal from './ChangePasswordModal';\nimport ChangeEmailModal from './ChangeEmailModal';\nimport listItems from '../../common/helpers/listItems';\n\n/**\n * The `SettingsPage` component displays the user's settings control panel, in\n * the context of their user profile.\n */\nexport default class SettingsPage extends UserPage {\n init() {\n super.init();\n\n this.show(app.session.user);\n app.setTitle(app.translator.trans('core.forum.settings.title'));\n }\n\n content() {\n return (\n <div className=\"SettingsPage\">\n <ul>{listItems(this.settingsItems().toArray())}</ul>\n </div>\n );\n }\n\n /**\n * Build an item list for the user's settings controls.\n *\n * @return {ItemList}\n */\n settingsItems() {\n const items = new ItemList();\n\n items.add('account',\n FieldSet.component({\n label: app.translator.trans('core.forum.settings.account_heading'),\n className: 'Settings-account',\n children: this.accountItems().toArray()\n })\n );\n\n items.add('notifications',\n FieldSet.component({\n label: app.translator.trans('core.forum.settings.notifications_heading'),\n className: 'Settings-notifications',\n children: this.notificationsItems().toArray()\n })\n );\n\n items.add('privacy',\n FieldSet.component({\n label: app.translator.trans('core.forum.settings.privacy_heading'),\n className: 'Settings-privacy',\n children: this.privacyItems().toArray()\n })\n );\n\n return items;\n }\n\n /**\n * Build an item list for the user's account settings.\n *\n * @return {ItemList}\n */\n accountItems() {\n const items = new ItemList();\n\n items.add('changePassword',\n Button.component({\n children: app.translator.trans('core.forum.settings.change_password_button'),\n className: 'Button',\n onclick: () => app.modal.show(new ChangePasswordModal())\n })\n );\n\n items.add('changeEmail',\n Button.component({\n children: app.translator.trans('core.forum.settings.change_email_button'),\n className: 'Button',\n onclick: () => app.modal.show(new ChangeEmailModal())\n })\n );\n\n return items;\n }\n\n /**\n * Build an item list for the user's notification settings.\n *\n * @return {ItemList}\n */\n notificationsItems() {\n const items = new ItemList();\n\n items.add('notificationGrid', NotificationGrid.component({user: this.user}));\n\n return items;\n }\n\n /**\n * Generate a callback that will save a value to the given preference.\n *\n * @param {String} key\n * @return {Function}\n */\n preferenceSaver(key) {\n return (value, component) => {\n if (component) component.loading = true;\n m.redraw();\n\n this.user.savePreferences({[key]: value}).then(() => {\n if (component) component.loading = false;\n m.redraw();\n });\n };\n }\n\n /**\n * Build an item list for the user's privacy settings.\n *\n * @return {ItemList}\n */\n privacyItems() {\n const items = new ItemList();\n\n items.add('discloseOnline',\n Switch.component({\n children: app.translator.trans('core.forum.settings.privacy_disclose_online_label'),\n state: this.user.preferences().discloseOnline,\n onchange: (value, component) => {\n this.user.pushAttributes({lastSeenAt: null});\n this.preferenceSaver('discloseOnline')(value, component);\n }\n })\n );\n\n return items;\n }\n}\n","import Page from './Page';\nimport NotificationList from './NotificationList';\n\n/**\n * The `NotificationsPage` component shows the notifications list. It is only\n * used on mobile devices where the notifications dropdown is within the drawer.\n */\nexport default class NotificationsPage extends Page {\n init() {\n super.init();\n\n app.history.push('notifications');\n\n this.list = new NotificationList();\n this.list.load();\n\n this.bodyClass = 'App--notifications';\n }\n\n view() {\n return <div className=\"NotificationsPage\">{this.list.render()}</div>;\n }\n}\n","import IndexPage from './components/IndexPage';\nimport DiscussionPage from './components/DiscussionPage';\nimport PostsUserPage from './components/PostsUserPage';\nimport DiscussionsUserPage from './components/DiscussionsUserPage';\nimport SettingsPage from './components/SettingsPage';\nimport NotificationsPage from './components/NotificationsPage';\n\n/**\n * The `routes` initializer defines the forum app's routes.\n *\n * @param {App} app\n */\nexport default function(app) {\n app.routes = {\n 'index': {path: '/all', component: IndexPage.component()},\n 'index.filter': {path: '/:filter', component: IndexPage.component()},\n\n 'discussion': {path: '/d/:id', component: DiscussionPage.component()},\n 'discussion.near': {path: '/d/:id/:near', component: DiscussionPage.component()},\n\n 'user': {path: '/u/:username', component: PostsUserPage.component()},\n 'user.posts': {path: '/u/:username', component: PostsUserPage.component()},\n 'user.discussions': {path: '/u/:username/discussions', component: DiscussionsUserPage.component()},\n\n 'settings': {path: '/settings', component: SettingsPage.component()},\n 'notifications': {path: '/notifications', component: NotificationsPage.component()}\n };\n\n /**\n * Generate a URL to a discussion.\n *\n * @param {Discussion} discussion\n * @param {Integer} [near]\n * @return {String}\n */\n app.route.discussion = (discussion, near) => {\n const slug = discussion.slug();\n return app.route(near && near !== 1 ? 'discussion.near' : 'discussion', {\n id: discussion.id() + (slug.trim() ? '-' + slug : ''),\n near: near && near !== 1 ? near : undefined\n });\n };\n\n /**\n * Generate a URL to a post.\n *\n * @param {Post} post\n * @return {String}\n */\n app.route.post = post => {\n return app.route.discussion(post.discussion(), post.number());\n };\n\n /**\n * Generate a URL to a user.\n *\n * @param {User} user\n * @return {String}\n */\n app.route.user = user => {\n return app.route('user', {\n username: user.username()\n });\n };\n}\n","import Alert from '../../common/components/Alert';\nimport Button from '../../common/components/Button';\nimport icon from '../../common/helpers/icon';\n\n/**\n * Shows an alert if the user has not yet confirmed their email address.\n *\n * @param {ForumApp} app\n */\nexport default function alertEmailConfirmation(app) {\n const user = app.session.user;\n\n if (!user || user.isEmailConfirmed()) return;\n\n const resendButton = Button.component({\n className: 'Button Button--link',\n children: app.translator.trans('core.forum.user_email_confirmation.resend_button'),\n onclick: function() {\n resendButton.props.loading = true;\n m.redraw();\n\n app.request({\n method: 'POST',\n url: app.forum.attribute('apiUrl') + '/users/' + user.id() + '/send-confirmation',\n }).then(() => {\n resendButton.props.loading = false;\n resendButton.props.children = [icon('fas fa-check'), ' ', app.translator.trans('core.forum.user_email_confirmation.sent_message')];\n resendButton.props.disabled = true;\n m.redraw();\n }).catch(() => {\n resendButton.props.loading = false;\n m.redraw();\n });\n }\n });\n\n class ContainedAlert extends Alert {\n view() {\n const vdom = super.view();\n\n vdom.children = [<div className=\"container\">{vdom.children}</div>];\n\n return vdom;\n }\n }\n\n m.mount(\n $('<div/>').insertBefore('#content')[0],\n ContainedAlert.component({\n dismissible: false,\n children: app.translator.trans('core.forum.user_email_confirmation.alert_message', {email: <strong>{user.email()}</strong>}),\n controls: [resendButton]\n })\n );\n}\n","import History from './utils/History';\nimport Pane from './utils/Pane';\nimport Search from './components/Search';\nimport ReplyComposer from './components/ReplyComposer';\nimport DiscussionPage from './components/DiscussionPage';\nimport SignUpModal from './components/SignUpModal';\nimport HeaderPrimary from './components/HeaderPrimary';\nimport HeaderSecondary from './components/HeaderSecondary';\nimport Composer from './components/Composer';\nimport DiscussionRenamedNotification from './components/DiscussionRenamedNotification';\nimport CommentPost from './components/CommentPost';\nimport DiscussionRenamedPost from './components/DiscussionRenamedPost';\nimport routes from './routes';\nimport alertEmailConfirmation from './utils/alertEmailConfirmation';\nimport Application from '../common/Application';\nimport Navigation from '../common/components/Navigation';\n\nexport default class ForumApplication extends Application {\n /**\n * A map of notification types to their components.\n *\n * @type {Object}\n */\n notificationComponents = {\n discussionRenamed: DiscussionRenamedNotification\n };\n /**\n * A map of post types to their components.\n *\n * @type {Object}\n */\n postComponents = {\n comment: CommentPost,\n discussionRenamed: DiscussionRenamedPost\n };\n\n /**\n * The page's search component instance.\n *\n * @type {Search}\n */\n search = new Search();\n\n /**\n * An object which controls the state of the page's side pane.\n *\n * @type {Pane}\n */\n pane = null;\n\n /**\n * An object which controls the state of the page's drawer.\n *\n * @type {Drawer}\n */\n drawer = null;\n\n /**\n * The app's history stack, which keeps track of which routes the user visits\n * so that they can easily navigate back to the previous route.\n *\n * @type {History}\n */\n history = new History();\n\n constructor() {\n super();\n\n routes(this);\n }\n\n /**\n * @inheritdoc\n */\n mount() {\n // Get the configured default route and update that route's path to be '/'.\n // Push the homepage as the first route, so that the user will always be\n // able to click on the 'back' button to go home, regardless of which page\n // they started on.\n const defaultRoute = this.forum.attribute('defaultRoute');\n let defaultAction = 'index';\n\n for (const i in this.routes) {\n if (this.routes[i].path === defaultRoute) defaultAction = i;\n }\n\n this.routes[defaultAction].path = '/';\n this.history.push(defaultAction, this.translator.trans('core.forum.header.back_to_index_tooltip'), '/');\n\n m.mount(document.getElementById('app-navigation'), Navigation.component({className: 'App-backControl', drawer: true}));\n m.mount(document.getElementById('header-navigation'), Navigation.component());\n m.mount(document.getElementById('header-primary'), HeaderPrimary.component());\n m.mount(document.getElementById('header-secondary'), HeaderSecondary.component());\n\n this.pane = new Pane(document.getElementById('app'));\n this.composer = m.mount(document.getElementById('composer'), Composer.component());\n\n m.route.mode = 'pathname';\n super.mount();\n\n alertEmailConfirmation(this);\n\n // Route the home link back home when clicked. We do not want it to register\n // if the user is opening it in a new tab, however.\n $('#home-link').click(e => {\n if (e.ctrlKey || e.metaKey || e.which === 2) return;\n e.preventDefault();\n app.history.home();\n\n // Reload the current user so that their unread notification count is refreshed.\n if (app.session.user) {\n app.store.find('users', app.session.user.id());\n m.redraw();\n }\n });\n }\n\n /**\n * Check whether or not the user is currently composing a reply to a\n * discussion.\n *\n * @param {Discussion} discussion\n * @return {Boolean}\n */\n composingReplyTo(discussion) {\n return this.composer.component instanceof ReplyComposer &&\n this.composer.component.props.discussion === discussion &&\n this.composer.position !== Composer.PositionEnum.HIDDEN;\n }\n\n /**\n * Check whether or not the user is currently viewing a discussion.\n *\n * @param {Discussion} discussion\n * @return {Boolean}\n */\n viewingDiscussion(discussion) {\n return this.current instanceof DiscussionPage &&\n this.current.discussion === discussion;\n }\n\n /**\n * Callback for when an external authenticator (social login) action has\n * completed.\n *\n * If the payload indicates that the user has been logged in, then the page\n * will be reloaded. Otherwise, a SignUpModal will be opened, prefilled\n * with the provided details.\n *\n * @param {Object} payload A dictionary of props to pass into the sign up\n * modal. A truthy `authenticated` prop indicates that the user has logged\n * in, and thus the page is reloaded.\n * @public\n */\n authenticationComplete(payload) {\n if (payload.authenticated) {\n window.location.reload();\n } else {\n const modal = new SignUpModal(payload);\n this.modal.show(modal);\n modal.$('[name=password]').focus();\n }\n }\n}\n","import Button from '../../common/components/Button';\n\n/**\n * The `LogInButton` component displays a social login button which will open\n * a popup window containing the specified path.\n *\n * ### Props\n *\n* - `path`\n */\nexport default class LogInButton extends Button {\n static initProps(props) {\n props.className = (props.className || '') + ' LogInButton';\n\n props.onclick = function() {\n const width = 600;\n const height = 400;\n const $window = $(window);\n\n window.open(app.forum.attribute('baseUrl') + props.path, 'logInPopup',\n `width=${width},` +\n `height=${height},` +\n `top=${$window.height() / 2 - height / 2},` +\n `left=${$window.width() / 2 - width / 2},` +\n 'status=no,scrollbars=no,resizable=no');\n };\n\n super.initProps(props);\n }\n}\n","/**\n * The `SearchSource` interface defines a section of search results in the\n * search dropdown.\n *\n * Search sources should be registered with the `Search` component instance\n * (app.search) by extending the `sourceItems` method. When the user types a\n * query, each search source will be prompted to load search results via the\n * `search` method. When the dropdown is redrawn, it will be constructed by\n * putting together the output from the `view` method of each source.\n *\n * @interface\n */\nexport default class SearchSource {\n /**\n * Make a request to get results for the given query.\n *\n * @param {String} query\n * @return {Promise}\n */\n search() {\n }\n\n /**\n * Get an array of virtual <li>s that list the search results for the given\n * query.\n *\n * @param {String} query\n * @return {Object}\n */\n view() {\n }\n}\n","import compat from '../common/compat';\n\nimport PostControls from './utils/PostControls';\nimport KeyboardNavigatable from './utils/KeyboardNavigatable';\nimport slidable from './utils/slidable';\nimport affixSidebar from './utils/affixSidebar';\nimport History from './utils/History';\nimport DiscussionControls from './utils/DiscussionControls';\nimport alertEmailConfirmation from './utils/alertEmailConfirmation';\nimport UserControls from './utils/UserControls';\nimport Pane from './utils/Pane';\nimport DiscussionPage from './components/DiscussionPage';\nimport LogInModal from './components/LogInModal';\nimport ComposerBody from './components/ComposerBody';\nimport ForgotPasswordModal from './components/ForgotPasswordModal';\nimport Notification from './components/Notification';\nimport LogInButton from './components/LogInButton';\nimport DiscussionsUserPage from './components/DiscussionsUserPage';\nimport Composer from './components/Composer';\nimport SessionDropdown from './components/SessionDropdown';\nimport HeaderPrimary from './components/HeaderPrimary';\nimport PostEdited from './components/PostEdited';\nimport PostStream from './components/PostStream';\nimport ChangePasswordModal from './components/ChangePasswordModal';\nimport IndexPage from './components/IndexPage';\nimport Page from './components/Page';\nimport DiscussionRenamedNotification from './components/DiscussionRenamedNotification';\nimport DiscussionsSearchSource from './components/DiscussionsSearchSource';\nimport HeaderSecondary from './components/HeaderSecondary';\nimport ComposerButton from './components/ComposerButton';\nimport DiscussionList from './components/DiscussionList';\nimport ReplyPlaceholder from './components/ReplyPlaceholder';\nimport TextEditor from './components/TextEditor';\nimport AvatarEditor from './components/AvatarEditor';\nimport Post from './components/Post';\nimport SettingsPage from './components/SettingsPage';\nimport TerminalPost from './components/TerminalPost';\nimport ChangeEmailModal from './components/ChangeEmailModal';\nimport NotificationsDropdown from './components/NotificationsDropdown';\nimport UserPage from './components/UserPage';\nimport PostUser from './components/PostUser';\nimport UserCard from './components/UserCard';\nimport UsersSearchSource from './components/UsersSearchSource';\nimport NotificationGrid from './components/NotificationGrid';\nimport PostPreview from './components/PostPreview';\nimport EventPost from './components/EventPost';\nimport DiscussionHero from './components/DiscussionHero';\nimport PostMeta from './components/PostMeta';\nimport EditUserModal from './components/EditUserModal';\nimport SearchSource from './components/SearchSource';\nimport DiscussionRenamedPost from './components/DiscussionRenamedPost';\nimport DiscussionComposer from './components/DiscussionComposer';\nimport LogInButtons from './components/LogInButtons';\nimport NotificationList from './components/NotificationList';\nimport WelcomeHero from './components/WelcomeHero';\nimport SignUpModal from './components/SignUpModal';\nimport CommentPost from './components/CommentPost';\nimport ReplyComposer from './components/ReplyComposer';\nimport NotificationsPage from './components/NotificationsPage';\nimport PostStreamScrubber from './components/PostStreamScrubber';\nimport EditPostComposer from './components/EditPostComposer';\nimport RenameDiscussionModal from './components/RenameDiscussionModal';\nimport Search from './components/Search';\nimport DiscussionListItem from './components/DiscussionListItem';\nimport LoadingPost from './components/LoadingPost';\nimport PostsUserPage from './components/PostsUserPage';\nimport routes from './routes';\nimport ForumApplication from './ForumApplication';\n\nexport default Object.assign(compat, {\n 'utils/PostControls': PostControls,\n 'utils/KeyboardNavigatable': KeyboardNavigatable,\n 'utils/slidable': slidable,\n 'utils/affixSidebar': affixSidebar,\n 'utils/History': History,\n 'utils/DiscussionControls': DiscussionControls,\n 'utils/alertEmailConfirmation': alertEmailConfirmation,\n 'utils/UserControls': UserControls,\n 'utils/Pane': Pane,\n 'components/DiscussionPage': DiscussionPage,\n 'components/LogInModal': LogInModal,\n 'components/ComposerBody': ComposerBody,\n 'components/ForgotPasswordModal': ForgotPasswordModal,\n 'components/Notification': Notification,\n 'components/LogInButton': LogInButton,\n 'components/DiscussionsUserPage': DiscussionsUserPage,\n 'components/Composer': Composer,\n 'components/SessionDropdown': SessionDropdown,\n 'components/HeaderPrimary': HeaderPrimary,\n 'components/PostEdited': PostEdited,\n 'components/PostStream': PostStream,\n 'components/ChangePasswordModal': ChangePasswordModal,\n 'components/IndexPage': IndexPage,\n 'components/Page': Page,\n 'components/DiscussionRenamedNotification': DiscussionRenamedNotification,\n 'components/DiscussionsSearchSource': DiscussionsSearchSource,\n 'components/HeaderSecondary': HeaderSecondary,\n 'components/ComposerButton': ComposerButton,\n 'components/DiscussionList': DiscussionList,\n 'components/ReplyPlaceholder': ReplyPlaceholder,\n 'components/TextEditor': TextEditor,\n 'components/AvatarEditor': AvatarEditor,\n 'components/Post': Post,\n 'components/SettingsPage': SettingsPage,\n 'components/TerminalPost': TerminalPost,\n 'components/ChangeEmailModal': ChangeEmailModal,\n 'components/NotificationsDropdown': NotificationsDropdown,\n 'components/UserPage': UserPage,\n 'components/PostUser': PostUser,\n 'components/UserCard': UserCard,\n 'components/UsersSearchSource': UsersSearchSource,\n 'components/NotificationGrid': NotificationGrid,\n 'components/PostPreview': PostPreview,\n 'components/EventPost': EventPost,\n 'components/DiscussionHero': DiscussionHero,\n 'components/PostMeta': PostMeta,\n 'components/EditUserModal': EditUserModal,\n 'components/SearchSource': SearchSource,\n 'components/DiscussionRenamedPost': DiscussionRenamedPost,\n 'components/DiscussionComposer': DiscussionComposer,\n 'components/LogInButtons': LogInButtons,\n 'components/NotificationList': NotificationList,\n 'components/WelcomeHero': WelcomeHero,\n 'components/SignUpModal': SignUpModal,\n 'components/CommentPost': CommentPost,\n 'components/ReplyComposer': ReplyComposer,\n 'components/NotificationsPage': NotificationsPage,\n 'components/PostStreamScrubber': PostStreamScrubber,\n 'components/EditPostComposer': EditPostComposer,\n 'components/RenameDiscussionModal': RenameDiscussionModal,\n 'components/Search': Search,\n 'components/DiscussionListItem': DiscussionListItem,\n 'components/LoadingPost': LoadingPost,\n 'components/PostsUserPage': PostsUserPage,\n 'routes': routes,\n 'ForumApplication': ForumApplication\n});\n","import 'expose-loader?punycode!punycode';\nimport 'expose-loader?ColorThief!color-thief-browser';\n\nimport ForumApplication from './ForumApplication';\n\nconst app = new ForumApplication();\n\n// Backwards compatibility\nwindow.app = app;\n\nexport { app };\n\n// Export public API\n// export { default as Extend } from './Extend';\n// export { IndexPage, DicsussionList } from './components';\n\n// Export compat API\nimport compat from './compat';\n\ncompat.app = app;\n\nexport { compat };\n","/*\n * This file is part of Flarum.\n *\n * (c) Toby Zerner <toby.zerner@gmail.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nexport * from './src/common';\nexport * from './src/forum';"],"sourceRoot":""} |