{"version":3,"file":"index.5b62c1c4.js","mappings":"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,QACA,SACA,KACA,OACA,OACA,OACA,MACA,SACA,KACA,IACA,IACA,QACA,OACA,UACA,OACA,SACA,UACA,MACA,QACA,QACA,KACA,WACA,QACA,KACA,QACA,OACA,KACA,KACA,MACA,SAGIC,GAAiB,CACrB,YACA,cACA,eACA,QACA,cACA,cACA,sBACA,gBACA,eACA,eACA,gBACA,OACA,SACA,QACA,kBACA,aACA,cACA,iBACA,kBACA,UACA,uBACA,mBACA,yBACA,+BACA,aACA,OACA,YACA,SACA,QAEA,YACA,YACA,aACA,cAIIC,GAAiB,CACrB,SACA,WACA,QACA,UACA,UACA,UACA,UACA,MACA,WACA,OACA,QACA,UACA,QACA,cACA,gBACA,aACA,SACA,QACA,gBACA,eACA,MACA,OACA,eACA,QACA,gBACA,WACA,UACA,KACA,OACA,aACA,eACA,OACA,OACA,aACA,MACA,YACA,UACA,iBACA,eACA,mBACA,cACA,aACA,eACA,WACA,eACA,OACA,oBACA,YACA,aACA,WACA,QACA,OACA,QACA,SACA,gBACA,eACA,QACA,UACA,SAIIC,GAAkB,CACtB,QACA,WACA,SACA,MACA,aACA,eACA,aACA,gBACA,SACA,OACA,cACA,YACA,UACA,kBAGIC,GAAa,CACjB,gBACA,cACA,aACA,MACA,YACA,kBACA,sBACA,qBACA,sBACA,4BACA,iBACA,uBACA,4BACA,sBACA,aACA,wBACA,kBACA,mBACA,mBACA,oBACA,sBACA,oBACA,kBACA,SACA,gBACA,sBACA,4BACA,6BACA,sBACA,sBACA,kBACA,eACA,eACA,sBACA,sBACA,qBACA,sBACA,qBACA,cACA,oBACA,oBACA,oBACA,gBACA,eACA,qBACA,qBACA,qBACA,iBACA,eACA,aACA,mBACA,yBACA,0BACA,mBACA,mBACA,eACA,SACA,uBACA,aACA,aACA,cACA,eACA,eACA,eACA,cACA,QACA,OACA,YACA,YACA,QACA,eACA,cACA,aACA,cACA,oBACA,oBACA,oBACA,cACA,eACA,UACA,UACA,UACA,qBACA,oBACA,gBACA,MACA,YACA,aACA,SACA,YACA,UACA,cACA,SACA,OACA,aACA,iBACA,YACA,YACA,cACA,YACA,QACA,OACA,OACA,eACA,cACA,wBACA,eACA,yBACA,YACA,mBACA,iBACA,eACA,aACA,iBACA,eACA,oBACA,0BACA,yBACA,uBACA,wBACA,0BACA,cACA,MACA,6BACA,OACA,YACA,oBACA,iBACA,iBACA,cACA,kBACA,oBACA,WACA,WACA,eACA,iBACA,gBACA,sBACA,wBACA,qBACA,sBACA,SACA,UACA,OACA,oBACA,kBACA,mBACA,WACA,YACA,kBACA,OACA,iBACA,aACA,cACA,aACA,mBACA,sBACA,kBACA,SACA,gBACA,cACA,eACA,aACA,QACA,OACA,cACA,mBACA,qBACA,qBACA,oBACA,qBACA,oBACA,YACA,iBACA,aACA,YACA,cACA,gBACA,cACA,YACA,YACA,aACA,YACA,aACA,YACA,iBACA,WACA,YACA,WACA,YACA,SACA,OACA,SACA,aACA,kBACA,UACA,QACA,UACA,UACA,gBACA,iBACA,gBACA,gBACA,WACA,gBACA,aACA,aACA,UACA,iBACA,eACA,gBACA,cACA,mBACA,oBACA,oBACA,QACA,cACA,eACA,cACA,qBACA,iBACA,WACA,SACA,SACA,OACA,aACA,cACA,QACA,UACA,gBACA,sBACA,0BACA,4BACA,uBACA,uBACA,2BACA,6BACA,qBACA,sBACA,oBACA,iBACA,uBACA,2BACA,6BACA,wBACA,wBACA,4BACA,8BACA,sBACA,uBACA,qBACA,oBACA,mBACA,mBACA,wBACA,eACA,gBACA,QACA,WACA,MACA,WACA,eACA,aACA,iBACA,kBACA,uBACA,kBACA,wBACA,uBACA,wBACA,gBACA,sBACA,yBACA,sBACA,cACA,eACA,mBACA,gBACA,iBACA,cACA,iBACA,0BACA,MACA,YACA,gBACA,mBACA,kBACA,aACA,mBACA,sBACA,sBACA,6BACA,eACA,iBACA,aACA,gBACA,iBACA,eACA,cACA,cACA,aACA,eACA,eACA,cACA,SACA,QACA,cACA,aACA,eACA,YACA,eACA,WAGA7yB,UCziBF,MAAMra,GAAW,2BACXmtC,GAAW,CACf,KACA,KACA,KACA,KACA,MACA,QACA,UACA,MACA,MACA,WACA,KACA,SACA,OACA,OACA,QACA,QACA,aACA,OACA,QACA,OACA,UACA,MACA,SACA,WACA,SACA,SACA,MACA,QACA,QACA,QAIA,WACA,QACA,QACA,SACA,SACA,OACA,SACA,WAEIC,GAAW,CACf,OACA,QACA,OACA,YACA,MACA,YAIIC,GAAQ,CAEZ,SACA,WACA,UACA,SAEA,OACA,OACA,SACA,SAEA,SACA,SAEA,QACA,eACA,eACA,YACA,aACA,oBACA,aACA,aACA,cACA,cACA,gBACA,iBAEA,MACA,MACA,UACA,UAEA,cACA,oBACA,UACA,WACA,OAEA,UACA,YACA,oBACA,gBAEA,UACA,QAEA,OAEA,eAGIC,GAAc,CAClB,QACA,YACA,gBACA,aACA,iBACA,cACA,YACA,YAGIC,GAAmB,CACvB,cACA,aACA,gBACA,eAEA,UACA,UAEA,OACA,WACA,QACA,aACA,WACA,YACA,qBACA,YACA,qBACA,SACA,YAGIC,GAAqB,CACzB,YACA,OACA,QACA,UACA,SACA,WACA,eACA,SACA,UAGIC,GAAY,GAAG/uC,OACnB6uC,GACAF,GACAC,ICjJF,oBAAsB,OCDtB,SAAajkC,GACX,MAAM1J,EAAQ0J,EAAK1J,MAEb+tC,EAAc/tC,EAAMjB,OAAO,SAAUiB,EAAMf,SAAS,iBAAkB,gBAEtE+uC,EAAe,CACnB9wC,UAAW,SACXyD,MAAO,oCAEHstC,EAAoB,CACxBttC,MAAO,KACPK,SAAU,CACR,CACE9D,UAAW,UACXyD,MAAO,sBACPI,QAAS,QAITmtC,EAAwBxkC,EAAKJ,QAAQ2kC,EAAmB,CAC5DttC,MAAO,KACPG,IAAK,OAEDqtC,EAAwBzkC,EAAKJ,QAAQI,EAAK7I,iBAAkB,CAChE3D,UAAW,WAEPkxC,EAAyB1kC,EAAKJ,QAAQI,EAAKzI,kBAAmB,CAClE/D,UA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","sources":["webpack://mdclub-theme-material/./node_modules/mdclub-sdk-js/es/UserApi.js","webpack://mdclub-theme-material/./node_modules/mdclub-sdk-js/es/defaults.js","webpack://mdclub-theme-material/./node_modules/mdclub-sdk-js/es/util/requestAlias.js","webpack://mdclub-theme-material/./node_modules/mdclub-sdk-js/es/util/requestHandler.js","webpack://mdclub-theme-material/./node_modules/mdclub-sdk-js/es/util/requestMethod.js","webpack://mdclub-theme-material/./node_modules/mdui.jq/es/$.js","webpack://mdclub-theme-material/./node_modules/mdui.jq/es/JQ.js","webpack://mdclub-theme-material/./node_modules/mdui.jq/es/functions/each.js","webpack://mdclub-theme-material/./node_modules/mdui.jq/es/functions/param.js","webpack://mdclub-theme-material/./node_modules/mdui.jq/es/utils.js","webpack://mdclub-theme-material/./node_modules/mdui/es/mdui.js","webpack://mdclub-theme-material/./src/components/user-popover/actions.js","webpack://mdclub-theme-material/./src/utils/errorHandler.js","webpack://mdclub-theme-material/./src/utils/func.js","webpack://mdclub-theme-material/./node_modules/mdn-polyfills/CustomEvent.js","webpack://mdclub-theme-material/./node_modules/mdn-polyfills/MouseEvent.js","webpack://mdclub-theme-material/./node_modules/sha-1/dist/sha1.umd.js","webpack://mdclub-theme-material/./node_modules/time-stamp/index.js","webpack://mdclub-theme-material/./node_modules/highlight.js/lib/core.js","webpack://mdclub-theme-material/webpack/bootstrap","webpack://mdclub-theme-material/webpack/runtime/compat get default export","webpack://mdclub-theme-material/webpack/runtime/define property getters","webpack://mdclub-theme-material/webpack/runtime/hasOwnProperty shorthand","webpack://mdclub-theme-material/webpack/runtime/publicPath","webpack://mdclub-theme-material/./node_modules/promise-polyfill/src/finally.js","webpack://mdclub-theme-material/./node_modules/promise-polyfill/src/allSettled.js","webpack://mdclub-theme-material/./node_modules/promise-polyfill/src/index.js","webpack://mdclub-theme-material/./node_modules/promise-polyfill/src/polyfill.js","webpack://mdclub-theme-material/./node_modules/hyperapp/src/index.js","webpack://mdclub-theme-material/./node_modules/hyperapp-router/src/Link.js","webpack://mdclub-theme-material/./node_modules/hyperapp-router/src/parseRoute.js","webpack://mdclub-theme-material/./node_modules/hyperapp-router/src/Route.js","webpack://mdclub-theme-material/./node_modules/hyperapp-router/src/location.js","webpack://mdclub-theme-material/./node_modules/mdui/es/utils/dom.js","webpack://mdclub-theme-material/./src/utils/pubsub.js","webpack://mdclub-theme-material/./node_modules/mdui.jq/es/methods/each.js","webpack://mdclub-theme-material/./node_modules/mdui.jq/es/methods/addClass.js","webpack://mdclub-theme-material/./node_modules/mdui.jq/es/methods/insertBefore.js","webpack://mdclub-theme-material/./node_modules/mdui.jq/es/functions/map.js","webpack://mdclub-theme-material/./node_modules/mdui.jq/es/methods/map.js","webpack://mdclub-theme-material/./node_modules/mdui.jq/es/methods/is.js","webpack://mdclub-theme-material/./node_modules/mdui.jq/es/methods/remove.js","webpack://mdclub-theme-material/./node_modules/mdui.jq/es/methods/appendTo.js","webpack://mdclub-theme-material/./node_modules/mdui.jq/es/functions/unique.js","webpack://mdclub-theme-material/./node_modules/mdui.jq/es/methods/children.js","webpack://mdclub-theme-material/./node_modules/mdui.jq/es/methods/clone.js","webpack://mdclub-theme-material/./node_modules/mdui.jq/es/functions/utils/data.js","webpack://mdclub-theme-material/./node_modules/mdui.jq/es/functions/data.js","webpack://mdclub-theme-material/./node_modules/mdui.jq/es/methods/data.js","webpack://mdclub-theme-material/./node_modules/mdui.jq/es/functions/merge.js","webpack://mdclub-theme-material/./node_modules/mdui.jq/es/methods/utils/dir.js","webpack://mdclub-theme-material/./node_modules/mdui.jq/es/methods/get.js","webpack://mdclub-theme-material/./node_modules/mdui.jq/es/methods/find.js","webpack://mdclub-theme-material/./node_modules/mdui.jq/es/methods/next.js","webpack://mdclub-theme-material/./node_modules/mdui.jq/es/functions/contains.js","webpack://mdclub-theme-material/./node_modules/mdui.jq/es/methods/utils/event.js","webpack://mdclub-theme-material/./node_modules/mdui.jq/es/methods/off.js","webpack://mdclub-theme-material/./node_modules/mdui.jq/es/methods/on.js","webpack://mdclub-theme-material/./node_modules/mdui.jq/es/methods/parent.js","webpack://mdclub-theme-material/./node_modules/mdui.jq/es/methods/val.js","webpack://mdclub-theme-material/./node_modules/mdui.jq/es/methods/serializeArray.js","webpack://mdclub-theme-material/./node_modules/mdui.jq/es/methods/show.js","webpack://mdclub-theme-material/./node_modules/mdui.jq/es/methods/width.js","webpack://mdclub-theme-material/./node_modules/mdui.jq/es/methods/trigger.js","webpack://mdclub-theme-material/./node_modules/mdui.jq/es/methods/attr.js","webpack://mdclub-theme-material/./node_modules/mdui/es/jq_extends/methods/reflow.js","webpack://mdclub-theme-material/./node_modules/mdui/es/jq_extends/methods/transitionEnd.js","webpack://mdclub-theme-material/./node_modules/mdui/es/utils/mutation.js","webpack://mdclub-theme-material/./node_modules/mdui/es/jq_extends/methods/mutation.js","webpack://mdclub-theme-material/./node_modules/mdui/es/jq_extends/static/showOverlay.js","webpack://mdclub-theme-material/./node_modules/mdui/es/jq_extends/static/hideOverlay.js","webpack://mdclub-theme-material/./node_modules/mdui/es/jq_extends/static/lockScreen.js","webpack://mdclub-theme-material/./node_modules/mdui/es/jq_extends/static/unlockScreen.js","webpack://mdclub-theme-material/./node_modules/mdui/es/global/mutation.js","webpack://mdclub-theme-material/./node_modules/mdui.jq/es/functions/extend.js","webpack://mdclub-theme-material/./node_modules/mdui/es/utils/componentEvent.js","webpack://mdclub-theme-material/./node_modules/mdui.jq/es/methods/slice.js","webpack://mdclub-theme-material/./node_modules/mdui.jq/es/methods/eq.js","webpack://mdclub-theme-material/./node_modules/mdui.jq/es/methods/first.js","webpack://mdclub-theme-material/./node_modules/mdui.jq/es/methods/hasClass.js","webpack://mdclub-theme-material/./node_modules/mdui/es/components/headroom/index.js","webpack://mdclub-theme-material/./node_modules/mdui.jq/es/methods/position.js","webpack://mdclub-theme-material/./node_modules/mdui.jq/es/methods/offset.js","webpack://mdclub-theme-material/./node_modules/mdui.jq/es/methods/offsetParent.js","webpack://mdclub-theme-material/./node_modules/mdui/es/jq_extends/methods/transform.js","webpack://mdclub-theme-material/./node_modules/mdui/es/utils/touchHandler.js","webpack://mdclub-theme-material/./node_modules/mdui/es/components/ripple/index.js","webpack://mdclub-theme-material/./node_modules/mdui/es/components/textfield/index.js","webpack://mdclub-theme-material/./node_modules/mdui/es/components/appbar/index.js","webpack://mdclub-theme-material/./node_modules/mdui.jq/es/methods/hide.js","webpack://mdclub-theme-material/./node_modules/mdui.jq/es/methods/index.js","webpack://mdclub-theme-material/./node_modules/mdui/es/jq_extends/static/throttle.js","webpack://mdclub-theme-material/./node_modules/mdui/es/components/tab/index.js","webpack://mdclub-theme-material/./node_modules/mdui/es/utils/parseOptions.js","webpack://mdclub-theme-material/./node_modules/mdui/es/components/tab/customAttr.js","webpack://mdclub-theme-material/./node_modules/mdui.jq/es/methods/one.js","webpack://mdclub-theme-material/./node_modules/mdui/es/components/drawer/index.js","webpack://mdclub-theme-material/./node_modules/mdui/es/components/drawer/customAttr.js","webpack://mdclub-theme-material/./node_modules/mdui.jq/es/methods/before.js","webpack://mdclub-theme-material/./node_modules/mdui.jq/es/methods/append.js","webpack://mdclub-theme-material/./node_modules/mdui/es/utils/queue.js","webpack://mdclub-theme-material/./node_modules/mdui/es/components/dialog/class.js","webpack://mdclub-theme-material/./node_modules/mdui/es/components/dialog/index.js","webpack://mdclub-theme-material/./node_modules/mdui/es/components/dialog/dialog.js","webpack://mdclub-theme-material/./node_modules/mdui/es/components/dialog/confirm.js","webpack://mdclub-theme-material/./node_modules/mdui/es/jq_extends/methods/transformOrigin.js","webpack://mdclub-theme-material/./node_modules/mdui/es/jq_extends/static/guid.js","webpack://mdclub-theme-material/./node_modules/mdui/es/components/tooltip/index.js","webpack://mdclub-theme-material/./node_modules/mdui/es/components/tooltip/customAttr.js","webpack://mdclub-theme-material/./node_modules/mdui/es/components/snackbar/index.js","webpack://mdclub-theme-material/./node_modules/mdui/es/components/progress/spinner.js","webpack://mdclub-theme-material/./node_modules/mdui/es/components/menu/index.js","webpack://mdclub-theme-material/./node_modules/mdui/es/components/menu/customAttr.js","webpack://mdclub-theme-material/./node_modules/mdui.jq/es/functions/utils/ajax.js","webpack://mdclub-theme-material/./node_modules/mdui.jq/es/functions/ajax.js","webpack://mdclub-theme-material/./node_modules/mdclub-sdk-js/es/adapter/abstract/Browser.js","webpack://mdclub-theme-material/./node_modules/mdclub-sdk-js/es/adapter/BrowserAdapter.js","webpack://mdclub-theme-material/./src/utils/cookie.js","webpack://mdclub-theme-material/./src/initializer/index.js","webpack://mdclub-theme-material/./node_modules/mdclub-sdk-js/es/TopicApi.js","webpack://mdclub-theme-material/./node_modules/mdclub-sdk-js/es/QuestionApi.js","webpack://mdclub-theme-material/./node_modules/mdclub-sdk-js/es/ArticleApi.js","webpack://mdclub-theme-material/./src/utils/currentUser.js","webpack://mdclub-theme-material/./src/pages/index/actions.js","webpack://mdclub-theme-material/./src/components/follow/actions.js","webpack://mdclub-theme-material/./src/utils/actionsAbstract.js","webpack://mdclub-theme-material/./node_modules/mdclub-sdk-js/es/errors.js","webpack://mdclub-theme-material/./src/components/editor/actions.js","webpack://mdclub-theme-material/./src/components/editor/components/topic-selector/actions.js","webpack://mdclub-theme-material/./src/components/editor/state.js","webpack://mdclub-theme-material/./src/components/editor/components/topic-selector/state.js","webpack://mdclub-theme-material/./src/pages/questions/state.js","webpack://mdclub-theme-material/./src/utils/path.js","webpack://mdclub-theme-material/./src/utils/time.js","webpack://mdclub-theme-material/./src/pages/questions/actions.js","webpack://mdclub-theme-material/./node_modules/html-escaper/esm/index.js","webpack://mdclub-theme-material/./node_modules/mdclub-sdk-js/es/AnswerApi.js","webpack://mdclub-theme-material/./node_modules/mdclub-sdk-js/es/CommentApi.js","webpack://mdclub-theme-material/./src/components/vote/actions.js","webpack://mdclub-theme-material/./src/pages/question/stateDefault.js","webpack://mdclub-theme-material/./src/pages/question/actions.js","webpack://mdclub-theme-material/./src/pages/articles/state.js","webpack://mdclub-theme-material/./src/pages/articles/actions.js","webpack://mdclub-theme-material/./src/pages/article/stateDefault.js","webpack://mdclub-theme-material/./src/pages/article/actions.js","webpack://mdclub-theme-material/./src/pages/topics/state.js","webpack://mdclub-theme-material/./src/pages/topics/actions.js","webpack://mdclub-theme-material/./src/pages/topic/stateDefault.js","webpack://mdclub-theme-material/./src/pages/topic/actions.js","webpack://mdclub-theme-material/./src/pages/users/state.js","webpack://mdclub-theme-material/./src/pages/users/actions.js","webpack://mdclub-theme-material/./src/pages/user/stateDefault.js","webpack://mdclub-theme-material/./src/pages/user/actions.js","webpack://mdclub-theme-material/./src/components/login/actions.js","webpack://mdclub-theme-material/./src/components/register/actions.js","webpack://mdclub-theme-material/./src/components/reset/actions.js","webpack://mdclub-theme-material/./src/components/users-dialog/actions.js","webpack://mdclub-theme-material/./src/components/comments/actions.js","webpack://mdclub-theme-material/./src/components/report-dialog/actions.js","webpack://mdclub-theme-material/./src/components/share-dialog/actions.js","webpack://mdclub-theme-material/./node_modules/mdclub-sdk-js/es/NotificationApi.js","webpack://mdclub-theme-material/./src/pages/notifications/actions.js","webpack://mdclub-theme-material/./node_modules/mdclub-sdk-js/es/CaptchaApi.js","webpack://mdclub-theme-material/./node_modules/mdclub-sdk-js/es/TokenApi.js","webpack://mdclub-theme-material/./src/components/users-dialog/stateDefault.js","webpack://mdclub-theme-material/./src/components/comments/stateDefault.js","webpack://mdclub-theme-material/./src/components/report-dialog/stateDefault.js","webpack://mdclub-theme-material/./node_modules/mdclub-sdk-js/es/ReportApi.js","webpack://mdclub-theme-material/./src/initializer/actions.js","webpack://mdclub-theme-material/./src/components/theme/actions.js","webpack://mdclub-theme-material/./src/pages/index/state.js","webpack://mdclub-theme-material/./src/pages/index/components/topics/state.js","webpack://mdclub-theme-material/./src/pages/question/questionState.js","webpack://mdclub-theme-material/./src/pages/question/answerState.js","webpack://mdclub-theme-material/./src/pages/article/state.js","webpack://mdclub-theme-material/./src/pages/topic/state.js","webpack://mdclub-theme-material/./src/pages/user/state.js","webpack://mdclub-theme-material/./src/components/theme/state.js","webpack://mdclub-theme-material/./src/components/users-dialog/state.js","webpack://mdclub-theme-material/./src/components/comments/state.js","webpack://mdclub-theme-material/./src/components/report-dialog/state.js","webpack://mdclub-theme-material/./src/initializer/state.js","webpack://mdclub-theme-material/./src/pages/notifications/state.js","webpack://mdclub-theme-material/./src/components/login/state.js","webpack://mdclub-theme-material/./src/components/register/state.js","webpack://mdclub-theme-material/./src/components/reset/state.js","webpack://mdclub-theme-material/./src/components/share-dialog/state.js","webpack://mdclub-theme-material/./node_modules/classcat/index.js","webpack://mdclub-theme-material/./src/pages/index/components/header/view.jsx","webpack://mdclub-theme-material/./src/utils/scroll.js","webpack://mdclub-theme-material/./src/components/loading/view.jsx","webpack://mdclub-theme-material/./node_modules/highlight.js/es/core.js","webpack://mdclub-theme-material/./node_modules/highlight.js/es/languages/css.js","webpack://mdclub-theme-material/./node_modules/highlight.js/es/languages/javascript.js","webpack://mdclub-theme-material/./src/vendor/highlight/index.js","webpack://mdclub-theme-material/./node_modules/highlight.js/es/languages/xml.js","webpack://mdclub-theme-material/./node_modules/highlight.js/es/languages/json.js","webpack://mdclub-theme-material/./node_modules/highlight.js/es/languages/php.js","webpack://mdclub-theme-material/./src/utils/html.js","webpack://mdclub-theme-material/./src/components/icon-button/view.jsx","webpack://mdclub-theme-material/./src/components/follow/view.jsx","webpack://mdclub-theme-material/./src/components/topic-item/view.jsx","webpack://mdclub-theme-material/./src/pages/index/components/topics/view.jsx","webpack://mdclub-theme-material/./src/components/options-button/view.jsx","webpack://mdclub-theme-material/./src/components/user-popover/view.jsx","webpack://mdclub-theme-material/./src/pages/index/components/items/view.jsx","webpack://mdclub-theme-material/./src/pages/index/view.jsx","webpack://mdclub-theme-material/./src/components/loaded/view.jsx","webpack://mdclub-theme-material/./src/components/empty/view.jsx","webpack://mdclub-theme-material/./node_modules/mdui.jq/es/methods/last.js","webpack://mdclub-theme-material/./node_modules/mdui.editor/es/abstracts/commonAbstract.js","webpack://mdclub-theme-material/./node_modules/mdui.editor/es/command/index.js","webpack://mdclub-theme-material/./node_modules/mdui.editor/es/abstracts/menuAbstract.js","webpack://mdclub-theme-material/./node_modules/mdui.editor/es/abstracts/menuNativeAbstract.js","webpack://mdclub-theme-material/./node_modules/mdui.editor/es/menus/bold.js","webpack://mdclub-theme-material/./node_modules/mdui.editor/es/menus/clear_drafts.js","webpack://mdclub-theme-material/./node_modules/mdui.editor/es/utils/str.js","webpack://mdclub-theme-material/./node_modules/mdui.jq/es/methods/add.js","webpack://mdclub-theme-material/./node_modules/mdui.editor/es/menus/code.js","webpack://mdclub-theme-material/./node_modules/mdui.editor/es/menus/head.js","webpack://mdclub-theme-material/./node_modules/mdui/es/components/dialog/alert.js","webpack://mdclub-theme-material/./node_modules/mdui.editor/es/menus/image.js","webpack://mdclub-theme-material/./node_modules/mdui.editor/es/utils/format.js","webpack://mdclub-theme-material/./node_modules/mdui.editor/es/menus/italic.js","webpack://mdclub-theme-material/./node_modules/mdui/es/components/dialog/prompt.js","webpack://mdclub-theme-material/./node_modules/mdui.editor/es/menus/link.js","webpack://mdclub-theme-material/./node_modules/mdui.jq/es/methods/prev.js","webpack://mdclub-theme-material/./node_modules/mdui.editor/es/abstracts/menuListAbstract.js","webpack://mdclub-theme-material/./node_modules/mdui.editor/es/menus/ol.js","webpack://mdclub-theme-material/./node_modules/mdui.editor/es/menus/ul.js","webpack://mdclub-theme-material/./node_modules/mdui.editor/es/menus/index.js","webpack://mdclub-theme-material/./node_modules/mdui.editor/es/selection/index.js","webpack://mdclub-theme-material/./node_modules/mdui.editor/es/utils/ua.js","webpack://mdclub-theme-material/./node_modules/mdui.editor/es/utils/paste.js","webpack://mdclub-theme-material/./node_modules/mdui.editor/es/index.js","webpack://mdclub-theme-material/./node_modules/mdui.editor/es/utils/purifier.js","webpack://mdclub-theme-material/./src/components/editor/components/topic-chip/view.jsx","webpack://mdclub-theme-material/./src/components/editor/view.jsx","webpack://mdclub-theme-material/./src/components/list-item/view.jsx","webpack://mdclub-theme-material/./src/components/editor/components/topic-selector/view.jsx","webpack://mdclub-theme-material/./src/pages/questions/view.jsx","webpack://mdclub-theme-material/./src/components/user-line/view.jsx","webpack://mdclub-theme-material/./src/components/topics-bar/view.jsx","webpack://mdclub-theme-material/./src/components/list-header/view.jsx","webpack://mdclub-theme-material/./src/components/nav/view.jsx","webpack://mdclub-theme-material/./src/components/vote/view.jsx","webpack://mdclub-theme-material/./src/pages/question/components/comment-button/view.jsx","webpack://mdclub-theme-material/./src/pages/question/components/answer-item/view.jsx","webpack://mdclub-theme-material/./src/pages/question/view.jsx","webpack://mdclub-theme-material/./src/pages/articles/view.jsx","webpack://mdclub-theme-material/./src/components/comments/components/new-comment/view.jsx","webpack://mdclub-theme-material/./src/components/comments/components/reply/view.jsx","webpack://mdclub-theme-material/./src/components/comments/components/item/view.jsx","webpack://mdclub-theme-material/./src/components/comments/view.jsx","webpack://mdclub-theme-material/./src/components/comments/page.jsx","webpack://mdclub-theme-material/./src/pages/article/view.jsx","webpack://mdclub-theme-material/./src/pages/topics/view.jsx","webpack://mdclub-theme-material/./src/pages/topic/components/topic/view.jsx","webpack://mdclub-theme-material/./src/components/tab/view.jsx","webpack://mdclub-theme-material/./src/pages/topic/components/contexts/view.jsx","webpack://mdclub-theme-material/./src/pages/topic/view.jsx","webpack://mdclub-theme-material/./src/pages/users/components/item/view.jsx","webpack://mdclub-theme-material/./src/pages/users/view.jsx","webpack://mdclub-theme-material/./src/utils/loading.js","webpack://mdclub-theme-material/./src/components/avatar-upload/view.jsx","webpack://mdclub-theme-material/./src/components/appbar/components/toolbar/components/avatar/view.jsx","webpack://mdclub-theme-material/./src/components/appbar/components/toolbar/components/search-bar/view.jsx","webpack://mdclub-theme-material/./src/components/cover-upload/view.jsx","webpack://mdclub-theme-material/./src/pages/user/components/user/view.jsx","webpack://mdclub-theme-material/./src/pages/user/components/edit-info/view.jsx","webpack://mdclub-theme-material/./src/pages/user/components/contexts/view.jsx","webpack://mdclub-theme-material/./src/pages/user/view.jsx","webpack://mdclub-theme-material/./src/pages/notifications/components/item/view.jsx","webpack://mdclub-theme-material/./src/pages/notifications/view.jsx","webpack://mdclub-theme-material/./src/components/appbar/components/toolbar/components/notification/view.jsx","webpack://mdclub-theme-material/./src/components/appbar/components/toolbar/components/search-icon/view.jsx","webpack://mdclub-theme-material/./src/components/appbar/components/toolbar/view.jsx","webpack://mdclub-theme-material/./src/components/appbar/components/tabbar/view.jsx","webpack://mdclub-theme-material/./src/components/appbar/view.jsx","webpack://mdclub-theme-material/./src/components/drawer/view.jsx","webpack://mdclub-theme-material/./src/common/account/components/close.jsx","webpack://mdclub-theme-material/./src/common/account/components/title.jsx","webpack://mdclub-theme-material/./src/common/account/components/field-name.jsx","webpack://mdclub-theme-material/./src/common/account/components/field-password.jsx","webpack://mdclub-theme-material/./src/common/account/components/field-captcha.jsx","webpack://mdclub-theme-material/./src/common/account/components/submit.jsx","webpack://mdclub-theme-material/./src/components/login/components/actions.jsx","webpack://mdclub-theme-material/./src/components/login/view.jsx","webpack://mdclub-theme-material/./src/common/account/components/avatar.jsx","webpack://mdclub-theme-material/./src/common/account/components/field-email.jsx","webpack://mdclub-theme-material/./src/common/account/components/field-email-code.jsx","webpack://mdclub-theme-material/./src/components/register/components/send-actions.jsx","webpack://mdclub-theme-material/./src/components/register/components/register-actions.jsx","webpack://mdclub-theme-material/./src/components/register/view.jsx","webpack://mdclub-theme-material/./src/components/reset/components/verify-actions.jsx","webpack://mdclub-theme-material/./src/components/reset/components/reset-actions.jsx","webpack://mdclub-theme-material/./src/components/reset/view.jsx","webpack://mdclub-theme-material/./src/components/users-dialog/view.jsx","webpack://mdclub-theme-material/./src/components/report-dialog/view.jsx","webpack://mdclub-theme-material/./src/components/share-dialog/view.jsx","webpack://mdclub-theme-material/./src/components/comments/dialog.jsx","webpack://mdclub-theme-material/./src/initializer/view.jsx","webpack://mdclub-theme-material/./src/initializer/listener.js","webpack://mdclub-theme-material/./src/main.js"],"sourcesContent":["// @ts-ignore\nimport sha1 from 'sha-1';\nimport { getRequest, postRequest, putRequest, patchRequest, deleteRequest } from './util/requestAlias';\nimport { buildURL, buildRequestBody } from './util/requestHandler';\n/**\n * 🔑添加关注\n *\n * 添加关注。\n */\n\nexport const addFollow = params => postRequest(buildURL('/users/{user_id}/followers', params));\n/**\n * 🔐删除指定用户的头像,并重置为默认头像\n *\n * 删除指定用户的头像,并重置为默认头像。\n */\n\nexport const deleteAvatar = params => deleteRequest(buildURL('/users/{user_id}/avatar', params));\n/**\n * 🔐删除指定用户的封面,并重置为默认封面\n *\n * 删除指定用户的封面,并重置为默认封面。\n */\n\nexport const deleteCover = params => deleteRequest(buildURL('/users/{user_id}/cover', params));\n/**\n * 🔑取消关注\n *\n * 取消关注。\n */\n\nexport const deleteFollow = params => deleteRequest(buildURL('/users/{user_id}/followers', params));\n/**\n * 🔑删除当前登录用户的头像,并重置为默认头像\n *\n * 删除当前登录用户的头像,并重置为默认头像。\n */\n\nexport const deleteMyAvatar = () => deleteRequest(buildURL('/user/avatar', {}));\n/**\n * 🔑删除当前登录用户的封面,并重置为默认封面\n *\n * 删除当前登录用户的封面,并重置为默认封面。\n */\n\nexport const deleteMyCover = () => deleteRequest(buildURL('/user/cover', {}));\n/**\n * 🔐禁用指定用户\n *\n * 禁用指定用户。\n */\n\nexport const disable = params => postRequest(buildURL('/users/{user_id}/disable', params, ['include']));\n/**\n * 🔐批量禁用用户\n *\n * 批量禁用用户。\n */\n\nexport const disableMultiple = params => postRequest(buildURL('/users/{user_ids}/disable', params, ['include']));\n/**\n * 🔐恢复指定用户\n *\n * 恢复指定用户。\n */\n\nexport const enable = params => postRequest(buildURL('/users/{user_id}/enable', params, ['include']));\n/**\n * 🔐批量恢复用户\n *\n * 批量恢复用户。\n */\n\nexport const enableMultiple = params => postRequest(buildURL('/users/{user_ids}/enable', params, ['include']));\n/**\n * 获取指定用户信息\n *\n * 若是管理员调用该接口、或当前登录用户读取自己的个人信息,将返回用户的所有信息。 其他情况仅返回部分字段(去掉了隐私信息,隐私字段已用 🔐 标明)\n */\n\nexport const get = params => getRequest(buildURL('/users/{user_id}', params, ['include']));\n/**\n * 获取指定用户发表的回答\n *\n * 获取指定用户发表的回答。\n */\n\nexport const getAnswers = params => getRequest(buildURL('/users/{user_id}/answers', params, ['page', 'per_page', 'order', 'include']));\n/**\n * 获取指定用户发表的文章\n *\n * 获取指定用户发表的文章。\n */\n\nexport const getArticles = params => getRequest(buildURL('/users/{user_id}/articles', params, ['page', 'per_page', 'order', 'include']));\n/**\n * 获取指定用户发表的评论\n *\n * 获取指定用户发表的评论。\n */\n\nexport const getComments = params => getRequest(buildURL('/users/{user_id}/comments', params, ['page', 'per_page', 'order', 'include']));\n/**\n * 获取指定用户关注的用户列表\n *\n * 获取指定用户关注的用户列表。\n */\n\nexport const getFollowees = params => getRequest(buildURL('/users/{user_id}/followees', params, ['page', 'per_page', 'include']));\n/**\n * 获取指定用户的关注者\n *\n * 获取指定用户的关注者。\n */\n\nexport const getFollowers = params => getRequest(buildURL('/users/{user_id}/followers', params, ['page', 'per_page', 'include']));\n/**\n * 获取指定用户关注的文章列表\n *\n * 获取指定用户关注的文章列表。\n */\n\nexport const getFollowingArticles = params => getRequest(buildURL('/users/{user_id}/following_articles', params, ['page', 'per_page', 'include']));\n/**\n * 获取指定用户关注的提问列表\n *\n * 获取指定用户关注的提问列表。\n */\n\nexport const getFollowingQuestions = params => getRequest(buildURL('/users/{user_id}/following_questions', params, ['page', 'per_page', 'include']));\n/**\n * 获取指定用户关注的话题列表\n *\n * 获取指定用户关注的话题列表。\n */\n\nexport const getFollowingTopics = params => getRequest(buildURL('/users/{user_id}/following_topics', params, ['page', 'per_page', 'include']));\n/**\n * 获取用户列表\n *\n * 仅管理员可使用 email 参数进行搜索。 仅管理员可获取已禁用的用户列表。\n */\n\nexport const getList = (params = {}) => getRequest(buildURL('/users', params, ['page', 'per_page', 'order', 'include', 'user_id', 'username', 'email', 'disabled']));\n/**\n * 🔑获取当前登录用户的信息\n *\n * 获取当前登录用户的信息。\n */\n\nexport const getMine = (params = {}) => getRequest(buildURL('/user', params, ['include']));\n/**\n * 🔑获取当前登录用户发表的回答\n *\n * 获取当前登录用户发表的回答。\n */\n\nexport const getMyAnswers = (params = {}) => getRequest(buildURL('/user/answers', params, ['page', 'per_page', 'order', 'include']));\n/**\n * 🔑获取当前登录用户发表的文章\n *\n * 获取当前登录用户发表的文章。\n */\n\nexport const getMyArticles = (params = {}) => getRequest(buildURL('/user/articles', params, ['page', 'per_page', 'order', 'include']));\n/**\n * 🔑获取当前登录用户发表的评论\n *\n * 获取当前登录用户发表的评论。\n */\n\nexport const getMyComments = (params = {}) => getRequest(buildURL('/user/comments', params, ['page', 'per_page', 'order', 'include']));\n/**\n * 🔑获取当前登录用户关注的用户\n *\n * 获取当前登录用户关注的用户。\n */\n\nexport const getMyFollowees = (params = {}) => getRequest(buildURL('/user/followees', params, ['page', 'per_page', 'include']));\n/**\n * 🔑获取当前登录用户的关注者\n *\n * 获取当前登录用户的关注者。\n */\n\nexport const getMyFollowers = (params = {}) => getRequest(buildURL('/user/followers', params, ['page', 'per_page', 'include']));\n/**\n * 🔑获取登录用户关注的文章\n *\n * 获取登录用户关注的文章。\n */\n\nexport const getMyFollowingArticles = (params = {}) => getRequest(buildURL('/user/following_articles', params, ['page', 'per_page', 'include']));\n/**\n * 🔑获取登录用户关注的提问\n *\n * 获取登录用户关注的提问。\n */\n\nexport const getMyFollowingQuestions = (params = {}) => getRequest(buildURL('/user/following_questions', params, ['page', 'per_page', 'include']));\n/**\n * 🔑获取登录用户关注的话题\n *\n * 获取登录用户关注的话题。\n */\n\nexport const getMyFollowingTopics = (params = {}) => getRequest(buildURL('/user/following_topics', params, ['page', 'per_page', 'include']));\n/**\n * 🔑获取登录用户发表的提问\n *\n * 获取登录用户发表的提问。\n */\n\nexport const getMyQuestions = (params = {}) => getRequest(buildURL('/user/questions', params, ['page', 'per_page', 'order', 'include']));\n/**\n * 获取指定用户发表的提问\n *\n * 获取指定用户发表的提问。\n */\n\nexport const getQuestions = params => getRequest(buildURL('/users/{user_id}/questions', params, ['page', 'per_page', 'order', 'include']));\n/**\n * 验证邮箱并创建账号\n *\n * 返回用户信息。\n */\n\nexport const register = params => {\n if (params.password) {\n params.password = sha1(params.password);\n }\n\n return postRequest(buildURL('/users', params, ['include']), buildRequestBody(params, ['email', 'email_code', 'username', 'password']));\n};\n/**\n * 发送重置密码邮箱验证码\n *\n * 若返回参数中含参数 `captcha_token` 和 `captcha_image`,表示下次调用该接口时,需要用户输入图形验证码, 并把 `captcha_token` 和 `captcha_code` 参数传递到服务端。\n */\n\nexport const sendPasswordResetEmail = params => postRequest(buildURL('/user/password/email', params), buildRequestBody(params, ['email', 'captcha_token', 'captcha_code']));\n/**\n * 发送注册邮箱验证码\n *\n * 若返回信息中含参数 `captcha_token` 和 `captcha_image`,表示下次调用该接口时,需要用户输入图形验证码, 并把 `captcha_token` 和 `captcha_code` 参数传递到服务端。\n */\n\nexport const sendRegisterEmail = params => postRequest(buildURL('/user/register/email', params), buildRequestBody(params, ['email', 'captcha_token', 'captcha_code']));\n/**\n * 🔐更新指定用户信息\n *\n * 更新指定用户信息。\n */\n\nexport const update = params => patchRequest(buildURL('/users/{user_id}', params, ['include']), buildRequestBody(params, ['headline', 'bio', 'blog', 'company', 'location']));\n/**\n * 🔑更新当前登录用户信息\n *\n * 更新当前登录用户信息。\n */\n\nexport const updateMine = params => patchRequest(buildURL('/user', params, ['include']), buildRequestBody(params, ['headline', 'bio', 'blog', 'company', 'location']));\n/**\n * 验证邮箱并更新密码\n *\n * 验证邮箱并更新密码。\n */\n\nexport const updatePassword = params => {\n if (params.password) {\n params.password = sha1(params.password);\n }\n\n return putRequest(buildURL('/user/password', params), buildRequestBody(params, ['email', 'email_code', 'password']));\n};\n/**\n * 🔑上传当前登录用户的头像\n *\n * 上传当前登录用户的头像。\n */\n\nexport const uploadMyAvatar = params => {\n const formData = new FormData();\n formData.append('avatar', params.avatar);\n return postRequest(buildURL('/user/avatar'), formData);\n};\n/**\n * 🔑上传当前登录用户的封面\n *\n * 上传当前登录用户的封面。\n */\n\nexport const uploadMyCover = params => {\n const formData = new FormData();\n formData.append('cover', params.cover);\n return postRequest(buildURL('/user/cover'), formData);\n};","const defaults = {\n apiPath: '/api',\n methodOverride: false,\n timeout: 30000\n};\nexport default defaults;","import defaults from '../defaults';\nimport { isUndefined } from 'mdui.jq/es/utils';\nimport { GET, POST, PUT, PATCH, DELETE } from './requestMethod';\n\nif (isUndefined(defaults.adapter)) {\n throw new Error('adapter must be set. e.g. new BrowserAdapter() or new MiniProgramAdapter()');\n}\n\nconst requestHandle = (method, url, data) => {\n const headers = {};\n const XHttpMethodOverride = 'X-Http-Method-Override';\n\n if (defaults.methodOverride) {\n if (method === PATCH || method === PUT) {\n headers[XHttpMethodOverride] = method;\n method = POST;\n }\n\n if (method === DELETE) {\n headers[XHttpMethodOverride] = method;\n method = GET;\n }\n } // header 中添加 accept\n\n\n const accepts = ['application/json'];\n\n if (typeof document !== 'undefined' && !![].map && document.createElement('canvas').toDataURL('image/webp').indexOf('data:image/webp') === 0) {\n accepts.push('image/webp');\n }\n\n headers['Accept'] = accepts.join(', ');\n return defaults.adapter.request({\n method,\n url,\n data,\n headers\n });\n};\n\nexport const getRequest = (url, data) => requestHandle(GET, url, data);\nexport const postRequest = (url, data) => requestHandle(POST, url, data);\nexport const patchRequest = (url, data) => requestHandle(PATCH, url, data);\nexport const putRequest = (url, data) => requestHandle(PUT, url, data);\nexport const deleteRequest = (url, data) => requestHandle(DELETE, url, data);","import param from 'mdui.jq/es/functions/param';\n/**\n * 替换 url 中的变量占位符,并添加 queryParam\n * @param path 含变量占位符的 url\n * @param params 含 path 参数、 query 参数、requestBody 参数的对象\n * @param queryParamNames query 参数名数组\n */\n\nexport function buildURL(path, params = {}, queryParamNames = []) {\n // 替换 path 参数\n const url = path.replace(/({.*?})/g, match => {\n const pathParamName = match.substr(1, match.length - 2);\n\n if (params[pathParamName] == null) {\n throw new Error(`Missing required parameter ${pathParamName}`);\n }\n\n return String(params[pathParamName]);\n }); // 添加 query 参数\n\n const queryObj = {};\n queryParamNames.forEach(name => {\n if (params[name] != null) {\n queryObj[name] = String(params[name]);\n }\n });\n const queryString = param(queryObj);\n return queryString ? `${url}?${queryString}` : url;\n}\n/**\n * 生成 requestBody 参数\n * @param params 含 path 参数、 query 参数、requestBody 参数的对象\n * @param requestBodyNames requestBody 参数名数组\n */\n\nexport function buildRequestBody(params, requestBodyNames) {\n const requestBody = {};\n requestBodyNames.forEach(name => {\n if (params[name] != null) {\n requestBody[name] = params[name];\n }\n });\n return requestBody;\n}","const GET = 'GET';\nconst POST = 'POST';\nconst PUT = 'PUT';\nconst PATCH = 'PATCH';\nconst DELETE = 'DELETE';\nexport { GET, POST, PUT, PATCH, DELETE };","import each from './functions/each';\nimport { JQ } from './JQ';\nimport { getChildNodesArray, isArrayLike, isFunction, isNode, isString } from './utils';\n\nfunction get$() {\n const $ = function (selector) {\n if (!selector) {\n return new JQ();\n } // JQ\n\n\n if (selector instanceof JQ) {\n return selector;\n } // function\n\n\n if (isFunction(selector)) {\n if (/complete|loaded|interactive/.test(document.readyState) && document.body) {\n selector.call(document, $);\n } else {\n document.addEventListener('DOMContentLoaded', () => selector.call(document, $), false);\n }\n\n return new JQ([document]);\n } // String\n\n\n if (isString(selector)) {\n const html = selector.trim(); // 根据 HTML 字符串创建 JQ 对象\n\n if (html[0] === '<' && html[html.length - 1] === '>') {\n let toCreate = 'div';\n const tags = {\n li: 'ul',\n tr: 'tbody',\n td: 'tr',\n th: 'tr',\n tbody: 'table',\n option: 'select'\n };\n each(tags, (childTag, parentTag) => {\n if (html.indexOf(`<${childTag}`) === 0) {\n toCreate = parentTag;\n return false;\n }\n\n return;\n });\n return new JQ(getChildNodesArray(html, toCreate));\n } // 根据 CSS 选择器创建 JQ 对象\n\n\n const isIdSelector = selector[0] === '#' && !selector.match(/[ .<>:~]/);\n\n if (!isIdSelector) {\n return new JQ(document.querySelectorAll(selector));\n }\n\n const element = document.getElementById(selector.slice(1));\n\n if (element) {\n return new JQ([element]);\n }\n\n return new JQ();\n }\n\n if (isArrayLike(selector) && !isNode(selector)) {\n return new JQ(selector);\n }\n\n return new JQ([selector]);\n };\n\n $.fn = JQ.prototype;\n return $;\n}\n\nconst $ = get$();\nexport default $;","import each from './functions/each';\n/**\n * 为了使用模块扩充,这里不能使用默认导出\n */\n\nexport class JQ {\n constructor(arr) {\n this.length = 0;\n\n if (!arr) {\n return this;\n }\n\n each(arr, (i, item) => {\n // @ts-ignore\n this[i] = item;\n });\n this.length = arr.length;\n return this;\n }\n\n}","import { isArrayLike } from '../utils';\n\nfunction each(target, callback) {\n if (isArrayLike(target)) {\n for (let i = 0; i < target.length; i += 1) {\n if (callback.call(target[i], i, target[i]) === false) {\n return target;\n }\n }\n } else {\n const keys = Object.keys(target);\n\n for (let i = 0; i < keys.length; i += 1) {\n if (callback.call(target[keys[i]], keys[i], target[keys[i]]) === false) {\n return target;\n }\n }\n }\n\n return target;\n}\n\nexport default each;","import { isObjectLike } from '../utils';\nimport each from './each';\n/**\n * 将数组或对象序列化,序列化后的字符串可作为 URL 查询字符串使用\n *\n * 若传入数组,则格式必须和 serializeArray 方法的返回值一样\n * @param obj 对象或数组\n * @example\n```js\nparam({ width: 1680, height: 1050 });\n// width=1680&height=1050\n```\n * @example\n```js\nparam({ foo: { one: 1, two: 2 }})\n// foo[one]=1&foo[two]=2\n```\n * @example\n```js\nparam({ids: [1, 2, 3]})\n// ids[]=1&ids[]=2&ids[]=3\n```\n * @example\n```js\nparam([\n {\"name\":\"name\",\"value\":\"mdui\"},\n {\"name\":\"password\",\"value\":\"123456\"}\n])\n// name=mdui&password=123456\n```\n */\n\nfunction param(obj) {\n if (!isObjectLike(obj) && !Array.isArray(obj)) {\n return '';\n }\n\n const args = [];\n\n function destructure(key, value) {\n let keyTmp;\n\n if (isObjectLike(value)) {\n each(value, (i, v) => {\n if (Array.isArray(value) && !isObjectLike(v)) {\n keyTmp = '';\n } else {\n keyTmp = i;\n }\n\n destructure(`${key}[${keyTmp}]`, v);\n });\n } else {\n if (value == null || value === '') {\n keyTmp = '=';\n } else {\n keyTmp = `=${encodeURIComponent(value)}`;\n }\n\n args.push(encodeURIComponent(key) + keyTmp);\n }\n }\n\n if (Array.isArray(obj)) {\n each(obj, function () {\n destructure(this.name, this.value);\n });\n } else {\n each(obj, destructure);\n }\n\n return args.join('&');\n}\n\nexport default param;","function isNodeName(element, name) {\n return element.nodeName.toLowerCase() === name.toLowerCase();\n}\n\nfunction isFunction(target) {\n return typeof target === 'function';\n}\n\nfunction isString(target) {\n return typeof target === 'string';\n}\n\nfunction isNumber(target) {\n return typeof target === 'number';\n}\n\nfunction isBoolean(target) {\n return typeof target === 'boolean';\n}\n\nfunction isUndefined(target) {\n return typeof target === 'undefined';\n}\n\nfunction isNull(target) {\n return target === null;\n}\n\nfunction isWindow(target) {\n return target instanceof Window;\n}\n\nfunction isDocument(target) {\n return target instanceof Document;\n}\n\nfunction isElement(target) {\n return target instanceof Element;\n}\n\nfunction isNode(target) {\n return target instanceof Node;\n}\n/**\n * 是否是 IE 浏览器\n */\n\n\nfunction isIE() {\n // @ts-ignore\n return !!window.document.documentMode;\n}\n\nfunction isArrayLike(target) {\n if (isFunction(target) || isWindow(target)) {\n return false;\n }\n\n return isNumber(target.length);\n}\n\nfunction isObjectLike(target) {\n return typeof target === 'object' && target !== null;\n}\n\nfunction toElement(target) {\n return isDocument(target) ? target.documentElement : target;\n}\n/**\n * 把用 - 分隔的字符串转为驼峰(如 box-sizing 转换为 boxSizing)\n * @param string\n */\n\n\nfunction toCamelCase(string) {\n return string.replace(/^-ms-/, 'ms-').replace(/-([a-z])/g, (_, letter) => letter.toUpperCase());\n}\n/**\n * 把驼峰法转为用 - 分隔的字符串(如 boxSizing 转换为 box-sizing)\n * @param string\n */\n\n\nfunction toKebabCase(string) {\n return string.replace(/[A-Z]/g, replacer => '-' + replacer.toLowerCase());\n}\n/**\n * 获取元素的样式值\n * @param element\n * @param name\n */\n\n\nfunction getComputedStyleValue(element, name) {\n return window.getComputedStyle(element).getPropertyValue(toKebabCase(name));\n}\n/**\n * 检查元素的 box-sizing 是否是 border-box\n * @param element\n */\n\n\nfunction isBorderBox(element) {\n return getComputedStyleValue(element, 'box-sizing') === 'border-box';\n}\n/**\n * 获取元素的 padding, border, margin 宽度(两侧宽度的和,单位为px)\n * @param element\n * @param direction\n * @param extra\n */\n\n\nfunction getExtraWidth(element, direction, extra) {\n const position = direction === 'width' ? ['Left', 'Right'] : ['Top', 'Bottom'];\n return [0, 1].reduce((prev, _, index) => {\n let prop = extra + position[index];\n\n if (extra === 'border') {\n prop += 'Width';\n }\n\n return prev + parseFloat(getComputedStyleValue(element, prop) || '0');\n }, 0);\n}\n/**\n * 获取元素的样式值,对 width 和 height 进行过处理\n * @param element\n * @param name\n */\n\n\nfunction getStyle(element, name) {\n // width、height 属性使用 getComputedStyle 得到的值不准确,需要使用 getBoundingClientRect 获取\n if (name === 'width' || name === 'height') {\n const valueNumber = element.getBoundingClientRect()[name];\n\n if (isBorderBox(element)) {\n return `${valueNumber}px`;\n }\n\n return `${valueNumber - getExtraWidth(element, name, 'border') - getExtraWidth(element, name, 'padding')}px`;\n }\n\n return getComputedStyleValue(element, name);\n}\n/**\n * 获取子节点组成的数组\n * @param target\n * @param parent\n */\n\n\nfunction getChildNodesArray(target, parent) {\n const tempParent = document.createElement(parent);\n tempParent.innerHTML = target;\n return [].slice.call(tempParent.childNodes);\n}\n/**\n * 始终返回 false 的函数\n */\n\n\nfunction returnFalse() {\n return false;\n}\n/**\n * 数值单位的 CSS 属性\n */\n\n\nconst cssNumber = ['animationIterationCount', 'columnCount', 'fillOpacity', 'flexGrow', 'flexShrink', 'fontWeight', 'gridArea', 'gridColumn', 'gridColumnEnd', 'gridColumnStart', 'gridRow', 'gridRowEnd', 'gridRowStart', 'lineHeight', 'opacity', 'order', 'orphans', 'widows', 'zIndex', 'zoom'];\nexport { isNodeName, isArrayLike, isObjectLike, isFunction, isString, isNumber, isBoolean, isUndefined, isNull, isWindow, isDocument, isElement, isNode, isIE, toElement, toCamelCase, toKebabCase, getComputedStyleValue, isBorderBox, getExtraWidth, getStyle, getChildNodesArray, returnFalse, cssNumber };","import $ from 'mdui.jq/es/$'; // 避免页面加载完后直接执行css动画\n// https://css-tricks.com/transitions-only-after-page-load/\n\nsetTimeout(() => $('body').addClass('mdui-loaded'));\nconst mdui = {\n $: $\n};\nexport default mdui;","import $ from 'mdui.jq';\nimport mdui from 'mdui';\nimport { get as getUserInfo } from 'mdclub-sdk-js/es/UserApi';\nimport { findIndex } from '~/utils/func';\nimport apiCatch from '~/utils/errorHandler';\nexport default {\n /**\n * @param element\n * @param dataName 数据或数据列表的字段名\n * @param primaryKey 若是数据列表,则需要提供主键字段名\n * @param primaryValue 若是数据列表,则需要提供主键字段值\n * @param actions\n */\n onUserPopoverCreate: ({\n element,\n dataName,\n primaryKey = null,\n primaryValue = null\n }) => (state, actions) => {\n const $element = $(element);\n const $trigger = $element.find('.user-popover-trigger');\n const $popover = $element.find('.popover');\n const menu = new mdui.Menu($trigger, $popover);\n let timeoutId;\n $trigger.on('mouseenter', () => {\n timeoutId = setTimeout(() => {\n menu.open();\n actions.loadUserForUserPopover({\n dataName,\n primaryKey,\n primaryValue\n });\n }, 500);\n }).on('mouseleave', () => {\n clearTimeout(timeoutId);\n timeoutId = null;\n });\n $popover.on('mouseleave', () => {\n if (timeoutId) {\n clearTimeout(timeoutId);\n timeoutId = null;\n }\n\n menu.close();\n });\n },\n\n /**\n * 加载用户详细信息\n * @param dataName\n * @param primaryKey\n * @param primaryValue\n */\n loadUserForUserPopover: ({\n dataName,\n primaryKey,\n primaryValue\n }) => (state, actions) => {\n // eslint-disable-next-line no-eval\n const data = eval(`state.${dataName}`);\n let index;\n let item;\n\n if (primaryKey) {\n index = findIndex(data, primaryKey, primaryValue);\n item = data[index];\n }\n\n const user_id = primaryKey ? item.relationships.user.user_id : data.relationships.user.user_id;\n getUserInfo({\n user_id,\n include: ['is_followed', 'is_following', 'is_me']\n }).then(response => {\n if (primaryKey) {\n data[index].relationships.user = response.data;\n } else {\n data.relationships.user = response.data;\n }\n\n actions.setState({\n [dataName]: data\n });\n }).catch(apiCatch);\n }\n};","import mdui from 'mdui';\nexport default function apiCatch(response) {\n let message;\n\n if (response.code === 999999) {\n message = '网络错误';\n } else if (!response.message) {\n message = '未知错误';\n } else {\n message = response.message;\n }\n\n mdui.snackbar(message);\n}","import each from 'mdui.jq/es/functions/each';\nexport const findIndex = (items, prop, value) => {\n let result;\n each(items, (index, item) => {\n if (item[prop] === value) {\n result = index;\n return false;\n }\n\n return true;\n });\n return result;\n};\nexport const findItem = (items, prop, value) => {\n const index = findIndex(items, prop, value);\n return items[index];\n};","!function(){function t(t,e){e=e||{bubbles:!1,cancelable:!1,detail:void 0};var n=document.createEvent(\"CustomEvent\");return n.initCustomEvent(t,e.bubbles,e.cancelable,e.detail),n}\"function\"!=typeof window.CustomEvent&&(t.prototype=window.Event.prototype,window.CustomEvent=t)}();\n","!function(){try{return new MouseEvent(\"test\")}catch(e){}var e=function(e,t){t=t||{bubbles:!1,cancelable:!1};var n=document.createEvent(\"MouseEvent\");return n.initMouseEvent(e,t.bubbles,t.cancelable,window,0,t.screenX||0,t.screenY||0,t.clientX||0,t.clientY||0,t.ctrlKey||!1,t.altKey||!1,t.shiftKey||!1,t.metaKey||!1,t.button||0,t.relatedTarget||null),n};e.prototype=Event.prototype,window.MouseEvent=e}();\n","(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n typeof define === 'function' && define.amd ? define(factory) :\n (global = global || self, global.sha1 = factory());\n}(this, (function () { 'use strict';\n\n /**\n * @file This is a SHA-1 hash generator by JavaScript.\n * @author Hsun\n * @description For your convenience, the code comments have been translated by Google.\n ***/\n\n // 消息填充位,补足长度。\n // Message padding bits, complement the length.\n function fillString(str) {\n var blockAmount = ((str.length + 8) >> 6) + 1,\n blocks = [],\n i;\n\n for (i = 0; i < blockAmount * 16; i++) {\n blocks[i] = 0;\n }\n for (i = 0; i < str.length; i++) {\n blocks[i >> 2] |= str.charCodeAt(i) << (24 - (i & 3) * 8);\n }\n blocks[i >> 2] |= 0x80 << (24 - (i & 3) * 8);\n blocks[blockAmount * 16 - 1] = str.length * 8;\n\n return blocks;\n }\n\n // 将输入的二进制数组转化为十六进制的字符串。\n // Convert the input binary array to a hexadecimal string.\n function binToHex(binArray) {\n var hexString = \"0123456789abcdef\",\n str = \"\",\n i;\n\n for (i = 0; i < binArray.length * 4; i++) {\n str += hexString.charAt((binArray[i >> 2] >> ((3 - i % 4) * 8 + 4)) & 0xF) +\n hexString.charAt((binArray[i >> 2] >> ((3 - i % 4) * 8)) & 0xF);\n }\n\n return str;\n }\n\n // 核心函数,输出为长度为5的number数组,对应160位的消息摘要。\n // The core function, the output is a number array with a length of 5,\n // corresponding to a 160-bit message digest.\n function core(blockArray) {\n var w = [],\n a = 0x67452301,\n b = 0xEFCDAB89,\n c = 0x98BADCFE,\n d = 0x10325476,\n e = 0xC3D2E1F0,\n olda,\n oldb,\n oldc,\n oldd,\n olde,\n t,\n i,\n j;\n\n for (i = 0; i < blockArray.length; i += 16) { //每次处理512位 16*32\n olda = a;\n oldb = b;\n oldc = c;\n oldd = d;\n olde = e;\n\n for (j = 0; j < 80; j++) { //对每个512位进行80步操作\n if (j < 16) {\n w[j] = blockArray[i + j];\n } else {\n w[j] = cyclicShift(w[j - 3] ^ w[j - 8] ^ w[j - 14] ^ w[j - 16], 1);\n }\n t = modPlus(modPlus(cyclicShift(a, 5), ft(j, b, c, d)), modPlus(modPlus(e, w[j]), kt(j)));\n e = d;\n d = c;\n c = cyclicShift(b, 30);\n b = a;\n a = t;\n }\n\n a = modPlus(a, olda);\n b = modPlus(b, oldb);\n c = modPlus(c, oldc);\n d = modPlus(d, oldd);\n e = modPlus(e, olde);\n }\n\n return [a, b, c, d, e];\n }\n\n // 根据t值返回相应得压缩函数中用到的f函数。\n // According to the t value, return the corresponding f function used in\n // the compression function.\n function ft(t, b, c, d) {\n if (t < 20) {\n return (b & c) | ((~b) & d);\n } else if (t < 40) {\n return b ^ c ^ d;\n } else if (t < 60) {\n return (b & c) | (b & d) | (c & d);\n } else {\n return b ^ c ^ d;\n }\n }\n\n // 根据t值返回相应得压缩函数中用到的K值。\n // According to the t value, return the corresponding K value used in\n // the compression function.\n function kt(t) {\n return (t < 20) ? 0x5A827999 :\n (t < 40) ? 0x6ED9EBA1 :\n (t < 60) ? 0x8F1BBCDC : 0xCA62C1D6;\n }\n\n // 模2的32次方加法,因为JavaScript的number是双精度浮点数表示,所以将32位数拆成高16位和低16位分别进行相加\n // Modulo 2 to the 32nd power addition, because JavaScript's number is a\n // double-precision floating-point number, so the 32-bit number is split\n // into the upper 16 bits and the lower 16 bits are added separately.\n function modPlus(x, y) {\n var low = (x & 0xFFFF) + (y & 0xFFFF),\n high = (x >> 16) + (y >> 16) + (low >> 16);\n\n return (high << 16) | (low & 0xFFFF);\n }\n\n // 对输入的32位的num二进制数进行循环左移 ,因为JavaScript的number是双精度浮点数表示,所以移位需需要注意\n // Rotate left of the input 32-bit num binary number, because JavaScript's\n // number is a double-precision floating-point number, so you need to pay\n // attention to the shift.\n function cyclicShift(num, k) {\n return (num << k) | (num >>> (32 - k));\n }\n\n // 主函数根据输入的消息字符串计算消息摘要,返回十六进制表示的消息摘要\n // The main function calculates the message digest based on the input message\n // string and returns the message digest in hexadecimal.\n function sha1(s) {\n return binToHex(core(fillString(s)));\n }\n\n return sha1;\n\n})));\n","/*!\n * time-stamp \n *\n * Copyright (c) 2015-2018, Jon Schlinkert.\n * Released under the MIT License.\n */\n\n'use strict';\n\nvar dateRegex = /(?=(YYYY|YY|MM|DD|HH|mm|ss|ms))\\1([:\\/]*)/g;\nvar timespan = {\n YYYY: ['getFullYear', 4],\n YY: ['getFullYear', 2],\n MM: ['getMonth', 2, 1], // getMonth is zero-based, thus the extra increment field\n DD: ['getDate', 2],\n HH: ['getHours', 2],\n mm: ['getMinutes', 2],\n ss: ['getSeconds', 2],\n ms: ['getMilliseconds', 3]\n};\n\nvar timestamp = function(str, date, utc) {\n if (typeof str !== 'string') {\n date = str;\n str = 'YYYY-MM-DD';\n }\n\n if (!date) date = new Date();\n return str.replace(dateRegex, function(match, key, rest) {\n var args = timespan[key];\n var name = args[0];\n var chars = args[1];\n if (utc === true) name = 'getUTC' + name.slice(3);\n var val = '00' + String(date[name]() + (args[2] || 0));\n return val.slice(-chars) + (rest || '');\n });\n};\n\ntimestamp.utc = function(str, date) {\n return timestamp(str, date, true);\n};\n\nmodule.exports = timestamp;\n","var deepFreezeEs6 = {exports: {}};\n\nfunction deepFreeze(obj) {\n if (obj instanceof Map) {\n obj.clear = obj.delete = obj.set = function () {\n throw new Error('map is read-only');\n };\n } else if (obj instanceof Set) {\n obj.add = obj.clear = obj.delete = function () {\n throw new Error('set is read-only');\n };\n }\n\n // Freeze self\n Object.freeze(obj);\n\n Object.getOwnPropertyNames(obj).forEach(function (name) {\n var prop = obj[name];\n\n // Freeze prop if it is an object\n if (typeof prop == 'object' && !Object.isFrozen(prop)) {\n deepFreeze(prop);\n }\n });\n\n return obj;\n}\n\ndeepFreezeEs6.exports = deepFreeze;\ndeepFreezeEs6.exports.default = deepFreeze;\n\nvar deepFreeze$1 = deepFreezeEs6.exports;\n\n/** @typedef {import('highlight.js').CallbackResponse} CallbackResponse */\n/** @typedef {import('highlight.js').CompiledMode} CompiledMode */\n/** @implements CallbackResponse */\n\nclass Response {\n /**\n * @param {CompiledMode} mode\n */\n constructor(mode) {\n // eslint-disable-next-line no-undefined\n if (mode.data === undefined) mode.data = {};\n\n this.data = mode.data;\n this.isMatchIgnored = false;\n }\n\n ignoreMatch() {\n this.isMatchIgnored = true;\n }\n}\n\n/**\n * @param {string} value\n * @returns {string}\n */\nfunction escapeHTML(value) {\n return value\n .replace(/&/g, '&')\n .replace(//g, '>')\n .replace(/\"/g, '"')\n .replace(/'/g, ''');\n}\n\n/**\n * performs a shallow merge of multiple objects into one\n *\n * @template T\n * @param {T} original\n * @param {Record[]} objects\n * @returns {T} a single new object\n */\nfunction inherit$1(original, ...objects) {\n /** @type Record */\n const result = Object.create(null);\n\n for (const key in original) {\n result[key] = original[key];\n }\n objects.forEach(function(obj) {\n for (const key in obj) {\n result[key] = obj[key];\n }\n });\n return /** @type {T} */ (result);\n}\n\n/**\n * @typedef {object} Renderer\n * @property {(text: string) => void} addText\n * @property {(node: Node) => void} openNode\n * @property {(node: Node) => void} closeNode\n * @property {() => string} value\n */\n\n/** @typedef {{kind?: string, sublanguage?: boolean}} Node */\n/** @typedef {{walk: (r: Renderer) => void}} Tree */\n/** */\n\nconst SPAN_CLOSE = '';\n\n/**\n * Determines if a node needs to be wrapped in \n *\n * @param {Node} node */\nconst emitsWrappingTags = (node) => {\n return !!node.kind;\n};\n\n/**\n *\n * @param {string} name\n * @param {{prefix:string}} options\n */\nconst expandScopeName = (name, { prefix }) => {\n if (name.includes(\".\")) {\n const pieces = name.split(\".\");\n return [\n `${prefix}${pieces.shift()}`,\n ...(pieces.map((x, i) => `${x}${\"_\".repeat(i + 1)}`))\n ].join(\" \");\n }\n return `${prefix}${name}`;\n};\n\n/** @type {Renderer} */\nclass HTMLRenderer {\n /**\n * Creates a new HTMLRenderer\n *\n * @param {Tree} parseTree - the parse tree (must support `walk` API)\n * @param {{classPrefix: string}} options\n */\n constructor(parseTree, options) {\n this.buffer = \"\";\n this.classPrefix = options.classPrefix;\n parseTree.walk(this);\n }\n\n /**\n * Adds texts to the output stream\n *\n * @param {string} text */\n addText(text) {\n this.buffer += escapeHTML(text);\n }\n\n /**\n * Adds a node open to the output stream (if needed)\n *\n * @param {Node} node */\n openNode(node) {\n if (!emitsWrappingTags(node)) return;\n\n let scope = node.kind;\n if (node.sublanguage) {\n scope = `language-${scope}`;\n } else {\n scope = expandScopeName(scope, { prefix: this.classPrefix });\n }\n this.span(scope);\n }\n\n /**\n * Adds a node close to the output stream (if needed)\n *\n * @param {Node} node */\n closeNode(node) {\n if (!emitsWrappingTags(node)) return;\n\n this.buffer += SPAN_CLOSE;\n }\n\n /**\n * returns the accumulated buffer\n */\n value() {\n return this.buffer;\n }\n\n // helpers\n\n /**\n * Builds a span element\n *\n * @param {string} className */\n span(className) {\n this.buffer += ``;\n }\n}\n\n/** @typedef {{kind?: string, sublanguage?: boolean, children: Node[]} | string} Node */\n/** @typedef {{kind?: string, sublanguage?: boolean, children: Node[]} } DataNode */\n/** @typedef {import('highlight.js').Emitter} Emitter */\n/** */\n\nclass TokenTree {\n constructor() {\n /** @type DataNode */\n this.rootNode = { children: [] };\n this.stack = [this.rootNode];\n }\n\n get top() {\n return this.stack[this.stack.length - 1];\n }\n\n get root() { return this.rootNode; }\n\n /** @param {Node} node */\n add(node) {\n this.top.children.push(node);\n }\n\n /** @param {string} kind */\n openNode(kind) {\n /** @type Node */\n const node = { kind, children: [] };\n this.add(node);\n this.stack.push(node);\n }\n\n closeNode() {\n if (this.stack.length > 1) {\n return this.stack.pop();\n }\n // eslint-disable-next-line no-undefined\n return undefined;\n }\n\n closeAllNodes() {\n while (this.closeNode());\n }\n\n toJSON() {\n return JSON.stringify(this.rootNode, null, 4);\n }\n\n /**\n * @typedef { import(\"./html_renderer\").Renderer } Renderer\n * @param {Renderer} builder\n */\n walk(builder) {\n // this does not\n return this.constructor._walk(builder, this.rootNode);\n // this works\n // return TokenTree._walk(builder, this.rootNode);\n }\n\n /**\n * @param {Renderer} builder\n * @param {Node} node\n */\n static _walk(builder, node) {\n if (typeof node === \"string\") {\n builder.addText(node);\n } else if (node.children) {\n builder.openNode(node);\n node.children.forEach((child) => this._walk(builder, child));\n builder.closeNode(node);\n }\n return builder;\n }\n\n /**\n * @param {Node} node\n */\n static _collapse(node) {\n if (typeof node === \"string\") return;\n if (!node.children) return;\n\n if (node.children.every(el => typeof el === \"string\")) {\n // node.text = node.children.join(\"\");\n // delete node.children;\n node.children = [node.children.join(\"\")];\n } else {\n node.children.forEach((child) => {\n TokenTree._collapse(child);\n });\n }\n }\n}\n\n/**\n Currently this is all private API, but this is the minimal API necessary\n that an Emitter must implement to fully support the parser.\n\n Minimal interface:\n\n - addKeyword(text, kind)\n - addText(text)\n - addSublanguage(emitter, subLanguageName)\n - finalize()\n - openNode(kind)\n - closeNode()\n - closeAllNodes()\n - toHTML()\n\n*/\n\n/**\n * @implements {Emitter}\n */\nclass TokenTreeEmitter extends TokenTree {\n /**\n * @param {*} options\n */\n constructor(options) {\n super();\n this.options = options;\n }\n\n /**\n * @param {string} text\n * @param {string} kind\n */\n addKeyword(text, kind) {\n if (text === \"\") { return; }\n\n this.openNode(kind);\n this.addText(text);\n this.closeNode();\n }\n\n /**\n * @param {string} text\n */\n addText(text) {\n if (text === \"\") { return; }\n\n this.add(text);\n }\n\n /**\n * @param {Emitter & {root: DataNode}} emitter\n * @param {string} name\n */\n addSublanguage(emitter, name) {\n /** @type DataNode */\n const node = emitter.root;\n node.kind = name;\n node.sublanguage = true;\n this.add(node);\n }\n\n toHTML() {\n const renderer = new HTMLRenderer(this, this.options);\n return renderer.value();\n }\n\n finalize() {\n return true;\n }\n}\n\n/**\n * @param {string} value\n * @returns {RegExp}\n * */\n\n/**\n * @param {RegExp | string } re\n * @returns {string}\n */\nfunction source(re) {\n if (!re) return null;\n if (typeof re === \"string\") return re;\n\n return re.source;\n}\n\n/**\n * @param {RegExp | string } re\n * @returns {string}\n */\nfunction lookahead(re) {\n return concat('(?=', re, ')');\n}\n\n/**\n * @param {RegExp | string } re\n * @returns {string}\n */\nfunction anyNumberOfTimes(re) {\n return concat('(?:', re, ')*');\n}\n\n/**\n * @param {RegExp | string } re\n * @returns {string}\n */\nfunction optional(re) {\n return concat('(?:', re, ')?');\n}\n\n/**\n * @param {...(RegExp | string) } args\n * @returns {string}\n */\nfunction concat(...args) {\n const joined = args.map((x) => source(x)).join(\"\");\n return joined;\n}\n\n/**\n * @param { Array } args\n * @returns {object}\n */\nfunction stripOptionsFromArgs(args) {\n const opts = args[args.length - 1];\n\n if (typeof opts === 'object' && opts.constructor === Object) {\n args.splice(args.length - 1, 1);\n return opts;\n } else {\n return {};\n }\n}\n\n/**\n * Any of the passed expresssions may match\n *\n * Creates a huge this | this | that | that match\n * @param {(RegExp | string)[] } args\n * @returns {string}\n */\nfunction either(...args) {\n /** @type { object & {capture?: boolean} } */\n const opts = stripOptionsFromArgs(args);\n const joined = '('\n + (opts.capture ? \"\" : \"?:\")\n + args.map((x) => source(x)).join(\"|\") + \")\";\n return joined;\n}\n\n/**\n * @param {RegExp | string} re\n * @returns {number}\n */\nfunction countMatchGroups(re) {\n return (new RegExp(re.toString() + '|')).exec('').length - 1;\n}\n\n/**\n * Does lexeme start with a regular expression match at the beginning\n * @param {RegExp} re\n * @param {string} lexeme\n */\nfunction startsWith(re, lexeme) {\n const match = re && re.exec(lexeme);\n return match && match.index === 0;\n}\n\n// BACKREF_RE matches an open parenthesis or backreference. To avoid\n// an incorrect parse, it additionally matches the following:\n// - [...] elements, where the meaning of parentheses and escapes change\n// - other escape sequences, so we do not misparse escape sequences as\n// interesting elements\n// - non-matching or lookahead parentheses, which do not capture. These\n// follow the '(' with a '?'.\nconst BACKREF_RE = /\\[(?:[^\\\\\\]]|\\\\.)*\\]|\\(\\??|\\\\([1-9][0-9]*)|\\\\./;\n\n// **INTERNAL** Not intended for outside usage\n// join logically computes regexps.join(separator), but fixes the\n// backreferences so they continue to match.\n// it also places each individual regular expression into it's own\n// match group, keeping track of the sequencing of those match groups\n// is currently an exercise for the caller. :-)\n/**\n * @param {(string | RegExp)[]} regexps\n * @param {{joinWith: string}} opts\n * @returns {string}\n */\nfunction _rewriteBackreferences(regexps, { joinWith }) {\n let numCaptures = 0;\n\n return regexps.map((regex) => {\n numCaptures += 1;\n const offset = numCaptures;\n let re = source(regex);\n let out = '';\n\n while (re.length > 0) {\n const match = BACKREF_RE.exec(re);\n if (!match) {\n out += re;\n break;\n }\n out += re.substring(0, match.index);\n re = re.substring(match.index + match[0].length);\n if (match[0][0] === '\\\\' && match[1]) {\n // Adjust the backreference.\n out += '\\\\' + String(Number(match[1]) + offset);\n } else {\n out += match[0];\n if (match[0] === '(') {\n numCaptures++;\n }\n }\n }\n return out;\n }).map(re => `(${re})`).join(joinWith);\n}\n\n/** @typedef {import('highlight.js').Mode} Mode */\n/** @typedef {import('highlight.js').ModeCallback} ModeCallback */\n\n// Common regexps\nconst MATCH_NOTHING_RE = /\\b\\B/;\nconst IDENT_RE = '[a-zA-Z]\\\\w*';\nconst UNDERSCORE_IDENT_RE = '[a-zA-Z_]\\\\w*';\nconst NUMBER_RE = '\\\\b\\\\d+(\\\\.\\\\d+)?';\nconst C_NUMBER_RE = '(-?)(\\\\b0[xX][a-fA-F0-9]+|(\\\\b\\\\d+(\\\\.\\\\d*)?|\\\\.\\\\d+)([eE][-+]?\\\\d+)?)'; // 0x..., 0..., decimal, float\nconst BINARY_NUMBER_RE = '\\\\b(0b[01]+)'; // 0b...\nconst RE_STARTERS_RE = '!|!=|!==|%|%=|&|&&|&=|\\\\*|\\\\*=|\\\\+|\\\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\\\?|\\\\[|\\\\{|\\\\(|\\\\^|\\\\^=|\\\\||\\\\|=|\\\\|\\\\||~';\n\n/**\n* @param { Partial & {binary?: string | RegExp} } opts\n*/\nconst SHEBANG = (opts = {}) => {\n const beginShebang = /^#![ ]*\\//;\n if (opts.binary) {\n opts.begin = concat(\n beginShebang,\n /.*\\b/,\n opts.binary,\n /\\b.*/);\n }\n return inherit$1({\n scope: 'meta',\n begin: beginShebang,\n end: /$/,\n relevance: 0,\n /** @type {ModeCallback} */\n \"on:begin\": (m, resp) => {\n if (m.index !== 0) resp.ignoreMatch();\n }\n }, opts);\n};\n\n// Common modes\nconst BACKSLASH_ESCAPE = {\n begin: '\\\\\\\\[\\\\s\\\\S]', relevance: 0\n};\nconst APOS_STRING_MODE = {\n scope: 'string',\n begin: '\\'',\n end: '\\'',\n illegal: '\\\\n',\n contains: [BACKSLASH_ESCAPE]\n};\nconst QUOTE_STRING_MODE = {\n scope: 'string',\n begin: '\"',\n end: '\"',\n illegal: '\\\\n',\n contains: [BACKSLASH_ESCAPE]\n};\nconst PHRASAL_WORDS_MODE = {\n begin: /\\b(a|an|the|are|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|they|like|more)\\b/\n};\n/**\n * Creates a comment mode\n *\n * @param {string | RegExp} begin\n * @param {string | RegExp} end\n * @param {Mode | {}} [modeOptions]\n * @returns {Partial}\n */\nconst COMMENT = function(begin, end, modeOptions = {}) {\n const mode = inherit$1(\n {\n scope: 'comment',\n begin,\n end,\n contains: []\n },\n modeOptions\n );\n mode.contains.push({\n scope: 'doctag',\n // hack to avoid the space from being included. the space is necessary to\n // match here to prevent the plain text rule below from gobbling up doctags\n begin: '[ ]*(?=(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):)',\n end: /(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):/,\n excludeBegin: true,\n relevance: 0\n });\n const ENGLISH_WORD = either(\n // list of common 1 and 2 letter words in English\n \"I\",\n \"a\",\n \"is\",\n \"so\",\n \"us\",\n \"to\",\n \"at\",\n \"if\",\n \"in\",\n \"it\",\n \"on\",\n // note: this is not an exhaustive list of contractions, just popular ones\n /[A-Za-z]+['](d|ve|re|ll|t|s|n)/, // contractions - can't we'd they're let's, etc\n /[A-Za-z]+[-][a-z]+/, // `no-way`, etc.\n /[A-Za-z][a-z]{2,}/ // allow capitalized words at beginning of sentences\n );\n // looking like plain text, more likely to be a comment\n mode.contains.push(\n {\n // TODO: how to include \", (, ) without breaking grammars that use these for\n // comment delimiters?\n // begin: /[ ]+([()\"]?([A-Za-z'-]{3,}|is|a|I|so|us|[tT][oO]|at|if|in|it|on)[.]?[()\":]?([.][ ]|[ ]|\\))){3}/\n // ---\n\n // this tries to find sequences of 3 english words in a row (without any\n // \"programming\" type syntax) this gives us a strong signal that we've\n // TRULY found a comment - vs perhaps scanning with the wrong language.\n // It's possible to find something that LOOKS like the start of the\n // comment - but then if there is no readable text - good chance it is a\n // false match and not a comment.\n //\n // for a visual example please see:\n // https://github.com/highlightjs/highlight.js/issues/2827\n\n begin: concat(\n /[ ]+/, // necessary to prevent us gobbling up doctags like /* @author Bob Mcgill */\n '(',\n ENGLISH_WORD,\n /[.]?[:]?([.][ ]|[ ])/,\n '){3}') // look for 3 words in a row\n }\n );\n return mode;\n};\nconst C_LINE_COMMENT_MODE = COMMENT('//', '$');\nconst C_BLOCK_COMMENT_MODE = COMMENT('/\\\\*', '\\\\*/');\nconst HASH_COMMENT_MODE = COMMENT('#', '$');\nconst NUMBER_MODE = {\n scope: 'number',\n begin: NUMBER_RE,\n relevance: 0\n};\nconst C_NUMBER_MODE = {\n scope: 'number',\n begin: C_NUMBER_RE,\n relevance: 0\n};\nconst BINARY_NUMBER_MODE = {\n scope: 'number',\n begin: BINARY_NUMBER_RE,\n relevance: 0\n};\nconst REGEXP_MODE = {\n // this outer rule makes sure we actually have a WHOLE regex and not simply\n // an expression such as:\n //\n // 3 / something\n //\n // (which will then blow up when regex's `illegal` sees the newline)\n begin: /(?=\\/[^/\\n]*\\/)/,\n contains: [{\n scope: 'regexp',\n begin: /\\//,\n end: /\\/[gimuy]*/,\n illegal: /\\n/,\n contains: [\n BACKSLASH_ESCAPE,\n {\n begin: /\\[/,\n end: /\\]/,\n relevance: 0,\n contains: [BACKSLASH_ESCAPE]\n }\n ]\n }]\n};\nconst TITLE_MODE = {\n scope: 'title',\n begin: IDENT_RE,\n relevance: 0\n};\nconst UNDERSCORE_TITLE_MODE = {\n scope: 'title',\n begin: UNDERSCORE_IDENT_RE,\n relevance: 0\n};\nconst METHOD_GUARD = {\n // excludes method names from keyword processing\n begin: '\\\\.\\\\s*' + UNDERSCORE_IDENT_RE,\n relevance: 0\n};\n\n/**\n * Adds end same as begin mechanics to a mode\n *\n * Your mode must include at least a single () match group as that first match\n * group is what is used for comparison\n * @param {Partial} mode\n */\nconst END_SAME_AS_BEGIN = function(mode) {\n return Object.assign(mode,\n {\n /** @type {ModeCallback} */\n 'on:begin': (m, resp) => { resp.data._beginMatch = m[1]; },\n /** @type {ModeCallback} */\n 'on:end': (m, resp) => { if (resp.data._beginMatch !== m[1]) resp.ignoreMatch(); }\n });\n};\n\nvar MODES = /*#__PURE__*/Object.freeze({\n __proto__: null,\n MATCH_NOTHING_RE: MATCH_NOTHING_RE,\n IDENT_RE: IDENT_RE,\n UNDERSCORE_IDENT_RE: UNDERSCORE_IDENT_RE,\n NUMBER_RE: NUMBER_RE,\n C_NUMBER_RE: C_NUMBER_RE,\n BINARY_NUMBER_RE: BINARY_NUMBER_RE,\n RE_STARTERS_RE: RE_STARTERS_RE,\n SHEBANG: SHEBANG,\n BACKSLASH_ESCAPE: BACKSLASH_ESCAPE,\n APOS_STRING_MODE: APOS_STRING_MODE,\n QUOTE_STRING_MODE: QUOTE_STRING_MODE,\n PHRASAL_WORDS_MODE: PHRASAL_WORDS_MODE,\n COMMENT: COMMENT,\n C_LINE_COMMENT_MODE: C_LINE_COMMENT_MODE,\n C_BLOCK_COMMENT_MODE: C_BLOCK_COMMENT_MODE,\n HASH_COMMENT_MODE: HASH_COMMENT_MODE,\n NUMBER_MODE: NUMBER_MODE,\n C_NUMBER_MODE: C_NUMBER_MODE,\n BINARY_NUMBER_MODE: BINARY_NUMBER_MODE,\n REGEXP_MODE: REGEXP_MODE,\n TITLE_MODE: TITLE_MODE,\n UNDERSCORE_TITLE_MODE: UNDERSCORE_TITLE_MODE,\n METHOD_GUARD: METHOD_GUARD,\n END_SAME_AS_BEGIN: END_SAME_AS_BEGIN\n});\n\n/**\n@typedef {import('highlight.js').CallbackResponse} CallbackResponse\n@typedef {import('highlight.js').CompilerExt} CompilerExt\n*/\n\n// Grammar extensions / plugins\n// See: https://github.com/highlightjs/highlight.js/issues/2833\n\n// Grammar extensions allow \"syntactic sugar\" to be added to the grammar modes\n// without requiring any underlying changes to the compiler internals.\n\n// `compileMatch` being the perfect small example of now allowing a grammar\n// author to write `match` when they desire to match a single expression rather\n// than being forced to use `begin`. The extension then just moves `match` into\n// `begin` when it runs. Ie, no features have been added, but we've just made\n// the experience of writing (and reading grammars) a little bit nicer.\n\n// ------\n\n// TODO: We need negative look-behind support to do this properly\n/**\n * Skip a match if it has a preceding dot\n *\n * This is used for `beginKeywords` to prevent matching expressions such as\n * `bob.keyword.do()`. The mode compiler automatically wires this up as a\n * special _internal_ 'on:begin' callback for modes with `beginKeywords`\n * @param {RegExpMatchArray} match\n * @param {CallbackResponse} response\n */\nfunction skipIfHasPrecedingDot(match, response) {\n const before = match.input[match.index - 1];\n if (before === \".\") {\n response.ignoreMatch();\n }\n}\n\n/**\n *\n * @type {CompilerExt}\n */\nfunction scopeClassName(mode, _parent) {\n // eslint-disable-next-line no-undefined\n if (mode.className !== undefined) {\n mode.scope = mode.className;\n delete mode.className;\n }\n}\n\n/**\n * `beginKeywords` syntactic sugar\n * @type {CompilerExt}\n */\nfunction beginKeywords(mode, parent) {\n if (!parent) return;\n if (!mode.beginKeywords) return;\n\n // for languages with keywords that include non-word characters checking for\n // a word boundary is not sufficient, so instead we check for a word boundary\n // or whitespace - this does no harm in any case since our keyword engine\n // doesn't allow spaces in keywords anyways and we still check for the boundary\n // first\n mode.begin = '\\\\b(' + mode.beginKeywords.split(' ').join('|') + ')(?!\\\\.)(?=\\\\b|\\\\s)';\n mode.__beforeBegin = skipIfHasPrecedingDot;\n mode.keywords = mode.keywords || mode.beginKeywords;\n delete mode.beginKeywords;\n\n // prevents double relevance, the keywords themselves provide\n // relevance, the mode doesn't need to double it\n // eslint-disable-next-line no-undefined\n if (mode.relevance === undefined) mode.relevance = 0;\n}\n\n/**\n * Allow `illegal` to contain an array of illegal values\n * @type {CompilerExt}\n */\nfunction compileIllegal(mode, _parent) {\n if (!Array.isArray(mode.illegal)) return;\n\n mode.illegal = either(...mode.illegal);\n}\n\n/**\n * `match` to match a single expression for readability\n * @type {CompilerExt}\n */\nfunction compileMatch(mode, _parent) {\n if (!mode.match) return;\n if (mode.begin || mode.end) throw new Error(\"begin & end are not supported with match\");\n\n mode.begin = mode.match;\n delete mode.match;\n}\n\n/**\n * provides the default 1 relevance to all modes\n * @type {CompilerExt}\n */\nfunction compileRelevance(mode, _parent) {\n // eslint-disable-next-line no-undefined\n if (mode.relevance === undefined) mode.relevance = 1;\n}\n\n// allow beforeMatch to act as a \"qualifier\" for the match\n// the full match begin must be [beforeMatch][begin]\nconst beforeMatchExt = (mode, parent) => {\n if (!mode.beforeMatch) return;\n // starts conflicts with endsParent which we need to make sure the child\n // rule is not matched multiple times\n if (mode.starts) throw new Error(\"beforeMatch cannot be used with starts\");\n\n const originalMode = Object.assign({}, mode);\n Object.keys(mode).forEach((key) => { delete mode[key]; });\n\n mode.keywords = originalMode.keywords;\n mode.begin = concat(originalMode.beforeMatch, lookahead(originalMode.begin));\n mode.starts = {\n relevance: 0,\n contains: [\n Object.assign(originalMode, { endsParent: true })\n ]\n };\n mode.relevance = 0;\n\n delete originalMode.beforeMatch;\n};\n\n// keywords that should have no default relevance value\nconst COMMON_KEYWORDS = [\n 'of',\n 'and',\n 'for',\n 'in',\n 'not',\n 'or',\n 'if',\n 'then',\n 'parent', // common variable name\n 'list', // common variable name\n 'value' // common variable name\n];\n\nconst DEFAULT_KEYWORD_SCOPE = \"keyword\";\n\n/**\n * Given raw keywords from a language definition, compile them.\n *\n * @param {string | Record | Array} rawKeywords\n * @param {boolean} caseInsensitive\n */\nfunction compileKeywords(rawKeywords, caseInsensitive, scopeName = DEFAULT_KEYWORD_SCOPE) {\n /** @type KeywordDict */\n const compiledKeywords = Object.create(null);\n\n // input can be a string of keywords, an array of keywords, or a object with\n // named keys representing scopeName (which can then point to a string or array)\n if (typeof rawKeywords === 'string') {\n compileList(scopeName, rawKeywords.split(\" \"));\n } else if (Array.isArray(rawKeywords)) {\n compileList(scopeName, rawKeywords);\n } else {\n Object.keys(rawKeywords).forEach(function(scopeName) {\n // collapse all our objects back into the parent object\n Object.assign(\n compiledKeywords,\n compileKeywords(rawKeywords[scopeName], caseInsensitive, scopeName)\n );\n });\n }\n return compiledKeywords;\n\n // ---\n\n /**\n * Compiles an individual list of keywords\n *\n * Ex: \"for if when while|5\"\n *\n * @param {string} scopeName\n * @param {Array} keywordList\n */\n function compileList(scopeName, keywordList) {\n if (caseInsensitive) {\n keywordList = keywordList.map(x => x.toLowerCase());\n }\n keywordList.forEach(function(keyword) {\n const pair = keyword.split('|');\n compiledKeywords[pair[0]] = [scopeName, scoreForKeyword(pair[0], pair[1])];\n });\n }\n}\n\n/**\n * Returns the proper score for a given keyword\n *\n * Also takes into account comment keywords, which will be scored 0 UNLESS\n * another score has been manually assigned.\n * @param {string} keyword\n * @param {string} [providedScore]\n */\nfunction scoreForKeyword(keyword, providedScore) {\n // manual scores always win over common keywords\n // so you can force a score of 1 if you really insist\n if (providedScore) {\n return Number(providedScore);\n }\n\n return commonKeyword(keyword) ? 0 : 1;\n}\n\n/**\n * Determines if a given keyword is common or not\n *\n * @param {string} keyword */\nfunction commonKeyword(keyword) {\n return COMMON_KEYWORDS.includes(keyword.toLowerCase());\n}\n\n/*\n\nFor the reasoning behind this please see:\nhttps://github.com/highlightjs/highlight.js/issues/2880#issuecomment-747275419\n\n*/\n\n/**\n * @type {Record}\n */\nconst seenDeprecations = {};\n\n/**\n * @param {string} message\n */\nconst error = (message) => {\n console.error(message);\n};\n\n/**\n * @param {string} message\n * @param {any} args\n */\nconst warn = (message, ...args) => {\n console.log(`WARN: ${message}`, ...args);\n};\n\n/**\n * @param {string} version\n * @param {string} message\n */\nconst deprecated = (version, message) => {\n if (seenDeprecations[`${version}/${message}`]) return;\n\n console.log(`Deprecated as of ${version}. ${message}`);\n seenDeprecations[`${version}/${message}`] = true;\n};\n\n/* eslint-disable no-throw-literal */\n\n/**\n@typedef {import('highlight.js').CompiledMode} CompiledMode\n*/\n\nconst MultiClassError = new Error();\n\n/**\n * Renumbers labeled scope names to account for additional inner match\n * groups that otherwise would break everything.\n *\n * Lets say we 3 match scopes:\n *\n * { 1 => ..., 2 => ..., 3 => ... }\n *\n * So what we need is a clean match like this:\n *\n * (a)(b)(c) => [ \"a\", \"b\", \"c\" ]\n *\n * But this falls apart with inner match groups:\n *\n * (a)(((b)))(c) => [\"a\", \"b\", \"b\", \"b\", \"c\" ]\n *\n * Our scopes are now \"out of alignment\" and we're repeating `b` 3 times.\n * What needs to happen is the numbers are remapped:\n *\n * { 1 => ..., 2 => ..., 5 => ... }\n *\n * We also need to know that the ONLY groups that should be output\n * are 1, 2, and 5. This function handles this behavior.\n *\n * @param {CompiledMode} mode\n * @param {Array} regexes\n * @param {{key: \"beginScope\"|\"endScope\"}} opts\n */\nfunction remapScopeNames(mode, regexes, { key }) {\n let offset = 0;\n const scopeNames = mode[key];\n /** @type Record */\n const emit = {};\n /** @type Record */\n const positions = {};\n\n for (let i = 1; i <= regexes.length; i++) {\n positions[i + offset] = scopeNames[i];\n emit[i + offset] = true;\n offset += countMatchGroups(regexes[i - 1]);\n }\n // we use _emit to keep track of which match groups are \"top-level\" to avoid double\n // output from inside match groups\n mode[key] = positions;\n mode[key]._emit = emit;\n mode[key]._multi = true;\n}\n\n/**\n * @param {CompiledMode} mode\n */\nfunction beginMultiClass(mode) {\n if (!Array.isArray(mode.begin)) return;\n\n if (mode.skip || mode.excludeBegin || mode.returnBegin) {\n error(\"skip, excludeBegin, returnBegin not compatible with beginScope: {}\");\n throw MultiClassError;\n }\n\n if (typeof mode.beginScope !== \"object\" || mode.beginScope === null) {\n error(\"beginScope must be object\");\n throw MultiClassError;\n }\n\n remapScopeNames(mode, mode.begin, { key: \"beginScope\" });\n mode.begin = _rewriteBackreferences(mode.begin, { joinWith: \"\" });\n}\n\n/**\n * @param {CompiledMode} mode\n */\nfunction endMultiClass(mode) {\n if (!Array.isArray(mode.end)) return;\n\n if (mode.skip || mode.excludeEnd || mode.returnEnd) {\n error(\"skip, excludeEnd, returnEnd not compatible with endScope: {}\");\n throw MultiClassError;\n }\n\n if (typeof mode.endScope !== \"object\" || mode.endScope === null) {\n error(\"endScope must be object\");\n throw MultiClassError;\n }\n\n remapScopeNames(mode, mode.end, { key: \"endScope\" });\n mode.end = _rewriteBackreferences(mode.end, { joinWith: \"\" });\n}\n\n/**\n * this exists only to allow `scope: {}` to be used beside `match:`\n * Otherwise `beginScope` would necessary and that would look weird\n\n {\n match: [ /def/, /\\w+/ ]\n scope: { 1: \"keyword\" , 2: \"title\" }\n }\n\n * @param {CompiledMode} mode\n */\nfunction scopeSugar(mode) {\n if (mode.scope && typeof mode.scope === \"object\" && mode.scope !== null) {\n mode.beginScope = mode.scope;\n delete mode.scope;\n }\n}\n\n/**\n * @param {CompiledMode} mode\n */\nfunction MultiClass(mode) {\n scopeSugar(mode);\n\n if (typeof mode.beginScope === \"string\") {\n mode.beginScope = { _wrap: mode.beginScope };\n }\n if (typeof mode.endScope === \"string\") {\n mode.endScope = { _wrap: mode.endScope };\n }\n\n beginMultiClass(mode);\n endMultiClass(mode);\n}\n\n/**\n@typedef {import('highlight.js').Mode} Mode\n@typedef {import('highlight.js').CompiledMode} CompiledMode\n@typedef {import('highlight.js').Language} Language\n@typedef {import('highlight.js').HLJSPlugin} HLJSPlugin\n@typedef {import('highlight.js').CompiledLanguage} CompiledLanguage\n*/\n\n// compilation\n\n/**\n * Compiles a language definition result\n *\n * Given the raw result of a language definition (Language), compiles this so\n * that it is ready for highlighting code.\n * @param {Language} language\n * @returns {CompiledLanguage}\n */\nfunction compileLanguage(language) {\n /**\n * Builds a regex with the case sensitivity of the current language\n *\n * @param {RegExp | string} value\n * @param {boolean} [global]\n */\n function langRe(value, global) {\n return new RegExp(\n source(value),\n 'm'\n + (language.case_insensitive ? 'i' : '')\n + (language.unicodeRegex ? 'u' : '')\n + (global ? 'g' : '')\n );\n }\n\n /**\n Stores multiple regular expressions and allows you to quickly search for\n them all in a string simultaneously - returning the first match. It does\n this by creating a huge (a|b|c) regex - each individual item wrapped with ()\n and joined by `|` - using match groups to track position. When a match is\n found checking which position in the array has content allows us to figure\n out which of the original regexes / match groups triggered the match.\n\n The match object itself (the result of `Regex.exec`) is returned but also\n enhanced by merging in any meta-data that was registered with the regex.\n This is how we keep track of which mode matched, and what type of rule\n (`illegal`, `begin`, end, etc).\n */\n class MultiRegex {\n constructor() {\n this.matchIndexes = {};\n // @ts-ignore\n this.regexes = [];\n this.matchAt = 1;\n this.position = 0;\n }\n\n // @ts-ignore\n addRule(re, opts) {\n opts.position = this.position++;\n // @ts-ignore\n this.matchIndexes[this.matchAt] = opts;\n this.regexes.push([opts, re]);\n this.matchAt += countMatchGroups(re) + 1;\n }\n\n compile() {\n if (this.regexes.length === 0) {\n // avoids the need to check length every time exec is called\n // @ts-ignore\n this.exec = () => null;\n }\n const terminators = this.regexes.map(el => el[1]);\n this.matcherRe = langRe(_rewriteBackreferences(terminators, { joinWith: '|' }), true);\n this.lastIndex = 0;\n }\n\n /** @param {string} s */\n exec(s) {\n this.matcherRe.lastIndex = this.lastIndex;\n const match = this.matcherRe.exec(s);\n if (!match) { return null; }\n\n // eslint-disable-next-line no-undefined\n const i = match.findIndex((el, i) => i > 0 && el !== undefined);\n // @ts-ignore\n const matchData = this.matchIndexes[i];\n // trim off any earlier non-relevant match groups (ie, the other regex\n // match groups that make up the multi-matcher)\n match.splice(0, i);\n\n return Object.assign(match, matchData);\n }\n }\n\n /*\n Created to solve the key deficiently with MultiRegex - there is no way to\n test for multiple matches at a single location. Why would we need to do\n that? In the future a more dynamic engine will allow certain matches to be\n ignored. An example: if we matched say the 3rd regex in a large group but\n decided to ignore it - we'd need to started testing again at the 4th\n regex... but MultiRegex itself gives us no real way to do that.\n\n So what this class creates MultiRegexs on the fly for whatever search\n position they are needed.\n\n NOTE: These additional MultiRegex objects are created dynamically. For most\n grammars most of the time we will never actually need anything more than the\n first MultiRegex - so this shouldn't have too much overhead.\n\n Say this is our search group, and we match regex3, but wish to ignore it.\n\n regex1 | regex2 | regex3 | regex4 | regex5 ' ie, startAt = 0\n\n What we need is a new MultiRegex that only includes the remaining\n possibilities:\n\n regex4 | regex5 ' ie, startAt = 3\n\n This class wraps all that complexity up in a simple API... `startAt` decides\n where in the array of expressions to start doing the matching. It\n auto-increments, so if a match is found at position 2, then startAt will be\n set to 3. If the end is reached startAt will return to 0.\n\n MOST of the time the parser will be setting startAt manually to 0.\n */\n class ResumableMultiRegex {\n constructor() {\n // @ts-ignore\n this.rules = [];\n // @ts-ignore\n this.multiRegexes = [];\n this.count = 0;\n\n this.lastIndex = 0;\n this.regexIndex = 0;\n }\n\n // @ts-ignore\n getMatcher(index) {\n if (this.multiRegexes[index]) return this.multiRegexes[index];\n\n const matcher = new MultiRegex();\n this.rules.slice(index).forEach(([re, opts]) => matcher.addRule(re, opts));\n matcher.compile();\n this.multiRegexes[index] = matcher;\n return matcher;\n }\n\n resumingScanAtSamePosition() {\n return this.regexIndex !== 0;\n }\n\n considerAll() {\n this.regexIndex = 0;\n }\n\n // @ts-ignore\n addRule(re, opts) {\n this.rules.push([re, opts]);\n if (opts.type === \"begin\") this.count++;\n }\n\n /** @param {string} s */\n exec(s) {\n const m = this.getMatcher(this.regexIndex);\n m.lastIndex = this.lastIndex;\n let result = m.exec(s);\n\n // The following is because we have no easy way to say \"resume scanning at the\n // existing position but also skip the current rule ONLY\". What happens is\n // all prior rules are also skipped which can result in matching the wrong\n // thing. Example of matching \"booger\":\n\n // our matcher is [string, \"booger\", number]\n //\n // ....booger....\n\n // if \"booger\" is ignored then we'd really need a regex to scan from the\n // SAME position for only: [string, number] but ignoring \"booger\" (if it\n // was the first match), a simple resume would scan ahead who knows how\n // far looking only for \"number\", ignoring potential string matches (or\n // future \"booger\" matches that might be valid.)\n\n // So what we do: We execute two matchers, one resuming at the same\n // position, but the second full matcher starting at the position after:\n\n // /--- resume first regex match here (for [number])\n // |/---- full match here for [string, \"booger\", number]\n // vv\n // ....booger....\n\n // Which ever results in a match first is then used. So this 3-4 step\n // process essentially allows us to say \"match at this position, excluding\n // a prior rule that was ignored\".\n //\n // 1. Match \"booger\" first, ignore. Also proves that [string] does non match.\n // 2. Resume matching for [number]\n // 3. Match at index + 1 for [string, \"booger\", number]\n // 4. If #2 and #3 result in matches, which came first?\n if (this.resumingScanAtSamePosition()) {\n if (result && result.index === this.lastIndex) ; else { // use the second matcher result\n const m2 = this.getMatcher(0);\n m2.lastIndex = this.lastIndex + 1;\n result = m2.exec(s);\n }\n }\n\n if (result) {\n this.regexIndex += result.position + 1;\n if (this.regexIndex === this.count) {\n // wrap-around to considering all matches again\n this.considerAll();\n }\n }\n\n return result;\n }\n }\n\n /**\n * Given a mode, builds a huge ResumableMultiRegex that can be used to walk\n * the content and find matches.\n *\n * @param {CompiledMode} mode\n * @returns {ResumableMultiRegex}\n */\n function buildModeRegex(mode) {\n const mm = new ResumableMultiRegex();\n\n mode.contains.forEach(term => mm.addRule(term.begin, { rule: term, type: \"begin\" }));\n\n if (mode.terminatorEnd) {\n mm.addRule(mode.terminatorEnd, { type: \"end\" });\n }\n if (mode.illegal) {\n mm.addRule(mode.illegal, { type: \"illegal\" });\n }\n\n return mm;\n }\n\n /** skip vs abort vs ignore\n *\n * @skip - The mode is still entered and exited normally (and contains rules apply),\n * but all content is held and added to the parent buffer rather than being\n * output when the mode ends. Mostly used with `sublanguage` to build up\n * a single large buffer than can be parsed by sublanguage.\n *\n * - The mode begin ands ends normally.\n * - Content matched is added to the parent mode buffer.\n * - The parser cursor is moved forward normally.\n *\n * @abort - A hack placeholder until we have ignore. Aborts the mode (as if it\n * never matched) but DOES NOT continue to match subsequent `contains`\n * modes. Abort is bad/suboptimal because it can result in modes\n * farther down not getting applied because an earlier rule eats the\n * content but then aborts.\n *\n * - The mode does not begin.\n * - Content matched by `begin` is added to the mode buffer.\n * - The parser cursor is moved forward accordingly.\n *\n * @ignore - Ignores the mode (as if it never matched) and continues to match any\n * subsequent `contains` modes. Ignore isn't technically possible with\n * the current parser implementation.\n *\n * - The mode does not begin.\n * - Content matched by `begin` is ignored.\n * - The parser cursor is not moved forward.\n */\n\n /**\n * Compiles an individual mode\n *\n * This can raise an error if the mode contains certain detectable known logic\n * issues.\n * @param {Mode} mode\n * @param {CompiledMode | null} [parent]\n * @returns {CompiledMode | never}\n */\n function compileMode(mode, parent) {\n const cmode = /** @type CompiledMode */ (mode);\n if (mode.isCompiled) return cmode;\n\n [\n scopeClassName,\n // do this early so compiler extensions generally don't have to worry about\n // the distinction between match/begin\n compileMatch,\n MultiClass,\n beforeMatchExt\n ].forEach(ext => ext(mode, parent));\n\n language.compilerExtensions.forEach(ext => ext(mode, parent));\n\n // __beforeBegin is considered private API, internal use only\n mode.__beforeBegin = null;\n\n [\n beginKeywords,\n // do this later so compiler extensions that come earlier have access to the\n // raw array if they wanted to perhaps manipulate it, etc.\n compileIllegal,\n // default to 1 relevance if not specified\n compileRelevance\n ].forEach(ext => ext(mode, parent));\n\n mode.isCompiled = true;\n\n let keywordPattern = null;\n if (typeof mode.keywords === \"object\" && mode.keywords.$pattern) {\n // we need a copy because keywords might be compiled multiple times\n // so we can't go deleting $pattern from the original on the first\n // pass\n mode.keywords = Object.assign({}, mode.keywords);\n keywordPattern = mode.keywords.$pattern;\n delete mode.keywords.$pattern;\n }\n keywordPattern = keywordPattern || /\\w+/;\n\n if (mode.keywords) {\n mode.keywords = compileKeywords(mode.keywords, language.case_insensitive);\n }\n\n cmode.keywordPatternRe = langRe(keywordPattern, true);\n\n if (parent) {\n if (!mode.begin) mode.begin = /\\B|\\b/;\n cmode.beginRe = langRe(cmode.begin);\n if (!mode.end && !mode.endsWithParent) mode.end = /\\B|\\b/;\n if (mode.end) cmode.endRe = langRe(cmode.end);\n cmode.terminatorEnd = source(cmode.end) || '';\n if (mode.endsWithParent && parent.terminatorEnd) {\n cmode.terminatorEnd += (mode.end ? '|' : '') + parent.terminatorEnd;\n }\n }\n if (mode.illegal) cmode.illegalRe = langRe(/** @type {RegExp | string} */ (mode.illegal));\n if (!mode.contains) mode.contains = [];\n\n mode.contains = [].concat(...mode.contains.map(function(c) {\n return expandOrCloneMode(c === 'self' ? mode : c);\n }));\n mode.contains.forEach(function(c) { compileMode(/** @type Mode */ (c), cmode); });\n\n if (mode.starts) {\n compileMode(mode.starts, parent);\n }\n\n cmode.matcher = buildModeRegex(cmode);\n return cmode;\n }\n\n if (!language.compilerExtensions) language.compilerExtensions = [];\n\n // self is not valid at the top-level\n if (language.contains && language.contains.includes('self')) {\n throw new Error(\"ERR: contains `self` is not supported at the top-level of a language. See documentation.\");\n }\n\n // we need a null object, which inherit will guarantee\n language.classNameAliases = inherit$1(language.classNameAliases || {});\n\n return compileMode(/** @type Mode */ (language));\n}\n\n/**\n * Determines if a mode has a dependency on it's parent or not\n *\n * If a mode does have a parent dependency then often we need to clone it if\n * it's used in multiple places so that each copy points to the correct parent,\n * where-as modes without a parent can often safely be re-used at the bottom of\n * a mode chain.\n *\n * @param {Mode | null} mode\n * @returns {boolean} - is there a dependency on the parent?\n * */\nfunction dependencyOnParent(mode) {\n if (!mode) return false;\n\n return mode.endsWithParent || dependencyOnParent(mode.starts);\n}\n\n/**\n * Expands a mode or clones it if necessary\n *\n * This is necessary for modes with parental dependenceis (see notes on\n * `dependencyOnParent`) and for nodes that have `variants` - which must then be\n * exploded into their own individual modes at compile time.\n *\n * @param {Mode} mode\n * @returns {Mode | Mode[]}\n * */\nfunction expandOrCloneMode(mode) {\n if (mode.variants && !mode.cachedVariants) {\n mode.cachedVariants = mode.variants.map(function(variant) {\n return inherit$1(mode, { variants: null }, variant);\n });\n }\n\n // EXPAND\n // if we have variants then essentially \"replace\" the mode with the variants\n // this happens in compileMode, where this function is called from\n if (mode.cachedVariants) {\n return mode.cachedVariants;\n }\n\n // CLONE\n // if we have dependencies on parents then we need a unique\n // instance of ourselves, so we can be reused with many\n // different parents without issue\n if (dependencyOnParent(mode)) {\n return inherit$1(mode, { starts: mode.starts ? inherit$1(mode.starts) : null });\n }\n\n if (Object.isFrozen(mode)) {\n return inherit$1(mode);\n }\n\n // no special dependency issues, just return ourselves\n return mode;\n}\n\nvar version = \"11.3.1\";\n\nclass HTMLInjectionError extends Error {\n constructor(reason, html) {\n super(reason);\n this.name = \"HTMLInjectionError\";\n this.html = html;\n }\n}\n\n/*\nSyntax highlighting with language autodetection.\nhttps://highlightjs.org/\n*/\n\n/**\n@typedef {import('highlight.js').Mode} Mode\n@typedef {import('highlight.js').CompiledMode} CompiledMode\n@typedef {import('highlight.js').CompiledScope} CompiledScope\n@typedef {import('highlight.js').Language} Language\n@typedef {import('highlight.js').HLJSApi} HLJSApi\n@typedef {import('highlight.js').HLJSPlugin} HLJSPlugin\n@typedef {import('highlight.js').PluginEvent} PluginEvent\n@typedef {import('highlight.js').HLJSOptions} HLJSOptions\n@typedef {import('highlight.js').LanguageFn} LanguageFn\n@typedef {import('highlight.js').HighlightedHTMLElement} HighlightedHTMLElement\n@typedef {import('highlight.js').BeforeHighlightContext} BeforeHighlightContext\n@typedef {import('highlight.js/private').MatchType} MatchType\n@typedef {import('highlight.js/private').KeywordData} KeywordData\n@typedef {import('highlight.js/private').EnhancedMatch} EnhancedMatch\n@typedef {import('highlight.js/private').AnnotatedError} AnnotatedError\n@typedef {import('highlight.js').AutoHighlightResult} AutoHighlightResult\n@typedef {import('highlight.js').HighlightOptions} HighlightOptions\n@typedef {import('highlight.js').HighlightResult} HighlightResult\n*/\n\n\nconst escape = escapeHTML;\nconst inherit = inherit$1;\nconst NO_MATCH = Symbol(\"nomatch\");\nconst MAX_KEYWORD_HITS = 7;\n\n/**\n * @param {any} hljs - object that is extended (legacy)\n * @returns {HLJSApi}\n */\nconst HLJS = function(hljs) {\n // Global internal variables used within the highlight.js library.\n /** @type {Record} */\n const languages = Object.create(null);\n /** @type {Record} */\n const aliases = Object.create(null);\n /** @type {HLJSPlugin[]} */\n const plugins = [];\n\n // safe/production mode - swallows more errors, tries to keep running\n // even if a single syntax or parse hits a fatal error\n let SAFE_MODE = true;\n const LANGUAGE_NOT_FOUND = \"Could not find the language '{}', did you forget to load/include a language module?\";\n /** @type {Language} */\n const PLAINTEXT_LANGUAGE = { disableAutodetect: true, name: 'Plain text', contains: [] };\n\n // Global options used when within external APIs. This is modified when\n // calling the `hljs.configure` function.\n /** @type HLJSOptions */\n let options = {\n ignoreUnescapedHTML: false,\n throwUnescapedHTML: false,\n noHighlightRe: /^(no-?highlight)$/i,\n languageDetectRe: /\\blang(?:uage)?-([\\w-]+)\\b/i,\n classPrefix: 'hljs-',\n cssSelector: 'pre code',\n languages: null,\n // beta configuration options, subject to change, welcome to discuss\n // https://github.com/highlightjs/highlight.js/issues/1086\n __emitter: TokenTreeEmitter\n };\n\n /* Utility functions */\n\n /**\n * Tests a language name to see if highlighting should be skipped\n * @param {string} languageName\n */\n function shouldNotHighlight(languageName) {\n return options.noHighlightRe.test(languageName);\n }\n\n /**\n * @param {HighlightedHTMLElement} block - the HTML element to determine language for\n */\n function blockLanguage(block) {\n let classes = block.className + ' ';\n\n classes += block.parentNode ? block.parentNode.className : '';\n\n // language-* takes precedence over non-prefixed class names.\n const match = options.languageDetectRe.exec(classes);\n if (match) {\n const language = getLanguage(match[1]);\n if (!language) {\n warn(LANGUAGE_NOT_FOUND.replace(\"{}\", match[1]));\n warn(\"Falling back to no-highlight mode for this block.\", block);\n }\n return language ? match[1] : 'no-highlight';\n }\n\n return classes\n .split(/\\s+/)\n .find((_class) => shouldNotHighlight(_class) || getLanguage(_class));\n }\n\n /**\n * Core highlighting function.\n *\n * OLD API\n * highlight(lang, code, ignoreIllegals, continuation)\n *\n * NEW API\n * highlight(code, {lang, ignoreIllegals})\n *\n * @param {string} codeOrLanguageName - the language to use for highlighting\n * @param {string | HighlightOptions} optionsOrCode - the code to highlight\n * @param {boolean} [ignoreIllegals] - whether to ignore illegal matches, default is to bail\n *\n * @returns {HighlightResult} Result - an object that represents the result\n * @property {string} language - the language name\n * @property {number} relevance - the relevance score\n * @property {string} value - the highlighted HTML code\n * @property {string} code - the original raw code\n * @property {CompiledMode} top - top of the current mode stack\n * @property {boolean} illegal - indicates whether any illegal matches were found\n */\n function highlight(codeOrLanguageName, optionsOrCode, ignoreIllegals) {\n let code = \"\";\n let languageName = \"\";\n if (typeof optionsOrCode === \"object\") {\n code = codeOrLanguageName;\n ignoreIllegals = optionsOrCode.ignoreIllegals;\n languageName = optionsOrCode.language;\n } else {\n // old API\n deprecated(\"10.7.0\", \"highlight(lang, code, ...args) has been deprecated.\");\n deprecated(\"10.7.0\", \"Please use highlight(code, options) instead.\\nhttps://github.com/highlightjs/highlight.js/issues/2277\");\n languageName = codeOrLanguageName;\n code = optionsOrCode;\n }\n\n // https://github.com/highlightjs/highlight.js/issues/3149\n // eslint-disable-next-line no-undefined\n if (ignoreIllegals === undefined) { ignoreIllegals = true; }\n\n /** @type {BeforeHighlightContext} */\n const context = {\n code,\n language: languageName\n };\n // the plugin can change the desired language or the code to be highlighted\n // just be changing the object it was passed\n fire(\"before:highlight\", context);\n\n // a before plugin can usurp the result completely by providing it's own\n // in which case we don't even need to call highlight\n const result = context.result\n ? context.result\n : _highlight(context.language, context.code, ignoreIllegals);\n\n result.code = context.code;\n // the plugin can change anything in result to suite it\n fire(\"after:highlight\", result);\n\n return result;\n }\n\n /**\n * private highlight that's used internally and does not fire callbacks\n *\n * @param {string} languageName - the language to use for highlighting\n * @param {string} codeToHighlight - the code to highlight\n * @param {boolean?} [ignoreIllegals] - whether to ignore illegal matches, default is to bail\n * @param {CompiledMode?} [continuation] - current continuation mode, if any\n * @returns {HighlightResult} - result of the highlight operation\n */\n function _highlight(languageName, codeToHighlight, ignoreIllegals, continuation) {\n const keywordHits = Object.create(null);\n\n /**\n * Return keyword data if a match is a keyword\n * @param {CompiledMode} mode - current mode\n * @param {string} matchText - the textual match\n * @returns {KeywordData | false}\n */\n function keywordData(mode, matchText) {\n return mode.keywords[matchText];\n }\n\n function processKeywords() {\n if (!top.keywords) {\n emitter.addText(modeBuffer);\n return;\n }\n\n let lastIndex = 0;\n top.keywordPatternRe.lastIndex = 0;\n let match = top.keywordPatternRe.exec(modeBuffer);\n let buf = \"\";\n\n while (match) {\n buf += modeBuffer.substring(lastIndex, match.index);\n const word = language.case_insensitive ? match[0].toLowerCase() : match[0];\n const data = keywordData(top, word);\n if (data) {\n const [kind, keywordRelevance] = data;\n emitter.addText(buf);\n buf = \"\";\n\n keywordHits[word] = (keywordHits[word] || 0) + 1;\n if (keywordHits[word] <= MAX_KEYWORD_HITS) relevance += keywordRelevance;\n if (kind.startsWith(\"_\")) {\n // _ implied for relevance only, do not highlight\n // by applying a class name\n buf += match[0];\n } else {\n const cssClass = language.classNameAliases[kind] || kind;\n emitter.addKeyword(match[0], cssClass);\n }\n } else {\n buf += match[0];\n }\n lastIndex = top.keywordPatternRe.lastIndex;\n match = top.keywordPatternRe.exec(modeBuffer);\n }\n buf += modeBuffer.substr(lastIndex);\n emitter.addText(buf);\n }\n\n function processSubLanguage() {\n if (modeBuffer === \"\") return;\n /** @type HighlightResult */\n let result = null;\n\n if (typeof top.subLanguage === 'string') {\n if (!languages[top.subLanguage]) {\n emitter.addText(modeBuffer);\n return;\n }\n result = _highlight(top.subLanguage, modeBuffer, true, continuations[top.subLanguage]);\n continuations[top.subLanguage] = /** @type {CompiledMode} */ (result._top);\n } else {\n result = highlightAuto(modeBuffer, top.subLanguage.length ? top.subLanguage : null);\n }\n\n // Counting embedded language score towards the host language may be disabled\n // with zeroing the containing mode relevance. Use case in point is Markdown that\n // allows XML everywhere and makes every XML snippet to have a much larger Markdown\n // score.\n if (top.relevance > 0) {\n relevance += result.relevance;\n }\n emitter.addSublanguage(result._emitter, result.language);\n }\n\n function processBuffer() {\n if (top.subLanguage != null) {\n processSubLanguage();\n } else {\n processKeywords();\n }\n modeBuffer = '';\n }\n\n /**\n * @param {CompiledScope} scope\n * @param {RegExpMatchArray} match\n */\n function emitMultiClass(scope, match) {\n let i = 1;\n // eslint-disable-next-line no-undefined\n while (match[i] !== undefined) {\n if (!scope._emit[i]) { i++; continue; }\n const klass = language.classNameAliases[scope[i]] || scope[i];\n const text = match[i];\n if (klass) {\n emitter.addKeyword(text, klass);\n } else {\n modeBuffer = text;\n processKeywords();\n modeBuffer = \"\";\n }\n i++;\n }\n }\n\n /**\n * @param {CompiledMode} mode - new mode to start\n * @param {RegExpMatchArray} match\n */\n function startNewMode(mode, match) {\n if (mode.scope && typeof mode.scope === \"string\") {\n emitter.openNode(language.classNameAliases[mode.scope] || mode.scope);\n }\n if (mode.beginScope) {\n // beginScope just wraps the begin match itself in a scope\n if (mode.beginScope._wrap) {\n emitter.addKeyword(modeBuffer, language.classNameAliases[mode.beginScope._wrap] || mode.beginScope._wrap);\n modeBuffer = \"\";\n } else if (mode.beginScope._multi) {\n // at this point modeBuffer should just be the match\n emitMultiClass(mode.beginScope, match);\n modeBuffer = \"\";\n }\n }\n\n top = Object.create(mode, { parent: { value: top } });\n return top;\n }\n\n /**\n * @param {CompiledMode } mode - the mode to potentially end\n * @param {RegExpMatchArray} match - the latest match\n * @param {string} matchPlusRemainder - match plus remainder of content\n * @returns {CompiledMode | void} - the next mode, or if void continue on in current mode\n */\n function endOfMode(mode, match, matchPlusRemainder) {\n let matched = startsWith(mode.endRe, matchPlusRemainder);\n\n if (matched) {\n if (mode[\"on:end\"]) {\n const resp = new Response(mode);\n mode[\"on:end\"](match, resp);\n if (resp.isMatchIgnored) matched = false;\n }\n\n if (matched) {\n while (mode.endsParent && mode.parent) {\n mode = mode.parent;\n }\n return mode;\n }\n }\n // even if on:end fires an `ignore` it's still possible\n // that we might trigger the end node because of a parent mode\n if (mode.endsWithParent) {\n return endOfMode(mode.parent, match, matchPlusRemainder);\n }\n }\n\n /**\n * Handle matching but then ignoring a sequence of text\n *\n * @param {string} lexeme - string containing full match text\n */\n function doIgnore(lexeme) {\n if (top.matcher.regexIndex === 0) {\n // no more regexes to potentially match here, so we move the cursor forward one\n // space\n modeBuffer += lexeme[0];\n return 1;\n } else {\n // no need to move the cursor, we still have additional regexes to try and\n // match at this very spot\n resumeScanAtSamePosition = true;\n return 0;\n }\n }\n\n /**\n * Handle the start of a new potential mode match\n *\n * @param {EnhancedMatch} match - the current match\n * @returns {number} how far to advance the parse cursor\n */\n function doBeginMatch(match) {\n const lexeme = match[0];\n const newMode = match.rule;\n\n const resp = new Response(newMode);\n // first internal before callbacks, then the public ones\n const beforeCallbacks = [newMode.__beforeBegin, newMode[\"on:begin\"]];\n for (const cb of beforeCallbacks) {\n if (!cb) continue;\n cb(match, resp);\n if (resp.isMatchIgnored) return doIgnore(lexeme);\n }\n\n if (newMode.skip) {\n modeBuffer += lexeme;\n } else {\n if (newMode.excludeBegin) {\n modeBuffer += lexeme;\n }\n processBuffer();\n if (!newMode.returnBegin && !newMode.excludeBegin) {\n modeBuffer = lexeme;\n }\n }\n startNewMode(newMode, match);\n return newMode.returnBegin ? 0 : lexeme.length;\n }\n\n /**\n * Handle the potential end of mode\n *\n * @param {RegExpMatchArray} match - the current match\n */\n function doEndMatch(match) {\n const lexeme = match[0];\n const matchPlusRemainder = codeToHighlight.substr(match.index);\n\n const endMode = endOfMode(top, match, matchPlusRemainder);\n if (!endMode) { return NO_MATCH; }\n\n const origin = top;\n if (top.endScope && top.endScope._wrap) {\n processBuffer();\n emitter.addKeyword(lexeme, top.endScope._wrap);\n } else if (top.endScope && top.endScope._multi) {\n processBuffer();\n emitMultiClass(top.endScope, match);\n } else if (origin.skip) {\n modeBuffer += lexeme;\n } else {\n if (!(origin.returnEnd || origin.excludeEnd)) {\n modeBuffer += lexeme;\n }\n processBuffer();\n if (origin.excludeEnd) {\n modeBuffer = lexeme;\n }\n }\n do {\n if (top.scope) {\n emitter.closeNode();\n }\n if (!top.skip && !top.subLanguage) {\n relevance += top.relevance;\n }\n top = top.parent;\n } while (top !== endMode.parent);\n if (endMode.starts) {\n startNewMode(endMode.starts, match);\n }\n return origin.returnEnd ? 0 : lexeme.length;\n }\n\n function processContinuations() {\n const list = [];\n for (let current = top; current !== language; current = current.parent) {\n if (current.scope) {\n list.unshift(current.scope);\n }\n }\n list.forEach(item => emitter.openNode(item));\n }\n\n /** @type {{type?: MatchType, index?: number, rule?: Mode}}} */\n let lastMatch = {};\n\n /**\n * Process an individual match\n *\n * @param {string} textBeforeMatch - text preceding the match (since the last match)\n * @param {EnhancedMatch} [match] - the match itself\n */\n function processLexeme(textBeforeMatch, match) {\n const lexeme = match && match[0];\n\n // add non-matched text to the current mode buffer\n modeBuffer += textBeforeMatch;\n\n if (lexeme == null) {\n processBuffer();\n return 0;\n }\n\n // we've found a 0 width match and we're stuck, so we need to advance\n // this happens when we have badly behaved rules that have optional matchers to the degree that\n // sometimes they can end up matching nothing at all\n // Ref: https://github.com/highlightjs/highlight.js/issues/2140\n if (lastMatch.type === \"begin\" && match.type === \"end\" && lastMatch.index === match.index && lexeme === \"\") {\n // spit the \"skipped\" character that our regex choked on back into the output sequence\n modeBuffer += codeToHighlight.slice(match.index, match.index + 1);\n if (!SAFE_MODE) {\n /** @type {AnnotatedError} */\n const err = new Error(`0 width match regex (${languageName})`);\n err.languageName = languageName;\n err.badRule = lastMatch.rule;\n throw err;\n }\n return 1;\n }\n lastMatch = match;\n\n if (match.type === \"begin\") {\n return doBeginMatch(match);\n } else if (match.type === \"illegal\" && !ignoreIllegals) {\n // illegal match, we do not continue processing\n /** @type {AnnotatedError} */\n const err = new Error('Illegal lexeme \"' + lexeme + '\" for mode \"' + (top.scope || '') + '\"');\n err.mode = top;\n throw err;\n } else if (match.type === \"end\") {\n const processed = doEndMatch(match);\n if (processed !== NO_MATCH) {\n return processed;\n }\n }\n\n // edge case for when illegal matches $ (end of line) which is technically\n // a 0 width match but not a begin/end match so it's not caught by the\n // first handler (when ignoreIllegals is true)\n if (match.type === \"illegal\" && lexeme === \"\") {\n // advance so we aren't stuck in an infinite loop\n return 1;\n }\n\n // infinite loops are BAD, this is a last ditch catch all. if we have a\n // decent number of iterations yet our index (cursor position in our\n // parsing) still 3x behind our index then something is very wrong\n // so we bail\n if (iterations > 100000 && iterations > match.index * 3) {\n const err = new Error('potential infinite loop, way more iterations than matches');\n throw err;\n }\n\n /*\n Why might be find ourselves here? An potential end match that was\n triggered but could not be completed. IE, `doEndMatch` returned NO_MATCH.\n (this could be because a callback requests the match be ignored, etc)\n\n This causes no real harm other than stopping a few times too many.\n */\n\n modeBuffer += lexeme;\n return lexeme.length;\n }\n\n const language = getLanguage(languageName);\n if (!language) {\n error(LANGUAGE_NOT_FOUND.replace(\"{}\", languageName));\n throw new Error('Unknown language: \"' + languageName + '\"');\n }\n\n const md = compileLanguage(language);\n let result = '';\n /** @type {CompiledMode} */\n let top = continuation || md;\n /** @type Record */\n const continuations = {}; // keep continuations for sub-languages\n const emitter = new options.__emitter(options);\n processContinuations();\n let modeBuffer = '';\n let relevance = 0;\n let index = 0;\n let iterations = 0;\n let resumeScanAtSamePosition = false;\n\n try {\n top.matcher.considerAll();\n\n for (;;) {\n iterations++;\n if (resumeScanAtSamePosition) {\n // only regexes not matched previously will now be\n // considered for a potential match\n resumeScanAtSamePosition = false;\n } else {\n top.matcher.considerAll();\n }\n top.matcher.lastIndex = index;\n\n const match = top.matcher.exec(codeToHighlight);\n // console.log(\"match\", match[0], match.rule && match.rule.begin)\n\n if (!match) break;\n\n const beforeMatch = codeToHighlight.substring(index, match.index);\n const processedCount = processLexeme(beforeMatch, match);\n index = match.index + processedCount;\n }\n processLexeme(codeToHighlight.substr(index));\n emitter.closeAllNodes();\n emitter.finalize();\n result = emitter.toHTML();\n\n return {\n language: languageName,\n value: result,\n relevance: relevance,\n illegal: false,\n _emitter: emitter,\n _top: top\n };\n } catch (err) {\n if (err.message && err.message.includes('Illegal')) {\n return {\n language: languageName,\n value: escape(codeToHighlight),\n illegal: true,\n relevance: 0,\n _illegalBy: {\n message: err.message,\n index: index,\n context: codeToHighlight.slice(index - 100, index + 100),\n mode: err.mode,\n resultSoFar: result\n },\n _emitter: emitter\n };\n } else if (SAFE_MODE) {\n return {\n language: languageName,\n value: escape(codeToHighlight),\n illegal: false,\n relevance: 0,\n errorRaised: err,\n _emitter: emitter,\n _top: top\n };\n } else {\n throw err;\n }\n }\n }\n\n /**\n * returns a valid highlight result, without actually doing any actual work,\n * auto highlight starts with this and it's possible for small snippets that\n * auto-detection may not find a better match\n * @param {string} code\n * @returns {HighlightResult}\n */\n function justTextHighlightResult(code) {\n const result = {\n value: escape(code),\n illegal: false,\n relevance: 0,\n _top: PLAINTEXT_LANGUAGE,\n _emitter: new options.__emitter(options)\n };\n result._emitter.addText(code);\n return result;\n }\n\n /**\n Highlighting with language detection. Accepts a string with the code to\n highlight. Returns an object with the following properties:\n\n - language (detected language)\n - relevance (int)\n - value (an HTML string with highlighting markup)\n - secondBest (object with the same structure for second-best heuristically\n detected language, may be absent)\n\n @param {string} code\n @param {Array} [languageSubset]\n @returns {AutoHighlightResult}\n */\n function highlightAuto(code, languageSubset) {\n languageSubset = languageSubset || options.languages || Object.keys(languages);\n const plaintext = justTextHighlightResult(code);\n\n const results = languageSubset.filter(getLanguage).filter(autoDetection).map(name =>\n _highlight(name, code, false)\n );\n results.unshift(plaintext); // plaintext is always an option\n\n const sorted = results.sort((a, b) => {\n // sort base on relevance\n if (a.relevance !== b.relevance) return b.relevance - a.relevance;\n\n // always award the tie to the base language\n // ie if C++ and Arduino are tied, it's more likely to be C++\n if (a.language && b.language) {\n if (getLanguage(a.language).supersetOf === b.language) {\n return 1;\n } else if (getLanguage(b.language).supersetOf === a.language) {\n return -1;\n }\n }\n\n // otherwise say they are equal, which has the effect of sorting on\n // relevance while preserving the original ordering - which is how ties\n // have historically been settled, ie the language that comes first always\n // wins in the case of a tie\n return 0;\n });\n\n const [best, secondBest] = sorted;\n\n /** @type {AutoHighlightResult} */\n const result = best;\n result.secondBest = secondBest;\n\n return result;\n }\n\n /**\n * Builds new class name for block given the language name\n *\n * @param {HTMLElement} element\n * @param {string} [currentLang]\n * @param {string} [resultLang]\n */\n function updateClassName(element, currentLang, resultLang) {\n const language = (currentLang && aliases[currentLang]) || resultLang;\n\n element.classList.add(\"hljs\");\n element.classList.add(`language-${language}`);\n }\n\n /**\n * Applies highlighting to a DOM node containing code.\n *\n * @param {HighlightedHTMLElement} element - the HTML element to highlight\n */\n function highlightElement(element) {\n /** @type HTMLElement */\n let node = null;\n const language = blockLanguage(element);\n\n if (shouldNotHighlight(language)) return;\n\n fire(\"before:highlightElement\",\n { el: element, language: language });\n\n // we should be all text, no child nodes (unescaped HTML) - this is possibly\n // an HTML injection attack - it's likely too late if this is already in\n // production (the code has likely already done its damage by the time\n // we're seeing it)... but we yell loudly about this so that hopefully it's\n // more likely to be caught in development before making it to production\n if (element.children.length > 0) {\n if (!options.ignoreUnescapedHTML) {\n console.warn(\"One of your code blocks includes unescaped HTML. This is a potentially serious security risk.\");\n console.warn(\"https://github.com/highlightjs/highlight.js/issues/2886\");\n console.warn(element);\n }\n if (options.throwUnescapedHTML) {\n const err = new HTMLInjectionError(\n \"One of your code blocks includes unescaped HTML.\",\n element.innerHTML\n );\n throw err;\n }\n }\n\n node = element;\n const text = node.textContent;\n const result = language ? highlight(text, { language, ignoreIllegals: true }) : highlightAuto(text);\n\n element.innerHTML = result.value;\n updateClassName(element, language, result.language);\n element.result = {\n language: result.language,\n // TODO: remove with version 11.0\n re: result.relevance,\n relevance: result.relevance\n };\n if (result.secondBest) {\n element.secondBest = {\n language: result.secondBest.language,\n relevance: result.secondBest.relevance\n };\n }\n\n fire(\"after:highlightElement\", { el: element, result, text });\n }\n\n /**\n * Updates highlight.js global options with the passed options\n *\n * @param {Partial} userOptions\n */\n function configure(userOptions) {\n options = inherit(options, userOptions);\n }\n\n // TODO: remove v12, deprecated\n const initHighlighting = () => {\n highlightAll();\n deprecated(\"10.6.0\", \"initHighlighting() deprecated. Use highlightAll() now.\");\n };\n\n // TODO: remove v12, deprecated\n function initHighlightingOnLoad() {\n highlightAll();\n deprecated(\"10.6.0\", \"initHighlightingOnLoad() deprecated. Use highlightAll() now.\");\n }\n\n let wantsHighlight = false;\n\n /**\n * auto-highlights all pre>code elements on the page\n */\n function highlightAll() {\n // if we are called too early in the loading process\n if (document.readyState === \"loading\") {\n wantsHighlight = true;\n return;\n }\n\n const blocks = document.querySelectorAll(options.cssSelector);\n blocks.forEach(highlightElement);\n }\n\n function boot() {\n // if a highlight was requested before DOM was loaded, do now\n if (wantsHighlight) highlightAll();\n }\n\n // make sure we are in the browser environment\n if (typeof window !== 'undefined' && window.addEventListener) {\n window.addEventListener('DOMContentLoaded', boot, false);\n }\n\n /**\n * Register a language grammar module\n *\n * @param {string} languageName\n * @param {LanguageFn} languageDefinition\n */\n function registerLanguage(languageName, languageDefinition) {\n let lang = null;\n try {\n lang = languageDefinition(hljs);\n } catch (error$1) {\n error(\"Language definition for '{}' could not be registered.\".replace(\"{}\", languageName));\n // hard or soft error\n if (!SAFE_MODE) { throw error$1; } else { error(error$1); }\n // languages that have serious errors are replaced with essentially a\n // \"plaintext\" stand-in so that the code blocks will still get normal\n // css classes applied to them - and one bad language won't break the\n // entire highlighter\n lang = PLAINTEXT_LANGUAGE;\n }\n // give it a temporary name if it doesn't have one in the meta-data\n if (!lang.name) lang.name = languageName;\n languages[languageName] = lang;\n lang.rawDefinition = languageDefinition.bind(null, hljs);\n\n if (lang.aliases) {\n registerAliases(lang.aliases, { languageName });\n }\n }\n\n /**\n * Remove a language grammar module\n *\n * @param {string} languageName\n */\n function unregisterLanguage(languageName) {\n delete languages[languageName];\n for (const alias of Object.keys(aliases)) {\n if (aliases[alias] === languageName) {\n delete aliases[alias];\n }\n }\n }\n\n /**\n * @returns {string[]} List of language internal names\n */\n function listLanguages() {\n return Object.keys(languages);\n }\n\n /**\n * @param {string} name - name of the language to retrieve\n * @returns {Language | undefined}\n */\n function getLanguage(name) {\n name = (name || '').toLowerCase();\n return languages[name] || languages[aliases[name]];\n }\n\n /**\n *\n * @param {string|string[]} aliasList - single alias or list of aliases\n * @param {{languageName: string}} opts\n */\n function registerAliases(aliasList, { languageName }) {\n if (typeof aliasList === 'string') {\n aliasList = [aliasList];\n }\n aliasList.forEach(alias => { aliases[alias.toLowerCase()] = languageName; });\n }\n\n /**\n * Determines if a given language has auto-detection enabled\n * @param {string} name - name of the language\n */\n function autoDetection(name) {\n const lang = getLanguage(name);\n return lang && !lang.disableAutodetect;\n }\n\n /**\n * Upgrades the old highlightBlock plugins to the new\n * highlightElement API\n * @param {HLJSPlugin} plugin\n */\n function upgradePluginAPI(plugin) {\n // TODO: remove with v12\n if (plugin[\"before:highlightBlock\"] && !plugin[\"before:highlightElement\"]) {\n plugin[\"before:highlightElement\"] = (data) => {\n plugin[\"before:highlightBlock\"](\n Object.assign({ block: data.el }, data)\n );\n };\n }\n if (plugin[\"after:highlightBlock\"] && !plugin[\"after:highlightElement\"]) {\n plugin[\"after:highlightElement\"] = (data) => {\n plugin[\"after:highlightBlock\"](\n Object.assign({ block: data.el }, data)\n );\n };\n }\n }\n\n /**\n * @param {HLJSPlugin} plugin\n */\n function addPlugin(plugin) {\n upgradePluginAPI(plugin);\n plugins.push(plugin);\n }\n\n /**\n *\n * @param {PluginEvent} event\n * @param {any} args\n */\n function fire(event, args) {\n const cb = event;\n plugins.forEach(function(plugin) {\n if (plugin[cb]) {\n plugin[cb](args);\n }\n });\n }\n\n /**\n * DEPRECATED\n * @param {HighlightedHTMLElement} el\n */\n function deprecateHighlightBlock(el) {\n deprecated(\"10.7.0\", \"highlightBlock will be removed entirely in v12.0\");\n deprecated(\"10.7.0\", \"Please use highlightElement now.\");\n\n return highlightElement(el);\n }\n\n /* Interface definition */\n Object.assign(hljs, {\n highlight,\n highlightAuto,\n highlightAll,\n highlightElement,\n // TODO: Remove with v12 API\n highlightBlock: deprecateHighlightBlock,\n configure,\n initHighlighting,\n initHighlightingOnLoad,\n registerLanguage,\n unregisterLanguage,\n listLanguages,\n getLanguage,\n registerAliases,\n autoDetection,\n inherit,\n addPlugin\n });\n\n hljs.debugMode = function() { SAFE_MODE = false; };\n hljs.safeMode = function() { SAFE_MODE = true; };\n hljs.versionString = version;\n\n hljs.regex = {\n concat: concat,\n lookahead: lookahead,\n either: either,\n optional: optional,\n anyNumberOfTimes: anyNumberOfTimes\n };\n\n for (const key in MODES) {\n // @ts-ignore\n if (typeof MODES[key] === \"object\") {\n // @ts-ignore\n deepFreeze$1(MODES[key]);\n }\n }\n\n // merge all the modes/regexes into our main object\n Object.assign(hljs, MODES);\n\n return hljs;\n};\n\n// export an \"instance\" of the highlighter\nvar highlight = HLJS({});\n\nmodule.exports = highlight;\nhighlight.HighlightJS = highlight;\nhighlight.default = highlight;\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = function(module) {\n\tvar getter = module && module.__esModule ?\n\t\tfunction() { return module['default']; } :\n\t\tfunction() { return module; };\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","__webpack_require__.p = \"./\";","/**\n * @this {Promise}\n */\nfunction finallyConstructor(callback) {\n var constructor = this.constructor;\n return this.then(\n function(value) {\n // @ts-ignore\n return constructor.resolve(callback()).then(function() {\n return value;\n });\n },\n function(reason) {\n // @ts-ignore\n return constructor.resolve(callback()).then(function() {\n // @ts-ignore\n return constructor.reject(reason);\n });\n }\n );\n}\n\nexport default finallyConstructor;\n","function allSettled(arr) {\n var P = this;\n return new P(function(resolve, reject) {\n if (!(arr && typeof arr.length !== 'undefined')) {\n return reject(\n new TypeError(\n typeof arr +\n ' ' +\n arr +\n ' is not iterable(cannot read property Symbol(Symbol.iterator))'\n )\n );\n }\n var args = Array.prototype.slice.call(arr);\n if (args.length === 0) return resolve([]);\n var remaining = args.length;\n\n function res(i, val) {\n if (val && (typeof val === 'object' || typeof val === 'function')) {\n var then = val.then;\n if (typeof then === 'function') {\n then.call(\n val,\n function(val) {\n res(i, val);\n },\n function(e) {\n args[i] = { status: 'rejected', reason: e };\n if (--remaining === 0) {\n resolve(args);\n }\n }\n );\n return;\n }\n }\n args[i] = { status: 'fulfilled', value: val };\n if (--remaining === 0) {\n resolve(args);\n }\n }\n\n for (var i = 0; i < args.length; i++) {\n res(i, args[i]);\n }\n });\n}\n\nexport default allSettled;\n","import promiseFinally from './finally';\nimport allSettled from './allSettled';\n\n// Store setTimeout reference so promise-polyfill will be unaffected by\n// other code modifying setTimeout (like sinon.useFakeTimers())\nvar setTimeoutFunc = setTimeout;\n// @ts-ignore\nvar setImmediateFunc = typeof setImmediate !== 'undefined' ? setImmediate : null;\n\nfunction isArray(x) {\n return Boolean(x && typeof x.length !== 'undefined');\n}\n\nfunction noop() {}\n\n// Polyfill for Function.prototype.bind\nfunction bind(fn, thisArg) {\n return function() {\n fn.apply(thisArg, arguments);\n };\n}\n\n/**\n * @constructor\n * @param {Function} fn\n */\nfunction Promise(fn) {\n if (!(this instanceof Promise))\n throw new TypeError('Promises must be constructed via new');\n if (typeof fn !== 'function') throw new TypeError('not a function');\n /** @type {!number} */\n this._state = 0;\n /** @type {!boolean} */\n this._handled = false;\n /** @type {Promise|undefined} */\n this._value = undefined;\n /** @type {!Array} */\n this._deferreds = [];\n\n doResolve(fn, this);\n}\n\nfunction handle(self, deferred) {\n while (self._state === 3) {\n self = self._value;\n }\n if (self._state === 0) {\n self._deferreds.push(deferred);\n return;\n }\n self._handled = true;\n Promise._immediateFn(function() {\n var cb = self._state === 1 ? deferred.onFulfilled : deferred.onRejected;\n if (cb === null) {\n (self._state === 1 ? resolve : reject)(deferred.promise, self._value);\n return;\n }\n var ret;\n try {\n ret = cb(self._value);\n } catch (e) {\n reject(deferred.promise, e);\n return;\n }\n resolve(deferred.promise, ret);\n });\n}\n\nfunction resolve(self, newValue) {\n try {\n // Promise Resolution Procedure: https://github.com/promises-aplus/promises-spec#the-promise-resolution-procedure\n if (newValue === self)\n throw new TypeError('A promise cannot be resolved with itself.');\n if (\n newValue &&\n (typeof newValue === 'object' || typeof newValue === 'function')\n ) {\n var then = newValue.then;\n if (newValue instanceof Promise) {\n self._state = 3;\n self._value = newValue;\n finale(self);\n return;\n } else if (typeof then === 'function') {\n doResolve(bind(then, newValue), self);\n return;\n }\n }\n self._state = 1;\n self._value = newValue;\n finale(self);\n } catch (e) {\n reject(self, e);\n }\n}\n\nfunction reject(self, newValue) {\n self._state = 2;\n self._value = newValue;\n finale(self);\n}\n\nfunction finale(self) {\n if (self._state === 2 && self._deferreds.length === 0) {\n Promise._immediateFn(function() {\n if (!self._handled) {\n Promise._unhandledRejectionFn(self._value);\n }\n });\n }\n\n for (var i = 0, len = self._deferreds.length; i < len; i++) {\n handle(self, self._deferreds[i]);\n }\n self._deferreds = null;\n}\n\n/**\n * @constructor\n */\nfunction Handler(onFulfilled, onRejected, promise) {\n this.onFulfilled = typeof onFulfilled === 'function' ? onFulfilled : null;\n this.onRejected = typeof onRejected === 'function' ? onRejected : null;\n this.promise = promise;\n}\n\n/**\n * Take a potentially misbehaving resolver function and make sure\n * onFulfilled and onRejected are only called once.\n *\n * Makes no guarantees about asynchrony.\n */\nfunction doResolve(fn, self) {\n var done = false;\n try {\n fn(\n function(value) {\n if (done) return;\n done = true;\n resolve(self, value);\n },\n function(reason) {\n if (done) return;\n done = true;\n reject(self, reason);\n }\n );\n } catch (ex) {\n if (done) return;\n done = true;\n reject(self, ex);\n }\n}\n\nPromise.prototype['catch'] = function(onRejected) {\n return this.then(null, onRejected);\n};\n\nPromise.prototype.then = function(onFulfilled, onRejected) {\n // @ts-ignore\n var prom = new this.constructor(noop);\n\n handle(this, new Handler(onFulfilled, onRejected, prom));\n return prom;\n};\n\nPromise.prototype['finally'] = promiseFinally;\n\nPromise.all = function(arr) {\n return new Promise(function(resolve, reject) {\n if (!isArray(arr)) {\n return reject(new TypeError('Promise.all accepts an array'));\n }\n\n var args = Array.prototype.slice.call(arr);\n if (args.length === 0) return resolve([]);\n var remaining = args.length;\n\n function res(i, val) {\n try {\n if (val && (typeof val === 'object' || typeof val === 'function')) {\n var then = val.then;\n if (typeof then === 'function') {\n then.call(\n val,\n function(val) {\n res(i, val);\n },\n reject\n );\n return;\n }\n }\n args[i] = val;\n if (--remaining === 0) {\n resolve(args);\n }\n } catch (ex) {\n reject(ex);\n }\n }\n\n for (var i = 0; i < args.length; i++) {\n res(i, args[i]);\n }\n });\n};\n\nPromise.allSettled = allSettled;\n\nPromise.resolve = function(value) {\n if (value && typeof value === 'object' && value.constructor === Promise) {\n return value;\n }\n\n return new Promise(function(resolve) {\n resolve(value);\n });\n};\n\nPromise.reject = function(value) {\n return new Promise(function(resolve, reject) {\n reject(value);\n });\n};\n\nPromise.race = function(arr) {\n return new Promise(function(resolve, reject) {\n if (!isArray(arr)) {\n return reject(new TypeError('Promise.race accepts an array'));\n }\n\n for (var i = 0, len = arr.length; i < len; i++) {\n Promise.resolve(arr[i]).then(resolve, reject);\n }\n });\n};\n\n// Use polyfill for setImmediate for performance gains\nPromise._immediateFn =\n // @ts-ignore\n (typeof setImmediateFunc === 'function' &&\n function(fn) {\n // @ts-ignore\n setImmediateFunc(fn);\n }) ||\n function(fn) {\n setTimeoutFunc(fn, 0);\n };\n\nPromise._unhandledRejectionFn = function _unhandledRejectionFn(err) {\n if (typeof console !== 'undefined' && console) {\n console.warn('Possible Unhandled Promise Rejection:', err); // eslint-disable-line no-console\n }\n};\n\nexport default Promise;\n","import Promise from './index';\nimport promiseFinally from './finally';\nimport allSettled from './allSettled';\n\n/** @suppress {undefinedVars} */\nvar globalNS = (function() {\n // the only reliable means to get the global object is\n // `Function('return this')()`\n // However, this causes CSP violations in Chrome apps.\n if (typeof self !== 'undefined') {\n return self;\n }\n if (typeof window !== 'undefined') {\n return window;\n }\n if (typeof global !== 'undefined') {\n return global;\n }\n throw new Error('unable to locate global object');\n})();\n\n// Expose the polyfill if Promise is undefined or set to a\n// non-function value. The latter can be due to a named HTMLElement\n// being exposed by browsers for legacy reasons.\n// https://github.com/taylorhakes/promise-polyfill/issues/114\nif (typeof globalNS['Promise'] !== 'function') {\n globalNS['Promise'] = Promise;\n} else {\n if (!globalNS.Promise.prototype['finally']) {\n globalNS.Promise.prototype['finally'] = promiseFinally;\n } \n if (!globalNS.Promise.allSettled) {\n globalNS.Promise.allSettled = allSettled;\n }\n}\n","export function h(name, attributes) {\n var rest = []\n var children = []\n var length = arguments.length\n\n while (length-- > 2) rest.push(arguments[length])\n\n while (rest.length) {\n var node = rest.pop()\n if (node && node.pop) {\n for (length = node.length; length--; ) {\n rest.push(node[length])\n }\n } else if (node != null && node !== true && node !== false) {\n children.push(node)\n }\n }\n\n return typeof name === \"function\"\n ? name(attributes || {}, children)\n : {\n nodeName: name,\n attributes: attributes || {},\n children: children,\n key: attributes && attributes.key\n }\n}\n\nexport function app(state, actions, view, container) {\n var map = [].map\n var rootElement = (container && container.children[0]) || null\n var oldNode = rootElement && recycleElement(rootElement)\n var lifecycle = []\n var skipRender\n var isRecycling = true\n var globalState = clone(state)\n var wiredActions = wireStateToActions([], globalState, clone(actions))\n\n scheduleRender()\n\n return wiredActions\n\n function recycleElement(element) {\n return {\n nodeName: element.nodeName.toLowerCase(),\n attributes: {},\n children: map.call(element.childNodes, function(element) {\n return element.nodeType === 3 // Node.TEXT_NODE\n ? element.nodeValue\n : recycleElement(element)\n })\n }\n }\n\n function resolveNode(node) {\n return typeof node === \"function\"\n ? resolveNode(node(globalState, wiredActions))\n : node != null\n ? node\n : \"\"\n }\n\n function render() {\n skipRender = !skipRender\n\n var node = resolveNode(view)\n\n if (container && !skipRender) {\n rootElement = patch(container, rootElement, oldNode, (oldNode = node))\n }\n\n isRecycling = false\n\n while (lifecycle.length) lifecycle.pop()()\n }\n\n function scheduleRender() {\n if (!skipRender) {\n skipRender = true\n setTimeout(render)\n }\n }\n\n function clone(target, source) {\n var out = {}\n\n for (var i in target) out[i] = target[i]\n for (var i in source) out[i] = source[i]\n\n return out\n }\n\n function setPartialState(path, value, source) {\n var target = {}\n if (path.length) {\n target[path[0]] =\n path.length > 1\n ? setPartialState(path.slice(1), value, source[path[0]])\n : value\n return clone(source, target)\n }\n return value\n }\n\n function getPartialState(path, source) {\n var i = 0\n while (i < path.length) {\n source = source[path[i++]]\n }\n return source\n }\n\n function wireStateToActions(path, state, actions) {\n for (var key in actions) {\n typeof actions[key] === \"function\"\n ? (function(key, action) {\n actions[key] = function(data) {\n var result = action(data)\n\n if (typeof result === \"function\") {\n result = result(getPartialState(path, globalState), actions)\n }\n\n if (\n result &&\n result !== (state = getPartialState(path, globalState)) &&\n !result.then // !isPromise\n ) {\n scheduleRender(\n (globalState = setPartialState(\n path,\n clone(state, result),\n globalState\n ))\n )\n }\n\n return result\n }\n })(key, actions[key])\n : wireStateToActions(\n path.concat(key),\n (state[key] = clone(state[key])),\n (actions[key] = clone(actions[key]))\n )\n }\n\n return actions\n }\n\n function getKey(node) {\n return node ? node.key : null\n }\n\n function eventListener(event) {\n return event.currentTarget.events[event.type](event)\n }\n\n function updateAttribute(element, name, value, oldValue, isSvg) {\n if (name === \"key\") {\n } else if (name === \"style\") {\n if (typeof value === \"string\") {\n element.style.cssText = value\n } else {\n if (typeof oldValue === \"string\") oldValue = element.style.cssText = \"\"\n for (var i in clone(oldValue, value)) {\n var style = value == null || value[i] == null ? \"\" : value[i]\n if (i[0] === \"-\") {\n element.style.setProperty(i, style)\n } else {\n element.style[i] = style\n }\n }\n }\n } else {\n if (name[0] === \"o\" && name[1] === \"n\") {\n name = name.slice(2)\n\n if (element.events) {\n if (!oldValue) oldValue = element.events[name]\n } else {\n element.events = {}\n }\n\n element.events[name] = value\n\n if (value) {\n if (!oldValue) {\n element.addEventListener(name, eventListener)\n }\n } else {\n element.removeEventListener(name, eventListener)\n }\n } else if (\n name in element &&\n name !== \"list\" &&\n name !== \"type\" &&\n name !== \"draggable\" &&\n name !== \"spellcheck\" &&\n name !== \"translate\" &&\n !isSvg\n ) {\n element[name] = value == null ? \"\" : value\n } else if (value != null && value !== false) {\n element.setAttribute(name, value)\n }\n\n if (value == null || value === false) {\n element.removeAttribute(name)\n }\n }\n }\n\n function createElement(node, isSvg) {\n var element =\n typeof node === \"string\" || typeof node === \"number\"\n ? document.createTextNode(node)\n : (isSvg = isSvg || node.nodeName === \"svg\")\n ? document.createElementNS(\n \"http://www.w3.org/2000/svg\",\n node.nodeName\n )\n : document.createElement(node.nodeName)\n\n var attributes = node.attributes\n if (attributes) {\n if (attributes.oncreate) {\n lifecycle.push(function() {\n attributes.oncreate(element)\n })\n }\n\n for (var i = 0; i < node.children.length; i++) {\n element.appendChild(\n createElement(\n (node.children[i] = resolveNode(node.children[i])),\n isSvg\n )\n )\n }\n\n for (var name in attributes) {\n updateAttribute(element, name, attributes[name], null, isSvg)\n }\n }\n\n return element\n }\n\n function updateElement(element, oldAttributes, attributes, isSvg) {\n for (var name in clone(oldAttributes, attributes)) {\n if (\n attributes[name] !==\n (name === \"value\" || name === \"checked\"\n ? element[name]\n : oldAttributes[name])\n ) {\n updateAttribute(\n element,\n name,\n attributes[name],\n oldAttributes[name],\n isSvg\n )\n }\n }\n\n var cb = isRecycling ? attributes.oncreate : attributes.onupdate\n if (cb) {\n lifecycle.push(function() {\n cb(element, oldAttributes)\n })\n }\n }\n\n function removeChildren(element, node) {\n var attributes = node.attributes\n if (attributes) {\n for (var i = 0; i < node.children.length; i++) {\n removeChildren(element.childNodes[i], node.children[i])\n }\n\n if (attributes.ondestroy) {\n attributes.ondestroy(element)\n }\n }\n return element\n }\n\n function removeElement(parent, element, node) {\n function done() {\n parent.removeChild(removeChildren(element, node))\n }\n\n var cb = node.attributes && node.attributes.onremove\n if (cb) {\n cb(element, done)\n } else {\n done()\n }\n }\n\n function patch(parent, element, oldNode, node, isSvg) {\n if (node === oldNode) {\n } else if (oldNode == null || oldNode.nodeName !== node.nodeName) {\n var newElement = createElement(node, isSvg)\n parent.insertBefore(newElement, element)\n\n if (oldNode != null) {\n removeElement(parent, element, oldNode)\n }\n\n element = newElement\n } else if (oldNode.nodeName == null) {\n element.nodeValue = node\n } else {\n updateElement(\n element,\n oldNode.attributes,\n node.attributes,\n (isSvg = isSvg || node.nodeName === \"svg\")\n )\n\n var oldKeyed = {}\n var newKeyed = {}\n var oldElements = []\n var oldChildren = oldNode.children\n var children = node.children\n\n for (var i = 0; i < oldChildren.length; i++) {\n oldElements[i] = element.childNodes[i]\n\n var oldKey = getKey(oldChildren[i])\n if (oldKey != null) {\n oldKeyed[oldKey] = [oldElements[i], oldChildren[i]]\n }\n }\n\n var i = 0\n var k = 0\n\n while (k < children.length) {\n var oldKey = getKey(oldChildren[i])\n var newKey = getKey((children[k] = resolveNode(children[k])))\n\n if (newKeyed[oldKey]) {\n i++\n continue\n }\n\n if (newKey != null && newKey === getKey(oldChildren[i + 1])) {\n if (oldKey == null) {\n removeElement(element, oldElements[i], oldChildren[i])\n }\n i++\n continue\n }\n\n if (newKey == null || isRecycling) {\n if (oldKey == null) {\n patch(element, oldElements[i], oldChildren[i], children[k], isSvg)\n k++\n }\n i++\n } else {\n var keyedNode = oldKeyed[newKey] || []\n\n if (oldKey === newKey) {\n patch(element, keyedNode[0], keyedNode[1], children[k], isSvg)\n i++\n } else if (keyedNode[0]) {\n patch(\n element,\n element.insertBefore(keyedNode[0], oldElements[i]),\n keyedNode[1],\n children[k],\n isSvg\n )\n } else {\n patch(element, oldElements[i], null, children[k], isSvg)\n }\n\n newKeyed[newKey] = children[k]\n k++\n }\n }\n\n while (i < oldChildren.length) {\n if (getKey(oldChildren[i]) == null) {\n removeElement(element, oldElements[i], oldChildren[i])\n }\n i++\n }\n\n for (var i in oldKeyed) {\n if (!newKeyed[i]) {\n removeElement(element, oldKeyed[i][0], oldKeyed[i][1])\n }\n }\n }\n return element\n }\n}\n","import { h } from \"hyperapp\"\n\nexport function Link(props, children) {\n return function(state, actions) {\n var to = props.to\n var location = state.location\n var onclick = props.onclick\n delete props.to\n delete props.location\n\n props.href = to\n props.onclick = function(e) {\n if (onclick) {\n onclick(e)\n }\n if (\n e.defaultPrevented ||\n e.button !== 0 ||\n e.altKey ||\n e.metaKey ||\n e.ctrlKey ||\n e.shiftKey ||\n props.target === \"_blank\"\n ) {\n } else {\n e.preventDefault()\n\n if (to !== location.pathname) {\n history.pushState(location.pathname, \"\", to)\n }\n }\n }\n\n return h(\"a\", props, children)\n }\n}\n","function createMatch(isExact, path, url, params) {\n return {\n isExact: isExact,\n path: path,\n url: url,\n params: params\n }\n}\n\nfunction trimTrailingSlash(url) {\n for (var len = url.length; \"/\" === url[--len]; );\n return url.slice(0, len + 1)\n}\n\nfunction decodeParam(val) {\n try {\n return decodeURIComponent(val)\n } catch (e) {\n return val\n }\n}\n\nexport function parseRoute(path, url, options) {\n if (path === url || !path) {\n return createMatch(path === url, path, url)\n }\n\n var exact = options && options.exact\n var paths = trimTrailingSlash(path).split(\"/\")\n var urls = trimTrailingSlash(url).split(\"/\")\n\n if (paths.length > urls.length || (exact && paths.length < urls.length)) {\n return\n }\n\n for (var i = 0, params = {}, len = paths.length, url = \"\"; i < len; i++) {\n if (\":\" === paths[i][0]) {\n params[paths[i].slice(1)] = urls[i] = decodeParam(urls[i])\n } else if (paths[i] !== urls[i]) {\n return\n }\n url += urls[i] + \"/\"\n }\n\n return createMatch(false, path, url.slice(0, -1), params)\n}\n","import { parseRoute } from \"./parseRoute\"\n\nexport function Route(props) {\n return function(state, actions) {\n var location = state.location\n var match = parseRoute(props.path, location.pathname, {\n exact: !props.parent\n })\n\n return (\n match &&\n props.render({\n match: match,\n location: location\n })\n )\n }\n}\n","function wrapHistory(keys) {\n return keys.reduce(function(next, key) {\n var fn = history[key]\n\n history[key] = function(data, title, url) {\n fn.call(this, data, title, url)\n dispatchEvent(new CustomEvent(\"pushstate\", { detail: data }))\n }\n\n return function() {\n history[key] = fn\n next && next()\n }\n }, null)\n}\n\nexport var location = {\n state: {\n pathname: window.location.pathname,\n previous: window.location.pathname\n },\n actions: {\n go: function(pathname) {\n history.pushState(null, \"\", pathname)\n },\n set: function(data) {\n return data\n }\n },\n subscribe: function(actions) {\n function handleLocationChange(e) {\n actions.set({\n pathname: window.location.pathname,\n previous: e.detail\n ? (window.location.previous = e.detail)\n : window.location.previous\n })\n }\n\n var unwrap = wrapHistory([\"pushState\", \"replaceState\"])\n\n addEventListener(\"pushstate\", handleLocationChange)\n addEventListener(\"popstate\", handleLocationChange)\n\n return function() {\n removeEventListener(\"pushstate\", handleLocationChange)\n removeEventListener(\"popstate\", handleLocationChange)\n unwrap()\n }\n }\n}\n","import $ from 'mdui.jq/es/$';\nconst $document = $(document);\nconst $window = $(window);\nconst $body = $('body');\nexport { $document, $window, $body };","import { $document } from 'mdui/es/utils/dom';\n/**\n * 订阅事件\n * @param name\n * @param fn\n */\n\nexport function subscribe(name, fn) {\n $document.on(name, (_, data) => {\n fn(data);\n });\n}\n/**\n * 触发事件\n * @param name\n * @param data\n */\n\nexport function emit(name, data = '') {\n $document.trigger(name, data);\n}","import $ from '../$';\nimport each from '../functions/each';\n\n$.fn.each = function (callback) {\n return each(this, callback);\n};","import $ from '../$';\nimport each from '../functions/each';\nimport { isElement, isFunction } from '../utils';\nimport './each';\neach(['add', 'remove', 'toggle'], (_, name) => {\n $.fn[`${name}Class`] = function (className) {\n if (name === 'remove' && !arguments.length) {\n return this.each((_, element) => {\n element.setAttribute('class', '');\n });\n }\n\n return this.each((i, element) => {\n if (!isElement(element)) {\n return;\n }\n\n const classes = (isFunction(className) ? className.call(element, i, element.getAttribute('class') || '') : className).split(' ').filter(name => name);\n each(classes, (_, cls) => {\n element.classList[name](cls);\n });\n });\n };\n});","import $ from '../$';\nimport each from '../functions/each';\nimport './each';\neach(['insertBefore', 'insertAfter'], (nameIndex, name) => {\n $.fn[name] = function (target) {\n const $element = nameIndex ? $(this.get().reverse()) : this; // 顺序和 jQuery 保持一致\n\n const $target = $(target);\n const result = [];\n $target.each((index, target) => {\n if (!target.parentNode) {\n return;\n }\n\n $element.each((_, element) => {\n const newItem = index ? element.cloneNode(true) : element;\n const existingItem = nameIndex ? target.nextSibling : target;\n result.push(newItem);\n target.parentNode.insertBefore(newItem, existingItem);\n });\n });\n return $(nameIndex ? result.reverse() : result);\n };\n});","import each from './each';\n\nfunction map(elements, callback) {\n let value;\n const ret = [];\n each(elements, (i, element) => {\n value = callback.call(window, element, i);\n\n if (value != null) {\n ret.push(value);\n }\n });\n return [].concat(...ret);\n}\n\nexport default map;","import $ from '../$';\nimport map from '../functions/map';\nimport { JQ } from '../JQ';\n\n$.fn.map = function (callback) {\n return new JQ(map(this, (element, i) => callback.call(element, i, element)));\n};","import $ from '../$';\nimport { isDocument, isFunction, isString, isWindow } from '../utils';\nimport './each';\n\n$.fn.is = function (selector) {\n let isMatched = false;\n\n if (isFunction(selector)) {\n this.each((index, element) => {\n if (selector.call(element, index, element)) {\n isMatched = true;\n }\n });\n return isMatched;\n }\n\n if (isString(selector)) {\n this.each((_, element) => {\n if (isDocument(element) || isWindow(element)) {\n return;\n } // @ts-ignore\n\n\n const matches = element.matches || element.msMatchesSelector;\n\n if (matches.call(element, selector)) {\n isMatched = true;\n }\n });\n return isMatched;\n }\n\n const $compareWith = $(selector);\n this.each((_, element) => {\n $compareWith.each((_, compare) => {\n if (element === compare) {\n isMatched = true;\n }\n });\n });\n return isMatched;\n};","import $ from '../$';\nimport './each';\nimport './is';\n\n$.fn.remove = function (selector) {\n return this.each((_, element) => {\n if (element.parentNode && (!selector || $(element).is(selector))) {\n element.parentNode.removeChild(element);\n }\n });\n};","import $ from '../$';\nimport each from '../functions/each';\nimport './insertAfter';\nimport './insertBefore';\nimport './map';\nimport './remove';\neach(['appendTo', 'prependTo'], (nameIndex, name) => {\n $.fn[name] = function (target) {\n const extraChilds = [];\n const $target = $(target).map((_, element) => {\n const childNodes = element.childNodes;\n const childLength = childNodes.length;\n\n if (childLength) {\n return childNodes[nameIndex ? 0 : childLength - 1];\n }\n\n const child = document.createElement('div');\n element.appendChild(child);\n extraChilds.push(child);\n return child;\n });\n const $result = this[nameIndex ? 'insertBefore' : 'insertAfter']($target);\n $(extraChilds).remove();\n return $result;\n };\n});","import each from './each';\n/**\n * 过滤掉数组中的重复元素\n * @param arr 数组\n * @example\n```js\nunique([1, 2, 12, 3, 2, 1, 2, 1, 1]);\n// [1, 2, 12, 3]\n```\n */\n\nfunction unique(arr) {\n const result = [];\n each(arr, (_, val) => {\n if (result.indexOf(val) === -1) {\n result.push(val);\n }\n });\n return result;\n}\n\nexport default unique;","import $ from '../$';\nimport each from '../functions/each';\nimport unique from '../functions/unique';\nimport { JQ } from '../JQ';\nimport { isElement } from '../utils';\nimport './each';\nimport './is';\n\n$.fn.children = function (selector) {\n const children = [];\n this.each((_, element) => {\n each(element.childNodes, (__, childNode) => {\n if (!isElement(childNode)) {\n return;\n }\n\n if (!selector || $(childNode).is(selector)) {\n children.push(childNode);\n }\n });\n });\n return new JQ(unique(children));\n};","import $ from '../$';\nimport './map';\n\n$.fn.clone = function () {\n return this.map(function () {\n return this.cloneNode(true);\n });\n};","const dataNS = '_mduiElementDataStorage';\nexport default dataNS;","import { isObjectLike, isUndefined, toCamelCase } from '../utils';\nimport each from './each';\nimport dataNS from './utils/data';\n/**\n * 在元素上设置键值对数据\n * @param element\n * @param object\n */\n\nfunction setObjectToElement(element, object) {\n // @ts-ignore\n if (!element[dataNS]) {\n // @ts-ignore\n element[dataNS] = {};\n }\n\n each(object, (key, value) => {\n // @ts-ignore\n element[dataNS][toCamelCase(key)] = value;\n });\n}\n\nfunction data(element, key, value) {\n // 根据键值对设置值\n // data(element, { 'key' : 'value' })\n if (isObjectLike(key)) {\n setObjectToElement(element, key);\n return key;\n } // 根据 key、value 设置值\n // data(element, 'key', 'value')\n\n\n if (!isUndefined(value)) {\n setObjectToElement(element, {\n [key]: value\n });\n return value;\n } // 获取所有值\n // data(element)\n\n\n if (isUndefined(key)) {\n // @ts-ignore\n return element[dataNS] ? element[dataNS] : {};\n } // 从 dataNS 中获取指定值\n // data(element, 'key')\n\n\n key = toCamelCase(key); // @ts-ignore\n\n if (element[dataNS] && key in element[dataNS]) {\n // @ts-ignore\n return element[dataNS][key];\n }\n\n return undefined;\n}\n\nexport default data;","import $ from '../$';\nimport data from '../functions/data';\nimport { isObjectLike, isString, isUndefined, toCamelCase, toKebabCase } from '../utils';\nimport './each';\nconst rbrace = /^(?:{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/; // 从 `data-*` 中获取的值,需要经过该函数转换\n\nfunction getData(value) {\n if (value === 'true') {\n return true;\n }\n\n if (value === 'false') {\n return false;\n }\n\n if (value === 'null') {\n return null;\n }\n\n if (value === +value + '') {\n return +value;\n }\n\n if (rbrace.test(value)) {\n return JSON.parse(value);\n }\n\n return value;\n} // 若 value 不存在,则从 `data-*` 中获取值\n\n\nfunction dataAttr(element, key, value) {\n if (isUndefined(value) && element.nodeType === 1) {\n const name = 'data-' + toKebabCase(key);\n value = element.getAttribute(name);\n\n if (isString(value)) {\n try {\n value = getData(value);\n } catch (e) {}\n } else {\n value = undefined;\n }\n }\n\n return value;\n}\n\n$.fn.data = function (key, value) {\n // 获取所有值\n if (isUndefined(key)) {\n if (!this.length) {\n return undefined;\n }\n\n const element = this[0];\n const resultData = data(element); // window, document 上不存在 `data-*` 属性\n\n if (element.nodeType !== 1) {\n return resultData;\n } // 从 `data-*` 中获取值\n\n\n const attrs = element.attributes;\n let i = attrs.length;\n\n while (i--) {\n if (attrs[i]) {\n let name = attrs[i].name;\n\n if (name.indexOf('data-') === 0) {\n name = toCamelCase(name.slice(5));\n resultData[name] = dataAttr(element, name, resultData[name]);\n }\n }\n }\n\n return resultData;\n } // 同时设置多个值\n\n\n if (isObjectLike(key)) {\n return this.each(function () {\n data(this, key);\n });\n } // value 传入了 undefined\n\n\n if (arguments.length === 2 && isUndefined(value)) {\n return this;\n } // 设置值\n\n\n if (!isUndefined(value)) {\n return this.each(function () {\n data(this, key, value);\n });\n } // 获取值\n\n\n if (!this.length) {\n return undefined;\n }\n\n return dataAttr(this[0], key, data(this[0], key));\n};","import each from './each';\n/**\n * 把第二个数组的元素追加到第一个数组中,并返回合并后的数组\n * @param first 第一个数组\n * @param second 该数组的元素将被追加到第一个数组中\n * @example\n```js\nmerge( [ 0, 1, 2 ], [ 2, 3, 4 ] )\n// [ 0, 1, 2, 2, 3, 4 ]\n```\n */\n\nfunction merge(first, second) {\n each(second, (_, value) => {\n first.push(value);\n });\n return first;\n}\n\nexport default merge;","import $ from '../../$';\nimport unique from '../../functions/unique';\nimport { JQ } from '../../JQ';\nimport { isElement } from '../../utils';\nimport '../each';\nimport '../is';\nexport default function dir($elements, nameIndex, node, selector, filter) {\n const ret = [];\n let target;\n $elements.each((_, element) => {\n target = element[node]; // 不能包含最顶层的 document 元素\n\n while (target && isElement(target)) {\n // prevUntil, nextUntil, parentsUntil\n if (nameIndex === 2) {\n if (selector && $(target).is(selector)) {\n break;\n }\n\n if (!filter || $(target).is(filter)) {\n ret.push(target);\n }\n } // prev, next, parent\n else if (nameIndex === 0) {\n if (!selector || $(target).is(selector)) {\n ret.push(target);\n }\n\n break;\n } // prevAll, nextAll, parents\n else {\n if (!selector || $(target).is(selector)) {\n ret.push(target);\n }\n } // @ts-ignore\n\n\n target = target[node];\n }\n });\n return new JQ(unique(ret));\n}","import $ from '../$';\n\n$.fn.get = function (index) {\n return index === undefined ? [].slice.call(this) : this[index >= 0 ? index : index + this.length];\n};","import $ from '../$';\nimport merge from '../functions/merge';\nimport { JQ } from '../JQ';\nimport './each';\nimport './get';\n\n$.fn.find = function (selector) {\n const foundElements = [];\n this.each((_, element) => {\n merge(foundElements, $(element.querySelectorAll(selector)).get());\n });\n return new JQ(foundElements);\n};","import $ from '../$';\nimport each from '../functions/each';\nimport dir from './utils/dir';\neach(['', 'All', 'Until'], (nameIndex, name) => {\n $.fn[`next${name}`] = function (selector, filter) {\n return dir(this, nameIndex, 'nextElementSibling', selector, filter);\n };\n});","import { toElement } from '../utils';\n/**\n * 检查 container 元素内是否包含 contains 元素\n * @param container 父元素\n * @param contains 子元素\n * @example\n```js\ncontains( document, document.body ); // true\ncontains( document.getElementById('test'), document ); // false\ncontains( $('.container').get(0), $('.contains').get(0) ); // false\n```\n */\n\nfunction contains(container, contains) {\n return container !== contains && toElement(container).contains(contains);\n}\n\nexport default contains;","import $ from '../../$';\nimport contains from '../../functions/contains';\nimport { isObjectLike } from '../../utils';\nimport '../find'; // 存储事件\n\nconst handlers = {}; // 元素ID\n\nlet mduiElementId = 1;\n/**\n * 为元素赋予一个唯一的ID\n */\n\nfunction getElementId(element) {\n const key = '_mduiEventId'; // @ts-ignore\n\n if (!element[key]) {\n // @ts-ignore\n element[key] = ++mduiElementId;\n } // @ts-ignore\n\n\n return element[key];\n}\n/**\n * 解析事件名中的命名空间\n */\n\n\nfunction parse(type) {\n const parts = type.split('.');\n return {\n type: parts[0],\n ns: parts.slice(1).sort().join(' ')\n };\n}\n/**\n * 命名空间匹配规则\n */\n\n\nfunction matcherFor(ns) {\n return new RegExp('(?:^| )' + ns.replace(' ', ' .* ?') + '(?: |$)');\n}\n/**\n * 获取匹配的事件\n * @param element\n * @param type\n * @param func\n * @param selector\n */\n\n\nfunction getHandlers(element, type, func, selector) {\n const event = parse(type);\n return (handlers[getElementId(element)] || []).filter(handler => handler && (!event.type || handler.type === event.type) && (!event.ns || matcherFor(event.ns).test(handler.ns)) && (!func || getElementId(handler.func) === getElementId(func)) && (!selector || handler.selector === selector));\n}\n/**\n * 添加事件监听\n * @param element\n * @param types\n * @param func\n * @param data\n * @param selector\n */\n\n\nfunction add(element, types, func, data, selector) {\n const elementId = getElementId(element);\n\n if (!handlers[elementId]) {\n handlers[elementId] = [];\n } // 传入 data.useCapture 来设置 useCapture: true\n\n\n let useCapture = false;\n\n if (isObjectLike(data) && data.useCapture) {\n useCapture = true;\n }\n\n types.split(' ').forEach(type => {\n if (!type) {\n return;\n }\n\n const event = parse(type);\n\n function callFn(e, elem) {\n // 因为鼠标事件模拟事件的 detail 属性是只读的,因此在 e._detail 中存储参数\n const result = func.apply(elem, // @ts-ignore\n e._detail === undefined ? [e] : [e].concat(e._detail));\n\n if (result === false) {\n e.preventDefault();\n e.stopPropagation();\n }\n }\n\n function proxyFn(e) {\n // @ts-ignore\n if (e._ns && !matcherFor(e._ns).test(event.ns)) {\n return;\n } // @ts-ignore\n\n\n e._data = data;\n\n if (selector) {\n // 事件代理\n $(element).find(selector).get().reverse().forEach(elem => {\n if (elem === e.target || contains(elem, e.target)) {\n callFn(e, elem);\n }\n });\n } else {\n // 不使用事件代理\n callFn(e, element);\n }\n }\n\n const handler = {\n type: event.type,\n ns: event.ns,\n func,\n selector,\n id: handlers[elementId].length,\n proxy: proxyFn\n };\n handlers[elementId].push(handler);\n element.addEventListener(handler.type, proxyFn, useCapture);\n });\n}\n/**\n * 移除事件监听\n * @param element\n * @param types\n * @param func\n * @param selector\n */\n\n\nfunction remove(element, types, func, selector) {\n const handlersInElement = handlers[getElementId(element)] || [];\n\n const removeEvent = handler => {\n delete handlersInElement[handler.id];\n element.removeEventListener(handler.type, handler.proxy, false);\n };\n\n if (!types) {\n handlersInElement.forEach(handler => removeEvent(handler));\n } else {\n types.split(' ').forEach(type => {\n if (type) {\n getHandlers(element, type, func, selector).forEach(handler => removeEvent(handler));\n }\n });\n }\n}\n\nexport { parse, add, remove };","import $ from '../$';\nimport each from '../functions/each';\nimport { isFunction, isObjectLike, returnFalse } from '../utils';\nimport './each';\nimport { remove } from './utils/event';\n\n$.fn.off = function (types, selector, callback) {\n // types 是对象\n if (isObjectLike(types)) {\n each(types, (type, fn) => {\n // this.off('click', undefined, function () {})\n // this.off('click', '.box', function () {})\n this.off(type, selector, fn);\n });\n return this;\n } // selector 不存在\n\n\n if (selector === false || isFunction(selector)) {\n callback = selector;\n selector = undefined; // this.off('click', undefined, function () {})\n } // callback 传入 `false`,相当于 `return false`\n\n\n if (callback === false) {\n callback = returnFalse;\n }\n\n return this.each(function () {\n remove(this, types, callback, selector);\n });\n};","import $ from '../$';\nimport each from '../functions/each';\nimport { isObjectLike, isString, returnFalse } from '../utils';\nimport './each';\nimport './off';\nimport { add } from './utils/event';\n\n$.fn.on = function (types, selector, data, callback, one) {\n // types 可以是 type/func 对象\n if (isObjectLike(types)) {\n // (types-Object, selector, data)\n if (!isString(selector)) {\n // (types-Object, data)\n data = data || selector;\n selector = undefined;\n }\n\n each(types, (type, fn) => {\n // selector 和 data 都可能是 undefined\n // @ts-ignore\n this.on(type, selector, data, fn, one);\n });\n return this;\n }\n\n if (data == null && callback == null) {\n // (types, fn)\n callback = selector;\n data = selector = undefined;\n } else if (callback == null) {\n if (isString(selector)) {\n // (types, selector, fn)\n callback = data;\n data = undefined;\n } else {\n // (types, data, fn)\n callback = data;\n data = selector;\n selector = undefined;\n }\n }\n\n if (callback === false) {\n callback = returnFalse;\n } else if (!callback) {\n return this;\n } // $().one()\n\n\n if (one) {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const _this = this;\n\n const origCallback = callback;\n\n callback = function (event) {\n _this.off(event.type, selector, callback); // eslint-disable-next-line prefer-rest-params\n\n\n return origCallback.apply(this, arguments);\n };\n }\n\n return this.each(function () {\n add(this, types, callback, data, selector);\n });\n};","import $ from '../$';\nimport each from '../functions/each';\nimport './get';\nimport dir from './utils/dir';\neach(['', 's', 'sUntil'], (nameIndex, name) => {\n $.fn[`parent${name}`] = function (selector, filter) {\n // parents、parentsUntil 需要把元素的顺序反向处理,以便和 jQuery 的结果一致\n const $nodes = !nameIndex ? this : $(this.get().reverse());\n return dir($nodes, nameIndex, 'parentNode', selector, filter);\n };\n});","import $ from '../$';\nimport each from '../functions/each';\nimport map from '../functions/map';\nimport { isElement, isFunction, isUndefined, toElement } from '../utils';\nimport './each';\nimport './is';\neach(['val', 'html', 'text'], (nameIndex, name) => {\n const props = {\n 0: 'value',\n 1: 'innerHTML',\n 2: 'textContent'\n };\n const propName = props[nameIndex];\n\n function get($elements) {\n // text() 获取所有元素的文本\n if (nameIndex === 2) {\n // @ts-ignore\n return map($elements, element => toElement(element)[propName]).join('');\n } // 空集合时,val() 和 html() 返回 undefined\n\n\n if (!$elements.length) {\n return undefined;\n } // val() 和 html() 仅获取第一个元素的内容\n\n\n const firstElement = $elements[0]; // select multiple 返回数组\n\n if (nameIndex === 0 && $(firstElement).is('select[multiple]')) {\n return map($(firstElement).find('option:checked'), element => element.value);\n } // @ts-ignore\n\n\n return firstElement[propName];\n }\n\n function set(element, value) {\n // text() 和 html() 赋值为 undefined,则保持原内容不变\n // val() 赋值为 undefined 则赋值为空\n if (isUndefined(value)) {\n if (nameIndex !== 0) {\n return;\n }\n\n value = '';\n }\n\n if (nameIndex === 1 && isElement(value)) {\n value = value.outerHTML;\n } // @ts-ignore\n\n\n element[propName] = value;\n }\n\n $.fn[name] = function (value) {\n // 获取值\n if (!arguments.length) {\n return get(this);\n } // 设置值\n\n\n return this.each((i, element) => {\n const computedValue = isFunction(value) ? value.call(element, i, get($(element))) : value; // value 是数组,则选中数组中的元素,反选不在数组中的元素\n\n if (nameIndex === 0 && Array.isArray(computedValue)) {\n // select[multiple]\n if ($(element).is('select[multiple]')) {\n map($(element).find('option'), option => option.selected = computedValue.indexOf(option.value) > -1);\n } // 其他 checkbox, radio 等元素\n else {\n element.checked = computedValue.indexOf(element.value) > -1;\n }\n } else {\n set(element, computedValue);\n }\n });\n };\n});","import $ from '../$';\nimport './each';\nimport './val';\n/**\n * 将表单元素的值组合成键值对数组\n * @returns {Array}\n */\n\n$.fn.serializeArray = function () {\n const result = [];\n this.each((_, element) => {\n const elements = element instanceof HTMLFormElement ? element.elements : [element];\n $(elements).each((_, element) => {\n const $element = $(element);\n const type = element.type;\n const nodeName = element.nodeName.toLowerCase();\n\n if (nodeName !== 'fieldset' && element.name && !element.disabled && ['input', 'select', 'textarea', 'keygen'].indexOf(nodeName) > -1 && ['submit', 'button', 'image', 'reset', 'file'].indexOf(type) === -1 && (['radio', 'checkbox'].indexOf(type) === -1 || element.checked)) {\n const value = $element.val();\n const valueArr = Array.isArray(value) ? value : [value];\n valueArr.forEach(value => {\n result.push({\n name: element.name,\n value\n });\n });\n }\n });\n });\n return result;\n};","import $ from '../$';\nimport { getStyle } from '../utils';\nimport './each';\nconst elementDisplay = {};\n/**\n * 获取元素的初始 display 值,用于 .show() 方法\n * @param nodeName\n */\n\nfunction defaultDisplay(nodeName) {\n let element;\n let display;\n\n if (!elementDisplay[nodeName]) {\n element = document.createElement(nodeName);\n document.body.appendChild(element);\n display = getStyle(element, 'display');\n element.parentNode.removeChild(element);\n\n if (display === 'none') {\n display = 'block';\n }\n\n elementDisplay[nodeName] = display;\n }\n\n return elementDisplay[nodeName];\n}\n/**\n * 显示指定元素\n * @returns {JQ}\n */\n\n\n$.fn.show = function () {\n return this.each(function () {\n if (this.style.display === 'none') {\n this.style.display = '';\n }\n\n if (getStyle(this, 'display') === 'none') {\n this.style.display = defaultDisplay(this.nodeName);\n }\n });\n};","import $ from '../$';\nimport each from '../functions/each';\nimport { isBoolean, isDocument, isFunction, isWindow, toElement, isBorderBox, getExtraWidth, getComputedStyleValue, isIE } from '../utils';\nimport './css';\nimport './each';\n/**\n * 值上面的 padding、border、margin 处理\n * @param element\n * @param name\n * @param value\n * @param funcIndex\n * @param includeMargin\n * @param multiply\n */\n\nfunction handleExtraWidth(element, name, value, funcIndex, includeMargin, multiply) {\n // 获取元素的 padding, border, margin 宽度(两侧宽度的和)\n const getExtraWidthValue = extra => {\n return getExtraWidth(element, name.toLowerCase(), extra) * multiply;\n };\n\n if (funcIndex === 2 && includeMargin) {\n value += getExtraWidthValue('margin');\n }\n\n if (isBorderBox(element)) {\n // IE 为 box-sizing: border-box 时,得到的值不含 border 和 padding,这里先修复\n // 仅获取时需要处理,multiply === 1 为 get\n if (isIE() && multiply === 1) {\n value += getExtraWidthValue('border');\n value += getExtraWidthValue('padding');\n }\n\n if (funcIndex === 0) {\n value -= getExtraWidthValue('border');\n }\n\n if (funcIndex === 1) {\n value -= getExtraWidthValue('border');\n value -= getExtraWidthValue('padding');\n }\n } else {\n if (funcIndex === 0) {\n value += getExtraWidthValue('padding');\n }\n\n if (funcIndex === 2) {\n value += getExtraWidthValue('border');\n value += getExtraWidthValue('padding');\n }\n }\n\n return value;\n}\n/**\n * 获取元素的样式值\n * @param element\n * @param name\n * @param funcIndex 0: innerWidth, innerHeight; 1: width, height; 2: outerWidth, outerHeight\n * @param includeMargin\n */\n\n\nfunction get(element, name, funcIndex, includeMargin) {\n const clientProp = `client${name}`;\n const scrollProp = `scroll${name}`;\n const offsetProp = `offset${name}`;\n const innerProp = `inner${name}`; // $(window).width()\n\n if (isWindow(element)) {\n // outerWidth, outerHeight 需要包含滚动条的宽度\n return funcIndex === 2 ? element[innerProp] : toElement(document)[clientProp];\n } // $(document).width()\n\n\n if (isDocument(element)) {\n const doc = toElement(element);\n return Math.max( // @ts-ignore\n element.body[scrollProp], doc[scrollProp], // @ts-ignore\n element.body[offsetProp], doc[offsetProp], doc[clientProp]);\n }\n\n const value = parseFloat(getComputedStyleValue(element, name.toLowerCase()) || '0');\n return handleExtraWidth(element, name, value, funcIndex, includeMargin, 1);\n}\n/**\n * 设置元素的样式值\n * @param element\n * @param elementIndex\n * @param name\n * @param funcIndex 0: innerWidth, innerHeight; 1: width, height; 2: outerWidth, outerHeight\n * @param includeMargin\n * @param value\n */\n\n\nfunction set(element, elementIndex, name, funcIndex, includeMargin, value) {\n let computedValue = isFunction(value) ? value.call(element, elementIndex, get(element, name, funcIndex, includeMargin)) : value;\n\n if (computedValue == null) {\n return;\n }\n\n const $element = $(element);\n const dimension = name.toLowerCase(); // 特殊的值,不需要计算 padding、border、margin\n\n if (['auto', 'inherit', ''].indexOf(computedValue) > -1) {\n $element.css(dimension, computedValue);\n return;\n } // 其他值保留原始单位。注意:如果不使用 px 作为单位,则算出的值一般是不准确的\n\n\n const suffix = computedValue.toString().replace(/\\b[0-9.]*/, '');\n const numerical = parseFloat(computedValue);\n computedValue = handleExtraWidth(element, name, numerical, funcIndex, includeMargin, -1) + (suffix || 'px');\n $element.css(dimension, computedValue);\n}\n\neach(['Width', 'Height'], (_, name) => {\n each([`inner${name}`, name.toLowerCase(), `outer${name}`], (funcIndex, funcName) => {\n $.fn[funcName] = function (margin, value) {\n // 是否是赋值操作\n const isSet = arguments.length && (funcIndex < 2 || !isBoolean(margin));\n const includeMargin = margin === true || value === true; // 获取第一个元素的值\n\n if (!isSet) {\n return this.length ? get(this[0], name, funcIndex, includeMargin) : undefined;\n } // 设置每个元素的值\n\n\n return this.each((index, element) => set(element, index, name, funcIndex, includeMargin, margin));\n };\n });\n});","import $ from '../$';\nimport './each';\nimport { parse } from './utils/event';\n\n$.fn.trigger = function (type, extraParameters) {\n const event = parse(type);\n let eventObject;\n const eventParams = {\n bubbles: true,\n cancelable: true\n };\n const isMouseEvent = ['click', 'mousedown', 'mouseup', 'mousemove'].indexOf(event.type) > -1;\n\n if (isMouseEvent) {\n // Note: MouseEvent 无法传入 detail 参数\n eventObject = new MouseEvent(event.type, eventParams);\n } else {\n eventParams.detail = extraParameters;\n eventObject = new CustomEvent(event.type, eventParams);\n } // @ts-ignore\n\n\n eventObject._detail = extraParameters; // @ts-ignore\n\n eventObject._ns = event.ns;\n return this.each(function () {\n this.dispatchEvent(eventObject);\n });\n};","import $ from '../$';\nimport each from '../functions/each';\nimport { cssNumber, getStyle, isElement, isFunction, isNull, isNumber, isObjectLike, isUndefined, toCamelCase } from '../utils';\nimport './each';\neach(['attr', 'prop', 'css'], (nameIndex, name) => {\n function set(element, key, value) {\n // 值为 undefined 时,不修改\n if (isUndefined(value)) {\n return;\n }\n\n switch (nameIndex) {\n // attr\n case 0:\n if (isNull(value)) {\n element.removeAttribute(key);\n } else {\n element.setAttribute(key, value);\n }\n\n break;\n // prop\n\n case 1:\n // @ts-ignore\n element[key] = value;\n break;\n // css\n\n default:\n key = toCamelCase(key); // @ts-ignore\n\n element.style[key] = isNumber(value) ? `${value}${cssNumber.indexOf(key) > -1 ? '' : 'px'}` : value;\n break;\n }\n }\n\n function get(element, key) {\n switch (nameIndex) {\n // attr\n case 0:\n // 属性不存在时,原生 getAttribute 方法返回 null,而 jquery 返回 undefined。这里和 jquery 保持一致\n const value = element.getAttribute(key);\n return isNull(value) ? undefined : value;\n // prop\n\n case 1:\n // @ts-ignore\n return element[key];\n // css\n\n default:\n return getStyle(element, key);\n }\n }\n\n $.fn[name] = function (key, value) {\n if (isObjectLike(key)) {\n each(key, (k, v) => {\n // @ts-ignore\n this[name](k, v);\n });\n return this;\n }\n\n if (arguments.length === 1) {\n const element = this[0];\n return isElement(element) ? get(element, key) : undefined;\n }\n\n return this.each((i, element) => {\n set(element, key, isFunction(value) ? value.call(element, i, get(element, key)) : value);\n });\n };\n});","import $ from 'mdui.jq/es/$';\nimport 'mdui.jq/es/methods/each';\n\n$.fn.reflow = function () {\n return this.each(function () {\n return this.clientLeft;\n });\n};","import $ from 'mdui.jq/es/$';\nimport each from 'mdui.jq/es/functions/each';\nimport 'mdui.jq/es/methods/on';\nimport 'mdui.jq/es/methods/off';\n\n$.fn.transitionEnd = function (callback) {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const that = this;\n const events = ['webkitTransitionEnd', 'transitionend'];\n\n function fireCallback(e) {\n if (e.target !== this) {\n return;\n } // @ts-ignore\n\n\n callback.call(this, e);\n each(events, (_, event) => {\n that.off(event, fireCallback);\n });\n }\n\n each(events, (_, event) => {\n that.on(event, fireCallback);\n });\n return this;\n};","import data from 'mdui.jq/es/functions/data';\n/**\n * CSS 选择器和初始化函数组成的对象\n */\n\nconst entries = {};\n/**\n * 注册并执行初始化函数\n * @param selector CSS 选择器\n * @param apiInit 初始化函数\n * @param i 元素索引\n * @param element 元素\n */\n\nfunction mutation(selector, apiInit, i, element) {\n let selectors = data(element, '_mdui_mutation');\n\n if (!selectors) {\n selectors = [];\n data(element, '_mdui_mutation', selectors);\n }\n\n if (selectors.indexOf(selector) === -1) {\n selectors.push(selector);\n apiInit.call(element, i, element);\n }\n}\n\nexport { entries, mutation };","import $ from 'mdui.jq/es/$';\nimport each from 'mdui.jq/es/functions/each';\nimport 'mdui.jq/es/methods/each';\nimport 'mdui.jq/es/methods/find';\nimport 'mdui.jq/es/methods/is';\nimport { entries, mutation } from '../../utils/mutation';\n\n$.fn.mutation = function () {\n return this.each((i, element) => {\n const $this = $(element);\n each(entries, (selector, apiInit) => {\n if ($this.is(selector)) {\n mutation(selector, apiInit, i, element);\n }\n\n $this.find(selector).each((i, element) => {\n mutation(selector, apiInit, i, element);\n });\n });\n });\n};","import $ from 'mdui.jq/es/$';\nimport { isUndefined } from 'mdui.jq/es/utils';\nimport 'mdui.jq/es/methods/data';\nimport 'mdui.jq/es/methods/css';\nimport 'mdui.jq/es/methods/appendTo';\nimport 'mdui.jq/es/methods/addClass';\nimport '../methods/reflow';\n\n$.showOverlay = function (zIndex) {\n let $overlay = $('.mdui-overlay');\n\n if ($overlay.length) {\n $overlay.data('_overlay_is_deleted', false);\n\n if (!isUndefined(zIndex)) {\n $overlay.css('z-index', zIndex);\n }\n } else {\n if (isUndefined(zIndex)) {\n zIndex = 2000;\n }\n\n $overlay = $('
').appendTo(document.body).reflow().css('z-index', zIndex);\n }\n\n let level = $overlay.data('_overlay_level') || 0;\n return $overlay.data('_overlay_level', ++level).addClass('mdui-overlay-show');\n};","import $ from 'mdui.jq/es/$';\nimport 'mdui.jq/es/methods/data';\nimport 'mdui.jq/es/methods/removeClass';\nimport 'mdui.jq/es/methods/remove';\nimport '../methods/transitionEnd';\n\n$.hideOverlay = function (force = false) {\n const $overlay = $('.mdui-overlay');\n\n if (!$overlay.length) {\n return;\n }\n\n let level = force ? 1 : $overlay.data('_overlay_level');\n\n if (level > 1) {\n $overlay.data('_overlay_level', --level);\n return;\n }\n\n $overlay.data('_overlay_level', 0).removeClass('mdui-overlay-show').data('_overlay_is_deleted', true).transitionEnd(() => {\n if ($overlay.data('_overlay_is_deleted')) {\n $overlay.remove();\n }\n });\n};","import $ from 'mdui.jq/es/$';\nimport 'mdui.jq/es/methods/addClass';\nimport 'mdui.jq/es/methods/data';\nimport 'mdui.jq/es/methods/width';\n\n$.lockScreen = function () {\n const $body = $('body'); // 不直接把 body 设为 box-sizing: border-box,避免污染全局样式\n\n const newBodyWidth = $body.width();\n let level = $body.data('_lockscreen_level') || 0;\n $body.addClass('mdui-locked').width(newBodyWidth).data('_lockscreen_level', ++level);\n};","import $ from 'mdui.jq/es/$';\nimport 'mdui.jq/es/methods/data';\nimport 'mdui.jq/es/methods/removeClass';\nimport 'mdui.jq/es/methods/width';\n\n$.unlockScreen = function (force = false) {\n const $body = $('body');\n let level = force ? 1 : $body.data('_lockscreen_level');\n\n if (level > 1) {\n $body.data('_lockscreen_level', --level);\n return;\n }\n\n $body.data('_lockscreen_level', 0).removeClass('mdui-locked').width('');\n};","import $ from 'mdui.jq/es/$';\nimport 'mdui.jq/es/methods/each';\nimport mdui from '../mdui';\nimport '../jq_extends/methods/mutation';\nimport { isUndefined } from 'mdui.jq/es/utils';\nimport { entries, mutation } from '../utils/mutation';\n\nmdui.mutation = function (selector, apiInit) {\n if (isUndefined(selector) || isUndefined(apiInit)) {\n $(document).mutation();\n return;\n }\n\n entries[selector] = apiInit;\n $(selector).each((i, element) => mutation(selector, apiInit, i, element));\n};","import each from '../functions/each';\nimport { isUndefined } from '../utils';\n\nfunction extend(target, object1, ...objectN) {\n objectN.unshift(object1);\n each(objectN, (_, object) => {\n each(object, (prop, value) => {\n if (!isUndefined(value)) {\n target[prop] = value;\n }\n });\n });\n return target;\n}\n\nexport default extend;","import $ from 'mdui.jq/es/$';\nimport 'mdui.jq/es/methods/trigger';\n/**\n * 触发组件上的事件\n * @param eventName 事件名\n * @param componentName 组件名\n * @param target 在该元素上触发事件\n * @param instance 组件实例\n * @param parameters 事件参数\n */\n\nfunction componentEvent(eventName, componentName, target, instance, parameters) {\n if (!parameters) {\n parameters = {};\n } // @ts-ignore\n\n\n parameters.inst = instance;\n const fullEventName = `${eventName}.mdui.${componentName}`; // jQuery 事件\n // @ts-ignore\n\n if (typeof jQuery !== 'undefined') {\n // @ts-ignore\n jQuery(target).trigger(fullEventName, parameters);\n }\n\n const $target = $(target); // mdui.jq 事件\n\n $target.trigger(fullEventName, parameters);\n const eventParams = {\n bubbles: true,\n cancelable: true,\n detail: parameters\n };\n const eventObject = new CustomEvent(fullEventName, eventParams); // @ts-ignore\n\n eventObject._detail = parameters;\n $target[0].dispatchEvent(eventObject);\n}\n\nexport { componentEvent };","import $ from '../$';\nimport { JQ } from '../JQ';\n\n$.fn.slice = function (...args) {\n return new JQ([].slice.apply(this, args));\n};","import $ from '../$';\nimport { JQ } from '../JQ';\nimport './slice';\n\n$.fn.eq = function (index) {\n const ret = index === -1 ? this.slice(index) : this.slice(index, +index + 1);\n return new JQ(ret);\n};","import $ from '../$';\nimport './eq';\n\n$.fn.first = function () {\n return this.eq(0);\n};","import $ from '../$';\n\n$.fn.hasClass = function (className) {\n return this[0].classList.contains(className);\n};","import $ from 'mdui.jq/es/$';\nimport extend from 'mdui.jq/es/functions/extend';\nimport 'mdui.jq/es/methods/addClass';\nimport 'mdui.jq/es/methods/data';\nimport 'mdui.jq/es/methods/first';\nimport 'mdui.jq/es/methods/hasClass';\nimport 'mdui.jq/es/methods/on';\nimport 'mdui.jq/es/methods/removeClass';\nimport { isNumber } from 'mdui.jq/es/utils';\nimport mdui from '../../mdui';\nimport '../../jq_extends/methods/transitionEnd';\nimport { componentEvent } from '../../utils/componentEvent';\nimport { $window } from '../../utils/dom';\nconst DEFAULT_OPTIONS = {\n tolerance: 5,\n offset: 0,\n initialClass: 'mdui-headroom',\n pinnedClass: 'mdui-headroom-pinned-top',\n unpinnedClass: 'mdui-headroom-unpinned-top'\n};\n\nclass Headroom {\n constructor(selector, options = {}) {\n /**\n * 配置参数\n */\n this.options = extend({}, DEFAULT_OPTIONS);\n /**\n * 当前 headroom 的状态\n */\n\n this.state = 'pinned';\n /**\n * 当前是否启用\n */\n\n this.isEnable = false;\n /**\n * 上次滚动后,垂直方向的距离\n */\n\n this.lastScrollY = 0;\n /**\n * AnimationFrame ID\n */\n\n this.rafId = 0;\n this.$element = $(selector).first();\n extend(this.options, options); // tolerance 参数若为数值,转换为对象\n\n const tolerance = this.options.tolerance;\n\n if (isNumber(tolerance)) {\n this.options.tolerance = {\n down: tolerance,\n up: tolerance\n };\n }\n\n this.enable();\n }\n /**\n * 滚动时的处理\n */\n\n\n onScroll() {\n this.rafId = window.requestAnimationFrame(() => {\n const currentScrollY = window.pageYOffset;\n const direction = currentScrollY > this.lastScrollY ? 'down' : 'up';\n const tolerance = this.options.tolerance[direction];\n const scrolled = Math.abs(currentScrollY - this.lastScrollY);\n const toleranceExceeded = scrolled >= tolerance;\n\n if (currentScrollY > this.lastScrollY && currentScrollY >= this.options.offset && toleranceExceeded) {\n this.unpin();\n } else if (currentScrollY < this.lastScrollY && toleranceExceeded || currentScrollY <= this.options.offset) {\n this.pin();\n }\n\n this.lastScrollY = currentScrollY;\n });\n }\n /**\n * 触发组件事件\n * @param name\n */\n\n\n triggerEvent(name) {\n componentEvent(name, 'headroom', this.$element, this);\n }\n /**\n * 动画结束的回调\n */\n\n\n transitionEnd() {\n if (this.state === 'pinning') {\n this.state = 'pinned';\n this.triggerEvent('pinned');\n }\n\n if (this.state === 'unpinning') {\n this.state = 'unpinned';\n this.triggerEvent('unpinned');\n }\n }\n /**\n * 使元素固定住\n */\n\n\n pin() {\n if (this.state === 'pinning' || this.state === 'pinned' || !this.$element.hasClass(this.options.initialClass)) {\n return;\n }\n\n this.triggerEvent('pin');\n this.state = 'pinning';\n this.$element.removeClass(this.options.unpinnedClass).addClass(this.options.pinnedClass).transitionEnd(() => this.transitionEnd());\n }\n /**\n * 使元素隐藏\n */\n\n\n unpin() {\n if (this.state === 'unpinning' || this.state === 'unpinned' || !this.$element.hasClass(this.options.initialClass)) {\n return;\n }\n\n this.triggerEvent('unpin');\n this.state = 'unpinning';\n this.$element.removeClass(this.options.pinnedClass).addClass(this.options.unpinnedClass).transitionEnd(() => this.transitionEnd());\n }\n /**\n * 启用 headroom 插件\n */\n\n\n enable() {\n if (this.isEnable) {\n return;\n }\n\n this.isEnable = true;\n this.state = 'pinned';\n this.$element.addClass(this.options.initialClass).removeClass(this.options.pinnedClass).removeClass(this.options.unpinnedClass);\n this.lastScrollY = window.pageYOffset;\n $window.on('scroll', () => this.onScroll());\n }\n /**\n * 禁用 headroom 插件\n */\n\n\n disable() {\n if (!this.isEnable) {\n return;\n }\n\n this.isEnable = false;\n this.$element.removeClass(this.options.initialClass).removeClass(this.options.pinnedClass).removeClass(this.options.unpinnedClass);\n $window.off('scroll', () => this.onScroll());\n window.cancelAnimationFrame(this.rafId);\n }\n /**\n * 获取当前状态。共包含四种状态:`pinning`、`pinned`、`unpinning`、`unpinned`\n */\n\n\n getState() {\n return this.state;\n }\n\n}\n\nmdui.Headroom = Headroom;","import $ from '../$';\nimport './css';\nimport './eq';\nimport './offset';\nimport './offsetParent';\n\nfunction floatStyle($element, name) {\n return parseFloat($element.css(name));\n}\n\n$.fn.position = function () {\n if (!this.length) {\n return undefined;\n }\n\n const $element = this.eq(0);\n let currentOffset;\n let parentOffset = {\n left: 0,\n top: 0\n };\n\n if ($element.css('position') === 'fixed') {\n currentOffset = $element[0].getBoundingClientRect();\n } else {\n currentOffset = $element.offset();\n const $offsetParent = $element.offsetParent();\n parentOffset = $offsetParent.offset();\n parentOffset.top += floatStyle($offsetParent, 'border-top-width');\n parentOffset.left += floatStyle($offsetParent, 'border-left-width');\n }\n\n return {\n top: currentOffset.top - parentOffset.top - floatStyle($element, 'margin-top'),\n left: currentOffset.left - parentOffset.left - floatStyle($element, 'margin-left')\n };\n};","import $ from '../$';\nimport extend from '../functions/extend';\nimport { isFunction } from '../utils';\nimport './css';\nimport './each';\nimport './position';\n\nfunction get(element) {\n if (!element.getClientRects().length) {\n return {\n top: 0,\n left: 0\n };\n }\n\n const rect = element.getBoundingClientRect();\n const win = element.ownerDocument.defaultView;\n return {\n top: rect.top + win.pageYOffset,\n left: rect.left + win.pageXOffset\n };\n}\n\nfunction set(element, value, index) {\n const $element = $(element);\n const position = $element.css('position');\n\n if (position === 'static') {\n $element.css('position', 'relative');\n }\n\n const currentOffset = get(element);\n const currentTopString = $element.css('top');\n const currentLeftString = $element.css('left');\n let currentTop;\n let currentLeft;\n const calculatePosition = (position === 'absolute' || position === 'fixed') && (currentTopString + currentLeftString).indexOf('auto') > -1;\n\n if (calculatePosition) {\n const currentPosition = $element.position();\n currentTop = currentPosition.top;\n currentLeft = currentPosition.left;\n } else {\n currentTop = parseFloat(currentTopString);\n currentLeft = parseFloat(currentLeftString);\n }\n\n const computedValue = isFunction(value) ? value.call(element, index, extend({}, currentOffset)) : value;\n $element.css({\n top: computedValue.top != null ? computedValue.top - currentOffset.top + currentTop : undefined,\n left: computedValue.left != null ? computedValue.left - currentOffset.left + currentLeft : undefined\n });\n}\n\n$.fn.offset = function (value) {\n // 获取坐标\n if (!arguments.length) {\n if (!this.length) {\n return undefined;\n }\n\n return get(this[0]);\n } // 设置坐标\n\n\n return this.each(function (index) {\n set(this, value, index);\n });\n};","import $ from '../$';\nimport './css';\nimport './map';\n/**\n * 返回最近的用于定位的父元素\n */\n\n$.fn.offsetParent = function () {\n return this.map(function () {\n let offsetParent = this.offsetParent;\n\n while (offsetParent && $(offsetParent).css('position') === 'static') {\n offsetParent = offsetParent.offsetParent;\n }\n\n return offsetParent || document.documentElement;\n });\n};","import $ from 'mdui.jq/es/$';\nimport 'mdui.jq/es/methods/each';\n\n$.fn.transform = function (transform) {\n return this.each(function () {\n this.style.webkitTransform = transform;\n this.style.transform = transform;\n });\n};","/**\n * touch 事件后的 500ms 内禁用 mousedown 事件\n *\n * 不支持触控的屏幕上事件顺序为 mousedown -> mouseup -> click\n * 支持触控的屏幕上事件顺序为 touchstart -> touchend -> mousedown -> mouseup -> click\n *\n * 在每一个事件中都使用 TouchHandler.isAllow(event) 判断事件是否可执行\n * 在 touchstart 和 touchmove、touchend、touchcancel\n *\n * (function () {\n * $document\n * .on(start, function (e) {\n * if (!isAllow(e)) {\n * return;\n * }\n * register(e);\n * console.log(e.type);\n * })\n * .on(move, function (e) {\n * if (!isAllow(e)) {\n * return;\n * }\n * console.log(e.type);\n * })\n * .on(end, function (e) {\n * if (!isAllow(e)) {\n * return;\n * }\n * console.log(e.type);\n * })\n * .on(unlock, register);\n * })();\n */\nconst startEvent = 'touchstart mousedown';\nconst moveEvent = 'touchmove mousemove';\nconst endEvent = 'touchend mouseup';\nconst cancelEvent = 'touchcancel mouseleave';\nconst unlockEvent = 'touchend touchmove touchcancel';\nlet touches = 0;\n/**\n * 该事件是否被允许,在执行事件前调用该方法判断事件是否可以执行\n * 若已触发 touch 事件,则阻止之后的鼠标事件\n * @param event\n */\n\nfunction isAllow(event) {\n return !(touches && ['mousedown', 'mouseup', 'mousemove', 'click', 'mouseover', 'mouseout', 'mouseenter', 'mouseleave'].indexOf(event.type) > -1);\n}\n/**\n * 在 touchstart 和 touchmove、touchend、touchcancel 事件中调用该方法注册事件\n * @param event\n */\n\n\nfunction register(event) {\n if (event.type === 'touchstart') {\n // 触发了 touch 事件\n touches += 1;\n } else if (['touchmove', 'touchend', 'touchcancel'].indexOf(event.type) > -1) {\n // touch 事件结束 500ms 后解除对鼠标事件的阻止\n setTimeout(function () {\n if (touches) {\n touches -= 1;\n }\n }, 500);\n }\n}\n\nexport { startEvent, moveEvent, endEvent, cancelEvent, unlockEvent, isAllow, register };","/**\n * Inspired by https://github.com/nolimits4web/Framework7/blob/master/src/js/fast-clicks.js\n * https://github.com/nolimits4web/Framework7/blob/master/LICENSE\n *\n * Inspired by https://github.com/fians/Waves\n */\nimport $ from 'mdui.jq/es/$';\nimport 'mdui.jq/es/methods/addClass';\nimport 'mdui.jq/es/methods/attr';\nimport 'mdui.jq/es/methods/children';\nimport 'mdui.jq/es/methods/data';\nimport 'mdui.jq/es/methods/each';\nimport 'mdui.jq/es/methods/first';\nimport 'mdui.jq/es/methods/hasClass';\nimport 'mdui.jq/es/methods/innerHeight';\nimport 'mdui.jq/es/methods/innerWidth';\nimport 'mdui.jq/es/methods/off';\nimport 'mdui.jq/es/methods/offset';\nimport 'mdui.jq/es/methods/on';\nimport 'mdui.jq/es/methods/parents';\nimport 'mdui.jq/es/methods/prependTo';\nimport 'mdui.jq/es/methods/prop';\nimport 'mdui.jq/es/methods/remove';\nimport { isUndefined } from 'mdui.jq/es/utils';\nimport '../../jq_extends/methods/reflow';\nimport '../../jq_extends/methods/transform';\nimport '../../jq_extends/methods/transitionEnd';\nimport { $document } from '../../utils/dom';\nimport { cancelEvent, endEvent, isAllow, moveEvent, register, startEvent, unlockEvent } from '../../utils/touchHandler';\n/**\n * 显示涟漪动画\n * @param event\n * @param $ripple\n */\n\nfunction show(event, $ripple) {\n // 鼠标右键不产生涟漪\n if (event instanceof MouseEvent && event.button === 2) {\n return;\n } // 点击位置坐标\n\n\n const touchPosition = typeof TouchEvent !== 'undefined' && event instanceof TouchEvent && event.touches.length ? event.touches[0] : event;\n const touchStartX = touchPosition.pageX;\n const touchStartY = touchPosition.pageY; // 涟漪位置\n\n const offset = $ripple.offset();\n const height = $ripple.innerHeight();\n const width = $ripple.innerWidth();\n const center = {\n x: touchStartX - offset.left,\n y: touchStartY - offset.top\n };\n const diameter = Math.max(Math.pow(Math.pow(height, 2) + Math.pow(width, 2), 0.5), 48); // 涟漪扩散动画\n\n const translate = `translate3d(${-center.x + width / 2}px,` + `${-center.y + height / 2}px, 0) scale(1)`; // 涟漪的 DOM 结构,并缓存动画效果\n\n $(`
`).data('_ripple_wave_translate', translate).prependTo($ripple).reflow().transform(translate);\n}\n/**\n * 隐藏并移除涟漪\n * @param $wave\n */\n\n\nfunction removeRipple($wave) {\n if (!$wave.length || $wave.data('_ripple_wave_removed')) {\n return;\n }\n\n $wave.data('_ripple_wave_removed', true);\n let removeTimer = setTimeout(() => $wave.remove(), 400);\n const translate = $wave.data('_ripple_wave_translate');\n $wave.addClass('mdui-ripple-wave-fill').transform(translate.replace('scale(1)', 'scale(1.01)')).transitionEnd(() => {\n clearTimeout(removeTimer);\n $wave.addClass('mdui-ripple-wave-out').transform(translate.replace('scale(1)', 'scale(1.01)'));\n removeTimer = setTimeout(() => $wave.remove(), 700);\n setTimeout(() => {\n $wave.transitionEnd(() => {\n clearTimeout(removeTimer);\n $wave.remove();\n });\n }, 0);\n });\n}\n/**\n * 隐藏涟漪动画\n * @param this\n */\n\n\nfunction hide() {\n const $ripple = $(this);\n $ripple.children('.mdui-ripple-wave').each((_, wave) => {\n removeRipple($(wave));\n });\n $ripple.off(`${moveEvent} ${endEvent} ${cancelEvent}`, hide);\n}\n/**\n * 显示涟漪,并绑定 touchend 等事件\n * @param event\n */\n\n\nfunction showRipple(event) {\n if (!isAllow(event)) {\n return;\n }\n\n register(event); // Chrome 59 点击滚动条时,会在 document 上触发事件\n\n if (event.target === document) {\n return;\n }\n\n const $target = $(event.target); // 获取含 .mdui-ripple 类的元素\n\n const $ripple = $target.hasClass('mdui-ripple') ? $target : $target.parents('.mdui-ripple').first();\n\n if (!$ripple.length) {\n return;\n } // 禁用状态的元素上不产生涟漪效果\n\n\n if ($ripple.prop('disabled') || !isUndefined($ripple.attr('disabled'))) {\n return;\n }\n\n if (event.type === 'touchstart') {\n let hidden = false; // touchstart 触发指定时间后开始涟漪动画,避免手指滑动时也触发涟漪\n\n let timer = setTimeout(() => {\n timer = 0;\n show(event, $ripple);\n }, 200);\n\n const hideRipple = () => {\n // 如果手指没有移动,且涟漪动画还没有开始,则开始涟漪动画\n if (timer) {\n clearTimeout(timer);\n timer = 0;\n show(event, $ripple);\n }\n\n if (!hidden) {\n hidden = true;\n hide.call($ripple);\n }\n }; // 手指移动后,移除涟漪动画\n\n\n const touchMove = () => {\n if (timer) {\n clearTimeout(timer);\n timer = 0;\n }\n\n hideRipple();\n };\n\n $ripple.on('touchmove', touchMove).on('touchend touchcancel', hideRipple);\n } else {\n show(event, $ripple);\n $ripple.on(`${moveEvent} ${endEvent} ${cancelEvent}`, hide);\n }\n}\n\n$(() => {\n $document.on(startEvent, showRipple).on(unlockEvent, register);\n});","import $ from 'mdui.jq/es/$';\nimport extend from 'mdui.jq/es/functions/extend';\nimport 'mdui.jq/es/methods/addClass';\nimport 'mdui.jq/es/methods/appendTo';\nimport 'mdui.jq/es/methods/attr';\nimport 'mdui.jq/es/methods/each';\nimport 'mdui.jq/es/methods/find';\nimport 'mdui.jq/es/methods/is';\nimport 'mdui.jq/es/methods/on';\nimport 'mdui.jq/es/methods/outerHeight';\nimport 'mdui.jq/es/methods/parent';\nimport 'mdui.jq/es/methods/parents';\nimport 'mdui.jq/es/methods/remove';\nimport 'mdui.jq/es/methods/removeClass';\nimport 'mdui.jq/es/methods/text';\nimport 'mdui.jq/es/methods/trigger';\nimport 'mdui.jq/es/methods/val';\nimport { isUndefined } from 'mdui.jq/es/utils';\nimport mdui from '../../mdui';\nimport '../../global/mutation';\nimport { $document } from '../../utils/dom';\nconst defaultData = {\n reInit: false,\n domLoadedEvent: false\n};\n/**\n * 输入框事件\n * @param event\n * @param data\n */\n\nfunction inputEvent(event, data = {}) {\n data = extend({}, defaultData, data);\n const input = event.target;\n const $input = $(input);\n const eventType = event.type;\n const value = $input.val(); // 文本框类型\n\n const inputType = $input.attr('type') || '';\n\n if (['checkbox', 'button', 'submit', 'range', 'radio', 'image'].indexOf(inputType) > -1) {\n return;\n }\n\n const $textfield = $input.parent('.mdui-textfield'); // 输入框是否聚焦\n\n if (eventType === 'focus') {\n $textfield.addClass('mdui-textfield-focus');\n }\n\n if (eventType === 'blur') {\n $textfield.removeClass('mdui-textfield-focus');\n } // 输入框是否为空\n\n\n if (eventType === 'blur' || eventType === 'input') {\n value ? $textfield.addClass('mdui-textfield-not-empty') : $textfield.removeClass('mdui-textfield-not-empty');\n } // 输入框是否禁用\n\n\n input.disabled ? $textfield.addClass('mdui-textfield-disabled') : $textfield.removeClass('mdui-textfield-disabled'); // 表单验证\n\n if ((eventType === 'input' || eventType === 'blur') && !data.domLoadedEvent && input.validity) {\n input.validity.valid ? $textfield.removeClass('mdui-textfield-invalid-html5') : $textfield.addClass('mdui-textfield-invalid-html5');\n } // textarea 高度自动调整\n\n\n if ($input.is('textarea')) {\n // IE bug:textarea 的值仅为多个换行,不含其他内容时,textarea 的高度不准确\n // 此时,在计算高度前,在值的开头加入一个空格,计算完后,移除空格\n const inputValue = value;\n let hasExtraSpace = false;\n\n if (inputValue.replace(/[\\r\\n]/g, '') === '') {\n $input.val(' ' + inputValue);\n hasExtraSpace = true;\n } // 设置 textarea 高度\n\n\n $input.outerHeight('');\n const height = $input.outerHeight();\n const scrollHeight = input.scrollHeight;\n\n if (scrollHeight > height) {\n $input.outerHeight(scrollHeight);\n } // 计算完,还原 textarea 的值\n\n\n if (hasExtraSpace) {\n $input.val(inputValue);\n }\n } // 实时字数统计\n\n\n if (data.reInit) {\n $textfield.find('.mdui-textfield-counter').remove();\n }\n\n const maxLength = $input.attr('maxlength');\n\n if (maxLength) {\n if (data.reInit || data.domLoadedEvent) {\n $('
' + ` / ${maxLength}` + '
').appendTo($textfield);\n }\n\n $textfield.find('.mdui-textfield-counter-inputed').text(value.length.toString());\n } // 含 帮助文本、错误提示、字数统计 时,增加文本框底部内边距\n\n\n if ($textfield.find('.mdui-textfield-helper').length || $textfield.find('.mdui-textfield-error').length || maxLength) {\n $textfield.addClass('mdui-textfield-has-bottom');\n }\n}\n\n$(() => {\n // 绑定事件\n $document.on('input focus blur', '.mdui-textfield-input', {\n useCapture: true\n }, inputEvent); // 可展开文本框展开\n\n $document.on('click', '.mdui-textfield-expandable .mdui-textfield-icon', function () {\n $(this).parents('.mdui-textfield').addClass('mdui-textfield-expanded').find('.mdui-textfield-input')[0].focus();\n }); // 可展开文本框关闭\n\n $document.on('click', '.mdui-textfield-expanded .mdui-textfield-close', function () {\n $(this).parents('.mdui-textfield').removeClass('mdui-textfield-expanded').find('.mdui-textfield-input').val('');\n });\n /**\n * 初始化文本框\n */\n\n mdui.mutation('.mdui-textfield', function () {\n $(this).find('.mdui-textfield-input').trigger('input', {\n domLoadedEvent: true\n });\n });\n});\n\nmdui.updateTextFields = function (selector) {\n const $elements = isUndefined(selector) ? $('.mdui-textfield') : $(selector);\n $elements.each((_, element) => {\n $(element).find('.mdui-textfield-input').trigger('input', {\n reInit: true\n });\n });\n};","import $ from 'mdui.jq/es/$';\nimport mdui from '../../mdui';\nimport '../../global/mutation';\nimport '../headroom';\n$(() => {\n // 滚动时隐藏应用栏\n mdui.mutation('.mdui-appbar-scroll-hide', function () {\n new mdui.Headroom(this);\n }); // 滚动时只隐藏应用栏中的工具栏\n\n mdui.mutation('.mdui-appbar-scroll-toolbar-hide', function () {\n new mdui.Headroom(this, {\n pinnedClass: 'mdui-headroom-pinned-toolbar',\n unpinnedClass: 'mdui-headroom-unpinned-toolbar'\n });\n });\n});","import $ from '../$';\nimport './each';\n\n$.fn.hide = function () {\n return this.each(function () {\n this.style.display = 'none';\n });\n};","import $ from '../$';\nimport { isString } from '../utils';\nimport './children';\nimport './eq';\nimport './get';\nimport './parent';\n\n$.fn.index = function (selector) {\n if (!arguments.length) {\n return this.eq(0).parent().children().get().indexOf(this[0]);\n }\n\n if (isString(selector)) {\n return $(selector).get().indexOf(this[0]);\n }\n\n return this.get().indexOf($(selector)[0]);\n};","import $ from 'mdui.jq/es/$';\nimport { isNull } from 'mdui.jq/es/utils';\n\n$.throttle = function (fn, delay = 16) {\n let timer = null;\n return function (...args) {\n if (isNull(timer)) {\n timer = setTimeout(() => {\n fn.apply(this, args);\n timer = null;\n }, delay);\n }\n };\n};","import $ from 'mdui.jq/es/$';\nimport extend from 'mdui.jq/es/functions/extend';\nimport 'mdui.jq/es/methods/addClass';\nimport 'mdui.jq/es/methods/appendTo';\nimport 'mdui.jq/es/methods/attr';\nimport 'mdui.jq/es/methods/children';\nimport 'mdui.jq/es/methods/css';\nimport 'mdui.jq/es/methods/each';\nimport 'mdui.jq/es/methods/eq';\nimport 'mdui.jq/es/methods/first';\nimport 'mdui.jq/es/methods/get';\nimport 'mdui.jq/es/methods/hasClass';\nimport 'mdui.jq/es/methods/hide';\nimport 'mdui.jq/es/methods/index';\nimport 'mdui.jq/es/methods/innerWidth';\nimport 'mdui.jq/es/methods/offset';\nimport 'mdui.jq/es/methods/on';\nimport 'mdui.jq/es/methods/removeClass';\nimport 'mdui.jq/es/methods/show';\nimport { isNumber } from 'mdui.jq/es/utils';\nimport mdui from '../../mdui';\nimport '../../jq_extends/static/throttle';\nimport { componentEvent } from '../../utils/componentEvent';\nimport { $window } from '../../utils/dom';\nconst DEFAULT_OPTIONS = {\n trigger: 'click',\n loop: false\n};\n\nclass Tab {\n constructor(selector, options = {}) {\n /**\n * 配置参数\n */\n this.options = extend({}, DEFAULT_OPTIONS);\n /**\n * 当前激活的 tab 的索引号。为 -1 时表示没有激活的选项卡,或不存在选项卡\n */\n\n this.activeIndex = -1;\n this.$element = $(selector).first();\n extend(this.options, options);\n this.$tabs = this.$element.children('a');\n this.$indicator = $('
').appendTo(this.$element); // 根据 url hash 获取默认激活的选项卡\n\n const hash = window.location.hash;\n\n if (hash) {\n this.$tabs.each((index, tab) => {\n if ($(tab).attr('href') === hash) {\n this.activeIndex = index;\n return false;\n }\n\n return true;\n });\n } // 含 .mdui-tab-active 的元素默认激活\n\n\n if (this.activeIndex === -1) {\n this.$tabs.each((index, tab) => {\n if ($(tab).hasClass('mdui-tab-active')) {\n this.activeIndex = index;\n return false;\n }\n\n return true;\n });\n } // 存在选项卡时,默认激活第一个选项卡\n\n\n if (this.$tabs.length && this.activeIndex === -1) {\n this.activeIndex = 0;\n } // 设置激活状态选项卡\n\n\n this.setActive(); // 监听窗口大小变化事件,调整指示器位置\n\n $window.on('resize', $.throttle(() => this.setIndicatorPosition(), 100)); // 监听点击选项卡事件\n\n this.$tabs.each((_, tab) => {\n this.bindTabEvent(tab);\n });\n }\n /**\n * 指定选项卡是否已禁用\n * @param $tab\n */\n\n\n isDisabled($tab) {\n return $tab.attr('disabled') !== undefined;\n }\n /**\n * 绑定在 Tab 上点击或悬浮的事件\n * @param tab\n */\n\n\n bindTabEvent(tab) {\n const $tab = $(tab); // 点击或鼠标移入触发的事件\n\n const clickEvent = () => {\n // 禁用状态的选项卡无法选中\n if (this.isDisabled($tab)) {\n return false;\n }\n\n this.activeIndex = this.$tabs.index(tab);\n this.setActive();\n }; // 无论 trigger 是 click 还是 hover,都会响应 click 事件\n\n\n $tab.on('click', clickEvent); // trigger 为 hover 时,额外响应 mouseenter 事件\n\n if (this.options.trigger === 'hover') {\n $tab.on('mouseenter', clickEvent);\n } // 阻止链接的默认点击动作\n\n\n $tab.on('click', () => {\n if (($tab.attr('href') || '').indexOf('#') === 0) {\n return false;\n }\n });\n }\n /**\n * 触发组件事件\n * @param name\n * @param $element\n * @param parameters\n */\n\n\n triggerEvent(name, $element, parameters = {}) {\n componentEvent(name, 'tab', $element, this, parameters);\n }\n /**\n * 设置激活状态的选项卡\n */\n\n\n setActive() {\n this.$tabs.each((index, tab) => {\n const $tab = $(tab);\n const targetId = $tab.attr('href') || ''; // 设置选项卡激活状态\n\n if (index === this.activeIndex && !this.isDisabled($tab)) {\n if (!$tab.hasClass('mdui-tab-active')) {\n this.triggerEvent('change', this.$element, {\n index: this.activeIndex,\n id: targetId.substr(1)\n });\n this.triggerEvent('show', $tab);\n $tab.addClass('mdui-tab-active');\n }\n\n $(targetId).show();\n this.setIndicatorPosition();\n } else {\n $tab.removeClass('mdui-tab-active');\n $(targetId).hide();\n }\n });\n }\n /**\n * 设置选项卡指示器的位置\n */\n\n\n setIndicatorPosition() {\n // 选项卡数量为 0 时,不显示指示器\n if (this.activeIndex === -1) {\n this.$indicator.css({\n left: 0,\n width: 0\n });\n return;\n }\n\n const $activeTab = this.$tabs.eq(this.activeIndex);\n\n if (this.isDisabled($activeTab)) {\n return;\n }\n\n const activeTabOffset = $activeTab.offset();\n this.$indicator.css({\n left: `${activeTabOffset.left + this.$element[0].scrollLeft - this.$element[0].getBoundingClientRect().left}px`,\n width: `${$activeTab.innerWidth()}px`\n });\n }\n /**\n * 切换到下一个选项卡\n */\n\n\n next() {\n if (this.activeIndex === -1) {\n return;\n }\n\n if (this.$tabs.length > this.activeIndex + 1) {\n this.activeIndex++;\n } else if (this.options.loop) {\n this.activeIndex = 0;\n }\n\n this.setActive();\n }\n /**\n * 切换到上一个选项卡\n */\n\n\n prev() {\n if (this.activeIndex === -1) {\n return;\n }\n\n if (this.activeIndex > 0) {\n this.activeIndex--;\n } else if (this.options.loop) {\n this.activeIndex = this.$tabs.length - 1;\n }\n\n this.setActive();\n }\n /**\n * 显示指定索引号、或指定id的选项卡\n * @param index 索引号、或id\n */\n\n\n show(index) {\n if (this.activeIndex === -1) {\n return;\n }\n\n if (isNumber(index)) {\n this.activeIndex = index;\n } else {\n this.$tabs.each((i, tab) => {\n if (tab.id === index) {\n this.activeIndex = i;\n return false;\n }\n });\n }\n\n this.setActive();\n }\n /**\n * 在父元素的宽度变化时,需要调用该方法重新调整指示器位置\n * 在添加或删除选项卡时,需要调用该方法\n */\n\n\n handleUpdate() {\n const $oldTabs = this.$tabs; // 旧的 tabs JQ对象\n\n const $newTabs = this.$element.children('a'); // 新的 tabs JQ对象\n\n const oldTabsElement = $oldTabs.get(); // 旧的 tabs 元素数组\n\n const newTabsElement = $newTabs.get(); // 新的 tabs 元素数组\n\n if (!$newTabs.length) {\n this.activeIndex = -1;\n this.$tabs = $newTabs;\n this.setIndicatorPosition();\n return;\n } // 重新遍历选项卡,找出新增的选项卡\n\n\n $newTabs.each((index, tab) => {\n // 有新增的选项卡\n if (oldTabsElement.indexOf(tab) < 0) {\n this.bindTabEvent(tab);\n\n if (this.activeIndex === -1) {\n this.activeIndex = 0;\n } else if (index <= this.activeIndex) {\n this.activeIndex++;\n }\n }\n }); // 找出被移除的选项卡\n\n $oldTabs.each((index, tab) => {\n // 有被移除的选项卡\n if (newTabsElement.indexOf(tab) < 0) {\n if (index < this.activeIndex) {\n this.activeIndex--;\n } else if (index === this.activeIndex) {\n this.activeIndex = 0;\n }\n }\n });\n this.$tabs = $newTabs;\n this.setActive();\n }\n\n}\n\nmdui.Tab = Tab;","import $ from 'mdui.jq/es/$';\nimport 'mdui.jq/es/methods/attr';\n/**\n * 解析 DATA API 参数\n * @param element 元素\n * @param name 属性名\n */\n\nfunction parseOptions(element, name) {\n const attr = $(element).attr(name);\n\n if (!attr) {\n return {};\n }\n\n return new Function('', `var json = ${attr}; return JSON.parse(JSON.stringify(json));`)();\n}\n\nexport { parseOptions };","import $ from 'mdui.jq/es/$';\nimport mdui from '../../mdui';\nimport '../../global/mutation';\nimport { parseOptions } from '../../utils/parseOptions';\nimport './index';\nconst customAttr = 'mdui-tab';\n$(() => {\n mdui.mutation(`[${customAttr}]`, function () {\n new mdui.Tab(this, parseOptions(this, customAttr));\n });\n});","import $ from '../$';\nimport './on';\n\n$.fn.one = function (types, selector, data, callback) {\n // @ts-ignore\n return this.on(types, selector, data, callback, true);\n};","/**\n * 在桌面设备上默认显示抽屉栏,不显示遮罩层\n * 在手机和平板设备上默认不显示抽屉栏,始终显示遮罩层,且覆盖导航栏\n */\nimport $ from 'mdui.jq/es/$';\nimport extend from 'mdui.jq/es/functions/extend';\nimport 'mdui.jq/es/methods/addClass';\nimport 'mdui.jq/es/methods/each';\nimport 'mdui.jq/es/methods/find';\nimport 'mdui.jq/es/methods/first';\nimport 'mdui.jq/es/methods/hasClass';\nimport 'mdui.jq/es/methods/off';\nimport 'mdui.jq/es/methods/on';\nimport 'mdui.jq/es/methods/one';\nimport 'mdui.jq/es/methods/removeClass';\nimport 'mdui.jq/es/methods/width';\nimport mdui from '../../mdui';\nimport '../../jq_extends/methods/transitionEnd';\nimport '../../jq_extends/static/hideOverlay';\nimport '../../jq_extends/static/lockScreen';\nimport '../../jq_extends/static/showOverlay';\nimport '../../jq_extends/static/throttle';\nimport '../../jq_extends/static/unlockScreen';\nimport { componentEvent } from '../../utils/componentEvent';\nimport { $window } from '../../utils/dom';\nconst DEFAULT_OPTIONS = {\n overlay: false,\n swipe: false\n};\n\nclass Drawer {\n constructor(selector, options = {}) {\n /**\n * 配置参数\n */\n this.options = extend({}, DEFAULT_OPTIONS);\n /**\n * 当前是否显示着遮罩层\n */\n\n this.overlay = false;\n this.$element = $(selector).first();\n extend(this.options, options);\n this.position = this.$element.hasClass('mdui-drawer-right') ? 'right' : 'left';\n\n if (this.$element.hasClass('mdui-drawer-close')) {\n this.state = 'closed';\n } else if (this.$element.hasClass('mdui-drawer-open')) {\n this.state = 'opened';\n } else if (this.isDesktop()) {\n this.state = 'opened';\n } else {\n this.state = 'closed';\n } // 浏览器窗口大小调整时\n\n\n $window.on('resize', $.throttle(() => {\n if (this.isDesktop()) {\n // 由手机平板切换到桌面时\n // 如果显示着遮罩,则隐藏遮罩\n if (this.overlay && !this.options.overlay) {\n $.hideOverlay();\n this.overlay = false;\n $.unlockScreen();\n } // 没有强制关闭,则状态为打开状态\n\n\n if (!this.$element.hasClass('mdui-drawer-close')) {\n this.state = 'opened';\n }\n } else if (!this.overlay && this.state === 'opened') {\n // 由桌面切换到手机平板时。如果抽屉栏是打开着的且没有遮罩层,则关闭抽屉栏\n if (this.$element.hasClass('mdui-drawer-open')) {\n $.showOverlay();\n this.overlay = true;\n $.lockScreen();\n $('.mdui-overlay').one('click', () => this.close());\n } else {\n this.state = 'closed';\n }\n }\n }, 100)); // 绑定关闭按钮事件\n\n this.$element.find('[mdui-drawer-close]').each((_, close) => {\n $(close).on('click', () => this.close());\n });\n this.swipeSupport();\n }\n /**\n * 是否是桌面设备\n */\n\n\n isDesktop() {\n return $window.width() >= 1024;\n }\n /**\n * 滑动手势支持\n */\n\n\n swipeSupport() {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const that = this; // 抽屉栏滑动手势控制\n\n let openNavEventHandler;\n let touchStartX;\n let touchStartY;\n let swipeStartX;\n let swiping = null;\n let maybeSwiping = false;\n const $body = $('body'); // 手势触发的范围\n\n const swipeAreaWidth = 24;\n\n function setPosition(translateX) {\n const rtlTranslateMultiplier = that.position === 'right' ? -1 : 1;\n const transformCSS = `translate(${-1 * rtlTranslateMultiplier * translateX}px, 0) !important;`;\n const transitionCSS = 'initial !important;';\n that.$element.css('cssText', `transform: ${transformCSS}; transition: ${transitionCSS};`);\n }\n\n function cleanPosition() {\n that.$element[0].style.transform = '';\n that.$element[0].style.webkitTransform = '';\n that.$element[0].style.transition = '';\n that.$element[0].style.webkitTransition = '';\n }\n\n function getMaxTranslateX() {\n return that.$element.width() + 10;\n }\n\n function getTranslateX(currentX) {\n return Math.min(Math.max(swiping === 'closing' ? swipeStartX - currentX : getMaxTranslateX() + swipeStartX - currentX, 0), getMaxTranslateX());\n }\n\n function onBodyTouchEnd(event) {\n if (swiping) {\n let touchX = event.changedTouches[0].pageX;\n\n if (that.position === 'right') {\n touchX = $body.width() - touchX;\n }\n\n const translateRatio = getTranslateX(touchX) / getMaxTranslateX();\n maybeSwiping = false;\n const swipingState = swiping;\n swiping = null;\n\n if (swipingState === 'opening') {\n if (translateRatio < 0.92) {\n cleanPosition();\n that.open();\n } else {\n cleanPosition();\n }\n } else {\n if (translateRatio > 0.08) {\n cleanPosition();\n that.close();\n } else {\n cleanPosition();\n }\n }\n\n $.unlockScreen();\n } else {\n maybeSwiping = false;\n }\n\n $body.off({\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n touchmove: onBodyTouchMove,\n touchend: onBodyTouchEnd,\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n touchcancel: onBodyTouchMove\n });\n }\n\n function onBodyTouchMove(event) {\n let touchX = event.touches[0].pageX;\n\n if (that.position === 'right') {\n touchX = $body.width() - touchX;\n }\n\n const touchY = event.touches[0].pageY;\n\n if (swiping) {\n setPosition(getTranslateX(touchX));\n } else if (maybeSwiping) {\n const dXAbs = Math.abs(touchX - touchStartX);\n const dYAbs = Math.abs(touchY - touchStartY);\n const threshold = 8;\n\n if (dXAbs > threshold && dYAbs <= threshold) {\n swipeStartX = touchX;\n swiping = that.state === 'opened' ? 'closing' : 'opening';\n $.lockScreen();\n setPosition(getTranslateX(touchX));\n } else if (dXAbs <= threshold && dYAbs > threshold) {\n onBodyTouchEnd();\n }\n }\n }\n\n function onBodyTouchStart(event) {\n touchStartX = event.touches[0].pageX;\n\n if (that.position === 'right') {\n touchStartX = $body.width() - touchStartX;\n }\n\n touchStartY = event.touches[0].pageY;\n\n if (that.state !== 'opened') {\n if (touchStartX > swipeAreaWidth || openNavEventHandler !== onBodyTouchStart) {\n return;\n }\n }\n\n maybeSwiping = true;\n $body.on({\n touchmove: onBodyTouchMove,\n touchend: onBodyTouchEnd,\n touchcancel: onBodyTouchMove\n });\n }\n\n function enableSwipeHandling() {\n if (!openNavEventHandler) {\n $body.on('touchstart', onBodyTouchStart);\n openNavEventHandler = onBodyTouchStart;\n }\n }\n\n if (this.options.swipe) {\n enableSwipeHandling();\n }\n }\n /**\n * 触发组件事件\n * @param name\n */\n\n\n triggerEvent(name) {\n componentEvent(name, 'drawer', this.$element, this);\n }\n /**\n * 动画结束回调\n */\n\n\n transitionEnd() {\n if (this.$element.hasClass('mdui-drawer-open')) {\n this.state = 'opened';\n this.triggerEvent('opened');\n } else {\n this.state = 'closed';\n this.triggerEvent('closed');\n }\n }\n /**\n * 是否处于打开状态\n */\n\n\n isOpen() {\n return this.state === 'opening' || this.state === 'opened';\n }\n /**\n * 打开抽屉栏\n */\n\n\n open() {\n if (this.isOpen()) {\n return;\n }\n\n this.state = 'opening';\n this.triggerEvent('open');\n\n if (!this.options.overlay) {\n $('body').addClass(`mdui-drawer-body-${this.position}`);\n }\n\n this.$element.removeClass('mdui-drawer-close').addClass('mdui-drawer-open').transitionEnd(() => this.transitionEnd());\n\n if (!this.isDesktop() || this.options.overlay) {\n this.overlay = true;\n $.showOverlay().one('click', () => this.close());\n $.lockScreen();\n }\n }\n /**\n * 关闭抽屉栏\n */\n\n\n close() {\n if (!this.isOpen()) {\n return;\n }\n\n this.state = 'closing';\n this.triggerEvent('close');\n\n if (!this.options.overlay) {\n $('body').removeClass(`mdui-drawer-body-${this.position}`);\n }\n\n this.$element.addClass('mdui-drawer-close').removeClass('mdui-drawer-open').transitionEnd(() => this.transitionEnd());\n\n if (this.overlay) {\n $.hideOverlay();\n this.overlay = false;\n $.unlockScreen();\n }\n }\n /**\n * 切换抽屉栏打开/关闭状态\n */\n\n\n toggle() {\n this.isOpen() ? this.close() : this.open();\n }\n /**\n * 返回当前抽屉栏的状态。共包含四种状态:`opening`、`opened`、`closing`、`closed`\n */\n\n\n getState() {\n return this.state;\n }\n\n}\n\nmdui.Drawer = Drawer;","import $ from 'mdui.jq/es/$';\nimport 'mdui.jq/es/methods/first';\nimport 'mdui.jq/es/methods/on';\nimport mdui from '../../mdui';\nimport '../../global/mutation';\nimport { parseOptions } from '../../utils/parseOptions';\nimport './index';\nconst customAttr = 'mdui-drawer';\n$(() => {\n mdui.mutation(`[${customAttr}]`, function () {\n const $element = $(this);\n const options = parseOptions(this, customAttr);\n const selector = options.target; // @ts-ignore\n\n delete options.target;\n const $drawer = $(selector).first();\n const instance = new mdui.Drawer($drawer, options);\n $element.on('click', () => instance.toggle());\n });\n});","import $ from '../$';\nimport each from '../functions/each';\nimport { getChildNodesArray, isFunction, isString, isElement } from '../utils';\nimport './each';\nimport './insertAfter';\nimport './insertBefore';\n/**\n * 是否不是 HTML 字符串(包裹在 <> 中)\n * @param target\n */\n\nfunction isPlainText(target) {\n return isString(target) && (target[0] !== '<' || target[target.length - 1] !== '>');\n}\n\neach(['before', 'after'], (nameIndex, name) => {\n $.fn[name] = function (...args) {\n // after 方法,多个参数需要按参数顺序添加到元素后面,所以需要将参数顺序反向处理\n if (nameIndex === 1) {\n args = args.reverse();\n }\n\n return this.each((index, element) => {\n const targets = isFunction(args[0]) ? [args[0].call(element, index, element.innerHTML)] : args;\n each(targets, (_, target) => {\n let $target;\n\n if (isPlainText(target)) {\n $target = $(getChildNodesArray(target, 'div'));\n } else if (index && isElement(target)) {\n $target = $(target.cloneNode(true));\n } else {\n $target = $(target);\n }\n\n $target[nameIndex ? 'insertAfter' : 'insertBefore'](element);\n });\n });\n };\n});","import $ from '../$';\nimport each from '../functions/each';\nimport { isFunction, isString } from '../utils';\nimport './after';\nimport './before';\nimport './clone';\nimport './each';\nimport './map';\nimport './remove';\neach(['prepend', 'append'], (nameIndex, name) => {\n $.fn[name] = function (...args) {\n return this.each((index, element) => {\n const childNodes = element.childNodes;\n const childLength = childNodes.length;\n const child = childLength ? childNodes[nameIndex ? childLength - 1 : 0] : document.createElement('div');\n\n if (!childLength) {\n element.appendChild(child);\n }\n\n let contents = isFunction(args[0]) ? [args[0].call(element, index, element.innerHTML)] : args; // 如果不是字符串,则仅第一个元素使用原始元素,其他的都克隆自第一个元素\n\n if (index) {\n contents = contents.map(content => {\n return isString(content) ? content : $(content).clone();\n });\n }\n\n $(child)[nameIndex ? 'after' : 'before'](...contents);\n\n if (!childLength) {\n element.removeChild(child);\n }\n });\n };\n});","import { isUndefined } from 'mdui.jq/es/utils';\nconst container = {};\n\nfunction queue(name, func) {\n if (isUndefined(container[name])) {\n container[name] = [];\n }\n\n if (isUndefined(func)) {\n return container[name];\n }\n\n container[name].push(func);\n}\n/**\n * 从队列中移除第一个函数,并执行该函数\n * @param name 队列满\n */\n\n\nfunction dequeue(name) {\n if (isUndefined(container[name])) {\n return;\n }\n\n if (!container[name].length) {\n return;\n }\n\n const func = container[name].shift();\n func();\n}\n\nexport { queue, dequeue };","import $ from 'mdui.jq/es/$';\nimport contains from 'mdui.jq/es/functions/contains';\nimport extend from 'mdui.jq/es/functions/extend';\nimport 'mdui.jq/es/methods/addClass';\nimport 'mdui.jq/es/methods/append';\nimport 'mdui.jq/es/methods/children';\nimport 'mdui.jq/es/methods/css';\nimport 'mdui.jq/es/methods/each';\nimport 'mdui.jq/es/methods/find';\nimport 'mdui.jq/es/methods/first';\nimport 'mdui.jq/es/methods/hasClass';\nimport 'mdui.jq/es/methods/height';\nimport 'mdui.jq/es/methods/hide';\nimport 'mdui.jq/es/methods/innerHeight';\nimport 'mdui.jq/es/methods/off';\nimport 'mdui.jq/es/methods/on';\nimport 'mdui.jq/es/methods/remove';\nimport 'mdui.jq/es/methods/removeClass';\nimport 'mdui.jq/es/methods/show';\nimport '../../jq_extends/methods/transitionEnd';\nimport '../../jq_extends/static/hideOverlay';\nimport '../../jq_extends/static/lockScreen';\nimport '../../jq_extends/static/showOverlay';\nimport '../../jq_extends/static/throttle';\nimport '../../jq_extends/static/unlockScreen';\nimport { componentEvent } from '../../utils/componentEvent';\nimport { $window } from '../../utils/dom';\nimport { dequeue, queue } from '../../utils/queue';\nconst DEFAULT_OPTIONS = {\n history: true,\n overlay: true,\n modal: false,\n closeOnEsc: true,\n closeOnCancel: true,\n closeOnConfirm: true,\n destroyOnClosed: false\n};\n/**\n * 当前显示的对话框实例\n */\n\nlet currentInst = null;\n/**\n * 队列名\n */\n\nconst queueName = '_mdui_dialog';\n/**\n * 窗口是否已锁定\n */\n\nlet isLockScreen = false;\n/**\n * 遮罩层元素\n */\n\nlet $overlay;\n\nclass Dialog {\n constructor(selector, options = {}) {\n /**\n * 配置参数\n */\n this.options = extend({}, DEFAULT_OPTIONS);\n /**\n * 当前 dialog 的状态\n */\n\n this.state = 'closed';\n /**\n * dialog 元素是否是动态添加的\n */\n\n this.append = false;\n this.$element = $(selector).first(); // 如果对话框元素没有在当前文档中,则需要添加\n\n if (!contains(document.body, this.$element[0])) {\n this.append = true;\n $('body').append(this.$element);\n }\n\n extend(this.options, options); // 绑定取消按钮事件\n\n this.$element.find('[mdui-dialog-cancel]').each((_, cancel) => {\n $(cancel).on('click', () => {\n this.triggerEvent('cancel');\n\n if (this.options.closeOnCancel) {\n this.close();\n }\n });\n }); // 绑定确认按钮事件\n\n this.$element.find('[mdui-dialog-confirm]').each((_, confirm) => {\n $(confirm).on('click', () => {\n this.triggerEvent('confirm');\n\n if (this.options.closeOnConfirm) {\n this.close();\n }\n });\n }); // 绑定关闭按钮事件\n\n this.$element.find('[mdui-dialog-close]').each((_, close) => {\n $(close).on('click', () => this.close());\n });\n }\n /**\n * 触发组件事件\n * @param name\n */\n\n\n triggerEvent(name) {\n componentEvent(name, 'dialog', this.$element, this);\n }\n /**\n * 窗口宽度变化,或对话框内容变化时,调整对话框位置和对话框内的滚动条\n */\n\n\n readjust() {\n if (!currentInst) {\n return;\n }\n\n const $element = currentInst.$element;\n const $title = $element.children('.mdui-dialog-title');\n const $content = $element.children('.mdui-dialog-content');\n const $actions = $element.children('.mdui-dialog-actions'); // 调整 dialog 的 top 和 height 值\n\n $element.height('');\n $content.height('');\n const elementHeight = $element.height();\n $element.css({\n top: `${($window.height() - elementHeight) / 2}px`,\n height: `${elementHeight}px`\n }); // 调整 mdui-dialog-content 的高度\n\n $content.innerHeight(elementHeight - ($title.innerHeight() || 0) - ($actions.innerHeight() || 0));\n }\n /**\n * hashchange 事件触发时关闭对话框\n */\n\n\n hashchangeEvent() {\n if (window.location.hash.substring(1).indexOf('mdui-dialog') < 0) {\n currentInst.close(true);\n }\n }\n /**\n * 点击遮罩层关闭对话框\n * @param event\n */\n\n\n overlayClick(event) {\n if ($(event.target).hasClass('mdui-overlay') && currentInst) {\n currentInst.close();\n }\n }\n /**\n * 动画结束回调\n */\n\n\n transitionEnd() {\n if (this.$element.hasClass('mdui-dialog-open')) {\n this.state = 'opened';\n this.triggerEvent('opened');\n } else {\n this.state = 'closed';\n this.triggerEvent('closed');\n this.$element.hide(); // 所有对话框都关闭,且当前没有打开的对话框时,解锁屏幕\n\n if (!queue(queueName).length && !currentInst && isLockScreen) {\n $.unlockScreen();\n isLockScreen = false;\n }\n\n $window.off('resize', $.throttle(this.readjust, 100));\n\n if (this.options.destroyOnClosed) {\n this.destroy();\n }\n }\n }\n /**\n * 打开指定对话框\n */\n\n\n doOpen() {\n currentInst = this;\n\n if (!isLockScreen) {\n $.lockScreen();\n isLockScreen = true;\n }\n\n this.$element.show();\n this.readjust();\n $window.on('resize', $.throttle(this.readjust, 100)); // 打开消息框\n\n this.state = 'opening';\n this.triggerEvent('open');\n this.$element.addClass('mdui-dialog-open').transitionEnd(() => this.transitionEnd()); // 不存在遮罩层元素时,添加遮罩层\n\n if (!$overlay) {\n $overlay = $.showOverlay(5100);\n } // 点击遮罩层时是否关闭对话框\n\n\n if (this.options.modal) {\n $overlay.off('click', this.overlayClick);\n } else {\n $overlay.on('click', this.overlayClick);\n } // 是否显示遮罩层,不显示时,把遮罩层背景透明\n\n\n $overlay.css('opacity', this.options.overlay ? '' : 0);\n\n if (this.options.history) {\n // 如果 hash 中原来就有 mdui-dialog,先删除,避免后退历史纪录后仍然有 mdui-dialog 导致无法关闭\n // 包括 mdui-dialog 和 &mdui-dialog 和 ?mdui-dialog\n let hash = window.location.hash.substring(1);\n\n if (hash.indexOf('mdui-dialog') > -1) {\n hash = hash.replace(/[&?]?mdui-dialog/g, '');\n } // 后退按钮关闭对话框\n\n\n if (hash) {\n window.location.hash = `${hash}${hash.indexOf('?') > -1 ? '&' : '?'}mdui-dialog`;\n } else {\n window.location.hash = 'mdui-dialog';\n }\n\n $window.on('hashchange', this.hashchangeEvent);\n }\n }\n /**\n * 当前对话框是否为打开状态\n */\n\n\n isOpen() {\n return this.state === 'opening' || this.state === 'opened';\n }\n /**\n * 打开对话框\n */\n\n\n open() {\n if (this.isOpen()) {\n return;\n } // 如果当前有正在打开或已经打开的对话框,或队列不为空,则先加入队列,等旧对话框开始关闭时再打开\n\n\n if (currentInst && (currentInst.state === 'opening' || currentInst.state === 'opened') || queue(queueName).length) {\n queue(queueName, () => this.doOpen());\n return;\n }\n\n this.doOpen();\n }\n /**\n * 关闭对话框\n */\n\n\n close(historyBack = false) {\n // historyBack 是否需要后退历史纪录,默认为 `false`。该参数仅内部使用\n // 为 `false` 时是通过 js 关闭,需要后退一个历史记录\n // 为 `true` 时是通过后退按钮关闭,不需要后退历史记录\n // setTimeout 的作用是:\n // 当同时关闭一个对话框,并打开另一个对话框时,使打开对话框的操作先执行,以使需要打开的对话框先加入队列\n setTimeout(() => {\n if (!this.isOpen()) {\n return;\n }\n\n currentInst = null;\n this.state = 'closing';\n this.triggerEvent('close'); // 所有对话框都关闭,且当前没有打开的对话框时,隐藏遮罩\n\n if (!queue(queueName).length && $overlay) {\n $.hideOverlay();\n $overlay = null; // 若仍存在遮罩,恢复遮罩的 z-index\n\n $('.mdui-overlay').css('z-index', 2000);\n }\n\n this.$element.removeClass('mdui-dialog-open').transitionEnd(() => this.transitionEnd());\n\n if (this.options.history && !queue(queueName).length) {\n if (!historyBack) {\n window.history.back();\n }\n\n $window.off('hashchange', this.hashchangeEvent);\n } // 关闭旧对话框,打开新对话框。\n // 加一点延迟,仅仅为了视觉效果更好。不加延时也不影响功能\n\n\n setTimeout(() => {\n dequeue(queueName);\n }, 100);\n });\n }\n /**\n * 切换对话框打开/关闭状态\n */\n\n\n toggle() {\n this.isOpen() ? this.close() : this.open();\n }\n /**\n * 获取对话框状态。共包含四种状态:`opening`、`opened`、`closing`、`closed`\n */\n\n\n getState() {\n return this.state;\n }\n /**\n * 销毁对话框\n */\n\n\n destroy() {\n if (this.append) {\n this.$element.remove();\n }\n\n if (!queue(queueName).length && !currentInst) {\n if ($overlay) {\n $.hideOverlay();\n $overlay = null;\n }\n\n if (isLockScreen) {\n $.unlockScreen();\n isLockScreen = false;\n }\n }\n }\n /**\n * 对话框内容变化时,需要调用该方法来调整对话框位置和滚动条高度\n */\n\n\n handleUpdate() {\n this.readjust();\n }\n\n}\n\nexport { currentInst, Dialog };","import mdui from '../../mdui';\nimport 'mdui.jq/es/methods/on';\nimport { $document } from '../../utils/dom';\nimport { currentInst, Dialog } from './class'; // esc 按下时关闭对话框\n\n$document.on('keydown', event => {\n if (currentInst && currentInst.options.closeOnEsc && currentInst.state === 'opened' && event.keyCode === 27) {\n currentInst.close();\n }\n});\nmdui.Dialog = Dialog;","import $ from 'mdui.jq/es/$';\nimport each from 'mdui.jq/es/functions/each';\nimport extend from 'mdui.jq/es/functions/extend';\nimport 'mdui.jq/es/methods/each';\nimport 'mdui.jq/es/methods/find';\nimport 'mdui.jq/es/methods/on';\nimport mdui from '../../mdui';\nimport './index';\nconst DEFAULT_BUTTON = {\n text: '',\n bold: false,\n close: true,\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n onClick: () => {}\n};\nconst DEFAULT_OPTIONS = {\n title: '',\n content: '',\n buttons: [],\n stackedButtons: false,\n cssClass: '',\n history: true,\n overlay: true,\n modal: false,\n closeOnEsc: true,\n destroyOnClosed: true,\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n onOpen: () => {},\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n onOpened: () => {},\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n onClose: () => {},\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n onClosed: () => {}\n};\n\nmdui.dialog = function (options) {\n var _a, _b; // 合并配置参数\n\n\n options = extend({}, DEFAULT_OPTIONS, options);\n each(options.buttons, (i, button) => {\n options.buttons[i] = extend({}, DEFAULT_BUTTON, button);\n }); // 按钮的 HTML\n\n let buttonsHTML = '';\n\n if ((_a = options.buttons) === null || _a === void 0 ? void 0 : _a.length) {\n buttonsHTML = `
`;\n each(options.buttons, (_, button) => {\n buttonsHTML += '${button.text}`;\n });\n buttonsHTML += '
';\n } // Dialog 的 HTML\n\n\n const HTML = `
` + (options.title ? `
${options.title}
` : '') + (options.content ? `
${options.content}
` : '') + buttonsHTML + '
'; // 实例化 Dialog\n\n const instance = new mdui.Dialog(HTML, {\n history: options.history,\n overlay: options.overlay,\n modal: options.modal,\n closeOnEsc: options.closeOnEsc,\n destroyOnClosed: options.destroyOnClosed\n }); // 绑定按钮事件\n\n if ((_b = options.buttons) === null || _b === void 0 ? void 0 : _b.length) {\n instance.$element.find('.mdui-dialog-actions .mdui-btn').each((index, button) => {\n $(button).on('click', () => {\n options.buttons[index].onClick(instance);\n\n if (options.buttons[index].close) {\n instance.close();\n }\n });\n });\n } // 绑定打开关闭事件\n\n\n instance.$element.on('open.mdui.dialog', () => {\n options.onOpen(instance);\n }).on('opened.mdui.dialog', () => {\n options.onOpened(instance);\n }).on('close.mdui.dialog', () => {\n options.onClose(instance);\n }).on('closed.mdui.dialog', () => {\n options.onClosed(instance);\n });\n instance.open();\n return instance;\n};","import extend from 'mdui.jq/es/functions/extend';\nimport { isFunction, isUndefined } from 'mdui.jq/es/utils';\nimport mdui from '../../mdui';\nimport './dialog';\nconst DEFAULT_OPTIONS = {\n confirmText: 'ok',\n cancelText: 'cancel',\n history: true,\n modal: false,\n closeOnEsc: true,\n closeOnCancel: true,\n closeOnConfirm: true\n};\n\nmdui.confirm = function (text, title, onConfirm, onCancel, options) {\n if (isFunction(title)) {\n options = onCancel;\n onCancel = onConfirm;\n onConfirm = title;\n title = '';\n }\n\n if (isUndefined(onConfirm)) {\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n onConfirm = () => {};\n }\n\n if (isUndefined(onCancel)) {\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n onCancel = () => {};\n }\n\n if (isUndefined(options)) {\n options = {};\n }\n\n options = extend({}, DEFAULT_OPTIONS, options);\n return mdui.dialog({\n title: title,\n content: text,\n buttons: [{\n text: options.cancelText,\n bold: false,\n close: options.closeOnCancel,\n onClick: onCancel\n }, {\n text: options.confirmText,\n bold: false,\n close: options.closeOnConfirm,\n onClick: onConfirm\n }],\n cssClass: 'mdui-dialog-confirm',\n history: options.history,\n modal: options.modal,\n closeOnEsc: options.closeOnEsc\n });\n};","import $ from 'mdui.jq/es/$';\nimport 'mdui.jq/es/methods/each';\n\n$.fn.transformOrigin = function (transformOrigin) {\n return this.each(function () {\n this.style.webkitTransformOrigin = transformOrigin;\n this.style.transformOrigin = transformOrigin;\n });\n};","import $ from 'mdui.jq/es/$';\nimport { isUndefined } from 'mdui.jq/es/utils';\nconst GUID = {};\n\n$.guid = function (name) {\n if (!isUndefined(name) && !isUndefined(GUID[name])) {\n return GUID[name];\n }\n\n function s4() {\n return Math.floor((1 + Math.random()) * 0x10000).toString(16).substring(1);\n }\n\n const guid = '_' + s4() + s4() + '-' + s4() + '-' + s4() + '-' + s4() + '-' + s4() + s4() + s4();\n\n if (!isUndefined(name)) {\n GUID[name] = guid;\n }\n\n return guid;\n};","import $ from 'mdui.jq/es/$';\nimport extend from 'mdui.jq/es/functions/extend';\nimport 'mdui.jq/es/methods/addClass';\nimport 'mdui.jq/es/methods/appendTo';\nimport 'mdui.jq/es/methods/attr';\nimport 'mdui.jq/es/methods/css';\nimport 'mdui.jq/es/methods/first';\nimport 'mdui.jq/es/methods/hasClass';\nimport 'mdui.jq/es/methods/height';\nimport 'mdui.jq/es/methods/html';\nimport 'mdui.jq/es/methods/offset';\nimport 'mdui.jq/es/methods/on';\nimport 'mdui.jq/es/methods/removeClass';\nimport 'mdui.jq/es/methods/width';\nimport mdui from '../../mdui';\nimport '../../jq_extends/methods/transformOrigin';\nimport '../../jq_extends/methods/transitionEnd';\nimport '../../jq_extends/static/guid';\nimport { componentEvent } from '../../utils/componentEvent';\nimport { $window } from '../../utils/dom';\nimport { isAllow, register, unlockEvent } from '../../utils/touchHandler';\nconst DEFAULT_OPTIONS = {\n position: 'auto',\n delay: 0,\n content: ''\n};\n\nclass Tooltip {\n constructor(selector, options = {}) {\n /**\n * 配置参数\n */\n this.options = extend({}, DEFAULT_OPTIONS);\n /**\n * 当前 tooltip 的状态\n */\n\n this.state = 'closed';\n /**\n * setTimeout 的返回值\n */\n\n this.timeoutId = null;\n this.$target = $(selector).first();\n extend(this.options, options); // 创建 Tooltip HTML\n\n this.$element = $(`
${this.options.content}
`).appendTo(document.body); // 绑定事件。元素处于 disabled 状态时无法触发鼠标事件,为了统一,把 touch 事件也禁用\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n\n const that = this;\n this.$target.on('touchstart mouseenter', function (event) {\n if (that.isDisabled(this)) {\n return;\n }\n\n if (!isAllow(event)) {\n return;\n }\n\n register(event);\n that.open();\n }).on('touchend mouseleave', function (event) {\n if (that.isDisabled(this)) {\n return;\n }\n\n if (!isAllow(event)) {\n return;\n }\n\n that.close();\n }).on(unlockEvent, function (event) {\n if (that.isDisabled(this)) {\n return;\n }\n\n register(event);\n });\n }\n /**\n * 元素是否已禁用\n * @param element\n */\n\n\n isDisabled(element) {\n return element.disabled || $(element).attr('disabled') !== undefined;\n }\n /**\n * 是否是桌面设备\n */\n\n\n isDesktop() {\n return $window.width() > 1024;\n }\n /**\n * 设置 Tooltip 的位置\n */\n\n\n setPosition() {\n let marginLeft;\n let marginTop; // 触发的元素\n\n const targetProps = this.$target[0].getBoundingClientRect(); // 触发的元素和 Tooltip 之间的距离\n\n const targetMargin = this.isDesktop() ? 14 : 24; // Tooltip 的宽度和高度\n\n const tooltipWidth = this.$element[0].offsetWidth;\n const tooltipHeight = this.$element[0].offsetHeight; // Tooltip 的方向\n\n let position = this.options.position; // 自动判断位置,加 2px,使 Tooltip 距离窗口边框至少有 2px 的间距\n\n if (position === 'auto') {\n if (targetProps.top + targetProps.height + targetMargin + tooltipHeight + 2 < $window.height()) {\n position = 'bottom';\n } else if (targetMargin + tooltipHeight + 2 < targetProps.top) {\n position = 'top';\n } else if (targetMargin + tooltipWidth + 2 < targetProps.left) {\n position = 'left';\n } else if (targetProps.width + targetMargin + tooltipWidth + 2 < $window.width() - targetProps.left) {\n position = 'right';\n } else {\n position = 'bottom';\n }\n } // 设置位置\n\n\n switch (position) {\n case 'bottom':\n marginLeft = -1 * (tooltipWidth / 2);\n marginTop = targetProps.height / 2 + targetMargin;\n this.$element.transformOrigin('top center');\n break;\n\n case 'top':\n marginLeft = -1 * (tooltipWidth / 2);\n marginTop = -1 * (tooltipHeight + targetProps.height / 2 + targetMargin);\n this.$element.transformOrigin('bottom center');\n break;\n\n case 'left':\n marginLeft = -1 * (tooltipWidth + targetProps.width / 2 + targetMargin);\n marginTop = -1 * (tooltipHeight / 2);\n this.$element.transformOrigin('center right');\n break;\n\n case 'right':\n marginLeft = targetProps.width / 2 + targetMargin;\n marginTop = -1 * (tooltipHeight / 2);\n this.$element.transformOrigin('center left');\n break;\n }\n\n const targetOffset = this.$target.offset();\n this.$element.css({\n top: `${targetOffset.top + targetProps.height / 2}px`,\n left: `${targetOffset.left + targetProps.width / 2}px`,\n 'margin-left': `${marginLeft}px`,\n 'margin-top': `${marginTop}px`\n });\n }\n /**\n * 触发组件事件\n * @param name\n */\n\n\n triggerEvent(name) {\n componentEvent(name, 'tooltip', this.$target, this);\n }\n /**\n * 动画结束回调\n */\n\n\n transitionEnd() {\n if (this.$element.hasClass('mdui-tooltip-open')) {\n this.state = 'opened';\n this.triggerEvent('opened');\n } else {\n this.state = 'closed';\n this.triggerEvent('closed');\n }\n }\n /**\n * 当前 tooltip 是否为打开状态\n */\n\n\n isOpen() {\n return this.state === 'opening' || this.state === 'opened';\n }\n /**\n * 执行打开 tooltip\n */\n\n\n doOpen() {\n this.state = 'opening';\n this.triggerEvent('open');\n this.$element.addClass('mdui-tooltip-open').transitionEnd(() => this.transitionEnd());\n }\n /**\n * 打开 Tooltip\n * @param options 允许每次打开时设置不同的参数\n */\n\n\n open(options) {\n if (this.isOpen()) {\n return;\n }\n\n const oldOptions = extend({}, this.options);\n\n if (options) {\n extend(this.options, options);\n } // tooltip 的内容有更新\n\n\n if (oldOptions.content !== this.options.content) {\n this.$element.html(this.options.content);\n }\n\n this.setPosition();\n\n if (this.options.delay) {\n this.timeoutId = setTimeout(() => this.doOpen(), this.options.delay);\n } else {\n this.timeoutId = null;\n this.doOpen();\n }\n }\n /**\n * 关闭 Tooltip\n */\n\n\n close() {\n if (this.timeoutId) {\n clearTimeout(this.timeoutId);\n this.timeoutId = null;\n }\n\n if (!this.isOpen()) {\n return;\n }\n\n this.state = 'closing';\n this.triggerEvent('close');\n this.$element.removeClass('mdui-tooltip-open').transitionEnd(() => this.transitionEnd());\n }\n /**\n * 切换 Tooltip 的打开状态\n */\n\n\n toggle() {\n this.isOpen() ? this.close() : this.open();\n }\n /**\n * 获取 Tooltip 状态。共包含四种状态:`opening`、`opened`、`closing`、`closed`\n */\n\n\n getState() {\n return this.state;\n }\n\n}\n\nmdui.Tooltip = Tooltip;","import $ from 'mdui.jq/es/$';\nimport 'mdui.jq/es/methods/data';\nimport 'mdui.jq/es/methods/on';\nimport mdui from '../../mdui';\nimport { $document } from '../../utils/dom';\nimport { parseOptions } from '../../utils/parseOptions';\nimport './index';\nconst customAttr = 'mdui-tooltip';\nconst dataName = '_mdui_tooltip';\n$(() => {\n // mouseenter 不能冒泡,所以这里用 mouseover 代替\n $document.on('touchstart mouseover', `[${customAttr}]`, function () {\n const $target = $(this);\n let instance = $target.data(dataName);\n\n if (!instance) {\n instance = new mdui.Tooltip(this, parseOptions(this, customAttr));\n $target.data(dataName, instance);\n }\n });\n});","import $ from 'mdui.jq/es/$';\nimport extend from 'mdui.jq/es/functions/extend';\nimport 'mdui.jq/es/methods/addClass';\nimport 'mdui.jq/es/methods/appendTo';\nimport 'mdui.jq/es/methods/find';\nimport 'mdui.jq/es/methods/hasClass';\nimport 'mdui.jq/es/methods/off';\nimport 'mdui.jq/es/methods/on';\nimport 'mdui.jq/es/methods/parents';\nimport 'mdui.jq/es/methods/remove';\nimport { isString } from 'mdui.jq/es/utils';\nimport mdui from '../../mdui';\nimport '../../jq_extends/methods/reflow';\nimport '../../jq_extends/methods/transform';\nimport '../../jq_extends/methods/transitionEnd';\nimport { $document } from '../../utils/dom';\nimport { dequeue, queue } from '../../utils/queue';\nimport { startEvent } from '../../utils/touchHandler';\nconst DEFAULT_OPTIONS = {\n message: '',\n timeout: 4000,\n position: 'bottom',\n buttonText: '',\n buttonColor: '',\n closeOnButtonClick: true,\n closeOnOutsideClick: true,\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n onClick: () => {},\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n onButtonClick: () => {},\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n onOpen: () => {},\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n onOpened: () => {},\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n onClose: () => {},\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n onClosed: () => {}\n};\n/**\n * 当前打开着的 Snackbar\n */\n\nlet currentInst = null;\n/**\n * 队列名\n */\n\nconst queueName = '_mdui_snackbar';\n\nclass Snackbar {\n constructor(options) {\n /**\n * 配置参数\n */\n this.options = extend({}, DEFAULT_OPTIONS);\n /**\n * 当前 Snackbar 的状态\n */\n\n this.state = 'closed';\n /**\n * setTimeout 的 ID\n */\n\n this.timeoutId = null;\n extend(this.options, options); // 按钮颜色\n\n let buttonColorStyle = '';\n let buttonColorClass = '';\n\n if (this.options.buttonColor.indexOf('#') === 0 || this.options.buttonColor.indexOf('rgb') === 0) {\n buttonColorStyle = `style=\"color:${this.options.buttonColor}\"`;\n } else if (this.options.buttonColor !== '') {\n buttonColorClass = `mdui-text-color-${this.options.buttonColor}`;\n } // 添加 HTML\n\n\n this.$element = $('
' + `
${this.options.message}
` + (this.options.buttonText ? `${this.options.buttonText}` : '') + '
').appendTo(document.body); // 设置位置\n\n this.setPosition('close');\n this.$element.reflow().addClass(`mdui-snackbar-${this.options.position}`);\n }\n /**\n * 点击 Snackbar 外面的区域关闭\n * @param event\n */\n\n\n closeOnOutsideClick(event) {\n const $target = $(event.target);\n\n if (!$target.hasClass('mdui-snackbar') && !$target.parents('.mdui-snackbar').length) {\n currentInst.close();\n }\n }\n /**\n * 设置 Snackbar 的位置\n * @param state\n */\n\n\n setPosition(state) {\n const snackbarHeight = this.$element[0].clientHeight;\n const position = this.options.position;\n let translateX;\n let translateY; // translateX\n\n if (position === 'bottom' || position === 'top') {\n translateX = '-50%';\n } else {\n translateX = '0';\n } // translateY\n\n\n if (state === 'open') {\n translateY = '0';\n } else {\n if (position === 'bottom') {\n translateY = snackbarHeight;\n }\n\n if (position === 'top') {\n translateY = -snackbarHeight;\n }\n\n if (position === 'left-top' || position === 'right-top') {\n translateY = -snackbarHeight - 24;\n }\n\n if (position === 'left-bottom' || position === 'right-bottom') {\n translateY = snackbarHeight + 24;\n }\n }\n\n this.$element.transform(`translate(${translateX},${translateY}px`);\n }\n /**\n * 打开 Snackbar\n */\n\n\n open() {\n if (this.state === 'opening' || this.state === 'opened') {\n return;\n } // 如果当前有正在显示的 Snackbar,则先加入队列,等旧 Snackbar 关闭后再打开\n\n\n if (currentInst) {\n queue(queueName, () => this.open());\n return;\n }\n\n currentInst = this; // 开始打开\n\n this.state = 'opening';\n this.options.onOpen(this);\n this.setPosition('open');\n this.$element.transitionEnd(() => {\n if (this.state !== 'opening') {\n return;\n }\n\n this.state = 'opened';\n this.options.onOpened(this); // 有按钮时绑定事件\n\n if (this.options.buttonText) {\n this.$element.find('.mdui-snackbar-action').on('click', () => {\n this.options.onButtonClick(this);\n\n if (this.options.closeOnButtonClick) {\n this.close();\n }\n });\n } // 点击 snackbar 的事件\n\n\n this.$element.on('click', event => {\n if (!$(event.target).hasClass('mdui-snackbar-action')) {\n this.options.onClick(this);\n }\n }); // 点击 Snackbar 外面的区域关闭\n\n if (this.options.closeOnOutsideClick) {\n $document.on(startEvent, this.closeOnOutsideClick);\n } // 超时后自动关闭\n\n\n if (this.options.timeout) {\n this.timeoutId = setTimeout(() => this.close(), this.options.timeout);\n }\n });\n }\n /**\n * 关闭 Snackbar\n */\n\n\n close() {\n if (this.state === 'closing' || this.state === 'closed') {\n return;\n }\n\n if (this.timeoutId) {\n clearTimeout(this.timeoutId);\n }\n\n if (this.options.closeOnOutsideClick) {\n $document.off(startEvent, this.closeOnOutsideClick);\n }\n\n this.state = 'closing';\n this.options.onClose(this);\n this.setPosition('close');\n this.$element.transitionEnd(() => {\n if (this.state !== 'closing') {\n return;\n }\n\n currentInst = null;\n this.state = 'closed';\n this.options.onClosed(this);\n this.$element.remove();\n dequeue(queueName);\n });\n }\n\n}\n\nmdui.snackbar = function (message, options = {}) {\n if (isString(message)) {\n options.message = message;\n } else {\n options = message;\n }\n\n const instance = new Snackbar(options);\n instance.open();\n return instance;\n};","import $ from 'mdui.jq/es/$';\nimport 'mdui.jq/es/methods/each';\nimport 'mdui.jq/es/methods/hasClass';\nimport 'mdui.jq/es/methods/html';\nimport { isUndefined } from 'mdui.jq/es/utils';\nimport mdui from '../../mdui';\nimport '../../global/mutation';\n/**\n * layer 的 HTML 结构\n * @param index\n */\n\nfunction layerHTML(index = false) {\n return `
` + '
' + '
' + '
' + '
' + '
' + '
' + '
' + '
' + '
' + '
';\n}\n/**\n * 填充 HTML\n * @param spinner\n */\n\n\nfunction fillHTML(spinner) {\n const $spinner = $(spinner);\n const layer = $spinner.hasClass('mdui-spinner-colorful') ? layerHTML(1) + layerHTML(2) + layerHTML(3) + layerHTML(4) : layerHTML();\n $spinner.html(layer);\n}\n\n$(() => {\n // 页面加载完后自动填充 HTML 结构\n mdui.mutation('.mdui-spinner', function () {\n fillHTML(this);\n });\n});\n\nmdui.updateSpinners = function (selector) {\n const $elements = isUndefined(selector) ? $('.mdui-spinner') : $(selector);\n $elements.each(function () {\n fillHTML(this);\n });\n};","import $ from 'mdui.jq/es/$';\nimport contains from 'mdui.jq/es/functions/contains';\nimport extend from 'mdui.jq/es/functions/extend';\nimport 'mdui.jq/es/methods/addClass';\nimport 'mdui.jq/es/methods/attr';\nimport 'mdui.jq/es/methods/children';\nimport 'mdui.jq/es/methods/css';\nimport 'mdui.jq/es/methods/data';\nimport 'mdui.jq/es/methods/each';\nimport 'mdui.jq/es/methods/find';\nimport 'mdui.jq/es/methods/first';\nimport 'mdui.jq/es/methods/hasClass';\nimport 'mdui.jq/es/methods/height';\nimport 'mdui.jq/es/methods/is';\nimport 'mdui.jq/es/methods/on';\nimport 'mdui.jq/es/methods/parent';\nimport 'mdui.jq/es/methods/parents';\nimport 'mdui.jq/es/methods/removeClass';\nimport 'mdui.jq/es/methods/width';\nimport mdui from '../../mdui';\nimport '../../jq_extends/methods/transformOrigin';\nimport '../../jq_extends/methods/transitionEnd';\nimport '../../jq_extends/static/throttle';\nimport { componentEvent } from '../../utils/componentEvent';\nimport { $document, $window } from '../../utils/dom';\nconst DEFAULT_OPTIONS = {\n position: 'auto',\n align: 'auto',\n gutter: 16,\n fixed: false,\n covered: 'auto',\n subMenuTrigger: 'hover',\n subMenuDelay: 200\n};\n\nclass Menu {\n constructor(anchorSelector, menuSelector, options = {}) {\n /**\n * 配置参数\n */\n this.options = extend({}, DEFAULT_OPTIONS);\n /**\n * 当前菜单状态\n */\n\n this.state = 'closed';\n this.$anchor = $(anchorSelector).first();\n this.$element = $(menuSelector).first(); // 触发菜单的元素 和 菜单必须是同级的元素,否则菜单可能不能定位\n\n if (!this.$anchor.parent().is(this.$element.parent())) {\n throw new Error('anchorSelector and menuSelector must be siblings');\n }\n\n extend(this.options, options); // 是否是级联菜单\n\n this.isCascade = this.$element.hasClass('mdui-menu-cascade'); // covered 参数处理\n\n this.isCovered = this.options.covered === 'auto' ? !this.isCascade : this.options.covered; // 点击触发菜单切换\n\n this.$anchor.on('click', () => this.toggle()); // 点击菜单外面区域关闭菜单\n\n $document.on('click touchstart', event => {\n const $target = $(event.target);\n\n if (this.isOpen() && !$target.is(this.$element) && !contains(this.$element[0], $target[0]) && !$target.is(this.$anchor) && !contains(this.$anchor[0], $target[0])) {\n this.close();\n }\n }); // 点击不含子菜单的菜单条目关闭菜单\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n\n const that = this;\n $document.on('click', '.mdui-menu-item', function () {\n const $item = $(this);\n\n if (!$item.find('.mdui-menu').length && $item.attr('disabled') === undefined) {\n that.close();\n }\n }); // 绑定点击或鼠标移入含子菜单的条目的事件\n\n this.bindSubMenuEvent(); // 窗口大小变化时,重新调整菜单位置\n\n $window.on('resize', $.throttle(() => this.readjust(), 100));\n }\n /**\n * 是否为打开状态\n */\n\n\n isOpen() {\n return this.state === 'opening' || this.state === 'opened';\n }\n /**\n * 触发组件事件\n * @param name\n */\n\n\n triggerEvent(name) {\n componentEvent(name, 'menu', this.$element, this);\n }\n /**\n * 调整主菜单位置\n */\n\n\n readjust() {\n let menuLeft;\n let menuTop; // 菜单位置和方向\n\n let position;\n let align; // window 窗口的宽度和高度\n\n const windowHeight = $window.height();\n const windowWidth = $window.width(); // 配置参数\n\n const gutter = this.options.gutter;\n const isCovered = this.isCovered;\n const isFixed = this.options.fixed; // 动画方向参数\n\n let transformOriginX;\n let transformOriginY; // 菜单的原始宽度和高度\n\n const menuWidth = this.$element.width();\n const menuHeight = this.$element.height(); // 触发菜单的元素在窗口中的位置\n\n const anchorRect = this.$anchor[0].getBoundingClientRect();\n const anchorTop = anchorRect.top;\n const anchorLeft = anchorRect.left;\n const anchorHeight = anchorRect.height;\n const anchorWidth = anchorRect.width;\n const anchorBottom = windowHeight - anchorTop - anchorHeight;\n const anchorRight = windowWidth - anchorLeft - anchorWidth; // 触发元素相对其拥有定位属性的父元素的位置\n\n const anchorOffsetTop = this.$anchor[0].offsetTop;\n const anchorOffsetLeft = this.$anchor[0].offsetLeft; // 自动判断菜单位置\n\n if (this.options.position === 'auto') {\n if (anchorBottom + (isCovered ? anchorHeight : 0) > menuHeight + gutter) {\n // 判断下方是否放得下菜单\n position = 'bottom';\n } else if (anchorTop + (isCovered ? anchorHeight : 0) > menuHeight + gutter) {\n // 判断上方是否放得下菜单\n position = 'top';\n } else {\n // 上下都放不下,居中显示\n position = 'center';\n }\n } else {\n position = this.options.position;\n } // 自动判断菜单对齐方式\n\n\n if (this.options.align === 'auto') {\n if (anchorRight + anchorWidth > menuWidth + gutter) {\n // 判断右侧是否放得下菜单\n align = 'left';\n } else if (anchorLeft + anchorWidth > menuWidth + gutter) {\n // 判断左侧是否放得下菜单\n align = 'right';\n } else {\n // 左右都放不下,居中显示\n align = 'center';\n }\n } else {\n align = this.options.align;\n } // 设置菜单位置\n\n\n if (position === 'bottom') {\n transformOriginY = '0';\n menuTop = (isCovered ? 0 : anchorHeight) + (isFixed ? anchorTop : anchorOffsetTop);\n } else if (position === 'top') {\n transformOriginY = '100%';\n menuTop = (isCovered ? anchorHeight : 0) + (isFixed ? anchorTop - menuHeight : anchorOffsetTop - menuHeight);\n } else {\n transformOriginY = '50%'; // =====================在窗口中居中\n // 显示的菜单的高度,简单菜单高度不超过窗口高度,若超过了则在菜单内部显示滚动条\n // 级联菜单内部不允许出现滚动条\n\n let menuHeightTemp = menuHeight; // 简单菜单比窗口高时,限制菜单高度\n\n if (!this.isCascade) {\n if (menuHeight + gutter * 2 > windowHeight) {\n menuHeightTemp = windowHeight - gutter * 2;\n this.$element.height(menuHeightTemp);\n }\n }\n\n menuTop = (windowHeight - menuHeightTemp) / 2 + (isFixed ? 0 : anchorOffsetTop - anchorTop);\n }\n\n this.$element.css('top', `${menuTop}px`); // 设置菜单对齐方式\n\n if (align === 'left') {\n transformOriginX = '0';\n menuLeft = isFixed ? anchorLeft : anchorOffsetLeft;\n } else if (align === 'right') {\n transformOriginX = '100%';\n menuLeft = isFixed ? anchorLeft + anchorWidth - menuWidth : anchorOffsetLeft + anchorWidth - menuWidth;\n } else {\n transformOriginX = '50%'; //=======================在窗口中居中\n // 显示的菜单的宽度,菜单宽度不能超过窗口宽度\n\n let menuWidthTemp = menuWidth; // 菜单比窗口宽,限制菜单宽度\n\n if (menuWidth + gutter * 2 > windowWidth) {\n menuWidthTemp = windowWidth - gutter * 2;\n this.$element.width(menuWidthTemp);\n }\n\n menuLeft = (windowWidth - menuWidthTemp) / 2 + (isFixed ? 0 : anchorOffsetLeft - anchorLeft);\n }\n\n this.$element.css('left', `${menuLeft}px`); // 设置菜单动画方向\n\n this.$element.transformOrigin(`${transformOriginX} ${transformOriginY}`);\n }\n /**\n * 调整子菜单的位置\n * @param $submenu\n */\n\n\n readjustSubmenu($submenu) {\n const $item = $submenu.parent('.mdui-menu-item');\n let submenuTop;\n let submenuLeft; // 子菜单位置和方向\n\n let position;\n let align; // window 窗口的宽度和高度\n\n const windowHeight = $window.height();\n const windowWidth = $window.width(); // 动画方向参数\n\n let transformOriginX;\n let transformOriginY; // 子菜单的原始宽度和高度\n\n const submenuWidth = $submenu.width();\n const submenuHeight = $submenu.height(); // 触发子菜单的菜单项的宽度高度\n\n const itemRect = $item[0].getBoundingClientRect();\n const itemWidth = itemRect.width;\n const itemHeight = itemRect.height;\n const itemLeft = itemRect.left;\n const itemTop = itemRect.top; // 判断菜单上下位置\n\n if (windowHeight - itemTop > submenuHeight) {\n // 判断下方是否放得下菜单\n position = 'bottom';\n } else if (itemTop + itemHeight > submenuHeight) {\n // 判断上方是否放得下菜单\n position = 'top';\n } else {\n // 默认放在下方\n position = 'bottom';\n } // 判断菜单左右位置\n\n\n if (windowWidth - itemLeft - itemWidth > submenuWidth) {\n // 判断右侧是否放得下菜单\n align = 'left';\n } else if (itemLeft > submenuWidth) {\n // 判断左侧是否放得下菜单\n align = 'right';\n } else {\n // 默认放在右侧\n align = 'left';\n } // 设置菜单位置\n\n\n if (position === 'bottom') {\n transformOriginY = '0';\n submenuTop = '0';\n } else if (position === 'top') {\n transformOriginY = '100%';\n submenuTop = -submenuHeight + itemHeight;\n }\n\n $submenu.css('top', `${submenuTop}px`); // 设置菜单对齐方式\n\n if (align === 'left') {\n transformOriginX = '0';\n submenuLeft = itemWidth;\n } else if (align === 'right') {\n transformOriginX = '100%';\n submenuLeft = -submenuWidth;\n }\n\n $submenu.css('left', `${submenuLeft}px`); // 设置菜单动画方向\n\n $submenu.transformOrigin(`${transformOriginX} ${transformOriginY}`);\n }\n /**\n * 打开子菜单\n * @param $submenu\n */\n\n\n openSubMenu($submenu) {\n this.readjustSubmenu($submenu);\n $submenu.addClass('mdui-menu-open').parent('.mdui-menu-item').addClass('mdui-menu-item-active');\n }\n /**\n * 关闭子菜单,及其嵌套的子菜单\n * @param $submenu\n */\n\n\n closeSubMenu($submenu) {\n // 关闭子菜单\n $submenu.removeClass('mdui-menu-open').addClass('mdui-menu-closing').transitionEnd(() => $submenu.removeClass('mdui-menu-closing')) // 移除激活状态的样式\n .parent('.mdui-menu-item').removeClass('mdui-menu-item-active'); // 循环关闭嵌套的子菜单\n\n $submenu.find('.mdui-menu').each((_, menu) => {\n const $subSubmenu = $(menu);\n $subSubmenu.removeClass('mdui-menu-open').addClass('mdui-menu-closing').transitionEnd(() => $subSubmenu.removeClass('mdui-menu-closing')).parent('.mdui-menu-item').removeClass('mdui-menu-item-active');\n });\n }\n /**\n * 切换子菜单状态\n * @param $submenu\n */\n\n\n toggleSubMenu($submenu) {\n $submenu.hasClass('mdui-menu-open') ? this.closeSubMenu($submenu) : this.openSubMenu($submenu);\n }\n /**\n * 绑定子菜单事件\n */\n\n\n bindSubMenuEvent() {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const that = this; // 点击打开子菜单\n\n this.$element.on('click', '.mdui-menu-item', function (event) {\n const $item = $(this);\n const $target = $(event.target); // 禁用状态菜单不操作\n\n if ($item.attr('disabled') !== undefined) {\n return;\n } // 没有点击在子菜单的菜单项上时,不操作(点在了子菜单的空白区域、或分隔线上)\n\n\n if ($target.is('.mdui-menu') || $target.is('.mdui-divider')) {\n return;\n } // 阻止冒泡,点击菜单项时只在最后一级的 mdui-menu-item 上生效,不向上冒泡\n\n\n if (!$target.parents('.mdui-menu-item').first().is($item)) {\n return;\n } // 当前菜单的子菜单\n\n\n const $submenu = $item.children('.mdui-menu'); // 先关闭除当前子菜单外的所有同级子菜单\n\n $item.parent('.mdui-menu').children('.mdui-menu-item').each((_, item) => {\n const $tmpSubmenu = $(item).children('.mdui-menu');\n\n if ($tmpSubmenu.length && (!$submenu.length || !$tmpSubmenu.is($submenu))) {\n that.closeSubMenu($tmpSubmenu);\n }\n }); // 切换当前子菜单\n\n if ($submenu.length) {\n that.toggleSubMenu($submenu);\n }\n });\n\n if (this.options.subMenuTrigger === 'hover') {\n // 临时存储 setTimeout 对象\n let timeout = null;\n let timeoutOpen = null;\n this.$element.on('mouseover mouseout', '.mdui-menu-item', function (event) {\n const $item = $(this);\n const eventType = event.type;\n const $relatedTarget = $(event.relatedTarget); // 禁用状态的菜单不操作\n\n if ($item.attr('disabled') !== undefined) {\n return;\n } // 用 mouseover 模拟 mouseenter\n\n\n if (eventType === 'mouseover') {\n if (!$item.is($relatedTarget) && contains($item[0], $relatedTarget[0])) {\n return;\n }\n } // 用 mouseout 模拟 mouseleave\n else if (eventType === 'mouseout') {\n if ($item.is($relatedTarget) || contains($item[0], $relatedTarget[0])) {\n return;\n }\n } // 当前菜单项下的子菜单,未必存在\n\n\n const $submenu = $item.children('.mdui-menu'); // 鼠标移入菜单项时,显示菜单项下的子菜单\n\n if (eventType === 'mouseover') {\n if ($submenu.length) {\n // 当前子菜单准备打开时,如果当前子菜单正准备着关闭,不用再关闭了\n const tmpClose = $submenu.data('timeoutClose.mdui.menu');\n\n if (tmpClose) {\n clearTimeout(tmpClose);\n } // 如果当前子菜单已经打开,不操作\n\n\n if ($submenu.hasClass('mdui-menu-open')) {\n return;\n } // 当前子菜单准备打开时,其他准备打开的子菜单不用再打开了\n\n\n clearTimeout(timeoutOpen); // 准备打开当前子菜单\n\n timeout = timeoutOpen = setTimeout(() => that.openSubMenu($submenu), that.options.subMenuDelay);\n $submenu.data('timeoutOpen.mdui.menu', timeout);\n }\n } // 鼠标移出菜单项时,关闭菜单项下的子菜单\n else if (eventType === 'mouseout') {\n if ($submenu.length) {\n // 鼠标移出菜单项时,如果当前菜单项下的子菜单正准备打开,不用再打开了\n const tmpOpen = $submenu.data('timeoutOpen.mdui.menu');\n\n if (tmpOpen) {\n clearTimeout(tmpOpen);\n } // 准备关闭当前子菜单\n\n\n timeout = setTimeout(() => that.closeSubMenu($submenu), that.options.subMenuDelay);\n $submenu.data('timeoutClose.mdui.menu', timeout);\n }\n }\n });\n }\n }\n /**\n * 动画结束回调\n */\n\n\n transitionEnd() {\n this.$element.removeClass('mdui-menu-closing');\n\n if (this.state === 'opening') {\n this.state = 'opened';\n this.triggerEvent('opened');\n }\n\n if (this.state === 'closing') {\n this.state = 'closed';\n this.triggerEvent('closed'); // 关闭后,恢复菜单样式到默认状态,并恢复 fixed 定位\n\n this.$element.css({\n top: '',\n left: '',\n width: '',\n position: 'fixed'\n });\n }\n }\n /**\n * 切换菜单状态\n */\n\n\n toggle() {\n this.isOpen() ? this.close() : this.open();\n }\n /**\n * 打开菜单\n */\n\n\n open() {\n if (this.isOpen()) {\n return;\n }\n\n this.state = 'opening';\n this.triggerEvent('open');\n this.readjust();\n this.$element // 菜单隐藏状态使用使用 fixed 定位。\n .css('position', this.options.fixed ? 'fixed' : 'absolute').addClass('mdui-menu-open').transitionEnd(() => this.transitionEnd());\n }\n /**\n * 关闭菜单\n */\n\n\n close() {\n if (!this.isOpen()) {\n return;\n }\n\n this.state = 'closing';\n this.triggerEvent('close'); // 菜单开始关闭时,关闭所有子菜单\n\n this.$element.find('.mdui-menu').each((_, submenu) => {\n this.closeSubMenu($(submenu));\n });\n this.$element.removeClass('mdui-menu-open').addClass('mdui-menu-closing').transitionEnd(() => this.transitionEnd());\n }\n\n}\n\nmdui.Menu = Menu;","import $ from 'mdui.jq/es/$';\nimport 'mdui.jq/es/methods/data';\nimport 'mdui.jq/es/methods/on';\nimport mdui from '../../mdui';\nimport { $document } from '../../utils/dom';\nimport { parseOptions } from '../../utils/parseOptions';\nimport './index';\nconst customAttr = 'mdui-menu';\nconst dataName = '_mdui_menu';\n$(() => {\n $document.on('click', `[${customAttr}]`, function () {\n const $this = $(this);\n let instance = $this.data(dataName);\n\n if (!instance) {\n const options = parseOptions(this, customAttr);\n const menuSelector = options.target; // @ts-ignore\n\n delete options.target;\n instance = new mdui.Menu($this, menuSelector, options);\n $this.data(dataName, instance);\n instance.toggle();\n }\n });\n});","// 全局配置参数\nconst globalOptions = {}; // 全局事件名\n\nconst ajaxEvents = {\n ajaxStart: 'start.mdui.ajax',\n ajaxSuccess: 'success.mdui.ajax',\n ajaxError: 'error.mdui.ajax',\n ajaxComplete: 'complete.mdui.ajax'\n};\nexport { globalOptions, ajaxEvents };","import $ from '../$';\nimport '../methods/trigger';\nimport { isString, isUndefined } from '../utils';\nimport each from './each';\nimport extend from './extend';\nimport param from './param';\nimport { ajaxEvents, globalOptions } from './utils/ajax';\n/**\n * 判断此请求方法是否通过查询字符串提交参数\n * @param method 请求方法,大写\n */\n\nfunction isQueryStringData(method) {\n return ['GET', 'HEAD'].indexOf(method) >= 0;\n}\n/**\n * 添加参数到 URL 上,且 URL 中不存在 ? 时,自动把第一个 & 替换为 ?\n * @param url\n * @param query\n */\n\n\nfunction appendQuery(url, query) {\n return `${url}&${query}`.replace(/[&?]{1,2}/, '?');\n}\n/**\n * 合并请求参数,参数优先级:options > globalOptions > defaults\n * @param options\n */\n\n\nfunction mergeOptions(options) {\n // 默认参数\n const defaults = {\n url: '',\n method: 'GET',\n data: '',\n processData: true,\n async: true,\n cache: true,\n username: '',\n password: '',\n headers: {},\n xhrFields: {},\n statusCode: {},\n dataType: 'text',\n contentType: 'application/x-www-form-urlencoded',\n timeout: 0,\n global: true\n }; // globalOptions 中的回调函数不合并\n\n each(globalOptions, (key, value) => {\n const callbacks = ['beforeSend', 'success', 'error', 'complete', 'statusCode']; // @ts-ignore\n\n if (callbacks.indexOf(key) < 0 && !isUndefined(value)) {\n defaults[key] = value;\n }\n });\n return extend({}, defaults, options);\n}\n/**\n * 发送 ajax 请求\n * @param options\n * @example\n```js\najax({\n method: \"POST\",\n url: \"some.php\",\n data: { name: \"John\", location: \"Boston\" }\n}).then(function( msg ) {\n alert( \"Data Saved: \" + msg );\n});\n```\n */\n\n\nfunction ajax(options) {\n // 是否已取消请求\n let isCanceled = false; // 事件参数\n\n const eventParams = {}; // 参数合并\n\n const mergedOptions = mergeOptions(options);\n let url = mergedOptions.url || window.location.toString();\n const method = mergedOptions.method.toUpperCase();\n let data = mergedOptions.data;\n const processData = mergedOptions.processData;\n const async = mergedOptions.async;\n const cache = mergedOptions.cache;\n const username = mergedOptions.username;\n const password = mergedOptions.password;\n const headers = mergedOptions.headers;\n const xhrFields = mergedOptions.xhrFields;\n const statusCode = mergedOptions.statusCode;\n const dataType = mergedOptions.dataType;\n const contentType = mergedOptions.contentType;\n const timeout = mergedOptions.timeout;\n const global = mergedOptions.global; // 需要发送的数据\n // GET/HEAD 请求和 processData 为 true 时,转换为查询字符串格式,特殊格式不转换\n\n if (data && (isQueryStringData(method) || processData) && !isString(data) && !(data instanceof ArrayBuffer) && !(data instanceof Blob) && !(data instanceof Document) && !(data instanceof FormData)) {\n data = param(data);\n } // 对于 GET、HEAD 类型的请求,把 data 数据添加到 URL 中\n\n\n if (data && isQueryStringData(method)) {\n // 查询字符串拼接到 URL 中\n url = appendQuery(url, data);\n data = null;\n }\n /**\n * 触发事件和回调函数\n * @param event\n * @param params\n * @param callback\n * @param args\n */\n\n\n function trigger(event, params, callback, ...args) {\n // 触发全局事件\n if (global) {\n $(document).trigger(event, params);\n } // 触发 ajax 回调和事件\n\n\n let result1;\n let result2;\n\n if (callback) {\n // 全局回调\n if (callback in globalOptions) {\n // @ts-ignore\n result1 = globalOptions[callback](...args);\n } // 自定义回调\n\n\n if (mergedOptions[callback]) {\n // @ts-ignore\n result2 = mergedOptions[callback](...args);\n } // beforeSend 回调返回 false 时取消 ajax 请求\n\n\n if (callback === 'beforeSend' && (result1 === false || result2 === false)) {\n isCanceled = true;\n }\n }\n } // XMLHttpRequest 请求\n\n\n function XHR() {\n let textStatus;\n return new Promise((resolve, reject) => {\n // GET/HEAD 请求的缓存处理\n if (isQueryStringData(method) && !cache) {\n url = appendQuery(url, `_=${Date.now()}`);\n } // 创建 XHR\n\n\n const xhr = new XMLHttpRequest();\n xhr.open(method, url, async, username, password);\n\n if (contentType || data && !isQueryStringData(method) && contentType !== false) {\n xhr.setRequestHeader('Content-Type', contentType);\n } // 设置 Accept\n\n\n if (dataType === 'json') {\n xhr.setRequestHeader('Accept', 'application/json, text/javascript');\n } // 添加 headers\n\n\n if (headers) {\n each(headers, (key, value) => {\n // undefined 值不发送,string 和 null 需要发送\n if (!isUndefined(value)) {\n xhr.setRequestHeader(key, value + ''); // 把 null 转换成字符串\n }\n });\n } // 检查是否是跨域请求,跨域请求时不添加 X-Requested-With\n\n\n const crossDomain = /^([\\w-]+:)?\\/\\/([^/]+)/.test(url) && RegExp.$2 !== window.location.host;\n\n if (!crossDomain) {\n xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');\n }\n\n if (xhrFields) {\n each(xhrFields, (key, value) => {\n // @ts-ignore\n xhr[key] = value;\n });\n }\n\n eventParams.xhr = xhr;\n eventParams.options = mergedOptions;\n let xhrTimeout;\n\n xhr.onload = function () {\n if (xhrTimeout) {\n clearTimeout(xhrTimeout);\n } // AJAX 返回的 HTTP 响应码是否表示成功\n\n\n const isHttpStatusSuccess = xhr.status >= 200 && xhr.status < 300 || xhr.status === 304 || xhr.status === 0;\n let responseData;\n\n if (isHttpStatusSuccess) {\n if (xhr.status === 204 || method === 'HEAD') {\n textStatus = 'nocontent';\n } else if (xhr.status === 304) {\n textStatus = 'notmodified';\n } else {\n textStatus = 'success';\n }\n\n if (dataType === 'json') {\n try {\n responseData = method === 'HEAD' ? undefined : JSON.parse(xhr.responseText);\n eventParams.data = responseData;\n } catch (err) {\n textStatus = 'parsererror';\n trigger(ajaxEvents.ajaxError, eventParams, 'error', xhr, textStatus);\n reject(new Error(textStatus));\n }\n\n if (textStatus !== 'parsererror') {\n trigger(ajaxEvents.ajaxSuccess, eventParams, 'success', responseData, textStatus, xhr);\n resolve(responseData);\n }\n } else {\n responseData = method === 'HEAD' ? undefined : xhr.responseType === 'text' || xhr.responseType === '' ? xhr.responseText : xhr.response;\n eventParams.data = responseData;\n trigger(ajaxEvents.ajaxSuccess, eventParams, 'success', responseData, textStatus, xhr);\n resolve(responseData);\n }\n } else {\n textStatus = 'error';\n trigger(ajaxEvents.ajaxError, eventParams, 'error', xhr, textStatus);\n reject(new Error(textStatus));\n } // statusCode\n\n\n each([globalOptions.statusCode, statusCode], (_, func) => {\n if (func && func[xhr.status]) {\n if (isHttpStatusSuccess) {\n func[xhr.status](responseData, textStatus, xhr);\n } else {\n func[xhr.status](xhr, textStatus);\n }\n }\n });\n trigger(ajaxEvents.ajaxComplete, eventParams, 'complete', xhr, textStatus);\n };\n\n xhr.onerror = function () {\n if (xhrTimeout) {\n clearTimeout(xhrTimeout);\n }\n\n trigger(ajaxEvents.ajaxError, eventParams, 'error', xhr, xhr.statusText);\n trigger(ajaxEvents.ajaxComplete, eventParams, 'complete', xhr, 'error');\n reject(new Error(xhr.statusText));\n };\n\n xhr.onabort = function () {\n let statusText = 'abort';\n\n if (xhrTimeout) {\n statusText = 'timeout';\n clearTimeout(xhrTimeout);\n }\n\n trigger(ajaxEvents.ajaxError, eventParams, 'error', xhr, statusText);\n trigger(ajaxEvents.ajaxComplete, eventParams, 'complete', xhr, statusText);\n reject(new Error(statusText));\n }; // ajax start 回调\n\n\n trigger(ajaxEvents.ajaxStart, eventParams, 'beforeSend', xhr);\n\n if (isCanceled) {\n reject(new Error('cancel'));\n return;\n } // Timeout\n\n\n if (timeout > 0) {\n xhrTimeout = setTimeout(() => {\n xhr.abort();\n }, timeout);\n } // 发送 XHR\n\n\n xhr.send(data);\n });\n }\n\n return XHR();\n}\n\nexport default ajax;","export default class {\n /**\n * 获取数据存储\n * @param key\n */\n getStorage(key) {\n return window.localStorage.getItem(key);\n }\n /**\n * 设置数据存储\n * @param key\n * @param data\n */\n\n\n setStorage(key, data) {\n window.localStorage.setItem(key, data);\n }\n /**\n * 删除数据存储\n * @param key\n */\n\n\n removeStorage(key) {\n window.localStorage.removeItem(key);\n }\n\n}","import ajax from 'mdui.jq/es/functions/ajax';\nimport extend from 'mdui.jq/es/functions/extend';\nimport globalOptions from '../defaults';\nimport { GET } from '../util/requestMethod';\nimport BrowserAbstract from './abstract/Browser';\n/**\n * 浏览器适配器,使用 mdui.jq 中的 ajax 函数实现\n */\n\nexport default class extends BrowserAbstract {\n request(options) {\n const isFormData = options.data instanceof FormData;\n let headers = {\n token: this.getStorage('token') || undefined\n };\n\n if (options.headers) {\n headers = extend({}, headers, options.headers);\n }\n\n return new Promise((resolve, reject) => {\n ajax({\n method: options.method || GET,\n url: `${globalOptions.apiPath}${options.url || ''}`,\n data: isFormData ? options.data : JSON.stringify(options.data),\n headers,\n dataType: 'json',\n contentType: isFormData ? false : 'application/json',\n timeout: globalOptions.timeout,\n global: false,\n beforeSend: () => {\n globalOptions.beforeSend && globalOptions.beforeSend();\n },\n success: data => {\n globalOptions.success && globalOptions.success(data);\n data.code === 0 ? resolve(data) : reject(data);\n },\n error: (_, textStatus) => {\n globalOptions.error && globalOptions.error(textStatus);\n reject({\n code: 999999,\n message: textStatus\n });\n },\n complete: () => {\n globalOptions.complete && globalOptions.complete();\n }\n });\n });\n }\n\n}","/**\n * 设置 cookie,默认 15 天有效期\n * @param key\n * @param value\n * @param expire\n */\nexport function setCookie(key, value, expire = 15 * 24 * 3600) {\n const date = new Date();\n date.setTime(date.getTime() + expire * 1000);\n document.cookie = `${key}=${value}; expires=${date.toUTCString()}; path=/`;\n}\n/**\n * 删除 cookie\n * @param key\n */\n\nexport function removeCookie(key) {\n setCookie(key, '', -1);\n}","import '~/vendor/mdui';\nimport SDKConfig from 'mdclub-sdk-js/es/defaults';\nimport SDKAdapter from 'mdclub-sdk-js/es/adapter/BrowserAdapter';\nimport { isIE } from 'mdui.jq/es/utils';\nimport { setCookie } from '~/utils/cookie';\nimport './index.less'; // 设置 mdclub-sdk-js\n\nSDKConfig.apiPath = window.G_API;\nSDKConfig.adapter = new SDKAdapter();\n\nSDKConfig.error = () => {}; // 把 token 写入 cookie\n\n\nconst token = SDKConfig.adapter.getStorage('token');\n\nif (token) {\n setCookie('token', token);\n} // 处理未 catch 的 Promise\n// 原生 Promise,promise-polyfill 需要使用 Promise._unhandledRejectionFn。\n// 兼容性不好,目前在每个 promise 中写 catch\n\n/* window.addEventListener('unhandledrejection', function (event) {\n event.preventDefault();\n}); */\n// 控制台安全提示\n\n\nif (window.top === window && window.console && !isIE()) {\n setTimeout(() => {\n window.console.log('%c%s', 'color: red; background: yellow; font-size: 24px;', '警告!');\n window.console.log('%c%s', 'color: black; font-size: 18px;', `使用此控制台可能会让攻击者利用 Self-XSS(自跨站脚本)攻击来冒充你,并窃取你的信息。\n请勿输入或粘贴你不明白的代码。`);\n });\n}","import { getRequest, postRequest, deleteRequest } from './util/requestAlias';\nimport { buildURL } from './util/requestHandler';\n/**\n * 🔐删除话题\n *\n * 删除话题。 只要没有错误异常,无论是否有话题被删除,该接口都会返回成功。\n */\n\nexport const del = params => deleteRequest(buildURL('/topics/{topic_id}', params));\n/**\n * 🔑关注指定话题\n *\n * 关注指定话题。\n */\n\nexport const addFollow = params => postRequest(buildURL('/topics/{topic_id}/followers', params));\n/**\n * 🔐发布话题\n *\n * 发布话题。\n */\n\nexport const create = params => {\n const formData = new FormData();\n formData.append('name', params.name);\n formData.append('description', params.description);\n formData.append('cover', params.cover);\n return postRequest(buildURL('/topics', params, ['include']), formData);\n};\n/**\n * 🔑取消关注指定话题\n *\n * 取消关注指定话题。\n */\n\nexport const deleteFollow = params => deleteRequest(buildURL('/topics/{topic_id}/followers', params));\n/**\n * 🔐批量删除话题\n *\n * 批量删除话题。 只要没有错误异常,无论是否有话题被删除,该接口都会返回成功。\n */\n\nexport const deleteMultiple = params => deleteRequest(buildURL('/topics/{topic_ids}', params));\n/**\n * 获取指定话题信息\n *\n * 获取指定话题信息。\n */\n\nexport const get = params => getRequest(buildURL('/topics/{topic_id}', params, ['include']));\n/**\n * 获取指定话题下的文章\n *\n * 获取指定话题下的文章。\n */\n\nexport const getArticles = params => getRequest(buildURL('/topics/{topic_id}/articles', params, ['page', 'per_page', 'order', 'include']));\n/**\n * 获取指定话题的关注者\n *\n * 不含已禁用的用户。\n */\n\nexport const getFollowers = params => getRequest(buildURL('/topics/{topic_id}/followers', params, ['page', 'per_page', 'include']));\n/**\n * 获取全部话题\n *\n * 获取全部话题。\n */\n\nexport const getList = (params = {}) => getRequest(buildURL('/topics', params, ['page', 'per_page', 'include', 'order', 'topic_id', 'name', 'trashed']));\n/**\n * 获取指定话题下的提问\n *\n * 获取指定话题下的提问。\n */\n\nexport const getQuestions = params => getRequest(buildURL('/topics/{topic_id}/questions', params, ['page', 'per_page', 'order', 'include']));\n/**\n * 🔐把话题放入回收站\n *\n * 把话题放入回收站。\n */\n\nexport const trash = params => postRequest(buildURL('/topics/{topic_id}/trash', params, ['include']));\n/**\n * 🔐批量把话题放入回收站\n *\n * 批量把话题放入回收站。\n */\n\nexport const trashMultiple = params => postRequest(buildURL('/topics/{topic_ids}/trash', params, ['include']));\n/**\n * 🔐把话题移出回收站\n *\n * 把话题移出回收站。\n */\n\nexport const untrash = params => postRequest(buildURL('/topics/{topic_id}/untrash', params, ['include']));\n/**\n * 🔐批量把话题移出回收站\n *\n * 批量把话题移出回收站。\n */\n\nexport const untrashMultiple = params => postRequest(buildURL('/topics/{topic_ids}/untrash', params, ['include']));\n/**\n * 🔐更新话题信息\n *\n * 更新话题信息。 因为 formData 类型的数据只能通过 post 请求提交,所以这里不用 patch 请求\n */\n\nexport const update = params => {\n const formData = new FormData();\n formData.append('topic_id', params.topic_id.toString());\n params.name && formData.append('name', params.name);\n params.description && formData.append('description', params.description);\n params.cover && formData.append('cover', params.cover);\n return postRequest(buildURL('/topics/{topic_id}', params, ['include']), formData);\n};","import { getRequest, postRequest, patchRequest, deleteRequest } from './util/requestAlias';\nimport { buildURL, buildRequestBody } from './util/requestHandler';\n/**\n * 🔑删除提问\n *\n * 只要没有错误异常,无论是否有回答被删除,该接口都会返回成功。 管理员可删除提问。提问作者是否可删除提问,由管理员在后台的设置决定。\n */\n\nexport const del = params => deleteRequest(buildURL('/questions/{question_id}', params));\n/**\n * 🔑添加关注\n *\n * 添加关注。\n */\n\nexport const addFollow = params => postRequest(buildURL('/questions/{question_id}/followers', params));\n/**\n * 🔑为提问投票\n *\n * 为提问投票。\n */\n\nexport const addVote = params => postRequest(buildURL('/questions/{question_id}/voters', params), buildRequestBody(params, ['type']));\n/**\n * 🔑发表提问\n *\n * `content_markdown` 和 `content_rendered` 两个参数仅传入其中一个即可, 若两个参数都传入,则以 `content_markdown` 为准。\n */\n\nexport const create = params => postRequest(buildURL('/questions', params, ['include']), buildRequestBody(params, ['title', 'topic_ids', 'content_markdown', 'content_rendered']));\n/**\n * 🔑在指定提问下发表回答\n *\n * `content_markdown` 和 `content_rendered` 两个参数仅传入其中一个即可, 若两个参数都传入,则以 `content_markdown` 为准。\n */\n\nexport const createAnswer = params => postRequest(buildURL('/questions/{question_id}/answers', params, ['include']), buildRequestBody(params, ['content_markdown', 'content_rendered']));\n/**\n * 🔑在指定提问下发表评论\n *\n * 在指定提问下发表评论。\n */\n\nexport const createComment = params => postRequest(buildURL('/questions/{question_id}/comments', params, ['include']), buildRequestBody(params, ['content']));\n/**\n * 🔑取消关注\n *\n * 取消关注。\n */\n\nexport const deleteFollow = params => deleteRequest(buildURL('/questions/{question_id}/followers', params));\n/**\n * 🔐批量删除提问\n *\n * 批量删除提问。 只要没有错误异常,无论是否有提问被删除,该接口都会返回成功。\n */\n\nexport const deleteMultiple = params => deleteRequest(buildURL('/questions/{question_ids}', params));\n/**\n * 🔑取消为提问的投票\n *\n * 取消为提问的投票。\n */\n\nexport const deleteVote = params => deleteRequest(buildURL('/questions/{question_id}/voters', params));\n/**\n * 获取指定提问信息\n *\n * 获取指定提问信息。\n */\n\nexport const get = params => getRequest(buildURL('/questions/{question_id}', params, ['include']));\n/**\n * 获取指定提问下的回答\n *\n * 获取指定提问下的回答。\n */\n\nexport const getAnswers = params => getRequest(buildURL('/questions/{question_id}/answers', params, ['page', 'per_page', 'order', 'include']));\n/**\n * 获取指定提问的评论\n *\n * 获取指定提问的评论。\n */\n\nexport const getComments = params => getRequest(buildURL('/questions/{question_id}/comments', params, ['page', 'per_page', 'order', 'include']));\n/**\n * 获取指定提问的关注者\n *\n * 获取指定提问的关注者。\n */\n\nexport const getFollowers = params => getRequest(buildURL('/questions/{question_id}/followers', params, ['page', 'per_page', 'include']));\n/**\n * 获取提问列表\n *\n * 获取提问列表。\n */\n\nexport const getList = (params = {}) => getRequest(buildURL('/questions', params, ['page', 'per_page', 'order', 'include', 'question_id', 'user_id', 'topic_id', 'trashed']));\n/**\n * 获取提问的投票者\n *\n * 获取提问的投票者。\n */\n\nexport const getVoters = params => getRequest(buildURL('/questions/{question_id}/voters', params, ['page', 'per_page', 'include', 'type']));\n/**\n * 🔐把提问放入回收站\n *\n * 把提问放入回收站。\n */\n\nexport const trash = params => postRequest(buildURL('/questions/{question_id}/trash', params, ['include']));\n/**\n * 🔐批量把提问放入回收站\n *\n * 批量把提问放入回收站。\n */\n\nexport const trashMultiple = params => postRequest(buildURL('/questions/{question_ids}/trash', params, ['include']));\n/**\n * 🔐把提问移出回收站\n *\n * 把提问移出回收站。\n */\n\nexport const untrash = params => postRequest(buildURL('/questions/{question_id}/untrash', params, ['include']));\n/**\n * 🔐批量把提问移出回收站\n *\n * 批量把提问移出回收站。\n */\n\nexport const untrashMultiple = params => postRequest(buildURL('/questions/{question_ids}/untrash', params, ['include']));\n/**\n * 🔑更新提问信息\n *\n * 管理员可修改提问。提问作者是否可修改提问,由管理员在后台的设置决定。 `content_markdown` 和 `content_rendered` 两个参数仅传入其中一个即可, 若两个参数都传入,则以 `content_markdown` 为准。\n */\n\nexport const update = params => patchRequest(buildURL('/questions/{question_id}', params, ['include']), buildRequestBody(params, ['title', 'topic_ids', 'content_markdown', 'content_rendered']));","import { getRequest, postRequest, patchRequest, deleteRequest } from './util/requestAlias';\nimport { buildURL, buildRequestBody } from './util/requestHandler';\n/**\n * 🔑删除文章\n *\n * 只要没有错误异常,无论是否有文章被删除,该接口都会返回成功。 管理员可删除文章。文章作者是否可删除文章,由管理员在后台的设置决定。\n */\n\nexport const del = params => deleteRequest(buildURL('/articles/{article_id}', params));\n/**\n * 🔑添加关注\n *\n * 添加关注。\n */\n\nexport const addFollow = params => postRequest(buildURL('/articles/{article_id}/followers', params));\n/**\n * 🔑为文章投票\n *\n * 为文章投票。\n */\n\nexport const addVote = params => postRequest(buildURL('/articles/{article_id}/voters', params), buildRequestBody(params, ['type']));\n/**\n * 🔑发表文章\n *\n * `content_markdown` 和 `content_rendered` 两个参数仅传入其中一个即可, 若两个参数都传入,则以 `content_markdown` 为准。\n */\n\nexport const create = params => postRequest(buildURL('/articles', params, ['include']), buildRequestBody(params, ['title', 'topic_ids', 'content_markdown', 'content_rendered']));\n/**\n * 🔑在指定文章下发表评论\n *\n * 在指定文章下发表评论。\n */\n\nexport const createComment = params => postRequest(buildURL('/articles/{article_id}/comments', params, ['include']), buildRequestBody(params, ['content']));\n/**\n * 🔑取消关注\n *\n * 取消关注。\n */\n\nexport const deleteFollow = params => deleteRequest(buildURL('/articles/{article_id}/followers', params));\n/**\n * 🔐批量删除文章\n *\n * 批量删除文章。 只要没有错误异常,无论是否有文章被删除,该接口都会返回成功。\n */\n\nexport const deleteMultiple = params => deleteRequest(buildURL('/articles/{article_ids}', params));\n/**\n * 🔑取消为文章的投票\n *\n * 取消为文章的投票。\n */\n\nexport const deleteVote = params => deleteRequest(buildURL('/articles/{article_id}/voters', params));\n/**\n * 获取指定文章信息\n *\n * 获取指定文章信息。\n */\n\nexport const get = params => getRequest(buildURL('/articles/{article_id}', params, ['include']));\n/**\n * 获取指定文章的评论列表\n *\n * 获取指定文章的评论列表。\n */\n\nexport const getComments = params => getRequest(buildURL('/articles/{article_id}/comments', params, ['page', 'per_page', 'order', 'include']));\n/**\n * 获取指定文章的关注者\n *\n * 获取指定文章的关注者。\n */\n\nexport const getFollowers = params => getRequest(buildURL('/articles/{article_id}/followers', params, ['page', 'per_page', 'include']));\n/**\n * 获取文章列表\n *\n * 获取文章列表。\n */\n\nexport const getList = (params = {}) => getRequest(buildURL('/articles', params, ['page', 'per_page', 'order', 'include', 'article_id', 'user_id', 'topic_id', 'trashed']));\n/**\n * 获取文章的投票者\n *\n * 获取文章的投票者。\n */\n\nexport const getVoters = params => getRequest(buildURL('/articles/{article_id}/voters', params, ['page', 'per_page', 'include', 'type']));\n/**\n * 🔐把文章放入回收站\n *\n * 把文章放入回收站。\n */\n\nexport const trash = params => postRequest(buildURL('/articles/{article_id}/trash', params, ['include']));\n/**\n * 🔐批量把文章放入回收站\n *\n * 批量把文章放入回收站。\n */\n\nexport const trashMultiple = params => postRequest(buildURL('/articles/{article_ids}/trash', params, ['include']));\n/**\n * 🔐把文章移出回收站\n *\n * 把文章移出回收站。\n */\n\nexport const untrash = params => postRequest(buildURL('/articles/{article_id}/untrash', params, ['include']));\n/**\n * 🔐批量把文章移出回收站\n *\n * 批量把文章移出回收站。\n */\n\nexport const untrashMultiple = params => postRequest(buildURL('/articles/{article_ids}/untrash', params, ['include']));\n/**\n * 🔑更新文章信息\n *\n * 管理员可修改文章。文章作者是否可修改文章,由管理员在后台的设置决定。 `content_markdown` 和 `content_rendered` 两个参数仅传入其中一个即可, 若两个参数都传入,则以 `content_markdown` 为准。\n */\n\nexport const update = params => patchRequest(buildURL('/articles/{article_id}', params, ['include']), buildRequestBody(params, ['title', 'topic_ids', 'content_markdown', 'content_rendered']));","export default function currentUser() {\n return window.app.user.getState().user;\n}","import extend from 'mdui.jq/es/functions/extend';\nimport { getList as getTopics } from 'mdclub-sdk-js/es/TopicApi';\nimport { getList as getQuestions } from 'mdclub-sdk-js/es/QuestionApi';\nimport { getList as getArticles } from 'mdclub-sdk-js/es/ArticleApi';\nimport { isUndefined } from 'mdui.jq/es/utils';\nimport commonActions from '~/utils/actionsAbstract';\nimport userPopoverActions from '~/components/user-popover/actions';\nimport { emit } from '~/utils/pubsub';\nimport apiCatch from '~/utils/errorHandler';\nlet scroll_position;\nconst as = {\n onCreate: () => (state, actions) => {\n emit('route_update');\n actions.setTitle('');\n\n if (!state.topics_pagination) {\n actions.loadData({\n localParamName: 'G_INDEX_TOPICS',\n func: getTopics,\n fieldPrefix: 'topics',\n include: ['is_following'],\n order: '-follower_count',\n per_page: 12\n });\n }\n\n const include = ['user', 'topics', 'is_following'];\n\n if (!state.questions_recent_pagination) {\n actions.loadData({\n localParamName: 'G_INDEX_QUESTIONS_RECENT',\n func: getQuestions,\n fieldPrefix: 'questions_recent',\n include,\n order: '-update_time',\n per_page: 5\n });\n }\n\n if (!state.questions_popular_pagination) {\n actions.loadData({\n localParamName: 'G_INDEX_QUESTIONS_POPULAR',\n func: getQuestions,\n fieldPrefix: 'questions_popular',\n include,\n order: '-answer_count',\n per_page: 5\n });\n }\n\n if (!state.articles_recent_pagination) {\n actions.loadData({\n localParamName: 'G_INDEX_ARTICLES_RECENT',\n func: getArticles,\n fieldPrefix: 'articles_recent',\n include,\n order: '-create_time',\n per_page: 5\n });\n }\n\n if (!state.articles_popular_pagination) {\n actions.loadData({\n localParamName: 'G_INDEX_ARTICLES_POPULAR',\n func: getArticles,\n fieldPrefix: 'articles_popular',\n include,\n order: '-vote_count',\n per_page: 5\n });\n } // 恢复滚动条位置\n\n\n if (scroll_position) {\n window.scrollTo(0, scroll_position);\n scroll_position = 0;\n }\n },\n onDestroy: () => {},\n\n /**\n * 加载话题列表、提问列表、和文章列表\n */\n loadData: ({\n localParamName,\n func,\n fieldPrefix,\n include,\n order,\n per_page\n }) => (state, actions) => {\n const loadFromPage = () => {\n const response = window[localParamName];\n\n if (response) {\n actions.setState({\n [`${fieldPrefix}_data`]: response.data,\n [`${fieldPrefix}_pagination`]: response.pagination\n });\n window[localParamName] = null;\n }\n\n return response;\n };\n\n const loadFromServer = () => {\n actions.setState({\n [`${fieldPrefix}_loading`]: true\n });\n func({\n include,\n order,\n per_page\n }).finally(() => {\n actions.setState({\n [`${fieldPrefix}_loading`]: false\n });\n }).then(({\n data,\n pagination\n }) => {\n actions.setState({\n [`${fieldPrefix}_data`]: data,\n [`${fieldPrefix}_pagination`]: pagination\n });\n }).catch(apiCatch);\n };\n\n if (loadFromPage()) {\n return;\n }\n\n loadFromServer();\n },\n afterItemClick: item => {\n scroll_position = window.pageYOffset;\n\n if (!isUndefined(item.topic_id)) {\n window.G_TOPIC = item;\n } else if (!isUndefined(item.question_id)) {\n window.G_QUESTION = item;\n } else if (!isUndefined(item.article_id)) {\n window.G_ARTICLE = item;\n }\n }\n};\nexport default extend(as, commonActions, userPopoverActions);","import { addFollow as addFollowUser, deleteFollow as deleteFollowUser } from 'mdclub-sdk-js/es/UserApi';\nimport { addFollow as addFollowTopic, deleteFollow as deleteFollowTopic } from 'mdclub-sdk-js/es/TopicApi';\nimport { addFollow as addFollowArticle, deleteFollow as deleteFollowArticle } from 'mdclub-sdk-js/es/ArticleApi';\nimport { addFollow as addFollowQuestion, deleteFollow as deleteFollowQuestion } from 'mdclub-sdk-js/es/QuestionApi';\nimport currentUser from '~/utils/currentUser';\nimport { emit } from '~/utils/pubsub';\nimport apiCatch from '~/utils/errorHandler';\n\nconst getAddFollowFunction = type => {\n if (!type.indexOf('question')) {\n return addFollowQuestion;\n }\n\n if (!type.indexOf('user')) {\n return addFollowUser;\n }\n\n if (!type.indexOf('topic') || type === 'index_topics') {\n return addFollowTopic;\n }\n\n return addFollowArticle;\n};\n\nconst getDeleteFollowFunction = type => {\n if (!type.indexOf('question')) {\n return deleteFollowQuestion;\n }\n\n if (!type.indexOf('user')) {\n return deleteFollowUser;\n }\n\n if (!type.indexOf('topic') || type === 'index_topics') {\n return deleteFollowTopic;\n }\n\n return deleteFollowArticle;\n};\n/**\n * article, question, user, topic 切换关注状态\n * @param type\n * @param state\n * @param actions\n */\n\n\nconst toggleOne = (type, state, actions) => {\n const field = type === 'user' ? 'interviewee' : type;\n const field_id = `${type}_id`;\n const following_field = `following_${field}`;\n const {\n [field]: data,\n [following_field]: following\n } = state;\n\n if (following) {\n return;\n }\n\n actions.setState({\n [following_field]: true\n }); // 修改显示的关注状态\n\n const changeFollow = () => {\n data.relationships.is_following = !data.relationships.is_following;\n actions.setState({\n [field]: data\n });\n }; // 不等 ajax 的响应,先修改显示状态\n\n\n changeFollow();\n const followParams = {\n [field_id]: data[field_id]\n };\n const func = data.relationships.is_following ? getAddFollowFunction(type) : getDeleteFollowFunction(type);\n const promise = func(followParams);\n promise.finally(() => actions.setState({\n [following_field]: false\n })).then(response => {\n emit(`${type}s_follow_updated`);\n data.follower_count = response.data.follower_count;\n actions.setState({\n [field]: data\n });\n }).catch(response => {\n apiCatch(response); // 关注出错后,还原关注状态\n\n changeFollow();\n });\n};\n/**\n * users, topics, users_dialog, index_topics 切换关注状态\n * @param type\n * @param id\n * @param state\n * @param actions\n */\n\n\nconst toggleInList = (type, id, state, actions) => {\n const fieldsMap = {\n users: () => [`${state.tabs[state.tabIndex]}_data`, 'user', 'user_id'],\n topics: () => [`${state.tabs[state.tabIndex]}_data`, 'topic', 'topic_id'],\n users_dialog: () => ['data', 'user', 'user_id'],\n index_topics: () => ['topics_data', 'topic', 'topic_id']\n };\n const [dataField, field, fieldId] = fieldsMap[type]();\n const data = state[dataField];\n data.forEach((item, index) => {\n if (item[fieldId] !== id) {\n return;\n }\n\n const changeFollow = () => {\n data[index].relationships.is_following = !item.relationships.is_following;\n actions.setState({\n [dataField]: data\n });\n };\n\n changeFollow();\n\n const toggleFollow = () => {\n const func = item.relationships.is_following ? getAddFollowFunction(type) : getDeleteFollowFunction(type);\n return func({\n [fieldId]: id\n });\n };\n\n toggleFollow().then(() => {\n emit(`${field}s_follow_updated`);\n }).catch(response => {\n apiCatch(response);\n changeFollow();\n });\n });\n};\n/**\n * 在 user-popover 中切换对用户的关注状态,用于列表\n * @param primaryKey 提问ID或文章ID或评论ID的字段名\n * @param id 提问ID或文章ID或评论ID\n * @param dataName 数据列表的参数名\n * @param actions\n */\n\n\nconst toggleUserInRelationshipsInList = (primaryKey, id, dataName, actions) => {\n let state; // 评论列表\n\n if (dataName === 'comments_data') {\n state = window.app.comments.getState();\n actions = window.app.comments;\n } else {\n state = actions.getState();\n }\n\n const data = state[dataName];\n data.forEach((item, index) => {\n if (item[primaryKey] !== id) {\n return;\n }\n\n const changeFollow = () => {\n const isFollowing = item.relationships.user.relationships.is_following;\n data[index].relationships.user.relationships.is_following = !isFollowing;\n actions.setState({\n [dataName]: data\n });\n };\n\n changeFollow();\n\n const toggleFollow = () => {\n const func = item.relationships.user.relationships.is_following ? addFollowUser : deleteFollowUser;\n return func({\n user_id: item.user_id\n });\n };\n\n toggleFollow().then(() => {\n emit('users_follow_updated');\n }).catch(response => {\n apiCatch(response);\n changeFollow();\n });\n });\n};\n/**\n * 在 user-popover 中切换对用户的关注状态,用于文章和提问详情\n * @param primaryKey\n * @param dataName\n * @param actions\n */\n\n\nconst toggleUserInRelationships = (primaryKey, dataName, actions) => {\n const state = actions.getState();\n const data = state[dataName];\n\n const changeFollow = () => {\n data.relationships.user.relationships.is_following = !data.relationships.user.relationships.is_following;\n actions.setState({\n [dataName]: data\n });\n };\n\n changeFollow();\n const func = data.relationships.user.relationships.is_following ? addFollowUser : deleteFollowUser;\n func({\n user_id: data.user_id\n }).then(() => {\n emit('users_follow_updated');\n }).catch(response => {\n apiCatch(response);\n changeFollow();\n });\n};\n/**\n * 在需要用到关注的页面中,引入该 actions\n */\n\n\nexport default {\n /**\n * @param type article, question, user, users, topic, topics, users_dialog, index_topics, relationships-user\n * @param dataName 仅 relationships-user 中需要传入该参数\n * @param primaryKey 仅 relationships-user 需要传入该参数,表示提问ID或文章ID或评论ID的字段名\n * @param id 仅 users, topics, relationships-user 中需要传入该参数\n */\n toggleFollow: ({\n type,\n dataName = null,\n primaryKey = null,\n id = null\n }) => (state, actions) => {\n if (!currentUser()) {\n emit('login_open');\n return;\n } // 文章、提问、用户、话题详情页\n\n\n if (['article', 'question', 'user', 'topic'].indexOf(type) > -1) {\n toggleOne(type, state, actions);\n return;\n } // 用户、话题列表页,及 users_dialog 组件中\n\n\n if (['users', 'topics', 'index_topics', 'users_dialog'].indexOf(type) > -1) {\n toggleInList(type, id, state, actions);\n return;\n } // 在 user-popover 中,且对用户的关注状态\n\n\n if (['relationships-user'].indexOf(type) > -1) {\n if (dataName === 'article' || dataName === 'question') {\n toggleUserInRelationships(primaryKey, dataName, actions);\n } else {\n toggleUserInRelationshipsInList(primaryKey, id, dataName, actions);\n }\n }\n }\n};","import $ from 'mdui.jq';\nimport extend from 'mdui.jq/es/functions/extend';\nimport followActions from '~/components/follow/actions';\nconst $title = $('title');\n/**\n * 所有 actions 通用\n */\n\nconst as = {\n /**\n * 设置状态\n */\n setState: value => value,\n\n /**\n * 获取状态\n */\n getState: () => state => state,\n\n /**\n * 设置网页 title\n */\n setTitle: title => {\n const metaTitle = title ? `${title} - ${window.G_OPTIONS.site_name}` : window.G_OPTIONS.site_name + (window.G_OPTIONS.site_description ? ` - ${window.G_OPTIONS.site_description}` : '');\n $title.text(metaTitle);\n }\n};\nexport default extend(as, followActions);","/**\n * 错误代码\n *\n * 错误码格式:ABBCCC\n * A:错误级别,1:系统级错误;2:服务级错误\n * B:模块编号\n * C:具体错误编号\n */\n\n/**\n * =================================================================== 系统级错误\n */\n\n/**\n * 服务器错误\n */\nexport const SYSTEM_ERROR = 100000;\n/**\n * 系统维护中\n */\n\nexport const SYSTEM_MAINTAIN = 100001;\n/**\n * IP 请求超过上限\n */\n\nexport const SYSTEM_IP_LIMIT = 100002;\n/**\n * 用户请求超过上限\n */\n\nexport const SYSTEM_USER_LIMIT = 100003;\n/**\n * 接口不存在\n */\n\nexport const SYSTEM_API_NOT_FOUND = 100004;\n/**\n * 该接口不支持此 HTTP METHOD\n */\n\nexport const SYSTEM_API_NOT_ALLOWED = 100005;\n/**\n * 请求参数的 json 格式错误\n */\n\nexport const SYSTEM_REQUEST_JSON_INVALID = 100006;\n/**\n * 系统安装失败\n */\n\nexport const SYSTEM_INSTALL_FAILED = 100007;\n/**\n * ===================================================== 通用服务错误,模块编号:0\n */\n\n/**\n * 字段验证失败\n */\n\nexport const COMMON_FIELD_VERIFY_FAILED = 200001;\n/**\n * 邮件发送失败\n */\n\nexport const COMMON_SEND_EMAIL_FAILED = 200002;\n/**\n * 邮件验证码已失效\n */\n\nexport const COMMON_EMAIL_VERIFY_EXPIRED = 200003;\n/**\n * 图片上传失败\n */\n\nexport const COMMON_IMAGE_UPLOAD_FAILED = 200004;\n/**\n * 指定图片不存在\n */\n\nexport const COMMON_IMAGE_NOT_FOUND = 200005;\n/**\n * 投票类型只能是 up、down 中的一个\n */\n\nexport const COMMON_VOTE_TYPE_ERROR = 200006;\n/**\n * ===================================================== 用户相关错误,模块编号:1\n */\n\n/**\n * 用户未登录\n */\n\nexport const USER_NEED_LOGIN = 201001;\n/**\n * 需要管理员权限\n */\n\nexport const USER_NEED_MANAGE_PERMISSION = 201002;\n/**\n * 指定用户不存在\n */\n\nexport const USER_NOT_FOUND = 201003;\n/**\n * 目标用户不存在\n */\n\nexport const USER_TARGET_NOT_FOUND = 201004;\n/**\n * 该用户已被禁用\n */\n\nexport const USER_DISABLED = 201005;\n/**\n * 账号或密码错误\n */\n\nexport const USER_PASSWORD_ERROR = 201006;\n/**\n * 头像上传失败\n */\n\nexport const USER_AVATAR_UPLOAD_FAILED = 201007;\n/**\n * 封面上传失败\n */\n\nexport const USER_COVER_UPLOAD_FAILED = 201008;\n/**\n * 不能关注你自己\n */\n\nexport const USER_CANT_FOLLOW_YOURSELF = 201009;\n/**\n * ===================================================== 提问相关错误,模块编号:2\n */\n\n/**\n * 指定提问不存在\n */\n\nexport const QUESTION_NOT_FOUND = 202001;\n/**\n * 提问发表后即无法编辑\n */\n\nexport const QUESTION_CANT_EDIT = 202002;\n/**\n * 仅提问作者可以编辑提问\n */\n\nexport const QUESTION_CANT_EDIT_NOT_AUTHOR = 202003;\n/**\n * 已超过可编辑的时间\n */\n\nexport const QUESTION_CANT_EDIT_TIMEOUT = 202004;\n/**\n * 该提问下已有回答,不允许编辑\n */\n\nexport const QUESTION_CANT_EDIT_HAS_ANSWER = 202005;\n/**\n * 该提问下已有评论,不允许编辑\n */\n\nexport const QUESTION_CANT_EDIT_HAS_COMMENT = 202006;\n/**\n * 提问发表后即无法删除\n */\n\nexport const QUESTION_CANT_DELETE = 202007;\n/**\n * 仅提问作者可以删除提问\n */\n\nexport const QUESTION_CANT_DELETE_NOT_AUTHOR = 202008;\n/**\n * 已超过可删除的时间\n */\n\nexport const QUESTION_CANT_DELETE_TIMEOUT = 202009;\n/**\n * 该提问下已有回答,不允许删除\n */\n\nexport const QUESTION_CANT_DELETE_HAS_ANSWER = 202010;\n/**\n * 该提问下已有评论,不允许删除\n */\n\nexport const QUESTION_CANT_DELETE_HAS_COMMENT = 202011;\n/**\n * ===================================================== 回答相关错误,模块编号:3\n */\n\n/**\n * 指定回答不存在\n */\n\nexport const ANSWER_NOT_FOUND = 203001;\n/**\n * 回答发表后即无法编辑\n */\n\nexport const ANSWER_CANT_EDIT = 203002;\n/**\n * 仅回答的作者可以编辑回答\n */\n\nexport const ANSWER_CANT_EDIT_NOT_AUTHOR = 203003;\n/**\n * 已超过可编辑的时间\n */\n\nexport const ANSWER_CANT_EDIT_TIMEOUT = 203004;\n/**\n * 该回答下已有评论,不允许编辑\n */\n\nexport const ANSWER_CANT_EDIT_HAS_COMMENT = 203005;\n/**\n * 回答发表后即无法删除\n */\n\nexport const ANSWER_CANT_DELETE = 203006;\n/**\n * 仅回答的作者可以删除回答\n */\n\nexport const ANSWER_CANT_DELETE_NOT_AUTHOR = 203007;\n/**\n * 已超过可删除的时间\n */\n\nexport const ANSWER_CANT_DELETE_TIMEOUT = 203008;\n/**\n * 该回答下已有评论,不允许删除\n */\n\nexport const ANSWER_CANT_DELETE_HAS_COMMENT = 203009;\n/**\n * ===================================================== 评论相关错误,模块编号:4\n */\n\n/**\n * 指定的评论不存在\n */\n\nexport const COMMENT_NOT_FOUND = 204001;\n/**\n * 评论发表后即无法编辑\n */\n\nexport const COMMENT_CANT_EDIT = 204002;\n/**\n * 仅评论的作者可以编辑评论\n */\n\nexport const COMMENT_CANT_EDIT_NOT_AUTHOR = 204003;\n/**\n * 已超过可编辑时间\n */\n\nexport const COMMENT_CANT_EDIT_TIMEOUT = 204004;\n/**\n * 评论发表后即无法删除\n */\n\nexport const COMMENT_CANT_DELETE = 204005;\n/**\n * 仅评论的作者可以删除评论\n */\n\nexport const COMMENT_CANT_DELETE_NOT_AUTHOR = 204006;\n/**\n * 已超过可删除时间\n */\n\nexport const COMMENT_CANT_DELETE_TIMEOUT = 204007;\n/**\n * ===================================================== 话题相关错误,模块编号:5\n */\n\n/**\n * 指定话题不存在\n */\n\nexport const TOPIC_NOT_FOUND = 205001;\n/**\n * 话题封面上传失败\n */\n\nexport const TOPIC_COVER_UPLOAD_FAILED = 205002;\n/**\n * ===================================================== 文章相关错误,模块编号:6\n */\n\n/**\n * 指定文章不存在\n */\n\nexport const ARTICLE_NOT_FOUND = 206001;\n/**\n * 文章发表后即无法编辑\n */\n\nexport const ARTICLE_CANT_EDIT_NOT_AUTHOR = 206002;\n/**\n * 仅文章作者可以编辑文章\n */\n\nexport const ARTICLE_CANT_EDIT = 206003;\n/**\n * 已超过可编辑时间\n */\n\nexport const ARTICLE_CANT_EDIT_TIMEOUT = 206004;\n/**\n * 该文章下已有评论,不允许编辑\n */\n\nexport const ARTICLE_CANT_EDIT_HAS_COMMENT = 206005;\n/**\n * 文章发表后即无法删除\n */\n\nexport const ARTICLE_CANT_DELETE_NOT_AUTHOR = 206006;\n/**\n * 仅文章作者可以删除文章\n */\n\nexport const ARTICLE_CANT_DELETE = 206007;\n/**\n * 已超过可删除时间\n */\n\nexport const ARTICLE_CANT_DELETE_TIMEOUT = 206008;\n/**\n * 该文章下已有评论,不允许删除\n */\n\nexport const ARTICLE_CANT_DELETE_HAS_COMMENT = 206009;\n/**\n * ===================================================== 举报相关错误,模块编号:7\n */\n\n/**\n * 指定举报不存在\n */\n\nexport const REPORT_NOT_FOUND = 207001;\n/**\n * 举报目标不存在\n */\n\nexport const REPORT_TARGET_NOT_FOUND = 207002;\n/**\n * 不能重复举报\n */\n\nexport const REPORT_ALREADY_SUBMITTED = 207003;\n/**\n * ===================================================== 通知相关错误,模块编号:8\n */\n\n/**\n * 指定通知不存在\n */\n\nexport const NOTIFICATION_NOT_FOUND = 208001;","import $ from 'mdui.jq';\nimport currentUser from '~/utils/currentUser';\nimport { emit } from '~/utils/pubsub';\n/**\n * 在需要用到编辑器的页面中,引入该 actions\n */\n\nexport default {\n /**\n * 打开编辑器\n */\n editorOpen: () => (state, actions) => {\n if (!currentUser()) {\n emit('login_open');\n return;\n } // 读取 localStorage 中保存的话题\n\n\n try {\n const selected = JSON.parse(window.localStorage.getItem(`${state.auto_save_key}-topics`));\n\n if (selected) {\n actions.setState({\n editor_selected_topics: selected,\n editor_selected_topic_ids: selected.map(topic => topic.topic_id)\n });\n } // eslint-disable-next-line no-empty\n\n } catch (err) {}\n\n actions.setState({\n editor_open: true\n });\n actions.editorUpdateOverlay();\n },\n\n /**\n * 关闭编辑器\n */\n editorClose: () => (_, actions) => {\n actions.setState({\n editor_open: false\n });\n actions.editorUpdateOverlay();\n },\n\n /**\n * 最小化编辑器\n */\n editorMinimize: () => (state, actions) => {\n actions.setState({\n editor_minimize: !state.editor_minimize\n });\n actions.editorUpdateOverlay();\n },\n\n /**\n * 最大化编辑器\n */\n editorMaximize: () => (state, actions) => {\n actions.setState({\n editor_minimize: false,\n editor_maximize: !state.editor_maximize\n });\n actions.editorUpdateOverlay();\n },\n\n /**\n * 全屏显示编辑器时,需要显示遮罩,否则隐藏遮罩\n */\n editorUpdateOverlay: () => (_, actions) => {\n const state = actions.getState();\n\n if (state.editor_open && state.editor_maximize && !state.editor_minimize) {\n $.showOverlay();\n } else {\n $.hideOverlay();\n }\n }\n};","import mdui from 'mdui';\nimport { getList } from 'mdclub-sdk-js/es/TopicApi';\nimport each from 'mdui.jq/es/functions/each';\nimport apiCatch from '~/utils/errorHandler';\n/**\n * 在含编辑器,且编辑器中含话题选择器的页面中,引入该 actions\n */\n\nexport default {\n /**\n * 打开对话框\n */\n topicSelectorOpen: () => (state, actions) => {\n const dialog = new mdui.Dialog('.mc-topic-selector', {\n history: false\n });\n const $content = dialog.$element.find('.mdui-dialog-content');\n actions.setState({\n topics_data: [],\n topics_pagination: null,\n topics_loading: true\n });\n dialog.open();\n\n const loaded = promise => {\n promise.finally(() => {\n actions.setState({\n topics_loading: false\n });\n }).then(({\n data,\n pagination\n }) => {\n actions.setState({\n topics_data: actions.getState().topics_data.concat(data),\n topics_pagination: pagination\n });\n }).catch(apiCatch);\n };\n\n const infiniteLoad = () => {\n if (actions.getState().topics_loading) {\n return;\n }\n\n const {\n topics_pagination\n } = actions.getState();\n\n if (!topics_pagination) {\n return;\n }\n\n if (topics_pagination.page >= topics_pagination.pages) {\n return;\n }\n\n if ($content[0].scrollHeight - $content[0].scrollTop - $content[0].offsetHeight > 100) {\n return;\n }\n\n actions.setState({\n topics_loading: true\n });\n loaded(getList({\n page: topics_pagination.page + 1,\n order: '-follower_count'\n }));\n };\n\n loaded(getList({\n order: '-follower_count'\n }));\n $content.on('scroll', infiniteLoad);\n dialog.$element.on('close.mdui.dialog', () => {\n $content.off('scroll', infiniteLoad);\n });\n },\n\n /**\n * 点击话题\n */\n topicSelectorChange: ({\n event,\n dataIndex\n }) => (state, actions) => {\n const isChecked = event.target.checked;\n const {\n topics_data,\n editor_selected_topics,\n topics_max_selectable\n } = state;\n\n if (isChecked && editor_selected_topics.length >= topics_max_selectable) {\n mdui.snackbar(`最多只能选择 ${topics_max_selectable} 个话题`);\n return;\n }\n\n if (isChecked) {\n const selectedTopicsResult = editor_selected_topics.concat([topics_data[dataIndex]]);\n actions.setState({\n editor_selected_topics: selectedTopicsResult,\n editor_selected_topic_ids: selectedTopicsResult.map(topic => topic.topic_id)\n });\n } else {\n const dataIndexToSelectedIndex = (index, data, selected) => {\n const {\n topic_id\n } = data[index];\n let result;\n each(selected, (resultIndex, topic) => {\n if (topic.topic_id === topic_id) {\n result = resultIndex;\n return false;\n }\n\n return true;\n });\n return result;\n };\n\n const selectedIndex = dataIndexToSelectedIndex(dataIndex, topics_data, editor_selected_topics);\n editor_selected_topics.splice(selectedIndex, 1);\n actions.setState({\n editor_selected_topics,\n editor_selected_topic_ids: editor_selected_topics.map(topic => topic.topic_id)\n });\n }\n\n actions.saveToLocalStorage();\n },\n\n /**\n * 移除选中的话题\n */\n topicSelectorRemoveOne: selectedIndex => (state, actions) => {\n const {\n editor_selected_topics: selected\n } = state;\n selected.splice(selectedIndex, 1);\n actions.setState({\n editor_selected_topics: selected,\n editor_selected_topic_ids: selected.map(topic => topic.topic_id)\n });\n actions.saveToLocalStorage();\n },\n\n /**\n * 话题有变动后,保存到 localStorage\n */\n saveToLocalStorage: () => state => {\n window.localStorage.setItem(`${state.auto_save_key}-topics`, JSON.stringify(state.editor_selected_topics));\n }\n};","/**\n * 在需要用到编辑器的页面中,引入该 state\n */\nexport default {\n // 是否打开编辑器\n editor_open: false,\n // 是否最大化编辑器\n editor_maximize: false,\n // 是否最小化编辑器\n editor_minimize: false,\n // 编辑器中已选中的话题\n editor_selected_topics: [],\n // 已选中的话题ID数组\n editor_selected_topic_ids: []\n};","/**\n * 在含编辑器,且编辑器中含话题选择器的页面中,引入该 state\n */\nexport default {\n // 加载的话题数据\n topics_data: [],\n // 分页\n topics_pagination: null,\n // 是否加载中\n topics_loading: false,\n // 最多可选 10 个\n topics_max_selectable: 10\n};","import extend from 'mdui.jq/es/functions/extend';\nimport editorState from '~/components/editor/state';\nimport topicSelectorState from '~/components/editor/components/topic-selector/state';\nexport const tabs = ['recent', 'popular', 'following'];\nconst state = {\n // 当前所处的选项卡\n current_tab: '',\n // 是否正在发表提问\n publishing: false,\n // 选项卡数组\n tabs,\n // 最后访问的提问ID\n last_visit_id: 0,\n // 自动保存草稿的键名前缀\n auto_save_key: 'page-questions'\n};\ntabs.forEach(tabName => {\n state[`${tabName}_data`] = [];\n state[`${tabName}_pagination`] = null; // 为 null 表示未加载初始数据\n\n state[`${tabName}_loading`] = false;\n});\nexport default extend(state, editorState, topicSelectorState);","/**\n * 为链接补充前缀\n * @param url\n */\nfunction fullPath(url) {\n // @ts-ignore\n return window.G_ROOT + url;\n}\n\nfunction matchString(url) {\n return window.location.pathname === fullPath(url);\n}\n\nfunction matchRegular(regular) {\n const path = window.location.pathname.substr(window.G_ROOT.length);\n return regular.test(path);\n}\n\nfunction isPathIndex() {\n return matchString('/');\n}\n\nfunction isPathArticle() {\n return matchRegular(/^\\/articles\\/\\d+$/);\n}\n\nfunction isPathArticles() {\n return matchString('/articles');\n}\n\nfunction isPathQuestion() {\n return matchRegular(/^\\/questions\\/\\d+$/);\n}\n\nfunction isPathQuestions() {\n return matchString('/questions');\n}\n\nfunction isPathTopic() {\n return matchRegular(/^\\/topics\\/\\d+$/);\n}\n\nfunction isPathTopics() {\n return matchString('/topics');\n}\n\nfunction isPathUser() {\n return matchRegular(/^\\/users\\/\\d+$/);\n}\n\nfunction isPathUsers() {\n return matchString('/users');\n}\n\nfunction isPathInbox() {\n return matchString('/inbox');\n}\n\nfunction isPathNotifications() {\n return matchString('/notifications');\n}\n\nexport { fullPath, isPathIndex, isPathArticle, isPathArticles, isPathQuestion, isPathQuestions, isPathTopic, isPathTopics, isPathUser, isPathUsers, isPathInbox, isPathNotifications };","import timestamp from 'time-stamp';\n/**\n * 把时间戳格式化\n * @param ts\n * @param format\n */\n\nexport function timeFormat(ts, format = 'YYYY-MM-DD HH:mm:ss') {\n const date = new Date(ts * 1000);\n return timestamp(format, date);\n}\n/**\n * 把时间转换为用户友好的显示方式\n * @param ts\n */\n\nexport function timeFriendly(ts) {\n // 时间对象\n const date = new Date(ts * 1000); // 当前时间戳\n\n const currentTS = Date.parse(new Date().toString()) / 1000; // 时间差\n\n const timeDifference = currentTS - ts;\n\n if (timeDifference < 1) {\n return '刚刚';\n }\n\n if (timeDifference < 60) {\n return `${timeDifference} 秒前`;\n }\n\n if (timeDifference < 3600) {\n return `${parseInt(String(timeDifference / 60), 10)} 分钟前`;\n } // 今天 0 点时间戳\n\n\n const todayTS = Date.parse(new Date(new Date().setHours(0, 0, 0, 0)).toString()) / 1000;\n\n if (ts > todayTS) {\n return `今天 ${timestamp('HH:mm', date)}`;\n } // 今年 0 点时间戳\n\n\n const yearTS = Date.parse(new Date(`${new Date().getFullYear()}/01/01 00:00:00`).toString()) / 1000;\n\n if (ts > yearTS) {\n return timestamp('MM-DD HH:mm', date);\n }\n\n return timestamp('YYYY-MM-DD', date);\n}\n/**\n * 获取当前时间戳\n */\n\nexport function currentTimestamp() {\n return Date.parse(new Date().toString()) / 1000;\n}","import { location } from 'hyperapp-router';\nimport mdui from 'mdui';\nimport extend from 'mdui.jq/es/functions/extend';\nimport { $window } from 'mdui/es/utils/dom';\nimport { getList, create as createQuestion } from 'mdclub-sdk-js/es/QuestionApi';\nimport { getMyFollowingQuestions } from 'mdclub-sdk-js/es/UserApi';\nimport { COMMON_FIELD_VERIFY_FAILED } from 'mdclub-sdk-js/es/errors';\nimport commonActions from '~/utils/actionsAbstract';\nimport editorActions from '~/components/editor/actions';\nimport topicSelectorActions from '~/components/editor/components/topic-selector/actions';\nimport userPopoverActions from '~/components/user-popover/actions';\nimport { emit } from '~/utils/pubsub';\nimport { tabs } from './state';\nimport { fullPath } from '~/utils/path';\nimport apiCatch from '~/utils/errorHandler';\nimport { currentTimestamp } from '~/utils/time';\nconst TABNAME_RECENT = 'recent';\nconst TABNAME_POPULAR = 'popular';\nconst TABNAME_FOLLOWING = 'following';\nlet tab;\nlet tabIndex = tabs.indexOf(TABNAME_RECENT);\nlet scroll_position;\nconst is_updated = {\n [TABNAME_RECENT]: false,\n // 最近更新列表是否有更新\n [TABNAME_POPULAR]: false,\n // 最近热门列表是否有更新\n [TABNAME_FOLLOWING]: false // 我关注的列表是否有更新\n\n}; // 上次更新的时间,若当前时间距离上次更新时间超过一定范围,则重新加载列表\n\nconst last_update_time = {\n [TABNAME_RECENT]: 0,\n [TABNAME_POPULAR]: 0,\n [TABNAME_FOLLOWING]: 0\n};\nconst include = ['user', 'topics', 'is_following'];\nconst per_page = 20;\n\nconst getQuestions = (tabName, page) => {\n if (tabName === TABNAME_RECENT) {\n return getList({\n page,\n include,\n per_page,\n order: '-update_time'\n });\n }\n\n if (tabName === TABNAME_POPULAR) {\n return getList({\n page,\n include,\n per_page,\n order: '-vote_count'\n });\n }\n\n return getMyFollowingQuestions({\n page,\n include,\n per_page\n });\n};\n\nconst as = {\n /**\n * 初始化\n */\n onCreate: () => (_, actions) => {\n emit('route_update');\n tab = new mdui.Tab('.mc-tab');\n tabIndex = tab.activeIndex;\n tab.$element.on('change.mdui.tab', () => {\n tabIndex = tab.activeIndex;\n window.scrollTo(0, 0);\n window.history.replaceState({}, '', `#${tabs[tabIndex]}`);\n actions.afterChangeTab();\n });\n actions.afterChangeTab(); // 恢复滚动条位置\n\n if (scroll_position) {\n window.scrollTo(0, scroll_position);\n scroll_position = 0;\n } // 绑定加载更多\n\n\n $window.on('scroll', actions.infiniteLoad);\n },\n onDestroy: () => (_, actions) => {\n $window.off('scroll', actions.infiniteLoad);\n },\n\n /**\n * 切换 Tab 之后\n */\n afterChangeTab: () => (state, actions) => {\n const tabName = tabs[tabIndex];\n const TAB_NAME = tabName.toUpperCase();\n\n if (tabName === TABNAME_RECENT) {\n actions.setTitle('最新提问');\n } else if (tabName === TABNAME_POPULAR) {\n actions.setTitle('近期热门提问');\n } else {\n actions.setTitle('我关注的提问');\n }\n\n actions.setState({\n current_tab: tabName\n });\n\n if (!is_updated[tabs[tabIndex]] && state[`${tabName}_pagination`] && currentTimestamp() - last_update_time[tabs[tabIndex]] < 180) {\n return;\n }\n\n is_updated[tabs[tabIndex]] = false;\n last_update_time[tabs[tabIndex]] = currentTimestamp(); // 从页面中加载初始数据\n\n if (window[`G_QUESTIONS_${TAB_NAME}`]) {\n actions.setState({\n [`${tabName}_data`]: window[`G_QUESTIONS_${TAB_NAME}`].data,\n [`${tabName}_pagination`]: window[`G_QUESTIONS_${TAB_NAME}`].pagination\n }); // 清空页面中的数据,下次需要从 ajax 加载\n\n window[`G_QUESTIONS_${TAB_NAME}`] = null; // 若第一页没有填满屏幕,则加载第二页\n\n setTimeout(() => {\n actions.infiniteLoad();\n });\n return;\n } // ajax 加载数据\n\n\n actions.setState({\n [`${tabName}_data`]: [],\n [`${tabName}_pagination`]: null,\n [`${tabName}_loading`]: true\n });\n getQuestions(tabName, 1).finally(() => {\n actions.setState({\n [`${tabName}_loading`]: false\n });\n }).then(response => {\n actions.setState({\n [`${tabName}_data`]: response.data,\n [`${tabName}_pagination`]: response.pagination\n }); // 若第一页没有填满屏幕,则加载第二页\n\n setTimeout(() => {\n actions.infiniteLoad();\n });\n }).catch(apiCatch);\n },\n\n /**\n * 绑定下拉加载更多\n */\n infiniteLoad: () => (state, actions) => {\n const tabName = tabs[tabIndex];\n\n if (state[`${tabName}_loading`]) {\n return;\n }\n\n const pagination = state[`${tabName}_pagination`];\n\n if (pagination.page >= pagination.pages) {\n return;\n }\n\n if (document.body.scrollHeight - window.pageYOffset - window.innerHeight > 100) {\n return;\n }\n\n actions.setState({\n [`${tabName}_loading`]: true\n });\n getQuestions(tabName, pagination.page + 1).finally(() => {\n actions.setState({\n [`${tabName}_loading`]: false\n });\n }).then(response => {\n actions.setState({\n [`${tabName}_data`]: state[`${tabName}_data`].concat(response.data),\n [`${tabName}_pagination`]: response.pagination\n });\n }).catch(apiCatch);\n },\n\n /**\n * 切换到最近更新\n */\n toRecent: () => {\n tab.show(tabs.indexOf(TABNAME_RECENT));\n },\n\n /**\n * 切换到近期热门\n */\n toPopular: () => {\n tab.show(tabs.indexOf(TABNAME_POPULAR));\n },\n\n /**\n * 切换到我关注的\n */\n toFolliwing: () => {\n tab.show(tabs.indexOf(TABNAME_FOLLOWING));\n },\n\n /**\n * 在其他页面关注了问题后,需要调用该方法,以使下次切换到该页面时重新加载关注列表\n */\n followUpdate: () => {\n is_updated[TABNAME_FOLLOWING] = true;\n },\n\n /**\n * 问题信息更新后(发布回答、评论、关注),需要调用该方法\n */\n questionUpdate: question => (state, actions) => {\n let questions = [];\n tabs.forEach(tabName => {\n questions = state[`${tabName}_data`];\n let hasUpdate = false;\n questions.forEach((_question, i) => {\n if (question.question_id === _question.question_id) {\n hasUpdate = true;\n questions[i] = question;\n }\n });\n\n if (hasUpdate) {\n actions.setState({\n [`${tabName}_data`]: questions\n });\n }\n });\n },\n\n /**\n * 发布提问\n */\n publish: ({\n title,\n content\n }) => (state, actions) => {\n const {\n editor_selected_topic_ids: topic_ids,\n auto_save_key\n } = state;\n\n if (!title) {\n mdui.snackbar('请输入标题');\n return;\n }\n\n if (!topic_ids.length) {\n mdui.snackbar('请选择话题');\n return;\n }\n\n if (!content || content === '


') {\n mdui.snackbar('请输入正文');\n return;\n }\n\n actions.setState({\n publishing: true\n });\n createQuestion({\n title,\n topic_ids,\n content_rendered: content,\n include\n }).finally(() => {\n actions.setState({\n publishing: false\n });\n }).then(response => {\n is_updated[TABNAME_RECENT] = true;\n is_updated[TABNAME_POPULAR] = true;\n is_updated[TABNAME_FOLLOWING] = true; // 清空草稿和编辑器内容\n\n window.localStorage.removeItem(`${auto_save_key}-title`);\n window.localStorage.removeItem(`${auto_save_key}-topics`);\n window.localStorage.removeItem(`${auto_save_key}-content`);\n actions.setState({\n editor_selected_topics: [],\n editor_selected_topic_ids: []\n });\n actions.editorClose(); // 到提问详情页\n\n window.G_QUESTION = response.data;\n location.actions.go(fullPath(`/questions/${response.data.question_id}`));\n }).catch(response => {\n if (response.code === COMMON_FIELD_VERIFY_FAILED) {\n mdui.snackbar(Object.values(response.errors)[0]);\n return;\n }\n\n apiCatch(response);\n });\n },\n\n /**\n * 点击链接后,保存最后访问的提问ID和提问详情\n * @param question\n */\n afterItemClick: question => (_, actions) => {\n window.G_QUESTION = question;\n scroll_position = window.pageYOffset;\n actions.setState({\n last_visit_id: question.question_id\n });\n }\n};\nexport default extend(as, commonActions, editorActions, topicSelectorActions, userPopoverActions);","/**\n * Copyright (C) 2017-present by Andrea Giammarchi - @WebReflection\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\nconst {replace} = '';\n\n// escape\nconst es = /&(?:amp|#38|lt|#60|gt|#62|apos|#39|quot|#34);/g;\nconst ca = /[&<>'\"]/g;\n\nconst esca = {\n '&': '&',\n '<': '<',\n '>': '>',\n \"'\": ''',\n '\"': '"'\n};\nconst pe = m => esca[m];\n\n/**\n * Safely escape HTML entities such as `&`, `<`, `>`, `\"`, and `'`.\n * @param {string} es the input to safely escape\n * @returns {string} the escaped input, and it **throws** an error if\n * the input type is unexpected, except for boolean and numbers,\n * converted as string.\n */\nexport const escape = es => replace.call(es, ca, pe);\n\n\n// unescape\nconst unes = {\n '&': '&',\n '&': '&',\n '<': '<',\n '<': '<',\n '>': '>',\n '>': '>',\n ''': \"'\",\n ''': \"'\",\n '"': '\"',\n '"': '\"'\n};\nconst cape = m => unes[m];\n\n/**\n * Safely unescape previously escaped entities such as `&`, `<`, `>`, `\"`,\n * and `'`.\n * @param {string} un a previously escaped string\n * @returns {string} the unescaped input, and it **throws** an error if\n * the input type is unexpected, except for boolean and numbers,\n * converted as string.\n */\nexport const unescape = un => replace.call(un, es, cape);\n","import { getRequest, postRequest, patchRequest, deleteRequest } from './util/requestAlias';\nimport { buildURL, buildRequestBody } from './util/requestHandler';\n/**\n * 🔑删除回答\n *\n * 只要没有错误异常,无论是否有回答被删除,该接口都会返回成功。 管理员可删除回答。回答作者是否可删除回答,由管理员在后台的设置决定。\n */\n\nexport const del = params => deleteRequest(buildURL('/answers/{answer_id}', params));\n/**\n * 🔑为回答投票\n *\n * 为回答投票。\n */\n\nexport const addVote = params => postRequest(buildURL('/answers/{answer_id}/voters', params), buildRequestBody(params, ['type']));\n/**\n * 在指定回答下发表评论\n *\n * 在指定回答下发表评论。\n */\n\nexport const createComment = params => postRequest(buildURL('/answers/{answer_id}/comments', params, ['include']), buildRequestBody(params, ['content']));\n/**\n * 🔐批量删除回答\n *\n * 批量删除回答。 只要没有错误异常,无论是否有回答被删除,该接口都会返回成功。\n */\n\nexport const deleteMultiple = params => deleteRequest(buildURL('/answers/{answer_ids}', params));\n/**\n * 🔑取消为回答的投票\n *\n * 取消为回答的投票。\n */\n\nexport const deleteVote = params => deleteRequest(buildURL('/answers/{answer_id}/voters', params));\n/**\n * 获取回答详情\n *\n * 获取回答详情。\n */\n\nexport const get = params => getRequest(buildURL('/answers/{answer_id}', params, ['include']));\n/**\n * 获取指定回答的评论\n *\n * 获取指定回答的评论。\n */\n\nexport const getComments = params => getRequest(buildURL('/answers/{answer_id}/comments', params, ['page', 'per_page', 'order', 'include']));\n/**\n * 🔐获取回答列表\n *\n * 获取回答列表。\n */\n\nexport const getList = (params = {}) => getRequest(buildURL('/answers', params, ['page', 'per_page', 'order', 'include', 'answer_id', 'question_id', 'user_id', 'trashed']));\n/**\n * 获取回答的投票者\n *\n * 获取回答的投票者。\n */\n\nexport const getVoters = params => getRequest(buildURL('/answers/{answer_id}/voters', params, ['page', 'per_page', 'include', 'type']));\n/**\n * 🔐把回答放入回收站\n *\n * 把回答放入回收站。\n */\n\nexport const trash = params => postRequest(buildURL('/answers/{answer_id}/trash', params, ['include']));\n/**\n * 🔐批量把回答放入回收站\n *\n * 批量把回答放入回收站。\n */\n\nexport const trashMultiple = params => postRequest(buildURL('/answers/{answer_ids}/trash', params, ['include']));\n/**\n * 🔐把回答移出回收站\n *\n * 把回答移出回收站。\n */\n\nexport const untrash = params => postRequest(buildURL('/answers/{answer_id}/untrash', params, ['include']));\n/**\n * 🔐批量把回答移出回收站\n *\n * 批量把回答移出回收站。\n */\n\nexport const untrashMultiple = params => postRequest(buildURL('/answers/{answer_ids}/untrash', params, ['include']));\n/**\n * 🔑修改回答信息\n *\n * 管理员可修改回答。回答作者是否可修改回答,由管理员在后台的设置决定。 `content_markdown` 和 `content_rendered` 两个参数仅传入其中一个即可, 若两个参数都传入,则以 `content_markdown` 为准。\n */\n\nexport const update = params => patchRequest(buildURL('/answers/{answer_id}', params, ['include']), buildRequestBody(params, ['content_markdown', 'content_rendered']));","import { getRequest, postRequest, patchRequest, deleteRequest } from './util/requestAlias';\nimport { buildURL, buildRequestBody } from './util/requestHandler';\n/**\n * 🔑删除评论\n *\n * 只要没有错误异常,无论是否有回答被删除,该接口都会返回成功。 管理员可删除评论。评论作者是否可删除评论,由管理员在后台的设置决定。\n */\n\nexport const del = params => deleteRequest(buildURL('/comments/{comment_id}', params));\n/**\n * 🔑为评论投票\n *\n * 为评论投票。\n */\n\nexport const addVote = params => postRequest(buildURL('/comments/{comment_id}/voters', params), buildRequestBody(params, ['type']));\n/**\n * 🔑在指定评论下发表回复\n *\n * 在指定评论下发表回复。\n */\n\nexport const createReply = params => postRequest(buildURL('/comments/{comment_id}/replies', params, ['include']), buildRequestBody(params, ['content']));\n/**\n * 🔐批量删除评论\n *\n * 批量删除评论。 只要没有错误异常,无论是否有评论被删除,该接口都会返回成功。\n */\n\nexport const deleteMultiple = params => deleteRequest(buildURL('/comments/{comment_ids}', params));\n/**\n * 🔑取消为评论的投票\n *\n * 取消为评论的投票。\n */\n\nexport const deleteVote = params => deleteRequest(buildURL('/comments/{comment_id}/voters', params));\n/**\n * 获取评论详情\n *\n * 获取评论详情。\n */\n\nexport const get = params => getRequest(buildURL('/comments/{comment_id}', params, ['include']));\n/**\n * 🔐获取所有评论\n *\n * 获取所有评论。\n */\n\nexport const getList = (params = {}) => getRequest(buildURL('/comments', params, ['page', 'per_page', 'order', 'include', 'comment_id', 'commentable_id', 'commentable_type', 'user_id', 'trashed']));\n/**\n * 获取指定评论的回复\n *\n * 获知指定评论的回复。\n */\n\nexport const getReplies = params => getRequest(buildURL('/comments/{comment_id}/replies', params, ['page', 'per_page', 'order', 'include']));\n/**\n * 获取评论的投票者\n *\n * 获取评论的投票者。\n */\n\nexport const getVoters = params => getRequest(buildURL('/comments/{comment_id}/voters', params, ['page', 'per_page', 'include', 'type']));\n/**\n * 🔐把评论放入回收站\n *\n * 把评论放入回收站。\n */\n\nexport const trash = params => postRequest(buildURL('/comments/{comment_id}/trash', params, ['include']));\n/**\n * 🔐批量把评论放入回收站\n *\n * 批量把评论放入回收站。\n */\n\nexport const trashMultiple = params => postRequest(buildURL('/comments/{comment_ids}/trash', params, ['include']));\n/**\n * 🔐把评论移出回收站\n *\n * 把评论移出回收站。\n */\n\nexport const untrash = params => postRequest(buildURL('/comments/{comment_id}/untrash', params, ['include']));\n/**\n * 🔐批量把评论移出回收站\n *\n * 批量把评论移出回收站。\n */\n\nexport const untrashMultiple = params => postRequest(buildURL('/comments/{comment_ids}/untrash', params, ['include']));\n/**\n * 🔑修改评论\n *\n * 管理员可修改评论。评论作者是否可修改评论,由管理员在后台的设置决定。\n */\n\nexport const update = params => patchRequest(buildURL('/comments/{comment_id}', params, ['include']), buildRequestBody(params, ['content']));","import extend from 'mdui.jq/es/functions/extend';\nimport { addVote as addAnswerVote, deleteVote as deleteAnswerVote } from 'mdclub-sdk-js/es/AnswerApi';\nimport { addVote as addArticleVote, deleteVote as deleteArticleVote } from 'mdclub-sdk-js/es/ArticleApi';\nimport { addVote as addCommentVote, deleteVote as deleteCommentVote } from 'mdclub-sdk-js/es/CommentApi';\nimport { findIndex } from '~/utils/func';\nimport apiCatch from '~/utils/errorHandler';\n\nconst toggle = (id, commentIndex, type, voting, state, actions) => {\n let promise; // 文章详情页中\n\n if (type === 'article') {\n const {\n article\n } = state;\n const isDelete = article.relationships.voting === voting;\n article.relationships.voting = isDelete ? '' : voting;\n actions.setState({\n article\n });\n promise = isDelete ? deleteArticleVote({\n article_id: id\n }) : addArticleVote({\n article_id: id,\n type: voting\n });\n promise.then(({\n data\n }) => {\n extend(article, data);\n actions.setState({\n article\n });\n });\n } // 回答列表中\n\n\n if (type === 'answers') {\n const {\n answer_data\n } = state;\n const index = findIndex(answer_data, 'answer_id', id);\n const answer = answer_data[index];\n const isDelete = answer.relationships.voting === voting;\n answer.relationships.voting = isDelete ? '' : voting;\n answer_data[index] = answer;\n actions.setState({\n answer_data\n });\n promise = isDelete ? deleteAnswerVote({\n answer_id: id\n }) : addAnswerVote({\n answer_id: id,\n type: voting\n });\n promise.then(({\n data\n }) => {\n extend(answer, data);\n answer_data[index] = answer;\n actions.setState({\n answer_data\n });\n });\n } // 评论列表中\n\n\n if (type === 'comments') {\n const {\n comments_data\n } = state;\n const index = findIndex(comments_data, 'comment_id', id);\n const comment = comments_data[index];\n const isDelete = comment.relationships.voting === voting;\n comment.relationships.voting = isDelete ? '' : voting;\n comments_data[index] = comment;\n actions.setState({\n comments_data\n });\n promise = isDelete ? deleteCommentVote({\n comment_id: id\n }) : addCommentVote({\n comment_id: id,\n type: voting\n });\n promise.then(({\n data\n }) => {\n extend(comment, data);\n comments_data[index] = comment;\n actions.setState({\n comments_data\n });\n });\n } // 回复列表中\n\n\n if (type === 'replies') {\n const {\n comments_data\n } = state;\n const {\n replies_data\n } = comments_data[commentIndex];\n const index = findIndex(replies_data, 'comment_id', id);\n const reply = replies_data[index];\n const isDelete = reply.relationships.voting === voting;\n reply.relationships.voting = isDelete ? '' : voting;\n comments_data[commentIndex].replies_data[index] = reply;\n actions.setState({\n comments_data\n });\n promise = isDelete ? deleteCommentVote({\n comment_id: id\n }) : addCommentVote({\n comment_id: id,\n type: voting\n });\n promise.then(({\n data\n }) => {\n extend(reply, data);\n comments_data[commentIndex].replies_data[index] = reply;\n actions.setState({\n comments_data\n });\n });\n }\n\n promise.catch(apiCatch);\n};\n\nconst getIdValue = (item, type) => {\n switch (type) {\n case 'article':\n return item.article_id;\n\n case 'answers':\n return item.answer_id;\n\n default:\n return item.comment_id;\n }\n};\n/**\n * 在需要用到投票的页面中,引入该 actions\n */\n\n\nexport default {\n /**\n * 点击赞同\n * @param item\n * @param type\n * answers: 提问页面的回答列表\n * article: 文章详情页\n * comments: 评论列表\n * replies: 评论回复列表\n * @param commentIndex 仅 replies 中需要,表示评论的索引号\n */\n voteUp: ({\n item,\n type,\n commentIndex\n }) => (state, actions) => {\n toggle(getIdValue(item, type), commentIndex, type, 'up', state, actions);\n },\n\n /**\n * 点击不赞同\n * @param item\n * @param type\n * answers: 提问页面的回答列表\n * article: 文章详情页\n * comments: 评论列表\n * replies:评论回复列表\n * @param commentIndex 仅 replies 中需要,表示评论的索引号\n */\n voteDown: ({\n item,\n type,\n commentIndex\n }) => (state, actions) => {\n toggle(getIdValue(item, type), commentIndex, type, 'down', state, actions);\n }\n};","export default {\n // 提问ID\n question_id: 0,\n // 若为回答详情页,则包含该参数\n answer_id: 0,\n // 当前访问的提问信息\n question: null,\n // 是否正在加载提问数据,提问详情页和回答详情页公用\n loading: false,\n // 是否正在变更关注状态\n following_question: false,\n // 排序方式\n answer_order: '-vote_count',\n // 回答列表,回答详情页的数据也放在这里\n answer_data: [],\n // 回答分页信息,为 null 表示未加载初始数据\n answer_pagination: null,\n // 是否正在加载回答,提问详情页和回答详情页公用\n answer_loading: false,\n // 是否正在发表回答\n answer_publishing: false,\n auto_save_key: 'page-answers'\n};","import { location } from 'hyperapp-router';\nimport mdui from 'mdui';\nimport extend from 'mdui.jq/es/functions/extend';\nimport { $window } from 'mdui/es/utils/dom';\nimport { unescape } from 'html-escaper';\nimport { get as getQuestion, createAnswer, getAnswers } from 'mdclub-sdk-js/es/QuestionApi';\nimport { getList as getAnswerList, get as getAnswer } from 'mdclub-sdk-js/es/AnswerApi';\nimport { COMMON_FIELD_VERIFY_FAILED } from 'mdclub-sdk-js/es/errors';\nimport { emit } from '~/utils/pubsub';\nimport { fullPath } from '~/utils/path';\nimport apiCatch from '~/utils/errorHandler';\nimport commonActions from '~/utils/actionsAbstract';\nimport editorActions from '~/components/editor/actions';\nimport voteActions from '~/components/vote/actions';\nimport userPopoverActions from '~/components/user-popover/actions';\nimport stateDefault from './stateDefault';\nconst per_page = 20;\nconst as = {\n /**\n * @param question_id\n * @param answer_id 提问详情页该参数值为 0\n * @param route question, answer\n */\n onCreate: ({\n question_id,\n answer_id,\n route\n }) => (state, actions) => {\n emit('route_update');\n actions.setState({\n route\n });\n\n if (answer_id) {\n // 回答详情页\n if (state.answer_id !== answer_id) {\n actions.setState(stateDefault);\n actions.setState({\n question_id,\n answer_id\n });\n actions.loadQuestion();\n actions.loadAnswer();\n }\n } else {\n // 提问详情页\n if (state.question_id !== question_id || state.answer_id) {\n actions.setState(stateDefault);\n actions.setState({\n question_id\n });\n actions.loadQuestion();\n actions.loadAnswers();\n } // 发表回答后,到了回答页面,然后返回到提问页面,需要重新加载回答列表\n\n\n if (!state.answer_pagination) {\n actions.loadAnswers();\n }\n\n $window.on('scroll', actions.infiniteLoadAnswers);\n }\n },\n onDestroy: () => (state, actions) => {\n if (state.route === 'question') {\n $window.off('scroll', actions.infiniteLoadAnswers);\n }\n },\n\n /**\n * 加载问题数据\n */\n loadQuestion: () => (state, actions) => {\n const setTitle = title => {\n if (state.route === 'question') {\n actions.setTitle(title);\n } else {\n actions.setTitle(`${title} 的回答`);\n }\n }; // 从页面中加载问题数据\n\n\n const loadFromPage = () => {\n const question = window.G_QUESTION;\n\n if (question) {\n actions.setState({\n question\n });\n window.G_QUESTION = null;\n setTitle(unescape(question.title));\n }\n\n return question;\n }; // ajax 加载问题数据\n\n\n const loadFromServer = () => {\n actions.setState({\n loading: true\n });\n getQuestion({\n question_id: state.question_id,\n include: ['user', 'topics', 'is_following', 'voting']\n }).finally(() => {\n actions.setState({\n loading: false\n });\n }).then(({\n data\n }) => {\n actions.setState({\n question: data\n });\n setTitle(unescape(data.title));\n }).catch(apiCatch);\n };\n\n if (loadFromPage()) {\n return;\n }\n\n loadFromServer();\n },\n\n /**\n * 加载回答数据\n */\n loadAnswer: () => (state, actions) => {\n // 从页面中加载回答数据\n const loadFromPage = () => {\n const answer = window.G_ANSWER;\n\n if (answer) {\n actions.setState({\n answer_data: [answer]\n });\n window.G_ANSWER = null;\n }\n\n return answer;\n }; // ajax 加载回答数据\n\n\n const loadFromServer = () => {\n actions.setState({\n answer_loading: true\n });\n getAnswer({\n answer_id: state.answer_id,\n include: ['user', 'voting']\n }).finally(() => {\n actions.setState({\n answer_loading: false\n });\n }).then(({\n data\n }) => {\n actions.setState({\n answer_data: [data]\n });\n }).catch(apiCatch);\n };\n\n if (loadFromPage()) {\n return;\n }\n\n loadFromServer();\n },\n\n /**\n * 切换回答排序方式\n */\n changeOrder: answer_order => (state, actions) => {\n if (answer_order === state.answer_order) {\n return;\n }\n\n actions.setState({\n answer_order,\n answer_data: [],\n answer_pagination: null\n });\n actions.loadAnswers();\n },\n\n /**\n * 加载回答数据\n * @returns void\n */\n loadAnswers: () => (state, actions) => {\n // 从页面中加载回答数据\n const loadFromPage = () => {\n const answers = window.G_QUESTION_ANSWERS;\n\n if (answers) {\n actions.setState({\n answer_data: answers.data,\n answer_pagination: answers.pagination,\n answer_loading: false\n });\n window.G_QUESTION_ANSWERS = null;\n }\n\n return answers;\n }; // 从 ajax 获取回答数据\n\n\n const loadFromServer = () => {\n actions.setState({\n answer_loading: true\n });\n getAnswers({\n question_id: state.question_id,\n per_page,\n order: state.answer_order,\n include: ['user', 'voting']\n }).finally(() => {\n actions.setState({\n answer_loading: false\n });\n }).then(response => {\n actions.setState({\n answer_data: response.data,\n answer_pagination: response.pagination\n });\n }).catch(apiCatch);\n };\n\n if (loadFromPage()) {\n return;\n }\n\n loadFromServer();\n },\n\n /**\n * 绑定下拉加载更多回答\n */\n infiniteLoadAnswers: () => (state, actions) => {\n if (state.answer_loading) {\n return;\n }\n\n const pagination = state.answer_pagination;\n\n if (pagination.page >= pagination.pages) {\n return;\n }\n\n if (document.body.scrollHeight - window.pageYOffset - window.innerHeight > 100) {\n return;\n }\n\n actions.setState({\n answer_loading: true\n });\n getAnswerList({\n page: pagination.page + 1,\n per_page,\n order: state.answer_order,\n include: ['user', 'voting'],\n question_id: state.question_id\n }).finally(() => {\n actions.setState({\n answer_loading: false\n });\n }).then(response => {\n actions.setState({\n answer_data: state.answer_data.concat(response.data),\n answer_pagination: response.pagination\n });\n }).catch(apiCatch);\n },\n\n /**\n * 发布回答\n */\n publishAnswer: ({\n content\n }) => (state, actions) => {\n const {\n auto_save_key\n } = state;\n\n if (!content || content === '


') {\n mdui.snackbar('请输入正文');\n return;\n }\n\n actions.setState({\n answer_publishing: true\n });\n createAnswer({\n question_id: state.question_id,\n content_rendered: content,\n include: ['user', 'voting']\n }).finally(() => {\n actions.setState({\n answer_publishing: false\n });\n }).then(response => {\n window.localStorage.removeItem(`${auto_save_key}-content`);\n actions.editorClose(); // 发表回答后,回答数量 + 1\n\n const {\n question\n } = state;\n question.answer_count += 1; // 下次进入重新加载回答\n\n actions.setState({\n question,\n answer_data: [],\n answer_pagination: null\n }); // 到回答详情页\n\n window.G_QUESTION = state.question;\n window.G_ANSWER = response.data;\n location.actions.go(fullPath(`/questions/${state.question_id}/answers/${response.data.answer_id}`));\n }).catch(response => {\n if (response.code === COMMON_FIELD_VERIFY_FAILED) {\n mdui.snackbar(Object.values(response.errors)[0]);\n return;\n }\n\n apiCatch(response);\n });\n }\n};\nexport default extend(as, commonActions, editorActions, voteActions, userPopoverActions);","import extend from 'mdui.jq/es/functions/extend';\nimport editorState from '~/components/editor/state';\nimport topicSelectorState from '~/components/editor/components/topic-selector/state';\nexport const tabs = ['recent', 'popular', 'following'];\nconst state = {\n // 当前所处的选项卡\n current_tab: '',\n // 是否正在发表文章\n publishing: false,\n // 选项卡数组\n tabs,\n // 最后访问的文章ID\n last_visit_id: 0,\n // 自动保存草稿的键名前缀\n auto_save_key: 'page-articles'\n};\ntabs.forEach(tabName => {\n state[`${tabName}_data`] = [];\n state[`${tabName}_pagination`] = null; // 为 null 表示未加载初始数据\n\n state[`${tabName}_loading`] = false;\n});\nexport default extend(state, editorState, topicSelectorState);","import { location } from 'hyperapp-router';\nimport mdui from 'mdui';\nimport extend from 'mdui.jq/es/functions/extend';\nimport { $window } from 'mdui/es/utils/dom';\nimport { getList, create as createArticle } from 'mdclub-sdk-js/es/ArticleApi';\nimport { getMyFollowingArticles } from 'mdclub-sdk-js/es/UserApi';\nimport { COMMON_FIELD_VERIFY_FAILED } from 'mdclub-sdk-js/es/errors';\nimport commonActions from '~/utils/actionsAbstract';\nimport editorActions from '~/components/editor/actions';\nimport topicSelectorActions from '~/components/editor/components/topic-selector/actions';\nimport userPopoverActions from '~/components/user-popover/actions';\nimport { emit } from '~/utils/pubsub';\nimport { tabs } from './state';\nimport { fullPath } from '~/utils/path';\nimport apiCatch from '~/utils/errorHandler';\nimport { currentTimestamp } from '~/utils/time';\nconst TABNAME_RECENT = 'recent';\nconst TABNAME_POPULAR = 'popular';\nconst TABNAME_FOLLOWING = 'following';\nlet tab;\nlet tabIndex = tabs.indexOf(TABNAME_RECENT);\nlet scroll_position;\nconst is_updated = {\n [TABNAME_RECENT]: false,\n // 最近更新列表是否有更新\n [TABNAME_POPULAR]: false,\n // 最近热门列表是否有更新\n [TABNAME_FOLLOWING]: false // 我关注的列表是否有更新\n\n}; // 上次更新的时间,若当前时间距离上次更新时间超过一定范围,则重新加载列表\n\nconst last_update_time = {\n [TABNAME_RECENT]: 0,\n [TABNAME_POPULAR]: 0,\n [TABNAME_FOLLOWING]: 0\n};\nconst include = ['user', 'topics', 'is_following', 'voting'];\nconst per_page = 20;\n\nconst getArticles = (tabName, page) => {\n if (tabName === TABNAME_RECENT) {\n return getList({\n page,\n include,\n per_page,\n order: '-update_time'\n });\n }\n\n if (tabName === TABNAME_POPULAR) {\n return getList({\n page,\n include,\n per_page,\n order: '-vote_count'\n });\n }\n\n return getMyFollowingArticles({\n page,\n include,\n per_page\n });\n};\n\nconst as = {\n onCreate: () => (_, actions) => {\n emit('route_update');\n tab = new mdui.Tab('.mc-tab');\n tabIndex = tab.activeIndex;\n tab.$element.on('change.mdui.tab', () => {\n tabIndex = tab.activeIndex;\n window.scrollTo(0, 0);\n window.history.replaceState({}, '', `#${tabs[tabIndex]}`);\n actions.afterChangeTab();\n });\n actions.afterChangeTab(); // 恢复滚动条位置\n\n if (scroll_position) {\n window.scrollTo(0, scroll_position);\n scroll_position = 0;\n } // 绑定加载更多\n\n\n $window.on('scroll', actions.infiniteLoad);\n },\n onDestroy: () => (_, actions) => {\n $window.off('scroll', actions.infiniteLoad);\n },\n\n /**\n * 切换 Tab 之后\n */\n afterChangeTab: () => (state, actions) => {\n const tabName = tabs[tabIndex];\n const TAB_NAME = tabName.toUpperCase();\n\n if (tabName === TABNAME_RECENT) {\n actions.setTitle('最新文章');\n } else if (tabName === TABNAME_POPULAR) {\n actions.setTitle('近期热门文章');\n } else {\n actions.setTitle('我关注的文章');\n }\n\n actions.setState({\n current_tab: tabName\n });\n\n if (!is_updated[tabs[tabIndex]] && state[`${tabName}_pagination`] && currentTimestamp() - last_update_time[tabs[tabIndex]] < 180) {\n return;\n }\n\n is_updated[tabs[tabIndex]] = false;\n last_update_time[tabs[tabIndex]] = currentTimestamp(); // 从页面中加载初始数据\n\n if (window[`G_ARTICLES_${TAB_NAME}`]) {\n actions.setState({\n [`${tabName}_data`]: window[`G_ARTICLES_${TAB_NAME}`].data,\n [`${tabName}_pagination`]: window[`G_ARTICLES_${TAB_NAME}`].pagination\n }); // 清空页面中的数据,下次需要从 ajax 加载\n\n window[`G_ARTICLES_${TAB_NAME}`] = null; // 若第一页没有填满屏幕,则加载第二页\n\n setTimeout(() => {\n actions.infiniteLoad();\n });\n return;\n } // ajax 加载数据\n\n\n actions.setState({\n [`${tabName}_data`]: [],\n [`${tabName}_pagination`]: null,\n [`${tabName}_loading`]: true\n });\n getArticles(tabName, 1).finally(() => {\n actions.setState({\n [`${tabName}_loading`]: false\n });\n }).then(response => {\n actions.setState({\n [`${tabName}_data`]: response.data,\n [`${tabName}_pagination`]: response.pagination\n }); // 若第一页没有填满屏幕,则加载第二页\n\n setTimeout(() => {\n actions.infiniteLoad();\n });\n }).catch(apiCatch);\n },\n\n /**\n * 绑定下拉加载更多\n */\n infiniteLoad: () => (state, actions) => {\n const tabName = tabs[tabIndex];\n\n if (state[`${tabName}_loading`]) {\n return;\n }\n\n const pagination = state[`${tabName}_pagination`];\n\n if (pagination.page >= pagination.pages) {\n return;\n }\n\n if (document.body.scrollHeight - window.pageYOffset - window.innerHeight > 100) {\n return;\n }\n\n actions.setState({\n [`${tabName}_loading`]: true\n });\n getArticles(tabName, pagination.page + 1).finally(() => {\n actions.setState({\n [`${tabName}_loading`]: false\n });\n }).then(response => {\n actions.setState({\n [`${tabName}_data`]: state[`${tabName}_data`].concat(response.data),\n [`${tabName}_pagination`]: response.pagination\n });\n }).catch(apiCatch);\n },\n\n /**\n * 切换到最近更新\n */\n toRecent: () => {\n tab.show(tabs.indexOf(TABNAME_RECENT));\n },\n\n /**\n * 切换到近期热门\n */\n toPopular: () => {\n tab.show(tabs.indexOf(TABNAME_POPULAR));\n },\n\n /**\n * 切换到我关注的\n */\n toFolliwing: () => {\n tab.show(tabs.indexOf(TABNAME_FOLLOWING));\n },\n\n /**\n * 在其他页面关注了问题后,需要调用该方法,以使下次切换到该页面时重新加载关注列表\n */\n followUpdate: () => {\n is_updated[TABNAME_FOLLOWING] = true;\n },\n\n /**\n * 文章信息更新后(发布评论,关注),需要调用该方法\n */\n articleUpdate: article => (state, actions) => {\n let articles = [];\n tabs.forEach(tabName => {\n articles = state[`${tabName}_data`];\n let hasUpdate = false;\n articles.forEach((_article, i) => {\n if (article.article_id === _article.article_id) {\n hasUpdate = true;\n articles[i] = article;\n }\n });\n\n if (hasUpdate) {\n actions.setState({\n [`${tabName}_data`]: articles\n });\n }\n });\n },\n\n /**\n * 发布提问\n */\n publish: ({\n title,\n content\n }) => (state, actions) => {\n const {\n editor_selected_topic_ids: topic_ids,\n auto_save_key\n } = state;\n\n if (!title) {\n mdui.snackbar('请输入标题');\n return;\n }\n\n if (!topic_ids.length) {\n mdui.snackbar('请选择话题');\n return;\n }\n\n if (!content || content === '


') {\n mdui.snackbar('请输入正文');\n return;\n }\n\n actions.setState({\n publishing: true\n });\n createArticle({\n title,\n topic_ids,\n content_rendered: content,\n include\n }).finally(() => {\n actions.setState({\n publishing: false\n });\n }).then(response => {\n is_updated[TABNAME_RECENT] = true;\n is_updated[TABNAME_POPULAR] = true;\n is_updated[TABNAME_FOLLOWING] = true; // 清空草稿和编辑器内容\n\n window.localStorage.removeItem(`${auto_save_key}-title`);\n window.localStorage.removeItem(`${auto_save_key}-topics`);\n window.localStorage.removeItem(`${auto_save_key}-content`);\n actions.editorClose(); // 到文章详情页\n\n window.G_ARTICLE = response.data;\n location.actions.go(fullPath(`/articles/${response.data.article_id}`));\n }).catch(response => {\n if (response.code === COMMON_FIELD_VERIFY_FAILED) {\n mdui.snackbar(Object.values(response.errors)[0]);\n return;\n }\n\n apiCatch(response);\n });\n },\n\n /**\n * 点击链接后,保存最后访问的文章ID和文章详情\n * @param article\n */\n afterItemClick: article => (_, actions) => {\n window.G_ARTICLE = article;\n scroll_position = window.pageYOffset;\n actions.setState({\n last_visit_id: article.article_id\n });\n }\n};\nexport default extend(as, commonActions, editorActions, topicSelectorActions, userPopoverActions);","export default {\n // 文章ID\n article_id: 0,\n // 当前访问的文章信息\n article: null,\n // 是否正在加载提问数据\n loading: false,\n // 是否正在变更关注状态\n following_article: false\n};","import { unescape } from 'html-escaper';\nimport extend from 'mdui.jq/es/functions/extend';\nimport { get as getArticle } from 'mdclub-sdk-js/es/ArticleApi';\nimport { emit } from '~/utils/pubsub';\nimport apiCatch from '~/utils/errorHandler';\nimport commonActions from '~/utils/actionsAbstract';\nimport voteActions from '~/components/vote/actions';\nimport userPopoverActions from '~/components/user-popover/actions';\nimport stateDefault from './stateDefault';\nconst as = {\n onCreate: ({\n article_id\n }) => (state, actions) => {\n emit('route_update');\n\n if (state.article_id !== article_id) {\n actions.setState(stateDefault);\n actions.setState({\n article_id\n });\n actions.loadArticle();\n }\n },\n loadArticle: () => (state, actions) => {\n // 从页面中加载文章数据\n const loadFromPage = () => {\n const article = window.G_ARTICLE;\n\n if (article) {\n actions.setState({\n article\n });\n window.G_ARTICLE = null;\n actions.setTitle(unescape(article.title));\n }\n\n return article;\n }; // ajax 加载文章数据\n\n\n const loadFromServer = () => {\n actions.setState({\n loading: true\n });\n getArticle({\n article_id: state.article_id,\n include: ['user', 'topics', 'is_following', 'voting']\n }).finally(() => {\n actions.setState({\n loading: false\n });\n }).then(({\n data\n }) => {\n actions.setState({\n article: data\n });\n actions.setTitle(unescape(data.title));\n }).catch(apiCatch);\n };\n\n if (loadFromPage()) {\n return;\n }\n\n loadFromServer();\n }\n};\nexport default extend(as, commonActions, voteActions, userPopoverActions);","export const tabs = ['following', 'recommended'];\nconst state = {\n // 当前所处选项卡 following、recommended\n current_tab: '',\n // 选项卡数组\n tabs,\n // 当前激活的选项卡索引号\n tabIndex: tabs.indexOf('recommended')\n};\ntabs.forEach(tabName => {\n state[`${tabName}_data`] = [];\n state[`${tabName}_pagination`] = null; // 为 null 表示未加载初始数据\n\n state[`${tabName}_loading`] = false;\n});\nexport default state;","import mdui from 'mdui';\nimport extend from 'mdui.jq/es/functions/extend';\nimport { $window } from 'mdui/es/utils/dom';\nimport { getList } from 'mdclub-sdk-js/es/TopicApi';\nimport { getMyFollowingTopics } from 'mdclub-sdk-js/es/UserApi';\nimport currentUser from '~/utils/currentUser';\nimport commonActions from '~/utils/actionsAbstract';\nimport { emit } from '~/utils/pubsub';\nimport apiCatch from '~/utils/errorHandler';\nimport { tabs } from './state';\nconst TABNAME_FOLLOWING = 'following';\nconst TABNAME_RECOMMENDED = 'recommended';\nlet tab; // tab 选项卡实例。若未登录,则没有 tab\n\nlet scroll_position;\nconst is_updated = {\n [TABNAME_FOLLOWING]: false,\n [TABNAME_RECOMMENDED]: false\n};\nconst include = ['is_following'];\nconst per_page = 20;\n\nconst getTopics = (tabName, page) => {\n if (tabName === TABNAME_FOLLOWING) {\n return getMyFollowingTopics({\n page,\n per_page,\n include\n });\n }\n\n return getList({\n page,\n per_page,\n include,\n order: '-follower_count'\n });\n};\n\nconst as = {\n /**\n * 初始化\n */\n onCreate: () => (state, actions) => {\n emit('route_update');\n\n if (currentUser()) {\n tab = new mdui.Tab('.mc-tab');\n actions.setState({\n tabIndex: tab.activeIndex\n });\n tab.$element.on('change.mdui.tab', () => {\n actions.setState({\n tabIndex: tab.activeIndex\n });\n window.scrollTo(0, 0);\n window.history.replaceState({}, '', `#${tabs[tab.activeIndex]}`);\n actions.afterChangeTab();\n });\n }\n\n actions.afterChangeTab(); // 恢复滚动条位置\n\n if (scroll_position) {\n window.scrollTo(0, scroll_position);\n scroll_position = 0;\n }\n\n $window.on('scroll', actions.infiniteLoad);\n },\n onDestroy: () => (_, actions) => {\n $window.off('scroll', actions.infiniteLoad);\n },\n\n /**\n * 切换 Tab 之后\n */\n afterChangeTab: () => (state, actions) => {\n const tabName = tabs[state.tabIndex];\n const TAB_NAME = tabName.toUpperCase();\n\n if (tabName === TABNAME_FOLLOWING) {\n actions.setTitle('我关注的话题');\n } else {\n actions.setTitle('推荐话题');\n }\n\n actions.setState({\n current_tab: tabName\n });\n\n if (!is_updated[tabName] && state[`${tabName}_pagination`]) {\n return;\n }\n\n is_updated[tabName] = false; // 从页面中读取初始数据\n\n if (window[`G_TOPICS_${TAB_NAME}`]) {\n actions.setState({\n [`${tabName}_data`]: window[`G_TOPICS_${TAB_NAME}`].data,\n [`${tabName}_pagination`]: window[`G_TOPICS_${TAB_NAME}`].pagination\n }); // 清空页面中的数据,下次需要从 ajax 加载\n\n window[`G_TOPICS_${TAB_NAME}`] = null; // 若第一页没有填满屏幕,则加载第二页\n\n setTimeout(() => {\n actions.infiniteLoad();\n });\n return;\n } // ajax 加载初始数据\n\n\n actions.setState({\n [`${tabName}_data`]: [],\n [`${tabName}_pagination`]: null\n });\n actions.loadStart(tabName);\n getTopics(tabName, 1).finally(() => {\n actions.loadEnd(tabName);\n }).then(response => {\n actions.setState({\n [`${tabName}_data`]: response.data,\n [`${tabName}_pagination`]: response.pagination\n }); // 若第一页没有填满屏幕,则加载第二页\n\n setTimeout(() => {\n actions.infiniteLoad();\n });\n }).catch(apiCatch);\n },\n\n /**\n * 绑定下拉加载更多\n */\n infiniteLoad: () => (state, actions) => {\n const tabName = tabs[state.tabIndex];\n\n if (state[`${tabName}_loading`]) {\n return;\n }\n\n const pagination = state[`${tabName}_pagination`];\n\n if (pagination.page >= pagination.pages) {\n return;\n }\n\n if (document.body.scrollHeight - window.pageYOffset - window.innerHeight > 100) {\n return;\n }\n\n actions.loadStart(tabName);\n getTopics(tabName, pagination.page + 1).finally(() => {\n actions.loadEnd(tabName);\n }).then(response => {\n actions.setState({\n [`${tabName}_data`]: state[`${tabName}_data`].concat(response.data),\n [`${tabName}_pagination`]: response.pagination\n });\n }).catch(apiCatch);\n },\n\n /**\n * 切换到精选话题\n */\n toRecommended: () => {\n tab.show(tabs.indexOf(TABNAME_RECOMMENDED));\n },\n\n /**\n * 切换到已关注话题\n */\n toFollowing: () => {\n tab.show(tabs.indexOf(TABNAME_FOLLOWING));\n },\n\n /**\n * 在其他页面关注了话题后,需要调用该方法,以使下次切换到该页面时重新加载关注列表\n */\n followUpdate: () => {\n is_updated[TABNAME_FOLLOWING] = true;\n is_updated[TABNAME_RECOMMENDED] = true;\n },\n\n /**\n * 点击链接后,保存话题详情\n * @param topic\n */\n afterItemClick: topic => {\n window.G_TOPIC = topic;\n scroll_position = window.pageYOffset;\n },\n\n /**\n * 开始加载\n */\n loadStart: tabName => ({\n [`${tabName}_loading`]: true\n }),\n\n /**\n * 结束加载\n */\n loadEnd: tabName => ({\n [`${tabName}_loading`]: false\n })\n};\nexport default extend(as, commonActions);","export const tabs = ['questions', 'articles'];\nconst state = {\n // 话题ID\n topic_id: 0,\n // 话题信息\n topic: null,\n // 是否正在加载话题信息\n loading: false,\n // 是否正在变更关注状态\n following_topic: false,\n // 选项卡数组\n tabs,\n // 当前所处的选项卡\n current_tab: '',\n // 最后访问的文章ID\n last_visit_article_id: 0,\n // 最后访问的提问ID\n last_visit_question_id: 0\n};\ntabs.forEach(tabName => {\n state[`${tabName}_order`] = '-update_time';\n state[`${tabName}_data`] = [];\n state[`${tabName}_pagination`] = null;\n state[`${tabName}_loading`] = false;\n});\nexport default state;","import mdui from 'mdui';\nimport extend from 'mdui.jq/es/functions/extend';\nimport { $window } from 'mdui/es/utils/dom';\nimport { unescape } from 'html-escaper';\nimport { get as getTopic, getArticles, getQuestions } from 'mdclub-sdk-js/es/TopicApi';\nimport commonActions from '~/utils/actionsAbstract';\nimport userPopoverActions from '~/components/user-popover/actions';\nimport { emit } from '~/utils/pubsub';\nimport apiCatch from '~/utils/errorHandler';\nimport stateDefault, { tabs } from './stateDefault';\nconst TABNAME_QUESTIONS = 'questions'; // const TABNAME_ARTICLES = 'articles';\n\nlet tab;\nlet tabIndex = tabs.indexOf(TABNAME_QUESTIONS);\nlet scroll_position;\nconst include = ['user', 'topics', 'is_following'];\nconst per_page = 20;\nconst as = {\n /**\n * 加载提问列表或文字列表\n */\n getContexts: ({\n tabName,\n page\n }) => state => {\n const params = {\n topic_id: state.topic_id,\n page,\n per_page,\n include,\n order: state[`${tabName}_order`]\n };\n\n if (tabName === TABNAME_QUESTIONS) {\n return getQuestions(params);\n }\n\n return getArticles(params);\n },\n onCreate: ({\n topic_id\n }) => (state, actions) => {\n emit('route_update');\n tab = new mdui.Tab('.mc-tab');\n tabIndex = tab.activeIndex;\n\n if (state.topic_id !== topic_id) {\n actions.setState(stateDefault);\n actions.setState({\n topic_id\n });\n actions.loadTopic();\n actions.afterChangeTab();\n }\n\n tab.$element.on('change.mdui.tab', () => {\n tabIndex = tab.activeIndex;\n window.scrollTo(0, 0);\n window.history.replaceState({}, '', `#${tabs[tabIndex]}`);\n actions.afterChangeTab();\n }); // 恢复滚动条位置\n\n if (scroll_position) {\n window.scrollTo(0, scroll_position);\n scroll_position = 0;\n } // 绑定加载更多\n\n\n $window.on('scroll', actions.infiniteLoad);\n },\n onDestroy: () => (_, actions) => {\n $window.off('scroll', actions.infiniteLoad);\n },\n loadTopic: () => (state, actions) => {\n // 从页面中加载话题数据\n const loadFromPage = () => {\n const topic = window.G_TOPIC;\n\n if (topic) {\n actions.setState({\n topic\n });\n window.G_TOPIC = null;\n actions.setTitle(unescape(topic.name));\n }\n\n return topic;\n }; // ajax 加载话题数据\n\n\n const loadFromServer = () => {\n actions.setState({\n loading: true\n });\n getTopic({\n topic_id: state.topic_id,\n include: ['is_following']\n }).finally(() => {\n actions.setState({\n loading: false\n });\n }).then(({\n data\n }) => {\n actions.setState({\n topic: data\n });\n actions.setTitle(unescape(data.name));\n }).catch(apiCatch);\n };\n\n if (loadFromPage()) {\n return;\n }\n\n loadFromServer();\n },\n afterChangeTab: () => (state, actions) => {\n const tabName = tabs[tabIndex];\n const TAB_NAME = tabName.toUpperCase();\n actions.setState({\n current_tab: tabName\n });\n\n if (state[`${tabName}_pagination`]) {\n return;\n } // 从页面中加载初始数据\n\n\n if (window[`G_TOPIC_${TAB_NAME}`]) {\n actions.setState({\n [`${tabName}_data`]: window[`G_TOPIC_${TAB_NAME}`].data,\n [`${tabName}_pagination`]: window[`G_TOPIC_${TAB_NAME}`].pagination\n }); // 清空页面中的数据,下次需要从 ajax 加载\n\n window[`G_TOPIC_${TAB_NAME}`] = null; // 若第一页没有填满屏幕,则加载第二页\n\n setTimeout(() => {\n actions.infiniteLoad();\n });\n return;\n } // ajax 加载数据\n\n\n actions.setState({\n [`${tabName}_data`]: [],\n [`${tabName}_pagination`]: null,\n [`${tabName}_loading`]: true\n });\n actions.getContexts({\n tabName,\n page: 1\n }).finally(() => {\n actions.setState({\n [`${tabName}_loading`]: false\n });\n }).then(response => {\n actions.setState({\n [`${tabName}_data`]: response.data,\n [`${tabName}_pagination`]: response.pagination\n }); // 若第一页没有填满屏幕,则加载第二页\n\n setTimeout(() => {\n actions.infiniteLoad();\n });\n }).catch(apiCatch);\n },\n\n /**\n * 绑定下拉加载更多\n */\n infiniteLoad: () => (state, actions) => {\n const tabName = tabs[tabIndex];\n\n if (state[`${tabName}_loading`]) {\n return;\n }\n\n const pagination = state[`${tabName}_pagination`];\n\n if (pagination.page >= pagination.pages) {\n return;\n }\n\n if (document.body.scrollHeight - window.pageYOffset - window.innerHeight > 100) {\n return;\n }\n\n actions.setState({\n [`${tabName}_loading`]: true\n });\n actions.getContexts({\n tabName,\n page: pagination.page + 1\n }).finally(() => {\n actions.setState({\n [`${tabName}_loading`]: false\n });\n }).then(response => {\n actions.setState({\n [`${tabName}_data`]: state[`${tabName}_data`].concat(response.data),\n [`${tabName}_pagination`]: response.pagination\n });\n }).catch(apiCatch);\n },\n\n /**\n * 点击链接后,保存最后访问的提问ID和提问详情\n * @param context 提问或文字信息\n */\n afterItemClick: context => (_, actions) => {\n const tabName = tabs[tabIndex];\n scroll_position = window.pageYOffset;\n\n if (tabName === TABNAME_QUESTIONS) {\n window.G_QUESTION = context;\n actions.setState({\n last_visit_question_id: context.question_id\n });\n } else {\n window.G_ARTICLE = context;\n actions.setState({\n last_visit_article_id: context.article_id\n });\n }\n },\n\n /**\n * 切换排序方式\n */\n changeOrder: order => (state, actions) => {\n const tabName = tabs[tabIndex];\n\n if (order === state[`${tabName}_order`]) {\n return;\n }\n\n actions.setState({\n [`${tabName}_order`]: order,\n [`${tabName}_data`]: [],\n [`${tabName}_pagination`]: null\n });\n actions.afterChangeTab();\n }\n};\nexport default extend(as, commonActions, userPopoverActions);","export const tabs = ['followees', 'followers', 'recommended'];\nconst state = {\n // 当前所处选项卡 followees、followers、recommended\n current_tab: '',\n // 选项卡数组\n tabs,\n // 当前激活的选项卡索引号\n tabIndex: tabs.indexOf('recommended')\n};\ntabs.forEach(tabName => {\n state[`${tabName}_data`] = [];\n state[`${tabName}_pagination`] = null; // 为 null 表示未加载初始数据\n\n state[`${tabName}_loading`] = false;\n});\nexport default state;","import mdui from 'mdui';\nimport extend from 'mdui.jq/es/functions/extend';\nimport { $window } from 'mdui/es/utils/dom';\nimport { getList, getMyFollowees, getMyFollowers } from 'mdclub-sdk-js/es/UserApi';\nimport currentUser from '~/utils/currentUser';\nimport commonActions from '~/utils/actionsAbstract';\nimport { emit } from '~/utils/pubsub';\nimport apiCatch from '~/utils/errorHandler';\nimport { tabs } from './state';\nconst TABNAME_FOLLOWEES = 'followees';\nconst TABNAME_FOLLOWERS = 'followers';\nconst TABNAME_RECOMMENDED = 'recommended';\nlet tab; // tab 选项卡实例。若未登录,则没有 tab\n\nlet scroll_position;\nconst is_updated = {\n [TABNAME_FOLLOWEES]: false,\n // 已关注列表是否有更新,有更新则切换到该选项卡时需要重新加载\n [TABNAME_FOLLOWERS]: false,\n // 关注者列表是否有更新\n [TABNAME_RECOMMENDED]: false // 推荐列表是否有更新\n\n};\nconst include = ['is_following', 'is_me'];\nconst per_page = 20;\n\nconst getUsers = (tabName, page) => {\n if (tabName === TABNAME_FOLLOWEES) {\n return getMyFollowees({\n include,\n page,\n per_page\n });\n }\n\n if (tabName === TABNAME_FOLLOWERS) {\n return getMyFollowers({\n include,\n page,\n per_page\n });\n }\n\n return getList({\n include,\n page,\n per_page,\n order: '-follower_count'\n });\n};\n\nconst as = {\n /**\n * 初始化\n */\n onCreate: () => (_, actions) => {\n emit('route_update');\n\n if (currentUser()) {\n tab = new mdui.Tab('.mc-tab');\n actions.setState({\n tabIndex: tab.activeIndex\n });\n tab.$element.on('change.mdui.tab', () => {\n actions.setState({\n tabIndex: tab.activeIndex\n });\n window.scrollTo(0, 0);\n window.history.replaceState({}, '', `#${tabs[tab.activeIndex]}`);\n actions.afterChangeTab();\n });\n }\n\n actions.afterChangeTab(); // 恢复滚动条位置\n\n if (scroll_position) {\n window.scrollTo(0, scroll_position);\n scroll_position = 0;\n } // 绑定加载更多\n\n\n $window.on('scroll', actions.infiniteLoad);\n },\n onDestroy: () => (_, actions) => {\n $window.off('scroll', actions.infiniteLoad);\n },\n\n /**\n * 切换 Tab 之后\n */\n afterChangeTab: () => (state, actions) => {\n const tabName = tabs[state.tabIndex];\n const TAB_NAME = tabName.toUpperCase();\n\n if (tabName === TABNAME_FOLLOWEES) {\n actions.setTitle('我关注的人');\n } else if (tabName === TABNAME_FOLLOWERS) {\n actions.setTitle('我的关注者');\n } else {\n actions.setTitle('推荐人脉');\n }\n\n actions.setState({\n current_tab: tabName\n });\n\n if (!is_updated[tabName] && state[`${tabName}_pagination`]) {\n return;\n }\n\n is_updated[tabName] = false; // 从页面中加载初始数据\n\n if (window[`G_USERS_${TAB_NAME}`]) {\n actions.setState({\n [`${tabName}_data`]: window[`G_USERS_${TAB_NAME}`].data,\n [`${tabName}_pagination`]: window[`G_USERS_${TAB_NAME}`].pagination\n }); // 清空页面中的数据,下次需要从 ajax 加载\n\n window[`G_USERS_${TAB_NAME}`] = null; // 若第一页没有填满屏幕,则加载第二页\n\n setTimeout(() => {\n actions.infiniteLoad();\n });\n return;\n } // ajax 加载数据\n\n\n actions.setState({\n [`${tabName}_data`]: [],\n [`${tabName}_pagination`]: null\n });\n actions.loadStart(tabName);\n getUsers(tabName, 1).finally(() => {\n actions.loadEnd(tabName);\n }).then(response => {\n actions.setState({\n [`${tabName}_data`]: response.data,\n [`${tabName}_pagination`]: response.pagination\n }); // 若第一页没有填满屏幕,则加载第二页\n\n setTimeout(() => {\n actions.infiniteLoad();\n });\n }).catch(apiCatch);\n },\n\n /**\n * 绑定下拉加载更多\n */\n infiniteLoad: () => (state, actions) => {\n const tabName = tabs[state.tabIndex];\n\n if (state[`${tabName}_loading`]) {\n return;\n }\n\n const pagination = state[`${tabName}_pagination`];\n\n if (pagination.page >= pagination.pages) {\n return;\n }\n\n if (document.body.scrollHeight - window.pageYOffset - window.innerHeight > 100) {\n return;\n }\n\n actions.loadStart(tabName);\n getUsers(tabName, pagination.page + 1).finally(() => {\n actions.loadEnd(tabName);\n }).then(response => {\n actions.setState({\n [`${tabName}_data`]: state[`${tabName}_data`].concat(response.data),\n [`${tabName}_pagination`]: response.pagination\n });\n }).catch(apiCatch);\n },\n\n /**\n * 切换到推荐用户\n */\n toRecommended: () => {\n tab.show(tabs.indexOf(TABNAME_RECOMMENDED));\n },\n\n /**\n * 在其他页面关注了用户后,需要调用该方法,以使下次切换到该页面时重新加载关注列表\n */\n followUpdate: () => {\n is_updated[TABNAME_FOLLOWEES] = true;\n is_updated[TABNAME_RECOMMENDED] = true;\n },\n\n /**\n * 点击链接后,保存用户信息\n */\n afterItemClick: user => {\n window.G_INTERVIEWEE = user;\n scroll_position = window.pageYOffset;\n },\n\n /**\n * 开始加载\n */\n loadStart: tabName => ({\n [`${tabName}_loading`]: true\n }),\n\n /**\n * 结束加载\n */\n loadEnd: tabName => ({\n [`${tabName}_loading`]: false\n })\n};\nexport default extend(as, commonActions);","export const tabs = ['questions', 'answers', 'articles'];\nconst state = {\n // 被访问者的用户信息\n interviewee: null,\n // 是否正在加载\n loading: false,\n // 是否正在更新被访问者的关注状态\n following_interviewee: false,\n // 是否正在提交个人信息\n edit_info_submitting: false,\n // 是否把详细信息折叠\n profile_fold: true,\n // 选项卡数组\n tabs,\n // 当前所处的选项卡\n current_tab: '',\n // 最后访问的文章ID\n last_visit_article_id: 0,\n // 最后访问的提问ID\n last_visit_question_id: 0,\n // 最后访问的回答ID\n last_visit_answer_id: 0\n};\ntabs.forEach(tabName => {\n if (tabName === 'questions') {\n state[`${tabName}_order`] = '-update_time';\n } else {\n state[`${tabName}_order`] = '-create_time';\n }\n\n state[`${tabName}_data`] = [];\n state[`${tabName}_pagination`] = null;\n state[`${tabName}_loading`] = false;\n});\nexport default state;","import $ from 'mdui.jq';\nimport mdui from 'mdui';\nimport extend from 'mdui.jq/es/functions/extend';\nimport { $window } from 'mdui/es/utils/dom';\nimport { get as getUser, deleteMyCover, deleteMyAvatar, updateMine, getArticles, getQuestions, getAnswers } from 'mdclub-sdk-js/es/UserApi';\nimport commonActions from '~/utils/actionsAbstract';\nimport userPopoverActions from '~/components/user-popover/actions';\nimport { emit } from '~/utils/pubsub';\nimport apiCatch from '~/utils/errorHandler';\nimport stateDefault, { tabs } from './stateDefault';\n/**\n * 当前访问的用户ID\n */\n\nlet interviewee_id;\n/**\n * 编辑个人资料的弹框实例\n */\n\nlet editInfoDialog;\nconst TABNAME_QUESTIONS = 'questions';\nconst TABNAME_ARTICLES = 'articles'; // const TABNAME_ANSWERS = 'answers';\n\nlet tab;\nlet tabIndex = tabs.indexOf(TABNAME_QUESTIONS);\nlet scroll_position;\nconst per_page = 20;\nconst as = {\n /**\n * 加载提问列表、回答列表或文字列表\n */\n getContexts: ({\n tabName,\n page\n }) => state => {\n const params = {\n user_id: interviewee_id,\n page,\n per_page,\n include: ['user', 'topics', 'is_following'],\n order: state[`${tabName}_order`]\n };\n\n if (tabName === TABNAME_QUESTIONS) {\n return getQuestions(params);\n }\n\n if (tabName === TABNAME_ARTICLES) {\n return getArticles(params);\n }\n\n params.include = ['user', 'question', 'voting'];\n return getAnswers(params);\n },\n onCreate: props => (_, actions) => {\n emit('route_update');\n tab = new mdui.Tab('.mc-tab');\n tabIndex = tab.activeIndex;\n\n if (interviewee_id !== props.interviewee_id) {\n interviewee_id = props.interviewee_id;\n actions.setState(stateDefault);\n actions.loadInterviewee();\n actions.afterChangeTab();\n }\n\n tab.$element.on('change.mdui.tab', () => {\n tabIndex = tab.activeIndex;\n window.history.replaceState({}, '', `#${tabs[tabIndex]}`);\n actions.afterChangeTab();\n }); // 恢复滚动条位置\n\n if (scroll_position) {\n window.scrollTo(0, scroll_position);\n scroll_position = 0;\n } // 绑定加载更多\n\n\n $window.on('scroll', actions.infiniteLoad);\n },\n onDestroy: () => (_, actions) => {\n $window.off('scroll', actions.infiniteLoad);\n },\n\n /**\n * 加载当前被访问用户数据\n */\n loadInterviewee: () => (state, actions) => {\n // 访问自己的页面\n if (state.user && interviewee_id === state.user.user_id) {\n actions.setTitle(`${state.user.username}的个人主页`);\n actions.setState({\n interviewee: state.user\n });\n window.G_INTERVIEWEE = null;\n return;\n } // 从页面中加载用户数据\n\n\n const interviewee = window.G_INTERVIEWEE;\n\n if (interviewee) {\n actions.setState({\n interviewee\n });\n window.G_INTERVIEWEE = null;\n actions.setTitle(`${interviewee.username}的个人主页`);\n return;\n } // 从服务器加载用户数据\n\n\n actions.setState({\n loading: true,\n interviewee: null\n });\n getUser({\n user_id: interviewee_id,\n include: ['is_following']\n }).finally(() => {\n actions.setState({\n loading: false\n });\n }).then(({\n data\n }) => {\n actions.setState({\n interviewee: data\n });\n actions.setTitle(`${data.username}的个人主页`);\n }).catch(apiCatch);\n },\n afterChangeTab: () => (state, actions) => {\n const tabName = tabs[tabIndex];\n const TAB_NAME = tabName.toUpperCase();\n actions.setState({\n current_tab: tabName\n });\n\n if (state[`${tabName}_pagination`]) {\n return;\n } // 从页面中加载初始数据\n\n\n if (window[`G_USER_${TAB_NAME}`]) {\n actions.setState({\n [`${tabName}_data`]: window[`G_USER_${TAB_NAME}`].data,\n [`${tabName}_pagination`]: window[`G_USER_${TAB_NAME}`].pagination\n }); // 清空页面中的数据,下次需要从 ajax 加载\n\n window[`G_USER_${TAB_NAME}`] = null; // 若第一页没有填满屏幕,则加载第二页\n\n setTimeout(() => {\n actions.infiniteLoad();\n });\n return;\n } // ajax 加载数据\n\n\n actions.setState({\n [`${tabName}_data`]: [],\n [`${tabName}_pagination`]: null,\n [`${tabName}_loading`]: true\n });\n actions.getContexts({\n tabName,\n page: 1\n }).finally(() => {\n actions.setState({\n [`${tabName}_loading`]: false\n });\n }).then(response => {\n actions.setState({\n [`${tabName}_data`]: response.data,\n [`${tabName}_pagination`]: response.pagination\n }); // 若第一页没有填满屏幕,则加载第二页\n\n setTimeout(() => {\n actions.infiniteLoad();\n });\n }).catch(apiCatch);\n },\n\n /**\n * 绑定下拉加载更多\n */\n infiniteLoad: () => (state, actions) => {\n const tabName = tabs[tabIndex];\n\n if (state[`${tabName}_loading`]) {\n return;\n }\n\n const pagination = state[`${tabName}_pagination`];\n\n if (pagination.page >= pagination.pages) {\n return;\n }\n\n if (document.body.scrollHeight - window.pageYOffset - window.innerHeight > 100) {\n return;\n }\n\n actions.setState({\n [`${tabName}_loading`]: true\n });\n actions.getContexts({\n tabName,\n page: pagination.page + 1\n }).finally(() => {\n actions.setState({\n [`${tabName}_loading`]: false\n });\n }).then(response => {\n actions.setState({\n [`${tabName}_data`]: state[`${tabName}_data`].concat(response.data),\n [`${tabName}_pagination`]: response.pagination\n });\n }).catch(apiCatch);\n },\n\n /**\n * 点击链接后,保存最后访问的提问ID和提问详情\n * @param context 提问或文字信息\n */\n afterItemClick: context => (_, actions) => {\n const tabName = tabs[tabIndex];\n scroll_position = window.pageYOffset;\n\n if (tabName === TABNAME_QUESTIONS) {\n window.G_QUESTION = context;\n actions.setState({\n last_visit_question_id: context.question_id\n });\n } else if (tabName === TABNAME_ARTICLES) {\n window.G_ARTICLE = context;\n actions.setState({\n last_visit_article_id: context.article_id\n });\n } else {\n window.G_ANSWER = context;\n actions.setState({\n last_visit_answer_id: context.answer_id\n });\n }\n },\n\n /**\n * 切换排序方式\n */\n changeOrder: order => (state, actions) => {\n const tabName = tabs[tabIndex];\n\n if (order === state[`${tabName}_order`]) {\n return;\n }\n\n actions.setState({\n [`${tabName}_order`]: order,\n [`${tabName}_data`]: [],\n [`${tabName}_pagination`]: null\n });\n actions.afterChangeTab();\n },\n\n /**\n * 删除头像\n */\n deleteAvatar: e => (state, actions) => {\n e.preventDefault();\n mdui.confirm('系统将删除现有头像,并随机生成一个新头像。', '要删除现有头像吗?', () => {\n deleteMyAvatar().then(({\n data\n }) => {\n const {\n user\n } = state;\n user.avatar = data;\n actions.setState({\n user\n });\n }).catch(apiCatch);\n }, () => {}, {\n confirmText: '删除',\n cancelText: '取消'\n });\n },\n\n /**\n * 删除封面\n */\n deleteCover: e => (state, actions) => {\n e.preventDefault();\n mdui.confirm('系统将删除现有封面,并重置为默认封面。', '要删除现有封面吗?', () => {\n deleteMyCover().then(({\n data\n }) => {\n const {\n user\n } = state;\n user.cover = data;\n actions.setState({\n user\n });\n }).catch(apiCatch);\n }, () => {}, {\n confirmText: '删除',\n cancelText: '取消'\n });\n },\n\n /**\n * 更新个人信息\n */\n updateUserInfo: () => (_, actions) => {\n if (editInfoDialog) {\n editInfoDialog.open();\n return;\n }\n\n const $dialog = $('#page-user .edit-info');\n editInfoDialog = new mdui.Dialog($dialog, {\n closeOnConfirm: false\n });\n $dialog.on('open.mdui.dialog', () => {\n $dialog.find('.mdui-textfield-input')[0].focus();\n });\n $dialog.on('opened.mdui.dialog', () => {\n editInfoDialog.handleUpdate();\n });\n $dialog.on('confirm.mdui.dialog', () => {\n const formData = {\n include: ['is_following']\n };\n $dialog.find('form').serializeArray().forEach(item => {\n formData[item.name] = item.value;\n });\n actions.setState({\n edit_info_submitting: true\n });\n updateMine(formData).finally(() => {\n actions.setState({\n edit_info_submitting: false\n });\n }).then(({\n data\n }) => {\n const updateData = {\n user: data\n };\n\n if (data.user_id === interviewee_id) {\n updateData.interviewee = data;\n }\n\n actions.setState(updateData);\n editInfoDialog.close();\n mdui.snackbar('更新成功');\n }).catch(apiCatch);\n });\n editInfoDialog.open();\n }\n};\nexport default extend(as, commonActions, userPopoverActions);","import $ from 'mdui.jq';\nimport mdui from 'mdui';\nimport extend from 'mdui.jq/es/functions/extend';\nimport { COMMON_FIELD_VERIFY_FAILED } from 'mdclub-sdk-js/es/errors';\nimport { generate as generateCaptcha } from 'mdclub-sdk-js/es/CaptchaApi';\nimport { login } from 'mdclub-sdk-js/es/TokenApi';\nimport commonActions from '~/utils/actionsAbstract';\nimport { setCookie } from '~/utils/cookie';\nimport { emit } from '~/utils/pubsub';\nimport apiCatch from '~/utils/errorHandler';\nlet dialog;\nlet $name;\nlet $password;\nlet $captchaCode;\nconst as = {\n /**\n * 响应输入框输入事件\n */\n onInput: e => {\n const input = e.target;\n return {\n [input.name]: input.value,\n [`${input.name}_msg`]: ''\n };\n },\n\n /**\n * 初始化\n */\n onCreate: props => {\n const $element = $(props.element).mutation();\n dialog = new mdui.Dialog($element, {\n modal: true,\n history: false\n });\n $name = $element.find('[name=\"name\"]');\n $password = $element.find('[name=\"password\"]');\n $captchaCode = $element.find('[name=\"captcha_code\"]');\n $element.on('open.mdui.dialog', () => {\n $name[0].focus();\n });\n },\n\n /**\n * 打开登陆框\n */\n open: () => {\n dialog.open();\n },\n\n /**\n * 关闭登录界面对话框\n */\n close: () => {\n if (dialog) {\n dialog.close();\n }\n },\n\n /**\n * 打开注册对话框\n */\n toRegister: () => {\n dialog.close();\n emit('register_open');\n },\n\n /**\n * 打开重置密码对话框\n */\n toReset: () => {\n dialog.close();\n emit('reset_open');\n },\n\n /**\n * 刷新验证码\n */\n refreshCaptcha: () => (_, actions) => {\n generateCaptcha().then(({\n data: {\n captcha_token,\n captcha_image\n }\n }) => {\n actions.setState({\n captcha_token,\n captcha_image,\n captcha_code: ''\n });\n setTimeout(() => {\n $captchaCode[0].focus();\n });\n }).catch(apiCatch);\n },\n\n /**\n * 执行登录\n */\n login: e => (state, actions) => {\n e.preventDefault();\n actions.setState({\n submitting: true\n });\n const loginData = {\n name: state.name,\n password: state.password,\n device: navigator.userAgent\n };\n\n if (state.captcha_token) {\n loginData.captcha_token = state.captcha_token;\n loginData.captcha_code = state.captcha_code;\n }\n\n login(loginData).then(({\n data\n }) => {\n setCookie('token', data.token);\n window.location.reload();\n }).catch(response => {\n actions.setState({\n submitting: false,\n captcha_token: response.captcha_token || '',\n captcha_image: response.captcha_image || '',\n captcha_code: ''\n }); // 字段验证失败\n\n if (response.code === COMMON_FIELD_VERIFY_FAILED) {\n const name_msg = response.errors.name || '';\n const password_msg = response.errors.password || '';\n const captcha_code_msg = response.errors.captcha_code || '';\n actions.setState({\n name_msg,\n password_msg,\n captcha_code_msg\n });\n\n if (name_msg) {\n $name[0].focus();\n } else if (password_msg) {\n $password[0].focus();\n } else if (captcha_code_msg) {\n $captchaCode[0].focus();\n }\n\n return;\n } // 其他错误\n\n\n apiCatch(response);\n });\n }\n};\nexport default extend(as, commonActions);","import $ from 'mdui.jq';\nimport mdui from 'mdui';\nimport extend from 'mdui.jq/es/functions/extend';\nimport { COMMON_FIELD_VERIFY_FAILED, COMMON_EMAIL_VERIFY_EXPIRED } from 'mdclub-sdk-js/es/errors';\nimport { generate as generateCaptcha } from 'mdclub-sdk-js/es/CaptchaApi';\nimport { register, sendRegisterEmail } from 'mdclub-sdk-js/es/UserApi';\nimport { login } from 'mdclub-sdk-js/es/TokenApi';\nimport { setCookie } from '~/utils/cookie';\nimport { emit } from '~/utils/pubsub';\nimport apiCatch from '~/utils/errorHandler';\nimport commonActions from '~/utils/actionsAbstract';\nlet dialog;\nlet $email;\nlet $emailCode;\nlet $username;\nlet $password;\nlet $captchaCode;\nconst as = {\n /**\n * 响应输入框输入事件\n */\n onInput: e => {\n const input = e.target;\n return {\n [input.name]: input.value,\n [`${input.name}_msg`]: ''\n };\n },\n\n /**\n * 初始化\n */\n onCreate: props => state => {\n const $element = $(props.element).mutation();\n dialog = new mdui.Dialog($element, {\n modal: true,\n history: false\n });\n $email = $element.find('[name=\"email\"]');\n $emailCode = $element.find('[name=\"email_code\"]');\n $username = $element.find('[name=\"username\"]');\n $password = $element.find('[name=\"password\"]');\n $captchaCode = $element.find('[name=\"captcha_code\"]');\n $element.on('open.mdui.dialog', () => {\n if (state.email_valid) {\n $username[0].focus();\n } else {\n $email[0].focus();\n }\n });\n },\n\n /**\n * 打开注册界面对话框\n */\n open: () => {\n dialog.open();\n },\n\n /**\n * 关闭注册界面对话框\n */\n close: () => {\n if (dialog) {\n dialog.close();\n }\n },\n\n /**\n * 打开登录对话框\n */\n toLogin: () => {\n dialog.close();\n emit('login_open');\n },\n\n /**\n * 刷新验证码\n */\n refreshCaptcha: () => (_, actions) => {\n generateCaptcha().then(({\n data: {\n captcha_token,\n captcha_image\n }\n }) => {\n actions.setState({\n captcha_token,\n captcha_image,\n captcha_code: ''\n });\n setTimeout(() => {\n $captchaCode[0].focus();\n }, 0);\n }).catch(apiCatch);\n },\n\n /**\n * 60秒倒计时\n */\n countdown: () => (state, actions) => {\n if (state.resend_countdown > 0) {\n actions.setState({\n resend_countdown: state.resend_countdown - 1\n });\n setTimeout(actions.countdown, 1000);\n } else {\n actions.setState({\n show_resend_countdown: false\n });\n }\n },\n\n /**\n * 开始重新发送倒计时\n */\n sendCountdown: () => (_, actions) => {\n actions.setState({\n show_resend_countdown: true,\n resend_countdown: 60\n });\n actions.countdown();\n },\n\n /**\n * 发送邮件\n */\n sendEmail: () => (state, actions) => {\n if (!$email[0].validity.valid) {\n $email[0].focus();\n return;\n }\n\n if (state.captcha_token && !$captchaCode[0].validity.valid) {\n actions.setState({\n captcha_code_msg: '请输入图形验证码'\n });\n $captchaCode[0].focus();\n return;\n }\n\n actions.setState({\n sending: true\n });\n const formData = {\n email: state.email\n };\n\n if (state.captcha_token) {\n formData.captcha_token = state.captcha_token;\n formData.captcha_code = state.captcha_code;\n }\n\n sendRegisterEmail(formData).finally(() => {\n actions.setState({\n sending: false,\n captcha_token: '',\n captcha_image: '',\n captcha_code: '',\n email_code: '',\n email_code_msg: ''\n });\n }).then(() => {\n mdui.snackbar('邮箱验证码已发送');\n actions.sendCountdown();\n }).catch(response => {\n actions.setState({\n captcha_token: response.captcha_token || '',\n captcha_image: response.captcha_image || ''\n }); // 字段验证失败\n\n if (response.code === COMMON_FIELD_VERIFY_FAILED) {\n const email_msg = response.errors.email || '';\n const captcha_code_msg = response.errors.captcha_code || '';\n actions.setState({\n email_msg,\n captcha_code_msg\n });\n\n if (email_msg) {\n $email[0].focus();\n } else if (captcha_code_msg) {\n $captchaCode[0].focus();\n }\n\n return;\n } // 其他错误\n\n\n apiCatch(response);\n });\n },\n\n /**\n * 回到上一步\n */\n prevStep: () => (_, actions) => {\n actions.setState({\n email_valid: false\n });\n },\n\n /**\n * 点击下一步\n */\n nextStep: e => (state, actions) => {\n e.preventDefault();\n actions.setState({\n verifying: true\n });\n const formData = {\n email: state.email,\n email_code: state.email_code\n }; // 没有传入 username 和 password 参数,调用接口一定会返回错误\n // 若返回字段验证失败,且不含 email 和 email_code,则表示邮箱验证通过\n\n register(formData).finally(() => {\n actions.setState({\n verifying: false\n });\n }).catch(response => {\n if (response.code === COMMON_FIELD_VERIFY_FAILED) {\n // 不含 email 和 email_code 即表示邮箱验证通过\n if (!response.errors.email && !response.errors.email_code) {\n actions.setState({\n email_valid: true\n });\n setTimeout(() => {\n $username[0].focus();\n }, 0);\n return;\n } // 邮箱验证未通过\n\n\n const email_msg = response.errors.email || '';\n const email_code_msg = response.errors.email_code || '';\n actions.setState({\n email_msg,\n email_code_msg\n });\n\n if (email_msg) {\n $email[0].focus();\n } else if (email_code_msg) {\n $emailCode[0].focus();\n }\n\n return;\n } // 邮箱验证码已失效,需要重新发送邮件\n\n\n if (response.code === COMMON_EMAIL_VERIFY_EXPIRED) {\n mdui.snackbar('验证码已失效,请重新发送邮箱验证码', {\n timeout: 10000\n });\n actions.setState({\n email_code: '',\n email_code_msg: ''\n });\n return;\n } // 其他错误\n\n\n apiCatch(response);\n });\n },\n\n /**\n * 提交注册\n */\n register: e => (state, actions) => {\n e.preventDefault();\n actions.setState({\n submitting: true\n });\n const registerData = {\n email: state.email,\n email_code: state.email_code,\n username: state.username,\n password: state.password\n };\n const loginData = {\n name: state.username,\n password: state.password,\n device: window.navigator.userAgent\n };\n register(registerData).then(response => {\n emit('user_update', response.data);\n return login(loginData);\n }).finally(() => {\n actions.setState({\n submitting: false\n });\n }).then(({\n data\n }) => {\n setCookie('token', data.token);\n window.location.reload();\n }).catch(response => {\n // 字段验证失败\n if (response.code === COMMON_FIELD_VERIFY_FAILED) {\n const email_msg = response.errors.email || '';\n const email_code_msg = response.errors.email_code || '';\n const username_msg = response.errors.username || '';\n const password_msg = response.errors.password || ''; // 如果是邮箱或验证码错误,回到上一步\n\n if (email_msg || email_code_msg) {\n actions.setState({\n email_valid: false,\n email_msg,\n email_code_msg\n });\n\n if (email_msg) {\n $email[0].focus();\n } else if (email_code_msg) {\n $emailCode[0].focus();\n }\n\n return;\n } // 用户名或密码错误\n\n\n actions.setState({\n username_msg,\n password_msg\n });\n\n if (username_msg) {\n $username[0].focus();\n } else if (password_msg) {\n $password[0].focus();\n }\n\n return;\n } // 验证码失效,重新验证邮箱,回到上一步\n\n\n if (response.code === COMMON_EMAIL_VERIFY_EXPIRED) {\n mdui.snackbar('验证码已失效,请重新发送邮箱验证码', {\n timeout: 10000\n });\n actions.setState({\n email_valid: false,\n email_code: '',\n email_code_msg: ''\n });\n return;\n }\n\n apiCatch(response);\n });\n }\n};\nexport default extend(as, commonActions);","import $ from 'mdui.jq';\nimport mdui from 'mdui';\nimport extend from 'mdui.jq/es/functions/extend';\nimport { COMMON_FIELD_VERIFY_FAILED, COMMON_EMAIL_VERIFY_EXPIRED } from 'mdclub-sdk-js/es/errors';\nimport { generate as generateCaptcha } from 'mdclub-sdk-js/es/CaptchaApi';\nimport { sendPasswordResetEmail, updatePassword } from 'mdclub-sdk-js/es/UserApi';\nimport commonActions from '~/utils/actionsAbstract';\nimport { emit } from '~/utils/pubsub';\nimport apiCatch from '~/utils/errorHandler';\nlet dialog;\nlet $email;\nlet $emailCode;\nlet $captchaCode;\nlet $password;\nlet $passwordRepeat;\nconst as = {\n /**\n * 响应输入框输入事件\n */\n onInput: e => {\n const input = e.target;\n return {\n [input.name]: input.value,\n [`${input.name}_msg`]: ''\n };\n },\n\n /**\n * 初始化\n */\n onCreate: props => state => {\n const $element = $(props.element).mutation();\n dialog = new mdui.Dialog($element, {\n modal: true,\n history: false\n });\n $email = $element.find('[name=\"email\"]');\n $emailCode = $element.find('[name=\"email_code\"]');\n $password = $element.find('[name=\"password\"]');\n $passwordRepeat = $element.find('[name=\"password_repeat\"]');\n $captchaCode = $element.find('[name=\"captcha_code\"]');\n $element.on('open.mdui.dialog', () => {\n if (state.email_valid) {\n $password[0].focus();\n } else {\n $email[0].focus();\n }\n });\n },\n\n /**\n * 打开重置密码对话框\n */\n open: () => {\n dialog.open();\n },\n\n /**\n * 关闭重置密码对话框\n */\n close: () => {\n if (dialog) {\n dialog.close();\n }\n },\n\n /**\n * 打开登录对话框\n */\n toLogin: () => {\n dialog.close();\n emit('login_open');\n },\n\n /**\n * 打开注册对话框\n */\n toRegister: () => {\n dialog.close();\n emit('register_open');\n },\n\n /**\n * 刷新验证码\n */\n refreshCaptcha: () => (_, actions) => {\n generateCaptcha().then(({\n data: {\n captcha_token,\n captcha_image\n }\n }) => {\n actions.setState({\n captcha_token,\n captcha_image,\n captcha_code: ''\n });\n setTimeout(() => {\n $captchaCode[0].focus();\n }, 0);\n }).catch(apiCatch);\n },\n\n /**\n * 60秒倒计时\n */\n countdown: () => (state, actions) => {\n if (state.resend_countdown > 0) {\n actions.setState({\n resend_countdown: state.resend_countdown - 1\n });\n setTimeout(actions.countdown, 1000);\n } else {\n actions.setState({\n show_resend_countdown: false\n });\n }\n },\n\n /**\n * 开始重新发送倒计时\n */\n sendCountdown: () => (_, actions) => {\n actions.setState({\n show_resend_countdown: true,\n resend_countdown: 60\n });\n actions.countdown();\n },\n\n /**\n * 发送邮件\n */\n sendEmail: () => (state, actions) => {\n if (!$email[0].validity.valid) {\n $email[0].focus();\n return;\n }\n\n if (state.captcha_token && !$captchaCode[0].validity.valid) {\n actions.setState({\n captcha_code_msg: '请输入图形验证码'\n });\n $captchaCode[0].focus();\n return;\n }\n\n actions.setState({\n sending: true\n });\n const formData = {\n email: state.email\n };\n\n if (state.captcha_token) {\n formData.captcha_token = state.captcha_token;\n formData.captcha_code = state.captcha_code;\n }\n\n sendPasswordResetEmail(formData).finally(() => {\n actions.setState({\n sending: false,\n captcha_token: '',\n captcha_image: '',\n captcha_code: '',\n email_code: '',\n email_code_msg: ''\n });\n }).then(() => {\n mdui.snackbar('邮箱验证码已发送');\n actions.sendCountdown();\n }).catch(response => {\n actions.setState({\n captcha_token: response.captcha_token || '',\n captcha_image: response.captcha_image || ''\n }); // 字段验证失败\n\n if (response.code === COMMON_FIELD_VERIFY_FAILED) {\n const email_msg = response.errors.email || '';\n const captcha_code_msg = response.errors.captcha_code || '';\n actions.setState({\n email_msg,\n captcha_code_msg\n });\n\n if (email_msg) {\n $email[0].focus();\n } else if (captcha_code_msg) {\n $captchaCode[0].focus();\n }\n\n return;\n } // 其他错误\n\n\n apiCatch(response);\n });\n },\n\n /**\n * 回到上一步\n */\n prevStep: () => (_, actions) => {\n actions.setState({\n email_valid: false\n });\n },\n\n /**\n * 点击下一步\n */\n nextStep: e => (state, actions) => {\n e.preventDefault();\n actions.setState({\n verifying: true\n });\n const formData = {\n email: state.email,\n email_code: state.email_code\n }; // 没有传入 password 参数,调用接口一定会返回错误\n // 若返回字段验证失败,且不含 email 和 email_code,则表示邮箱验证通过\n\n updatePassword(formData).finally(() => {\n actions.setState({\n verifying: false\n });\n }).catch(response => {\n if (response.code === COMMON_FIELD_VERIFY_FAILED) {\n // 不含 email 和 email_code 即表示邮箱验证通过\n if (!response.errors.email && !response.errors.email_code) {\n actions.setState({\n email_valid: true\n });\n setTimeout(() => {\n $password[0].focus();\n }, 0);\n return;\n } // 邮箱验证未通过\n\n\n const email_msg = response.errors.email || '';\n const email_code_msg = response.errors.email_code || '';\n actions.setState({\n email_msg,\n email_code_msg\n });\n\n if (email_msg) {\n $email[0].focus();\n } else if (email_code_msg) {\n $emailCode[0].focus();\n }\n\n return;\n } // 邮箱验证码已失效,需要重新发送邮件\n\n\n if (response.code === COMMON_EMAIL_VERIFY_EXPIRED) {\n mdui.snackbar('验证码已失效,请重新发送邮箱验证码', {\n timeout: 10000\n });\n actions.setState({\n email_code: '',\n email_code_msg: ''\n });\n return;\n } // 其他错误\n\n\n apiCatch(response);\n });\n },\n\n /**\n * 提交新密码\n */\n submit: e => (state, actions) => {\n e.preventDefault(); // 验证两次密码一致\n\n if (state.password !== state.password_repeat) {\n actions.setState({\n password_repeat_msg: '两次输入的密码不一致'\n });\n $passwordRepeat[0].focus();\n return;\n }\n\n actions.setState({\n submitting: true\n });\n const formData = {\n email: state.email,\n email_code: state.email_code,\n password: state.password\n };\n updatePassword(formData).finally(() => {\n actions.setState({\n submitting: false\n });\n }).then(() => {\n mdui.snackbar('重置密码成功');\n dialog.close();\n emit('login_open');\n }).catch(response => {\n // 字段验证失败\n if (response.code === COMMON_FIELD_VERIFY_FAILED) {\n const email_msg = response.errors.email || '';\n const email_code_msg = response.errors.email_code || '';\n const password_msg = response.errors.password || ''; // 如果是邮箱或验证码错误,回到上一步\n\n if (email_msg || email_code_msg) {\n actions.setState({\n email_valid: false,\n email_msg,\n email_code_msg\n });\n\n if (email_msg) {\n $email[0].focus();\n } else if (email_code_msg) {\n $emailCode[0].focus();\n }\n\n return;\n }\n\n actions.setState({\n password_msg\n });\n\n if (password_msg) {\n $password[0].focus();\n }\n\n return;\n } // 邮箱验证码失效,需要重新发送验证码,回到上一步\n\n\n if (response.code === COMMON_EMAIL_VERIFY_EXPIRED) {\n mdui.snackbar('验证码已失效,请重新发送邮箱验证码', {\n timeout: 10000\n });\n actions.setState({\n email_valid: false,\n email_code: '',\n email_code_msg: ''\n });\n return;\n } // 其他错误\n\n\n apiCatch(response);\n });\n }\n};\nexport default extend(as, commonActions);","import { location } from 'hyperapp-router';\nimport $ from 'mdui.jq';\nimport mdui from 'mdui';\nimport extend from 'mdui.jq/es/functions/extend';\nimport { getFollowees, getFollowers } from 'mdclub-sdk-js/es/UserApi';\nimport { getFollowers as getArticleFollowers } from 'mdclub-sdk-js/es/ArticleApi';\nimport { getFollowers as getQuestionFollowers } from 'mdclub-sdk-js/es/QuestionApi';\nimport { getFollowers as getTopicFollowers } from 'mdclub-sdk-js/es/TopicApi';\nimport commonActions from '~/utils/actionsAbstract';\nimport stateDefault from '~/components/users-dialog/stateDefault';\nimport { fullPath } from '~/utils/path';\nimport apiCatch from '~/utils/errorHandler';\nlet dialog;\nlet $dialog;\nlet $content;\nconst service = {\n followees: getFollowees,\n followers: getFollowers,\n topic_followers: getTopicFollowers,\n question_followers: getQuestionFollowers,\n article_followers: getArticleFollowers\n};\nconst paramField = {\n followees: 'user_id',\n followers: 'user_id',\n topic_followers: 'topic_id',\n question_followers: 'question_id',\n article_followers: 'article_id'\n};\nconst as = {\n onCreate: ({\n element\n }) => {\n $dialog = $(element);\n $content = $dialog.find('.mdui-dialog-content');\n },\n\n /**\n * 打开对话框\n * @param props\n * {type: string, id: int}\n * 用户列表类型 followees, followers, topic_followers, question_followers, article_followers\n */\n open: ({\n type,\n id\n }) => (state, actions) => {\n if (!dialog) {\n dialog = new mdui.Dialog('.mc-users-dialog', {\n history: false\n });\n dialog.$element.on('closed.mdui.dialog', () => {\n actions.setState(stateDefault);\n });\n }\n\n actions.setState({\n type,\n data: [],\n pagination: null,\n loading: true\n });\n dialog.open();\n\n const loaded = promise => {\n promise.finally(() => {\n actions.setState({\n loading: false\n });\n }).then(({\n data,\n pagination\n }) => {\n actions.setState({\n data: actions.getState().data.concat(data),\n pagination\n });\n }).catch(apiCatch);\n };\n\n const infiniteLoad = () => {\n if (actions.getState().loading) {\n return;\n }\n\n const {\n pagination\n } = actions.getState();\n\n if (!pagination) {\n return;\n }\n\n if (pagination.page >= pagination.pages) {\n return;\n }\n\n if ($content[0].scrollHeight - $content[0].scrollTop - $content[0].offsetHeight > 100) {\n return;\n }\n\n actions.setState({\n loading: true\n });\n loaded(service[type]({\n [paramField[type]]: id,\n page: pagination.page + 1,\n include: ['is_following', 'is_me']\n }));\n };\n\n loaded(service[type]({\n [paramField[type]]: id,\n include: ['is_following', 'is_me']\n }));\n $content.on('scroll', infiniteLoad);\n $dialog.on('close.mdui.dialog', () => {\n $content.off('scroll', infiniteLoad);\n });\n },\n\n /**\n * 关闭对话框\n */\n close: () => {\n if (dialog) {\n dialog.close();\n }\n },\n\n /**\n * 点击 item\n */\n onItemClick: user_id => {\n location.actions.go(fullPath(`/users/${user_id}`));\n dialog.close();\n }\n};\nexport default extend(as, commonActions);","import mdui from 'mdui';\nimport $ from 'mdui.jq';\nimport extend from 'mdui.jq/es/functions/extend';\nimport { $window, $document } from 'mdui/es/utils/dom';\nimport { createComment as createQuestionComment, getComments as getQuestionComments } from 'mdclub-sdk-js/es/QuestionApi';\nimport { createComment as createAnswerComment, getComments as getAnswerComments } from 'mdclub-sdk-js/es/AnswerApi';\nimport { createComment as createArticleComment, getComments as getArticleComments } from 'mdclub-sdk-js/es/ArticleApi';\nimport { COMMON_FIELD_VERIFY_FAILED } from 'mdclub-sdk-js/es/errors';\nimport { createReply, getReplies } from 'mdclub-sdk-js/es/CommentApi';\nimport { isUndefined } from 'mdui.jq/es/utils';\nimport commonActions from '~/utils/actionsAbstract';\nimport apiCatch from '~/utils/errorHandler';\nimport { findIndex } from '~/utils/func';\nimport voteActions from '~/components/vote/actions';\nimport userPopoverActions from '~/components/user-popover/actions';\nimport stateDefault from './stateDefault';\nconst per_page = 20;\nconst include = ['user', 'voting'];\nlet $commentsWrapper; // 获取评论列表\n\nconst getComments = (commentable_type, commentable_id, order, page = 1) => {\n const params = {\n page,\n per_page,\n order,\n include\n };\n let promise;\n\n switch (commentable_type) {\n case 'question':\n params.question_id = commentable_id;\n promise = getQuestionComments(params);\n break;\n\n case 'article':\n params.article_id = commentable_id;\n promise = getArticleComments(params);\n break;\n\n default:\n // answer\n params.answer_id = commentable_id;\n promise = getAnswerComments(params);\n break;\n }\n\n promise.then(response => {\n response.data.forEach((item, index) => {\n // 添加 show_replies 字段,表示是否显示评论的回复列表\n response.data[index].show_replies = false; // 添加 show_new_reply 字段,表示是否显示回复框\n\n response.data[index].show_new_reply = false; // 是否正在发表回复\n\n response.data[index].reply_submitting = false; // 是否正在加载回复列表\n\n response.data[index].replies_loading = false; // 回复列表数据列表\n\n response.data[index].replies_data = []; // 回复列表数据分页\n\n response.data[index].replies_pagination = null;\n });\n return response;\n });\n return promise;\n};\n/**\n * isInDialog: 是否在模态框中\n * 若不在模态框中,直接加载评论\n * 若在模态框中,在调用 openDialog 方法后加载评论\n */\n\n\nconst as = {\n onCreate: ({\n commentable_type,\n commentable_id,\n isInDialog\n }) => (state, actions) => {\n const isTargetUpdated = state.commentable_type !== commentable_type || state.commentable_id !== commentable_id;\n\n if (isTargetUpdated && !isInDialog) {\n actions.setState(stateDefault);\n actions.setState({\n commentable_type,\n commentable_id\n });\n actions.loadData();\n }\n\n if (!isInDialog) {\n $window.on('scroll', actions.infiniteLoadInPage);\n }\n },\n onDestroy: ({\n isInDialog\n }) => (_, actions) => {\n if (!isInDialog) {\n $window.off('scroll', actions.infiniteLoadInPage);\n }\n },\n\n /**\n * 指定关闭评论模态框\n */\n doCloseDialog: () => (_, actions) => {\n $.hideOverlay();\n setTimeout(() => {\n $('.mc-comments-dialog').hide();\n $.unlockScreen();\n }, 300);\n actions.setState({\n open_dialog: false\n });\n },\n\n /**\n * 打开评论模态框\n */\n openDialog: ({\n commentable_type,\n commentable_id\n }) => (state, actions) => {\n $commentsWrapper = $('.comments-wrapper');\n $.showOverlay();\n $.lockScreen();\n $('.mc-comments-dialog').show();\n $document.on('click', '.mdui-overlay', actions.doCloseDialog);\n $commentsWrapper.on('scroll', actions.infiniteLoadInDialog);\n const isTargetUpdated = state.commentable_type !== commentable_type || state.commentable_id !== commentable_id;\n\n if (isTargetUpdated) {\n actions.setState(stateDefault);\n actions.setState({\n commentable_type,\n commentable_id\n });\n actions.loadData();\n }\n\n actions.setState({\n open_dialog: true\n });\n },\n\n /**\n * 关闭评论模态框\n */\n closeDialog: () => (state, actions) => {\n if (!state.open_dialog) {\n return;\n }\n\n actions.doCloseDialog();\n $document.off('click', '.mdui-overlay', actions.doCloseDialog);\n $commentsWrapper.off('scroll', actions.infiniteLoadInDialog);\n },\n\n /**\n * 发布评论\n */\n onSubmit: () => (state, actions) => {\n const funcMaps = {\n question: createQuestionComment,\n answer: createAnswerComment,\n article: createArticleComment\n };\n const fieldMaps = {\n question: 'question_id',\n answer: 'answer_id',\n article: 'article_id'\n };\n const $newComment = $('.new-comment');\n const $textarea = $newComment.find('textarea');\n const content = $textarea.val();\n\n if (!content) {\n mdui.snackbar('请输入评论内容');\n return;\n }\n\n const params = {\n [fieldMaps[state.commentable_type]]: state.commentable_id,\n content,\n include: ['user', 'voting']\n };\n actions.setState({\n submitting: true\n });\n funcMaps[state.commentable_type](params).finally(() => {\n actions.setState({\n submitting: false\n });\n }).then(({\n data\n }) => {\n mdui.snackbar('评论发布成功');\n $textarea.val('');\n mdui.updateTextFields($newComment); // 若按热门排序,且已加载到最后一页,把新评论插到最后面\n // 若按时间顺序,且已加载到最后一页,把新评论插到最后面\n // 若按时间倒序,把新评论插到最前面\n\n const {\n pagination\n } = state;\n const isLoadedAll = pagination && (pagination.page === pagination.pages || !pagination.pages);\n pagination.total += 1;\n actions.setState({\n pagination\n });\n\n if (state.order === '-create_time') {\n actions.setState({\n comments_data: [data].concat(state.comments_data)\n });\n } else if (isLoadedAll) {\n actions.setState({\n comments_data: state.comments_data.concat(data)\n });\n }\n }).catch(response => {\n if (response.code === COMMON_FIELD_VERIFY_FAILED) {\n mdui.snackbar(response.errors.content);\n return;\n }\n\n apiCatch(response);\n });\n },\n\n /**\n * 切换评论的排序方式\n */\n changeOrder: order => (state, actions) => {\n if (order === state.order) {\n return;\n }\n\n actions.setState({\n order,\n comments_data: [],\n pagination: null\n });\n actions.loadData();\n },\n\n /**\n * 加载评论\n */\n loadData: () => (state, actions) => {\n // 从页面中加载评论数据\n const loadFromPage = () => {\n const comments = window.G_COMMENTS;\n\n if (comments) {\n actions.setState({\n comments_data: comments.data,\n pagination: comments.pagination,\n loading: false\n });\n window.G_COMMENTS = null;\n }\n\n return comments;\n }; // ajax 加载评论数据\n\n\n const loadFromServer = () => {\n actions.setState({\n loading: true\n });\n getComments(state.commentable_type, state.commentable_id, state.order).finally(() => {\n actions.setState({\n loading: false\n });\n }).then(response => {\n actions.setState({\n comments_data: response.data,\n pagination: response.pagination\n });\n }).catch(apiCatch);\n };\n\n if (loadFromPage()) {\n return;\n }\n\n loadFromServer();\n },\n infiniteLoadInPage: () => (state, actions) => {\n actions.infiniteLoad({\n isInDialog: false\n });\n },\n infiniteLoadInDialog: () => (state, actions) => {\n actions.infiniteLoad({\n isInDialog: true\n });\n },\n\n /**\n * 下拉加载更多\n */\n infiniteLoad: ({\n isInDialog\n }) => (state, actions) => {\n if (state.loading) {\n return;\n }\n\n const {\n pagination\n } = state;\n\n if (pagination.page >= pagination.pages) {\n return;\n }\n\n if (isInDialog) {\n if ($commentsWrapper[0].scrollHeight - $commentsWrapper[0].scrollTop - $commentsWrapper[0].clientHeight > 100) {\n return;\n }\n } else if (document.body.scrollHeight - window.pageYOffset - window.innerHeight > 100) {\n return;\n }\n\n actions.setState({\n loading: true\n });\n getComments(state.commentable_type, state.commentable_id, state.order, pagination.page + 1).finally(() => {\n actions.setState({\n loading: false\n });\n }).then(response => {\n actions.setState({\n comments_data: state.comments_data.concat(response.data),\n pagination: response.pagination\n });\n }).catch(apiCatch);\n },\n\n /**\n * 切换 comments_data 中的字段值\n * @param comment_id\n * @param fieldName 字段名\n * @param value 若为 undefined,则表示切换布尔值,否则设置为 value 值\n */\n toggleState: ({\n comment_id,\n fieldName,\n value = undefined\n }) => (state, actions) => {\n const {\n comments_data\n } = state;\n const index = findIndex(comments_data, 'comment_id', comment_id);\n const comment = comments_data[index];\n comments_data[index][fieldName] = isUndefined(value) ? !comment[fieldName] : value;\n actions.setState({\n comments_data\n }); // 如果是打开回复列表,则开始加载回复列表\n\n if (fieldName === 'show_replies' && comment[fieldName] && !comment.replies_pagination) {\n actions.loadReplies({\n comment\n });\n }\n },\n\n /**\n * 加载回复列表\n */\n loadReplies: ({\n comment\n }) => (state, actions) => {\n const isLoaded = !comment.replies_loading && comment.replies_pagination && comment.replies_pagination.page === comment.replies_pagination.pages;\n const isLoading = comment.replies_loading;\n\n if (isLoading || isLoaded) {\n return;\n }\n\n actions.toggleState({\n comment_id: comment.comment_id,\n fieldName: 'replies_loading',\n value: true\n });\n getReplies({\n comment_id: comment.comment_id,\n page: comment.replies_pagination ? comment.replies_pagination.page + 1 : 1,\n per_page: 10,\n order: 'create_time',\n include: ['user', 'voting']\n }).finally(() => {\n actions.toggleState({\n comment_id: comment.comment_id,\n fieldName: 'replies_loading',\n value: false\n });\n }).then(response => {\n actions.toggleState({\n comment_id: comment.comment_id,\n fieldName: 'replies_data',\n value: comment.replies_data.concat(response.data)\n });\n actions.toggleState({\n comment_id: comment.comment_id,\n fieldName: 'replies_pagination',\n value: response.pagination\n });\n }).catch(apiCatch);\n },\n\n /**\n * 发表回复\n */\n submitReply: ({\n target,\n comment\n }) => (state, actions) => {\n const $element = $(target).parent();\n const $button = $element.find('.submit');\n\n if ($button[0].disabled) {\n return;\n }\n\n const $textarea = $element.find('textarea');\n const value = $textarea.val();\n\n if (!value) {\n mdui.snackbar('请输入回复内容');\n return;\n }\n\n const params = {\n comment_id: comment.comment_id,\n content: value,\n include: ['user', 'voting']\n };\n actions.toggleState({\n comment_id: comment.comment_id,\n fieldName: 'reply_submitting',\n value: true\n });\n createReply(params).finally(() => {\n actions.toggleState({\n comment_id: comment.comment_id,\n fieldName: 'reply_submitting',\n value: false\n });\n }).then(() => {\n mdui.snackbar('回复发布成功'); // 发表成功后,隐藏回复框,回复数量+1\n\n actions.toggleState({\n comment_id: comment.comment_id,\n fieldName: 'show_new_reply'\n });\n actions.toggleState({\n comment_id: comment.comment_id,\n fieldName: 'reply_count',\n value: comment.reply_count + 1\n }); // todo\n }).catch(response => {\n if (response.code === COMMON_FIELD_VERIFY_FAILED) {\n mdui.snackbar(response.errors.content);\n return;\n }\n\n apiCatch(response);\n });\n }\n};\nexport default extend(as, commonActions, voteActions, userPopoverActions);","import $ from 'mdui.jq';\nimport mdui from 'mdui';\nimport extend from 'mdui.jq/es/functions/extend';\nimport { COMMON_FIELD_VERIFY_FAILED } from 'mdclub-sdk-js/es/errors';\nimport { create as createReport } from 'mdclub-sdk-js/es/ReportApi';\nimport commonActions from '~/utils/actionsAbstract';\nimport apiCatch from '~/utils/errorHandler';\nimport stateDefault from './stateDefault';\nlet dialog;\nconst as = {\n onCreate: ({\n element\n }) => (_, actions) => {\n const $element = $(element).mutation();\n dialog = new mdui.Dialog($element, {\n history: false\n });\n dialog.$element.on('confirm.mdui.dialog', () => {\n const $customReason = dialog.$element.find('.custom-reason');\n const customReason = $customReason.val();\n const {\n type,\n item,\n reason\n } = actions.getState();\n\n const getReportableId = () => {\n switch (type) {\n case 'question':\n return item.question_id;\n\n case 'answer':\n return item.answer_id;\n\n case 'article':\n return item.article_id;\n\n case 'comment':\n return item.comment_id;\n\n case 'user':\n return item.user_id;\n\n default:\n return null;\n }\n };\n\n createReport({\n reportable_type: type,\n reportable_id: getReportableId(),\n reason: reason === '其他原因' ? customReason : reason\n }).finally(() => {\n actions.setState(stateDefault);\n $customReason.val('');\n }).then(() => {\n mdui.snackbar('举报成功');\n }).catch(response => {\n if (response.code === COMMON_FIELD_VERIFY_FAILED) {\n mdui.snackbar(Object.values(response.errors)[0]);\n return;\n }\n\n apiCatch(response);\n });\n dialog.close();\n });\n },\n\n /**\n * 选择原因\n */\n onChange: event => (state, actions) => {\n const reason = event.target.value;\n actions.setState({\n reason\n });\n\n if ([reason, state.reason].indexOf('其他原因') > -1) {\n setTimeout(() => dialog.handleUpdate());\n }\n },\n\n /**\n * 打开举报弹框\n */\n open: ({\n type,\n item\n }) => (_, actions) => {\n actions.setState({\n type,\n item\n });\n dialog.open();\n },\n\n /**\n * 关闭举报弹框\n */\n close: () => {\n dialog.close();\n }\n};\nexport default extend(as, commonActions);","import $ from 'mdui.jq';\nimport mdui from 'mdui';\nimport extend from 'mdui.jq/es/functions/extend';\nimport commonActions from '~/utils/actionsAbstract';\nlet dialog;\nconst as = {\n onCreate: ({\n element\n }) => {\n const $element = $(element).mutation();\n dialog = new mdui.Dialog($element, {\n history: false\n });\n },\n\n /**\n * 打开分享弹框\n */\n open: ({\n url,\n title\n }) => (_, actions) => {\n actions.setState({\n url,\n title\n });\n dialog.open();\n },\n\n /**\n * 关闭分享弹框\n */\n close: () => {\n dialog.close();\n },\n\n /**\n * 分享到微博\n */\n shareToWeibo: () => (state, actions) => {\n actions.close();\n window.open(`https://service.weibo.com/share/share.php?url=${state.url}&title=${state.title}`);\n },\n\n /**\n * 分享到 Facebook\n */\n shareToFacebook: () => (state, actions) => {\n actions.close();\n window.open(`https://www.facebook.com/sharer/sharer.php?u=${state.url}`);\n },\n\n /**\n * 分享到 Twitter\n */\n shareToTwitter: () => (state, actions) => {\n actions.close();\n window.open(`https://twitter.com/intent/tweet?url=${state.url}`);\n }\n};\nexport default extend(as, commonActions);","import { getRequest, postRequest, deleteRequest } from './util/requestAlias';\nimport { buildURL } from './util/requestHandler';\n/**\n * 🔑删除一条通知\n *\n * 只要没有错误异常,无论是否有通知被删除,该接口都会返回成功。\n */\n\nexport const del = params => deleteRequest(buildURL('/notifications/{notification_id}', params));\n/**\n * 🔑删除所有通知\n *\n * 只要没有错误异常,无论是否有通知被删除,该接口都会返回成功。\n */\n\nexport const deleteAll = (params = {}) => deleteRequest(buildURL('/notifications', params, ['type']));\n/**\n * 🔑批量删除通知\n *\n * 只要没有错误异常,无论是否有通知被删除,该接口都会返回成功。\n */\n\nexport const deleteMultiple = params => deleteRequest(buildURL('/notifications/{notification_ids}', params));\n/**\n * 🔑获取未读通知数量\n *\n * 获取未读通知数量。\n */\n\nexport const getCount = (params = {}) => getRequest(buildURL('/notifications/count', params, ['type']));\n/**\n * 🔑获取通知列表\n *\n * 获取通知列表。\n */\n\nexport const getList = (params = {}) => getRequest(buildURL('/notifications', params, ['page', 'per_page', 'include', 'type', 'read']));\n/**\n * 🔑把一条通知标记为已读\n *\n * 把一条通知标记为已读。\n */\n\nexport const read = params => postRequest(buildURL('/notifications/{notification_id}/read', params, ['include']));\n/**\n * 🔑把所有通知标记为已读\n *\n * 只要没有错误异常。无论是否有通知被标记为已读,该接口都会返回成功。\n */\n\nexport const readAll = (params = {}) => postRequest(buildURL('/notifications/read', params, ['type']));\n/**\n * 🔑批量把通知标记为已读\n *\n * 批量把通知标记为已读。\n */\n\nexport const readMultiple = params => postRequest(buildURL('/notifications/{notification_ids}/read', params, ['include']));","import mdui from 'mdui/es/mdui';\nimport extend from 'mdui.jq/es/functions/extend';\nimport { $window } from 'mdui/es/utils/dom';\nimport { getList as getNotifications, del as deleteNotification, readAll } from 'mdclub-sdk-js/es/NotificationApi';\nimport { get as getAnswer } from 'mdclub-sdk-js/es/AnswerApi';\nimport { get as getComment } from 'mdclub-sdk-js/es/CommentApi';\nimport commonActions from '~/utils/actionsAbstract';\nimport { emit } from '~/utils/pubsub';\nimport apiCatch from '~/utils/errorHandler';\nimport currentUser from '~/utils/currentUser';\nimport { findIndex } from '~/utils/func';\nconst per_page = 20;\nconst include = [// 'receiver',\n'sender', 'article', 'question', 'answer', 'comment', 'reply']; // 下次打开通知页面是否需要重新加载\n\nconst needReload = false;\n\nconst transformData = data => {\n return data.map(item => {\n // 是否已加载通知对应的详细信息\n item.is_loaded_detail = false; // 是否显示通知对应的详细内容\n\n item.is_show_detail = false; // 通知对应的详细信息内容\n\n item.content_detail = '';\n return item;\n });\n};\n\nconst as = {\n onCreate: () => (state, actions) => {\n emit('route_update');\n actions.setTitle('通知');\n\n if (!currentUser()) {\n return;\n } // 当有未读通知时,需要重新加载列表\n\n\n if (!state.pagination || state.count || needReload) {\n actions.loadData();\n } // 进入通知页面,即标记所有通知为已读\n\n\n readAll().then(() => {\n actions.updateCount(0);\n }).catch(apiCatch);\n $window.on('scroll', actions.infiniteLoad);\n },\n onDestroy: () => (_, actions) => {\n $window.off('scroll', actions.infiniteLoad);\n },\n\n /**\n * 更新未读通知数量\n */\n updateCount: count => (_, actions) => {\n actions.setState({\n count\n });\n },\n\n /**\n * 加载通知列表\n */\n loadData: () => (state, actions) => {\n actions.setState({\n data: [],\n pagination: null,\n loading: true\n });\n getNotifications({\n page: 1,\n per_page,\n include\n }).finally(() => {\n actions.setState({\n loading: false\n });\n }).then(response => {\n actions.setState({\n data: transformData(response.data),\n pagination: response.pagination\n });\n }).catch(apiCatch);\n },\n\n /**\n * 绑定下拉加载更多\n */\n infiniteLoad: () => (state, actions) => {\n if (state.loading) {\n return;\n }\n\n const {\n pagination\n } = state;\n\n if (pagination.page >= pagination.pages) {\n return;\n }\n\n if (document.body.scrollHeight - window.pageYOffset - window.innerHeight > 100) {\n return;\n }\n\n actions.setState({\n loading: true\n });\n getNotifications({\n page: pagination.page + 1,\n per_page,\n include\n }).finally(() => {\n actions.setState({\n loading: false\n });\n }).then(response => {\n actions.setState({\n data: state.data.concat(transformData(response.data)),\n pagination: response.pagination\n });\n }).catch(apiCatch);\n },\n\n /**\n * 删除一条通知\n */\n deleteOne: notification => (state, actions) => {\n const onConfirm = () => {\n const {\n data\n } = state;\n const index = findIndex(data, 'notification_id', notification.notification_id);\n data.splice(index, 1);\n actions.setState({\n data\n });\n deleteNotification({\n notification_id: notification.notification_id\n }).catch(apiCatch);\n };\n\n const onCancel = () => false;\n\n const options = {\n history: false,\n confirmText: '确定',\n cancelText: '取消'\n };\n mdui.confirm('确认删除这条通知?', onConfirm, onCancel, options);\n },\n\n /**\n * 切换通知详情的显示\n */\n toggleDetail: notification => (state, actions) => {\n const {\n data\n } = state;\n const index = findIndex(data, 'notification_id', notification.notification_id);\n const item = data[index];\n item.is_show_detail = !item.is_show_detail;\n\n if (item.is_show_detail && item.is_loaded_detail) {\n // 已经加载过详情,直接切换\n data[index] = item;\n actions.setState({\n data\n });\n } else {\n // 加载详情\n switch (item.type) {\n // content_deleted 中加载文章、提问、回答、评论\n case 'article_deleted':\n case 'question_deleted':\n case 'answer_deleted':\n case 'comment_deleted':\n item.is_loaded_detail = true;\n item.content_detail = item.type === 'comment_deleted' ? item.content_deleted.content : item.content_deleted.content_rendered;\n data[index] = item;\n actions.setState({\n data\n });\n break;\n // ajax 加载评论、回答\n\n case 'question_commented':\n case 'article_commented':\n case 'answer_commented':\n case 'comment_replies':\n case 'question_answered':\n data[index] = item;\n actions.setState({\n data\n });\n (item.type === 'question_answered' ? getAnswer({\n answer_id: item.answer_id\n }) : getComment({\n comment_id: item.comment_id\n })).then(response => {\n item.is_loaded_detail = true;\n item.content_detail = item.type === 'question_answered' ? response.data.content_rendered : response.data.content;\n data[index] = item;\n actions.setState({\n data\n });\n }).catch(apiCatch);\n break;\n\n default:\n break;\n }\n }\n }\n};\nexport default extend(as, commonActions);","import { postRequest } from './util/requestAlias';\nimport { buildURL } from './util/requestHandler';\n/**\n * 生成新的图形验证码\n *\n * 生成新的图形验证码。\n */\n\nexport const generate = () => postRequest(buildURL('/captchas', {}));","// @ts-ignore\nimport sha1 from 'sha-1';\nimport { postRequest } from './util/requestAlias';\nimport { buildURL, buildRequestBody } from './util/requestHandler';\nimport defaults from './defaults';\n/**\n * 生成 Token\n *\n * 通过账号密码登陆,返回 Token 信息。 若登录失败,且返回信息中含参数 `captcha_token` 和 `captcha_image`, 表示下次调用该接口时,需要用户输入图形验证码,并把 `captcha_token` 和 `captcha_code` 参数传递到服务端。\n */\n\nexport const login = params => {\n if (params.password) {\n params.password = sha1(params.password);\n }\n\n return postRequest(buildURL('/tokens', params), buildRequestBody(params, ['name', 'password', 'device', 'captcha_token', 'captcha_code'])).then(response => {\n if (!response.code) {\n defaults.adapter.setStorage('token', response.data.token);\n }\n\n return response;\n });\n};","export default {\n // 对话框类型:followees, followers, topic_followers, question_followers, article_followers\n type: '',\n data: [],\n pagination: null,\n loading: false\n};","export default {\n // 评论目标类型:article, question, answer\n commentable_type: '',\n // 评论目标的ID\n commentable_id: 0,\n // 排序方式\n order: 'create_time',\n // 评论列表\n comments_data: [],\n // 评论分页信息,为 null 表示未加载初始数据\n pagination: null,\n // 是否正在加载评论\n loading: false,\n // 是否正在发表评论\n submitting: false,\n // 是否打开评论模态框\n open_dialog: false\n};","export default {\n /**\n * 举报类型:question, answer, article, comment, user\n */\n type: '',\n\n /**\n * 举报目标信息\n */\n item: null,\n\n /**\n * 举报原因\n */\n reason: ''\n};","import { getRequest, postRequest, deleteRequest } from './util/requestAlias';\nimport { buildURL, buildRequestBody } from './util/requestHandler';\n/**\n * 🔐删除举报\n *\n * 删除举报。\n */\n\nexport const del = params => deleteRequest(buildURL('/reports/{reportable_type}:{reportable_id}', params));\n/**\n * 🔑添加举报\n *\n * 添加举报。\n */\n\nexport const create = params => postRequest(buildURL('/reports/{reportable_type}:{reportable_id}', params, ['include']), buildRequestBody(params, ['reason']));\n/**\n * 🔐批量删除举报\n *\n * 批量删除举报。 只要没有错误异常,无论是否有记录被删除,该接口都会返回成功。\n */\n\nexport const deleteMultiple = params => deleteRequest(buildURL('/reports/{report_targets}', params));\n/**\n * 🔐获取被举报的内容列表\n *\n * 获取被举报的内容列表。\n */\n\nexport const getList = (params = {}) => getRequest(buildURL('/reports', params, ['page', 'per_page', 'include', 'reportable_type']));\n/**\n * 🔐获取被举报内容的举报详情\n *\n * 获取被举报内容的举报详情。\n */\n\nexport const getReasons = params => getRequest(buildURL('/reports/{reportable_type}:{reportable_id}', params, ['page', 'per_page', 'include']));","import { location } from 'hyperapp-router'; // 页面\n\nimport index from '~/pages/index/actions';\nimport questions from '../pages/questions/actions';\nimport questionAndAnswer from '../pages/question/actions';\nimport articles from '../pages/articles/actions';\nimport article from '../pages/article/actions';\nimport topics from '../pages/topics/actions';\nimport topic from '../pages/topic/actions';\nimport users from '../pages/users/actions';\nimport user from '~/pages/user/actions';\nimport notifications from '~/pages/notifications/actions'; // import inbox from '../pages/inbox/actions';\n// 组件\n\nimport theme from '~/components/theme/actions';\nimport login from '~/components/login/actions';\nimport register from '~/components/register/actions';\nimport reset from '~/components/reset/actions';\nimport usersDialog from '~/components/users-dialog/actions';\nimport comments from '~/components/comments/actions';\nimport reportDialog from '~/components/report-dialog/actions';\nimport shareDialog from '~/components/share-dialog/actions';\nexport default {\n location: location.actions,\n getState: () => state => state,\n // 页面\n index,\n questions,\n question: questionAndAnswer,\n answer: questionAndAnswer,\n articles,\n article,\n topics,\n topic,\n users,\n user,\n notifications,\n // inbox,\n // 组件\n theme,\n login,\n register,\n reset,\n usersDialog,\n comments,\n reportDialog,\n shareDialog\n};","export default {\n /**\n * 设置应用布局色\n */\n setLayout: layout => ({\n layout\n })\n};","import extend from 'mdui.jq/es/functions/extend';\nimport topicsState from './components/topics/state';\nconst as = {\n topics_data: [],\n topics_pagination: null,\n topics_loading: false,\n questions_recent_data: [],\n questions_recent_pagination: null,\n questions_recent_loading: false,\n questions_popular_data: [],\n questions_popular_pagination: null,\n questions_popular_loading: false,\n articles_recent_data: [],\n articles_recent_pagination: null,\n articles_recent_loading: false,\n articles_popular_data: [],\n articles_popular_pagination: null,\n articles_popular_loading: false\n};\nexport default extend(as, topicsState);","export default {\n // 是否显示话题的左箭头\n topics_show_arrow_left: false,\n // 是否显示话题的右箭头\n topics_show_arrow_right: false\n};","import extend from 'mdui.jq/es/functions/extend';\nimport editorState from '~/components/editor/state';\nimport stateDefault from './stateDefault';\nconst as = {\n // 表示当前为提问页面\n route: 'question'\n};\nexport default extend(as, stateDefault, editorState);","import extend from 'mdui.jq/es/functions/extend';\nimport editorState from '~/components/editor/state';\nimport stateDefault from './stateDefault';\nconst as = {\n // 表示当前为回答页面\n route: 'answer'\n};\nexport default extend(as, stateDefault, editorState);","import extend from 'mdui.jq/es/functions/extend';\nimport stateDefault from './stateDefault';\nexport default extend({}, stateDefault);","import extend from 'mdui.jq/es/functions/extend';\nimport stateDefault from './stateDefault';\nexport default extend({}, stateDefault);","import extend from 'mdui.jq/es/functions/extend';\nimport stateDefault from './stateDefault';\nconst state = {\n // 当前登录用户信息,为 null 时表示未登录\n user: null\n};\nexport default extend(state, stateDefault);","const state = {\n layout: 'light'\n};\nexport default state;","import extend from 'mdui.jq/es/functions/extend';\nimport stateDefault from '~/components/users-dialog/stateDefault';\nexport default extend({}, stateDefault);","import extend from 'mdui.jq/es/functions/extend';\nimport stateDefault from './stateDefault';\n/**\n * 在需要用到编辑器的页面中,引入该 state\n */\n\nexport default extend({}, stateDefault);","import extend from 'mdui.jq/es/functions/extend';\nimport stateDefault from './stateDefault';\nexport default extend({}, stateDefault);","import { location } from 'hyperapp-router'; // 页面\n\nimport index from '~/pages/index/state';\nimport questions from '../pages/questions/state';\nimport question from '../pages/question/questionState';\nimport answer from '../pages/question/answerState';\nimport articles from '../pages/articles/state';\nimport article from '../pages/article/state';\nimport topics from '../pages/topics/state';\nimport topic from '../pages/topic/state';\nimport users from '../pages/users/state';\nimport user from '~/pages/user/state';\nimport notifications from '~/pages/notifications/state'; // import inbox from '../pages/inbox/state';\n// 组件\n\nimport theme from '~/components/theme/state';\nimport login from '~/components/login/state';\nimport register from '~/components/register/state';\nimport reset from '~/components/reset/state';\nimport usersDialog from '~/components/users-dialog/state';\nimport comments from '~/components/comments/state';\nimport reportDialog from '~/components/report-dialog/state';\nimport shareDialog from '~/components/share-dialog/state';\nexport default {\n location: location.state,\n // 页面\n index,\n questions,\n question,\n answer,\n articles,\n article,\n topics,\n topic,\n users,\n user,\n notifications,\n // inbox,\n // 组件\n theme,\n login,\n register,\n reset,\n usersDialog,\n comments,\n reportDialog,\n shareDialog\n};","export default {\n data: [],\n pagination: null,\n // 为 null 时表示未加载初始数据\n loading: false,\n count: null // 通过 /notifications/count 接口获取的未读消息数量\n\n};","export default {\n name: '',\n name_msg: '',\n password: '',\n password_msg: '',\n captcha_code: '',\n captcha_code_msg: '',\n captcha_token: '',\n captcha_image: '',\n submitting: false\n};","export default {\n // 邮箱\n email: '',\n email_msg: '',\n // 验证码\n email_code: '',\n email_code_msg: '',\n // 用户名\n username: '',\n username_msg: '',\n // 密码\n password: '',\n password_msg: '',\n // 图形验证码\n captcha_code: '',\n captcha_code_msg: '',\n // 图形验证码token和图片\n captcha_token: '',\n captcha_image: '',\n // 邮箱验证是否通过\n email_valid: false,\n // 是否正在发送验证码\n sending: false,\n // 是否显示重新发送倒计时\n show_resend_countdown: false,\n // 重新发送验证码倒计时\n resend_countdown: 60,\n // 是否正在验证中\n verifying: false,\n // 是否正在提交注册\n submitting: false\n};","export default {\n // 邮箱\n email: '',\n email_msg: '',\n // 验证码\n email_code: '',\n email_code_msg: '',\n // 新密码\n password: '',\n password_msg: '',\n // 重复新密码\n password_repeat: '',\n password_repeat_msg: '',\n // 图形验证码\n captcha_code: '',\n captcha_code_msg: '',\n // 图形验证码token和图片\n captcha_token: '',\n captcha_image: '',\n // 邮箱验证是否通过\n email_valid: false,\n // 是否正在发送验证码\n sending: false,\n // 是否显示重新发送倒计时\n show_resend_countdown: false,\n // 重新发送验证码倒计时\n resend_countdown: 60,\n // 是否正在验证中\n verifying: false,\n // 是否正在提交新密码\n submitting: false\n};","export default {\n /**\n * 链接\n */\n url: '',\n\n /**\n * 描述\n */\n title: ''\n};","export default function cc(names) {\n if (typeof names === \"string\" || typeof names === \"number\") return \"\" + names\n\n let out = \"\"\n\n if (Array.isArray(names)) {\n for (let i = 0, tmp; i < names.length; i++) {\n if ((tmp = cc(names[i])) !== \"\") {\n out += (out && \" \") + tmp\n }\n }\n } else {\n for (let k in names) {\n if (names[k]) out += (out && \" \") + k\n }\n }\n\n return out\n}\n","import { h } from 'hyperapp';\nimport { Link } from 'hyperapp-router';\nimport { fullPath } from '~/utils/path';\nimport './index.less';\nexport default (({\n title,\n url\n}) => h(Link, {\n class: \"header mdui-ripple\",\n to: fullPath(url)\n}, h(\"div\", {\n class: \"mdui-text-color-theme-secondary\"\n}, title), h(\"i\", {\n class: \"mdui-icon material-icons mdui-text-color-theme\"\n}, \"arrow_forward\")));","const easeInOutQuad = (t, b, c, d) => {\n t /= d / 2;\n if (t < 1) return c / 2 * t * t + b;\n t -= 1;\n return -c / 2 * (t * (t - 2) - 1) + b;\n};\n\nexport function scrollToTop(duration = 300) {\n const start = window.scrollY || window.pageYOffset;\n const stop = document.body.getBoundingClientRect().top + start;\n const distance = stop - start;\n let timeStart;\n let timeElapsed;\n let next;\n\n function loop(timeCurrent) {\n if (!timeStart) {\n timeStart = timeCurrent;\n }\n\n timeElapsed = timeCurrent - timeStart;\n next = easeInOutQuad(timeElapsed, start, distance, duration);\n window.scrollTo(0, next);\n\n if (timeElapsed < duration) {\n window.requestAnimationFrame(loop);\n } else {\n window.scrollTo(0, start + distance);\n timeStart = false;\n }\n }\n\n window.requestAnimationFrame(loop);\n}\nexport function scrollHorizontal(element, options) {\n const duration = options.duration || 300;\n const offset = options.offset || 0;\n const {\n callback\n } = options;\n const start = element.scrollLeft;\n let timeStart;\n let timeElapsed;\n let next;\n\n function loop(timeCurrent) {\n if (!timeStart) {\n timeStart = timeCurrent;\n }\n\n timeElapsed = timeCurrent - timeStart;\n next = easeInOutQuad(timeElapsed, start, offset, duration);\n element.scrollLeft = next;\n\n if (timeElapsed < duration) {\n window.requestAnimationFrame(loop);\n } else {\n // 滚动结束后,纠正误差\n element.scrollLeft = start + offset;\n\n if (callback) {\n callback();\n }\n\n timeStart = false;\n }\n }\n\n window.requestAnimationFrame(loop);\n}","import { h } from 'hyperapp';\nimport $ from 'mdui.jq';\nimport cc from 'classcat';\nimport './index.less';\nexport default (({\n show\n}) => h(\"div\", {\n key: \"mc-loading\",\n class: cc(['mc-loading', {\n 'mdui-hidden': !show\n }])\n}, h(\"div\", {\n class: \"mdui-spinner\",\n oncreate: element => $(element).mutation()\n})));","// https://nodejs.org/api/packages.html#packages_writing_dual_packages_while_avoiding_or_minimizing_hazards\nimport HighlightJS from '../lib/core.js';\nexport { HighlightJS };\nexport default HighlightJS;\n","const MODES = (hljs) => {\n return {\n IMPORTANT: {\n scope: 'meta',\n begin: '!important'\n },\n BLOCK_COMMENT: hljs.C_BLOCK_COMMENT_MODE,\n HEXCOLOR: {\n scope: 'number',\n begin: /#(([0-9a-fA-F]{3,4})|(([0-9a-fA-F]{2}){3,4}))\\b/\n },\n FUNCTION_DISPATCH: {\n className: \"built_in\",\n begin: /[\\w-]+(?=\\()/\n },\n ATTRIBUTE_SELECTOR_MODE: {\n scope: 'selector-attr',\n begin: /\\[/,\n end: /\\]/,\n illegal: '$',\n contains: [\n hljs.APOS_STRING_MODE,\n hljs.QUOTE_STRING_MODE\n ]\n },\n CSS_NUMBER_MODE: {\n scope: 'number',\n begin: hljs.NUMBER_RE + '(' +\n '%|em|ex|ch|rem' +\n '|vw|vh|vmin|vmax' +\n '|cm|mm|in|pt|pc|px' +\n '|deg|grad|rad|turn' +\n '|s|ms' +\n '|Hz|kHz' +\n '|dpi|dpcm|dppx' +\n ')?',\n relevance: 0\n },\n CSS_VARIABLE: {\n className: \"attr\",\n begin: /--[A-Za-z][A-Za-z0-9_-]*/\n }\n };\n};\n\nconst TAGS = [\n 'a',\n 'abbr',\n 'address',\n 'article',\n 'aside',\n 'audio',\n 'b',\n 'blockquote',\n 'body',\n 'button',\n 'canvas',\n 'caption',\n 'cite',\n 'code',\n 'dd',\n 'del',\n 'details',\n 'dfn',\n 'div',\n 'dl',\n 'dt',\n 'em',\n 'fieldset',\n 'figcaption',\n 'figure',\n 'footer',\n 'form',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'header',\n 'hgroup',\n 'html',\n 'i',\n 'iframe',\n 'img',\n 'input',\n 'ins',\n 'kbd',\n 'label',\n 'legend',\n 'li',\n 'main',\n 'mark',\n 'menu',\n 'nav',\n 'object',\n 'ol',\n 'p',\n 'q',\n 'quote',\n 'samp',\n 'section',\n 'span',\n 'strong',\n 'summary',\n 'sup',\n 'table',\n 'tbody',\n 'td',\n 'textarea',\n 'tfoot',\n 'th',\n 'thead',\n 'time',\n 'tr',\n 'ul',\n 'var',\n 'video'\n];\n\nconst MEDIA_FEATURES = [\n 'any-hover',\n 'any-pointer',\n 'aspect-ratio',\n 'color',\n 'color-gamut',\n 'color-index',\n 'device-aspect-ratio',\n 'device-height',\n 'device-width',\n 'display-mode',\n 'forced-colors',\n 'grid',\n 'height',\n 'hover',\n 'inverted-colors',\n 'monochrome',\n 'orientation',\n 'overflow-block',\n 'overflow-inline',\n 'pointer',\n 'prefers-color-scheme',\n 'prefers-contrast',\n 'prefers-reduced-motion',\n 'prefers-reduced-transparency',\n 'resolution',\n 'scan',\n 'scripting',\n 'update',\n 'width',\n // TODO: find a better solution?\n 'min-width',\n 'max-width',\n 'min-height',\n 'max-height'\n];\n\n// https://developer.mozilla.org/en-US/docs/Web/CSS/Pseudo-classes\nconst PSEUDO_CLASSES = [\n 'active',\n 'any-link',\n 'blank',\n 'checked',\n 'current',\n 'default',\n 'defined',\n 'dir', // dir()\n 'disabled',\n 'drop',\n 'empty',\n 'enabled',\n 'first',\n 'first-child',\n 'first-of-type',\n 'fullscreen',\n 'future',\n 'focus',\n 'focus-visible',\n 'focus-within',\n 'has', // has()\n 'host', // host or host()\n 'host-context', // host-context()\n 'hover',\n 'indeterminate',\n 'in-range',\n 'invalid',\n 'is', // is()\n 'lang', // lang()\n 'last-child',\n 'last-of-type',\n 'left',\n 'link',\n 'local-link',\n 'not', // not()\n 'nth-child', // nth-child()\n 'nth-col', // nth-col()\n 'nth-last-child', // nth-last-child()\n 'nth-last-col', // nth-last-col()\n 'nth-last-of-type', //nth-last-of-type()\n 'nth-of-type', //nth-of-type()\n 'only-child',\n 'only-of-type',\n 'optional',\n 'out-of-range',\n 'past',\n 'placeholder-shown',\n 'read-only',\n 'read-write',\n 'required',\n 'right',\n 'root',\n 'scope',\n 'target',\n 'target-within',\n 'user-invalid',\n 'valid',\n 'visited',\n 'where' // where()\n];\n\n// https://developer.mozilla.org/en-US/docs/Web/CSS/Pseudo-elements\nconst PSEUDO_ELEMENTS = [\n 'after',\n 'backdrop',\n 'before',\n 'cue',\n 'cue-region',\n 'first-letter',\n 'first-line',\n 'grammar-error',\n 'marker',\n 'part',\n 'placeholder',\n 'selection',\n 'slotted',\n 'spelling-error'\n];\n\nconst ATTRIBUTES = [\n 'align-content',\n 'align-items',\n 'align-self',\n 'all',\n 'animation',\n 'animation-delay',\n 'animation-direction',\n 'animation-duration',\n 'animation-fill-mode',\n 'animation-iteration-count',\n 'animation-name',\n 'animation-play-state',\n 'animation-timing-function',\n 'backface-visibility',\n 'background',\n 'background-attachment',\n 'background-clip',\n 'background-color',\n 'background-image',\n 'background-origin',\n 'background-position',\n 'background-repeat',\n 'background-size',\n 'border',\n 'border-bottom',\n 'border-bottom-color',\n 'border-bottom-left-radius',\n 'border-bottom-right-radius',\n 'border-bottom-style',\n 'border-bottom-width',\n 'border-collapse',\n 'border-color',\n 'border-image',\n 'border-image-outset',\n 'border-image-repeat',\n 'border-image-slice',\n 'border-image-source',\n 'border-image-width',\n 'border-left',\n 'border-left-color',\n 'border-left-style',\n 'border-left-width',\n 'border-radius',\n 'border-right',\n 'border-right-color',\n 'border-right-style',\n 'border-right-width',\n 'border-spacing',\n 'border-style',\n 'border-top',\n 'border-top-color',\n 'border-top-left-radius',\n 'border-top-right-radius',\n 'border-top-style',\n 'border-top-width',\n 'border-width',\n 'bottom',\n 'box-decoration-break',\n 'box-shadow',\n 'box-sizing',\n 'break-after',\n 'break-before',\n 'break-inside',\n 'caption-side',\n 'caret-color',\n 'clear',\n 'clip',\n 'clip-path',\n 'clip-rule',\n 'color',\n 'column-count',\n 'column-fill',\n 'column-gap',\n 'column-rule',\n 'column-rule-color',\n 'column-rule-style',\n 'column-rule-width',\n 'column-span',\n 'column-width',\n 'columns',\n 'contain',\n 'content',\n 'content-visibility',\n 'counter-increment',\n 'counter-reset',\n 'cue',\n 'cue-after',\n 'cue-before',\n 'cursor',\n 'direction',\n 'display',\n 'empty-cells',\n 'filter',\n 'flex',\n 'flex-basis',\n 'flex-direction',\n 'flex-flow',\n 'flex-grow',\n 'flex-shrink',\n 'flex-wrap',\n 'float',\n 'flow',\n 'font',\n 'font-display',\n 'font-family',\n 'font-feature-settings',\n 'font-kerning',\n 'font-language-override',\n 'font-size',\n 'font-size-adjust',\n 'font-smoothing',\n 'font-stretch',\n 'font-style',\n 'font-synthesis',\n 'font-variant',\n 'font-variant-caps',\n 'font-variant-east-asian',\n 'font-variant-ligatures',\n 'font-variant-numeric',\n 'font-variant-position',\n 'font-variation-settings',\n 'font-weight',\n 'gap',\n 'glyph-orientation-vertical',\n 'grid',\n 'grid-area',\n 'grid-auto-columns',\n 'grid-auto-flow',\n 'grid-auto-rows',\n 'grid-column',\n 'grid-column-end',\n 'grid-column-start',\n 'grid-gap',\n 'grid-row',\n 'grid-row-end',\n 'grid-row-start',\n 'grid-template',\n 'grid-template-areas',\n 'grid-template-columns',\n 'grid-template-rows',\n 'hanging-punctuation',\n 'height',\n 'hyphens',\n 'icon',\n 'image-orientation',\n 'image-rendering',\n 'image-resolution',\n 'ime-mode',\n 'isolation',\n 'justify-content',\n 'left',\n 'letter-spacing',\n 'line-break',\n 'line-height',\n 'list-style',\n 'list-style-image',\n 'list-style-position',\n 'list-style-type',\n 'margin',\n 'margin-bottom',\n 'margin-left',\n 'margin-right',\n 'margin-top',\n 'marks',\n 'mask',\n 'mask-border',\n 'mask-border-mode',\n 'mask-border-outset',\n 'mask-border-repeat',\n 'mask-border-slice',\n 'mask-border-source',\n 'mask-border-width',\n 'mask-clip',\n 'mask-composite',\n 'mask-image',\n 'mask-mode',\n 'mask-origin',\n 'mask-position',\n 'mask-repeat',\n 'mask-size',\n 'mask-type',\n 'max-height',\n 'max-width',\n 'min-height',\n 'min-width',\n 'mix-blend-mode',\n 'nav-down',\n 'nav-index',\n 'nav-left',\n 'nav-right',\n 'nav-up',\n 'none',\n 'normal',\n 'object-fit',\n 'object-position',\n 'opacity',\n 'order',\n 'orphans',\n 'outline',\n 'outline-color',\n 'outline-offset',\n 'outline-style',\n 'outline-width',\n 'overflow',\n 'overflow-wrap',\n 'overflow-x',\n 'overflow-y',\n 'padding',\n 'padding-bottom',\n 'padding-left',\n 'padding-right',\n 'padding-top',\n 'page-break-after',\n 'page-break-before',\n 'page-break-inside',\n 'pause',\n 'pause-after',\n 'pause-before',\n 'perspective',\n 'perspective-origin',\n 'pointer-events',\n 'position',\n 'quotes',\n 'resize',\n 'rest',\n 'rest-after',\n 'rest-before',\n 'right',\n 'row-gap',\n 'scroll-margin',\n 'scroll-margin-block',\n 'scroll-margin-block-end',\n 'scroll-margin-block-start',\n 'scroll-margin-bottom',\n 'scroll-margin-inline',\n 'scroll-margin-inline-end',\n 'scroll-margin-inline-start',\n 'scroll-margin-left',\n 'scroll-margin-right',\n 'scroll-margin-top',\n 'scroll-padding',\n 'scroll-padding-block',\n 'scroll-padding-block-end',\n 'scroll-padding-block-start',\n 'scroll-padding-bottom',\n 'scroll-padding-inline',\n 'scroll-padding-inline-end',\n 'scroll-padding-inline-start',\n 'scroll-padding-left',\n 'scroll-padding-right',\n 'scroll-padding-top',\n 'scroll-snap-align',\n 'scroll-snap-stop',\n 'scroll-snap-type',\n 'shape-image-threshold',\n 'shape-margin',\n 'shape-outside',\n 'speak',\n 'speak-as',\n 'src', // @font-face\n 'tab-size',\n 'table-layout',\n 'text-align',\n 'text-align-all',\n 'text-align-last',\n 'text-combine-upright',\n 'text-decoration',\n 'text-decoration-color',\n 'text-decoration-line',\n 'text-decoration-style',\n 'text-emphasis',\n 'text-emphasis-color',\n 'text-emphasis-position',\n 'text-emphasis-style',\n 'text-indent',\n 'text-justify',\n 'text-orientation',\n 'text-overflow',\n 'text-rendering',\n 'text-shadow',\n 'text-transform',\n 'text-underline-position',\n 'top',\n 'transform',\n 'transform-box',\n 'transform-origin',\n 'transform-style',\n 'transition',\n 'transition-delay',\n 'transition-duration',\n 'transition-property',\n 'transition-timing-function',\n 'unicode-bidi',\n 'vertical-align',\n 'visibility',\n 'voice-balance',\n 'voice-duration',\n 'voice-family',\n 'voice-pitch',\n 'voice-range',\n 'voice-rate',\n 'voice-stress',\n 'voice-volume',\n 'white-space',\n 'widows',\n 'width',\n 'will-change',\n 'word-break',\n 'word-spacing',\n 'word-wrap',\n 'writing-mode',\n 'z-index'\n // reverse makes sure longer attributes `font-weight` are matched fully\n // instead of getting false positives on say `font`\n].reverse();\n\n/*\nLanguage: CSS\nCategory: common, css, web\nWebsite: https://developer.mozilla.org/en-US/docs/Web/CSS\n*/\n\n/** @type LanguageFn */\nfunction css(hljs) {\n const regex = hljs.regex;\n const modes = MODES(hljs);\n const VENDOR_PREFIX = {\n begin: /-(webkit|moz|ms|o)-(?=[a-z])/\n };\n const AT_MODIFIERS = \"and or not only\";\n const AT_PROPERTY_RE = /@-?\\w[\\w]*(-\\w+)*/; // @-webkit-keyframes\n const IDENT_RE = '[a-zA-Z-][a-zA-Z0-9_-]*';\n const STRINGS = [\n hljs.APOS_STRING_MODE,\n hljs.QUOTE_STRING_MODE\n ];\n\n return {\n name: 'CSS',\n case_insensitive: true,\n illegal: /[=|'\\$]/,\n keywords: {\n keyframePosition: \"from to\"\n },\n classNameAliases: {\n // for visual continuity with `tag {}` and because we\n // don't have a great class for this?\n keyframePosition: \"selector-tag\"\n },\n contains: [\n modes.BLOCK_COMMENT,\n VENDOR_PREFIX,\n // to recognize keyframe 40% etc which are outside the scope of our\n // attribute value mode\n modes.CSS_NUMBER_MODE,\n {\n className: 'selector-id',\n begin: /#[A-Za-z0-9_-]+/,\n relevance: 0\n },\n {\n className: 'selector-class',\n begin: '\\\\.' + IDENT_RE,\n relevance: 0\n },\n modes.ATTRIBUTE_SELECTOR_MODE,\n {\n className: 'selector-pseudo',\n variants: [\n {\n begin: ':(' + PSEUDO_CLASSES.join('|') + ')'\n },\n {\n begin: ':(:)?(' + PSEUDO_ELEMENTS.join('|') + ')'\n }\n ]\n },\n // we may actually need this (12/2020)\n // { // pseudo-selector params\n // begin: /\\(/,\n // end: /\\)/,\n // contains: [ hljs.CSS_NUMBER_MODE ]\n // },\n modes.CSS_VARIABLE,\n {\n className: 'attribute',\n begin: '\\\\b(' + ATTRIBUTES.join('|') + ')\\\\b'\n },\n // attribute values\n {\n begin: /:/,\n end: /[;}{]/,\n contains: [\n modes.BLOCK_COMMENT,\n modes.HEXCOLOR,\n modes.IMPORTANT,\n modes.CSS_NUMBER_MODE,\n ...STRINGS,\n // needed to highlight these as strings and to avoid issues with\n // illegal characters that might be inside urls that would tigger the\n // languages illegal stack\n {\n begin: /(url|data-uri)\\(/,\n end: /\\)/,\n relevance: 0, // from keywords\n keywords: {\n built_in: \"url data-uri\"\n },\n contains: [\n {\n className: \"string\",\n // any character other than `)` as in `url()` will be the start\n // of a string, which ends with `)` (from the parent mode)\n begin: /[^)]/,\n endsWithParent: true,\n excludeEnd: true\n }\n ]\n },\n modes.FUNCTION_DISPATCH\n ]\n },\n {\n begin: regex.lookahead(/@/),\n end: '[{;]',\n relevance: 0,\n illegal: /:/, // break on Less variables @var: ...\n contains: [\n {\n className: 'keyword',\n begin: AT_PROPERTY_RE\n },\n {\n begin: /\\s/,\n endsWithParent: true,\n excludeEnd: true,\n relevance: 0,\n keywords: {\n $pattern: /[a-z-]+/,\n keyword: AT_MODIFIERS,\n attribute: MEDIA_FEATURES.join(\" \")\n },\n contains: [\n {\n begin: /[a-z-]+(?=:)/,\n className: \"attribute\"\n },\n ...STRINGS,\n modes.CSS_NUMBER_MODE\n ]\n }\n ]\n },\n {\n className: 'selector-tag',\n begin: '\\\\b(' + TAGS.join('|') + ')\\\\b'\n }\n ]\n };\n}\n\nexport { css as default };\n","const IDENT_RE = '[A-Za-z$_][0-9A-Za-z$_]*';\nconst KEYWORDS = [\n \"as\", // for exports\n \"in\",\n \"of\",\n \"if\",\n \"for\",\n \"while\",\n \"finally\",\n \"var\",\n \"new\",\n \"function\",\n \"do\",\n \"return\",\n \"void\",\n \"else\",\n \"break\",\n \"catch\",\n \"instanceof\",\n \"with\",\n \"throw\",\n \"case\",\n \"default\",\n \"try\",\n \"switch\",\n \"continue\",\n \"typeof\",\n \"delete\",\n \"let\",\n \"yield\",\n \"const\",\n \"class\",\n // JS handles these with a special rule\n // \"get\",\n // \"set\",\n \"debugger\",\n \"async\",\n \"await\",\n \"static\",\n \"import\",\n \"from\",\n \"export\",\n \"extends\"\n];\nconst LITERALS = [\n \"true\",\n \"false\",\n \"null\",\n \"undefined\",\n \"NaN\",\n \"Infinity\"\n];\n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects\nconst TYPES = [\n // Fundamental objects\n \"Object\",\n \"Function\",\n \"Boolean\",\n \"Symbol\",\n // numbers and dates\n \"Math\",\n \"Date\",\n \"Number\",\n \"BigInt\",\n // text\n \"String\",\n \"RegExp\",\n // Indexed collections\n \"Array\",\n \"Float32Array\",\n \"Float64Array\",\n \"Int8Array\",\n \"Uint8Array\",\n \"Uint8ClampedArray\",\n \"Int16Array\",\n \"Int32Array\",\n \"Uint16Array\",\n \"Uint32Array\",\n \"BigInt64Array\",\n \"BigUint64Array\",\n // Keyed collections\n \"Set\",\n \"Map\",\n \"WeakSet\",\n \"WeakMap\",\n // Structured data\n \"ArrayBuffer\",\n \"SharedArrayBuffer\",\n \"Atomics\",\n \"DataView\",\n \"JSON\",\n // Control abstraction objects\n \"Promise\",\n \"Generator\",\n \"GeneratorFunction\",\n \"AsyncFunction\",\n // Reflection\n \"Reflect\",\n \"Proxy\",\n // Internationalization\n \"Intl\",\n // WebAssembly\n \"WebAssembly\"\n];\n\nconst ERROR_TYPES = [\n \"Error\",\n \"EvalError\",\n \"InternalError\",\n \"RangeError\",\n \"ReferenceError\",\n \"SyntaxError\",\n \"TypeError\",\n \"URIError\"\n];\n\nconst BUILT_IN_GLOBALS = [\n \"setInterval\",\n \"setTimeout\",\n \"clearInterval\",\n \"clearTimeout\",\n\n \"require\",\n \"exports\",\n\n \"eval\",\n \"isFinite\",\n \"isNaN\",\n \"parseFloat\",\n \"parseInt\",\n \"decodeURI\",\n \"decodeURIComponent\",\n \"encodeURI\",\n \"encodeURIComponent\",\n \"escape\",\n \"unescape\"\n];\n\nconst BUILT_IN_VARIABLES = [\n \"arguments\",\n \"this\",\n \"super\",\n \"console\",\n \"window\",\n \"document\",\n \"localStorage\",\n \"module\",\n \"global\" // Node.js\n];\n\nconst BUILT_INS = [].concat(\n BUILT_IN_GLOBALS,\n TYPES,\n ERROR_TYPES\n);\n\n/*\nLanguage: JavaScript\nDescription: JavaScript (JS) is a lightweight, interpreted, or just-in-time compiled programming language with first-class functions.\nCategory: common, scripting, web\nWebsite: https://developer.mozilla.org/en-US/docs/Web/JavaScript\n*/\n\n/** @type LanguageFn */\nfunction javascript(hljs) {\n const regex = hljs.regex;\n /**\n * Takes a string like \" {\n const tag = \"',\n end: ''\n };\n // to avoid some special cases inside isTrulyOpeningTag\n const XML_SELF_CLOSING = /<[A-Za-z0-9\\\\._:-]+\\s*\\/>/;\n const XML_TAG = {\n begin: /<[A-Za-z0-9\\\\._:-]+/,\n end: /\\/[A-Za-z0-9\\\\._:-]+>|\\/>/,\n /**\n * @param {RegExpMatchArray} match\n * @param {CallbackResponse} response\n */\n isTrulyOpeningTag: (match, response) => {\n const afterMatchIndex = match[0].length + match.index;\n const nextChar = match.input[afterMatchIndex];\n if (\n // HTML should not include another raw `<` inside a tag\n // nested type?\n // `>`, etc.\n nextChar === \"<\" ||\n // the , gives away that this is not HTML\n // ``\n nextChar === \",\") {\n response.ignoreMatch();\n return;\n }\n\n // ``\n // Quite possibly a tag, lets look for a matching closing tag...\n if (nextChar === \">\") {\n // if we cannot find a matching closing tag, then we\n // will ignore it\n if (!hasClosingTag(match, { after: afterMatchIndex })) {\n response.ignoreMatch();\n }\n }\n\n // `` (self-closing)\n // handled by simpleSelfClosing rule\n\n // ``\n // technically this could be HTML, but it smells like a type\n let m;\n const afterMatch = match.input.substr(afterMatchIndex);\n // NOTE: This is ugh, but added specifically for https://github.com/highlightjs/highlight.js/issues/3276\n if ((m = afterMatch.match(/^\\s+extends\\s+/))) {\n if (m.index === 0) {\n response.ignoreMatch();\n // eslint-disable-next-line no-useless-return\n return;\n }\n }\n }\n };\n const KEYWORDS$1 = {\n $pattern: IDENT_RE,\n keyword: KEYWORDS,\n literal: LITERALS,\n built_in: BUILT_INS,\n \"variable.language\": BUILT_IN_VARIABLES\n };\n\n // https://tc39.es/ecma262/#sec-literals-numeric-literals\n const decimalDigits = '[0-9](_?[0-9])*';\n const frac = `\\\\.(${decimalDigits})`;\n // DecimalIntegerLiteral, including Annex B NonOctalDecimalIntegerLiteral\n // https://tc39.es/ecma262/#sec-additional-syntax-numeric-literals\n const decimalInteger = `0|[1-9](_?[0-9])*|0[0-7]*[89][0-9]*`;\n const NUMBER = {\n className: 'number',\n variants: [\n // DecimalLiteral\n { begin: `(\\\\b(${decimalInteger})((${frac})|\\\\.)?|(${frac}))` +\n `[eE][+-]?(${decimalDigits})\\\\b` },\n { begin: `\\\\b(${decimalInteger})\\\\b((${frac})\\\\b|\\\\.)?|(${frac})\\\\b` },\n\n // DecimalBigIntegerLiteral\n { begin: `\\\\b(0|[1-9](_?[0-9])*)n\\\\b` },\n\n // NonDecimalIntegerLiteral\n { begin: \"\\\\b0[xX][0-9a-fA-F](_?[0-9a-fA-F])*n?\\\\b\" },\n { begin: \"\\\\b0[bB][0-1](_?[0-1])*n?\\\\b\" },\n { begin: \"\\\\b0[oO][0-7](_?[0-7])*n?\\\\b\" },\n\n // LegacyOctalIntegerLiteral (does not include underscore separators)\n // https://tc39.es/ecma262/#sec-additional-syntax-numeric-literals\n { begin: \"\\\\b0[0-7]+n?\\\\b\" },\n ],\n relevance: 0\n };\n\n const SUBST = {\n className: 'subst',\n begin: '\\\\$\\\\{',\n end: '\\\\}',\n keywords: KEYWORDS$1,\n contains: [] // defined later\n };\n const HTML_TEMPLATE = {\n begin: 'html`',\n end: '',\n starts: {\n end: '`',\n returnEnd: false,\n contains: [\n hljs.BACKSLASH_ESCAPE,\n SUBST\n ],\n subLanguage: 'xml'\n }\n };\n const CSS_TEMPLATE = {\n begin: 'css`',\n end: '',\n starts: {\n end: '`',\n returnEnd: false,\n contains: [\n hljs.BACKSLASH_ESCAPE,\n SUBST\n ],\n subLanguage: 'css'\n }\n };\n const TEMPLATE_STRING = {\n className: 'string',\n begin: '`',\n end: '`',\n contains: [\n hljs.BACKSLASH_ESCAPE,\n SUBST\n ]\n };\n const JSDOC_COMMENT = hljs.COMMENT(\n /\\/\\*\\*(?!\\/)/,\n '\\\\*/',\n {\n relevance: 0,\n contains: [\n {\n begin: '(?=@[A-Za-z]+)',\n relevance: 0,\n contains: [\n {\n className: 'doctag',\n begin: '@[A-Za-z]+'\n },\n {\n className: 'type',\n begin: '\\\\{',\n end: '\\\\}',\n excludeEnd: true,\n excludeBegin: true,\n relevance: 0\n },\n {\n className: 'variable',\n begin: IDENT_RE$1 + '(?=\\\\s*(-)|$)',\n endsParent: true,\n relevance: 0\n },\n // eat spaces (not newlines) so we can find\n // types or variables\n {\n begin: /(?=[^\\n])\\s/,\n relevance: 0\n }\n ]\n }\n ]\n }\n );\n const COMMENT = {\n className: \"comment\",\n variants: [\n JSDOC_COMMENT,\n hljs.C_BLOCK_COMMENT_MODE,\n hljs.C_LINE_COMMENT_MODE\n ]\n };\n const SUBST_INTERNALS = [\n hljs.APOS_STRING_MODE,\n hljs.QUOTE_STRING_MODE,\n HTML_TEMPLATE,\n CSS_TEMPLATE,\n TEMPLATE_STRING,\n NUMBER,\n // This is intentional:\n // See https://github.com/highlightjs/highlight.js/issues/3288\n // hljs.REGEXP_MODE\n ];\n SUBST.contains = SUBST_INTERNALS\n .concat({\n // we need to pair up {} inside our subst to prevent\n // it from ending too early by matching another }\n begin: /\\{/,\n end: /\\}/,\n keywords: KEYWORDS$1,\n contains: [\n \"self\"\n ].concat(SUBST_INTERNALS)\n });\n const SUBST_AND_COMMENTS = [].concat(COMMENT, SUBST.contains);\n const PARAMS_CONTAINS = SUBST_AND_COMMENTS.concat([\n // eat recursive parens in sub expressions\n {\n begin: /\\(/,\n end: /\\)/,\n keywords: KEYWORDS$1,\n contains: [\"self\"].concat(SUBST_AND_COMMENTS)\n }\n ]);\n const PARAMS = {\n className: 'params',\n begin: /\\(/,\n end: /\\)/,\n excludeBegin: true,\n excludeEnd: true,\n keywords: KEYWORDS$1,\n contains: PARAMS_CONTAINS\n };\n\n // ES6 classes\n const CLASS_OR_EXTENDS = {\n variants: [\n // class Car extends vehicle\n {\n match: [\n /class/,\n /\\s+/,\n IDENT_RE$1,\n /\\s+/,\n /extends/,\n /\\s+/,\n regex.concat(IDENT_RE$1, \"(\", regex.concat(/\\./, IDENT_RE$1), \")*\")\n ],\n scope: {\n 1: \"keyword\",\n 3: \"title.class\",\n 5: \"keyword\",\n 7: \"title.class.inherited\"\n }\n },\n // class Car\n {\n match: [\n /class/,\n /\\s+/,\n IDENT_RE$1\n ],\n scope: {\n 1: \"keyword\",\n 3: \"title.class\"\n }\n },\n\n ]\n };\n\n const CLASS_REFERENCE = {\n relevance: 0,\n match:\n regex.either(\n // Hard coded exceptions\n /\\bJSON/,\n // Float32Array\n /\\b[A-Z][a-z]+([A-Z][a-z]+|\\d)*/,\n // CSSFactory\n /\\b[A-Z]{2,}([A-Z][a-z]+|\\d)+/,\n // BLAH\n // this will be flagged as a UPPER_CASE_CONSTANT instead\n ),\n className: \"title.class\",\n keywords: {\n _: [\n // se we still get relevance credit for JS library classes\n ...TYPES,\n ...ERROR_TYPES\n ]\n }\n };\n\n const USE_STRICT = {\n label: \"use_strict\",\n className: 'meta',\n relevance: 10,\n begin: /^\\s*['\"]use (strict|asm)['\"]/\n };\n\n const FUNCTION_DEFINITION = {\n variants: [\n {\n match: [\n /function/,\n /\\s+/,\n IDENT_RE$1,\n /(?=\\s*\\()/\n ]\n },\n // anonymous function\n {\n match: [\n /function/,\n /\\s*(?=\\()/\n ]\n }\n ],\n className: {\n 1: \"keyword\",\n 3: \"title.function\"\n },\n label: \"func.def\",\n contains: [ PARAMS ],\n illegal: /%/\n };\n\n const UPPER_CASE_CONSTANT = {\n relevance: 0,\n match: /\\b[A-Z][A-Z_0-9]+\\b/,\n className: \"variable.constant\"\n };\n\n function noneOf(list) {\n return regex.concat(\"(?!\", list.join(\"|\"), \")\");\n }\n\n const FUNCTION_CALL = {\n match: regex.concat(\n /\\b/,\n noneOf([\n ...BUILT_IN_GLOBALS,\n \"super\"\n ]),\n IDENT_RE$1, regex.lookahead(/\\(/)),\n className: \"title.function\",\n relevance: 0\n };\n\n const PROPERTY_ACCESS = {\n begin: regex.concat(/\\./, regex.lookahead(\n regex.concat(IDENT_RE$1, /(?![0-9A-Za-z$_(])/)\n )),\n end: IDENT_RE$1,\n excludeBegin: true,\n keywords: \"prototype\",\n className: \"property\",\n relevance: 0\n };\n\n const GETTER_OR_SETTER = {\n match: [\n /get|set/,\n /\\s+/,\n IDENT_RE$1,\n /(?=\\()/\n ],\n className: {\n 1: \"keyword\",\n 3: \"title.function\"\n },\n contains: [\n { // eat to avoid empty params\n begin: /\\(\\)/\n },\n PARAMS\n ]\n };\n\n const FUNC_LEAD_IN_RE = '(\\\\(' +\n '[^()]*(\\\\(' +\n '[^()]*(\\\\(' +\n '[^()]*' +\n '\\\\)[^()]*)*' +\n '\\\\)[^()]*)*' +\n '\\\\)|' + hljs.UNDERSCORE_IDENT_RE + ')\\\\s*=>';\n\n const FUNCTION_VARIABLE = {\n match: [\n /const|var|let/, /\\s+/,\n IDENT_RE$1, /\\s*/,\n /=\\s*/,\n regex.lookahead(FUNC_LEAD_IN_RE)\n ],\n className: {\n 1: \"keyword\",\n 3: \"title.function\"\n },\n contains: [\n PARAMS\n ]\n };\n\n return {\n name: 'Javascript',\n aliases: ['js', 'jsx', 'mjs', 'cjs'],\n keywords: KEYWORDS$1,\n // this will be extended by TypeScript\n exports: { PARAMS_CONTAINS, CLASS_REFERENCE },\n illegal: /#(?![$_A-z])/,\n contains: [\n hljs.SHEBANG({\n label: \"shebang\",\n binary: \"node\",\n relevance: 5\n }),\n USE_STRICT,\n hljs.APOS_STRING_MODE,\n hljs.QUOTE_STRING_MODE,\n HTML_TEMPLATE,\n CSS_TEMPLATE,\n TEMPLATE_STRING,\n COMMENT,\n NUMBER,\n CLASS_REFERENCE,\n {\n className: 'attr',\n begin: IDENT_RE$1 + regex.lookahead(':'),\n relevance: 0\n },\n FUNCTION_VARIABLE,\n { // \"value\" container\n begin: '(' + hljs.RE_STARTERS_RE + '|\\\\b(case|return|throw)\\\\b)\\\\s*',\n keywords: 'return throw case',\n relevance: 0,\n contains: [\n COMMENT,\n hljs.REGEXP_MODE,\n {\n className: 'function',\n // we have to count the parens to make sure we actually have the\n // correct bounding ( ) before the =>. There could be any number of\n // sub-expressions inside also surrounded by parens.\n begin: FUNC_LEAD_IN_RE,\n returnBegin: true,\n end: '\\\\s*=>',\n contains: [\n {\n className: 'params',\n variants: [\n {\n begin: hljs.UNDERSCORE_IDENT_RE,\n relevance: 0\n },\n {\n className: null,\n begin: /\\(\\s*\\)/,\n skip: true\n },\n {\n begin: /\\(/,\n end: /\\)/,\n excludeBegin: true,\n excludeEnd: true,\n keywords: KEYWORDS$1,\n contains: PARAMS_CONTAINS\n }\n ]\n }\n ]\n },\n { // could be a comma delimited list of params to a function call\n begin: /,/,\n relevance: 0\n },\n {\n match: /\\s+/,\n relevance: 0\n },\n { // JSX\n variants: [\n { begin: FRAGMENT.begin, end: FRAGMENT.end },\n { match: XML_SELF_CLOSING },\n {\n begin: XML_TAG.begin,\n // we carefully check the opening tag to see if it truly\n // is a tag and not a false positive\n 'on:begin': XML_TAG.isTrulyOpeningTag,\n end: XML_TAG.end\n }\n ],\n subLanguage: 'xml',\n contains: [\n {\n begin: XML_TAG.begin,\n end: XML_TAG.end,\n skip: true,\n contains: ['self']\n }\n ]\n }\n ],\n },\n FUNCTION_DEFINITION,\n {\n // prevent this from getting swallowed up by function\n // since they appear \"function like\"\n beginKeywords: \"while if switch catch for\"\n },\n {\n // we have to count the parens to make sure we actually have the correct\n // bounding ( ). There could be any number of sub-expressions inside\n // also surrounded by parens.\n begin: '\\\\b(?!function)' + hljs.UNDERSCORE_IDENT_RE +\n '\\\\(' + // first parens\n '[^()]*(\\\\(' +\n '[^()]*(\\\\(' +\n '[^()]*' +\n '\\\\)[^()]*)*' +\n '\\\\)[^()]*)*' +\n '\\\\)\\\\s*\\\\{', // end parens\n returnBegin:true,\n label: \"func.def\",\n contains: [\n PARAMS,\n hljs.inherit(hljs.TITLE_MODE, { begin: IDENT_RE$1, className: \"title.function\" })\n ]\n },\n // catch ... so it won't trigger the property rule below\n {\n match: /\\.\\.\\./,\n relevance: 0\n },\n PROPERTY_ACCESS,\n // hack: prevents detection of keywords in some circumstances\n // .keyword()\n // $keyword = x\n {\n match: '\\\\$' + IDENT_RE$1,\n relevance: 0\n },\n {\n match: [ /\\bconstructor(?=\\s*\\()/ ],\n className: { 1: \"title.function\" },\n contains: [ PARAMS ]\n },\n FUNCTION_CALL,\n UPPER_CASE_CONSTANT,\n CLASS_OR_EXTENDS,\n GETTER_OR_SETTER,\n {\n match: /\\$[(.]/ // relevance booster for a pattern common to JS libs: `$(something)` and `$.something`\n }\n ]\n };\n}\n\nexport { javascript as default };\n","import $ from 'mdui.jq';\nimport hljs from 'highlight.js/lib/core';\nimport 'highlight.js/styles/vs.css';\nimport './vs2015-style.css';\nimport xml from 'highlight.js/lib/languages/xml';\nimport css from 'highlight.js/lib/languages/css';\nimport javascript from 'highlight.js/lib/languages/javascript';\nimport json from 'highlight.js/lib/languages/json';\nimport php from 'highlight.js/lib/languages/php';\nhljs.registerLanguage('xml', xml);\nhljs.registerLanguage('css', css);\nhljs.registerLanguage('javascript', javascript);\nhljs.registerLanguage('json', json);\nhljs.registerLanguage('php', php);\nexport default (element => {\n $(element).find('pre').each((_, block) => {\n hljs.highlightElement(block);\n });\n});","/*\nLanguage: HTML, XML\nWebsite: https://www.w3.org/XML/\nCategory: common, web\nAudit: 2020\n*/\n\n/** @type LanguageFn */\nfunction xml(hljs) {\n const regex = hljs.regex;\n // Element names can contain letters, digits, hyphens, underscores, and periods\n const TAG_NAME_RE = regex.concat(/[A-Z_]/, regex.optional(/[A-Z0-9_.-]*:/), /[A-Z0-9_.-]*/);\n const XML_IDENT_RE = /[A-Za-z0-9._:-]+/;\n const XML_ENTITIES = {\n className: 'symbol',\n begin: /&[a-z]+;|&#[0-9]+;|&#x[a-f0-9]+;/\n };\n const XML_META_KEYWORDS = {\n begin: /\\s/,\n contains: [\n {\n className: 'keyword',\n begin: /#?[a-z_][a-z1-9_-]+/,\n illegal: /\\n/\n }\n ]\n };\n const XML_META_PAR_KEYWORDS = hljs.inherit(XML_META_KEYWORDS, {\n begin: /\\(/,\n end: /\\)/\n });\n const APOS_META_STRING_MODE = hljs.inherit(hljs.APOS_STRING_MODE, {\n className: 'string'\n });\n const QUOTE_META_STRING_MODE = hljs.inherit(hljs.QUOTE_STRING_MODE, {\n className: 'string'\n });\n const TAG_INTERNALS = {\n endsWithParent: true,\n illegal: /`]+/\n }\n ]\n }\n ]\n }\n ]\n };\n return {\n name: 'HTML, XML',\n aliases: [\n 'html',\n 'xhtml',\n 'rss',\n 'atom',\n 'xjb',\n 'xsd',\n 'xsl',\n 'plist',\n 'wsf',\n 'svg'\n ],\n case_insensitive: true,\n contains: [\n {\n className: 'meta',\n begin: //,\n relevance: 10,\n contains: [\n XML_META_KEYWORDS,\n QUOTE_META_STRING_MODE,\n APOS_META_STRING_MODE,\n XML_META_PAR_KEYWORDS,\n {\n begin: /\\[/,\n end: /\\]/,\n contains: [\n {\n className: 'meta',\n begin: //,\n contains: [\n XML_META_KEYWORDS,\n XML_META_PAR_KEYWORDS,\n QUOTE_META_STRING_MODE,\n APOS_META_STRING_MODE\n ]\n }\n ]\n }\n ]\n },\n hljs.COMMENT(\n //,\n {\n relevance: 10\n }\n ),\n {\n begin: //,\n relevance: 10\n },\n XML_ENTITIES,\n {\n className: 'meta',\n begin: /<\\?xml/,\n end: /\\?>/,\n relevance: 10\n },\n {\n className: 'tag',\n /*\n The lookahead pattern (?=...) ensures that 'begin' only matches\n ')/,\n end: />/,\n keywords: {\n name: 'style'\n },\n contains: [ TAG_INTERNALS ],\n starts: {\n end: /<\\/style>/,\n returnEnd: true,\n subLanguage: [\n 'css',\n 'xml'\n ]\n }\n },\n {\n className: 'tag',\n // See the comment in the