// ==UserScript==
// @name javbus 巴士司机 - 开得稳,不翻车,带你嗨
// @namespace http://tampermonkey.net/
// @version 0.10.5
// @author heybro
// @description javbus 功能增强,增加稍后再看、已观看、收藏影片、收藏演员、去广告功能。更多功能持续更新中...
// @license GPL
// @include https://*bus*/*
// @include https://*jav*/*
// @include https://*dmm*/*
// @include https://*see*/*
// @match https://www.javbus.com/*
// @match https://www.dmmsee.art/*
// @match https://www.buscdn.art/*
// @match https://www.cdnbus.shop/*
// @match https://www.busfan.shop/*
// @match https://www.cdnbus.art/*
// @match https://www.busdmm.shop/*
// @match https://www.seejav.art/*
// @require https://cdn.bootcdn.net/ajax/libs/vue/3.4.21/vue.global.prod.js
// @require data:application/javascript,%3Bwindow.Vue%3DVue%3B
// @grant GM_addStyle
// @grant GM_getValue
// @grant GM_setValue
// @run-at document-start
// ==/UserScript==
(e=>{if(typeof GM_addStyle=="function"){GM_addStyle(e);return}const a=document.createElement("style");a.textContent=e,document.head.append(a)})(' @charset "UTF-8";:root{--el-color-white:#ffffff;--el-color-black:#000000;--el-color-primary-rgb:64,158,255;--el-color-success-rgb:103,194,58;--el-color-warning-rgb:230,162,60;--el-color-danger-rgb:245,108,108;--el-color-error-rgb:245,108,108;--el-color-info-rgb:144,147,153;--el-font-size-extra-large:20px;--el-font-size-large:18px;--el-font-size-medium:16px;--el-font-size-base:14px;--el-font-size-small:13px;--el-font-size-extra-small:12px;--el-font-family:"Helvetica Neue",Helvetica,"PingFang SC","Hiragino Sans GB","Microsoft YaHei","\u5FAE\u8F6F\u96C5\u9ED1",Arial,sans-serif;--el-font-weight-primary:500;--el-font-line-height-primary:24px;--el-index-normal:1;--el-index-top:1000;--el-index-popper:2000;--el-border-radius-base:4px;--el-border-radius-small:2px;--el-border-radius-round:20px;--el-border-radius-circle:100%;--el-transition-duration:.3s;--el-transition-duration-fast:.2s;--el-transition-function-ease-in-out-bezier:cubic-bezier(.645,.045,.355,1);--el-transition-function-fast-bezier:cubic-bezier(.23,1,.32,1);--el-transition-all:all var(--el-transition-duration) var(--el-transition-function-ease-in-out-bezier);--el-transition-fade:opacity var(--el-transition-duration) var(--el-transition-function-fast-bezier);--el-transition-md-fade:transform var(--el-transition-duration) var(--el-transition-function-fast-bezier),opacity var(--el-transition-duration) var(--el-transition-function-fast-bezier);--el-transition-fade-linear:opacity var(--el-transition-duration-fast) linear;--el-transition-border:border-color var(--el-transition-duration-fast) var(--el-transition-function-ease-in-out-bezier);--el-transition-box-shadow:box-shadow var(--el-transition-duration-fast) var(--el-transition-function-ease-in-out-bezier);--el-transition-color:color var(--el-transition-duration-fast) var(--el-transition-function-ease-in-out-bezier);--el-component-size-large:40px;--el-component-size:32px;--el-component-size-small:24px}:root{color-scheme:light;--el-color-primary:#409eff;--el-color-primary-light-3:#79bbff;--el-color-primary-light-5:#a0cfff;--el-color-primary-light-7:#c6e2ff;--el-color-primary-light-8:#d9ecff;--el-color-primary-light-9:#ecf5ff;--el-color-primary-dark-2:#337ecc;--el-color-success:#67c23a;--el-color-success-light-3:#95d475;--el-color-success-light-5:#b3e19d;--el-color-success-light-7:#d1edc4;--el-color-success-light-8:#e1f3d8;--el-color-success-light-9:#f0f9eb;--el-color-success-dark-2:#529b2e;--el-color-warning:#e6a23c;--el-color-warning-light-3:#eebe77;--el-color-warning-light-5:#f3d19e;--el-color-warning-light-7:#f8e3c5;--el-color-warning-light-8:#faecd8;--el-color-warning-light-9:#fdf6ec;--el-color-warning-dark-2:#b88230;--el-color-danger:#f56c6c;--el-color-danger-light-3:#f89898;--el-color-danger-light-5:#fab6b6;--el-color-danger-light-7:#fcd3d3;--el-color-danger-light-8:#fde2e2;--el-color-danger-light-9:#fef0f0;--el-color-danger-dark-2:#c45656;--el-color-error:#f56c6c;--el-color-error-light-3:#f89898;--el-color-error-light-5:#fab6b6;--el-color-error-light-7:#fcd3d3;--el-color-error-light-8:#fde2e2;--el-color-error-light-9:#fef0f0;--el-color-error-dark-2:#c45656;--el-color-info:#909399;--el-color-info-light-3:#b1b3b8;--el-color-info-light-5:#c8c9cc;--el-color-info-light-7:#dedfe0;--el-color-info-light-8:#e9e9eb;--el-color-info-light-9:#f4f4f5;--el-color-info-dark-2:#73767a;--el-bg-color:#ffffff;--el-bg-color-page:#f2f3f5;--el-bg-color-overlay:#ffffff;--el-text-color-primary:#303133;--el-text-color-regular:#606266;--el-text-color-secondary:#909399;--el-text-color-placeholder:#a8abb2;--el-text-color-disabled:#c0c4cc;--el-border-color:#dcdfe6;--el-border-color-light:#e4e7ed;--el-border-color-lighter:#ebeef5;--el-border-color-extra-light:#f2f6fc;--el-border-color-dark:#d4d7de;--el-border-color-darker:#cdd0d6;--el-fill-color:#f0f2f5;--el-fill-color-light:#f5f7fa;--el-fill-color-lighter:#fafafa;--el-fill-color-extra-light:#fafcff;--el-fill-color-dark:#ebedf0;--el-fill-color-darker:#e6e8eb;--el-fill-color-blank:#ffffff;--el-box-shadow:0px 12px 32px 4px rgba(0,0,0,.04),0px 8px 20px rgba(0,0,0,.08);--el-box-shadow-light:0px 0px 12px rgba(0,0,0,.12);--el-box-shadow-lighter:0px 0px 6px rgba(0,0,0,.12);--el-box-shadow-dark:0px 16px 48px 16px rgba(0,0,0,.08),0px 12px 32px rgba(0,0,0,.12),0px 8px 16px -8px rgba(0,0,0,.16);--el-disabled-bg-color:var(--el-fill-color-light);--el-disabled-text-color:var(--el-text-color-placeholder);--el-disabled-border-color:var(--el-border-color-light);--el-overlay-color:rgba(0,0,0,.8);--el-overlay-color-light:rgba(0,0,0,.7);--el-overlay-color-lighter:rgba(0,0,0,.5);--el-mask-color:rgba(255,255,255,.9);--el-mask-color-extra-light:rgba(255,255,255,.3);--el-border-width:1px;--el-border-style:solid;--el-border-color-hover:var(--el-text-color-disabled);--el-border:var(--el-border-width) var(--el-border-style) var(--el-border-color);--el-svg-monochrome-grey:var(--el-border-color)}.fade-in-linear-enter-active,.fade-in-linear-leave-active{transition:var(--el-transition-fade-linear)}.fade-in-linear-enter-from,.fade-in-linear-leave-to{opacity:0}.el-fade-in-linear-enter-active,.el-fade-in-linear-leave-active{transition:var(--el-transition-fade-linear)}.el-fade-in-linear-enter-from,.el-fade-in-linear-leave-to{opacity:0}.el-fade-in-enter-active,.el-fade-in-leave-active{transition:all var(--el-transition-duration) cubic-bezier(.55,0,.1,1)}.el-fade-in-enter-from,.el-fade-in-leave-active{opacity:0}.el-zoom-in-center-enter-active,.el-zoom-in-center-leave-active{transition:all var(--el-transition-duration) cubic-bezier(.55,0,.1,1)}.el-zoom-in-center-enter-from,.el-zoom-in-center-leave-active{opacity:0;transform:scaleX(0)}.el-zoom-in-top-enter-active,.el-zoom-in-top-leave-active{opacity:1;transform:scaleY(1);transform-origin:center top;transition:var(--el-transition-md-fade)}.el-zoom-in-top-enter-active[data-popper-placement^=top],.el-zoom-in-top-leave-active[data-popper-placement^=top]{transform-origin:center bottom}.el-zoom-in-top-enter-from,.el-zoom-in-top-leave-active{opacity:0;transform:scaleY(0)}.el-zoom-in-bottom-enter-active,.el-zoom-in-bottom-leave-active{opacity:1;transform:scaleY(1);transform-origin:center bottom;transition:var(--el-transition-md-fade)}.el-zoom-in-bottom-enter-from,.el-zoom-in-bottom-leave-active{opacity:0;transform:scaleY(0)}.el-zoom-in-left-enter-active,.el-zoom-in-left-leave-active{opacity:1;transform:scale(1);transform-origin:top left;transition:var(--el-transition-md-fade)}.el-zoom-in-left-enter-from,.el-zoom-in-left-leave-active{opacity:0;transform:scale(.45)}.collapse-transition{transition:var(--el-transition-duration) height ease-in-out,var(--el-transition-duration) padding-top ease-in-out,var(--el-transition-duration) padding-bottom ease-in-out}.el-collapse-transition-enter-active,.el-collapse-transition-leave-active{transition:var(--el-transition-duration) max-height ease-in-out,var(--el-transition-duration) padding-top ease-in-out,var(--el-transition-duration) padding-bottom ease-in-out}.horizontal-collapse-transition{transition:var(--el-transition-duration) width ease-in-out,var(--el-transition-duration) padding-left ease-in-out,var(--el-transition-duration) padding-right ease-in-out}.el-list-enter-active,.el-list-leave-active{transition:all 1s}.el-list-enter-from,.el-list-leave-to{opacity:0;transform:translateY(-30px)}.el-list-leave-active{position:absolute!important}.el-opacity-transition{transition:opacity var(--el-transition-duration) cubic-bezier(.55,0,.1,1)}.el-icon-loading{-webkit-animation:rotating 2s linear infinite;animation:rotating 2s linear infinite}.el-icon--right{margin-left:5px}.el-icon--left{margin-right:5px}@-webkit-keyframes rotating{0%{transform:rotate(0)}to{transform:rotate(1turn)}}@keyframes rotating{0%{transform:rotate(0)}to{transform:rotate(1turn)}}.el-icon{--color:inherit;align-items:center;display:inline-flex;height:1em;justify-content:center;line-height:1em;position:relative;width:1em;fill:currentColor;color:var(--color);font-size:inherit}.el-icon.is-loading{-webkit-animation:rotating 2s linear infinite;animation:rotating 2s linear infinite}.el-icon svg{height:1em;width:1em}:root{--el-popup-modal-bg-color:var(--el-color-black);--el-popup-modal-opacity:.5}.v-modal-enter{-webkit-animation:v-modal-in var(--el-transition-duration-fast) ease;animation:v-modal-in var(--el-transition-duration-fast) ease}.v-modal-leave{-webkit-animation:v-modal-out var(--el-transition-duration-fast) ease forwards;animation:v-modal-out var(--el-transition-duration-fast) ease forwards}@-webkit-keyframes v-modal-in{0%{opacity:0}}@keyframes v-modal-in{0%{opacity:0}}@-webkit-keyframes v-modal-out{to{opacity:0}}@keyframes v-modal-out{to{opacity:0}}.v-modal{background:var(--el-popup-modal-bg-color);height:100%;left:0;opacity:var(--el-popup-modal-opacity);position:fixed;top:0;width:100%}.el-popup-parent--hidden{overflow:hidden}.el-dialog{--el-dialog-width:50%;--el-dialog-margin-top:15vh;--el-dialog-bg-color:var(--el-bg-color);--el-dialog-box-shadow:var(--el-box-shadow);--el-dialog-title-font-size:var(--el-font-size-large);--el-dialog-content-font-size:14px;--el-dialog-font-line-height:var(--el-font-line-height-primary);--el-dialog-padding-primary:16px;--el-dialog-border-radius:var(--el-border-radius-small);background:var(--el-dialog-bg-color);border-radius:var(--el-dialog-border-radius);box-shadow:var(--el-dialog-box-shadow);box-sizing:border-box;margin:var(--el-dialog-margin-top,15vh) auto 50px;overflow-wrap:break-word;padding:var(--el-dialog-padding-primary);position:relative;width:var(--el-dialog-width,50%)}.el-dialog:focus{outline:none!important}.el-dialog.is-align-center{margin:auto}.el-dialog.is-fullscreen{--el-dialog-width:100%;--el-dialog-margin-top:0;height:100%;margin-bottom:0;overflow:auto}.el-dialog__wrapper{bottom:0;left:0;margin:0;overflow:auto;position:fixed;right:0;top:0}.el-dialog.is-draggable .el-dialog__header{cursor:move;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.el-dialog__header{padding-bottom:var(--el-dialog-padding-primary)}.el-dialog__header.show-close{padding-right:calc(var(--el-dialog-padding-primary) + var(--el-message-close-size, 16px))}.el-dialog__headerbtn{background:transparent;border:none;cursor:pointer;font-size:var(--el-message-close-size,16px);height:48px;outline:none;padding:0;position:absolute;right:0;top:0;width:48px}.el-dialog__headerbtn .el-dialog__close{color:var(--el-color-info);font-size:inherit}.el-dialog__headerbtn:focus .el-dialog__close,.el-dialog__headerbtn:hover .el-dialog__close{color:var(--el-color-primary)}.el-dialog__title{color:var(--el-text-color-primary);font-size:var(--el-dialog-title-font-size);line-height:var(--el-dialog-font-line-height)}.el-dialog__body{color:var(--el-text-color-regular);font-size:var(--el-dialog-content-font-size)}.el-dialog__footer{box-sizing:border-box;padding-top:var(--el-dialog-padding-primary);text-align:right}.el-dialog--center{text-align:center}.el-dialog--center .el-dialog__body{text-align:initial}.el-dialog--center .el-dialog__footer{text-align:inherit}.el-overlay-dialog{bottom:0;left:0;overflow:auto;position:fixed;right:0;top:0}.dialog-fade-enter-active{-webkit-animation:modal-fade-in var(--el-transition-duration);animation:modal-fade-in var(--el-transition-duration)}.dialog-fade-enter-active .el-overlay-dialog{-webkit-animation:dialog-fade-in var(--el-transition-duration);animation:dialog-fade-in var(--el-transition-duration)}.dialog-fade-leave-active{-webkit-animation:modal-fade-out var(--el-transition-duration);animation:modal-fade-out var(--el-transition-duration)}.dialog-fade-leave-active .el-overlay-dialog{-webkit-animation:dialog-fade-out var(--el-transition-duration);animation:dialog-fade-out var(--el-transition-duration)}@-webkit-keyframes dialog-fade-in{0%{opacity:0;transform:translate3d(0,-20px,0)}to{opacity:1;transform:translateZ(0)}}@keyframes dialog-fade-in{0%{opacity:0;transform:translate3d(0,-20px,0)}to{opacity:1;transform:translateZ(0)}}@-webkit-keyframes dialog-fade-out{0%{opacity:1;transform:translateZ(0)}to{opacity:0;transform:translate3d(0,-20px,0)}}@keyframes dialog-fade-out{0%{opacity:1;transform:translateZ(0)}to{opacity:0;transform:translate3d(0,-20px,0)}}@-webkit-keyframes modal-fade-in{0%{opacity:0}to{opacity:1}}@keyframes modal-fade-in{0%{opacity:0}to{opacity:1}}@-webkit-keyframes modal-fade-out{0%{opacity:1}to{opacity:0}}@keyframes modal-fade-out{0%{opacity:1}to{opacity:0}}.el-overlay{background-color:var(--el-overlay-color-lighter);bottom:0;height:100%;left:0;overflow:auto;position:fixed;right:0;top:0;z-index:2000}.el-overlay .el-overlay-root{height:0}.infinite-list[data-v-5dbc0225]{height:800px;padding:0;margin:0;list-style:none;display:grid;grid-template-columns:repeat(auto-fill,minmax(167px,1fr));gap:10px;overflow-y:auto;overflow-x:hidden}#div-container[data-v-f6013da5]{position:absolute;right:30px;top:128px;display:block}.like-actress[data-v-f6013da5]{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADQAAAA0CAYAAADFeBvrAAAACXBIWXMAAAsTAAALEwEAmpwYAAAEf0lEQVR4nO1Y6U9UVxR//xF1ijIgwy6bwyaLQYLRFrC2tp8aPxiXuOOwCWljjNqiwRZKW62j0Lp0ZBEHBCSKS7T9IojKQFCIgGzH/G7y7sydeeC8N5MHQ+YkJ3kz953fPb93zj333CuFGIy0mlRabgeChAzBCBmXPW2Ca8gQLApGzWmQmraJHj1+Qv39jyl5Y2bgp5ztdivJgueAJpSXX0gLCwucEJ7zC7YFLqGbt2zkLjdu/huYhLJy8ml+ft6DEKKUk1cQeISa/77OSbx5M8xUFowFFKG0zFwhOqWWCjphqeS/MZa5aXPgELp6rZk77xgZoXXh0bTOGCVEyXq1KTAImdOzaW5ujjtuKaviY5byKiFK6Vl5K5/Q5b+sHtGRxxCl4WEHH7902bqyCSWlZtDMzIwzOuXO6MhaVnGSj8/OzrJOYkURWhMaQSnmLNqx8zuy2VqE6IRFxHi8j/8wxrsHWwuzBQawdCNkitnAdvnvd++hU6fP0vUbt1iPNjk5SUpSXlm9KFZFZY2iDaI7MDhIdnsXXfy1gQ4dKaWSnd/SxrRs+uzzcN8IJSSZ6bfGP1lTOT4+QWrE4XAoRkeIksO5lryR8fEJ5gt8ik80qyd0xdqkasKpqSl6+vQZNTX/w3q4T33Jzflb2buwga0auWK9pp5QfUOjBxBK7YuBQWpr76C6i/V09JiFSr7aRUkpGV6nhJLCFhjAAiawMceLgUHF9gm+qSa0PiqBHjzsF4DQ/oeGmXxeuN5qaJhJOH5A4BN801QUjOtj6V53jwCIL4f9RBcyNmfVhPT1PaAIU7xvVQ6kOrvuCcAdd+3ChulvXWs0UUtruzBn7/0+ioiM80/ZRlWyd4qkunvuU3hkrN/JsLnsXcJcPb3ezyWpmeiuvVPTV/NWlbKhu7tX1YeT1KbC7ZY21XntjcJp9/V6p0N9aqtufUCqta3do/IstZF6E333ioo51hpN+vRySuX0WGmZZkLHT5T7bXuQtDqBCd++e8edgFP+IARMX/Y6yZecd72i+rL4a81OFJV8w3GA6UuhkbQaFhR+IaRJTHyyZiei45IFrC2F2/UntO/AYe4AzjdacWQdGR3leHv3H9KfUO35Ou4ANt2l3o2KSWS61DuuGzewdSfU1n6HO1D3S73iO4kp6fT7H5fYpQm6ZhwKFzty40DnWrJ1JzQ09Io7cPDwcTEisUn0088XaHp6mpROpSAZl5Aq2OB0KsvLl0P6Egp3q3CF24p463Ky5keamPj0Cff9+0lGWj4KbN1e7JdKJ2kxQhVynTw2IYXd5oyNjXk4jn2lqvoHpq77liywgS0wXD+S1kon+VrhkEKvXr/2cBSXJ2fO1VJktPMwhmf8p3SxAgzXKzDMEaIXodoLzgrnLrhrwxpZ6iID+w5bYx8+LIqjtdJJvlY4WeQqZs7IUXUxCfJK9wZaK52kxQhnFPdmMjt3iyYHoLB1b3ZxlAjRi1Dxjl30/L//2VeUK5w/FFjABDb6uxC9CK1klZbbgSAhQzBCxmVPm+AaMqziovARGMODVG/9m4UAAAAASUVORK5CYII=);background-position:50%;background-repeat:no-repeat;background-size:cover;border-radius:4px;box-sizing:border-box;opacity:.9;height:28px;width:28px;display:block;margin:0 2px}.like-actress.active[data-v-f6013da5]{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADQAAAA0CAYAAADFeBvrAAAACXBIWXMAAAsTAAALEwEAmpwYAAADMUlEQVR4nO2Zy08TURSH+28AFvpCImkzZWY6MxTxAWKVRy1ETU1cGQkL3JmQqAsx6kYWFYVqFaJC4ttFiRIEi+WhMcbHAhMXboxuXJmgMSqSHHPGFKF07Mw4c6dDZvFLJuncO+frOffcc8+1UbQAa0k2ow2wgGjLQ4LhYWOtIdpKCoLqMGioC0A64YLHCTds2xowf8ilLrhgcbZI1ETcbW6gPWEafs38gUHh8+4WxrxAE3H3EkxGY+fd5gRqbWJgYXolzJKXmhnzAY31eVbBZDR6zm0uoNbG3N7JCH9ra6LNA/Sgd/Xaydb9Xo85gFpCLCzMFOcFwnciO5nCBxqJSa+dbCVjnsIGag6x8HM6v3eWeym8gy0sID8jQKguAAejfpi8+LcqkCscg2NxDpyLGFDtRg6iu2g4fMAH/cc2iGl57kYZfEmVKIaQ0vd0EbxP2uHpoBOGT6+HE4e80L7PD00NrGxYSaBQPQt3e8rhzc0ymNfQaLWaT5WIttzpKRdtUwz0sC9/6jVKY30e5UDoHaMNX5QQekkxEK6Zuetlhhu/mCW0CW1TlRRqajh4PewoKJhN/4CRleUEgYdnV5yGw7wYckAwyGmTtnmBF1OpUTDPrzohWM1puw8FOF7sC5CGmR1wAsfz2m+sKJYTIBVXXg2o1dQlF3CcfBjFQBmo8X79PYWdooBCGFVAqCqGV1RVq9k4mYByGOp/ilOa5eHT6DrNYXBOnFutXTa1AzG25RzklArnVJIEKK2A9oZp3UIO+3nEgY52+HQDOtLhIw800F2hG9Dl7gryQOmEfvsRbuDEgT6O2HUD+pC0kwWqruZWNOG1Fs4tt3ajtADa31Yl27jP4yVwtqtSFD7LHYffoEgBdXd68xr0dbJYTBzLD2P4r8e6KmH+UX6w451eckBDp6Qz3I+pYrh9phzqt0jf1m2u5UTYb2npjfnayQpyQLnORtiAxxqsebv89i724hA+V3PyyaCTHNCrIceKBYyXWJFG9X1qHItdpuWJ5uWwgxxQe9QPb2+Vijd02HxUC5KtaIQWz1vv7pWK36BIARWybEYbYAHRlocEw8PGWkP0Gk4KvwFxSX3f7xMBpgAAAABJRU5ErkJggg==)}#div-container[data-v-60269620]{position:absolute;right:20px;bottom:10px;display:block}.watchlater[data-v-60269620]{background-image:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHJlY3Qgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiByeD0iNCIgZmlsbD0iIzAwMCIgZmlsbC1vcGFjaXR5PSIuNyIvPjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMTIgNC45MjlBNy4wNzEgNy4wNzEgMCAxMDE3IDE3YS42NDMuNjQzIDAgMDEuOTA4LjkxIDguMzU3IDguMzU3IDAgMTEyLjQ0NS02LjE3MmwuNjIxLS42MjJhLjY0My42NDMgMCAxMS45MS45MWwtMS43MTUgMS43MTRhLjY0My42NDMgMCAwMS0uOTEgMGwtMS43MTQtMS43MTVhLjY0My42NDMgMCAxMS45MS0uOTA5bC42MTEuNjEyQTcuMDcyIDcuMDcyIDAgMDAxMiA0LjkyOXptMi41NzEgNy44MTNhLjg1Ny44NTcgMCAwMDAtMS40ODVsLTMuMjE1LTEuODU2YS44NTcuODU3IDAgMDAtMS4yODYuNzQydjMuNzEzYS44NTcuODU3IDAgMDAxLjI4Ni43NDJsMy4yMTUtMS44NTZ6IiBmaWxsPSIjZmZmIi8+PHJlY3Qgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiByeD0iNCIgZmlsbD0iIzMzMyIgZmlsbC1vcGFjaXR5PSIuOCIvPjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMTIgNC45MjlBNy4wNzEgNy4wNzEgMCAxMDE3IDE3YS42NDMuNjQzIDAgMDEuOTA4LjkxIDguMzU3IDguMzU3IDAgMTEyLjQ0NS02LjE3MmwuNjIxLS42MjJhLjY0My42NDMgMCAxMS45MS45MWwtMS43MTUgMS43MTRhLjY0My42NDMgMCAwMS0uOTEgMGwtMS43MTQtMS43MTVhLjY0My42NDMgMCAxMS45MS0uOTA5bC42MTEuNjEyQTcuMDcyIDcuMDcyIDAgMDAxMiA0LjkyOXptMi41NzEgNy44MTNhLjg1Ny44NTcgMCAwMDAtMS40ODVsLTMuMjE1LTEuODU2YS44NTcuODU3IDAgMDAtMS4yODYuNzQydjMuNzEzYS44NTcuODU3IDAgMDAxLjI4Ni43NDJsMy4yMTUtMS44NTZ6IiBmaWxsPSIjZmZmIi8+PC9zdmc+);background-position:50%;background-repeat:no-repeat;background-size:cover;opacity:.9;height:28px;width:28px;display:inline-block;vertical-align:bottom;margin:0 2px}.watchlater_tip[data-v-60269620]{background:#2f3238;border-radius:4px;box-sizing:border-box;color:#fff;font-size:12px;line-height:12px;opacity:.9;padding:6px 8px;position:absolute;right:-2px;top:32px;white-space:nowrap}.watchlater.active[data-v-60269620]{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAACXBIWXMAAAsTAAALEwEAmpwYAAAChElEQVR4nO2Y70tTURjH73906qbrzrH5a5ZbTZq2Qq0wISKGiGIiZUGiFfUmXJuroKAi+4mRmi8Kox8vVknvNqUfNHOwKVhbtA03tm+cA/UiDNa9g3NP3gNfuBv3judzvs9zz7NHIrKC/0ES7wAMENlwROGePsSoEZn/ThPDEXkDOjJy5jxq6hvFBjl+4hToun3nnrggnr37kM1m8Tm6iCprvZgg1poGfFmK4Uc6DffuVu4ApFSQ3r4B1Nmd7HpzRRVevHyFYrHIvl/v/nBkHuVe4ci8NpBtjiasreWwFIuhyb0HY8Er7IevXrv+12d8/iDuP5goq3z+oHZHunuOsnpIpb6jUCgg9Potc4Z3KhE1NdK+vxOrq18RTyR087olakCoXLs8aG3v4B4w0Qqid0m8A9AFSEfnYciVFrFBDhw8hFwuh1vjd8UFqbM7sby8gmQqBaerWUwQudKCubl37Ew54u3mDkBKBWn2tKFiq/X35xs3x9npPuoLrHv/1PQMaynKqanpGW0gDY0udqKHQm9Yl9s/MMggZp89x6YtZnFAiKwgMHaZNYkfPn5COp1BNLoIi83OPZWImhoZPDmEfD6PTCaDFk8b96CJWhAqb1cP+vqPcQ+YaAXRuyTeAegCpNbuEB/EsdONb8kkLgYuiQtiUmwIhyPsTUYbR2FBJh5OsoNx5PQ57gCkVJA/51ZDw2cZxKPJx+IMH2y129kQjvZXdOBA/7vTqcrCwnuYzNXijINM5mrWV9H15Oks4vEE6712uFq4pxL519SiTtD5Ll20dfd29XIPmqgB+aULo37WQPIOmGgF0bsk3gEYILLhiMI9fYhRIzL/nSaGIzL/3SUb2ZGfrhAUx4/9ESkAAAAASUVORK5CYII=)}.add_watched[data-v-60269620]{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAACXBIWXMAAAsTAAALEwEAmpwYAAABkElEQVR4nO2Z0UoCQRSGfaOJCUvZ2gIlJFdN20AJAhGqB2jXjbqpXiDB3bu9yVJ8hApfQMSb1JuddzkxQREUUrlnh81z8d3/3z/nzDKaYDwFcSahOgAjAa6+RUYjxNU3yWiJ+RJco5qegYpZW5ji3gHwpBadgKZnodvrgxAiNKbTKTTPL6MR6IUc/jP1ximuwIaehSAI0AQ6911cgfJ+FS28EAIen55xBeTSkYD4xycwHA7h6vrmA8t2oGJW4yMwHo/B87wv1BvH8RZot9uwltbjK+B5HuTypXgLGMUKCQCdgKARAlpiQbeQoGuULe2HzCiZqAKj0QhXQP568DKZoAkMBgNcAYntXKCEn81m4Ps+voCk3jiBu87D2wvqHfkYkTP8W+TYyOb9OeFDF/gO+YKaF2BRDBLgak9gt1DGHaEzq4kW3nVdSKY2cQUKJRNNwLKdaP7kqx0ewW2rFWrzlu3AenorGgHJymoatjM5yO7kFyb5g7EJXUAlCdUBGAlw9S0yGiGuvklGS8zVt/kXXgGUPel8iSBFFQAAAABJRU5ErkJggg==);background-position:50%;background-repeat:no-repeat;background-size:cover;opacity:.9;height:28px;width:28px;display:inline-block;vertical-align:bottom;margin:0 2px}.add_watched.active[data-v-60269620]{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAACXBIWXMAAAsTAAALEwEAmpwYAAACGklEQVR4nO3ZPS9DURgH8H6j0x4lSGlQyoIUEQ0hwd5B43WwYEMTBteg6OAMJk3EgBgk4iVRgn4Em2q8NaGPPKVF2ty22qfn0jv8ly73/zvnOTc5twbGy+EvxyC7ANMBXP4qMn2EuPyVZPoh5kXwGi2vtkNjW1/OsTU7wVRqKRygsqYJpjcOQQQhb/FdPMPA6GxhAPku/z0dg25aAI4NVXkRBJhc3aUF2B29pID57RtaAB46HRD8JzswcRCBhbPXH795jh6BT50kYhrxg8nh0h5gbD8CZiUEVSv3PxCe01coUUJJMfXOaAcwjuWXP4rVrIZBOX9LCyhZvAVmtsgHqJUXagAlBEZbp1xAuvIiHcDeQwfAOe7afATfdVR15rFI7VoYlEByeSELsBx4ix1GfEireEhCZFpeyAJsBAEG/U+JB7WIB1i/imY8NtIB4hPRv/WFwJ1w775kvPLSASLFTsSTycprAiBSILIpL7QA+I7ItrzQCiCOWLlM/Ur9EwDxy3ioAXXNTlLA3DExgJdVgS/wRAYY3ovQAjD49YCivPcyClZvmB6AaR8Yil3A8QYVD15GcIazDY4NrrxVpXzeASnHa+pEtUCuMeoALnkHGrppRwgv4GSApTtgFQ3EAIeLDMDHdgrzJx9+PcALeN7LV9oLA4jFbIldwPGtkXMq6rN6tv43K5Mcg+wCTAdw+avI9BHi8leSFeshfgfgH5I3Zmn8CAAAAABJRU5ErkJggg==)}.star[data-v-60269620]{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADQAAAA0CAYAAADFeBvrAAAACXBIWXMAAAsTAAALEwEAmpwYAAAEf0lEQVR4nO1Y6U9UVxR//xF1ijIgwy6bwyaLQYLRFrC2tp8aPxiXuOOwCWljjNqiwRZKW62j0Lp0ZBEHBCSKS7T9IojKQFCIgGzH/G7y7sydeeC8N5MHQ+YkJ3kz953fPb93zj333CuFGIy0mlRabgeChAzBCBmXPW2Ca8gQLApGzWmQmraJHj1+Qv39jyl5Y2bgp5ztdivJgueAJpSXX0gLCwucEJ7zC7YFLqGbt2zkLjdu/huYhLJy8ml+ft6DEKKUk1cQeISa/77OSbx5M8xUFowFFKG0zFwhOqWWCjphqeS/MZa5aXPgELp6rZk77xgZoXXh0bTOGCVEyXq1KTAImdOzaW5ujjtuKaviY5byKiFK6Vl5K5/Q5b+sHtGRxxCl4WEHH7902bqyCSWlZtDMzIwzOuXO6MhaVnGSj8/OzrJOYkURWhMaQSnmLNqx8zuy2VqE6IRFxHi8j/8wxrsHWwuzBQawdCNkitnAdvnvd++hU6fP0vUbt1iPNjk5SUpSXlm9KFZFZY2iDaI7MDhIdnsXXfy1gQ4dKaWSnd/SxrRs+uzzcN8IJSSZ6bfGP1lTOT4+QWrE4XAoRkeIksO5lryR8fEJ5gt8ik80qyd0xdqkasKpqSl6+vQZNTX/w3q4T33Jzflb2buwga0auWK9pp5QfUOjBxBK7YuBQWpr76C6i/V09JiFSr7aRUkpGV6nhJLCFhjAAiawMceLgUHF9gm+qSa0PiqBHjzsF4DQ/oeGmXxeuN5qaJhJOH5A4BN801QUjOtj6V53jwCIL4f9RBcyNmfVhPT1PaAIU7xvVQ6kOrvuCcAdd+3ChulvXWs0UUtruzBn7/0+ioiM80/ZRlWyd4qkunvuU3hkrN/JsLnsXcJcPb3ezyWpmeiuvVPTV/NWlbKhu7tX1YeT1KbC7ZY21XntjcJp9/V6p0N9aqtufUCqta3do/IstZF6E333ioo51hpN+vRySuX0WGmZZkLHT5T7bXuQtDqBCd++e8edgFP+IARMX/Y6yZecd72i+rL4a81OFJV8w3GA6UuhkbQaFhR+IaRJTHyyZiei45IFrC2F2/UntO/AYe4AzjdacWQdGR3leHv3H9KfUO35Ou4ANt2l3o2KSWS61DuuGzewdSfU1n6HO1D3S73iO4kp6fT7H5fYpQm6ZhwKFzty40DnWrJ1JzQ09Io7cPDwcTEisUn0088XaHp6mpROpSAZl5Aq2OB0KsvLl0P6Egp3q3CF24p463Ky5keamPj0Cff9+0lGWj4KbN1e7JdKJ2kxQhVynTw2IYXd5oyNjXk4jn2lqvoHpq77liywgS0wXD+S1kon+VrhkEKvXr/2cBSXJ2fO1VJktPMwhmf8p3SxAgzXKzDMEaIXodoLzgrnLrhrwxpZ6iID+w5bYx8+LIqjtdJJvlY4WeQqZs7IUXUxCfJK9wZaK52kxQhnFPdmMjt3iyYHoLB1b3ZxlAjRi1Dxjl30/L//2VeUK5w/FFjABDb6uxC9CK1klZbbgSAhQzBCxmVPm+AaMqziovARGMODVG/9m4UAAAAASUVORK5CYII=);background-position:50%;background-repeat:no-repeat;background-size:cover;border-radius:4px;box-sizing:border-box;opacity:.9;height:28px;width:28px;display:inline-block;vertical-align:bottom;margin:0 2px}.star.active[data-v-60269620]{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADQAAAA0CAYAAADFeBvrAAAACXBIWXMAAAsTAAALEwEAmpwYAAADMUlEQVR4nO2Zy08TURSH+28AFvpCImkzZWY6MxTxAWKVRy1ETU1cGQkL3JmQqAsx6kYWFYVqFaJC4ttFiRIEi+WhMcbHAhMXboxuXJmgMSqSHHPGFKF07Mw4c6dDZvFLJuncO+frOffcc8+1UbQAa0k2ow2wgGjLQ4LhYWOtIdpKCoLqMGioC0A64YLHCTds2xowf8ilLrhgcbZI1ETcbW6gPWEafs38gUHh8+4WxrxAE3H3EkxGY+fd5gRqbWJgYXolzJKXmhnzAY31eVbBZDR6zm0uoNbG3N7JCH9ra6LNA/Sgd/Xaydb9Xo85gFpCLCzMFOcFwnciO5nCBxqJSa+dbCVjnsIGag6x8HM6v3eWeym8gy0sID8jQKguAAejfpi8+LcqkCscg2NxDpyLGFDtRg6iu2g4fMAH/cc2iGl57kYZfEmVKIaQ0vd0EbxP2uHpoBOGT6+HE4e80L7PD00NrGxYSaBQPQt3e8rhzc0ymNfQaLWaT5WIttzpKRdtUwz0sC9/6jVKY30e5UDoHaMNX5QQekkxEK6Zuetlhhu/mCW0CW1TlRRqajh4PewoKJhN/4CRleUEgYdnV5yGw7wYckAwyGmTtnmBF1OpUTDPrzohWM1puw8FOF7sC5CGmR1wAsfz2m+sKJYTIBVXXg2o1dQlF3CcfBjFQBmo8X79PYWdooBCGFVAqCqGV1RVq9k4mYByGOp/ilOa5eHT6DrNYXBOnFutXTa1AzG25RzklArnVJIEKK2A9oZp3UIO+3nEgY52+HQDOtLhIw800F2hG9Dl7gryQOmEfvsRbuDEgT6O2HUD+pC0kwWqruZWNOG1Fs4tt3ajtADa31Yl27jP4yVwtqtSFD7LHYffoEgBdXd68xr0dbJYTBzLD2P4r8e6KmH+UX6w451eckBDp6Qz3I+pYrh9phzqt0jf1m2u5UTYb2npjfnayQpyQLnORtiAxxqsebv89i724hA+V3PyyaCTHNCrIceKBYyXWJFG9X1qHItdpuWJ5uWwgxxQe9QPb2+Vijd02HxUC5KtaIQWz1vv7pWK36BIARWybEYbYAHRlocEw8PGWkP0Gk4KvwFxSX3f7xMBpgAAAABJRU5ErkJggg==)}.watchlater[data-v-5cbfd23f]{background-image:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHJlY3Qgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiByeD0iNCIgZmlsbD0iIzAwMCIgZmlsbC1vcGFjaXR5PSIuNyIvPjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMTIgNC45MjlBNy4wNzEgNy4wNzEgMCAxMDE3IDE3YS42NDMuNjQzIDAgMDEuOTA4LjkxIDguMzU3IDguMzU3IDAgMTEyLjQ0NS02LjE3MmwuNjIxLS42MjJhLjY0My42NDMgMCAxMS45MS45MWwtMS43MTUgMS43MTRhLjY0My42NDMgMCAwMS0uOTEgMGwtMS43MTQtMS43MTVhLjY0My42NDMgMCAxMS45MS0uOTA5bC42MTEuNjEyQTcuMDcyIDcuMDcyIDAgMDAxMiA0LjkyOXptMi41NzEgNy44MTNhLjg1Ny44NTcgMCAwMDAtMS40ODVsLTMuMjE1LTEuODU2YS44NTcuODU3IDAgMDAtMS4yODYuNzQydjMuNzEzYS44NTcuODU3IDAgMDAxLjI4Ni43NDJsMy4yMTUtMS44NTZ6IiBmaWxsPSIjZmZmIi8+PHJlY3Qgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiByeD0iNCIgZmlsbD0iIzMzMyIgZmlsbC1vcGFjaXR5PSIuOCIvPjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMTIgNC45MjlBNy4wNzEgNy4wNzEgMCAxMDE3IDE3YS42NDMuNjQzIDAgMDEuOTA4LjkxIDguMzU3IDguMzU3IDAgMTEyLjQ0NS02LjE3MmwuNjIxLS42MjJhLjY0My42NDMgMCAxMS45MS45MWwtMS43MTUgMS43MTRhLjY0My42NDMgMCAwMS0uOTEgMGwtMS43MTQtMS43MTVhLjY0My42NDMgMCAxMS45MS0uOTA5bC42MTEuNjEyQTcuMDcyIDcuMDcyIDAgMDAxMiA0LjkyOXptMi41NzEgNy44MTNhLjg1Ny44NTcgMCAwMDAtMS40ODVsLTMuMjE1LTEuODU2YS44NTcuODU3IDAgMDAtMS4yODYuNzQydjMuNzEzYS44NTcuODU3IDAgMDAxLjI4Ni43NDJsMy4yMTUtMS44NTZ6IiBmaWxsPSIjZmZmIi8+PC9zdmc+);background-position:50%;background-repeat:no-repeat;background-size:cover;opacity:.9;height:28px;width:28px;position:absolute;right:25px;top:22px;display:none}.watchlater_tip[data-v-5cbfd23f]{background:#2f3238;border-radius:4px;box-sizing:border-box;color:#fff;font-size:12px;line-height:12px;opacity:.9;padding:6px 8px;position:absolute;right:-2px;top:32px;white-space:nowrap;display:none}.watchlater.active[data-v-5cbfd23f]{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAACXBIWXMAAAsTAAALEwEAmpwYAAAChElEQVR4nO2Y70tTURjH73906qbrzrH5a5ZbTZq2Qq0wISKGiGIiZUGiFfUmXJuroKAi+4mRmi8Kox8vVknvNqUfNHOwKVhbtA03tm+cA/UiDNa9g3NP3gNfuBv3judzvs9zz7NHIrKC/0ES7wAMENlwROGePsSoEZn/ThPDEXkDOjJy5jxq6hvFBjl+4hToun3nnrggnr37kM1m8Tm6iCprvZgg1poGfFmK4Uc6DffuVu4ApFSQ3r4B1Nmd7HpzRRVevHyFYrHIvl/v/nBkHuVe4ci8NpBtjiasreWwFIuhyb0HY8Er7IevXrv+12d8/iDuP5goq3z+oHZHunuOsnpIpb6jUCgg9Potc4Z3KhE1NdK+vxOrq18RTyR087olakCoXLs8aG3v4B4w0Qqid0m8A9AFSEfnYciVFrFBDhw8hFwuh1vjd8UFqbM7sby8gmQqBaerWUwQudKCubl37Ew54u3mDkBKBWn2tKFiq/X35xs3x9npPuoLrHv/1PQMaynKqanpGW0gDY0udqKHQm9Yl9s/MMggZp89x6YtZnFAiKwgMHaZNYkfPn5COp1BNLoIi83OPZWImhoZPDmEfD6PTCaDFk8b96CJWhAqb1cP+vqPcQ+YaAXRuyTeAegCpNbuEB/EsdONb8kkLgYuiQtiUmwIhyPsTUYbR2FBJh5OsoNx5PQ57gCkVJA/51ZDw2cZxKPJx+IMH2y129kQjvZXdOBA/7vTqcrCwnuYzNXijINM5mrWV9H15Oks4vEE6712uFq4pxL519SiTtD5Ll20dfd29XIPmqgB+aULo37WQPIOmGgF0bsk3gEYILLhiMI9fYhRIzL/nSaGIzL/3SUb2ZGfrhAUx4/9ESkAAAAASUVORK5CYII=)}.add_watched[data-v-5cbfd23f]{background:#2f3238;border-radius:4px;box-sizing:border-box;color:#fff;font-size:12px;line-height:12px;opacity:.9;padding:6px 8px;position:absolute;right:25px;top:195px;white-space:nowrap;display:none}.watched[data-v-5cbfd23f]{background:#2f3238;border-radius:4px;box-sizing:border-box;color:#fff;font-size:12px;line-height:12px;opacity:.9;padding:6px 8px;position:absolute;left:25px;top:195px;white-space:nowrap;display:none}.star[data-v-5cbfd23f]{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADQAAAA0CAYAAADFeBvrAAAACXBIWXMAAAsTAAALEwEAmpwYAAAEf0lEQVR4nO1Y6U9UVxR//xF1ijIgwy6bwyaLQYLRFrC2tp8aPxiXuOOwCWljjNqiwRZKW62j0Lp0ZBEHBCSKS7T9IojKQFCIgGzH/G7y7sydeeC8N5MHQ+YkJ3kz953fPb93zj333CuFGIy0mlRabgeChAzBCBmXPW2Ca8gQLApGzWmQmraJHj1+Qv39jyl5Y2bgp5ztdivJgueAJpSXX0gLCwucEJ7zC7YFLqGbt2zkLjdu/huYhLJy8ml+ft6DEKKUk1cQeISa/77OSbx5M8xUFowFFKG0zFwhOqWWCjphqeS/MZa5aXPgELp6rZk77xgZoXXh0bTOGCVEyXq1KTAImdOzaW5ujjtuKaviY5byKiFK6Vl5K5/Q5b+sHtGRxxCl4WEHH7902bqyCSWlZtDMzIwzOuXO6MhaVnGSj8/OzrJOYkURWhMaQSnmLNqx8zuy2VqE6IRFxHi8j/8wxrsHWwuzBQawdCNkitnAdvnvd++hU6fP0vUbt1iPNjk5SUpSXlm9KFZFZY2iDaI7MDhIdnsXXfy1gQ4dKaWSnd/SxrRs+uzzcN8IJSSZ6bfGP1lTOT4+QWrE4XAoRkeIksO5lryR8fEJ5gt8ik80qyd0xdqkasKpqSl6+vQZNTX/w3q4T33Jzflb2buwga0auWK9pp5QfUOjBxBK7YuBQWpr76C6i/V09JiFSr7aRUkpGV6nhJLCFhjAAiawMceLgUHF9gm+qSa0PiqBHjzsF4DQ/oeGmXxeuN5qaJhJOH5A4BN801QUjOtj6V53jwCIL4f9RBcyNmfVhPT1PaAIU7xvVQ6kOrvuCcAdd+3ChulvXWs0UUtruzBn7/0+ioiM80/ZRlWyd4qkunvuU3hkrN/JsLnsXcJcPb3ezyWpmeiuvVPTV/NWlbKhu7tX1YeT1KbC7ZY21XntjcJp9/V6p0N9aqtufUCqta3do/IstZF6E333ioo51hpN+vRySuX0WGmZZkLHT5T7bXuQtDqBCd++e8edgFP+IARMX/Y6yZecd72i+rL4a81OFJV8w3GA6UuhkbQaFhR+IaRJTHyyZiei45IFrC2F2/UntO/AYe4AzjdacWQdGR3leHv3H9KfUO35Ou4ANt2l3o2KSWS61DuuGzewdSfU1n6HO1D3S73iO4kp6fT7H5fYpQm6ZhwKFzty40DnWrJ1JzQ09Io7cPDwcTEisUn0088XaHp6mpROpSAZl5Aq2OB0KsvLl0P6Egp3q3CF24p463Ky5keamPj0Cff9+0lGWj4KbN1e7JdKJ2kxQhVynTw2IYXd5oyNjXk4jn2lqvoHpq77liywgS0wXD+S1kon+VrhkEKvXr/2cBSXJ2fO1VJktPMwhmf8p3SxAgzXKzDMEaIXodoLzgrnLrhrwxpZ6iID+w5bYx8+LIqjtdJJvlY4WeQqZs7IUXUxCfJK9wZaK52kxQhnFPdmMjt3iyYHoLB1b3ZxlAjRi1Dxjl30/L//2VeUK5w/FFjABDb6uxC9CK1klZbbgSAhQzBCxmVPm+AaMqziovARGMODVG/9m4UAAAAASUVORK5CYII=);background-position:50%;background-repeat:no-repeat;background-size:cover;border-radius:4px;box-sizing:border-box;opacity:.9;height:28px;width:28px;position:absolute;left:25px;top:22px;display:none}.star.active[data-v-5cbfd23f]{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADQAAAA0CAYAAADFeBvrAAAACXBIWXMAAAsTAAALEwEAmpwYAAADMUlEQVR4nO2Zy08TURSH+28AFvpCImkzZWY6MxTxAWKVRy1ETU1cGQkL3JmQqAsx6kYWFYVqFaJC4ttFiRIEi+WhMcbHAhMXboxuXJmgMSqSHHPGFKF07Mw4c6dDZvFLJuncO+frOffcc8+1UbQAa0k2ow2wgGjLQ4LhYWOtIdpKCoLqMGioC0A64YLHCTds2xowf8ilLrhgcbZI1ETcbW6gPWEafs38gUHh8+4WxrxAE3H3EkxGY+fd5gRqbWJgYXolzJKXmhnzAY31eVbBZDR6zm0uoNbG3N7JCH9ra6LNA/Sgd/Xaydb9Xo85gFpCLCzMFOcFwnciO5nCBxqJSa+dbCVjnsIGag6x8HM6v3eWeym8gy0sID8jQKguAAejfpi8+LcqkCscg2NxDpyLGFDtRg6iu2g4fMAH/cc2iGl57kYZfEmVKIaQ0vd0EbxP2uHpoBOGT6+HE4e80L7PD00NrGxYSaBQPQt3e8rhzc0ymNfQaLWaT5WIttzpKRdtUwz0sC9/6jVKY30e5UDoHaMNX5QQekkxEK6Zuetlhhu/mCW0CW1TlRRqajh4PewoKJhN/4CRleUEgYdnV5yGw7wYckAwyGmTtnmBF1OpUTDPrzohWM1puw8FOF7sC5CGmR1wAsfz2m+sKJYTIBVXXg2o1dQlF3CcfBjFQBmo8X79PYWdooBCGFVAqCqGV1RVq9k4mYByGOp/ilOa5eHT6DrNYXBOnFutXTa1AzG25RzklArnVJIEKK2A9oZp3UIO+3nEgY52+HQDOtLhIw800F2hG9Dl7gryQOmEfvsRbuDEgT6O2HUD+pC0kwWqruZWNOG1Fs4tt3ajtADa31Yl27jP4yVwtqtSFD7LHYffoEgBdXd68xr0dbJYTBzLD2P4r8e6KmH+UX6w451eckBDp6Qz3I+pYrh9phzqt0jf1m2u5UTYb2npjfnayQpyQLnORtiAxxqsebv89i724hA+V3PyyaCTHNCrIceKBYyXWJFG9X1qHItdpuWJ5uWwgxxQe9QPb2+Vijd02HxUC5KtaIQWz1vv7pWK36BIARWybEYbYAHRlocEw8PGWkP0Gk4KvwFxSX3f7xMBpgAAAABJRU5ErkJggg==)} ');
(function (vue) {
'use strict';
var isVue2 = false;
/*!
* pinia v2.1.7
* (c) 2023 Eduardo San Martin Morote
* @license MIT
*/
let activePinia;
const setActivePinia = (pinia) => activePinia = pinia;
const piniaSymbol = (
/* istanbul ignore next */
Symbol()
);
function isPlainObject(o) {
return o && typeof o === "object" && Object.prototype.toString.call(o) === "[object Object]" && typeof o.toJSON !== "function";
}
var MutationType;
(function(MutationType2) {
MutationType2["direct"] = "direct";
MutationType2["patchObject"] = "patch object";
MutationType2["patchFunction"] = "patch function";
})(MutationType || (MutationType = {}));
function createPinia() {
const scope = vue.effectScope(true);
const state = scope.run(() => vue.ref({}));
let _p = [];
let toBeInstalled = [];
const pinia = vue.markRaw({
install(app) {
setActivePinia(pinia);
{
pinia._a = app;
app.provide(piniaSymbol, pinia);
app.config.globalProperties.$pinia = pinia;
toBeInstalled.forEach((plugin) => _p.push(plugin));
toBeInstalled = [];
}
},
use(plugin) {
if (!this._a && !isVue2) {
toBeInstalled.push(plugin);
} else {
_p.push(plugin);
}
return this;
},
_p,
// it's actually undefined here
// @ts-expect-error
_a: null,
_e: scope,
_s: /* @__PURE__ */ new Map(),
state
});
return pinia;
}
const noop = () => {
};
function addSubscription(subscriptions, callback, detached, onCleanup = noop) {
subscriptions.push(callback);
const removeSubscription = () => {
const idx = subscriptions.indexOf(callback);
if (idx > -1) {
subscriptions.splice(idx, 1);
onCleanup();
}
};
if (!detached && vue.getCurrentScope()) {
vue.onScopeDispose(removeSubscription);
}
return removeSubscription;
}
function triggerSubscriptions(subscriptions, ...args) {
subscriptions.slice().forEach((callback) => {
callback(...args);
});
}
const fallbackRunWithContext = (fn) => fn();
function mergeReactiveObjects(target, patchToApply) {
if (target instanceof Map && patchToApply instanceof Map) {
patchToApply.forEach((value, key) => target.set(key, value));
}
if (target instanceof Set && patchToApply instanceof Set) {
patchToApply.forEach(target.add, target);
}
for (const key in patchToApply) {
if (!patchToApply.hasOwnProperty(key))
continue;
const subPatch = patchToApply[key];
const targetValue = target[key];
if (isPlainObject(targetValue) && isPlainObject(subPatch) && target.hasOwnProperty(key) && !vue.isRef(subPatch) && !vue.isReactive(subPatch)) {
target[key] = mergeReactiveObjects(targetValue, subPatch);
} else {
target[key] = subPatch;
}
}
return target;
}
const skipHydrateSymbol = (
/* istanbul ignore next */
Symbol()
);
function shouldHydrate(obj) {
return !isPlainObject(obj) || !obj.hasOwnProperty(skipHydrateSymbol);
}
const { assign } = Object;
function isComputed(o) {
return !!(vue.isRef(o) && o.effect);
}
function createOptionsStore(id, options, pinia, hot) {
const { state, actions, getters } = options;
const initialState = pinia.state.value[id];
let store;
function setup() {
if (!initialState && true) {
{
pinia.state.value[id] = state ? state() : {};
}
}
const localState = vue.toRefs(pinia.state.value[id]);
return assign(localState, actions, Object.keys(getters || {}).reduce((computedGetters, name) => {
computedGetters[name] = vue.markRaw(vue.computed(() => {
setActivePinia(pinia);
const store2 = pinia._s.get(id);
return getters[name].call(store2, store2);
}));
return computedGetters;
}, {}));
}
store = createSetupStore(id, setup, options, pinia, hot, true);
return store;
}
function createSetupStore($id, setup, options = {}, pinia, hot, isOptionsStore) {
let scope;
const optionsForPlugin = assign({ actions: {} }, options);
const $subscribeOptions = {
deep: true
// flush: 'post',
};
let isListening;
let isSyncListening;
let subscriptions = [];
let actionSubscriptions = [];
let debuggerEvents;
const initialState = pinia.state.value[$id];
if (!isOptionsStore && !initialState && true) {
{
pinia.state.value[$id] = {};
}
}
vue.ref({});
let activeListener;
function $patch(partialStateOrMutator) {
let subscriptionMutation;
isListening = isSyncListening = false;
if (typeof partialStateOrMutator === "function") {
partialStateOrMutator(pinia.state.value[$id]);
subscriptionMutation = {
type: MutationType.patchFunction,
storeId: $id,
events: debuggerEvents
};
} else {
mergeReactiveObjects(pinia.state.value[$id], partialStateOrMutator);
subscriptionMutation = {
type: MutationType.patchObject,
payload: partialStateOrMutator,
storeId: $id,
events: debuggerEvents
};
}
const myListenerId = activeListener = Symbol();
vue.nextTick().then(() => {
if (activeListener === myListenerId) {
isListening = true;
}
});
isSyncListening = true;
triggerSubscriptions(subscriptions, subscriptionMutation, pinia.state.value[$id]);
}
const $reset = isOptionsStore ? function $reset2() {
const { state } = options;
const newState = state ? state() : {};
this.$patch(($state) => {
assign($state, newState);
});
} : (
/* istanbul ignore next */
noop
);
function $dispose() {
scope.stop();
subscriptions = [];
actionSubscriptions = [];
pinia._s.delete($id);
}
function wrapAction(name, action) {
return function() {
setActivePinia(pinia);
const args = Array.from(arguments);
const afterCallbackList = [];
const onErrorCallbackList = [];
function after(callback) {
afterCallbackList.push(callback);
}
function onError(callback) {
onErrorCallbackList.push(callback);
}
triggerSubscriptions(actionSubscriptions, {
args,
name,
store,
after,
onError
});
let ret;
try {
ret = action.apply(this && this.$id === $id ? this : store, args);
} catch (error) {
triggerSubscriptions(onErrorCallbackList, error);
throw error;
}
if (ret instanceof Promise) {
return ret.then((value) => {
triggerSubscriptions(afterCallbackList, value);
return value;
}).catch((error) => {
triggerSubscriptions(onErrorCallbackList, error);
return Promise.reject(error);
});
}
triggerSubscriptions(afterCallbackList, ret);
return ret;
};
}
const partialStore = {
_p: pinia,
// _s: scope,
$id,
$onAction: addSubscription.bind(null, actionSubscriptions),
$patch,
$reset,
$subscribe(callback, options2 = {}) {
const removeSubscription = addSubscription(subscriptions, callback, options2.detached, () => stopWatcher());
const stopWatcher = scope.run(() => vue.watch(() => pinia.state.value[$id], (state) => {
if (options2.flush === "sync" ? isSyncListening : isListening) {
callback({
storeId: $id,
type: MutationType.direct,
events: debuggerEvents
}, state);
}
}, assign({}, $subscribeOptions, options2)));
return removeSubscription;
},
$dispose
};
const store = vue.reactive(partialStore);
pinia._s.set($id, store);
const runWithContext = pinia._a && pinia._a.runWithContext || fallbackRunWithContext;
const setupStore = runWithContext(() => pinia._e.run(() => (scope = vue.effectScope()).run(setup)));
for (const key in setupStore) {
const prop = setupStore[key];
if (vue.isRef(prop) && !isComputed(prop) || vue.isReactive(prop)) {
if (!isOptionsStore) {
if (initialState && shouldHydrate(prop)) {
if (vue.isRef(prop)) {
prop.value = initialState[key];
} else {
mergeReactiveObjects(prop, initialState[key]);
}
}
{
pinia.state.value[$id][key] = prop;
}
}
} else if (typeof prop === "function") {
const actionValue = wrapAction(key, prop);
{
setupStore[key] = actionValue;
}
optionsForPlugin.actions[key] = prop;
} else
;
}
{
assign(store, setupStore);
assign(vue.toRaw(store), setupStore);
}
Object.defineProperty(store, "$state", {
get: () => pinia.state.value[$id],
set: (state) => {
$patch(($state) => {
assign($state, state);
});
}
});
pinia._p.forEach((extender) => {
{
assign(store, scope.run(() => extender({
store,
app: pinia._a,
pinia,
options: optionsForPlugin
})));
}
});
if (initialState && isOptionsStore && options.hydrate) {
options.hydrate(store.$state, initialState);
}
isListening = true;
isSyncListening = true;
return store;
}
function defineStore(idOrOptions, setup, setupOptions) {
let id;
let options;
const isSetupStore = typeof setup === "function";
if (typeof idOrOptions === "string") {
id = idOrOptions;
options = isSetupStore ? setupOptions : setup;
} else {
options = idOrOptions;
id = idOrOptions.id;
}
function useStore(pinia, hot) {
const hasContext = vue.hasInjectionContext();
pinia = // in test mode, ignore the argument provided as we can always retrieve a
// pinia instance with getActivePinia()
pinia || (hasContext ? vue.inject(piniaSymbol, null) : null);
if (pinia)
setActivePinia(pinia);
pinia = activePinia;
if (!pinia._s.has(id)) {
if (isSetupStore) {
createSetupStore(id, setup, options, pinia);
} else {
createOptionsStore(id, options, pinia);
}
}
const store = pinia._s.get(id);
return store;
}
useStore.$id = id;
return useStore;
}
function storeToRefs(store) {
{
store = vue.toRaw(store);
const refs = {};
for (const key in store) {
const value = store[key];
if (vue.isRef(value) || vue.isReactive(value)) {
refs[key] = // ---
vue.toRef(store, key);
}
}
return refs;
}
}
var _a;
const isClient = typeof window !== "undefined";
isClient && ((_a = window == null ? void 0 : window.navigator) == null ? void 0 : _a.userAgent) && /iP(ad|hone|od)/.test(window.navigator.userAgent);
function resolveUnref(r) {
return typeof r === "function" ? r() : vue.unref(r);
}
function tryOnScopeDispose(fn) {
if (vue.getCurrentScope()) {
vue.onScopeDispose(fn);
return true;
}
return false;
}
function useTimeoutFn(cb, interval, options = {}) {
const {
immediate = true
} = options;
const isPending = vue.ref(false);
let timer = null;
function clear() {
if (timer) {
clearTimeout(timer);
timer = null;
}
}
function stop() {
isPending.value = false;
clear();
}
function start(...args) {
clear();
isPending.value = true;
timer = setTimeout(() => {
isPending.value = false;
timer = null;
cb(...args);
}, resolveUnref(interval));
}
if (immediate) {
isPending.value = true;
if (isClient)
start();
}
tryOnScopeDispose(stop);
return {
isPending: vue.readonly(isPending),
start,
stop
};
}
const getOffsetTop = (el) => {
let offset = 0;
let parent = el;
while (parent) {
offset += parent.offsetTop;
parent = parent.offsetParent;
}
return offset;
};
const getOffsetTopDistance = (el, containerEl) => {
return Math.abs(getOffsetTop(el) - getOffsetTop(containerEl));
};
/**
* @vue/shared v3.4.21
* (c) 2018-present Yuxi (Evan) You and Vue contributors
* @license MIT
**/
const NOOP = () => {
};
const hasOwnProperty$4 = Object.prototype.hasOwnProperty;
const hasOwn = (val, key) => hasOwnProperty$4.call(val, key);
const isFunction$1 = (val) => typeof val === "function";
const isString = (val) => typeof val === "string";
const isSymbol$1 = (val) => typeof val === "symbol";
const isObject$1 = (val) => val !== null && typeof val === "object";
const cacheStringFunction = (fn) => {
const cache = /* @__PURE__ */ Object.create(null);
return (str) => {
const hit = cache[str];
return hit || (cache[str] = fn(str));
};
};
const camelizeRE = /-(\w)/g;
const camelize = cacheStringFunction((str) => {
return str.replace(camelizeRE, (_, c) => c ? c.toUpperCase() : "");
});
const hasChanged = (value, oldValue) => !Object.is(value, oldValue);
var freeGlobal = typeof global == "object" && global && global.Object === Object && global;
var freeSelf = typeof self == "object" && self && self.Object === Object && self;
var root = freeGlobal || freeSelf || Function("return this")();
var Symbol$1 = root.Symbol;
var objectProto$4 = Object.prototype;
var hasOwnProperty$3 = objectProto$4.hasOwnProperty;
var nativeObjectToString$1 = objectProto$4.toString;
var symToStringTag$1 = Symbol$1 ? Symbol$1.toStringTag : void 0;
function getRawTag(value) {
var isOwn = hasOwnProperty$3.call(value, symToStringTag$1), tag = value[symToStringTag$1];
try {
value[symToStringTag$1] = void 0;
var unmasked = true;
} catch (e) {
}
var result = nativeObjectToString$1.call(value);
if (unmasked) {
if (isOwn) {
value[symToStringTag$1] = tag;
} else {
delete value[symToStringTag$1];
}
}
return result;
}
var objectProto$3 = Object.prototype;
var nativeObjectToString = objectProto$3.toString;
function objectToString(value) {
return nativeObjectToString.call(value);
}
var nullTag = "[object Null]", undefinedTag = "[object Undefined]";
var symToStringTag = Symbol$1 ? Symbol$1.toStringTag : void 0;
function baseGetTag(value) {
if (value == null) {
return value === void 0 ? undefinedTag : nullTag;
}
return symToStringTag && symToStringTag in Object(value) ? getRawTag(value) : objectToString(value);
}
function isObjectLike(value) {
return value != null && typeof value == "object";
}
var symbolTag = "[object Symbol]";
function isSymbol(value) {
return typeof value == "symbol" || isObjectLike(value) && baseGetTag(value) == symbolTag;
}
function arrayMap(array, iteratee) {
var index = -1, length = array == null ? 0 : array.length, result = Array(length);
while (++index < length) {
result[index] = iteratee(array[index], index, array);
}
return result;
}
var isArray = Array.isArray;
var INFINITY$1 = 1 / 0;
var symbolProto = Symbol$1 ? Symbol$1.prototype : void 0, symbolToString = symbolProto ? symbolProto.toString : void 0;
function baseToString(value) {
if (typeof value == "string") {
return value;
}
if (isArray(value)) {
return arrayMap(value, baseToString) + "";
}
if (isSymbol(value)) {
return symbolToString ? symbolToString.call(value) : "";
}
var result = value + "";
return result == "0" && 1 / value == -INFINITY$1 ? "-0" : result;
}
var reWhitespace = /\s/;
function trimmedEndIndex(string) {
var index = string.length;
while (index-- && reWhitespace.test(string.charAt(index))) {
}
return index;
}
var reTrimStart = /^\s+/;
function baseTrim(string) {
return string ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, "") : string;
}
function isObject(value) {
var type = typeof value;
return value != null && (type == "object" || type == "function");
}
var NAN = 0 / 0;
var reIsBadHex = /^[-+]0x[0-9a-f]+$/i;
var reIsBinary = /^0b[01]+$/i;
var reIsOctal = /^0o[0-7]+$/i;
var freeParseInt = parseInt;
function toNumber(value) {
if (typeof value == "number") {
return value;
}
if (isSymbol(value)) {
return NAN;
}
if (isObject(value)) {
var other = typeof value.valueOf == "function" ? value.valueOf() : value;
value = isObject(other) ? other + "" : other;
}
if (typeof value != "string") {
return value === 0 ? value : +value;
}
value = baseTrim(value);
var isBinary = reIsBinary.test(value);
return isBinary || reIsOctal.test(value) ? freeParseInt(value.slice(2), isBinary ? 2 : 8) : reIsBadHex.test(value) ? NAN : +value;
}
var asyncTag = "[object AsyncFunction]", funcTag = "[object Function]", genTag = "[object GeneratorFunction]", proxyTag = "[object Proxy]";
function isFunction(value) {
if (!isObject(value)) {
return false;
}
var tag = baseGetTag(value);
return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;
}
var coreJsData = root["__core-js_shared__"];
var maskSrcKey = function() {
var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || "");
return uid ? "Symbol(src)_1." + uid : "";
}();
function isMasked(func) {
return !!maskSrcKey && maskSrcKey in func;
}
var funcProto$1 = Function.prototype;
var funcToString$1 = funcProto$1.toString;
function toSource(func) {
if (func != null) {
try {
return funcToString$1.call(func);
} catch (e) {
}
try {
return func + "";
} catch (e) {
}
}
return "";
}
var reRegExpChar = /[\\^$.*+?()[\]{}|]/g;
var reIsHostCtor = /^\[object .+?Constructor\]$/;
var funcProto = Function.prototype, objectProto$2 = Object.prototype;
var funcToString = funcProto.toString;
var hasOwnProperty$2 = objectProto$2.hasOwnProperty;
var reIsNative = RegExp(
"^" + funcToString.call(hasOwnProperty$2).replace(reRegExpChar, "\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, "$1.*?") + "$"
);
function baseIsNative(value) {
if (!isObject(value) || isMasked(value)) {
return false;
}
var pattern = isFunction(value) ? reIsNative : reIsHostCtor;
return pattern.test(toSource(value));
}
function getValue(object, key) {
return object == null ? void 0 : object[key];
}
function getNative(object, key) {
var value = getValue(object, key);
return baseIsNative(value) ? value : void 0;
}
function eq(value, other) {
return value === other || value !== value && other !== other;
}
var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/, reIsPlainProp = /^\w*$/;
function isKey(value, object) {
if (isArray(value)) {
return false;
}
var type = typeof value;
if (type == "number" || type == "symbol" || type == "boolean" || value == null || isSymbol(value)) {
return true;
}
return reIsPlainProp.test(value) || !reIsDeepProp.test(value) || object != null && value in Object(object);
}
var nativeCreate = getNative(Object, "create");
function hashClear() {
this.__data__ = nativeCreate ? nativeCreate(null) : {};
this.size = 0;
}
function hashDelete(key) {
var result = this.has(key) && delete this.__data__[key];
this.size -= result ? 1 : 0;
return result;
}
var HASH_UNDEFINED$1 = "__lodash_hash_undefined__";
var objectProto$1 = Object.prototype;
var hasOwnProperty$1 = objectProto$1.hasOwnProperty;
function hashGet(key) {
var data = this.__data__;
if (nativeCreate) {
var result = data[key];
return result === HASH_UNDEFINED$1 ? void 0 : result;
}
return hasOwnProperty$1.call(data, key) ? data[key] : void 0;
}
var objectProto = Object.prototype;
var hasOwnProperty = objectProto.hasOwnProperty;
function hashHas(key) {
var data = this.__data__;
return nativeCreate ? data[key] !== void 0 : hasOwnProperty.call(data, key);
}
var HASH_UNDEFINED = "__lodash_hash_undefined__";
function hashSet(key, value) {
var data = this.__data__;
this.size += this.has(key) ? 0 : 1;
data[key] = nativeCreate && value === void 0 ? HASH_UNDEFINED : value;
return this;
}
function Hash(entries) {
var index = -1, length = entries == null ? 0 : entries.length;
this.clear();
while (++index < length) {
var entry = entries[index];
this.set(entry[0], entry[1]);
}
}
Hash.prototype.clear = hashClear;
Hash.prototype["delete"] = hashDelete;
Hash.prototype.get = hashGet;
Hash.prototype.has = hashHas;
Hash.prototype.set = hashSet;
function listCacheClear() {
this.__data__ = [];
this.size = 0;
}
function assocIndexOf(array, key) {
var length = array.length;
while (length--) {
if (eq(array[length][0], key)) {
return length;
}
}
return -1;
}
var arrayProto = Array.prototype;
var splice = arrayProto.splice;
function listCacheDelete(key) {
var data = this.__data__, index = assocIndexOf(data, key);
if (index < 0) {
return false;
}
var lastIndex = data.length - 1;
if (index == lastIndex) {
data.pop();
} else {
splice.call(data, index, 1);
}
--this.size;
return true;
}
function listCacheGet(key) {
var data = this.__data__, index = assocIndexOf(data, key);
return index < 0 ? void 0 : data[index][1];
}
function listCacheHas(key) {
return assocIndexOf(this.__data__, key) > -1;
}
function listCacheSet(key, value) {
var data = this.__data__, index = assocIndexOf(data, key);
if (index < 0) {
++this.size;
data.push([key, value]);
} else {
data[index][1] = value;
}
return this;
}
function ListCache(entries) {
var index = -1, length = entries == null ? 0 : entries.length;
this.clear();
while (++index < length) {
var entry = entries[index];
this.set(entry[0], entry[1]);
}
}
ListCache.prototype.clear = listCacheClear;
ListCache.prototype["delete"] = listCacheDelete;
ListCache.prototype.get = listCacheGet;
ListCache.prototype.has = listCacheHas;
ListCache.prototype.set = listCacheSet;
var Map$1 = getNative(root, "Map");
function mapCacheClear() {
this.size = 0;
this.__data__ = {
"hash": new Hash(),
"map": new (Map$1 || ListCache)(),
"string": new Hash()
};
}
function isKeyable(value) {
var type = typeof value;
return type == "string" || type == "number" || type == "symbol" || type == "boolean" ? value !== "__proto__" : value === null;
}
function getMapData(map, key) {
var data = map.__data__;
return isKeyable(key) ? data[typeof key == "string" ? "string" : "hash"] : data.map;
}
function mapCacheDelete(key) {
var result = getMapData(this, key)["delete"](key);
this.size -= result ? 1 : 0;
return result;
}
function mapCacheGet(key) {
return getMapData(this, key).get(key);
}
function mapCacheHas(key) {
return getMapData(this, key).has(key);
}
function mapCacheSet(key, value) {
var data = getMapData(this, key), size = data.size;
data.set(key, value);
this.size += data.size == size ? 0 : 1;
return this;
}
function MapCache(entries) {
var index = -1, length = entries == null ? 0 : entries.length;
this.clear();
while (++index < length) {
var entry = entries[index];
this.set(entry[0], entry[1]);
}
}
MapCache.prototype.clear = mapCacheClear;
MapCache.prototype["delete"] = mapCacheDelete;
MapCache.prototype.get = mapCacheGet;
MapCache.prototype.has = mapCacheHas;
MapCache.prototype.set = mapCacheSet;
var FUNC_ERROR_TEXT$2 = "Expected a function";
function memoize(func, resolver) {
if (typeof func != "function" || resolver != null && typeof resolver != "function") {
throw new TypeError(FUNC_ERROR_TEXT$2);
}
var memoized = function() {
var args = arguments, key = resolver ? resolver.apply(this, args) : args[0], cache = memoized.cache;
if (cache.has(key)) {
return cache.get(key);
}
var result = func.apply(this, args);
memoized.cache = cache.set(key, result) || cache;
return result;
};
memoized.cache = new (memoize.Cache || MapCache)();
return memoized;
}
memoize.Cache = MapCache;
var MAX_MEMOIZE_SIZE = 500;
function memoizeCapped(func) {
var result = memoize(func, function(key) {
if (cache.size === MAX_MEMOIZE_SIZE) {
cache.clear();
}
return key;
});
var cache = result.cache;
return result;
}
var rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g;
var reEscapeChar = /\\(\\)?/g;
var stringToPath = memoizeCapped(function(string) {
var result = [];
if (string.charCodeAt(0) === 46) {
result.push("");
}
string.replace(rePropName, function(match, number, quote, subString) {
result.push(quote ? subString.replace(reEscapeChar, "$1") : number || match);
});
return result;
});
function toString(value) {
return value == null ? "" : baseToString(value);
}
function castPath(value, object) {
if (isArray(value)) {
return value;
}
return isKey(value, object) ? [value] : stringToPath(toString(value));
}
var INFINITY = 1 / 0;
function toKey(value) {
if (typeof value == "string" || isSymbol(value)) {
return value;
}
var result = value + "";
return result == "0" && 1 / value == -INFINITY ? "-0" : result;
}
function baseGet(object, path) {
path = castPath(path, object);
var index = 0, length = path.length;
while (object != null && index < length) {
object = object[toKey(path[index++])];
}
return index && index == length ? object : void 0;
}
function get(object, path, defaultValue) {
var result = object == null ? void 0 : baseGet(object, path);
return result === void 0 ? defaultValue : result;
}
var now = function() {
return root.Date.now();
};
var FUNC_ERROR_TEXT$1 = "Expected a function";
var nativeMax = Math.max, nativeMin = Math.min;
function debounce(func, wait, options) {
var lastArgs, lastThis, maxWait, result, timerId, lastCallTime, lastInvokeTime = 0, leading = false, maxing = false, trailing = true;
if (typeof func != "function") {
throw new TypeError(FUNC_ERROR_TEXT$1);
}
wait = toNumber(wait) || 0;
if (isObject(options)) {
leading = !!options.leading;
maxing = "maxWait" in options;
maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;
trailing = "trailing" in options ? !!options.trailing : trailing;
}
function invokeFunc(time) {
var args = lastArgs, thisArg = lastThis;
lastArgs = lastThis = void 0;
lastInvokeTime = time;
result = func.apply(thisArg, args);
return result;
}
function leadingEdge(time) {
lastInvokeTime = time;
timerId = setTimeout(timerExpired, wait);
return leading ? invokeFunc(time) : result;
}
function remainingWait(time) {
var timeSinceLastCall = time - lastCallTime, timeSinceLastInvoke = time - lastInvokeTime, timeWaiting = wait - timeSinceLastCall;
return maxing ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke) : timeWaiting;
}
function shouldInvoke(time) {
var timeSinceLastCall = time - lastCallTime, timeSinceLastInvoke = time - lastInvokeTime;
return lastCallTime === void 0 || timeSinceLastCall >= wait || timeSinceLastCall < 0 || maxing && timeSinceLastInvoke >= maxWait;
}
function timerExpired() {
var time = now();
if (shouldInvoke(time)) {
return trailingEdge(time);
}
timerId = setTimeout(timerExpired, remainingWait(time));
}
function trailingEdge(time) {
timerId = void 0;
if (trailing && lastArgs) {
return invokeFunc(time);
}
lastArgs = lastThis = void 0;
return result;
}
function cancel() {
if (timerId !== void 0) {
clearTimeout(timerId);
}
lastInvokeTime = 0;
lastArgs = lastCallTime = lastThis = timerId = void 0;
}
function flush() {
return timerId === void 0 ? result : trailingEdge(now());
}
function debounced() {
var time = now(), isInvoking = shouldInvoke(time);
lastArgs = arguments;
lastThis = this;
lastCallTime = time;
if (isInvoking) {
if (timerId === void 0) {
return leadingEdge(lastCallTime);
}
if (maxing) {
clearTimeout(timerId);
timerId = setTimeout(timerExpired, wait);
return invokeFunc(lastCallTime);
}
}
if (timerId === void 0) {
timerId = setTimeout(timerExpired, wait);
}
return result;
}
debounced.cancel = cancel;
debounced.flush = flush;
return debounced;
}
function fromPairs(pairs) {
var index = -1, length = pairs == null ? 0 : pairs.length, result = {};
while (++index < length) {
var pair = pairs[index];
result[pair[0]] = pair[1];
}
return result;
}
function isNil(value) {
return value == null;
}
function isUndefined$1(value) {
return value === void 0;
}
var FUNC_ERROR_TEXT = "Expected a function";
function throttle(func, wait, options) {
var leading = true, trailing = true;
if (typeof func != "function") {
throw new TypeError(FUNC_ERROR_TEXT);
}
if (isObject(options)) {
leading = "leading" in options ? !!options.leading : leading;
trailing = "trailing" in options ? !!options.trailing : trailing;
}
return debounce(func, wait, {
"leading": leading,
"maxWait": wait,
"trailing": trailing
});
}
const isUndefined = (val) => val === void 0;
const isBoolean = (val) => typeof val === "boolean";
const isNumber = (val) => typeof val === "number";
const isStringNumber = (val) => {
if (!isString(val)) {
return false;
}
return !Number.isNaN(Number(val));
};
class ElementPlusError extends Error {
constructor(m) {
super(m);
this.name = "ElementPlusError";
}
}
function throwError(scope, m) {
throw new ElementPlusError(`[${scope}] ${m}`);
}
const classNameToArray = (cls = "") => cls.split(" ").filter((item) => !!item.trim());
const hasClass = (el, cls) => {
if (!el || !cls)
return false;
if (cls.includes(" "))
throw new Error("className should not contain space.");
return el.classList.contains(cls);
};
const addClass = (el, cls) => {
if (!el || !cls.trim())
return;
el.classList.add(...classNameToArray(cls));
};
const removeClass = (el, cls) => {
if (!el || !cls.trim())
return;
el.classList.remove(...classNameToArray(cls));
};
const getStyle = (element, styleName) => {
var _a2;
if (!isClient || !element || !styleName)
return "";
let key = camelize(styleName);
if (key === "float")
key = "cssFloat";
try {
const style = element.style[key];
if (style)
return style;
const computed2 = (_a2 = document.defaultView) == null ? void 0 : _a2.getComputedStyle(element, "");
return computed2 ? computed2[key] : "";
} catch (e) {
return element.style[key];
}
};
function addUnit(value, defaultUnit = "px") {
if (!value)
return "";
if (isNumber(value) || isStringNumber(value)) {
return `${value}${defaultUnit}`;
} else if (isString(value)) {
return value;
}
}
const isScroll = (el, isVertical) => {
if (!isClient)
return false;
const key = {
undefined: "overflow",
true: "overflow-y",
false: "overflow-x"
}[String(isVertical)];
const overflow = getStyle(el, key);
return ["scroll", "auto", "overlay"].some((s) => overflow.includes(s));
};
const getScrollContainer = (el, isVertical) => {
if (!isClient)
return;
let parent = el;
while (parent) {
if ([window, document, document.documentElement].includes(parent))
return window;
if (isScroll(parent, isVertical))
return parent;
parent = parent.parentNode;
}
return parent;
};
let scrollBarWidth;
const getScrollBarWidth = (namespace) => {
var _a2;
if (!isClient)
return 0;
if (scrollBarWidth !== void 0)
return scrollBarWidth;
const outer = document.createElement("div");
outer.className = `${namespace}-scrollbar__wrap`;
outer.style.visibility = "hidden";
outer.style.width = "100px";
outer.style.position = "absolute";
outer.style.top = "-9999px";
document.body.appendChild(outer);
const widthNoScroll = outer.offsetWidth;
outer.style.overflow = "scroll";
const inner = document.createElement("div");
inner.style.width = "100%";
outer.appendChild(inner);
const widthWithScroll = inner.offsetWidth;
(_a2 = outer.parentNode) == null ? void 0 : _a2.removeChild(outer);
scrollBarWidth = widthNoScroll - widthWithScroll;
return scrollBarWidth;
};
/*! Element Plus Icons Vue v2.3.1 */
var close_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ vue.defineComponent({
name: "Close",
__name: "close",
setup(__props) {
return (_ctx, _cache) => (vue.openBlock(), vue.createElementBlock("svg", {
xmlns: "http://www.w3.org/2000/svg",
viewBox: "0 0 1024 1024"
}, [
vue.createElementVNode("path", {
fill: "currentColor",
d: "M764.288 214.592 512 466.88 259.712 214.592a31.936 31.936 0 0 0-45.12 45.12L466.752 512 214.528 764.224a31.936 31.936 0 1 0 45.12 45.184L512 557.184l252.288 252.288a31.936 31.936 0 0 0 45.12-45.12L557.12 512.064l252.288-252.352a31.936 31.936 0 1 0-45.12-45.184z"
})
]));
}
});
var close_default = close_vue_vue_type_script_setup_true_lang_default;
const epPropKey = "__epPropKey";
const definePropType = (val) => val;
const isEpProp = (val) => isObject$1(val) && !!val[epPropKey];
const buildProp = (prop, key) => {
if (!isObject$1(prop) || isEpProp(prop))
return prop;
const { values, required, default: defaultValue, type, validator } = prop;
const _validator = values || validator ? (val) => {
let valid = false;
let allowedValues = [];
if (values) {
allowedValues = Array.from(values);
if (hasOwn(prop, "default")) {
allowedValues.push(defaultValue);
}
valid || (valid = allowedValues.includes(val));
}
if (validator)
valid || (valid = validator(val));
if (!valid && allowedValues.length > 0) {
const allowValuesText = [...new Set(allowedValues)].map((value) => JSON.stringify(value)).join(", ");
vue.warn(`Invalid prop: validation failed${key ? ` for prop "${key}"` : ""}. Expected one of [${allowValuesText}], got value ${JSON.stringify(val)}.`);
}
return valid;
} : void 0;
const epProp = {
type,
required: !!required,
validator: _validator,
[epPropKey]: true
};
if (hasOwn(prop, "default"))
epProp.default = defaultValue;
return epProp;
};
const buildProps = (props) => fromPairs(Object.entries(props).map(([key, option]) => [
key,
buildProp(option, key)
]));
const iconPropType = definePropType([
String,
Object,
Function
]);
const CloseComponents = {
Close: close_default
};
const withInstall = (main, extra) => {
main.install = (app) => {
for (const comp of [main, ...Object.values(extra != null ? extra : {})]) {
app.component(comp.name, comp);
}
};
if (extra) {
for (const [key, comp] of Object.entries(extra)) {
main[key] = comp;
}
}
return main;
};
const composeRefs = (...refs) => {
return (el) => {
refs.forEach((ref2) => {
if (isFunction$1(ref2)) {
ref2(el);
} else {
ref2.value = el;
}
});
};
};
const EVENT_CODE = {
tab: "Tab",
enter: "Enter",
space: "Space",
left: "ArrowLeft",
up: "ArrowUp",
right: "ArrowRight",
down: "ArrowDown",
esc: "Escape",
delete: "Delete",
backspace: "Backspace",
numpadEnter: "NumpadEnter",
pageUp: "PageUp",
pageDown: "PageDown",
home: "Home",
end: "End"
};
const UPDATE_MODEL_EVENT = "update:modelValue";
var PatchFlags = /* @__PURE__ */ ((PatchFlags2) => {
PatchFlags2[PatchFlags2["TEXT"] = 1] = "TEXT";
PatchFlags2[PatchFlags2["CLASS"] = 2] = "CLASS";
PatchFlags2[PatchFlags2["STYLE"] = 4] = "STYLE";
PatchFlags2[PatchFlags2["PROPS"] = 8] = "PROPS";
PatchFlags2[PatchFlags2["FULL_PROPS"] = 16] = "FULL_PROPS";
PatchFlags2[PatchFlags2["HYDRATE_EVENTS"] = 32] = "HYDRATE_EVENTS";
PatchFlags2[PatchFlags2["STABLE_FRAGMENT"] = 64] = "STABLE_FRAGMENT";
PatchFlags2[PatchFlags2["KEYED_FRAGMENT"] = 128] = "KEYED_FRAGMENT";
PatchFlags2[PatchFlags2["UNKEYED_FRAGMENT"] = 256] = "UNKEYED_FRAGMENT";
PatchFlags2[PatchFlags2["NEED_PATCH"] = 512] = "NEED_PATCH";
PatchFlags2[PatchFlags2["DYNAMIC_SLOTS"] = 1024] = "DYNAMIC_SLOTS";
PatchFlags2[PatchFlags2["HOISTED"] = -1] = "HOISTED";
PatchFlags2[PatchFlags2["BAIL"] = -2] = "BAIL";
return PatchFlags2;
})(PatchFlags || {});
const useDeprecated = ({ from, replacement, scope, version, ref: ref2, type = "API" }, condition) => {
vue.watch(() => vue.unref(condition), (val) => {
}, {
immediate: true
});
};
const useDraggable = (targetRef, dragRef, draggable, overflow) => {
let transform = {
offsetX: 0,
offsetY: 0
};
const onMousedown = (e) => {
const downX = e.clientX;
const downY = e.clientY;
const { offsetX, offsetY } = transform;
const targetRect = targetRef.value.getBoundingClientRect();
const targetLeft = targetRect.left;
const targetTop = targetRect.top;
const targetWidth = targetRect.width;
const targetHeight = targetRect.height;
const clientWidth = document.documentElement.clientWidth;
const clientHeight = document.documentElement.clientHeight;
const minLeft = -targetLeft + offsetX;
const minTop = -targetTop + offsetY;
const maxLeft = clientWidth - targetLeft - targetWidth + offsetX;
const maxTop = clientHeight - targetTop - targetHeight + offsetY;
const onMousemove = (e2) => {
let moveX = offsetX + e2.clientX - downX;
let moveY = offsetY + e2.clientY - downY;
if (!(overflow == null ? void 0 : overflow.value)) {
moveX = Math.min(Math.max(moveX, minLeft), maxLeft);
moveY = Math.min(Math.max(moveY, minTop), maxTop);
}
transform = {
offsetX: moveX,
offsetY: moveY
};
if (targetRef.value) {
targetRef.value.style.transform = `translate(${addUnit(moveX)}, ${addUnit(moveY)})`;
}
};
const onMouseup = () => {
document.removeEventListener("mousemove", onMousemove);
document.removeEventListener("mouseup", onMouseup);
};
document.addEventListener("mousemove", onMousemove);
document.addEventListener("mouseup", onMouseup);
};
const onDraggable = () => {
if (dragRef.value && targetRef.value) {
dragRef.value.addEventListener("mousedown", onMousedown);
}
};
const offDraggable = () => {
if (dragRef.value && targetRef.value) {
dragRef.value.removeEventListener("mousedown", onMousedown);
}
};
vue.onMounted(() => {
vue.watchEffect(() => {
if (draggable.value) {
onDraggable();
} else {
offDraggable();
}
});
});
vue.onBeforeUnmount(() => {
offDraggable();
});
};
var English = {
name: "en",
el: {
breadcrumb: {
label: "Breadcrumb"
},
colorpicker: {
confirm: "OK",
clear: "Clear",
defaultLabel: "color picker",
description: "current color is {color}. press enter to select a new color."
},
datepicker: {
now: "Now",
today: "Today",
cancel: "Cancel",
clear: "Clear",
confirm: "OK",
dateTablePrompt: "Use the arrow keys and enter to select the day of the month",
monthTablePrompt: "Use the arrow keys and enter to select the month",
yearTablePrompt: "Use the arrow keys and enter to select the year",
selectedDate: "Selected date",
selectDate: "Select date",
selectTime: "Select time",
startDate: "Start Date",
startTime: "Start Time",
endDate: "End Date",
endTime: "End Time",
prevYear: "Previous Year",
nextYear: "Next Year",
prevMonth: "Previous Month",
nextMonth: "Next Month",
year: "",
month1: "January",
month2: "February",
month3: "March",
month4: "April",
month5: "May",
month6: "June",
month7: "July",
month8: "August",
month9: "September",
month10: "October",
month11: "November",
month12: "December",
week: "week",
weeks: {
sun: "Sun",
mon: "Mon",
tue: "Tue",
wed: "Wed",
thu: "Thu",
fri: "Fri",
sat: "Sat"
},
weeksFull: {
sun: "Sunday",
mon: "Monday",
tue: "Tuesday",
wed: "Wednesday",
thu: "Thursday",
fri: "Friday",
sat: "Saturday"
},
months: {
jan: "Jan",
feb: "Feb",
mar: "Mar",
apr: "Apr",
may: "May",
jun: "Jun",
jul: "Jul",
aug: "Aug",
sep: "Sep",
oct: "Oct",
nov: "Nov",
dec: "Dec"
}
},
inputNumber: {
decrease: "decrease number",
increase: "increase number"
},
select: {
loading: "Loading",
noMatch: "No matching data",
noData: "No data",
placeholder: "Select"
},
dropdown: {
toggleDropdown: "Toggle Dropdown"
},
cascader: {
noMatch: "No matching data",
loading: "Loading",
placeholder: "Select",
noData: "No data"
},
pagination: {
goto: "Go to",
pagesize: "/page",
total: "Total {total}",
pageClassifier: "",
page: "Page",
prev: "Go to previous page",
next: "Go to next page",
currentPage: "page {pager}",
prevPages: "Previous {pager} pages",
nextPages: "Next {pager} pages",
deprecationWarning: "Deprecated usages detected, please refer to the el-pagination documentation for more details"
},
dialog: {
close: "Close this dialog"
},
drawer: {
close: "Close this dialog"
},
messagebox: {
title: "Message",
confirm: "OK",
cancel: "Cancel",
error: "Illegal input",
close: "Close this dialog"
},
upload: {
deleteTip: "press delete to remove",
delete: "Delete",
preview: "Preview",
continue: "Continue"
},
slider: {
defaultLabel: "slider between {min} and {max}",
defaultRangeStartLabel: "pick start value",
defaultRangeEndLabel: "pick end value"
},
table: {
emptyText: "No Data",
confirmFilter: "Confirm",
resetFilter: "Reset",
clearFilter: "All",
sumText: "Sum"
},
tour: {
next: "Next",
previous: "Previous",
finish: "Finish"
},
tree: {
emptyText: "No Data"
},
transfer: {
noMatch: "No matching data",
noData: "No data",
titles: ["List 1", "List 2"],
filterPlaceholder: "Enter keyword",
noCheckedFormat: "{total} items",
hasCheckedFormat: "{checked}/{total} checked"
},
image: {
error: "FAILED"
},
pageHeader: {
title: "Back"
},
popconfirm: {
confirmButtonText: "Yes",
cancelButtonText: "No"
},
carousel: {
leftArrow: "Carousel arrow left",
rightArrow: "Carousel arrow right",
indicator: "Carousel switch to index {index}"
}
}
};
const buildTranslator = (locale) => (path, option) => translate(path, option, vue.unref(locale));
const translate = (path, option, locale) => get(locale, path, path).replace(/\{(\w+)\}/g, (_, key) => {
var _a2;
return `${(_a2 = option == null ? void 0 : option[key]) != null ? _a2 : `{${key}}`}`;
});
const buildLocaleContext = (locale) => {
const lang = vue.computed(() => vue.unref(locale).name);
const localeRef = vue.isRef(locale) ? locale : vue.ref(locale);
return {
lang,
locale: localeRef,
t: buildTranslator(locale)
};
};
const localeContextKey = Symbol("localeContextKey");
const useLocale = (localeOverrides) => {
const locale = localeOverrides || vue.inject(localeContextKey, vue.ref());
return buildLocaleContext(vue.computed(() => locale.value || English));
};
/**
* @vue/reactivity v3.4.21
* (c) 2018-present Yuxi (Evan) You and Vue contributors
* @license MIT
**/
let activeEffectScope;
function recordEffectScope(effect2, scope = activeEffectScope) {
if (scope && scope.active) {
scope.effects.push(effect2);
}
}
let activeEffect;
class ReactiveEffect {
constructor(fn, trigger2, scheduler, scope) {
this.fn = fn;
this.trigger = trigger2;
this.scheduler = scheduler;
this.active = true;
this.deps = [];
this._dirtyLevel = 4;
this._trackId = 0;
this._runnings = 0;
this._shouldSchedule = false;
this._depsLength = 0;
recordEffectScope(this, scope);
}
get dirty() {
if (this._dirtyLevel === 2 || this._dirtyLevel === 3) {
this._dirtyLevel = 1;
pauseTracking();
for (let i = 0; i < this._depsLength; i++) {
const dep = this.deps[i];
if (dep.computed) {
triggerComputed(dep.computed);
if (this._dirtyLevel >= 4) {
break;
}
}
}
if (this._dirtyLevel === 1) {
this._dirtyLevel = 0;
}
resetTracking();
}
return this._dirtyLevel >= 4;
}
set dirty(v) {
this._dirtyLevel = v ? 4 : 0;
}
run() {
this._dirtyLevel = 0;
if (!this.active) {
return this.fn();
}
let lastShouldTrack = shouldTrack;
let lastEffect = activeEffect;
try {
shouldTrack = true;
activeEffect = this;
this._runnings++;
preCleanupEffect(this);
return this.fn();
} finally {
postCleanupEffect(this);
this._runnings--;
activeEffect = lastEffect;
shouldTrack = lastShouldTrack;
}
}
stop() {
var _a2;
if (this.active) {
preCleanupEffect(this);
postCleanupEffect(this);
(_a2 = this.onStop) == null ? void 0 : _a2.call(this);
this.active = false;
}
}
}
function triggerComputed(computed2) {
return computed2.value;
}
function preCleanupEffect(effect2) {
effect2._trackId++;
effect2._depsLength = 0;
}
function postCleanupEffect(effect2) {
if (effect2.deps.length > effect2._depsLength) {
for (let i = effect2._depsLength; i < effect2.deps.length; i++) {
cleanupDepEffect(effect2.deps[i], effect2);
}
effect2.deps.length = effect2._depsLength;
}
}
function cleanupDepEffect(dep, effect2) {
const trackId = dep.get(effect2);
if (trackId !== void 0 && effect2._trackId !== trackId) {
dep.delete(effect2);
if (dep.size === 0) {
dep.cleanup();
}
}
}
let shouldTrack = true;
let pauseScheduleStack = 0;
const trackStack = [];
function pauseTracking() {
trackStack.push(shouldTrack);
shouldTrack = false;
}
function resetTracking() {
const last = trackStack.pop();
shouldTrack = last === void 0 ? true : last;
}
function pauseScheduling() {
pauseScheduleStack++;
}
function resetScheduling() {
pauseScheduleStack--;
while (!pauseScheduleStack && queueEffectSchedulers.length) {
queueEffectSchedulers.shift()();
}
}
function trackEffect(effect2, dep, debuggerEventExtraInfo) {
if (dep.get(effect2) !== effect2._trackId) {
dep.set(effect2, effect2._trackId);
const oldDep = effect2.deps[effect2._depsLength];
if (oldDep !== dep) {
if (oldDep) {
cleanupDepEffect(oldDep, effect2);
}
effect2.deps[effect2._depsLength++] = dep;
} else {
effect2._depsLength++;
}
}
}
const queueEffectSchedulers = [];
function triggerEffects(dep, dirtyLevel, debuggerEventExtraInfo) {
pauseScheduling();
for (const effect2 of dep.keys()) {
let tracking;
if (effect2._dirtyLevel < dirtyLevel && (tracking != null ? tracking : tracking = dep.get(effect2) === effect2._trackId)) {
effect2._shouldSchedule || (effect2._shouldSchedule = effect2._dirtyLevel === 0);
effect2._dirtyLevel = dirtyLevel;
}
if (effect2._shouldSchedule && (tracking != null ? tracking : tracking = dep.get(effect2) === effect2._trackId)) {
effect2.trigger();
if ((!effect2._runnings || effect2.allowRecurse) && effect2._dirtyLevel !== 2) {
effect2._shouldSchedule = false;
if (effect2.scheduler) {
queueEffectSchedulers.push(effect2.scheduler);
}
}
}
}
resetScheduling();
}
const createDep = (cleanup, computed2) => {
const dep = /* @__PURE__ */ new Map();
dep.cleanup = cleanup;
dep.computed = computed2;
return dep;
};
new Set(
/* @__PURE__ */ Object.getOwnPropertyNames(Symbol).filter((key) => key !== "arguments" && key !== "caller").map((key) => Symbol[key]).filter(isSymbol$1)
);
function toRaw(observed) {
const raw = observed && observed["__v_raw"];
return raw ? toRaw(raw) : observed;
}
class ComputedRefImpl {
constructor(getter, _setter, isReadonly2, isSSR) {
this.getter = getter;
this._setter = _setter;
this.dep = void 0;
this.__v_isRef = true;
this["__v_isReadonly"] = false;
this.effect = new ReactiveEffect(
() => getter(this._value),
() => triggerRefValue(
this,
this.effect._dirtyLevel === 2 ? 2 : 3
)
);
this.effect.computed = this;
this.effect.active = this._cacheable = !isSSR;
this["__v_isReadonly"] = isReadonly2;
}
get value() {
const self2 = toRaw(this);
if ((!self2._cacheable || self2.effect.dirty) && hasChanged(self2._value, self2._value = self2.effect.run())) {
triggerRefValue(self2, 4);
}
trackRefValue(self2);
if (self2.effect._dirtyLevel >= 2) {
triggerRefValue(self2, 2);
}
return self2._value;
}
set value(newValue) {
this._setter(newValue);
}
// #region polyfill _dirty for backward compatibility third party code for Vue <= 3.3.x
get _dirty() {
return this.effect.dirty;
}
set _dirty(v) {
this.effect.dirty = v;
}
// #endregion
}
function computed(getterOrOptions, debugOptions, isSSR = false) {
let getter;
let setter;
const onlyGetter = isFunction$1(getterOrOptions);
if (onlyGetter) {
getter = getterOrOptions;
setter = NOOP;
} else {
getter = getterOrOptions.get;
setter = getterOrOptions.set;
}
const cRef = new ComputedRefImpl(getter, setter, onlyGetter || !setter, isSSR);
return cRef;
}
function trackRefValue(ref2) {
var _a2;
if (shouldTrack && activeEffect) {
ref2 = toRaw(ref2);
trackEffect(
activeEffect,
(_a2 = ref2.dep) != null ? _a2 : ref2.dep = createDep(
() => ref2.dep = void 0,
ref2 instanceof ComputedRefImpl ? ref2 : void 0
)
);
}
}
function triggerRefValue(ref2, dirtyLevel = 4, newVal) {
ref2 = toRaw(ref2);
const dep = ref2.dep;
if (dep) {
triggerEffects(
dep,
dirtyLevel
);
}
}
const defaultNamespace = "el";
const statePrefix = "is-";
const _bem = (namespace, block, blockSuffix, element, modifier) => {
let cls = `${namespace}-${block}`;
if (blockSuffix) {
cls += `-${blockSuffix}`;
}
if (element) {
cls += `__${element}`;
}
if (modifier) {
cls += `--${modifier}`;
}
return cls;
};
const namespaceContextKey = Symbol("namespaceContextKey");
const useGetDerivedNamespace = (namespaceOverrides) => {
const derivedNamespace = namespaceOverrides || (vue.getCurrentInstance() ? vue.inject(namespaceContextKey, vue.ref(defaultNamespace)) : vue.ref(defaultNamespace));
const namespace = vue.computed(() => {
return vue.unref(derivedNamespace) || defaultNamespace;
});
return namespace;
};
const useNamespace = (block, namespaceOverrides) => {
const namespace = useGetDerivedNamespace(namespaceOverrides);
const b = (blockSuffix = "") => _bem(namespace.value, block, blockSuffix, "", "");
const e = (element) => element ? _bem(namespace.value, block, "", element, "") : "";
const m = (modifier) => modifier ? _bem(namespace.value, block, "", "", modifier) : "";
const be = (blockSuffix, element) => blockSuffix && element ? _bem(namespace.value, block, blockSuffix, element, "") : "";
const em = (element, modifier) => element && modifier ? _bem(namespace.value, block, "", element, modifier) : "";
const bm = (blockSuffix, modifier) => blockSuffix && modifier ? _bem(namespace.value, block, blockSuffix, "", modifier) : "";
const bem = (blockSuffix, element, modifier) => blockSuffix && element && modifier ? _bem(namespace.value, block, blockSuffix, element, modifier) : "";
const is = (name, ...args) => {
const state = args.length >= 1 ? args[0] : true;
return name && state ? `${statePrefix}${name}` : "";
};
const cssVar = (object) => {
const styles = {};
for (const key in object) {
if (object[key]) {
styles[`--${namespace.value}-${key}`] = object[key];
}
}
return styles;
};
const cssVarBlock = (object) => {
const styles = {};
for (const key in object) {
if (object[key]) {
styles[`--${namespace.value}-${block}-${key}`] = object[key];
}
}
return styles;
};
const cssVarName = (name) => `--${namespace.value}-${name}`;
const cssVarBlockName = (name) => `--${namespace.value}-${block}-${name}`;
return {
namespace,
b,
e,
m,
be,
em,
bm,
bem,
is,
cssVar,
cssVarName,
cssVarBlock,
cssVarBlockName
};
};
const useLockscreen = (trigger, options = {}) => {
if (!vue.isRef(trigger)) {
throwError("[useLockscreen]", "You need to pass a ref param to this function");
}
const ns = options.ns || useNamespace("popup");
const hiddenCls = computed(() => ns.bm("parent", "hidden"));
if (!isClient || hasClass(document.body, hiddenCls.value)) {
return;
}
let scrollBarWidth2 = 0;
let withoutHiddenClass = false;
let bodyWidth = "0";
const cleanup = () => {
setTimeout(() => {
removeClass(document == null ? void 0 : document.body, hiddenCls.value);
if (withoutHiddenClass && document) {
document.body.style.width = bodyWidth;
}
}, 200);
};
vue.watch(trigger, (val) => {
if (!val) {
cleanup();
return;
}
withoutHiddenClass = !hasClass(document.body, hiddenCls.value);
if (withoutHiddenClass) {
bodyWidth = document.body.style.width;
}
scrollBarWidth2 = getScrollBarWidth(ns.namespace.value);
const bodyHasOverflow = document.documentElement.clientHeight < document.body.scrollHeight;
const bodyOverflowY = getStyle(document.body, "overflowY");
if (scrollBarWidth2 > 0 && (bodyHasOverflow || bodyOverflowY === "scroll") && withoutHiddenClass) {
document.body.style.width = `calc(100% - ${scrollBarWidth2}px)`;
}
addClass(document.body, hiddenCls.value);
});
vue.onScopeDispose(() => cleanup());
};
const useSameTarget = (handleClick) => {
if (!handleClick) {
return { onClick: NOOP, onMousedown: NOOP, onMouseup: NOOP };
}
let mousedownTarget = false;
let mouseupTarget = false;
const onClick = (e) => {
if (mousedownTarget && mouseupTarget) {
handleClick(e);
}
mousedownTarget = mouseupTarget = false;
};
const onMousedown = (e) => {
mousedownTarget = e.target === e.currentTarget;
};
const onMouseup = (e) => {
mouseupTarget = e.target === e.currentTarget;
};
return { onClick, onMousedown, onMouseup };
};
const defaultIdInjection = {
prefix: Math.floor(Math.random() * 1e4),
current: 0
};
const ID_INJECTION_KEY = Symbol("elIdInjection");
const useIdInjection = () => {
return vue.getCurrentInstance() ? vue.inject(ID_INJECTION_KEY, defaultIdInjection) : defaultIdInjection;
};
const useId = (deterministicId) => {
const idInjection = useIdInjection();
const namespace = useGetDerivedNamespace();
const idRef = vue.computed(() => vue.unref(deterministicId) || `${namespace.value}-id-${idInjection.prefix}-${idInjection.current++}`);
return idRef;
};
let registeredEscapeHandlers = [];
const cachedHandler = (e) => {
const event = e;
if (event.key === EVENT_CODE.esc) {
registeredEscapeHandlers.forEach((registeredHandler) => registeredHandler(event));
}
};
const useEscapeKeydown = (handler) => {
vue.onMounted(() => {
if (registeredEscapeHandlers.length === 0) {
document.addEventListener("keydown", cachedHandler);
}
if (isClient)
registeredEscapeHandlers.push(handler);
});
vue.onBeforeUnmount(() => {
registeredEscapeHandlers = registeredEscapeHandlers.filter((registeredHandler) => registeredHandler !== handler);
if (registeredEscapeHandlers.length === 0) {
if (isClient)
document.removeEventListener("keydown", cachedHandler);
}
});
};
const initial = {
current: 0
};
const zIndex = vue.ref(0);
const defaultInitialZIndex = 2e3;
const ZINDEX_INJECTION_KEY = Symbol("elZIndexContextKey");
const zIndexContextKey = Symbol("zIndexContextKey");
const useZIndex = (zIndexOverrides) => {
const increasingInjection = vue.getCurrentInstance() ? vue.inject(ZINDEX_INJECTION_KEY, initial) : initial;
const zIndexInjection = zIndexOverrides || (vue.getCurrentInstance() ? vue.inject(zIndexContextKey, void 0) : void 0);
const initialZIndex = vue.computed(() => {
const zIndexFromInjection = vue.unref(zIndexInjection);
return isNumber(zIndexFromInjection) ? zIndexFromInjection : defaultInitialZIndex;
});
const currentZIndex = vue.computed(() => initialZIndex.value + zIndex.value);
const nextZIndex = () => {
increasingInjection.current++;
zIndex.value = increasingInjection.current;
return currentZIndex.value;
};
if (!isClient && !vue.inject(ZINDEX_INJECTION_KEY))
;
return {
initialZIndex,
currentZIndex,
nextZIndex
};
};
const configProviderContextKey = Symbol();
const globalConfig = vue.ref();
function useGlobalConfig(key, defaultValue = void 0) {
const config = vue.getCurrentInstance() ? vue.inject(configProviderContextKey, globalConfig) : globalConfig;
if (key) {
return vue.computed(() => {
var _a2, _b;
return (_b = (_a2 = config.value) == null ? void 0 : _a2[key]) != null ? _b : defaultValue;
});
} else {
return config;
}
}
var _export_sfc$1 = (sfc, props) => {
const target = sfc.__vccOpts || sfc;
for (const [key, val] of props) {
target[key] = val;
}
return target;
};
const iconProps = buildProps({
size: {
type: definePropType([Number, String])
},
color: {
type: String
}
});
const __default__$2 = vue.defineComponent({
name: "ElIcon",
inheritAttrs: false
});
const _sfc_main$9 = /* @__PURE__ */ vue.defineComponent({
...__default__$2,
props: iconProps,
setup(__props) {
const props = __props;
const ns = useNamespace("icon");
const style = vue.computed(() => {
const { size, color } = props;
if (!size && !color)
return {};
return {
fontSize: isUndefined(size) ? void 0 : addUnit(size),
"--color": color
};
});
return (_ctx, _cache) => {
return vue.openBlock(), vue.createElementBlock("i", vue.mergeProps({
class: vue.unref(ns).b(),
style: vue.unref(style)
}, _ctx.$attrs), [
vue.renderSlot(_ctx.$slots, "default")
], 16);
};
}
});
var Icon = /* @__PURE__ */ _export_sfc$1(_sfc_main$9, [["__file", "icon.vue"]]);
const ElIcon = withInstall(Icon);
const FOCUS_AFTER_TRAPPED = "focus-trap.focus-after-trapped";
const FOCUS_AFTER_RELEASED = "focus-trap.focus-after-released";
const FOCUSOUT_PREVENTED = "focus-trap.focusout-prevented";
const FOCUS_AFTER_TRAPPED_OPTS = {
cancelable: true,
bubbles: false
};
const FOCUSOUT_PREVENTED_OPTS = {
cancelable: true,
bubbles: false
};
const ON_TRAP_FOCUS_EVT = "focusAfterTrapped";
const ON_RELEASE_FOCUS_EVT = "focusAfterReleased";
const FOCUS_TRAP_INJECTION_KEY = Symbol("elFocusTrap");
const focusReason = vue.ref();
const lastUserFocusTimestamp = vue.ref(0);
const lastAutomatedFocusTimestamp = vue.ref(0);
let focusReasonUserCount = 0;
const obtainAllFocusableElements = (element) => {
const nodes = [];
const walker = document.createTreeWalker(element, NodeFilter.SHOW_ELEMENT, {
acceptNode: (node) => {
const isHiddenInput = node.tagName === "INPUT" && node.type === "hidden";
if (node.disabled || node.hidden || isHiddenInput)
return NodeFilter.FILTER_SKIP;
return node.tabIndex >= 0 || node === document.activeElement ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_SKIP;
}
});
while (walker.nextNode())
nodes.push(walker.currentNode);
return nodes;
};
const getVisibleElement = (elements, container) => {
for (const element of elements) {
if (!isHidden(element, container))
return element;
}
};
const isHidden = (element, container) => {
if (getComputedStyle(element).visibility === "hidden")
return true;
while (element) {
if (container && element === container)
return false;
if (getComputedStyle(element).display === "none")
return true;
element = element.parentElement;
}
return false;
};
const getEdges = (container) => {
const focusable = obtainAllFocusableElements(container);
const first = getVisibleElement(focusable, container);
const last = getVisibleElement(focusable.reverse(), container);
return [first, last];
};
const isSelectable = (element) => {
return element instanceof HTMLInputElement && "select" in element;
};
const tryFocus = (element, shouldSelect) => {
if (element && element.focus) {
const prevFocusedElement = document.activeElement;
element.focus({ preventScroll: true });
lastAutomatedFocusTimestamp.value = window.performance.now();
if (element !== prevFocusedElement && isSelectable(element) && shouldSelect) {
element.select();
}
}
};
function removeFromStack(list, item) {
const copy = [...list];
const idx = list.indexOf(item);
if (idx !== -1) {
copy.splice(idx, 1);
}
return copy;
}
const createFocusableStack = () => {
let stack = [];
const push = (layer) => {
const currentLayer = stack[0];
if (currentLayer && layer !== currentLayer) {
currentLayer.pause();
}
stack = removeFromStack(stack, layer);
stack.unshift(layer);
};
const remove = (layer) => {
var _a2, _b;
stack = removeFromStack(stack, layer);
(_b = (_a2 = stack[0]) == null ? void 0 : _a2.resume) == null ? void 0 : _b.call(_a2);
};
return {
push,
remove
};
};
const focusFirstDescendant = (elements, shouldSelect = false) => {
const prevFocusedElement = document.activeElement;
for (const element of elements) {
tryFocus(element, shouldSelect);
if (document.activeElement !== prevFocusedElement)
return;
}
};
const focusableStack = createFocusableStack();
const isFocusCausedByUserEvent = () => {
return lastUserFocusTimestamp.value > lastAutomatedFocusTimestamp.value;
};
const notifyFocusReasonPointer = () => {
focusReason.value = "pointer";
lastUserFocusTimestamp.value = window.performance.now();
};
const notifyFocusReasonKeydown = () => {
focusReason.value = "keyboard";
lastUserFocusTimestamp.value = window.performance.now();
};
const useFocusReason = () => {
vue.onMounted(() => {
if (focusReasonUserCount === 0) {
document.addEventListener("mousedown", notifyFocusReasonPointer);
document.addEventListener("touchstart", notifyFocusReasonPointer);
document.addEventListener("keydown", notifyFocusReasonKeydown);
}
focusReasonUserCount++;
});
vue.onBeforeUnmount(() => {
focusReasonUserCount--;
if (focusReasonUserCount <= 0) {
document.removeEventListener("mousedown", notifyFocusReasonPointer);
document.removeEventListener("touchstart", notifyFocusReasonPointer);
document.removeEventListener("keydown", notifyFocusReasonKeydown);
}
});
return {
focusReason,
lastUserFocusTimestamp,
lastAutomatedFocusTimestamp
};
};
const createFocusOutPreventedEvent = (detail) => {
return new CustomEvent(FOCUSOUT_PREVENTED, {
...FOCUSOUT_PREVENTED_OPTS,
detail
});
};
const _sfc_main$8 = vue.defineComponent({
name: "ElFocusTrap",
inheritAttrs: false,
props: {
loop: Boolean,
trapped: Boolean,
focusTrapEl: Object,
focusStartEl: {
type: [Object, String],
default: "first"
}
},
emits: [
ON_TRAP_FOCUS_EVT,
ON_RELEASE_FOCUS_EVT,
"focusin",
"focusout",
"focusout-prevented",
"release-requested"
],
setup(props, { emit }) {
const forwardRef = vue.ref();
let lastFocusBeforeTrapped;
let lastFocusAfterTrapped;
const { focusReason: focusReason2 } = useFocusReason();
useEscapeKeydown((event) => {
if (props.trapped && !focusLayer.paused) {
emit("release-requested", event);
}
});
const focusLayer = {
paused: false,
pause() {
this.paused = true;
},
resume() {
this.paused = false;
}
};
const onKeydown = (e) => {
if (!props.loop && !props.trapped)
return;
if (focusLayer.paused)
return;
const { key, altKey, ctrlKey, metaKey, currentTarget, shiftKey } = e;
const { loop } = props;
const isTabbing = key === EVENT_CODE.tab && !altKey && !ctrlKey && !metaKey;
const currentFocusingEl = document.activeElement;
if (isTabbing && currentFocusingEl) {
const container = currentTarget;
const [first, last] = getEdges(container);
const isTabbable = first && last;
if (!isTabbable) {
if (currentFocusingEl === container) {
const focusoutPreventedEvent = createFocusOutPreventedEvent({
focusReason: focusReason2.value
});
emit("focusout-prevented", focusoutPreventedEvent);
if (!focusoutPreventedEvent.defaultPrevented) {
e.preventDefault();
}
}
} else {
if (!shiftKey && currentFocusingEl === last) {
const focusoutPreventedEvent = createFocusOutPreventedEvent({
focusReason: focusReason2.value
});
emit("focusout-prevented", focusoutPreventedEvent);
if (!focusoutPreventedEvent.defaultPrevented) {
e.preventDefault();
if (loop)
tryFocus(first, true);
}
} else if (shiftKey && [first, container].includes(currentFocusingEl)) {
const focusoutPreventedEvent = createFocusOutPreventedEvent({
focusReason: focusReason2.value
});
emit("focusout-prevented", focusoutPreventedEvent);
if (!focusoutPreventedEvent.defaultPrevented) {
e.preventDefault();
if (loop)
tryFocus(last, true);
}
}
}
}
};
vue.provide(FOCUS_TRAP_INJECTION_KEY, {
focusTrapRef: forwardRef,
onKeydown
});
vue.watch(() => props.focusTrapEl, (focusTrapEl) => {
if (focusTrapEl) {
forwardRef.value = focusTrapEl;
}
}, { immediate: true });
vue.watch([forwardRef], ([forwardRef2], [oldForwardRef]) => {
if (forwardRef2) {
forwardRef2.addEventListener("keydown", onKeydown);
forwardRef2.addEventListener("focusin", onFocusIn);
forwardRef2.addEventListener("focusout", onFocusOut);
}
if (oldForwardRef) {
oldForwardRef.removeEventListener("keydown", onKeydown);
oldForwardRef.removeEventListener("focusin", onFocusIn);
oldForwardRef.removeEventListener("focusout", onFocusOut);
}
});
const trapOnFocus = (e) => {
emit(ON_TRAP_FOCUS_EVT, e);
};
const releaseOnFocus = (e) => emit(ON_RELEASE_FOCUS_EVT, e);
const onFocusIn = (e) => {
const trapContainer = vue.unref(forwardRef);
if (!trapContainer)
return;
const target = e.target;
const relatedTarget = e.relatedTarget;
const isFocusedInTrap = target && trapContainer.contains(target);
if (!props.trapped) {
const isPrevFocusedInTrap = relatedTarget && trapContainer.contains(relatedTarget);
if (!isPrevFocusedInTrap) {
lastFocusBeforeTrapped = relatedTarget;
}
}
if (isFocusedInTrap)
emit("focusin", e);
if (focusLayer.paused)
return;
if (props.trapped) {
if (isFocusedInTrap) {
lastFocusAfterTrapped = target;
} else {
tryFocus(lastFocusAfterTrapped, true);
}
}
};
const onFocusOut = (e) => {
const trapContainer = vue.unref(forwardRef);
if (focusLayer.paused || !trapContainer)
return;
if (props.trapped) {
const relatedTarget = e.relatedTarget;
if (!isNil(relatedTarget) && !trapContainer.contains(relatedTarget)) {
setTimeout(() => {
if (!focusLayer.paused && props.trapped) {
const focusoutPreventedEvent = createFocusOutPreventedEvent({
focusReason: focusReason2.value
});
emit("focusout-prevented", focusoutPreventedEvent);
if (!focusoutPreventedEvent.defaultPrevented) {
tryFocus(lastFocusAfterTrapped, true);
}
}
}, 0);
}
} else {
const target = e.target;
const isFocusedInTrap = target && trapContainer.contains(target);
if (!isFocusedInTrap)
emit("focusout", e);
}
};
async function startTrap() {
await vue.nextTick();
const trapContainer = vue.unref(forwardRef);
if (trapContainer) {
focusableStack.push(focusLayer);
const prevFocusedElement = trapContainer.contains(document.activeElement) ? lastFocusBeforeTrapped : document.activeElement;
lastFocusBeforeTrapped = prevFocusedElement;
const isPrevFocusContained = trapContainer.contains(prevFocusedElement);
if (!isPrevFocusContained) {
const focusEvent = new Event(FOCUS_AFTER_TRAPPED, FOCUS_AFTER_TRAPPED_OPTS);
trapContainer.addEventListener(FOCUS_AFTER_TRAPPED, trapOnFocus);
trapContainer.dispatchEvent(focusEvent);
if (!focusEvent.defaultPrevented) {
vue.nextTick(() => {
let focusStartEl = props.focusStartEl;
if (!isString(focusStartEl)) {
tryFocus(focusStartEl);
if (document.activeElement !== focusStartEl) {
focusStartEl = "first";
}
}
if (focusStartEl === "first") {
focusFirstDescendant(obtainAllFocusableElements(trapContainer), true);
}
if (document.activeElement === prevFocusedElement || focusStartEl === "container") {
tryFocus(trapContainer);
}
});
}
}
}
}
function stopTrap() {
const trapContainer = vue.unref(forwardRef);
if (trapContainer) {
trapContainer.removeEventListener(FOCUS_AFTER_TRAPPED, trapOnFocus);
const releasedEvent = new CustomEvent(FOCUS_AFTER_RELEASED, {
...FOCUS_AFTER_TRAPPED_OPTS,
detail: {
focusReason: focusReason2.value
}
});
trapContainer.addEventListener(FOCUS_AFTER_RELEASED, releaseOnFocus);
trapContainer.dispatchEvent(releasedEvent);
if (!releasedEvent.defaultPrevented && (focusReason2.value == "keyboard" || !isFocusCausedByUserEvent() || trapContainer.contains(document.activeElement))) {
tryFocus(lastFocusBeforeTrapped != null ? lastFocusBeforeTrapped : document.body);
}
trapContainer.removeEventListener(FOCUS_AFTER_RELEASED, releaseOnFocus);
focusableStack.remove(focusLayer);
}
}
vue.onMounted(() => {
if (props.trapped) {
startTrap();
}
vue.watch(() => props.trapped, (trapped) => {
if (trapped) {
startTrap();
} else {
stopTrap();
}
});
});
vue.onBeforeUnmount(() => {
if (props.trapped) {
stopTrap();
}
});
return {
onKeydown
};
}
});
function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
return vue.renderSlot(_ctx.$slots, "default", { handleKeydown: _ctx.onKeydown });
}
var ElFocusTrap = /* @__PURE__ */ _export_sfc$1(_sfc_main$8, [["render", _sfc_render], ["__file", "focus-trap.vue"]]);
const overlayProps = buildProps({
mask: {
type: Boolean,
default: true
},
customMaskEvent: {
type: Boolean,
default: false
},
overlayClass: {
type: definePropType([
String,
Array,
Object
])
},
zIndex: {
type: definePropType([String, Number])
}
});
const overlayEmits = {
click: (evt) => evt instanceof MouseEvent
};
const BLOCK = "overlay";
var Overlay = vue.defineComponent({
name: "ElOverlay",
props: overlayProps,
emits: overlayEmits,
setup(props, { slots, emit }) {
const ns = useNamespace(BLOCK);
const onMaskClick = (e) => {
emit("click", e);
};
const { onClick, onMousedown, onMouseup } = useSameTarget(props.customMaskEvent ? void 0 : onMaskClick);
return () => {
return props.mask ? vue.createVNode("div", {
class: [ns.b(), props.overlayClass],
style: {
zIndex: props.zIndex
},
onClick,
onMousedown,
onMouseup
}, [vue.renderSlot(slots, "default")], PatchFlags.STYLE | PatchFlags.CLASS | PatchFlags.PROPS, ["onClick", "onMouseup", "onMousedown"]) : vue.h("div", {
class: props.overlayClass,
style: {
zIndex: props.zIndex,
position: "fixed",
top: "0px",
right: "0px",
bottom: "0px",
left: "0px"
}
}, [vue.renderSlot(slots, "default")]);
};
}
});
const ElOverlay = Overlay;
const dialogInjectionKey = Symbol("dialogInjectionKey");
const dialogContentProps = buildProps({
center: Boolean,
alignCenter: Boolean,
closeIcon: {
type: iconPropType
},
draggable: Boolean,
overflow: Boolean,
fullscreen: Boolean,
showClose: {
type: Boolean,
default: true
},
title: {
type: String,
default: ""
},
ariaLevel: {
type: String,
default: "2"
}
});
const dialogContentEmits = {
close: () => true
};
const _hoisted_1$6 = ["aria-level"];
const _hoisted_2$3 = ["aria-label"];
const _hoisted_3$3 = ["id"];
const __default__$1 = vue.defineComponent({ name: "ElDialogContent" });
const _sfc_main$7 = /* @__PURE__ */ vue.defineComponent({
...__default__$1,
props: dialogContentProps,
emits: dialogContentEmits,
setup(__props) {
const props = __props;
const { t } = useLocale();
const { Close } = CloseComponents;
const { dialogRef, headerRef, bodyId, ns, style } = vue.inject(dialogInjectionKey);
const { focusTrapRef } = vue.inject(FOCUS_TRAP_INJECTION_KEY);
const dialogKls = vue.computed(() => [
ns.b(),
ns.is("fullscreen", props.fullscreen),
ns.is("draggable", props.draggable),
ns.is("align-center", props.alignCenter),
{ [ns.m("center")]: props.center }
]);
const composedDialogRef = composeRefs(focusTrapRef, dialogRef);
const draggable = vue.computed(() => props.draggable);
const overflow = vue.computed(() => props.overflow);
useDraggable(dialogRef, headerRef, draggable, overflow);
return (_ctx, _cache) => {
return vue.openBlock(), vue.createElementBlock("div", {
ref: vue.unref(composedDialogRef),
class: vue.normalizeClass(vue.unref(dialogKls)),
style: vue.normalizeStyle(vue.unref(style)),
tabindex: "-1"
}, [
vue.createElementVNode("header", {
ref_key: "headerRef",
ref: headerRef,
class: vue.normalizeClass([vue.unref(ns).e("header"), { "show-close": _ctx.showClose }])
}, [
vue.renderSlot(_ctx.$slots, "header", {}, () => [
vue.createElementVNode("span", {
role: "heading",
"aria-level": _ctx.ariaLevel,
class: vue.normalizeClass(vue.unref(ns).e("title"))
}, vue.toDisplayString(_ctx.title), 11, _hoisted_1$6)
]),
_ctx.showClose ? (vue.openBlock(), vue.createElementBlock("button", {
key: 0,
"aria-label": vue.unref(t)("el.dialog.close"),
class: vue.normalizeClass(vue.unref(ns).e("headerbtn")),
type: "button",
onClick: _cache[0] || (_cache[0] = ($event) => _ctx.$emit("close"))
}, [
vue.createVNode(vue.unref(ElIcon), {
class: vue.normalizeClass(vue.unref(ns).e("close"))
}, {
default: vue.withCtx(() => [
(vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(_ctx.closeIcon || vue.unref(Close))))
]),
_: 1
}, 8, ["class"])
], 10, _hoisted_2$3)) : vue.createCommentVNode("v-if", true)
], 2),
vue.createElementVNode("div", {
id: vue.unref(bodyId),
class: vue.normalizeClass(vue.unref(ns).e("body"))
}, [
vue.renderSlot(_ctx.$slots, "default")
], 10, _hoisted_3$3),
_ctx.$slots.footer ? (vue.openBlock(), vue.createElementBlock("footer", {
key: 0,
class: vue.normalizeClass(vue.unref(ns).e("footer"))
}, [
vue.renderSlot(_ctx.$slots, "footer")
], 2)) : vue.createCommentVNode("v-if", true)
], 6);
};
}
});
var ElDialogContent = /* @__PURE__ */ _export_sfc$1(_sfc_main$7, [["__file", "dialog-content.vue"]]);
const dialogProps = buildProps({
...dialogContentProps,
appendToBody: Boolean,
appendTo: {
type: definePropType(String),
default: "body"
},
beforeClose: {
type: definePropType(Function)
},
destroyOnClose: Boolean,
closeOnClickModal: {
type: Boolean,
default: true
},
closeOnPressEscape: {
type: Boolean,
default: true
},
lockScroll: {
type: Boolean,
default: true
},
modal: {
type: Boolean,
default: true
},
openDelay: {
type: Number,
default: 0
},
closeDelay: {
type: Number,
default: 0
},
top: {
type: String
},
modelValue: Boolean,
modalClass: String,
width: {
type: [String, Number]
},
zIndex: {
type: Number
},
trapFocus: {
type: Boolean,
default: false
},
headerAriaLevel: {
type: String,
default: "2"
}
});
const dialogEmits = {
open: () => true,
opened: () => true,
close: () => true,
closed: () => true,
[UPDATE_MODEL_EVENT]: (value) => isBoolean(value),
openAutoFocus: () => true,
closeAutoFocus: () => true
};
const useDialog = (props, targetRef) => {
var _a2;
const instance = vue.getCurrentInstance();
const emit = instance.emit;
const { nextZIndex } = useZIndex();
let lastPosition = "";
const titleId = useId();
const bodyId = useId();
const visible = vue.ref(false);
const closed = vue.ref(false);
const rendered = vue.ref(false);
const zIndex2 = vue.ref((_a2 = props.zIndex) != null ? _a2 : nextZIndex());
let openTimer = void 0;
let closeTimer = void 0;
const namespace = useGlobalConfig("namespace", defaultNamespace);
const style = vue.computed(() => {
const style2 = {};
const varPrefix = `--${namespace.value}-dialog`;
if (!props.fullscreen) {
if (props.top) {
style2[`${varPrefix}-margin-top`] = props.top;
}
if (props.width) {
style2[`${varPrefix}-width`] = addUnit(props.width);
}
}
return style2;
});
const overlayDialogStyle = vue.computed(() => {
if (props.alignCenter) {
return { display: "flex" };
}
return {};
});
function afterEnter() {
emit("opened");
}
function afterLeave() {
emit("closed");
emit(UPDATE_MODEL_EVENT, false);
if (props.destroyOnClose) {
rendered.value = false;
}
}
function beforeLeave() {
emit("close");
}
function open() {
closeTimer == null ? void 0 : closeTimer();
openTimer == null ? void 0 : openTimer();
if (props.openDelay && props.openDelay > 0) {
({ stop: openTimer } = useTimeoutFn(() => doOpen(), props.openDelay));
} else {
doOpen();
}
}
function close() {
openTimer == null ? void 0 : openTimer();
closeTimer == null ? void 0 : closeTimer();
if (props.closeDelay && props.closeDelay > 0) {
({ stop: closeTimer } = useTimeoutFn(() => doClose(), props.closeDelay));
} else {
doClose();
}
}
function handleClose() {
function hide(shouldCancel) {
if (shouldCancel)
return;
closed.value = true;
visible.value = false;
}
if (props.beforeClose) {
props.beforeClose(hide);
} else {
close();
}
}
function onModalClick() {
if (props.closeOnClickModal) {
handleClose();
}
}
function doOpen() {
if (!isClient)
return;
visible.value = true;
}
function doClose() {
visible.value = false;
}
function onOpenAutoFocus() {
emit("openAutoFocus");
}
function onCloseAutoFocus() {
emit("closeAutoFocus");
}
function onFocusoutPrevented(event) {
var _a22;
if (((_a22 = event.detail) == null ? void 0 : _a22.focusReason) === "pointer") {
event.preventDefault();
}
}
if (props.lockScroll) {
useLockscreen(visible);
}
function onCloseRequested() {
if (props.closeOnPressEscape) {
handleClose();
}
}
vue.watch(() => props.modelValue, (val) => {
if (val) {
closed.value = false;
open();
rendered.value = true;
zIndex2.value = isUndefined$1(props.zIndex) ? nextZIndex() : zIndex2.value++;
vue.nextTick(() => {
emit("open");
if (targetRef.value) {
targetRef.value.scrollTop = 0;
}
});
} else {
if (visible.value) {
close();
}
}
});
vue.watch(() => props.fullscreen, (val) => {
if (!targetRef.value)
return;
if (val) {
lastPosition = targetRef.value.style.transform;
targetRef.value.style.transform = "";
} else {
targetRef.value.style.transform = lastPosition;
}
});
vue.onMounted(() => {
if (props.modelValue) {
visible.value = true;
rendered.value = true;
open();
}
});
return {
afterEnter,
afterLeave,
beforeLeave,
handleClose,
onModalClick,
close,
doClose,
onOpenAutoFocus,
onCloseAutoFocus,
onCloseRequested,
onFocusoutPrevented,
titleId,
bodyId,
closed,
style,
overlayDialogStyle,
rendered,
visible,
zIndex: zIndex2
};
};
const _hoisted_1$5 = ["aria-label", "aria-labelledby", "aria-describedby"];
const __default__ = vue.defineComponent({
name: "ElDialog",
inheritAttrs: false
});
const _sfc_main$6 = /* @__PURE__ */ vue.defineComponent({
...__default__,
props: dialogProps,
emits: dialogEmits,
setup(__props, { expose }) {
const props = __props;
const slots = vue.useSlots();
useDeprecated({
scope: "el-dialog",
from: "the title slot",
replacement: "the header slot",
version: "3.0.0",
ref: "https://element-plus.org/en-US/component/dialog.html#slots"
}, vue.computed(() => !!slots.title));
const ns = useNamespace("dialog");
const dialogRef = vue.ref();
const headerRef = vue.ref();
const dialogContentRef = vue.ref();
const {
visible,
titleId,
bodyId,
style,
overlayDialogStyle,
rendered,
zIndex: zIndex2,
afterEnter,
afterLeave,
beforeLeave,
handleClose,
onModalClick,
onOpenAutoFocus,
onCloseAutoFocus,
onCloseRequested,
onFocusoutPrevented
} = useDialog(props, dialogRef);
vue.provide(dialogInjectionKey, {
dialogRef,
headerRef,
bodyId,
ns,
rendered,
style
});
const overlayEvent = useSameTarget(onModalClick);
const draggable = vue.computed(() => props.draggable && !props.fullscreen);
expose({
visible,
dialogContentRef
});
return (_ctx, _cache) => {
return vue.openBlock(), vue.createBlock(vue.Teleport, {
to: _ctx.appendTo,
disabled: _ctx.appendTo !== "body" ? false : !_ctx.appendToBody
}, [
vue.createVNode(vue.Transition, {
name: "dialog-fade",
onAfterEnter: vue.unref(afterEnter),
onAfterLeave: vue.unref(afterLeave),
onBeforeLeave: vue.unref(beforeLeave),
persisted: ""
}, {
default: vue.withCtx(() => [
vue.withDirectives(vue.createVNode(vue.unref(ElOverlay), {
"custom-mask-event": "",
mask: _ctx.modal,
"overlay-class": _ctx.modalClass,
"z-index": vue.unref(zIndex2)
}, {
default: vue.withCtx(() => [
vue.createElementVNode("div", {
role: "dialog",
"aria-modal": "true",
"aria-label": _ctx.title || void 0,
"aria-labelledby": !_ctx.title ? vue.unref(titleId) : void 0,
"aria-describedby": vue.unref(bodyId),
class: vue.normalizeClass(`${vue.unref(ns).namespace.value}-overlay-dialog`),
style: vue.normalizeStyle(vue.unref(overlayDialogStyle)),
onClick: _cache[0] || (_cache[0] = (...args) => vue.unref(overlayEvent).onClick && vue.unref(overlayEvent).onClick(...args)),
onMousedown: _cache[1] || (_cache[1] = (...args) => vue.unref(overlayEvent).onMousedown && vue.unref(overlayEvent).onMousedown(...args)),
onMouseup: _cache[2] || (_cache[2] = (...args) => vue.unref(overlayEvent).onMouseup && vue.unref(overlayEvent).onMouseup(...args))
}, [
vue.createVNode(vue.unref(ElFocusTrap), {
loop: "",
trapped: vue.unref(visible),
"focus-start-el": "container",
onFocusAfterTrapped: vue.unref(onOpenAutoFocus),
onFocusAfterReleased: vue.unref(onCloseAutoFocus),
onFocusoutPrevented: vue.unref(onFocusoutPrevented),
onReleaseRequested: vue.unref(onCloseRequested)
}, {
default: vue.withCtx(() => [
vue.unref(rendered) ? (vue.openBlock(), vue.createBlock(ElDialogContent, vue.mergeProps({
key: 0,
ref_key: "dialogContentRef",
ref: dialogContentRef
}, _ctx.$attrs, {
center: _ctx.center,
"align-center": _ctx.alignCenter,
"close-icon": _ctx.closeIcon,
draggable: vue.unref(draggable),
overflow: _ctx.overflow,
fullscreen: _ctx.fullscreen,
"show-close": _ctx.showClose,
title: _ctx.title,
"aria-level": _ctx.headerAriaLevel,
onClose: vue.unref(handleClose)
}), vue.createSlots({
header: vue.withCtx(() => [
!_ctx.$slots.title ? vue.renderSlot(_ctx.$slots, "header", {
key: 0,
close: vue.unref(handleClose),
titleId: vue.unref(titleId),
titleClass: vue.unref(ns).e("title")
}) : vue.renderSlot(_ctx.$slots, "title", { key: 1 })
]),
default: vue.withCtx(() => [
vue.renderSlot(_ctx.$slots, "default")
]),
_: 2
}, [
_ctx.$slots.footer ? {
name: "footer",
fn: vue.withCtx(() => [
vue.renderSlot(_ctx.$slots, "footer")
])
} : void 0
]), 1040, ["center", "align-center", "close-icon", "draggable", "overflow", "fullscreen", "show-close", "title", "aria-level", "onClose"])) : vue.createCommentVNode("v-if", true)
]),
_: 3
}, 8, ["trapped", "onFocusAfterTrapped", "onFocusAfterReleased", "onFocusoutPrevented", "onReleaseRequested"])
], 46, _hoisted_1$5)
]),
_: 3
}, 8, ["mask", "overlay-class", "z-index"]), [
[vue.vShow, vue.unref(visible)]
])
]),
_: 3
}, 8, ["onAfterEnter", "onAfterLeave", "onBeforeLeave"])
], 8, ["to", "disabled"]);
};
}
});
var Dialog = /* @__PURE__ */ _export_sfc$1(_sfc_main$6, [["__file", "dialog.vue"]]);
const ElDialog = withInstall(Dialog);
const SCOPE = "ElInfiniteScroll";
const CHECK_INTERVAL = 50;
const DEFAULT_DELAY = 200;
const DEFAULT_DISTANCE = 0;
const attributes = {
delay: {
type: Number,
default: DEFAULT_DELAY
},
distance: {
type: Number,
default: DEFAULT_DISTANCE
},
disabled: {
type: Boolean,
default: false
},
immediate: {
type: Boolean,
default: true
}
};
const getScrollOptions = (el, instance) => {
return Object.entries(attributes).reduce((acm, [name, option]) => {
var _a2, _b;
const { type, default: defaultValue } = option;
const attrVal = el.getAttribute(`infinite-scroll-${name}`);
let value = (_b = (_a2 = instance[attrVal]) != null ? _a2 : attrVal) != null ? _b : defaultValue;
value = value === "false" ? false : value;
value = type(value);
acm[name] = Number.isNaN(value) ? defaultValue : value;
return acm;
}, {});
};
const destroyObserver = (el) => {
const { observer } = el[SCOPE];
if (observer) {
observer.disconnect();
delete el[SCOPE].observer;
}
};
const handleScroll = (el, cb) => {
const { container, containerEl, instance, observer, lastScrollTop } = el[SCOPE];
const { disabled, distance } = getScrollOptions(el, instance);
const { clientHeight, scrollHeight, scrollTop } = containerEl;
const delta = scrollTop - lastScrollTop;
el[SCOPE].lastScrollTop = scrollTop;
if (observer || disabled || delta < 0)
return;
let shouldTrigger = false;
if (container === el) {
shouldTrigger = scrollHeight - (clientHeight + scrollTop) <= distance;
} else {
const { clientTop, scrollHeight: height } = el;
const offsetTop = getOffsetTopDistance(el, containerEl);
shouldTrigger = scrollTop + clientHeight >= offsetTop + clientTop + height - distance;
}
if (shouldTrigger) {
cb.call(instance);
}
};
function checkFull(el, cb) {
const { containerEl, instance } = el[SCOPE];
const { disabled } = getScrollOptions(el, instance);
if (disabled || containerEl.clientHeight === 0)
return;
if (containerEl.scrollHeight <= containerEl.clientHeight) {
cb.call(instance);
} else {
destroyObserver(el);
}
}
const InfiniteScroll = {
async mounted(el, binding) {
const { instance, value: cb } = binding;
if (!isFunction$1(cb)) {
throwError(SCOPE, "'v-infinite-scroll' binding value must be a function");
}
await vue.nextTick();
const { delay, immediate } = getScrollOptions(el, instance);
const container = getScrollContainer(el, true);
const containerEl = container === window ? document.documentElement : container;
const onScroll = throttle(handleScroll.bind(null, el, cb), delay);
if (!container)
return;
el[SCOPE] = {
instance,
container,
containerEl,
delay,
cb,
onScroll,
lastScrollTop: containerEl.scrollTop
};
if (immediate) {
const observer = new MutationObserver(throttle(checkFull.bind(null, el, cb), CHECK_INTERVAL));
el[SCOPE].observer = observer;
observer.observe(el, { childList: true, subtree: true });
checkFull(el, cb);
}
container.addEventListener("scroll", onScroll);
},
unmounted(el) {
const { container, onScroll } = el[SCOPE];
container == null ? void 0 : container.removeEventListener("scroll", onScroll);
destroyObserver(el);
},
async updated(el) {
if (!el[SCOPE]) {
await vue.nextTick();
} else {
const { containerEl, cb, observer } = el[SCOPE];
if (containerEl.clientHeight && observer) {
checkFull(el, cb);
}
}
}
};
const _InfiniteScroll = InfiniteScroll;
_InfiniteScroll.install = (app) => {
app.directive("InfiniteScroll", _InfiniteScroll);
};
const ElInfiniteScroll = _InfiniteScroll;
const useModalStore = defineStore("modal", () => {
const modalDialogVisible = vue.ref(false);
const modalTitle = vue.ref("");
return {
modalDialogVisible,
modalTitle
};
});
var _GM_getValue = /* @__PURE__ */ (() => typeof GM_getValue != "undefined" ? GM_getValue : void 0)();
var _GM_setValue = /* @__PURE__ */ (() => typeof GM_setValue != "undefined" ? GM_setValue : void 0)();
const _export_sfc = (sfc, props) => {
const target = sfc.__vccOpts || sfc;
for (const [key, val] of props) {
target[key] = val;
}
return target;
};
const _hoisted_1$4 = ["infinite-scroll-disabled"];
const _hoisted_2$2 = ["innerHTML"];
const _hoisted_3$2 = { key: 0 };
const _hoisted_4$2 = ["infinite-scroll-disabled"];
const _hoisted_5$2 = ["innerHTML"];
const _hoisted_6$1 = { key: 0 };
const _hoisted_7$1 = ["infinite-scroll-disabled"];
const _hoisted_8$1 = ["innerHTML"];
const _hoisted_9 = { key: 0 };
const _hoisted_10 = ["infinite-scroll-disabled"];
const _hoisted_11 = ["innerHTML"];
const _hoisted_12 = { key: 0 };
const _sfc_main$5 = {
__name: "ModalDialog",
setup(__props) {
const modalStore = useModalStore();
const { modalDialogVisible, modalTitle } = storeToRefs(modalStore);
const watchLaterNodes = vue.ref([]);
const watchLaterFanHaoList = vue.ref(_GM_getValue("watch_later"));
const watchLaterPageNum = vue.ref(0);
const watchLaterNoMore = vue.ref(false);
const starNodes = vue.ref([]);
const starFanHaoList = vue.ref(_GM_getValue("star").toReversed());
const starPageNum = vue.ref(0);
const starNoMore = vue.ref(false);
const watchedNodes = vue.ref([]);
const watchedFanHaoList = vue.ref(_GM_getValue("watched").toReversed());
const watchedPageNum = vue.ref(0);
const watchedNoMore = vue.ref(false);
const actressNodes = vue.ref([]);
const actressFanHaoList = vue.ref(_GM_getValue("actress").toReversed());
const actressPageNum = vue.ref(0);
const actressNoMore = vue.ref(false);
const stepSize = vue.ref(20);
const watchLaterMaxPage = vue.computed(() => {
return Math.ceil(watchLaterFanHaoList.value.length / stepSize.value);
});
const starMaxPage = vue.computed(() => {
return Math.ceil(starFanHaoList.value.length / stepSize.value);
});
const watchedMaxPage = vue.computed(() => {
return Math.ceil(watchedFanHaoList.value.length / stepSize.value);
});
const actressMaxPage = vue.computed(() => {
return Math.ceil(actressFanHaoList.value.length / stepSize.value);
});
async function loadWatchLater() {
if (watchLaterPageNum.value <= watchLaterMaxPage.value) {
watchLaterPageNum.value++;
console.log(watchLaterPageNum.value);
const fanHaoList = stepArray(watchLaterFanHaoList.value, stepSize.value, watchLaterPageNum.value).map((item) => item);
const nodes = await fetchData(fanHaoList);
if (nodes.length === 0) {
watchLaterNoMore.value = true;
}
watchLaterNodes.value.push(...nodes);
}
}
async function loadStar() {
if (starPageNum.value <= starMaxPage.value) {
starPageNum.value++;
const fanHaoList = stepArray(starFanHaoList.value, stepSize.value, starPageNum.value).map((item) => item);
const nodes = await fetchData(fanHaoList);
if (nodes.length === 0) {
starNoMore.value = true;
}
starNodes.value.push(...nodes);
}
}
async function loadWatched() {
if (watchedPageNum.value <= watchedMaxPage.value) {
watchedPageNum.value++;
const fanHaoList = stepArray(watchedFanHaoList.value, stepSize.value, watchedPageNum.value).map((item) => item);
const nodes = await fetchData(fanHaoList);
if (nodes.length === 0) {
watchedNoMore.value = true;
}
watchedNodes.value.push(...nodes);
}
}
async function loadActress() {
if (actressPageNum.value <= actressMaxPage.value) {
actressPageNum.value++;
const fanHaoList = stepArray(actressFanHaoList.value, stepSize.value, actressPageNum.value).map((item) => item);
const nodes = await fetchData(fanHaoList);
if (nodes.length === 0) {
actressNoMore.value = true;
}
actressNodes.value.push(...nodes);
}
}
function stepArray(arr, stepSize2, stepRound) {
let startIndex = stepRound * stepSize2 - stepSize2;
let endIndex = stepRound * stepSize2;
return arr.slice(startIndex, endIndex);
}
async function fetchData(fanHaoList) {
const result = await Promise.allSettled(fanHaoList.map((item) => {
let keyword = "";
modalTitle.value === "喜欢的女优" ? keyword = "star" : keyword = "search";
const url = `/${keyword}/${item}`;
return fetch(url);
}));
let nodes = [];
for (const item of result) {
if (item.status !== "fulfilled") {
console.error(item.status);
} else {
const html = await item.value.text();
const domparser = new DOMParser();
let doc = domparser.parseFromString(html, "text/html");
let selector;
modalTitle.value === "喜欢的女优" ? selector = ".avatar-box" : selector = ".movie-box";
if (doc.querySelector(selector) && doc.querySelector(selector).parentNode && doc.querySelector(selector).parentNode.cloneNode) {
const node = doc.querySelector(selector).cloneNode(true);
node.setAttribute("style", "margin:8px;");
node.setAttribute("target", "_blank");
if (modalTitle.value === "喜欢的女优" && doc.querySelector("body > nav > div > div.navbar-header.mh50 > div:nth-child(3) > ul > li:nth-child(4) > a")) {
const url = doc.querySelector("body > nav > div > div.navbar-header.mh50 > div:nth-child(3) > ul > li:nth-child(4) > a").getAttribute("href");
const pathname = new URL(url).pathname;
nodes.push(`<a href="${pathname}" target="_blank">${node.outerHTML}</a>`);
} else {
nodes.push(node.outerHTML);
}
}
}
}
return nodes;
}
return (_ctx, _cache) => {
const _component_el_dialog = ElDialog;
const _directive_infinite_scroll = ElInfiniteScroll;
return vue.openBlock(), vue.createBlock(_component_el_dialog, {
modelValue: vue.unref(modalDialogVisible),
"onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => vue.isRef(modalDialogVisible) ? modalDialogVisible.value = $event : null),
title: vue.unref(modalTitle),
fullscreen: true,
center: ""
}, {
default: vue.withCtx(() => [
vue.unref(modalTitle) === "稍后观看" ? vue.withDirectives((vue.openBlock(), vue.createElementBlock("div", {
key: 0,
"infinite-scroll-disabled": watchLaterNoMore.value,
class: "infinite-list"
}, [
(vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(watchLaterNodes.value, (node, index) => {
return vue.openBlock(), vue.createElementBlock("div", { key: index }, [
vue.createElementVNode("div", { innerHTML: node }, null, 8, _hoisted_2$2)
]);
}), 128)),
watchLaterNoMore.value ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_3$2, "没有更多了...")) : vue.createCommentVNode("", true)
], 8, _hoisted_1$4)), [
[_directive_infinite_scroll, loadWatchLater]
]) : vue.unref(modalTitle) === "已观看的影片" ? vue.withDirectives((vue.openBlock(), vue.createElementBlock("div", {
key: 1,
"infinite-scroll-disabled": watchedNoMore.value,
class: "infinite-list"
}, [
(vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(watchedNodes.value, (node, index) => {
return vue.openBlock(), vue.createElementBlock("div", { key: index }, [
vue.createElementVNode("div", { innerHTML: node }, null, 8, _hoisted_5$2)
]);
}), 128)),
watchedNoMore.value ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_6$1, "没有更多了...")) : vue.createCommentVNode("", true)
], 8, _hoisted_4$2)), [
[_directive_infinite_scroll, loadWatched]
]) : vue.unref(modalTitle) === "喜欢的影片" ? vue.withDirectives((vue.openBlock(), vue.createElementBlock("div", {
key: 2,
"infinite-scroll-disabled": starNoMore.value,
class: "infinite-list"
}, [
(vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(starNodes.value, (node, index) => {
return vue.openBlock(), vue.createElementBlock("div", { key: index }, [
vue.createElementVNode("div", { innerHTML: node }, null, 8, _hoisted_8$1)
]);
}), 128)),
starNoMore.value ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_9, "没有更多了...")) : vue.createCommentVNode("", true)
], 8, _hoisted_7$1)), [
[_directive_infinite_scroll, loadStar]
]) : vue.unref(modalTitle) === "喜欢的女优" ? vue.withDirectives((vue.openBlock(), vue.createElementBlock("div", {
key: 3,
"infinite-scroll-disabled": actressNoMore.value,
class: "infinite-list"
}, [
(vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(actressNodes.value, (node, index) => {
return vue.openBlock(), vue.createElementBlock("div", { key: index }, [
vue.createElementVNode("div", { innerHTML: node }, null, 8, _hoisted_11)
]);
}), 128)),
actressNoMore.value ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_12, "没有更多了...")) : vue.createCommentVNode("", true)
], 8, _hoisted_10)), [
[_directive_infinite_scroll, loadActress]
]) : vue.createCommentVNode("", true)
]),
_: 1
}, 8, ["modelValue", "title"]);
};
}
};
const __unplugin_components_4 = /* @__PURE__ */ _export_sfc(_sfc_main$5, [["__scopeId", "data-v-5dbc0225"]]);
const _withScopeId$1 = (n) => (vue.pushScopeId("data-v-f6013da5"), n = n(), vue.popScopeId(), n);
const _hoisted_1$3 = /* @__PURE__ */ _withScopeId$1(() => /* @__PURE__ */ vue.createElementVNode("div", { id: "div-container" }, [
/* @__PURE__ */ vue.createElementVNode("div", { class: "like-actress" })
], -1));
const _sfc_main$4 = {
__name: "Actress",
setup(__props) {
return (_ctx, _cache) => {
return vue.openBlock(), vue.createBlock(vue.Teleport, { to: ".avatar-box > .photo-frame" }, [
_hoisted_1$3
]);
};
}
};
const __unplugin_components_3 = /* @__PURE__ */ _export_sfc(_sfc_main$4, [["__scopeId", "data-v-f6013da5"]]);
const _withScopeId = (n) => (vue.pushScopeId("data-v-60269620"), n = n(), vue.popScopeId(), n);
const _hoisted_1$2 = /* @__PURE__ */ _withScopeId(() => /* @__PURE__ */ vue.createElementVNode("div", { id: "div-container" }, [
/* @__PURE__ */ vue.createElementVNode("div", { class: "star" }),
/* @__PURE__ */ vue.createElementVNode("div", { class: "watchlater" }, [
/* @__PURE__ */ vue.createElementVNode("div", {
class: "watchlater_tip",
style: { "display": "none" }
})
]),
/* @__PURE__ */ vue.createElementVNode("div", { class: "add_watched" })
], -1));
const _sfc_main$3 = {
__name: "SingleMoviePage",
setup(__props) {
return (_ctx, _cache) => {
return vue.openBlock(), vue.createBlock(vue.Teleport, { to: ".bigImage" }, [
_hoisted_1$2
]);
};
}
};
const __unplugin_components_2 = /* @__PURE__ */ _export_sfc(_sfc_main$3, [["__scopeId", "data-v-60269620"]]);
const _hoisted_1$1 = ["id"];
const _hoisted_2$1 = ["id"];
const _hoisted_3$1 = ["id"];
const _hoisted_4$1 = ["id"];
const _hoisted_5$1 = ["id"];
const _sfc_main$2 = {
__name: "MoiveBoxes",
setup(__props) {
const movieBoxes = document.querySelectorAll(".movie-box");
return (_ctx, _cache) => {
return vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(vue.unref(movieBoxes), (element, index) => {
return vue.openBlock(), vue.createBlock(vue.Teleport, { to: element }, [
vue.createElementVNode("div", {
id: `javbus-icon-star-${index + 1}`,
class: "star"
}, null, 8, _hoisted_1$1),
vue.createElementVNode("div", {
id: `javbus-icon-watched-${index + 1}`,
class: "watched"
}, "已观看", 8, _hoisted_2$1),
vue.createElementVNode("div", {
id: `javbus-icon-watch-later-${index + 1}`,
class: "watchlater"
}, [
vue.createElementVNode("div", {
id: `javbus-icon-watch-later-tip-${index + 1}`,
class: "watchlater_tip"
}, null, 8, _hoisted_4$1)
], 8, _hoisted_3$1),
vue.createElementVNode("div", {
id: `javbus-icon-add-watched-${index + 1}`,
class: "add_watched"
}, "添加已观看", 8, _hoisted_5$1)
], 8, ["to"]);
}), 256);
};
}
};
const __unplugin_components_1 = /* @__PURE__ */ _export_sfc(_sfc_main$2, [["__scopeId", "data-v-5cbfd23f"]]);
const _hoisted_1 = /* @__PURE__ */ vue.createElementVNode("b", null, "稍后观看", -1);
const _hoisted_2 = [
_hoisted_1
];
const _hoisted_3 = /* @__PURE__ */ vue.createElementVNode("b", null, "已观看", -1);
const _hoisted_4 = [
_hoisted_3
];
const _hoisted_5 = /* @__PURE__ */ vue.createElementVNode("b", null, "喜欢的影片", -1);
const _hoisted_6 = [
_hoisted_5
];
const _hoisted_7 = /* @__PURE__ */ vue.createElementVNode("b", null, "喜欢的女优", -1);
const _hoisted_8 = [
_hoisted_7
];
const _sfc_main$1 = {
__name: "MenuBar",
setup(__props) {
const modalStore = useModalStore();
const { modalDialogVisible, modalTitle } = storeToRefs(modalStore);
return (_ctx, _cache) => {
return vue.openBlock(), vue.createBlock(vue.Teleport, { to: "#navbar > ul:nth-child(2)" }, [
vue.createElementVNode("li", null, [
vue.createElementVNode("a", {
href: "#",
id: "javbus-btn-watch-later",
onClick: _cache[0] || (_cache[0] = vue.withModifiers(($event) => {
modalTitle.value = "稍后观看";
modalDialogVisible.value = true;
}, ["stop", "prevent"]))
}, _hoisted_2)
]),
vue.createElementVNode("li", null, [
vue.createElementVNode("a", {
href: "#",
id: "javbus-btn-jav-watched",
onClick: _cache[1] || (_cache[1] = vue.withModifiers(($event) => {
modalTitle.value = "已观看的影片";
modalDialogVisible.value = true;
}, ["stop", "prevent"]))
}, _hoisted_4)
]),
vue.createElementVNode("li", null, [
vue.createElementVNode("a", {
href: "#",
id: "javbus-btn-jav-stared",
onClick: _cache[2] || (_cache[2] = vue.withModifiers(($event) => {
modalTitle.value = "喜欢的影片";
modalDialogVisible.value = true;
}, ["stop", "prevent"]))
}, _hoisted_6)
]),
vue.createElementVNode("li", null, [
vue.createElementVNode("a", {
href: "#",
id: "javbus-btn-jav-liked-actress",
onClick: _cache[3] || (_cache[3] = vue.withModifiers(($event) => {
modalTitle.value = "喜欢的女优";
modalDialogVisible.value = true;
}, ["stop", "prevent"]))
}, _hoisted_8)
])
]);
};
}
};
const _sfc_main = {
__name: "App",
setup(__props) {
const showOnIndexPage = /\/#?$/.test(location.href) || /page|genre|search|star|studio|series|label|director|uncensored/.test(location.href);
const showOnSingleMoviePage = /\/\w+\-\d+#?$/.test(location.href);
const showOnActressPage = /[^search]star/.test(location.href);
return (_ctx, _cache) => {
const _component_MenuBar = _sfc_main$1;
const _component_MoiveBoxes = __unplugin_components_1;
const _component_SingleMoviePage = __unplugin_components_2;
const _component_Actress = __unplugin_components_3;
const _component_ModalDialog = __unplugin_components_4;
return vue.openBlock(), vue.createElementBlock(vue.Fragment, null, [
vue.createVNode(_component_MenuBar),
vue.unref(showOnIndexPage) ? (vue.openBlock(), vue.createBlock(_component_MoiveBoxes, { key: 0 })) : vue.createCommentVNode("", true),
vue.unref(showOnSingleMoviePage) ? (vue.openBlock(), vue.createBlock(_component_SingleMoviePage, { key: 1 })) : vue.createCommentVNode("", true),
vue.unref(showOnActressPage) ? (vue.openBlock(), vue.createBlock(_component_Actress, { key: 2 })) : vue.createCommentVNode("", true),
vue.createVNode(_component_ModalDialog)
], 64);
};
}
};
const App = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-3ba6e7bc"]]);
function getFanhao(divMoviebox) {
const fanhao = divMoviebox.getAttribute("href").split("/").at(-1);
return fanhao;
}
function isWatched(fanhao) {
if (_GM_getValue("watched")) {
const result = _GM_getValue("watched").includes(fanhao);
if (result) {
console.log(`${fanhao} is watched.`);
}
return result;
}
return false;
}
function addWatched(fanhao) {
let watched = _GM_getValue("watched");
watched.push(fanhao);
watched = [...new Set(watched)];
_GM_setValue("watched", watched);
console.log(`added ${fanhao} into watched.`);
}
function delWatched(fanhao) {
let watched = _GM_getValue("watched");
watched = [...new Set(watched)];
const index = watched.indexOf(fanhao);
if (index === -1) {
return;
}
watched.splice(index, 1);
_GM_setValue("watched", watched);
console.log(`delete ${fanhao} from watched.`);
}
function isWatchlater(fanhao) {
if (_GM_getValue("watch_later")) {
const result = _GM_getValue("watch_later").includes(fanhao);
if (result) {
console.log(`${fanhao} is watch_later.`);
}
return result;
}
return false;
}
function addWatchlater(fanhao) {
let watch_later = _GM_getValue("watch_later");
watch_later.push(fanhao);
watch_later = [...new Set(watch_later)];
_GM_setValue("watch_later", watch_later);
console.log(`added ${fanhao} into watch_later.`);
}
function delWatchlater(fanhao) {
let watch_later = _GM_getValue("watch_later");
watch_later = [...new Set(watch_later)];
const index = watch_later.indexOf(fanhao);
if (index === -1) {
return;
}
watch_later.splice(index, 1);
_GM_setValue("watch_later", watch_later);
console.log(`delete ${fanhao} from watch_later.`);
}
function isStar(fanhao) {
if (_GM_getValue("star")) {
const result = _GM_getValue("star").includes(fanhao);
if (result) {
console.log(`${fanhao} is star.`);
}
return result;
}
return false;
}
function addStar(fanhao) {
let star = _GM_getValue("star");
star.push(fanhao);
star = [...new Set(star)];
_GM_setValue("star", star);
console.log(`added ${fanhao} into star.`);
}
function delStar(fanhao) {
let star = _GM_getValue("star");
star = [...new Set(star)];
const index = star.indexOf(fanhao);
if (index === -1) {
return;
}
star.splice(index, 1);
_GM_setValue("star", star);
console.log(`delete ${fanhao} from star.`);
}
function isLikeActress(id) {
if (_GM_getValue("actress")) {
const result = _GM_getValue("actress").includes(id);
if (result) {
console.log(`${id} is actress.`);
}
return result;
}
return false;
}
function addLikeActress(id) {
let actress = _GM_getValue("actress");
actress.push(id);
actress = [...new Set(actress)];
_GM_setValue("actress", actress);
console.log(`added ${id} into actress.`);
}
function delLikeActress(id) {
let actress = _GM_getValue("actress");
actress = [...new Set(actress)];
const index = actress.indexOf(id);
if (index === -1) {
return;
}
actress.splice(index, 1);
_GM_setValue("actress", actress);
console.log(`delete ${id} from actress.`);
}
function initLevelDB() {
if (!_GM_getValue("watched")) {
_GM_setValue("watched", []);
}
if (!_GM_getValue("watch_later")) {
_GM_setValue("watch_later", []);
}
if (!_GM_getValue("star")) {
_GM_setValue("star", []);
}
if (!_GM_getValue("actress")) {
_GM_setValue("actress", []);
}
}
function runInSinglePage() {
const divWatchlater = document.querySelector("#div-container > div.watchlater");
const divAddWatched = document.querySelector("#div-container > div.add_watched");
const divStar = document.querySelector("#div-container > div.star");
document.querySelector("#div-container > div.watchlater > div");
divStar.addEventListener("click", function(event) {
const divWatchlater2 = this.parentNode.querySelector(".watchlater");
const divAddWatched2 = this.parentNode.querySelector(".add_watched");
const fanhao2 = getFanhao2();
if (isStar(fanhao2)) {
delStar(fanhao2);
this.setAttribute("class", "star");
} else {
addStar(fanhao2);
this.setAttribute("class", "star active");
delWatchlater(fanhao2);
divWatchlater2.setAttribute("class", "watchlater");
delWatched(fanhao2);
divAddWatched2.setAttribute("class", "add_watched");
}
event.stopPropagation();
event.preventDefault();
});
divAddWatched.addEventListener("click", function(event) {
const divWatchlater2 = this.parentNode.querySelector(".watchlater");
const divStar2 = this.parentNode.querySelector(".star");
const fanhao2 = getFanhao2();
if (isWatched(fanhao2)) {
delWatched(fanhao2);
this.setAttribute("class", "add_watched");
} else {
addWatched(fanhao2);
this.setAttribute("class", "add_watched active");
delWatchlater(fanhao2);
divWatchlater2.setAttribute("class", "watchlater");
delStar(fanhao2);
divStar2.setAttribute("class", "star");
}
event.stopPropagation();
event.preventDefault();
});
divWatchlater.addEventListener("mouseenter", function(event) {
let div = this.querySelector(".watchlater_tip");
const fanhao2 = getFanhao2();
if (isWatchlater(fanhao2)) {
div.textContent = "移除";
} else {
div.textContent = "稍后再看";
}
div.setAttribute("style", "display:block;");
console.log("out divWatchlater mouseenter");
});
divWatchlater.addEventListener("mouseleave", function(event) {
let div = this.querySelector(".watchlater_tip");
div.setAttribute("style", "display:none;");
const fanhao2 = getFanhao2();
if (isWatchlater(fanhao2)) {
this.setAttribute("class", "watchlater active");
} else {
this.setAttribute("class", "watchlater");
}
});
divWatchlater.addEventListener("click", function(event) {
const divTip = this.querySelector(".watchlater_tip");
const divAddWatched2 = this.parentNode.querySelector(".add_watched");
const divStar2 = this.parentNode.querySelector(".star");
const fanhao2 = getFanhao2();
if (isWatchlater(fanhao2)) {
delWatchlater(fanhao2);
divTip.textContent = "已从稍后再看中移除";
this.setAttribute("class", "watchlater");
} else {
divTip.textContent = "已添加至稍后再看";
this.setAttribute("class", "watchlater active");
addWatchlater(fanhao2);
delWatched(fanhao2);
divAddWatched2.setAttribute("class", "add_watched");
delStar(fanhao2);
divStar2.setAttribute("class", "star");
}
event.stopPropagation();
event.preventDefault();
});
function getFanhao2() {
const span = document.querySelector("div.col-md-3.info > p:nth-child(1) > span:nth-child(2)");
const fanhao2 = span.textContent;
return fanhao2;
}
const fanhao = getFanhao2();
if (isWatched(fanhao)) {
divAddWatched.setAttribute("class", "add_watched active");
} else {
divAddWatched.setAttribute("class", "add_watched");
}
if (isWatchlater(fanhao)) {
divWatchlater.setAttribute("class", "watchlater active");
} else {
divWatchlater.setAttribute("class", "watchlater");
}
if (isStar(fanhao)) {
divStar.setAttribute("class", "star active");
} else {
divStar.setAttribute("class", "star");
}
}
function runInListPage() {
document.querySelectorAll(".movie-box").forEach((movieBox) => {
movieBox.setAttribute("target", "_blank");
const divWatchlater = movieBox.querySelector(".watchlater");
movieBox.querySelector("watchlater_tip");
const divAddWatched = movieBox.querySelector(".add_watched");
movieBox.querySelector(".watched");
const divStar = movieBox.querySelector(".star");
divStar.addEventListener("click", function(event) {
const divWatchlater2 = this.parentNode.querySelector(".watchlater");
const divAddWatched2 = this.parentNode.querySelector(".add_watched");
const fanhao2 = getFanhao(this.parentNode);
if (isStar(fanhao2)) {
delStar(fanhao2);
this.setAttribute("class", "star");
} else {
addStar(fanhao2);
this.setAttribute("class", "star active");
delWatchlater(fanhao2);
divWatchlater2.setAttribute("class", "watchlater");
delWatched(fanhao2);
divAddWatched2.textContent = "添加已观看";
}
event.preventDefault();
});
divAddWatched.addEventListener("click", function(event) {
const divWatchlater2 = this.parentNode.querySelector(".watchlater");
const divStar2 = this.parentNode.querySelector(".star");
const fanhao2 = getFanhao(this.parentNode);
if (isWatched(fanhao2)) {
delWatched(fanhao2);
this.textContent = "添加已观看";
} else {
addWatched(fanhao2);
this.textContent = "取消已观看";
delWatchlater(fanhao2);
divWatchlater2.setAttribute("class", "watchlater");
delStar(fanhao2);
divStar2.setAttribute("class", "star");
}
event.preventDefault();
event.stopPropagation();
});
divWatchlater.addEventListener("mouseenter", function(event) {
let div = this.querySelector(".watchlater_tip");
const fanhao2 = getFanhao(this.parentNode);
if (isWatchlater(fanhao2)) {
div.textContent = "移除";
} else {
div.textContent = "稍后再看";
}
div.setAttribute("style", "display:block;");
});
divWatchlater.addEventListener("mouseleave", function(event) {
let div = this.querySelector(".watchlater_tip");
div.setAttribute("style", "display:none;");
const fanhao2 = getFanhao(this.parentNode);
if (isWatchlater(fanhao2)) {
this.setAttribute("class", "watchlater active");
} else {
this.setAttribute("class", "watchlater");
}
});
divWatchlater.addEventListener("click", function(event) {
const divTip = this.querySelector(".watchlater_tip");
const divAddWatched2 = this.parentNode.querySelector(".add_watched");
const divStar2 = this.parentNode.querySelector(".star");
const fanhao2 = getFanhao(this.parentNode);
if (isWatchlater(fanhao2)) {
delWatchlater(fanhao2);
divTip.textContent = "已从稍后再看中移除";
this.setAttribute("class", "watchlater");
} else {
divTip.textContent = "已添加至稍后再看";
this.setAttribute("class", "watchlater active");
addWatchlater(fanhao2);
delWatched(fanhao2);
divAddWatched2.textContent = "添加已观看";
delStar(fanhao2);
divStar2.setAttribute("class", "star");
}
event.preventDefault();
});
movieBox.addEventListener("mouseenter", function(event) {
const watchlater = this.querySelector(".watchlater");
const addWatched2 = this.querySelector(".add_watched");
const watched = this.querySelector(".watched");
const star = this.querySelector(".star");
const fanhao2 = getFanhao(this);
if (!isWatched(fanhao2)) {
addWatched2.textContent = "添加已观看";
} else {
addWatched2.textContent = "取消已观看";
}
if (isWatchlater(fanhao2)) {
watchlater.setAttribute("class", "watchlater active");
} else {
watchlater.setAttribute("class", "watchlater");
}
if (isStar(fanhao2)) {
star.setAttribute("style", "display:block;");
star.setAttribute("class", "star active");
} else {
star.setAttribute("style", "display:none;");
}
watchlater.setAttribute("style", "display:block;");
addWatched2.setAttribute("style", "display:block;");
watched.setAttribute("style", "display:none;");
star.setAttribute("style", "display:block;");
});
movieBox.addEventListener("mouseleave", function(event) {
const watchlater = this.querySelector(".watchlater");
const addWatched2 = this.querySelector(".add_watched");
const watched = this.querySelector(".watched");
const star = this.querySelector(".star");
addWatched2.setAttribute("style", "display:none;");
const fanhao2 = getFanhao(this);
if (isWatchlater(fanhao2)) {
watchlater.setAttribute("class", "watchlater active");
watchlater.setAttribute("style", "display:block;");
} else {
watchlater.setAttribute("style", "display:none;");
}
if (isWatched(fanhao2)) {
watched.setAttribute("style", "display:block;");
} else {
watched.setAttribute("style", "display:none;");
}
if (isStar(fanhao2)) {
star.setAttribute("style", "display:block;");
} else {
star.setAttribute("style", "display:none;");
}
});
const fanhao = getFanhao(movieBox);
if (isWatched(fanhao)) {
const watched = movieBox.querySelector(".watched");
watched.setAttribute("style", "display:block;");
}
if (isWatchlater(fanhao)) {
const watchlater = movieBox.querySelector(".watchlater");
watchlater.setAttribute("class", "watchlater active");
watchlater.setAttribute("style", "display:block;");
}
if (isStar(fanhao)) {
const star = movieBox.querySelector(".star");
star.setAttribute("class", "star active");
star.setAttribute("style", "display:block;");
}
});
}
function runInActressPage() {
const photoFrame = document.querySelector(".avatar-box > .photo-frame");
const divLikeActress = photoFrame.querySelector(".like-actress");
divLikeActress.addEventListener("click", function() {
const actressId2 = location.href.split("/").at(-1);
if (isLikeActress(actressId2)) {
delLikeActress(actressId2);
this.setAttribute("class", "like-actress");
} else {
addLikeActress(actressId2);
this.setAttribute("class", "like-actress active");
}
});
const actressId = location.href.split("/").at(-1);
if (isLikeActress(actressId)) {
document.querySelector(".like-actress").setAttribute("class", "like-actress active");
} else {
document.querySelector(".like-actress").setAttribute("class", "like-actress");
}
}
initLevelDB();
document.addEventListener("DOMContentLoaded", () => {
document.querySelectorAll(".ad-box").forEach((ad) => {
ad.parentNode.removeChild(ad);
});
const pinia = createPinia();
const app = vue.createApp(App);
app.use(pinia);
app.mount(
(() => {
const app2 = document.createElement("div");
app2.id = "mount-point";
document.body.append(app2);
return app2;
})()
);
if (/\/#?$/.test(location.href) || /page|genre|search|star|studio|series|label|director|uncensored/.test(location.href)) {
runInListPage();
}
if (/\/\w+\-\d+#?$/.test(location.href)) {
runInSinglePage();
}
if (/[^search]star/.test(location.href)) {
runInActressPage();
}
});
})(Vue);