// ==UserScript== // @name Tieba Remix: 贴吧网页端重塑 // @namespace https://github.com/HacksawBlade/Tieba-Remix // @version 0.4.4-r1-beta // @author 锯条 // @description 贴吧网页端重塑 // @license MIT // @icon https://gitee.com/HacksawBlade/Tieba-Remix/raw/master/assets/images/main/icon16.png // @icon64 https://gitee.com/HacksawBlade/Tieba-Remix/raw/master/assets/images/main/icon64.png // @match *://tieba.baidu.com // @match *://tieba.baidu.com/index.* // @match *://tieba.baidu.com/?* // @match *://tieba.baidu.com/p/* // @match *://tieba.baidu.com/f?* // @match *://jump.bdimg.com/safecheck/* // @match *://jump2.bdimg.com/safecheck/* // @require https://fastly.jsdelivr.net/npm/vue@3.4.19/dist/vue.global.prod.js // @require data:application/javascript,%3Bwindow.Vue%3DVue%3B // @require https://fastly.jsdelivr.net/npm/element-plus@2.5.3/dist/index.full.min.js // @require https://fastly.jsdelivr.net/npm/marked@9.1.6/lib/marked.umd.min.js // @resource element-plus/dist/index.css https://fastly.jsdelivr.net/npm/element-plus@2.5.3/dist/index.css // @grant GM_addStyle // @grant GM_deleteValue // @grant GM_getResourceText // @grant GM_getValue // @grant GM_info // @grant GM_listValues // @grant GM_openInTab // @grant GM_setValue // @run-at document-start // @downloadURL none // ==/UserScript== (n=>{if(typeof GM_addStyle=="function"){GM_addStyle(n);return}const o=document.createElement("style");o.textContent=n,document.head.append(o)})(` @charset "UTF-8";@keyframes kf-fade-in { 0% { opacity: 0; } 100% { opacity: 1; } } @keyframes kf-fade-out { 0% { opacity: 1; } 100% { opacity: 0; } } @keyframes kf-dialog-in { 0% { opacity: 0; transform: scale(1.2); } 100% { opacity: 1; transform: scale(1); } } @keyframes kf-zoom-in { 0% { transform: scale(0.72); } 100% { transform: scale(1); } } @keyframes kf-fade-zoom-in { 0% { opacity: 0; transform: scale(0.72); } 100% { opacity: 1; transform: scale(1); } } .user-button { box-sizing: border-box; padding: 2px 8px; border: none; border-radius: 6px; background: none; background-color: var(--default-background); box-shadow: 0 0 0 1px var(--border-color); color: var(--default-fore); cursor: pointer; transition: 0.4s; } .user-button:hover:not([disabled]) { background-color: var(--default-hover); } .user-button:active:not([disabled]) { background-color: var(--default-active); } .user-button:focus:not([disabled]) { border-color: var(--tieba-theme-color); box-shadow: 0 0 0 2px var(--tieba-theme-color); } .theme-style.user-button { color: var(--default-background) !important; } .theme-style.user-button { background-color: var(--tieba-theme-color); } .theme-style.user-button:hover { background-color: var(--tieba-theme-hover); } .theme-style.user-button:active { background-color: var(--tieba-theme-active); } .unset-background.user-button { background-color: transparent; background-color: initial; } .no-border.user-button { box-shadow: none; } .no-border-all.user-button { box-shadow: none; } .no-border-all.user-button:hover, .no-border-all.user-button:focus { box-shadow: none; }@keyframes kf-fade-in-db54e64e { 0% { opacity: 0; } 100% { opacity: 1; } } @keyframes kf-fade-out-db54e64e { 0% { opacity: 1; } 100% { opacity: 0; } } @keyframes kf-dialog-in-db54e64e { 0% { opacity: 0; transform: scale(1.2); } 100% { opacity: 1; transform: scale(1); } } @keyframes kf-zoom-in-db54e64e { 0% { transform: scale(0.72); } 100% { transform: scale(1); } } @keyframes kf-fade-zoom-in-db54e64e { 0% { opacity: 0; transform: scale(0.72); } 100% { opacity: 1; transform: scale(1); } } html[data-v-db54e64e] { padding: 0; margin: 0; text-align: justify; } body[data-v-db54e64e] { overflow-x: hidden; overflow-y: scroll; overflow: hidden scroll; padding: 0; margin: 0; font-family: var(--code-zh); } body[no-scrollbar][data-v-db54e64e] { overflow: hidden; } div[data-v-db54e64e], p[data-v-db54e64e] { margin: 0; } select[data-v-db54e64e] { padding: 1px 8px; border: 1px solid var(--border-color); border-radius: 8px; cursor: pointer; } option[data-v-db54e64e] { cursor: pointer; } option[data-v-db54e64e]:checked { background-color: var(--tieba-theme-color); color: var(--default-background); } a[data-v-db54e64e] { color: inherit; -webkit-text-decoration: none; text-decoration: none; word-break: break-all; } .dialogJ[data-v-db54e64e] { position: fixed !important; top: 50% !important; left: 50% !important; } .dialogJ[data-v-db54e64e] { transform: translate(-50%, -50%); } @keyframes stretch-db54e64e { 0% { padding: 0 12px; opacity: 0; } 50% { opacity: 1; } 100% { padding: 8px 12px; } } .check[data-v-db54e64e] { color: var(--level-green-fore); } .warning[data-v-db54e64e] { color: var(--warning-color); } .error[data-v-db54e64e] { color: var(--error-color); } .toast-container[data-v-db54e64e] { position: fixed; z-index: 999; bottom: 96px; left: 50%; display: flex; max-height: 60vh; align-items: center; padding: 8px 12px; border: 1px solid var(--border-color); border-radius: 16px; animation: stretch-db54e64e 0.4s cubic-bezier(0.18, 0.89, 0.32, 1.6); background-color: var(--default-background); box-shadow: 0 10px 24px rgba(0, 0, 0, 0.2); gap: 6px; text-overflow: ellipsis; transform: translateX(-50%); transition: all ease 0.4s; } .toast-container .toast-icon[data-v-db54e64e] { font-size: 18px; } .toast-container .toast-content[data-v-db54e64e] { overflow: hidden; max-width: 80vw; max-height: 60vh; padding: 0 6px; text-align: left; text-overflow: ellipsis; white-space: pre-wrap; } .toast-container span[data-v-db54e64e] { color: var(--minimal-fore); font-size: 12px; } .toast-container .toast-controls .close-button[data-v-db54e64e] { padding: 6px; color: var(--error-color); font-weight: bold; } .toast-container .toast-controls .close-button[data-v-db54e64e]:not(:active):not(:focus) { box-shadow: none; } .blur-effect[data-v-db54e64e] { background-color: var(--trans-default-background); } html:not([perf-saver]) .blur-effect[data-v-db54e64e] { -webkit-backdrop-filter: blur(24px); backdrop-filter: blur(24px); } html.dark-theme .blur-effect[data-v-db54e64e] { -webkit-backdrop-filter: blur(24px) brightness(0.8); backdrop-filter: blur(24px) brightness(0.8); }body { --el-color-primary: var(--tieba-theme-color) !important; }/* stylelint-disable font-family-no-missing-generic-family-keyword */\r /* https: //fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@20..48,200..400,0..1,-50..100 */\r \r /* fallback */\r @font-face {\r font-family: "Material Symbols";\r font-style: normal;\r font-weight: 200 400;\r src: url("https://fonts.gstatic.com/s/materialsymbolsoutlined/v110/kJEhBvYX7BgnkSrUwT8OhrdQw4oELdPIeeII9v6oFsI.woff2") format("woff2");\r }\r \r .material-symbols-outlined {\r display: inline-block;\r direction: ltr;\r font-family: "Material Symbols";\r font-size: 24px;\r -webkit-font-smoothing: antialiased;\r font-style: normal;\r font-weight: normal;\r letter-spacing: normal;\r line-height: 1;\r text-transform: none;\r white-space: nowrap;\r word-wrap: normal;\r }\r :root { --img-tieba-icon: url("https://gitee.com/HacksawBlade/Tieba-Remix/raw/master/assets/images/main/icon.png"); } .dark-theme { --default-background: rgb(32, 32, 32); --default-hover: rgb(42, 42, 42); --default-active: rgb(54, 54, 54); --page-background: rgb(26, 26, 26); --trans-page-background: rgba(26, 26, 26, 0.6); --trans-default-background: rgba(32, 32, 32, 0.6); --deep-background: rgb(26, 26, 26); --trans-deep-background: rgba(20, 20, 20, 0.6); --light-background: rgb(60, 60, 60); --trans-light-background: rgba(60, 60, 60, 0.6); --very-light-background: rgb(60, 60, 60); --elem-color: rgb(26, 26, 26); --default-fore: rgb(230, 230, 230); --light-fore: rgb(200, 200, 200); --minimal-fore: rgb(144, 144, 144); --highlight-fore: rgb(255, 255, 255); --border-color: rgba(96, 96, 96, 0.6); --light-border-color: rgba(96, 96, 96, 0.2); --tieba-theme-color: rgb(113, 97, 193); --trans-tieba-theme-color: rgba(113, 97, 193, 0.6); --tieba-theme-hover: rgb(149, 128, 254); --tieba-theme-active: rgb(172, 156, 253); --tieba-theme-background: rgba(113, 97, 193, 0.2); --tieba-theme-fore: rgb(150, 128, 255); --level-green-background: rgba(96, 153, 59, 0.1); --level-green-fore: rgb(133, 206, 84); --level-blue-background: rgba(0, 165, 227, 0.1); --level-blue-fore: rgb(0, 169, 255); --level-yellow-background: rgba(229, 193, 90, 0.1); --level-yellow-fore: rgb(242, 205, 96); --level-orange-background: rgba(204, 122, 0, 0.1); --level-orange-fore: rgb(255, 170, 0); --check-color: lawngreen; --error-color: tomato; --warning-color: orange; color-scheme: dark; } .light-theme { --default-background: rgb(255, 255, 255); --default-hover: rgb(240, 240, 240); --default-active: rgb(224, 224, 224); --page-background: rgb(245, 245, 245); --trans-page-background: rgba(245, 245, 245, 0.6); --trans-default-background: rgba(255, 255, 255, 0.6); --deep-background: rgb(228, 228, 228); --trans-deep-background: rgba(200, 200, 200, 0.6); --light-background: rgb(235, 235, 235); --trans-light-background: rgba(228, 228, 228, 0.6); --very-light-background: rgb(245, 245, 245); --elem-color: rgb(240, 240, 240); --default-fore: rgb(16, 16, 16); --light-fore: rgb(64, 64, 64); --minimal-fore: rgb(92, 92, 92); --highlight-fore: rgb(0, 0, 0); --border-color: rgba(210, 210, 210, 0.6); --light-border-color: rgba(210, 210, 210, 0.2); --tieba-theme-color: rgb(97, 78, 194); --trans-tieba-theme-color: rgba(97, 78, 194, 0.6); --tieba-theme-hover: rgb(119, 105, 194); --tieba-theme-active: rgb(150, 134, 232); --tieba-theme-background: rgba(97, 78, 194, 0.2); --tieba-theme-fore: rgb(58, 46, 116); --level-green-background: rgba(84, 130, 53, 0.1); --level-green-fore: rgb(51, 78, 32); --level-blue-background: rgba(0, 153, 213, 0.1); --level-blue-fore: rgb(0, 81, 111); --level-yellow-background: rgba(164, 139, 63, 0.1); --level-yellow-fore: rgb(124, 105, 46); --level-orange-background: rgba(255, 153, 0, 0.1); --level-orange-fore: rgb(178, 104, 0); --check-color: green; --error-color: darkred; --warning-color: darkorange; color-scheme: "light"; }@keyframes kf-fade-in { 0% { opacity: 0; } 100% { opacity: 1; } } @keyframes kf-fade-out { 0% { opacity: 1; } 100% { opacity: 0; } } @keyframes kf-dialog-in { 0% { opacity: 0; transform: scale(1.2); } 100% { opacity: 1; transform: scale(1); } } @keyframes kf-zoom-in { 0% { transform: scale(0.72); } 100% { transform: scale(1); } } @keyframes kf-fade-zoom-in { 0% { opacity: 0; transform: scale(0.72); } 100% { opacity: 1; transform: scale(1); } } html { padding: 0; margin: 0; text-align: justify; } body { overflow-x: hidden; overflow-y: scroll; overflow: hidden scroll; padding: 0; margin: 0; font-family: var(--code-zh); } body[no-scrollbar] { overflow: hidden; } div, p { margin: 0; } select { padding: 1px 8px; border: 1px solid var(--border-color); border-radius: 8px; cursor: pointer; } option { cursor: pointer; } option:checked { background-color: var(--tieba-theme-color); color: var(--default-background); } a { color: inherit; -webkit-text-decoration: none; text-decoration: none; word-break: break-all; } .dialogJ { position: fixed !important; top: 50% !important; left: 50% !important; } .dialogJ { transform: translate(-50%, -50%); }@keyframes kf-fade-in { 0% { opacity: 0; } 100% { opacity: 1; } } @keyframes kf-fade-out { 0% { opacity: 1; } 100% { opacity: 0; } } @keyframes kf-dialog-in { 0% { opacity: 0; transform: scale(1.2); } 100% { opacity: 1; transform: scale(1); } } @keyframes kf-zoom-in { 0% { transform: scale(0.72); } 100% { transform: scale(1); } } @keyframes kf-fade-zoom-in { 0% { opacity: 0; transform: scale(0.72); } 100% { opacity: 1; transform: scale(1); } } html { padding: 0; margin: 0; text-align: justify; } body { overflow-x: hidden; overflow-y: scroll; overflow: hidden scroll; padding: 0; margin: 0; font-family: var(--code-zh); } body[no-scrollbar] { overflow: hidden; } div, p { margin: 0; } select { padding: 1px 8px; border: 1px solid var(--border-color); border-radius: 8px; cursor: pointer; } option { cursor: pointer; } option:checked { background-color: var(--tieba-theme-color); color: var(--default-background); } a { color: inherit; -webkit-text-decoration: none; text-decoration: none; word-break: break-all; } .dialogJ { position: fixed !important; top: 50% !important; left: 50% !important; } .dialogJ { transform: translate(-50%, -50%); } .icon, .outline-icon { font-family: "Material Symbols", monospace !important; } .icon, .outline-icon { font-variation-settings: "FILL" 0, "wght" 400, "GRAD" 0, "opsz" 40; -webkit-user-select: none; -moz-user-select: none; user-select: none; } .filled-icon { font-family: "Material Symbols", monospace !important; } .filled-icon { font-variation-settings: "FILL" 1, "wght" 400, "GRAD" 0, "opsz" 40; -webkit-user-select: none; -moz-user-select: none; user-select: none; } .anchor, .anchor-underline { color: var(--tieba-theme-fore); cursor: pointer; -webkit-text-decoration: none; text-decoration: none; transition: 0.4s; } .anchor-underline { text-decoration: underline; -webkit-text-decoration: underline solid currentColor; text-decoration: underline solid currentColor; text-decoration-thickness: 1.2px; -webkit-text-decoration: underline 1.2px; text-decoration: underline 1.2px; } .anchor:hover, .anchor-underline:hover { background-color: var(--default-hover); } .anchor-underline:hover { text-decoration: underline; -webkit-text-decoration: underline solid rgba(0, 0, 0, 0); text-decoration: underline solid rgba(0, 0, 0, 0); text-decoration-thickness: 1.2px; -webkit-text-decoration: underline 1.2px rgba(0, 0, 0, 0); text-decoration: underline 1.2px rgba(0, 0, 0, 0); } .anchor:active, .anchor-underline:active { background-color: var(--default-active); } .markdown { font-family: var(--code-zh); font-size: 16px; } .markdown code { padding: 2px 6px; border-radius: 8px; background-color: var(--light-border-color); font-family: var(--code-monospace); word-wrap: break-word; } .markdown a { color: var(--tieba-theme-fore); } .markdown a:hover { -webkit-text-decoration: underline; text-decoration: underline; } .markdown h2 { margin: 20px 0 8px; font-size: 24px; } .markdown h3 { margin: 16px 0 6px; } .markdown ul { margin: 6px 0; } .markdown li { margin: 6px 0 6px 22px; list-style: disc; } .markdown li::marker { color: var(--minimal-fore); } .markdown blockquote { margin: 20px 16px; color: var(--minimal-fore); } .settings-toggle-button { border: none !important; background-color: transparent !important; background-color: initial !important; } .settings-toggle-button { border-radius: 36px; } .settings-toggle-button.toggle-off { color: var(--minimal-fore); font-variation-settings: "FILL" 0; } .settings-toggle-button.toggle-off::after { content: "toggle_off"; } .settings-toggle-button.toggle-on::after { content: "toggle_on"; } .settings-toggle-button.toggle-on { color: var(--tieba-theme-color); font-variation-settings: "FILL" 1; } .settings-toggle-button.toggle-off:hover { color: var(--default-hover); } .settings-toggle-button.toggle-off:active { color: var(--default-active); } .settings-toggle-button.toggle-on:hover { color: var(tieba-theme-hover); } .settings-toggle-button.toggle-on:active { color: var(--tieba-theme-active); } .level-green { background-color: var(--level-green-background) !important; color: var(--level-green-fore) !important; } .level-blue { background-color: var(--level-blue-background) !important; color: var(--level-blue-fore) !important; } .level-yellow { background-color: var(--level-yellow-background) !important; color: var(--level-yellow-fore) !important; } .level-orange { background-color: var(--level-orange-background) !important; color: var(--level-orange-fore) !important; } .remove-default { line-height: normal !important; } .remove-default { font-size: 16px; } .remove-default button, .remove-default input, .remove-default optgroup, .remove-default select, .remove-default textarea { font-family: var(--code-zh); font-size: 14px; } .remove-default .content { min-height: 0; min-height: initial; background: transparent none repeat 0 0 / auto auto padding-box border-box scroll; background: initial; } .remove-default code { display: inline; display: initial; width: auto; width: initial; height: auto; height: initial; } .remove-default .content, .remove-default .foot { width: auto; width: initial; } .remove-default button { color: inherit; } html:not([perf-saver]) body.custom-background .blur-if-custom-background { -webkit-backdrop-filter: blur(24px); backdrop-filter: blur(24px); } html.dark-theme body.custom-background .blur-if-custom-background { -webkit-backdrop-filter: blur(24px) brightness(0.8); backdrop-filter: blur(24px) brightness(0.8); } html:not([perf-saver]) .blur-effect { -webkit-backdrop-filter: blur(24px); backdrop-filter: blur(24px); } html.dark-theme .blur-effect { -webkit-backdrop-filter: blur(24px) brightness(0.8); backdrop-filter: blur(24px) brightness(0.8); } html:not([perf-saver]) .raster-effect { -webkit-backdrop-filter: saturate(0.8) blur(4px); backdrop-filter: saturate(0.8) blur(4px); background-color: var(--trans-page-background); background-image: radial-gradient(transparent 1px, var(--page-background) 1px); background-size: 4px 4px; } /* \u641C\u7D22\u680F */ .search-form { background-color: var(--default-background); } .search-form p { display: none; } .page404 { background-color: var(--default-background); } .main-title { color: var(--default-fore); } .main-title a { color: var(--tieba-theme-fore); } .app_download_box { display: none; } #error_404_iframe { display: none; } body { background-color: var(--page-background); color: var(--default-fore); } /* \u5BFC\u822A\u680F */ .head_inner { /* \u5BFC\u822A\u680F\u989D\u5934 */ background-color: var(--default-background); } .u_menu_item a { /* \u9876\u90E8\u8D85\u94FE\u63A5 */ color: var(--default-fore); } .head_inner .search_logo { left: 72px; width: 60px; height: 60px; /* logo */ background-image: var(--img-tieba-icon); } .search_top { border: none; } .search_nav a:link, .search_nav a:hover, .search_nav a:visited { /* \u5BFC\u822A\u680F\u8D85\u94FE\u63A5 */ color: var(--default-fore); } .u_menu_item a:hover, .u_menu_item a:visited { color: var(--default-fore); } /* \u641C\u7D22 */ .search_main { padding-bottom: 96px; } .search_bright .search_inp_border { /* \u641C\u7D22\u6846 */ border-color: var(--border-color); border-bottom-left-radius: 8px; border-top-left-radius: 8px; color: var(--default-fore); } .search_bright .search_inp_border:focus { border-color: var(--tieba-theme-color); } .search_bright .search_btn { border-color: var(--trans-tieba-theme-color); /* \u641C\u7D22\u76F8\u5173\u6309\u94AE */ border-radius: 8px; background-color: var(--tieba-theme-background); color: var(--tieba-theme-fore); } .search_bright .search_btn_enter_ba { /* \u201C\u8FDB\u5165\u8D34\u5427\u201D\u6309\u94AE */ background-color: var(--tieba-theme-color); border-bottom-left-radius: 0; border-top-left-radius: 0; color: var(--default-background); } .search_bright .search_btn:visited { color: var(--tieba-theme-fore); } .search_bright .search_btn_enter_ba:visited { background-color: var(--tieba-theme-color); color: var(--default-background); } .search_bright .search_btn_enter_ba:hover { background-color: var(--tieba-theme-color); color: var(--default-background); } .suggestion { border-color: var(--border-color) !important; border-radius: 6px !important; background-color: var(--elem-color) !important; box-shadow: none !important; color: var(--default-fore) !important; } .suggestion { transform: translateY(4px); } .suggestion .break_tip { background-color: var(--default-background) !important; } .suggestion .highlight { color: var(--tieba-theme-color) !important; } .suggestion .highlight { /* \u9AD8\u4EAE\u6587\u672C */ } .suggestion .operation_title { color: var(--default-fore) !important; } .suggestion .operation_title { /* \u70ED\u8BAE\u6587\u5B57 */ } .suggestion .forum_image { /* \u63A8\u8350\u56FE\u6807 */ border-radius: 8px; } .suggestion .forum_name { color: var(--default-fore) !important; } .suggestion .forum_name { /* \u63A8\u8350\u6807\u9898 */ } .suggestion .on { background-color: var(--light-background) !important; } .suggestion .on { /* \u641C\u7D22\u63A8\u8350\uFF1A\u9009\u4E2D */ } /* \u9996\u9875\u6A2A\u5E45 */ .page-container .top-sec { display: none; } /* \u5185\u5BB9 */ .page-container .content-sec { background: none; } /* \u5DE6\u4FA7\u60AC\u505C */ .page-container .left-sec { border-radius: 24px; border-top: none; background: none; background-color: var(--elem-color); } .f-d-w { border-radius: 24px; /* \u5DE6\u4FA7\u60AC\u505C 2 */ background-color: var(--elem-color); } .f-d-w .f-d-item { background: none; } .aggregate_entrance_wrap { /* \u4E13\u9898 */ display: none; } .u-f-t .gap { border: none; /* \u201C\u8D34\u5427\u5206\u7C7B\u201D\u5206\u9694\u7B26 */ background: none; } .f-d-w .all { /* \u201C\u67E5\u770B\u5168\u90E8\u201D\u6309\u94AE */ background: none; } .forum_rcmd { /* \u70ED\u95E8\u5427\u5361\u7247 */ border: 0; border-radius: 24px; background-color: var(--elem-color); } .region_bright .region_header { /* \u201C\u6211\u5728\u8D34\u5427\u201D\u6807\u9898 */ color: var(--default-fore); } .page-container .left-sec .region_bright { border-radius: 24px; } .my_tieba_mod .media_left, .my_tieba_mod .media-left { /* \u5934\u50CF\u8FB9\u6846 */ border: none; } .media_left img, .media-left img { /* \u5934\u50CF */ border-radius: 16px; } #nameValue { /* \u6211\u7684\u7528\u6237\u540D */ color: var(--default-fore); } #j_tcharge_dialog { /* \u201C\u83B7\u53D6\u201D\u8D85\u94FE\u63A5 */ color: var(--default-fore); } #onekey_sign .onekey_btn, #onekey_sign a.onekey_btn { /* \u7B7E\u5230\u6309\u94AE */ border-radius: 8px; margin-right: -5px; background: none; background-color: var(--tieba-theme-color); color: var(--elem-color); text-align: center; } #onekey_sign .onekey_btn::after { content: "\u4E00\u952E\u7B7E\u5230"; } #onekey_sign a.signed_btn .icon_signed { /* \u5DF2\u7B7E\u5230\u6807\u8BB0 */ margin-top: 2px; background: var(--svg-checkmark); background-repeat: no-repeat; background-size: 20px; filter: drop-shadow(var(--elem-color) 0 9999px); transform: translateY(-9999px); } #onekey_sign .onekey_btn:hover { box-shadow: 0 0 10px var(--tieba-theme-color); } .u-f-w { /* \u8FDB\u5427 div */ padding-bottom: 20px; } .left-cont-fixed { /* \u8FDB\u5427 div \u56FA\u5B9A */ position: relative; bottom: 0; } .u-f-w .sign, .u-f-w .unsign, .always-forum-item .sign, .always-forum-item .unsign { /* \u8FDB\u5427\u6309\u94AE */ border-radius: 8px; background: none; background-color: var(--light-background); color: var(--default-fore); } .u-f-w .sign, .always-forum-item .sign { /* \u5DF2\u7B7E\u5230 */ background-color: var(--tieba-theme-background); color: var(--tieba-theme-fore); } .u-f-w .sign, .u-f-w .unsign { margin-bottom: 8px; } .u-f-w .sign:hover, .u-f-w .unsign:hover, .always-forum-item .sign:hover, .always-forum-item .unsign:hover { background: none; background-color: var(--tieba-theme-color); box-shadow: 0 0 10px var(--tieba-theme-color); color: var(--elem-color); -webkit-text-decoration: none; text-decoration: none; } .u-f-w .more { /* \u201C\u67E5\u770B\u66F4\u591A\u201D\u6309\u94AE */ border: none; border-radius: 8px; background: none; background-color: var(--elem-color); box-shadow: none; color: var(--default-fore); } .more-txt { /* \u201C\u67E5\u770B\u66F4\u591A\u201D\u6309\u94AE\u6587\u5B57 */ color: var(--default-fore); } .u-f-w .more-hover { width: 188px; margin: auto; background-color: var(--tieba-theme-color); box-shadow: 0 0 10px var(--tieba-theme-color); color: var(--elem-color); } .u-f-w .more-hover .more-txt, .u-f-w .more:hover .more-txt { margin-left: 60px; color: var(--elem-color); } .always-forum-title { /* \u5C55\u5F00\u6807\u9898 */ border: none; margin-top: 10px; } #alwayforum-wraper { /* \u5173\u6CE8\u5427\u5C55\u5F00 */ background-color: var(--elem-color); } .pop-up-frame { /* \u5C55\u5F00\u9875\u9762 */ border: none; border-radius: 24px; background-color: var(--elem-color); border-bottom-left-radius: 0; box-shadow: none; } .always-forum-close { /* \u5C55\u5F00\u53C9\u53F7 */ display: none; } .always-forum-item .addnewforumbtn { /* \u201C\u6DFB\u52A0\u7231\u901B\u7684\u5427\u201D\u6309\u94AE */ width: 110px; padding-left: 0; border-radius: 8px; background: none; background-color: var(--tieba-theme-background); color: var(--tieba-theme-fore); font-size: 20px; text-align: center; } .always-forum-item .addnewforumbtn::after { content: "+"; } .always-forum-item .addnewforumbtn:hover { background-color: var(--tieba-theme-color); box-shadow: 0 0 10px var(--tieba-theme-color); color: var(--elem-color); } .tbui_scroll_panel .tbui_scroll_button { /* \u5C55\u5F00\u6EDA\u52A8\u6761 */ width: 6px; border: none; border-radius: 24px; background-color: var(--very-light-background); } .tbui_scroll_panel .tbui_scroll_bar { width: 6px; /* \u6EDA\u52A8\u6761\u80CC\u666F */ background: none; } .forum_rcmd .class_title > div { /* \u70ED\u95E8\u5427 icon */ color: var(--default-fore); } .rcmd_forum_item .forum_name { /* \u70ED\u95E8\u5427\u6807\u9898 */ color: var(--default-fore); } .rcmd_forum_item .rcmd_forum_logo { /* \u70ED\u95E8\u5427\u56FE\u7247 */ border: none; border-radius: 16px; background: none; } /* \u52A8\u6001 */ .page-container .r-left-sec, .sub_nav_wrap, .title-tag-wraper, .thread-name-wraper, .n_reply { width: 780px; } .n_txt { /* \u52A8\u6001\u6B63\u6587 */ width: 720px; color: var(--light-fore); } .sub_nav_wrap { /* \u52A8\u6001\u5207\u6362 */ background: none; background-color: var(--default-background); box-shadow: none; } .sub_nav_list a.cur { /* \u5F53\u524D\u6807\u7B7E */ border: none; color: var(--tieba-theme-color); } .sub_nav_list .nav_hover { width: 56px !important; } .sub_nav_list .nav_hover { /* \u6807\u7B7E\u8272\u5757 */ border-bottom: 3px solid var(--tieba-theme-color); } .sub_nav_list li.sub_nav_line { /* \u6807\u7B7E\u5206\u9694\u7B26 */ background: none; } /* \u53F3\u4FA7\u60AC\u505C */ .page-container .r-right-sec { display: none; } .item_hd { /* \u201C\u8D34\u5427\u70ED\u8BAE\u699C\u201D\u6807\u9898 */ border: none; border-radius: 24px; background-color: var(--default-background); color: var(--default-fore); } .item_hd .title { color: var(--default-fore); } .topic_list .topic_item .topic_flag_hot { /* \u70ED\u70B9\u6570\u5B57\u7F16\u53F7 */ border-radius: 4px; } .item .item_hd { /* \u516C\u544A\u677F\u6807\u9898 */ border: none; background-color: var(--default-background); color: var(--default-fore); } .item .item_hd .title { color: var(--default-fore); } .notice-wrap-fixed { /* \u516C\u544A\u677F\u60AC\u505C */ background-color: var(--default-color); border-bottom-left-radius: 24px; border-bottom-right-radius: 24px; } .notice, .notice img { /* \u516C\u544A\u677F\u56FE\u7247 */ border-radius: 24px; } /* \u52A8\u6001\u5185\u5BB9 */ .new_list .title { /* \u8D34\u5B50\u6807\u9898 */ color: var(--tieba-theme-color); } .new_list .title:hover { color: var(--tieba-theme-color); -webkit-text-decoration: underline; text-decoration: underline; } .title-tag-wraper a { /* \u52A8\u6001\u8D34\u5427\u540D */ padding: 4px 10px; border-radius: 24px; background-color: var(--light-background); color: var(--light-fore); font-size: 12px; } .title-tag-wraper a:hover { color: var(--light-fore); -webkit-text-decoration: none; text-decoration: none; } .list-post-num { /* \u8D34\u5B50\u56DE\u590D\u6570 */ top: 0; padding: 4px 10px; border: none; border-radius: 16px; background-color: var(--tieba-theme-background); color: var(--tieba-theme-fore); } .list-triangle-border, .list-triangle-body { /* \u8D34\u5B50\u56DE\u590D\u6570\u4E09\u89D2 */ display: none; } .new_list .post_author { /* \u4F5C\u8005 */ padding: 0; margin-bottom: 24px; background: none; color: var(--default-fore); -webkit-text-decoration: none; text-decoration: none; } .new_list .time { /* \u65F6\u95F4 */ padding: 0; background: none; } .topic-tag { /* \u52A8\u6001\u8BDD\u9898 */ display: none; } .n_img img { /* \u52A8\u6001\u56FE\u7247 */ border: none; border-radius: 16px; cursor: pointer; } .n_img li { border-radius: 16px; } .n_img li .feed_highlight { /* \u56FE\u7247\u653E\u5927 */ background: none; cursor: pointer; } .media_box { /* \u56FE\u7247\u63A7\u4EF6 */ border: none; border-radius: 16px; background-color: var(--light-background); } .media_box img { border-radius: 16px; cursor: pointer; } .ui_btn { /* \u201C\u8FDB\u5165\u8D34\u5B50\u201D\u6309\u94AE */ border: none; border-radius: 24px; background: none; background-color: var(--tieba-theme-color); color: var(--default-background); } .ui_btn:hover { -webkit-text-decoration: none !important; text-decoration: none !important; } .ui_btn:hover { background: none; background-color: var(--tieba-theme-color); box-shadow: 0 0 10px var(--tieba-theme-color); color: var(--default-background); } .btn_more { /* \u66F4\u591A\u6309\u94AE */ width: 200px; height: auto; height: initial; border-radius: 24px; background: none; background-color: var(--tieba-theme-background); } .btn_more:hover, .data_error_bar a:hover, .btn_more a:hover { background: none !important; background-color: var(--tieba-theme-color) !important; color: var(--default-background) !important; } .data_error_bar a, .btn_more a { border: none; color: var(--tieba-theme-fore); } /* \u9875\u811A */ .bottom-bg { background: none; } .footer { border-top: 1px solid var(--light-background); background-color: var(--light-background); } /* \u65E0\u5173\u5185\u5BB9 */ .f-d-w, .left-cont-wraper .ufw-gap { display: none; } /* \u5E95\u90E8\u52A0\u8F7D gif */ #data_loading img { display: none; } @keyframes kf-fade-in { 0% { opacity: 0; } 100% { opacity: 1; } } @keyframes kf-fade-out { 0% { opacity: 1; } 100% { opacity: 0; } } @keyframes kf-dialog-in { 0% { opacity: 0; transform: scale(1.2); } 100% { opacity: 1; transform: scale(1); } } @keyframes kf-zoom-in { 0% { transform: scale(0.72); } 100% { transform: scale(1); } } @keyframes kf-fade-zoom-in { 0% { opacity: 0; transform: scale(0.72); } 100% { opacity: 1; transform: scale(1); } } html { padding: 0; margin: 0; text-align: justify; } body { overflow-x: hidden; overflow-y: scroll; overflow: hidden scroll; padding: 0; margin: 0; font-family: var(--code-zh); } body[no-scrollbar] { overflow: hidden; } div, p { margin: 0; } select { padding: 1px 8px; border: 1px solid var(--border-color); border-radius: 8px; cursor: pointer; } option { cursor: pointer; } option:checked { background-color: var(--tieba-theme-color); color: var(--default-background); } a { color: inherit; -webkit-text-decoration: none; text-decoration: none; word-break: break-all; } .dialogJ { position: fixed !important; top: 50% !important; left: 50% !important; } .dialogJ { transform: translate(-50%, -50%); } .tbui_aside_float_bar li a { font-family: "Material Symbols", monospace !important; } .tbui_aside_float_bar li a { font-variation-settings: "FILL" 0, "wght" 400, "GRAD" 0, "opsz" 40; -webkit-user-select: none; -moz-user-select: none; user-select: none; } /* \u52A8\u753B */ /* \u6DE1\u5165\u52A8\u753B */ @keyframes animation-fade-in { 0% { opacity: 0; } 100% { opacity: 1; } } .fade-in-elem { animation: animation-fade-in ease 0.3s forwards; } #com_userbar { display: none; } /* \u529F\u80FD\u6309\u94AE */ .tbui_aside_float_bar { border: none !important; background: none !important; } .tbui_aside_float_bar li { width: 40px; height: 40px; border-radius: 24px; margin: 8px 0; background-color: var(--light-background); } .tbui_aside_float_bar li:hover { background-color: var(--default-hover); } .tbui_aside_float_bar li:active { background-color: var(--default-active); } .tbui_aside_float_bar li a { width: 40px !important; height: 40px !important; background: none !important; } .tbui_aside_float_bar li a { border-radius: 24px; } .tbui_aside_float_bar a { width: 40px !important; height: 40px !important; } .tbui_aside_float_bar a { /* \u529F\u80FD\u6309\u94AE svg \u5BB9\u5668 */ color: var(--minimal-fore); font-size: 24px; line-height: 40px; text-align: center; /* background-size: 20px; background-repeat: no-repeat; background-position: center; filter: drop-shadow(var(--minimal-fore) 0 -9999px); transform: translateY(9999px); */ } /* .tbui_aside_float_bar a:hover { color: var(--default-background); filter: drop-shadow(var(--default-fore) 0 -9999px); } */ .tbui_aside_float_bar .tbui_fbar_auxiliaryCare a { height: 40px !important; background: none !important; } .tbui_aside_float_bar .tbui_fbar_auxiliaryCare a { /* \u65E0\u969C\u788D\u6A21\u5F0F */ } .tbui_fbar_auxiliaryCare a::after { content: "accessibility_new"; /* background-image: var(--svg-accessibility); */ } .tbui_fbar_top a::after { /* \u56DE\u5230\u9876\u90E8 */ /* color: var(--tieba-theme-fore); */ content: "arrow_upward"; /* background-image: var(--svg-arrow-up); filter: drop-shadow(var(--tieba-theme-fore) 0 -9999px); */ } /* .tbui_aside_float_bar .tbui_fbar_top a { background-color: var(--tieba-theme-background) !important; } */ /* .tbui_fbar_top a:hover::after { color: var(--default-background); } */ .tbui_fbar_post a::after { /* \u56DE\u8D34 */ /* color: var(--default-background); */ content: "chat"; font-size: 22px; /* vertical-align: bottom; */ /* background-image: var(--svg-message); filter: drop-shadow(var(--default-background) 0 -9999px); */ } /* .tbui_aside_float_bar .tbui_fbar_post a, .tbui_aside_float_bar .tbui_fbar_post a:hover { background-color: var(--tieba-theme-color) !important; } */ .tbui_fbar_feedback a::after { /* \u53CD\u9988 */ content: "report"; font-size: 26px; /* background-image: var(--svg-infomation-outline); background-size: 24px; */ } .tbui_aside_float_bar li.tbui_fbar_feedback a { background: none !important; } .tbui_aside_float_bar li.tbui_fbar_feedback a { /* \u90E8\u5206\u5427\u53CD\u9988 */ } .tbui_aside_float_bar .tbui_fbar_feedback a, .tbui_aside_float_bar .tbui_fbar_feedback a:hover { background: none !important; } .tbui_aside_float_bar .tbui_fbar_down, .tbui_aside_float_bar .tbui_fbar_props, .tbui_aside_float_bar .tbui_fbar_tsukkomi, .tbui_aside_float_bar .tbui_fbar_share, .tbui_aside_float_bar .tbui_fbar_favor, .tbui_aside_float_bar .tbui_fbar_refresh { display: none; } /* \u56FE\u7247\u7F29\u653E\u63A7\u4EF6 */ .p_tools a { padding: 0 10px; background: none; vertical-align: bottom; } .p_tools span { /* \u5206\u9694\u7EBF */ display: none; } .p_tools .p_putup::before, .p_tools .tb_icon_ypic::before, .p_tools .tb_icon_turnleft::before, .p_tools .tb_icon_turnright::before { margin-right: 4px; font-family: "Material Symbols", system-ui, -apple-system, Segoe UI, Roboto, Ubuntu, Cantarell, Noto Sans, sans-serif; font-size: 14px; vertical-align: bottom; } .p_tools .p_putup::before { /* \u6536\u8D77 */ content: "zoom_out"; } .p_tools .tb_icon_ypic::before { /* \u67E5\u770B\u5927\u56FE */ content: "zoom_out_map"; } .p_tools .tb_icon_turnleft::before { /* \u5DE6\u8F6C */ content: "turn_left"; } .p_tools .tb_icon_turnright::before { /* \u53F3\u8F6C */ content: "turn_right"; } .d_name a:hover, #container .content a.at:hover { -webkit-text-decoration: none; text-decoration: none; } .l_reply_num { color: inherit !important; } .l_reply_num { /* \u56DE\u5E16\u4FE1\u606F */ } #j_navtab_game, .nav_list .more-config-navtab { /* \u6E38\u620F tab */ display: none; } #j_navtab_wanle { /* \u73A9\u4E50 tab */ display: none; } .nav_wrap_add_border { border: none; } #head { /* \u80CC\u666F */ background: none; background-color: transparent; } /* \u5185\u5BB9 */ #container .content { border-radius: 24px; background: transparent none repeat 0 0 / auto auto padding-box border-box scroll; background: initial; } .card_top_wrap { background: none !important; background-color: var(--elem-color) !important; } .card_top_wrap { border-radius: 24px 24px 0 0; } .card_top_theme2 { border: none; margin-right: 0; } /* \u53BB\u9664\u65E0\u5173\u5185\u5BB9 */ #novel-ranking .novel-ranking-frs-body, .novel-award-aside { /* \u5C0F\u8BF4\u4EBA\u6C14\u699C\u76F8\u5173 */ display: none; } /* \u5427\u56FE\u6807 */ .card_head, .plat_head_theme2 .plat_picbox { top: -32px !important; width: 64px !important; height: 64px !important; padding: 0 !important; padding: initial !important; border: 4px solid var(--border-color) !important; border-radius: 24px !important; background: none !important; } .card_head, .plat_head_theme2 .plat_picbox { overflow: hidden; } .card_head_img, .plat_head_theme2 .plat_picbox img { width: 64px !important; height: 64px !important; } /* \u5427\u540D */ .card_title, .plat_title_h3 { margin: 5px 20px 0; } .card_top_theme2 .card_title_fname, .plat_title_h3, .plat_title_h3:hover, .plat_title_h3:visited { color: var(--highlight-fore); } .islike_focus { margin-top: 4px !important; } .islike_focus { /* \u5173\u6CE8\u5427\u6309\u94AE */ border-radius: 24px; background: none; background-color: var(--tieba-theme-color); color: var(--elem-color); font-size: 14px; line-height: 28px; text-align: center; } .islike_focus::after { content: "\u5173\u6CE8"; } .cancel_focus { /* \u53D6\u5173\u5427\u6309\u94AE */ width: 72px; border: 2px solid var(--trans-tieba-theme-color); border-radius: 24px; background: none; background-color: var(--tieba-theme-background); color: var(--tieba-theme-fore); font-size: 14px; line-height: 28px; text-align: center; } .cancel_focus::after { content: "\u5DF2\u5173\u6CE8"; } .card_top_right { /* \u7B7E\u5230\u6309\u94AE container */ margin-top: 20px; } .sign_box_bright { width: 140px !important; height: 40px !important; } .sign_box_bright { /* \u7B7E\u5230\u6309\u94AE */ border: 2px solid var(--trans-tieba-theme-color); border-radius: 24px; background: none; background-color: var(--tieba-theme-color); color: var(--default-background); font-size: 18px; line-height: 40px; text-align: center; } .sign_btn_bright::before { color: var(--elem-color); content: "\u7B7E\u5230"; } .sign_box_bright_signed { /* \u7B7E\u5230\u6309\u94AE\uFF1A\u5DF2\u7B7E\u5230 */ background-color: var(--tieba-theme-background); text-align: inherit; } .sign_today_date, .sign_month_lack_days { /* \u7B7E\u5230\u65E5\u671F\u7B49 */ display: none; } .sign_keep_span { width: 140px !important; } .sign_keep_span { height: 40px; } .sign_keep_span, .sign_mod_bright .sign_keep_span { /* \u5DF2\u7B7E\u5230\u6309\u94AE\u6587\u672C */ margin: 0; margin: initial; color: var(--tieba-theme-fore); font-size: 12px; text-align: center; } .sign_box_bright_signed::before { content: none !important; } .sign_mod_bright .sign_keep_span::before { content: "\u5DF2\u7B7E\u5230 | "; } .jump_input_bright { padding: 0 10px; /* \u8DF3\u9875\u6587\u672C\u6846 */ border-color: var(--border-color); border-radius: 16px; } /* \u6807\u9898 */ .left_section { background: none; } .core_title_wrap_bright { /* \u6807\u9898\u680F */ border-color: var(--border-color); -webkit-backdrop-filter: blur(24px); backdrop-filter: blur(24px); background-color: var(--trans-default-background); } .core_title_theme_bright, .core_title_absolute_bright .core_title_theme_bright { /* \u90E8\u5206\u5427\u6807\u9898\u680F */ border-color: var(--border-color); background: none; } .left_section .core_title_absolute_bright { -webkit-backdrop-filter: blur(24px); backdrop-filter: blur(24px); background-color: var(--trans-default-background); } .core_title_txt { /* \u6807\u9898\u6587\u5B57 */ margin-left: 24px; background: none; } .tittle_fill_dom.filled { background-color: var(--default-background); } .core_title h1 { /* \u90E8\u5206\u5427\u6807\u9898 */ margin-left: 0; color: var(--highlight-fore); } .nav_wrap { background-image: none !important; } .nav_wrap { border-color: var(--border-color); background-color: var(--light-background); /* \u5BFC\u822A */ } .nav_list a.nav_icon, .nav_list .tbnav_arrow { /* \u90E8\u5206\u5427\u5BFC\u822A\u680F */ padding-left: 22px; background: transparent none repeat 0 0 / auto auto padding-box border-box scroll; background: initial; } .nav_wrap, .nav_list .space, .nav_list .focus, .nav_list li:hover, .nav_list li:hover .tbnav_tab_inner, .nav_list .focus .tbnav_tab_inner { background: transparent none repeat 0 0 / auto auto padding-box border-box scroll; background: initial; } .nav_list a { color: var(--default-fore); } span.tP { color: var(--highlight-fore) !important; } span.tP { /* \u5F3A\u8C03\u5B57 */ } .thread_theme_5 { /* \u8DF3\u9875 */ width: auto; width: initial; border-color: var(--border-color); border-right: none; border-left: none; background-color: var(--light-background); } .btn_sub, .btn-sub, .btn-sub-b, .core_title_btns li a, .p_favthr_main { border: none; border-radius: 8px; /* \u90E8\u5206\u6309\u94AE */ background: none; background-color: var(--tieba-theme-background); color: var(--tieba-theme-fore); } .btn_sub:hover, .btn-sub:hover, .btn-sub-b:hover, .btn_sub:active, .btn-sub:active, .btn-sub-b:active, .btn_sub:focus, .btn-sub:focus, .btn-sub-b:focus { background-color: var(--tieba-theme-color); color: var(--default-background); } .l_lzonly:hover, .p_favthr_main:hover { background-color: var(--tieba-theme-color) !important; color: var(--default-background) !important; } .l_lzonly:hover, .p_favthr_main:hover { /* \u90E8\u5206\u5427\u6309\u94AE hover */ } #quick_reply { /* \u56DE\u590D\u6309\u94AE */ display: none; } .d_lzonly_bdaside, .p_favthr_main p, .j_quick_reply, .j_lzl_p a { /* \u90E8\u5206\u5427\u6309\u94AE\u5B57\u4F53 */ color: inherit; } .j_quick_reply { /* \u90E8\u5206\u5427\u989D\u5934 */ padding-left: 0; padding-left: initial; } /* \u5DE6\u4FA7\u7528\u6237\u4FE1\u606F */ .l_post_bright { width: auto !important; width: initial !important; border-color: var(--border-color) !important; background: none !important; } .p_author_face { border: none !important; background: none !important; } .icon_relative img { /* \u5C42\u4E3B\u5934\u50CF */ border-radius: 16px; } .d_name .p_author_name { /* \u5C42\u4E3B\u540D */ color: var(--tieba-theme-fore); } .novel-level-icon { /* \u5C0F\u8BF4\u7B49\u7EA7\u56FE\u6807 */ display: none; } .d_badge_bright, .user_level .badge { /* \u7B49\u7EA7\u5934\u8854 */ border: 1px solid var(--border-color); border-radius: 24px; background-color: var(--light-background); } .user_level .badge_name { /* \u7B49\u7EA7\u5934\u8854\u6587\u672C */ color: inherit; } .d_badge_bright .d_badge_title { padding-left: 4px; color: var(--default-fore); } .d_badge_bright .d_badge_lv, .user_level .badge_index { background-image: none !important; } .d_badge_bright .d_badge_lv, .user_level .badge_index { /* \u7B49\u7EA7\u56FE\u6807 */ background-color: var(--tieba-theme-background); color: var(--tieba-theme-fore); } .d_badge_lv, .user_level .badge_index { top: auto !important; top: initial !important; left: 60px !important; width: auto !important; width: initial !important; height: 8px !important; padding: 0 4px !important; margin: 12px 4px !important; font-family: inherit !important; line-height: 2px !important; } .d_badge_lv, .user_level .badge_index { border-radius: 16px; font-size: 14px; font-style: italic; } .d_badge_icon1 .d_badge_lv, .tieba-lvl-green { background-color: var(--level-green-background) !important; color: var(--level-green-fore) !important; } .d_badge_icon1 .d_badge_lv, .tieba-lvl-green { /* \u7EFF\u724C */ } .d_badge_icon2 .d_badge_lv, .d_badge_icon2_1 .d_badge_lv, .d_badge_icon2_2 .d_badge_lv, .tieba-lvl-blue { background-color: var(--level-blue-background) !important; color: var(--level-blue-fore) !important; } .d_badge_icon2 .d_badge_lv, .d_badge_icon2_1 .d_badge_lv, .d_badge_icon2_2 .d_badge_lv, .tieba-lvl-blue { /* \u84DD\u724C */ } .d_badge_icon3 .d_badge_lv, .d_badge_icon3_1 .d_badge_lv, .d_badge_icon3_2 .d_badge_lv, .tieba-lvl-yellow { background-color: var(--level-yellow-background) !important; color: var(--level-yellow-fore) !important; } .d_badge_icon3 .d_badge_lv, .d_badge_icon3_1 .d_badge_lv, .d_badge_icon3_2 .d_badge_lv, .tieba-lvl-yellow { /* \u9EC4\u724C */ } .d_badge_icon4 .d_badge_lv, .d_badge_icon4_1 .d_badge_lv, .d_badge_icon4_2 .d_badge_lv, .tieba-lvl-orange { background-color: var(--level-orange-background) !important; color: var(--level-orange-fore) !important; } .d_badge_icon4 .d_badge_lv, .d_badge_icon4_1 .d_badge_lv, .d_badge_icon4_2 .d_badge_lv, .tieba-lvl-orange { /* \u6A59\u724C */ } .d_badge_bawu1 .d_badge_lv, .d_badge_bawu2 .d_badge_lv { text-indent: inherit !important; } .d_badge_bawu1 .d_badge_lv, .d_badge_bawu2 .d_badge_lv { /* \u5427\u52A1 */ } .d_author .d_pb_icons { /* \u5370\u8BB0 */ display: none; } .icon_book_link_icon { /* \u67E5\u770B\u6211\u7684\u5370\u8BB0 */ display: none; } .region_bright { /* \u53F3\u4FA7\u4FE1\u606F */ border: none; margin-top: 12px; background: none; background-color: var(--elem-color); } .region_bright .region_title { color: var(--default-fore) !important; } #celebrity { display: none; } .balv_mod .media_left, .balv_mod .media-left { /* \u6211\u7684\u5934\u50CF */ border: none; } .right_section .tieba_notice { /* \u53F3\u4FA7\u53CD\u9988 */ background: none; } .topic_list_box { /* \u53F3\u4FA7\u8D34\u5427\u70ED\u8BAE\u699C */ display: none; background-color: var(--default-background); } .pb_content { /* \u5BB9\u5668\uFF1A\u53F3\u4FA7\u5269\u4F59\u90E8\u5206 */ border: none; background: none; background-color: var(--elem-color); } .notice-icon, .right_section .tieba_notice { padding-left: 0 !important; padding-left: initial !important; background: none !important; } .notice-icon, .right_section .tieba_notice { /* \u53F3\u4FA7\u53CD\u9988 */ } .tieba_notice li { background: none; } /* \u6B63\u6587 */ .p_content { border: none; background-color: var(--default-background); } .forbid-speech-banner { /* \u697C\u4E3B\u5C4F\u853D */ border-top: none; } .BDE_Image { /* \u6B63\u6587\u56FE\u7247 */ border-radius: 24px; } .BDE_Image:first-child { margin-top: 8px; } .share_btn_wrapper { /* \u5206\u4EAB\u63A7\u4EF6 */ display: none; } .post-tail-wrap .icon-jubao { /* \u697C\u5C42\u4E3E\u62A5 */ display: none; } .post-tail-wrap .icon-jubao::after { content: "\u4E3E\u62A5"; } .post-tail-wrap .tail-info { /* \u697C\u5C42\u8D85\u94FE\u63A5 */ color: var(--minimal-fore); } .j_jb_ele .tail-info { color: var(--tieba-theme-fore) !important; } .j_jb_ele .tail-info { /* \u4E3E\u62A5\u8D85\u94FE\u63A5 */ } .complaint { color: var(--tieba-theme-fore) !important; } .complaint { /* \u90E8\u5206\u5427\u697C\u5C42\u4E3E\u62A5 */ padding-right: 4px; background: none; } .complaint::after { content: "\u4E3E\u62A5"; } .post-tail-wrap .question-image:hover::before { /* IP\u5C5E\u5730\u8BF4\u660E */ border-color: var(--border-color); border-radius: 8px; background-color: var(--light-background); color: var(--default-fore); } .post_bubble_top, .post_bubble_bottom { /* \u7279\u6B8A\u6C14\u6CE1 */ display: none; } .post_bubble_middle { background: none !important; } .post_bubble_middle { width: auto; width: initial; padding: 0; padding: initial; } .save_face_bg_2 { /* \u4F1A\u5458\u53F3\u4E0A\u89D2\u6807\u8BB0 */ display: none; } .replace_div .replace_tip { /* \u5C55\u5F00\u56FE\u7247 */ border-color: var(--border-color); background-color: var(--elem-color); } .achievement_medal_section { /* \u6210\u5C31\u5FBD\u7AE0 */ display: none; } .l_post_bright .d_post_content_main .d_sign_split { /* \u7B7E\u540D\u6863\u5206\u5272\u7EBF */ border-bottom: 1px solid var(--border-color); } /* \u56DE\u590D */ .d_post_content_main { background-color: var(--default-background) !important; } .lzl_p_p { /* \u56DE\u590D\u5934\u50CF\u8FB9\u6846 */ border: none; } .lzl_p_p img { /* \u56DE\u590D\u5934\u50CF */ border-radius: 8px; } .core_reply_wrapper { border: 1px solid var(--border-color) !important; border-radius: 16px !important; margin-bottom: 16px !important; background: none !important; background-color: var(--very-light-background) !important; color: var(--default-fore) !important; } .core_reply_wrapper { /* \u56DE\u590D */ /* border-top-right-radius: 0 !important; */ } .core_reply_content li { border-top: 0; border-top: initial; } .core_reply_content li.first_no_border { margin-top: 6px; } .lzl_content_main { /* \u56DE\u590D\u6587\u5B57 */ color: var(--default-fore); } .l_post_bright .core_reply_wrapper .core_reply_border_top, .core_reply_border_bottom, .l_post_bright .core_reply_wrapper .core_reply_content { border: none; background: none; } .lzl_link_fold { display: none !important; border: 1px solid var(--border-color) !important; border-bottom: none !important; background-color: var(--very-light-background) !important; } .lzl_link_fold { /* \u6536\u8D77\u56DE\u590D */ border-radius: 8px 8px 0 0; color: var(--tieba-theme-fore); } .core_reply div.hideLzl { /* \u52A0\u8F7D\u56DE\u590D */ background: none; background-color: var(--very-light-background); } .core_reply_wrapper .loading_reply { /* \u52A0\u8F7D\u52A8\u753B */ display: none; } .lzl_cnt .lzl_s_r { /* \u56DE\u590D\u8D85\u94FE\u63A5 */ color: var(--tieba-theme-fore); } .lzl_li_pager_s .lzl_more, .lzl_more span { /* \u8FD8\u6709x\u6761\u56DE\u590D */ color: var(--light-fore); } .j_lzl_m { /* \u70B9\u51FB\u67E5\u770B */ color: var(--tieba-theme-fore); } .lzl_cnt .lzl_time { color: var(--minimal-fore); } .lzl_jb_in, .user-jubao-button { /* \u697C\u4E2D\u697C\u4E3E\u62A5 */ background: none; color: var(--tieba-theme-fore); } .lzl_jb_in::after, .user-jubao-button::after { content: "\u4E3E\u62A5"; } .lzl_cnt .lzl_content_main { display: block; } /* .core_reply .hideLzl { opacity: 0; height: 0; } .core_reply div:not(.hideLzl) { opacity: 1; height: unset; } */ /* \u8D34\u5B50\u5185\u5BB9\u8D85\u94FE\u63A5 */ .d_post_content a, .lzl_cnt .lzl_content_main a:not(.at) { margin: auto 2px; color: var(--tieba-theme-fore); /* text-decoration: underline 1.2px; */ transition: 0.4s; } /* .d_post_content a:hover, .d_post_content a:focus, .lzl_cnt .lzl_content_main a:not(.at):hover, .lzl_cnt .lzl_content_main a:not(.at):focus { background-color: var(--trans-light-background); text-decoration: none; } */ .pager_theme_5 a, .pager_theme_5 span, .jump_btn_bright { /* \u8DF3\u9875\u6309\u94AE */ border-color: var(--default-background); border-radius: 8px; background: none; background-color: var(--default-background); color: var(--minimal-fore); } .pager_theme_5 a:hover, .jump_btn_bright:hover { border-color: var(--tieba-theme-color); background-color: var(--tieba-theme-color); color: var(--default-background); } /* \u5E95\u90E8 */ .thread_theme_7 { /* \u9876\u680F */ width: auto; width: initial; border-color: var(--border-color); background-color: var(--light-background); } #pb-footer-header { background-color: var(--default-background); } #tb_rich_poster_container { /* \u5185\u5BB9 */ width: auto; width: initial; border-radius: 24px; background-color: var(--default-background); } .poster_head_text a.cur { color: var(--highlight-fore) !important; } .edui-editor-body { border-color: var(--border-color) !important; } .edui-editor-body { /* \u6587\u672C\u6846 */ border-radius: 16px; background: none; } .edui-container .edui-editor-body.body-container-focus, .edui-container .edui-editor-body.body-container-focus .edui-body-container { border-color: var(--tieba-theme-color) !important; } .old_style_wrapper { border-color: var(--border-color); border-radius: 24px; background-color: var(--elem-color); } .edui-editor-body .edui-body-container { width: auto !important; width: initial !important; } .edui-editor-body .edui-body-container { /* \u5168\u90E8\u6587\u672C\u6846 */ border-radius: 16px; background: var(--default-background); } .edui-toolbar .edui-btn-toolbar, .edui-container .edui-toolbar { margin-top: 4px; /* \u5DE5\u5177\u680F */ background-color: var(--elem-color); } .pb_footer { width: auto; width: initial; border: none; border-color: var(--border-color); background: none; } .save-to-quick-reply-btn { /* \u201C\u4FDD\u5B58\u81F3\u5FEB\u901F\u56DE\u8D34\u201D\u6309\u94AE */ border-color: var(--border-color); background: none; background-color: var(--light-background); color: inherit; } .save-to-quick-reply-btn span { color: var(--tieba-theme-fore); } .footer { display: none; } .skin_normal .wrap2 { background: none; background-color: var(--page-background); } #lcsas-container { display: none; } /* TODO: \u9690\u85CF\u7528\u62373\u5929 */ .user-hide-post-down, .user-hide-post-up { background-color: var(--light-fore); background-position: center; background-repeat: no-repeat; background-size: 16px; -webkit-mask: var(--svg-arrow-down-circle); mask: var(--svg-arrow-down-circle); /* filter: drop-shadow(var(--minimal-fore) 0 -9999px); transform: translateY(9999px); */ opacity: 0; } /* \u9009\u62E9\u641C\u7D22 */ #selectsearch-icon { display: none; } /* TODO: \u7528\u6237\u5361\u7247 */ .ui_card_wrap { background: none; } .ui_card_content { border-color: var(--border-color); border-radius: 16px; background: none; box-shadow: 0 0 20px rgba(0, 0, 0, 0.2); } .card_userinfo_wrap { background: none; background-color: var(--default-background); } .card_userinfo_left .userinfo_head { /* \u5934\u50CF\u8FB9\u6846 */ background: none; } .j_avatar img { width: 92px; height: 92px; border: 4px solid var(--border-color); border-radius: 24px; -webkit-backdrop-filter: blur(24px); backdrop-filter: blur(24px); } .card_userinfo_middle .userinfo_sex { background: none; } .userinfo_sex_male::after { content: "\u2642"; } .userinfo_sex_female::after { content: "\u2640"; } .ui_card_wrap .ui_white_down, .ui_card_wrap .ui_white_up { /* \u4E09\u89D2 */ display: none; } .card_userinfo_guide { /* \u53F3\u4E0A\u89D2 */ display: none; } .user_card_loading { /* \u52A0\u8F7D */ background-color: var(--default-background); } .user_card_loading img { display: none; } /* TODO: \u7B2C\u4E09\u65B9\u5185\u5BB9\u5427\u9002\u914D */ /* \u7531\u7B2C\u4E09\u65B9\u63D0\u4F9B\u7684\u5427 */ /* \u8FDB\u5427\u5BFC\u822A */ .plat_head_theme2, .plat_header { border: none; background-color: transparent; background-color: initial; }html.dark{color-scheme:dark;--el-color-primary:#409eff;--el-color-primary-light-3:#3375b9;--el-color-primary-light-5:#2a598a;--el-color-primary-light-7:#213d5b;--el-color-primary-light-8:#1d3043;--el-color-primary-light-9:#18222c;--el-color-primary-dark-2:#66b1ff;--el-color-success:#67c23a;--el-color-success-light-3:#4e8e2f;--el-color-success-light-5:#3e6b27;--el-color-success-light-7:#2d481f;--el-color-success-light-8:#25371c;--el-color-success-light-9:#1c2518;--el-color-success-dark-2:#85ce61;--el-color-warning:#e6a23c;--el-color-warning-light-3:#a77730;--el-color-warning-light-5:#7d5b28;--el-color-warning-light-7:#533f20;--el-color-warning-light-8:#3e301c;--el-color-warning-light-9:#292218;--el-color-warning-dark-2:#ebb563;--el-color-danger:#f56c6c;--el-color-danger-light-3:#b25252;--el-color-danger-light-5:#854040;--el-color-danger-light-7:#582e2e;--el-color-danger-light-8:#412626;--el-color-danger-light-9:#2b1d1d;--el-color-danger-dark-2:#f78989;--el-color-error:#f56c6c;--el-color-error-light-3:#b25252;--el-color-error-light-5:#854040;--el-color-error-light-7:#582e2e;--el-color-error-light-8:#412626;--el-color-error-light-9:#2b1d1d;--el-color-error-dark-2:#f78989;--el-color-info:#909399;--el-color-info-light-3:#6b6d71;--el-color-info-light-5:#525457;--el-color-info-light-7:#393a3c;--el-color-info-light-8:#2d2d2f;--el-color-info-light-9:#202121;--el-color-info-dark-2:#a6a9ad;--el-box-shadow:0px 12px 32px 4px rgba(0, 0, 0, 0.36),0px 8px 20px rgba(0, 0, 0, 0.72);--el-box-shadow-light:0px 0px 12px rgba(0, 0, 0, 0.72);--el-box-shadow-lighter:0px 0px 6px rgba(0, 0, 0, 0.72);--el-box-shadow-dark:0px 16px 48px 16px rgba(0, 0, 0, 0.72),0px 12px 32px #000000,0px 8px 16px -8px #000000;--el-bg-color-page:#0a0a0a;--el-bg-color:#141414;--el-bg-color-overlay:#1d1e1f;--el-text-color-primary:#E5EAF3;--el-text-color-regular:#CFD3DC;--el-text-color-secondary:#A3A6AD;--el-text-color-placeholder:#8D9095;--el-text-color-disabled:#6C6E72;--el-border-color-darker:#636466;--el-border-color-dark:#58585B;--el-border-color:#4C4D4F;--el-border-color-light:#414243;--el-border-color-lighter:#363637;--el-border-color-extra-light:#2B2B2C;--el-fill-color-darker:#424243;--el-fill-color-dark:#39393A;--el-fill-color:#303030;--el-fill-color-light:#262727;--el-fill-color-lighter:#1D1D1D;--el-fill-color-extra-light:#191919;--el-fill-color-blank:transparent;--el-mask-color:rgba(0, 0, 0, 0.8);--el-mask-color-extra-light:rgba(0, 0, 0, 0.3)}html.dark .el-button{--el-button-disabled-text-color:rgba(255, 255, 255, 0.5)}html.dark .el-card{--el-card-bg-color:var(--el-bg-color-overlay)}html.dark .el-empty{--el-empty-fill-color-0:var(--el-color-black);--el-empty-fill-color-1:#4b4b52;--el-empty-fill-color-2:#36383d;--el-empty-fill-color-3:#1e1e20;--el-empty-fill-color-4:#262629;--el-empty-fill-color-5:#202124;--el-empty-fill-color-6:#212224;--el-empty-fill-color-7:#1b1c1f;--el-empty-fill-color-8:#1c1d1f;--el-empty-fill-color-9:#18181a}@keyframes kf-fade-in-f9deea39 { 0% { opacity: 0; } 100% { opacity: 1; } } @keyframes kf-fade-out-f9deea39 { 0% { opacity: 1; } 100% { opacity: 0; } } @keyframes kf-dialog-in-f9deea39 { 0% { opacity: 0; transform: scale(1.2); } 100% { opacity: 1; transform: scale(1); } } @keyframes kf-zoom-in-f9deea39 { 0% { transform: scale(0.72); } 100% { transform: scale(1); } } @keyframes kf-fade-zoom-in-f9deea39 { 0% { opacity: 0; transform: scale(0.72); } 100% { opacity: 1; transform: scale(1); } } html[data-v-f9deea39] { padding: 0; margin: 0; text-align: justify; } body[data-v-f9deea39] { overflow-x: hidden; overflow-y: scroll; overflow: hidden scroll; padding: 0; margin: 0; font-family: var(--code-zh); } body[no-scrollbar][data-v-f9deea39] { overflow: hidden; } div[data-v-f9deea39], p[data-v-f9deea39] { margin: 0; } select[data-v-f9deea39] { padding: 1px 8px; border: 1px solid var(--border-color); border-radius: 8px; cursor: pointer; } option[data-v-f9deea39] { cursor: pointer; } option[data-v-f9deea39]:checked { background-color: var(--tieba-theme-color); color: var(--default-background); } a[data-v-f9deea39] { color: inherit; -webkit-text-decoration: none; text-decoration: none; word-break: break-all; } .dialogJ[data-v-f9deea39] { position: fixed !important; top: 50% !important; left: 50% !important; } .dialogJ[data-v-f9deea39] { transform: translate(-50%, -50%); } .dialog-wrapper[data-v-f9deea39] { position: fixed; z-index: 9999; top: 0; left: 0; display: flex; width: 100%; height: 100%; background-color: transparent; animation: kf-fade-in-f9deea39 0.2s; } .dialog-wrapper.darker[data-v-f9deea39] { background-color: rgba(0, 0, 0, 0.72); } html:not([perf-saver]) .blur-effect[data-v-f9deea39] { -webkit-backdrop-filter: blur(4px); backdrop-filter: blur(4px); } html.dark-theme .blur-effect[data-v-f9deea39] { -webkit-backdrop-filter: blur(4px) brightness(0.8); backdrop-filter: blur(4px) brightness(0.8); }@keyframes kf-fade-in-8df9d0bc { 0% { opacity: 0; } 100% { opacity: 1; } } @keyframes kf-fade-out-8df9d0bc { 0% { opacity: 1; } 100% { opacity: 0; } } @keyframes kf-dialog-in-8df9d0bc { 0% { opacity: 0; transform: scale(1.2); } 100% { opacity: 1; transform: scale(1); } } @keyframes kf-zoom-in-8df9d0bc { 0% { transform: scale(0.72); } 100% { transform: scale(1); } } @keyframes kf-fade-zoom-in-8df9d0bc { 0% { opacity: 0; transform: scale(0.72); } 100% { opacity: 1; transform: scale(1); } } html[data-v-8df9d0bc] { padding: 0; margin: 0; text-align: justify; } body[data-v-8df9d0bc] { overflow-x: hidden; overflow-y: scroll; overflow: hidden scroll; padding: 0; margin: 0; font-family: var(--code-zh); } body[no-scrollbar][data-v-8df9d0bc] { overflow: hidden; } div[data-v-8df9d0bc], p[data-v-8df9d0bc] { margin: 0; } select[data-v-8df9d0bc] { padding: 1px 8px; border: 1px solid var(--border-color); border-radius: 8px; cursor: pointer; } option[data-v-8df9d0bc] { cursor: pointer; } option[data-v-8df9d0bc]:checked { background-color: var(--tieba-theme-color); color: var(--default-background); } a[data-v-8df9d0bc] { color: inherit; -webkit-text-decoration: none; text-decoration: none; word-break: break-all; } .dialogJ[data-v-8df9d0bc] { position: fixed !important; top: 50% !important; left: 50% !important; } .dialogJ[data-v-8df9d0bc] { transform: translate(-50%, -50%); } .message-box[data-v-8df9d0bc] { display: flex; overflow: hidden; max-width: 60vw; max-height: 80vh; box-sizing: border-box; flex-direction: column; border: 1px solid var(--light-border-color); border-radius: 16px; margin: auto; animation: kf-dialog-in-8df9d0bc 0.4s ease; background-color: var(--default-background); box-shadow: 0 0 20px rgba(0, 0, 0, 0.3); font-size: 16px; transition: 0.4s ease; } .message-box .message-wrapper[data-v-8df9d0bc] { display: flex; overflow-x: hidden; overflow-y: auto; overflow: hidden auto; flex-direction: column; padding: 16px; } .message-box .message-wrapper .title[data-v-8df9d0bc] { margin-bottom: 8px; color: var(--highlight-fore); font-size: 20px; font-weight: bold; } .message-box .message-controls[data-v-8df9d0bc] { display: flex; padding: 16px; margin-top: auto; background-color: var(--deep-background); gap: 8px; } .message-box .message-controls .message-button[data-v-8df9d0bc] { flex-grow: 1; padding: 6px 16px; font-size: 14px; }@keyframes kf-fade-in { 0% { opacity: 0; } 100% { opacity: 1; } } @keyframes kf-fade-out { 0% { opacity: 1; } 100% { opacity: 0; } } @keyframes kf-dialog-in { 0% { opacity: 0; transform: scale(1.2); } 100% { opacity: 1; transform: scale(1); } } @keyframes kf-zoom-in { 0% { transform: scale(0.72); } 100% { transform: scale(1); } } @keyframes kf-fade-zoom-in { 0% { opacity: 0; transform: scale(0.72); } 100% { opacity: 1; transform: scale(1); } } html { padding: 0; margin: 0; text-align: justify; } body { overflow-x: hidden; overflow-y: scroll; overflow: hidden scroll; padding: 0; margin: 0; font-family: var(--code-zh); } body[no-scrollbar] { overflow: hidden; } div, p { margin: 0; } select { padding: 1px 8px; border: 1px solid var(--border-color); border-radius: 8px; cursor: pointer; } option { cursor: pointer; } option:checked { background-color: var(--tieba-theme-color); color: var(--default-background); } a { color: inherit; -webkit-text-decoration: none; text-decoration: none; word-break: break-all; } .dialogJ { position: fixed !important; top: 50% !important; left: 50% !important; } .dialogJ { transform: translate(-50%, -50%); } .block-panel { display: flex; min-width: 30px; height: 26px; align-items: center; justify-content: center; padding: 2px 8px; border-radius: 24px; margin: auto; background-color: var(--trans-light-background); font-size: 14px; text-align: center; } .block-panel .icon { color: var(--light-fore); font-size: 18px; } .block-panel .panel-button { border: none !important; } .block-panel .panel-button { width: 30px; height: 30px; padding: 4px; border-radius: 48px; } .block-panel.left-align { margin-left: 0; }@keyframes kf-fade-in-bedddce2 { 0% { opacity: 0; } 100% { opacity: 1; } } @keyframes kf-fade-out-bedddce2 { 0% { opacity: 1; } 100% { opacity: 0; } } @keyframes kf-dialog-in-bedddce2 { 0% { opacity: 0; transform: scale(1.2); } 100% { opacity: 1; transform: scale(1); } } @keyframes kf-zoom-in-bedddce2 { 0% { transform: scale(0.72); } 100% { transform: scale(1); } } @keyframes kf-fade-zoom-in-bedddce2 { 0% { opacity: 0; transform: scale(0.72); } 100% { opacity: 1; transform: scale(1); } } #header-progress[data-v-bedddce2] { position: fixed; z-index: 99999; top: 0; max-width: 100vw; height: 4px; background-color: var(--tieba-theme-color); transition: 0.4s; } #header-progress.complete[data-v-bedddce2] { animation: kf-fade-out-bedddce2 0.6s forwards; }.toggle-button[data-v-6728dba5] { color: var(--default-fore); } .toggle-button .icon[data-v-6728dba5], .toggle-button .outline-icon[data-v-6728dba5] { color: var(--minimal-fore); } .toggle-button.toggle-on[data-v-6728dba5] { background-color: var(--tieba-theme-color); color: var(--default-background); }@keyframes kf-fade-in-b1e43839 { 0% { opacity: 0; } 100% { opacity: 1; } } @keyframes kf-fade-out-b1e43839 { 0% { opacity: 1; } 100% { opacity: 0; } } @keyframes kf-dialog-in-b1e43839 { 0% { opacity: 0; transform: scale(1.2); } 100% { opacity: 1; transform: scale(1); } } @keyframes kf-zoom-in-b1e43839 { 0% { transform: scale(0.72); } 100% { transform: scale(1); } } @keyframes kf-fade-zoom-in-b1e43839 { 0% { opacity: 0; transform: scale(0.72); } 100% { opacity: 1; transform: scale(1); } } html[data-v-b1e43839] { padding: 0; margin: 0; text-align: justify; } body[data-v-b1e43839] { overflow-x: hidden; overflow-y: scroll; overflow: hidden scroll; padding: 0; margin: 0; font-family: var(--code-zh); } body[no-scrollbar][data-v-b1e43839] { overflow: hidden; } div[data-v-b1e43839], p[data-v-b1e43839] { margin: 0; } select[data-v-b1e43839] { padding: 1px 8px; border: 1px solid var(--border-color); border-radius: 8px; cursor: pointer; } option[data-v-b1e43839] { cursor: pointer; } option[data-v-b1e43839]:checked { background-color: var(--tieba-theme-color); color: var(--default-background); } a[data-v-b1e43839] { color: inherit; -webkit-text-decoration: none; text-decoration: none; word-break: break-all; } .dialogJ[data-v-b1e43839] { position: fixed !important; top: 50% !important; left: 50% !important; } .dialogJ[data-v-b1e43839] { transform: translate(-50%, -50%); } .images-viewer .head-controls .head-btn.toggle-on[data-v-b1e43839] { font-family: "Material Symbols", monospace !important; } .images-viewer .head-controls .head-btn.toggle-on[data-v-b1e43839] { font-variation-settings: "FILL" 1, "wght" 400, "GRAD" 0, "opsz" 40; -webkit-user-select: none; -moz-user-select: none; user-select: none; } .images-viewer[data-v-b1e43839] { display: flex; width: 100%; height: 100%; flex-direction: column; align-items: center; justify-content: center; transition: 0.4s; } .images-viewer .icon[data-v-b1e43839] { color: var(--light-fore); } .images-viewer .control-panel[data-v-b1e43839] { position: absolute; display: flex; align-items: center; padding: 10px; border: 1px solid var(--light-border-color); border-radius: 18px; background-color: var(--trans-default-background); box-shadow: 0 0 32px rgba(0, 0, 0, 0.4); } html:not([perf-saver]) .images-viewer .control-panel[data-v-b1e43839] { -webkit-backdrop-filter: blur(24px); backdrop-filter: blur(24px); } html.dark-theme .images-viewer .control-panel[data-v-b1e43839] { -webkit-backdrop-filter: blur(24px) brightness(0.8); backdrop-filter: blur(24px) brightness(0.8); } .images-viewer .head-controls[data-v-b1e43839] { top: 16px; margin-bottom: auto; transition: 0.4s; } .images-viewer .head-controls.hide[data-v-b1e43839] { box-shadow: none; transform: translateY(calc(-100% - 16px)); } .images-viewer .head-controls .head-btn[data-v-b1e43839] { width: 36px; height: 36px; padding: 0; border-radius: 12px; background-color: transparent; background-color: initial; box-shadow: none; font-size: 16px; } .images-viewer .head-controls .head-btn[data-v-b1e43839]:hover { background-color: var(--default-background); color: var(--tieba-theme-color); } .images-viewer .head-controls .head-btn.toggle-on[data-v-b1e43839] { background-color: var(--tieba-theme-color); color: var(--default-background); } .images-viewer .head-controls .head-btn.toggle-on[data-v-b1e43839]:hover { filter: brightness(1.2); } .images-viewer .head-controls .close[data-v-b1e43839]:hover { color: var(--error-color); } .images-viewer .head-controls span[data-v-b1e43839] { color: var(--minimal-fore); font-family: var(--code-monospace); } .images-viewer .head-controls .zoom-size[data-v-b1e43839] { padding: 10px; } .images-viewer .back[data-v-b1e43839], .images-viewer .forward[data-v-b1e43839] { height: 60px; box-shadow: 0 0 20px rgba(0, 0, 0, 0.1); font-size: large; } .images-viewer .back[data-v-b1e43839] { left: 32px; } .images-viewer .back.hide[data-v-b1e43839] { box-shadow: none; transform: translateX(calc(-100% - 32px)); } .images-viewer .forward[data-v-b1e43839] { right: 32px; } .images-viewer .forward.hide[data-v-b1e43839] { box-shadow: none; transform: translateX(calc(100% + 32px)); } .images-viewer .back[data-v-b1e43839]:hover, .images-viewer .forward[data-v-b1e43839]:hover { background-color: var(--default-background); } .images-viewer .back[data-v-b1e43839]:focus, .images-viewer .forward[data-v-b1e43839]:focus { box-shadow: 0 0 0 2px var(--tieba-theme-color); } .images-viewer .image-container[data-v-b1e43839] { display: flex; width: 100%; height: 100%; align-items: center; justify-content: center; } .images-viewer .image-container .curr-image[data-v-b1e43839] { position: absolute; -o-object-fit: contain; object-fit: contain; transition: var(--487af7f1); } .images-viewer .image-container .curr-image.changing[data-v-b1e43839] { display: none; transition: none; } .images-viewer .bottom-controls[data-v-b1e43839] { bottom: 16px; display: flex; margin-top: auto; gap: 4px; transition: 0.4s; } .images-viewer .bottom-controls.hide[data-v-b1e43839] { box-shadow: none; transform: translateY(calc(100% + 16px)); } .images-viewer .bottom-controls .bottom-btn[data-v-b1e43839] { overflow: hidden; width: 100px; height: 75px; padding: 0; border: none; border-radius: 10px; background-color: var(--trans-default-background); transition: all linear 0.1s; } .images-viewer .bottom-controls .bottom-btn .image-list[data-v-b1e43839] { width: 100%; height: 100%; -o-object-fit: cover; object-fit: cover; } .images-viewer .bottom-controls .bottom-btn.selected[data-v-b1e43839] { border: 3px solid var(--tieba-theme-color); }@keyframes kf-fade-in-b160e8b2 { 0% { opacity: 0; } 100% { opacity: 1; } } @keyframes kf-fade-out-b160e8b2 { 0% { opacity: 1; } 100% { opacity: 0; } } @keyframes kf-dialog-in-b160e8b2 { 0% { opacity: 0; transform: scale(1.2); } 100% { opacity: 1; transform: scale(1); } } @keyframes kf-zoom-in-b160e8b2 { 0% { transform: scale(0.72); } 100% { transform: scale(1); } } @keyframes kf-fade-zoom-in-b160e8b2 { 0% { opacity: 0; transform: scale(0.72); } 100% { opacity: 1; transform: scale(1); } } html[data-v-b160e8b2] { padding: 0; margin: 0; text-align: justify; } body[data-v-b160e8b2] { overflow-x: hidden; overflow-y: scroll; overflow: hidden scroll; padding: 0; margin: 0; font-family: var(--code-zh); } body[no-scrollbar][data-v-b160e8b2] { overflow: hidden; } div[data-v-b160e8b2], p[data-v-b160e8b2] { margin: 0; } select[data-v-b160e8b2] { padding: 1px 8px; border: 1px solid var(--border-color); border-radius: 8px; cursor: pointer; } option[data-v-b160e8b2] { cursor: pointer; } option[data-v-b160e8b2]:checked { background-color: var(--tieba-theme-color); color: var(--default-background); } a[data-v-b160e8b2] { color: inherit; -webkit-text-decoration: none; text-decoration: none; word-break: break-all; } .dialogJ[data-v-b160e8b2] { position: fixed !important; top: 50% !important; left: 50% !important; } .dialogJ[data-v-b160e8b2] { transform: translate(-50%, -50%); } .post-container .bottom-controls .replies[data-v-b160e8b2]::before { font-family: "Material Symbols", monospace !important; } .post-container .bottom-controls .replies[data-v-b160e8b2]::before { font-variation-settings: "FILL" 0, "wght" 400, "GRAD" 0, "opsz" 40; -webkit-user-select: none; -moz-user-select: none; user-select: none; } a[data-v-b160e8b2] { color: inherit; -webkit-text-decoration: none; text-decoration: none; } p[data-v-b160e8b2] { margin: 0; } img[data-v-b160e8b2]::before { display: block; width: 100%; height: 100%; box-sizing: border-box; background-color: var(--light-background); content: ""; } .dynamic .img-button[data-v-b160e8b2] { min-width: 30% !important; flex: initial !important; flex-grow: 1 !important; } .post-container[data-v-b160e8b2] { display: flex; width: 100%; box-sizing: border-box; flex-direction: column; padding: 16px; border-radius: 16px; background-color: var(--default-background); cursor: pointer; gap: 20px; text-align: justify; } .post-container .forum-btn[data-v-b160e8b2] { border-radius: 24px; font-size: 14px; } .post-container .forum-btn[data-v-b160e8b2]:not(:hover):not(:active):not(:focus) { background-color: var(--light-background); box-shadow: none; } .post-container .main-content[data-v-b160e8b2] { display: flex; flex-direction: column; gap: 8px; } .post-container .main-content .title[data-v-b160e8b2] { margin: 0; color: var(--highlight-fore); font-weight: bold; } .post-container .main-content .content[data-v-b160e8b2] { overflow: hidden; color: var(--light-fore); font-size: 14px; text-overflow: ellipsis; } .post-container .img-container[data-v-b160e8b2] { display: flex; overflow: hidden; flex-wrap: wrap; border-radius: 16px; gap: 6px; } .post-container .img-container .img-button[data-v-b160e8b2] { overflow: hidden; min-width: 40%; height: 144px; flex: 1; padding: 0; border: none; border-radius: 0; } .post-container .img-container .img-button .post-img[data-v-b160e8b2] { width: 100%; height: 100%; -o-object-fit: cover; object-fit: cover; transition: 0.4s cubic-bezier(0, 0, 0.2, 1); } .post-container .img-container .img-button .post-img[data-v-b160e8b2]:hover { scale: 1.2; } .post-container .bottom-controls[data-v-b160e8b2] { display: flex; align-items: center; gap: 12px; } .post-container .bottom-controls .author[data-v-b160e8b2] { display: flex; align-items: center; padding: 0; border-radius: 24px; background-color: transparent; background-color: initial; } .post-container .bottom-controls .author .author-portrait[data-v-b160e8b2] { width: 32px; height: 32px; border-radius: 24px; -o-object-fit: cover; object-fit: cover; } .post-container .bottom-controls .author .author-info[data-v-b160e8b2] { display: flex; flex-direction: column; padding: 0 10px; text-align: left; } .post-container .bottom-controls .author .author-info .author-name[data-v-b160e8b2] { font-size: 14px; font-weight: bold; } .post-container .bottom-controls .author .author-info .post-time[data-v-b160e8b2] { color: var(--minimal-fore); font-size: 12px; } .post-container .bottom-controls .author[data-v-b160e8b2]:not(:hover):not(:active):not(:focus) { box-shadow: none; } .post-container .bottom-controls .replies[data-v-b160e8b2] { display: flex; min-width: 16px; align-items: center; border-radius: 24px; margin-left: auto; color: var(--light-fore); font-family: var(--code-monospace); font-size: 13px; font-weight: bold; } .post-container .bottom-controls .replies[data-v-b160e8b2]::before { margin-right: 6px; content: "forum"; font-size: 16px; font-weight: normal; }.masonry-wrapper[data-v-0a8673bc] { display: flex; width: 100%; max-width: var(--content-max); flex-direction: column; align-items: center; gap: 12px; } .masonry-wrapper .masonry-container[data-v-0a8673bc] { width: 100%; margin: auto; } @keyframes feeds-in-0a8673bc { 0% { transform: scale(0.72); } 100% { transform: scale(1); } } .masonry-wrapper .masonry-container .post-elem[data-v-0a8673bc] { animation: feeds-in-0a8673bc 0.4s cubic-bezier(0.18, 0.89, 0.32, 1.2); } .masonry-wrapper .masonry-container .post-elem[data-v-0a8673bc]:not(:hover):not(:active):not(:focus) { box-shadow: none; } .masonry-wrapper > .post-elem[data-v-0a8673bc] { position: absolute !important; visibility: hidden !important; }.about-wrapper[data-v-8c03e998] { display: flex; flex-direction: column; align-items: center; padding: 8px; margin: auto; gap: 12px; } .about-wrapper .main-title[data-v-8c03e998] { display: flex; align-items: center; gap: 12px; } .about-wrapper .main-title .main-icon[data-v-8c03e998] { width: 64px; height: 64px; } .about-wrapper .main-title .title[data-v-8c03e998] { color: var(--highlight-fore); font-size: 32px; font-style: italic; font-weight: bold; } .about-wrapper .script-info[data-v-8c03e998] { display: flex; flex-direction: column; align-items: center; color: var(--minimal-fore); gap: 8px; } .about-wrapper .script-info .author-info[data-v-8c03e998] { display: flex; align-items: baseline; gap: 8px; } .about-wrapper .about-controls[data-v-8c03e998] { display: flex; margin-top: 16px; gap: 8px; } .about-wrapper .about-controls .about-button[data-v-8c03e998] { padding: 6px 10px; font-size: 14px; }.update-wrapper[data-v-8906d00c] { display: flex; max-width: 100%; flex-direction: column; gap: 8px; } .update-wrapper .latest-info[data-v-8906d00c] { display: flex; align-items: center; padding: 2px 8px; border-radius: 16px; margin: auto; margin-bottom: 12px; background-color: var(--level-blue-background); color: var(--level-blue-fore); gap: 6px; } .update-wrapper .latest-info.is-latest[data-v-8906d00c] { background-color: var(--level-green-background); color: var(--level-green-fore); } .update-wrapper .title-container[data-v-8906d00c] { display: flex; align-items: center; gap: 10px; } .update-wrapper .title-container .title[data-v-8906d00c] { font-size: 20px; font-weight: bold; } .update-wrapper .title-container .is-pre-release[data-v-8906d00c] { padding: 2px 8px; border-radius: 16px; background-color: var(--level-orange-background); color: var(--level-orange-fore); font-size: 14px; } .update-wrapper .main-info[data-v-8906d00c] { display: flex; align-items: center; gap: 8px; } .update-wrapper .main-info .avatar[data-v-8906d00c] { width: 32px; height: 32px; border-radius: 32px; } .update-wrapper .main-info .release-time[data-v-8906d00c] { margin-left: auto; } .update-wrapper .update-controls[data-v-8906d00c] { display: flex; align-items: center; margin-top: 8px; gap: 8px; } .update-wrapper .update-controls .up-button[data-v-8906d00c] { padding: 4px 8px; border-radius: 10px; font-size: 15px; font-weight: bold; } .update-wrapper .update-controls .up-name[data-v-8906d00c] { font-family: var(--code-monospace); } .forbidden-wrapper[data-v-8906d00c] { display: flex; width: 100%; height: 100%; flex-direction: column; align-items: center; } .forbidden-wrapper .icon[data-v-8906d00c] { font-size: 64px; }.layout-custom-back[data-v-fcb5c431] { display: flex; width: 100%; flex-direction: column; gap: 8px; } .layout-custom-back .custom-image[data-v-fcb5c431] { max-width: 100%; max-height: 320px; border-radius: 8px; margin: 0 auto; } .layout-custom-back .custom-back-buttons[data-v-fcb5c431] { display: flex; align-items: center; justify-content: flex-end; gap: 6px; } .layout-custom-back .adjust-controls[data-v-fcb5c431] { display: flex; flex-direction: column; gap: 8px; } .layout-custom-back .adjust-controls .control-set[data-v-fcb5c431] { display: flex; align-items: baseline; gap: 6px; } .layout-custom-back .adjust-controls .control-set .editor[data-v-fcb5c431] { width: auto; font-family: var(--code-zh); }.theme-color-component[data-v-54fb2e9b] { display: flex; width: 100%; flex-direction: column; align-items: flex-start; gap: 6px; } .theme-color-component .title[data-v-54fb2e9b] { margin: 0; color: var(--minimal-fore); text-align: center; } .theme-color-component .picker[data-v-54fb2e9b] { display: flex; gap: 6px; } .theme-color-component .picker label[data-v-54fb2e9b] { color: var(--minimal-fore); } .theme-color-component .reset-button[data-v-54fb2e9b] { margin-left: auto; }.theme-picker { z-index: 9999 !important; }@keyframes kf-fade-in-a690d550 { 0% { opacity: 0; } 100% { opacity: 1; } } @keyframes kf-fade-out-a690d550 { 0% { opacity: 1; } 100% { opacity: 0; } } @keyframes kf-dialog-in-a690d550 { 0% { opacity: 0; transform: scale(1.2); } 100% { opacity: 1; transform: scale(1); } } @keyframes kf-zoom-in-a690d550 { 0% { transform: scale(0.72); } 100% { transform: scale(1); } } @keyframes kf-fade-zoom-in-a690d550 { 0% { opacity: 0; transform: scale(0.72); } 100% { opacity: 1; transform: scale(1); } } .user-textbox[data-v-a690d550] { box-sizing: border-box; padding: 4px; border: 2px solid var(--border-color); border-radius: 6px; background-color: var(--default-background); outline: none; transition: 0.4s; } .user-textbox[data-v-a690d550]:hover { border-color: var(--light-background); } .user-textbox[data-v-a690d550]:focus { border-color: var(--tieba-theme-color); } .lodash-style.user-textbox[data-v-a690d550] { padding: 0; border: none; border-radius: 0; border-bottom: 2px solid var(--border-color); }@keyframes kf-fade-in-8c694269 { 0% { opacity: 0; } 100% { opacity: 1; } } @keyframes kf-fade-out-8c694269 { 0% { opacity: 1; } 100% { opacity: 0; } } @keyframes kf-dialog-in-8c694269 { 0% { opacity: 0; transform: scale(1.2); } 100% { opacity: 1; transform: scale(1); } } @keyframes kf-zoom-in-8c694269 { 0% { transform: scale(0.72); } 100% { transform: scale(1); } } @keyframes kf-fade-zoom-in-8c694269 { 0% { opacity: 0; transform: scale(0.72); } 100% { opacity: 1; transform: scale(1); } } html[data-v-8c694269] { padding: 0; margin: 0; text-align: justify; } body[data-v-8c694269] { overflow-x: hidden; overflow-y: scroll; overflow: hidden scroll; padding: 0; margin: 0; font-family: var(--code-zh); } body[no-scrollbar][data-v-8c694269] { overflow: hidden; } div[data-v-8c694269], p[data-v-8c694269] { margin: 0; } select[data-v-8c694269] { padding: 1px 8px; border: 1px solid var(--border-color); border-radius: 8px; cursor: pointer; } option[data-v-8c694269] { cursor: pointer; } option[data-v-8c694269]:checked { background-color: var(--tieba-theme-color); color: var(--default-background); } a[data-v-8c694269] { color: inherit; -webkit-text-decoration: none; text-decoration: none; word-break: break-all; } .dialogJ[data-v-8c694269] { position: fixed !important; top: 50% !important; left: 50% !important; } .dialogJ[data-v-8c694269] { transform: translate(-50%, -50%); } @keyframes content-in-8c694269 { 0% { opacity: 0; transform: translateY(20px); } 100% { opacity: 1; } } .key-button[data-v-8c694269] { display: flex; overflow: hidden; min-width: 80px; align-items: center; padding: 12px 16px; border-radius: 0; box-shadow: none; font-size: 16px; gap: 12px; text-align: justify; white-space: nowrap; } .key-button .icon[data-v-8c694269] { font-size: 20px; font-variation-settings: "FILL" 0, "wght" 300; transition: font-variation-settings 0.2s ease; } .key-button .key-info[data-v-8c694269] { display: flex; width: calc(100% - 32px); flex-direction: column; } .key-button .key-title[data-v-8c694269], .key-button .key-desc[data-v-8c694269] { overflow: hidden; text-overflow: ellipsis; } .key-button .key-desc[data-v-8c694269] { color: var(--minimal-fore); font-size: 14px; } .key-button.selected[data-v-8c694269] { background-color: var(--tieba-theme-color) !important; color: var(--default-background) !important; } .key-button.selected[data-v-8c694269] { font-weight: bold; } .key-button.selected .icon[data-v-8c694269] { font-variation-settings: "FILL" 1, "GRAD" 48, "wght" 300; font-weight: normal; } .key-button.selected .key-desc[data-v-8c694269] { color: var(--default-background); } .settings-wrapper[data-v-8c694269] { display: flex; overflow: hidden; width: 72%; min-width: 720px; height: 72%; min-height: 400px; box-sizing: border-box; border: 1px solid var(--light-border-color); border-radius: 18px; margin: auto; animation: kf-dialog-in-8c694269 0.4s ease; background-color: var(--default-background); box-shadow: 0 0 24px rgba(0, 0, 0, 0.2); } .settings-wrapper .left-container[data-v-8c694269] { display: flex; width: 30%; max-width: 280px; flex-direction: column; } .settings-wrapper .left-container .search-controls[data-v-8c694269] { display: flex; flex-direction: column; padding: 16px; gap: 8px; } .settings-wrapper .left-container .search-controls .title[data-v-8c694269] { color: var(--default-fore) !important; } .settings-wrapper .left-container .search-controls .title[data-v-8c694269] { margin-top: 8px; font-size: 20px; font-weight: bold; line-height: normal; } .settings-wrapper .left-container .search-controls .search-box[data-v-8c694269] { padding: 6px; font-size: 14px; } .settings-wrapper .left-container .left-panel[data-v-8c694269] { display: flex; box-sizing: border-box; flex-direction: column; } .settings-wrapper .middle-container[data-v-8c694269] { display: flex; width: 20%; max-width: 220px; flex-direction: column; padding: 16px 6px; background-color: var(--deep-background); gap: 6px; } .settings-wrapper .middle-container .sub-key[data-v-8c694269] { display: flex; padding: 8px 16px; border-radius: 12px; gap: 4px; } .settings-wrapper .middle-container .sub-key .key-title[data-v-8c694269] { font-size: 14px; } .settings-wrapper .middle-container .sub-key[data-v-8c694269]:not(:hover):not(:active):not(:focus) { background-color: transparent; background-color: initial; } .settings-wrapper .right-container[data-v-8c694269] { display: flex; overflow: auto; width: 50%; flex-direction: column; flex-grow: 1; padding: 16px; animation: content-in-8c694269 0.2s cubic-bezier(0, 0, 0.2, 1); background-color: var(--default-background); font-size: 14px; gap: 32px; } .settings-wrapper .right-container .setting-content[data-v-8c694269] { display: flex; flex-direction: column; gap: 8px; } .settings-wrapper .right-container .setting-content .content-title[data-v-8c694269] { color: var(--highlight-fore); font-size: 18px; font-weight: bold; } .settings-wrapper .right-container .setting-content .content-sub-title[data-v-8c694269] { color: var(--default-fore); font-size: 16px; font-weight: bold; } .settings-wrapper .right-container .setting-content .content-desc[data-v-8c694269] { display: flex; flex-direction: column; color: var(--light-fore); gap: 6px; } .settings-wrapper .right-container .setting-content .content-textbox[data-v-8c694269] { box-sizing: content-box; margin-left: auto; } .settings-wrapper .right-container .setting-content .content-textbox.textarea[data-v-8c694269] { width: 100%; height: 6em; resize: none; } .settings-wrapper .right-container .setting-content .content-image[data-v-8c694269] { max-width: 100%; max-height: 320px; border-radius: 8px; margin: 0 auto; } .settings-wrapper .right-container .setting-content .setting-control[data-v-8c694269] { display: flex; } .settings-wrapper .right-container .setting-content .setting-control .settings-toggle-button[data-v-8c694269] { margin-left: auto; background: none; font-size: 36px; } .settings-wrapper .right-container .setting-content .setting-control .settings-toggle-button.toggle-on[data-v-8c694269] { color: var(--tieba-theme-color); } .settings-wrapper .right-container .setting-content .setting-control .settings-toggle-button.toggle-on[data-v-8c694269]:hover { color: var(--tieba-theme-fore); } .settings-wrapper .right-container .setting-content .setting-control .icon-component[data-v-8c694269] { margin-left: auto; font-size: 64px; font-variation-settings: "FILL" 1; } .settings-wrapper .empty-container[data-v-8c694269] { margin: auto; color: var(--minimal-fore); font-size: 72px; }@keyframes kf-fade-in-b3af10bd { 0% { opacity: 0; } 100% { opacity: 1; } } @keyframes kf-fade-out-b3af10bd { 0% { opacity: 1; } 100% { opacity: 0; } } @keyframes kf-dialog-in-b3af10bd { 0% { opacity: 0; transform: scale(1.2); } 100% { opacity: 1; transform: scale(1); } } @keyframes kf-zoom-in-b3af10bd { 0% { transform: scale(0.72); } 100% { transform: scale(1); } } @keyframes kf-fade-zoom-in-b3af10bd { 0% { opacity: 0; transform: scale(0.72); } 100% { opacity: 1; transform: scale(1); } } html[data-v-b3af10bd] { padding: 0; margin: 0; text-align: justify; } body[data-v-b3af10bd] { overflow-x: hidden; overflow-y: scroll; overflow: hidden scroll; padding: 0; margin: 0; font-family: var(--code-zh); } body[no-scrollbar][data-v-b3af10bd] { overflow: hidden; } div[data-v-b3af10bd], p[data-v-b3af10bd] { margin: 0; } select[data-v-b3af10bd] { padding: 1px 8px; border: 1px solid var(--border-color); border-radius: 8px; cursor: pointer; } option[data-v-b3af10bd] { cursor: pointer; } option[data-v-b3af10bd]:checked { background-color: var(--tieba-theme-color); color: var(--default-background); } a[data-v-b3af10bd] { color: inherit; -webkit-text-decoration: none; text-decoration: none; word-break: break-all; } .dialogJ[data-v-b3af10bd] { position: fixed !important; top: 50% !important; left: 50% !important; } .dialogJ[data-v-b3af10bd] { transform: translate(-50%, -50%); } .index-wrapper .grid-container .profile-menu-container .curr-user .user-profile[data-v-b3af10bd] { -o-object-fit: contain; object-fit: contain; } a[data-v-b3af10bd] { color: inherit; -webkit-text-decoration: none; text-decoration: none; } .block-wrapper[data-v-b3af10bd] { display: flex; flex-direction: column; gap: 8px; } .block-controls[data-v-b3af10bd] { display: flex; width: 100%; align-items: center; gap: 8px; } .block-controls .block-title[data-v-b3af10bd] { margin: 0; font-size: 24px; font-weight: bold; } .block-container[data-v-b3af10bd] { padding: 8px; border-radius: 12px; background-color: var(--trans-light-background); } html:not([perf-saver]) body.custom-background .block-container[data-v-b3af10bd] { -webkit-backdrop-filter: blur(24px); backdrop-filter: blur(24px); } html.dark-theme body.custom-background .block-container[data-v-b3af10bd] { -webkit-backdrop-filter: blur(24px) brightness(0.8); backdrop-filter: blur(24px) brightness(0.8); } .block-panel[data-v-b3af10bd] { display: flex; min-width: 30px; height: 26px; align-items: center; justify-content: center; padding: 2px 8px; border-radius: 24px; margin-left: auto; background-color: var(--trans-light-background); font-size: 14px; text-align: center; } .block-panel .icon[data-v-b3af10bd] { color: var(--light-fore); font-size: 18px; } .block-panel .panel-btn[data-v-b3af10bd] { width: 30px; height: 30px; padding: 4px; border: none; border-radius: 48px; } .block-panel.left-align[data-v-b3af10bd] { margin-left: 0; } .index-wrapper[data-v-b3af10bd] { display: flex; flex-direction: column; align-items: center; gap: 12px; } .index-wrapper .grid-container[data-v-b3af10bd] { display: grid; max-width: var(--content-max); margin: 16px; grid-gap: 36px; gap: 36px; grid-template-rows: repeat(1, 1fr); } .index-wrapper .grid-container .head-controls[data-v-b3af10bd] { display: flex; flex-direction: column; align-items: center; padding: 24px; margin-top: 24px; gap: 24px; } .index-wrapper .grid-container .head-controls .main-title[data-v-b3af10bd] { display: flex; align-items: center; justify-content: center; gap: 12px; } .index-wrapper .grid-container .head-controls .main-title .main-icon[data-v-b3af10bd] { height: 64px; } .index-wrapper .grid-container .head-controls .main-title .title[data-v-b3af10bd] { font-size: 36px; font-style: italic; font-weight: bold; } .index-wrapper .grid-container .head-controls .search-controls[data-v-b3af10bd] { position: relative; display: grid; width: 100%; max-width: 420px; justify-content: center; grid-template-columns: 1fr 72px; } .index-wrapper .grid-container .head-controls .search-controls .search-box[data-v-b3af10bd] { width: 100%; padding: 8px; border-bottom-right-radius: 0; border-top-right-radius: 0; font-size: 16px; } .index-wrapper .grid-container .head-controls .search-controls .search-button[data-v-b3af10bd] { border: none; border-bottom-left-radius: 0; border-top-left-radius: 0; font-size: 16px; font-weight: bold; } .index-wrapper .grid-container .head-controls .search-controls .search-suggestions[data-v-b3af10bd] { position: absolute; z-index: 1; top: 100%; display: flex; overflow: hidden; width: 100%; box-sizing: border-box; flex-direction: column; border: 1px solid var(--border-color); border-radius: 6px; margin-top: 4px; background-color: var(--default-background); box-shadow: 0 0 20px rgba(0, 0, 0, 0.2); animation: kf-fade-in-b3af10bd 0.2s; } .index-wrapper .grid-container .head-controls .search-controls .search-suggestions .search-elem[data-v-b3af10bd] { display: flex; overflow: hidden; box-sizing: border-box; padding: 0; padding: 8px; border: none; border-radius: 0; animation: stretch-b3af10bd 0.2s cubic-bezier(0.22, 0.61, 0.36, 1); gap: 8px; text-align: justify; } @keyframes stretch-b3af10bd { 0% { padding: 4px 8px; } 100% { padding: 8px; } } .index-wrapper .grid-container .head-controls .search-controls .search-suggestions .search-elem .sugg-img[data-v-b3af10bd] { width: 42px; height: 42px; border-radius: 8px; } .index-wrapper .grid-container .head-controls .search-controls .search-suggestions .search-elem .sugg-content[data-v-b3af10bd] { position: relative; display: flex; width: calc(100% - 42px - 8px); flex-direction: column; justify-content: center; gap: 4px; } .index-wrapper .grid-container .head-controls .search-controls .search-suggestions .search-elem .sugg-content .sugg-title[data-v-b3af10bd] { overflow: hidden; margin: 0; font-size: 14px; font-weight: bold; text-overflow: ellipsis; white-space: nowrap; } .index-wrapper .grid-container .head-controls .search-controls .search-suggestions .search-elem .sugg-content .sugg-desc[data-v-b3af10bd] { overflow: hidden; margin: 0; color: var(--light-fore); font-size: 12px; text-overflow: ellipsis; white-space: nowrap; } .index-wrapper .grid-container .profile-menu-container[data-v-b3af10bd] { position: absolute; z-index: 1; } .index-wrapper .grid-container .profile-menu-container .curr-user[data-v-b3af10bd] { position: fixed; top: 24px; left: 24px; overflow: hidden; width: 36px; height: 36px; padding: 0; border: 3px solid var(--border-color); border-radius: 36px; } .index-wrapper .grid-container .profile-menu-container .curr-user .user-profile[data-v-b3af10bd] { width: 100%; } .index-wrapper .grid-container .profile-menu-container .profile-menu[data-v-b3af10bd] { top: 64px; left: 24px; } .index-wrapper .grid-container .config-menu-container[data-v-b3af10bd] { position: absolute; z-index: 1; display: flex; } .index-wrapper .grid-container .config-menu-container .config-menu-btn[data-v-b3af10bd] { position: fixed; top: 24px; right: 24px; height: 32px; border: none; border-radius: 36px; background-color: var(--page-background); font-size: 24px; } .index-wrapper .grid-container .config-menu-container .config-menu-btn[data-v-b3af10bd]:hover { background-color: var(--default-background); } .index-wrapper .grid-container .config-menu-container .config-menu-btn[data-v-b3af10bd]:active { background-color: var(--default-hover); } .index-wrapper .grid-container .config-menu-container .config-menu[data-v-b3af10bd] { top: 64px; right: 24px; opacity: 1; } .index-wrapper .grid-container .signed-count[data-v-b3af10bd] { font-weight: bold; } .index-wrapper .grid-container .block-panel.followed[data-v-b3af10bd] { margin-left: auto; } .index-wrapper .grid-container .followed-container[data-v-b3af10bd] { margin-top: -16px; } .index-wrapper .grid-container .followed-container .followed-list[data-v-b3af10bd] { display: flex; flex-wrap: wrap; padding: 8px; border-radius: 12px; background-color: var(--trans-light-background); gap: 4px; } .index-wrapper .grid-container .followed-container .followed-list .followed-btn[data-v-b3af10bd] { display: flex; align-items: center; padding: 6px 8px; border-radius: 12px; font-size: 14px; gap: 6px; } .index-wrapper .grid-container .followed-container .followed-list .followed-btn .signed[data-v-b3af10bd] { color: green; font-weight: bold; } .index-wrapper .grid-container .followed-container .followed-list .followed-btn .forum-level[data-v-b3af10bd] { min-width: 24px; padding: 0 2px; border-radius: 24px; font-weight: bold; text-align: center; } .index-wrapper .grid-container .topic-list[data-v-b3af10bd] { display: grid; grid-gap: 4px; gap: 4px; grid-auto-rows: max-content; grid-template-columns: repeat(2, 1fr); } .index-wrapper .grid-container .topic-list .topic-btn[data-v-b3af10bd] { display: flex; width: 100%; height: 100%; align-items: center; padding: 12px; border-radius: 12px; gap: 8px; } .index-wrapper .grid-container .topic-list .topic-btn .topic-img[data-v-b3af10bd] { width: 72px; border-radius: 12px; } .index-wrapper .grid-container .topic-list .topic-btn .topic-content[data-v-b3af10bd] { display: flex; flex-flow: column wrap; gap: 4px; text-align: justify; } .index-wrapper .grid-container .topic-list .topic-btn .topic-content .topic-title[data-v-b3af10bd] { display: flex; align-items: center; gap: 6px; } .index-wrapper .grid-container .topic-list .topic-btn .topic-content .topic-title [class^=topic-rank][data-v-b3af10bd] { padding: 0 4px; border-radius: 4px; background-color: orange; color: var(--default-background); font-weight: bold; text-align: center; } .index-wrapper .grid-container .topic-list .topic-btn .topic-content .topic-title .topic-name[data-v-b3af10bd] { font-size: 16px; font-weight: bold; } .index-wrapper .grid-container .topic-list .topic-btn .topic-content .topic-desc[data-v-b3af10bd] { color: var(--light-fore); font-size: 14px; } .index-wrapper .masonry-container[data-v-b3af10bd] { display: flex; width: calc(100% - 32px); max-width: var(--content-max); box-sizing: border-box; flex-direction: column; align-items: center; gap: 8px; } .index-wrapper .masonry-container .feeds-container[data-v-b3af10bd] { width: 100%; margin: auto; } @keyframes feeds-in-b3af10bd { 0% { transform: scale(0.72); } 100% { transform: scale(1); } } @keyframes refresh-btn-in-b3af10bd { 0% { padding: 0 18px; opacity: 0; } 100% { padding: 8px 18px; opacity: 1; } } .index-wrapper .masonry-container .feeds-container .feeds-refresh-btn[data-v-b3af10bd] { position: fixed; z-index: 1; bottom: 24px; left: 50%; display: flex; align-items: center; justify-content: center; padding: 8px 18px; border-width: 2px; border-radius: 16px; animation: refresh-btn-in-b3af10bd 0.4s ease; box-shadow: 0 6px 20px rgba(0, 0, 0, 0.3); font-size: 14px; font-weight: bold; gap: 6px; transform: translateX(-50%); } .index-wrapper .masonry-container .feeds-container .feeds-refresh-btn .icon[data-v-b3af10bd] { font-size: 18px; } .index-wrapper .masonry-container .post-elem[data-v-b3af10bd] { animation: feeds-in-b3af10bd 0.4s cubic-bezier(0.18, 0.89, 0.32, 1.2); } .index-wrapper .masonry-container .post-elem[data-v-b3af10bd]:not(:hover):not(:active):not(:focus) { box-shadow: none; } .index-wrapper .masonry-container .empty-container .no-feed-content[data-v-b3af10bd] { color: var(--minimal-fore); font-size: small; text-align: center; }@keyframes kf-fade-in-88fc5825 { 0% { opacity: 0; } 100% { opacity: 1; } } @keyframes kf-fade-out-88fc5825 { 0% { opacity: 1; } 100% { opacity: 0; } } @keyframes kf-dialog-in-88fc5825 { 0% { opacity: 0; transform: scale(1.2); } 100% { opacity: 1; transform: scale(1); } } @keyframes kf-zoom-in-88fc5825 { 0% { transform: scale(0.72); } 100% { transform: scale(1); } } @keyframes kf-fade-zoom-in-88fc5825 { 0% { opacity: 0; transform: scale(0.72); } 100% { opacity: 1; transform: scale(1); } } html[data-v-88fc5825] { padding: 0; margin: 0; text-align: justify; } body[data-v-88fc5825] { overflow-x: hidden; overflow-y: scroll; overflow: hidden scroll; padding: 0; margin: 0; font-family: var(--code-zh); } body[no-scrollbar][data-v-88fc5825] { overflow: hidden; } div[data-v-88fc5825], p[data-v-88fc5825] { margin: 0; } select[data-v-88fc5825] { padding: 1px 8px; border: 1px solid var(--border-color); border-radius: 8px; cursor: pointer; } option[data-v-88fc5825] { cursor: pointer; } option[data-v-88fc5825]:checked { background-color: var(--tieba-theme-color); color: var(--default-background); } a[data-v-88fc5825] { color: inherit; -webkit-text-decoration: none; text-decoration: none; word-break: break-all; } .dialogJ[data-v-88fc5825] { position: fixed !important; top: 50% !important; left: 50% !important; } .dialogJ[data-v-88fc5825] { transform: translate(-50%, -50%); } .pager-wrapper .pager-button-container .pager-button.icon[data-v-88fc5825] { font-family: "Material Symbols", monospace !important; } .pager-wrapper .pager-button-container .pager-button.icon[data-v-88fc5825] { font-variation-settings: "FILL" 0, "wght" 400, "GRAD" 0, "opsz" 40; -webkit-user-select: none; -moz-user-select: none; user-select: none; } .pager-wrapper[data-v-88fc5825] { display: flex; width: -moz-fit-content; width: fit-content; box-sizing: border-box; align-items: center; padding: 4px; font-size: 16px; gap: 6px; } .pager-wrapper .pager-button-container[data-v-88fc5825] { display: flex; align-items: center; gap: 4px; } .pager-wrapper .pager-button-container .pager-button[data-v-88fc5825] { color: var(--default-fore); font-family: var(--code-monospace); } .pager-wrapper .pager-button-container .pager-button[data-v-88fc5825]:not(:hover):not(:active):not(:focus) { background-color: transparent; } .pager-wrapper .pager-button-container .pager-button.fill[data-v-88fc5825]:not(:hover):not(:active):not(:focus) { background-color: var(--defualt-background); } .pager-wrapper .pager-button-container .pager-button.curr-pager-button[data-v-88fc5825] { border-radius: 0; box-shadow: 0 3px 0 var(--tieba-theme-color); color: var(--tieba-theme-color); font-weight: bold; } .pager-wrapper .pager-separactor[data-v-88fc5825] { color: var(--minimal-fore); font-family: var(--code-monospace); } .pager-wrapper .jumper-container[data-v-88fc5825] { display: flex; align-items: center; color: var(--light-fore); gap: 6px; } .pager-wrapper .jumper-container .jumper[data-v-88fc5825] { width: 36px; width: 3em; padding: 2px 4px; color: var(--default-fore); font-family: var(--code-monospace); } .pager-wrapper .tail-slot[data-v-88fc5825] { margin-left: auto; color: var(--minimal-fore); }@keyframes slide-in-217ff1bf { 0% { opacity: 0; transform: translateY(20%); } } #thread-editor[data-v-217ff1bf] { bottom: 0; left: 50%; display: flex; width: 100%; max-width: var(--content-max); max-height: 100vh; box-sizing: border-box; flex-direction: column; align-items: center; padding: 24px; border-radius: 8px 8px 0 0; margin: auto auto 0; animation: slide-in-217ff1bf 0.4s ease; background-color: var(--default-background); gap: 8px; transition: 0.4s; } #thread-editor #thread-editor-exit[data-v-217ff1bf] { margin-left: auto; font-size: 18px; } #thread-editor #thread-editor-exit[data-v-217ff1bf]:not(:hover):not(:active):not(:focus) { box-shadow: none; } #thread-editor .title-editor[data-v-217ff1bf] { width: 100%; flex-grow: 1; border-width: 3px; background-color: transparent; font-size: 24px; font-weight: bold; } #thread-editor h1[data-v-217ff1bf] { margin-right: auto; } #thread-editor #thread-editor-slot[data-v-217ff1bf] { width: 100%; flex-shrink: 2; } #thread-editor #thread-editor-toolbar[data-v-217ff1bf] { display: flex; width: 100%; align-items: center; } #thread-editor #thread-editor-toolbar #thread-editor-submit[data-v-217ff1bf] { padding: 4px 12px; margin-left: auto; font-size: 16px; font-weight: bold; }@keyframes kf-fade-in { 0% { opacity: 0; } 100% { opacity: 1; } } @keyframes kf-fade-out { 0% { opacity: 1; } 100% { opacity: 0; } } @keyframes kf-dialog-in { 0% { opacity: 0; transform: scale(1.2); } 100% { opacity: 1; transform: scale(1); } } @keyframes kf-zoom-in { 0% { transform: scale(0.72); } 100% { transform: scale(1); } } @keyframes kf-fade-zoom-in { 0% { opacity: 0; transform: scale(0.72); } 100% { opacity: 1; transform: scale(1); } } html { padding: 0; margin: 0; text-align: justify; } body { overflow-x: hidden; overflow-y: scroll; overflow: hidden scroll; padding: 0; margin: 0; font-family: var(--code-zh); } body[no-scrollbar] { overflow: hidden; } div, p { margin: 0; } select { padding: 1px 8px; border: 1px solid var(--border-color); border-radius: 8px; cursor: pointer; } option { cursor: pointer; } option:checked { background-color: var(--tieba-theme-color); color: var(--default-background); } a { color: inherit; -webkit-text-decoration: none; text-decoration: none; word-break: break-all; } .dialogJ { position: fixed !important; top: 50% !important; left: 50% !important; } .dialogJ { transform: translate(-50%, -50%); } #thread-editor .edui-container .edui-toolbar .edui-btn-toolbar .edui-btn .edui-icon::before { font-family: "Material Symbols", monospace !important; } #thread-editor .edui-container .edui-toolbar .edui-btn-toolbar .edui-btn .edui-icon::before { font-variation-settings: "FILL" 0, "wght" 400, "GRAD" 0, "opsz" 40; -webkit-user-select: none; -moz-user-select: none; user-select: none; } body { overflow-x: hidden; overflow-y: scroll; overflow: hidden scroll; } #thread-editor .edui-container { width: 100% !important; } #thread-editor .edui-container .edui-toolbar { height: auto; align-items: center; background-color: transparent; } #thread-editor .edui-container .edui-toolbar .edui-btn-toolbar { display: flex; background-color: transparent; gap: 8px; } #thread-editor .edui-container .edui-toolbar .edui-btn-toolbar .edui-btn { padding: 1px; border-radius: 4px; margin-right: 0; background: none; background-color: var(--light-background); box-shadow: 0 0 0 1px var(--border-color); cursor: pointer; transition: 0.4s; } #thread-editor .edui-container .edui-toolbar .edui-btn-toolbar .edui-btn .edui-icon { display: flex; width: -moz-max-content; width: max-content; align-items: center; padding: 2px 4px; background: none; gap: 4px; } #thread-editor .edui-container .edui-toolbar .edui-btn-toolbar .edui-btn .edui-icon::before { font-size: 16px; } #thread-editor .edui-container .edui-toolbar .edui-dialog-container .edui-dropdown-menu { overflow: hidden; width: -moz-max-content; width: max-content; padding: 0; border: 2px solid var(--border-color); border-radius: 6px; background: none; } #thread-editor .edui-container .edui-toolbar .edui-dialog-container .edui-dropdown-menu .edui-popup-body { padding: 0; border: none; background-color: var(--default-background); } #thread-editor .edui-container .edui-toolbar .edui-dialog-container .edui-dropdown-menu .edui-popup-caret { display: none; } #thread-editor .edui-container .edui-editor-body { border: none; border-radius: 0; border-bottom: 3px solid var(--tieba-theme-color); transition: 0.4s; } #thread-editor .edui-container .edui-editor-body:hover { border-color: var(--light-background); } #thread-editor .edui-container .edui-editor-body:focus { border-color: var(--tieba-theme-color); } #thread-editor .edui-container .edui-body-container { min-height: 18px !important; } #thread-editor .edui-container .edui-body-container { max-height: 50vh; padding: 0; border-radius: 0; background-color: transparent; } .edui-btn-topic { display: none !important; } #thread-editor .edui-btn-toolbar .edui-icon.edui-icon-medal::before { content: "diamond"; } #thread-editor .edui-btn-toolbar .edui-icon.edui-icon-medal::after { content: "\u7279\u6743"; } #thread-editor .edui-btn-toolbar .edui-icon.edui-icon-image::before { content: "photo"; } #thread-editor .edui-btn-toolbar .edui-icon.edui-icon-image::after { content: "\u63D2\u5165\u56FE\u7247"; } #thread-editor .edui-btn-toolbar .edui-icon.edui-icon-video::before { content: "video_file"; } #thread-editor .edui-btn-toolbar .edui-icon.edui-icon-video::after { content: "\u63D2\u5165\u89C6\u9891"; } #thread-editor .edui-btn-toolbar .edui-icon.edui-icon-emotion::before { content: "face"; } #thread-editor .edui-btn-toolbar .edui-icon.edui-icon-emotion::after { content: "\u63D2\u5165\u8868\u60C5"; } #thread-editor .edui-btn-toolbar .edui-icon.edui-icon-scrawl::before { content: "format_paint"; } #thread-editor .edui-btn-toolbar .edui-icon.edui-icon-scrawl::after { content: "\u6D82\u9E26"; } #thread-editor .edui-btn-toolbar .edui-icon.edui-icon-topic::before { content: "grid_3x3"; } #thread-editor .edui-btn-toolbar .edui-icon.edui-icon-topic::after { content: "\u8BDD\u9898"; } #thread-editor .edui-btn-toolbar .edui-icon.edui-icon-quick-reply::before { content: "rocket_launch"; } #thread-editor .edui-btn-toolbar .edui-icon.edui-icon-quick-reply::after { content: "\u5FEB\u901F\u56DE\u5E16"; } @keyframes kf-fade-in { 0% { opacity: 0; } 100% { opacity: 1; } } @keyframes kf-fade-out { 0% { opacity: 1; } 100% { opacity: 0; } } @keyframes kf-dialog-in { 0% { opacity: 0; transform: scale(1.2); } 100% { opacity: 1; transform: scale(1); } } @keyframes kf-zoom-in { 0% { transform: scale(0.72); } 100% { transform: scale(1); } } @keyframes kf-fade-zoom-in { 0% { opacity: 0; transform: scale(0.72); } 100% { opacity: 1; transform: scale(1); } } html { padding: 0; margin: 0; text-align: justify; } body { overflow-x: hidden; overflow-y: scroll; overflow: hidden scroll; padding: 0; margin: 0; font-family: var(--code-zh); } body[no-scrollbar] { overflow: hidden; } div, p { margin: 0; } select { padding: 1px 8px; border: 1px solid var(--border-color); border-radius: 8px; cursor: pointer; } option { cursor: pointer; } option:checked { background-color: var(--tieba-theme-color); color: var(--default-background); } a { color: inherit; -webkit-text-decoration: none; text-decoration: none; word-break: break-all; } .dialogJ { position: fixed !important; top: 50% !important; left: 50% !important; } .dialogJ { transform: translate(-50%, -50%); } .edui-popup-body .layer_medal_list li a::before, .edui-popup-body .layer_btn_list li a::before { font-family: "Material Symbols", monospace !important; } .edui-popup-body .layer_medal_list li a::before, .edui-popup-body .layer_btn_list li a::before { font-variation-settings: "FILL" 0, "wght" 400, "GRAD" 0, "opsz" 40; -webkit-user-select: none; -moz-user-select: none; user-select: none; } .edui-dialog-container .upload_container .next_step, .edui-popup-body .layer_medal_list li a, .edui-popup-body .layer_btn_list li a { box-sizing: border-box; padding: 2px 8px; border: none; border-radius: 6px; background: none; background-color: var(--default-background); box-shadow: 0 0 0 1px var(--border-color); color: var(--default-fore); cursor: pointer; transition: 0.4s; } .edui-dialog-container .upload_container .next_step:hover:not([disabled]), .edui-popup-body .layer_medal_list li a:hover:not([disabled]), .edui-popup-body .layer_btn_list li a:hover:not([disabled]) { background-color: var(--default-hover); } .edui-dialog-container .upload_container .next_step:active:not([disabled]), .edui-popup-body .layer_medal_list li a:active:not([disabled]), .edui-popup-body .layer_btn_list li a:active:not([disabled]) { background-color: var(--default-active); } .edui-dialog-container .upload_container .next_step:focus:not([disabled]), .edui-popup-body .layer_medal_list li a:focus:not([disabled]), .edui-popup-body .layer_btn_list li a:focus:not([disabled]) { border-color: var(--tieba-theme-color); box-shadow: 0 0 0 2px var(--tieba-theme-color); } .edui-dialog-container .upload_container .theme-style.next_step, .edui-popup-body .layer_medal_list li a.theme-style, .edui-popup-body .layer_btn_list li a.theme-style { color: var(--default-background) !important; } .edui-dialog-container .upload_container .theme-style.next_step, .edui-popup-body .layer_medal_list li a.theme-style, .edui-popup-body .layer_btn_list li a.theme-style { background-color: var(--tieba-theme-color); } .edui-dialog-container .upload_container .theme-style.next_step:hover, .edui-popup-body .layer_medal_list li a.theme-style:hover, .edui-popup-body .layer_btn_list li a.theme-style:hover { background-color: var(--tieba-theme-hover); } .edui-dialog-container .upload_container .theme-style.next_step:active, .edui-popup-body .layer_medal_list li a.theme-style:active, .edui-popup-body .layer_btn_list li a.theme-style:active { background-color: var(--tieba-theme-active); } .edui-dialog-container .upload_container .unset-background.next_step, .edui-popup-body .layer_medal_list li a.unset-background, .edui-popup-body .layer_btn_list li a.unset-background { background-color: transparent; background-color: initial; } .edui-dialog-container .upload_container .no-border.next_step, .edui-popup-body .layer_medal_list li a.no-border, .edui-popup-body .layer_btn_list li a.no-border { box-shadow: none; } .edui-dialog-container .upload_container .no-border-all.next_step, .edui-popup-body .layer_medal_list li a.no-border-all, .edui-popup-body .layer_btn_list li a.no-border-all { box-shadow: none; } .edui-dialog-container .upload_container .no-border-all.next_step:hover, .edui-popup-body .layer_medal_list li a.no-border-all:hover, .edui-popup-body .layer_btn_list li a.no-border-all:hover, .edui-dialog-container .upload_container .no-border-all.next_step:focus, .edui-popup-body .layer_medal_list li a.no-border-all:focus, .edui-popup-body .layer_btn_list li a.no-border-all:focus { box-shadow: none; } .edui-dialog-container .edui-popup { position: static !important; } .edui-dialog-container .upload_container { padding: 0 20px 20px 0; } .edui-dialog-container .upload_container .slide_item_img { border-color: var(--tieba-theme-color) !important; } .edui-dialog-container .upload_container .slide_item_img { overflow: hidden; } .edui-dialog-container .upload_container .watermark_options { position: static; margin-left: 20px; } .edui-dialog-container .upload_container .next_step { position: static; width: -moz-max-content; width: max-content; height: -moz-max-content; height: max-content; padding: 4px 8px; margin-left: auto; line-height: normal; } .edui-popup-body { position: static; } .edui-popup-body .layer_medal_list, .edui-popup-body .layer_btn_list { width: -moz-max-content; width: max-content; height: -moz-max-content; height: max-content; } .edui-popup-body .layer_medal_list li, .edui-popup-body .layer_btn_list li { display: flex; overflow: hidden; align-items: center; padding: 0; background: none; } .edui-popup-body .layer_medal_list li a, .edui-popup-body .layer_btn_list li a { display: flex; width: -moz-max-content; width: max-content; height: -moz-max-content; height: max-content; align-items: center; padding: 4px 8px; border-radius: 0; box-shadow: none; gap: 4px; } .edui-popup-body .layer_medal_list li a::before, .edui-popup-body .layer_btn_list li a::before { font-size: 16px; } .layer_medal_list li.post_bubble a::before { content: "bubble_chart"; } .layer_medal_list li.post_bubble a::after { content: "\u53D1\u5E16\u6C14\u6CE1"; } .layer_medal_list li.colorful_font a::before { content: "format_color_text"; } .layer_medal_list li.colorful_font a::after { content: "\u5F69\u8272\u5B57\u4F53"; } .layer_btn_list { padding: 0 !important; } .layer_btn_list li { border: none !important; } .layer_btn_list li.from_upload a::before { content: "upload_file"; } .layer_btn_list li.from_upload a::after { content: "\u4E0A\u4F20\u6587\u4EF6"; } .layer_btn_list li.from_web a::before { content: "web"; } .layer_btn_list li.from_web a::after { content: "\u7F51\u7EDC\u56FE\u7247"; }@keyframes kf-fade-in { 0% { opacity: 0; } 100% { opacity: 1; } } @keyframes kf-fade-out { 0% { opacity: 1; } 100% { opacity: 0; } } @keyframes kf-dialog-in { 0% { opacity: 0; transform: scale(1.2); } 100% { opacity: 1; transform: scale(1); } } @keyframes kf-zoom-in { 0% { transform: scale(0.72); } 100% { transform: scale(1); } } @keyframes kf-fade-zoom-in { 0% { opacity: 0; transform: scale(0.72); } 100% { opacity: 1; transform: scale(1); } } html { padding: 0; margin: 0; text-align: justify; } body { overflow-x: hidden; overflow-y: scroll; overflow: hidden scroll; padding: 0; margin: 0; font-family: var(--code-zh); } body[no-scrollbar] { overflow: hidden; } div, p { margin: 0; } select { padding: 1px 8px; border: 1px solid var(--border-color); border-radius: 8px; cursor: pointer; } option { cursor: pointer; } option:checked { background-color: var(--tieba-theme-color); color: var(--default-background); } a { color: inherit; -webkit-text-decoration: none; text-decoration: none; word-break: break-all; } .dialogJ { position: fixed !important; top: 50% !important; left: 50% !important; } .dialogJ { transform: translate(-50%, -50%); } #thread-editor .emotion_container .ueditor_emotion_tab .s_prev::before, #thread-editor .emotion_container .ueditor_emotion_tab .s_next::before { font-family: "Material Symbols", monospace !important; } #thread-editor .emotion_container .ueditor_emotion_tab .s_prev::before, #thread-editor .emotion_container .ueditor_emotion_tab .s_next::before { font-variation-settings: "FILL" 0, "wght" 400, "GRAD" 0, "opsz" 40; -webkit-user-select: none; -moz-user-select: none; user-select: none; } #thread-editor .emotion_container .ueditor_emotion_tab .s_prev, #thread-editor .emotion_container .ueditor_emotion_tab .s_next { box-sizing: border-box; padding: 2px 8px; border: none; border-radius: 6px; background: none; background-color: var(--default-background); box-shadow: 0 0 0 1px var(--border-color); color: var(--default-fore); cursor: pointer; transition: 0.4s; } #thread-editor .emotion_container .ueditor_emotion_tab .s_prev:hover:not([disabled]), #thread-editor .emotion_container .ueditor_emotion_tab .s_next:hover:not([disabled]) { background-color: var(--default-hover); } #thread-editor .emotion_container .ueditor_emotion_tab .s_prev:active:not([disabled]), #thread-editor .emotion_container .ueditor_emotion_tab .s_next:active:not([disabled]) { background-color: var(--default-active); } #thread-editor .emotion_container .ueditor_emotion_tab .s_prev:focus:not([disabled]), #thread-editor .emotion_container .ueditor_emotion_tab .s_next:focus:not([disabled]) { border-color: var(--tieba-theme-color); box-shadow: 0 0 0 2px var(--tieba-theme-color); } #thread-editor .emotion_container .ueditor_emotion_tab .theme-style.s_prev, #thread-editor .emotion_container .ueditor_emotion_tab .theme-style.s_next { color: var(--default-background) !important; } #thread-editor .emotion_container .ueditor_emotion_tab .theme-style.s_prev, #thread-editor .emotion_container .ueditor_emotion_tab .theme-style.s_next { background-color: var(--tieba-theme-color); } #thread-editor .emotion_container .ueditor_emotion_tab .theme-style.s_prev:hover, #thread-editor .emotion_container .ueditor_emotion_tab .theme-style.s_next:hover { background-color: var(--tieba-theme-hover); } #thread-editor .emotion_container .ueditor_emotion_tab .theme-style.s_prev:active, #thread-editor .emotion_container .ueditor_emotion_tab .theme-style.s_next:active { background-color: var(--tieba-theme-active); } #thread-editor .emotion_container .ueditor_emotion_tab .unset-background.s_prev, #thread-editor .emotion_container .ueditor_emotion_tab .unset-background.s_next { background-color: transparent; background-color: initial; } #thread-editor .emotion_container .ueditor_emotion_tab .no-border.s_prev, #thread-editor .emotion_container .ueditor_emotion_tab .no-border.s_next { box-shadow: none; } #thread-editor .emotion_container .ueditor_emotion_tab .no-border-all.s_prev, #thread-editor .emotion_container .ueditor_emotion_tab .no-border-all.s_next { box-shadow: none; } #thread-editor .emotion_container .ueditor_emotion_tab .no-border-all.s_prev:hover, #thread-editor .emotion_container .ueditor_emotion_tab .no-border-all.s_next:hover, #thread-editor .emotion_container .ueditor_emotion_tab .no-border-all.s_prev:focus, #thread-editor .emotion_container .ueditor_emotion_tab .no-border-all.s_next:focus { box-shadow: none; } #thread-editor .emotion_container .tbui_scroll_panel { overflow: hidden; border-radius: 4px 4px 0 0; } html.dark-theme #thread-editor .emotion_container td, html.dark-theme #thread-editor .emotion_container .emotion_preview { filter: brightness(0.8); } #thread-editor .emotion_container .emotion_preview { border: 1px solid var(--border-color); border-radius: 6px; box-shadow: 0 0 10px rgba(0, 0, 0, 0.01); } html.dark-theme #thread-editor .emotion_container .emotion_preview { box-shadow: 0 0 16px rgba(0, 0, 0, 0.2); } #thread-editor .emotion_container .ueditor_emotion_tab { display: flex; align-items: center; justify-content: space-evenly; border-top: 2px solid var(--border-color); background: none; background-color: var(--default-background); color: var(--default-fore); } #thread-editor .emotion_container .ueditor_emotion_tab .s_prev, #thread-editor .emotion_container .ueditor_emotion_tab .s_next { width: -moz-max-content !important; width: max-content !important; height: -moz-max-content !important; height: max-content !important; } #thread-editor .emotion_container .ueditor_emotion_tab .s_prev, #thread-editor .emotion_container .ueditor_emotion_tab .s_next { position: static; padding: 0 2px; background: none; box-shadow: none; } #thread-editor .emotion_container .ueditor_emotion_tab .s_prev::before, #thread-editor .emotion_container .ueditor_emotion_tab .s_next::before { font-size: 10px; } #thread-editor .emotion_container .ueditor_emotion_tab .s_prev::before { content: "arrow_back_ios"; } #thread-editor .emotion_container .ueditor_emotion_tab .s_next::before { content: "arrow_forward_ios"; } #thread-editor .emotion_container .ueditor_emotion_tab .s_tab_con_wrapper { position: static; } #thread-editor .emotion_container .ueditor_emotion_tab .s_tab_con_wrapper .s_tab_btn { border-radius: 4px; background: none; background-color: var(--default-background); } #thread-editor .emotion_container .ueditor_emotion_tab .s_tab_con_wrapper .s_tab_btn .s_tab_btnbg { border-radius: 4px; background: none; transition: 0.4s; } #thread-editor .emotion_container .ueditor_emotion_tab .s_tab_con_wrapper .s_hover { filter: brightness(1.2); } #thread-editor .emotion_container .ueditor_emotion_tab .s_tab_con_wrapper .s_hover .s_tab_btnbg { filter: brightness(1.4); } #thread-editor .emotion_container .ueditor_emotion_tab .s_tab_con_wrapper .selected { background: none; } #thread-editor .emotion_container .ueditor_emotion_tab .s_tab_con_wrapper .selected .s_tab_btnbg { background-color: var(--tieba-theme-color); color: var(--default-background); font-weight: bold; }@keyframes kf-fade-in-e01667c9 { 0% { opacity: 0; } 100% { opacity: 1; } } @keyframes kf-fade-out-e01667c9 { 0% { opacity: 1; } 100% { opacity: 0; } } @keyframes kf-dialog-in-e01667c9 { 0% { opacity: 0; transform: scale(1.2); } 100% { opacity: 1; transform: scale(1); } } @keyframes kf-zoom-in-e01667c9 { 0% { transform: scale(0.72); } 100% { transform: scale(1); } } @keyframes kf-fade-zoom-in-e01667c9 { 0% { opacity: 0; transform: scale(0.72); } 100% { opacity: 1; transform: scale(1); } } html[data-v-e01667c9] { padding: 0; margin: 0; text-align: justify; } body[data-v-e01667c9] { overflow-x: hidden; overflow-y: scroll; overflow: hidden scroll; padding: 0; margin: 0; font-family: var(--code-zh); } body[no-scrollbar][data-v-e01667c9] { overflow: hidden; } div[data-v-e01667c9], p[data-v-e01667c9] { margin: 0; } select[data-v-e01667c9] { padding: 1px 8px; border: 1px solid var(--border-color); border-radius: 8px; cursor: pointer; } option[data-v-e01667c9] { cursor: pointer; } option[data-v-e01667c9]:checked { background-color: var(--tieba-theme-color); color: var(--default-background); } a[data-v-e01667c9] { color: inherit; -webkit-text-decoration: none; text-decoration: none; word-break: break-all; } .dialogJ[data-v-e01667c9] { position: fixed !important; top: 50% !important; left: 50% !important; } .dialogJ[data-v-e01667c9] { transform: translate(-50%, -50%); } .toggle-panel .toggle-wrapper .toggle-container .panel-button.toggle-off[data-v-e01667c9] { font-family: "Material Symbols", monospace !important; } .toggle-panel .toggle-wrapper .toggle-container .panel-button.toggle-off[data-v-e01667c9] { font-variation-settings: "FILL" 0, "wght" 400, "GRAD" 0, "opsz" 40; -webkit-user-select: none; -moz-user-select: none; user-select: none; } .toggle-panel .toggle-wrapper .toggle-container .panel-button.toggle-on[data-v-e01667c9] { font-family: "Material Symbols", monospace !important; } .toggle-panel .toggle-wrapper .toggle-container .panel-button.toggle-on[data-v-e01667c9] { font-variation-settings: "FILL" 1, "wght" 400, "GRAD" 0, "opsz" 40; -webkit-user-select: none; -moz-user-select: none; user-select: none; } .toggle-panel[data-v-e01667c9] { display: flex; overflow: hidden; max-width: 60vh; max-height: 60vh; box-sizing: border-box; flex-direction: column; padding: 12px; border: 1px solid var(--light-border-color); border-radius: 16px; margin: auto; animation: kf-dialog-in-e01667c9 0.4s ease; background-color: var(--default-background); box-shadow: 0 0 10px rgba(0, 0, 0, 0.1); color: var(--default-fore); transition: 0.4s ease; } .toggle-panel .toggle-wrapper[data-v-e01667c9] { display: flex; flex-wrap: wrap; justify-content: center; gap: 8px; } .toggle-panel .toggle-wrapper .toggle-container[data-v-e01667c9] { display: flex; flex-direction: column; align-items: center; gap: 4px; } .toggle-panel .toggle-wrapper .toggle-container .panel-button[data-v-e01667c9] { width: 58px; height: 58px; border-radius: 12px; font-size: 24px; } .toggle-panel .toggle-wrapper .toggle-container .panel-button.toggle-off[data-v-e01667c9] { color: var(--minimal-fore); } .toggle-panel .toggle-wrapper .toggle-container .panel-button.toggle-on[data-v-e01667c9]:focus { box-shadow: 0 0 0 1px var(--tieba-theme-color); } .toggle-panel .toggle-wrapper .toggle-container .toggle-name[data-v-e01667c9] { color: var(--light-fore); } @keyframes kf-fade-in { 0% { opacity: 0; } 100% { opacity: 1; } } @keyframes kf-fade-out { 0% { opacity: 1; } 100% { opacity: 0; } } @keyframes kf-dialog-in { 0% { opacity: 0; transform: scale(1.2); } 100% { opacity: 1; transform: scale(1); } } @keyframes kf-zoom-in { 0% { transform: scale(0.72); } 100% { transform: scale(1); } } @keyframes kf-fade-zoom-in { 0% { opacity: 0; transform: scale(0.72); } 100% { opacity: 1; transform: scale(1); } } html { padding: 0; margin: 0; text-align: justify; } body { overflow-x: hidden; overflow-y: scroll; overflow: hidden scroll; padding: 0; margin: 0; font-family: var(--code-zh); } body[no-scrollbar] { overflow: hidden; } div, p { margin: 0; } select { padding: 1px 8px; border: 1px solid var(--border-color); border-radius: 8px; cursor: pointer; } option { cursor: pointer; } option:checked { background-color: var(--tieba-theme-color); color: var(--default-background); } a { color: inherit; -webkit-text-decoration: none; text-decoration: none; word-break: break-all; } .dialogJ { position: fixed !important; top: 50% !important; left: 50% !important; } .dialogJ { transform: translate(-50%, -50%); } .search_internal_btn::after, .icon_author::after, .icon_replyer::after { font-family: "Material Symbols", monospace !important; } .search_internal_btn::after, .icon_author::after, .icon_replyer::after { font-variation-settings: "FILL" 0, "wght" 400, "GRAD" 0, "opsz" 40; -webkit-user-select: none; -moz-user-select: none; user-select: none; } .search_bright .search_btn_enter_ba { box-sizing: border-box; padding: 2px 8px; border: none; border-radius: 6px; background: none; background-color: var(--default-background); box-shadow: 0 0 0 1px var(--border-color); color: var(--default-fore); cursor: pointer; transition: 0.4s; } .search_bright .search_btn_enter_ba:hover:not([disabled]) { background-color: var(--default-hover); } .search_bright .search_btn_enter_ba:active:not([disabled]) { background-color: var(--default-active); } .search_bright .search_btn_enter_ba:focus:not([disabled]) { border-color: var(--tieba-theme-color); box-shadow: 0 0 0 2px var(--tieba-theme-color); } .search_bright .theme-style.search_btn_enter_ba { color: var(--default-background) !important; } .search_bright .theme-style.search_btn_enter_ba { background-color: var(--tieba-theme-color); } .search_bright .theme-style.search_btn_enter_ba:hover { background-color: var(--tieba-theme-hover); } .search_bright .theme-style.search_btn_enter_ba:active { background-color: var(--tieba-theme-active); } .search_bright .unset-background.search_btn_enter_ba { background-color: transparent; background-color: initial; } .search_bright .no-border.search_btn_enter_ba { box-shadow: none; } .search_bright .no-border-all.search_btn_enter_ba { box-shadow: none; } .search_bright .no-border-all.search_btn_enter_ba:hover, .search_bright .no-border-all.search_btn_enter_ba:focus { box-shadow: none; } #head { background: transparent none repeat 0 0 / auto auto padding-box border-box scroll !important; background: initial !important; background-color: var(--page-background) !important; } #head .head_inner { background-color: var(--page-background); } .threadlist_title a, .threadlist_title a:hover, .threadlist_title a:visited { color: var(--tieba-theme-fore) !important; } .u_menu_item a { color: inherit !important; } .u_menu_item a { /* \u9876\u90E8\u83DC\u5355 */ } .card_banner, .plat_recom_carousel { display: none !important; } .card_banner, .plat_recom_carousel { /* \u5927\u5361 */ } .search_main { /* \u56FA\u5B9A\u641C\u7D22\u680F */ padding-bottom: 0; padding-bottom: initial; } .search_bright { margin-bottom: 36px; } .search_bright .search_logo_fixed { width: 36px !important; height: 36px !important; margin-left: 56px !important; background-color: rgba(0, 0, 0, 0) !important; background-image: var(--img-tieba-icon) !important; background-repeat: no-repeat !important; } .search_bright .search_logo_fixed { /* \u56FA\u5B9A\u641C\u7D22\u680F icon */ } .head_inner .search_logo { display: none !important; } .search_form { display: flex; align-items: center; justify-content: center; } .search_form form { margin-left: 0 !important; } .search_bright .search_inp_border, .search_bright .search_ipt { height: 40px !important; border: 2px solid var(--border-color) !important; background-color: var(--default-background) !important; color: var(--default-fore) !important; } .search_bright .search_inp_border, .search_bright .search_ipt { box-sizing: border-box; transition: 0.4s; } .search_bright .search_inp_border:hover, .search_bright .search_ipt:hover { border-color: var(--light-background) !important; } .search_bright .search_inp_border:focus, .search_bright .search_ipt:focus { border-color: var(--tieba-theme-color) !important; } .search_bright .search_btn { height: 40px !important; border: 1px solid var(--border-color) !important; background-color: var(--default-background) !important; box-shadow: none !important; color: var(--default-fore) !important; line-height: 40px !important; } .search_bright .search_btn { box-sizing: border-box; transition: 0.4s; } .search_bright .search_btn:hover { filter: brightness(1.1); } .search_bright .search_btn:active { filter: brightness(1.2); } .search_bright .search_btn_enter_ba { border: none !important; background-color: var(--tieba-theme-color) !important; color: var(--default-background) !important; } .search_bright .search_btn_enter_ba { border-bottom-left-radius: 0; border-top-left-radius: 0; } .search_main_fixed { display: none !important; } .search_main_fixed { border-color: var(--border-color); -webkit-backdrop-filter: blur(24px); backdrop-filter: blur(24px); background-color: var(--trans-default-background); box-shadow: 0 0 20px rgba(0, 0, 0, 0.1); } .card_top_theme { border: none !important; } #content { /* \u5BB9\u5668 */ width: 982px; } .card_top_theme .card_top { padding-left: 120px !important; } .card_top_theme .card_top { /* \u5427\u6807\u9898\u5BB9\u5668 */ } .card_title_fname { color: var(--tieba-theme-fore) !important; } .card_title_fname { /* \u5427\u6807\u9898 */ font-weight: bold; } .card_slogan { color: var(--light-fore) !important; } .card_slogan { /* \u5427 slogan */ } .islike_focus { background-color: var(--tieba-theme-color) !important; background-image: none !important; } .islike_focus { /* \u5173\u6CE8\u5427\u6309\u94AE */ } .cancel_focus { background: none !important; background-color: var(--tieba-theme-background) !important; } .cancel_focus { /* \u53D6\u5173\u5427\u6309\u94AE */ } .sign_box_bright, .sign_box_bright_hover { background: none !important; background-color: var(--tieba-theme-color) !important; } .sign_box_bright, .sign_box_bright_hover { /* \u7B7E\u5230\u6309\u94AE */ } .sign_box_bright_signed, .sign_box_bright_noclass_hover { background: none !important; background-color: var(--tieba-theme-background) !important; } .sign_box_bright_signed, .sign_box_bright_noclass_hover { /* \u7B7E\u5230\u6309\u94AE\uFF1A\u5DF2\u7B7E\u5230 */ } .sign_mod_bright .sign_keep_span { margin: 0 !important; margin: initial !important; text-align: center !important; } .forum_content { border-color: var(--border-color) !important; border-right: none !important; background: none !important; background-color: var(--elem-color) !important; } .forum_content { /* \u5BB9\u5668 */ } .nav_wrap { border-color: var(--border-color) !important; } .nav_wrap { /* tab */ } .nav_list li.focus { background: none !important; } .nav_list li.focus { /* \u7126\u70B9 tab */ } .nav_list a { color: inherit !important; } .j_tabnav_tab:hover { background: none; } .nav_list a:hover, .nav_list a:focus { background-color: var(--elem-color) !important; } .nav_list a:hover, .nav_list a:focus { /* tab hover */ } .search_internal_input { height: 24px !important; border-color: var(--border-color) !important; color: var(--default-fore) !important; } .search_internal_input { /* \u5427\u5185\u641C\u7D22 */ border-radius: 8px 0 0 8px; } .search_internal_btn { height: 26px !important; background-color: var(--tieba-theme-color) !important; background-image: none !important; vertical-align: middle !important; } .search_internal_btn { /* \u5427\u5185\u641C\u7D22\u6309\u94AE */ border-radius: 0 8px 8px 0; /* background-image: var(--svg-search) !important; background-size: 16px !important; background-repeat: no-repeat !important; background-position: center !important; */ } .search_internal_btn::after { color: var(--default-background); content: "search"; font-size: 18px; font-weight: bold; line-height: 26px; text-align: center; } .aside_region { border-bottom: none !important; } .aside_region { /* \u53F3\u4FA7\u5185\u5BB9 */ } .aside_region .region_header { color: var(--default-fore) !important; } .my_tieba .media_left, .my_tieba .media-left { border: none !important; } .my_tieba .media_left, .my_tieba .media-left { /* \u6211\u7684\u5934\u50CF */ } .my_current_forum .badge { border: 1px solid var(--border-color) !important; background-color: var(--light-background) !important; color: var(--default-fore) !important; } .my_current_forum .badge { /* \u6211\u7684\u7B49\u7EA7 */ } .my_current_forum .badge_name { color: var(--default-fore) !important; } .media_top img, .media-top img { /* \u53F3\u4FA7\u56FE\u7247 */ border-radius: 16px; } .aside_media_horizontal a, .aside-media-horizontal a { color: var(--tieba-theme-fore) !important; } .aside_media_horizontal a, .aside-media-horizontal a { /* \u53F3\u4FA7\u8D85\u94FE\u63A5 */ } .threadlist_bright li.thread_top_list_folder, .threadlist_bright li.thread_top_list_folder:hover { background-color: var(--very-light-background) !important; } .threadlist_bright li.thread_top_list_folder, .threadlist_bright li.thread_top_list_folder:hover { /* \u7F6E\u9876\u8D34 */ } .threadlist_bright > li { border: none !important; background-color: var(--default-background) !important; } .threadlist_bright > li { /* \u8D34\u5B50 */ } .threadlist_bright > li:hover { background-color: var(--trans-light-background) !important; } .j_th_tit { /* \u5E16\u5B50\u6807\u9898 */ color: var(--tieba-theme-fore); font-weight: bold; } .threadlist_bright .threadlist_abs_onlyline, .threadlist_bright .threadlist_abs { color: var(--default-fore) !important; } .threadlist_bright .threadlist_abs_onlyline, .threadlist_bright .threadlist_abs { /* \u5E16\u5B50\u6458\u8981 */ } /* \u9690\u85CF\u672A\u52A0\u8F7D\u5B8C\u6210\u7684\u56FE\u7247 */ .vpic_wrap img:not([style]) { opacity: 0; } .threadlist_bright .threadlist_media li { border-radius: 8px !important; } .threadlist_bright .threadlist_media li { /* \u8D34\u5B50\u56FE\u7247 hover */ } .threadlist_media li:hover .threadlist_pic_highlight { display: none !important; } .threadlist_media li:hover .threadlist_pic_highlight { border-radius: 8px; } .vpic_wrap img { border-radius: 8px; } .threadlist_bright .media_disp { border: none !important; background: none !important; } .threadlist_bright .threadlist_video { /* \u89C6\u9891\u9884\u89C8 */ border-radius: 8px; } .threadlist_rep_num { height: auto !important; height: initial !important; background: none !important; background-color: var(--tieba-theme-background) !important; } .threadlist_rep_num { /* \u56DE\u8D34\u6570 */ border-radius: 24px; color: var(--tieba-theme-fore); font-weight: bold; } .pagination-default .pagination-item { border: none !important; background-color: var(--light-background) !important; color: var(--light-fore) !important; } .pagination-default .pagination-item { border-radius: 8px; /* \u8DF3\u9875\u6309\u94AE */ } .pagination-default .pagination-current { border: none !important; background-color: var(--tieba-theme-color) !important; color: var(--default-background) !important; } .pagination-default .pagination-current { /* \u8DF3\u9875\u6309\u94AE\uFF1A\u5F53\u524D */ } .pagination-default .pagination-item:not(.pagination-current):hover { border: none !important; background-color: var(--trans-light-background) !important; } .pagination-default .pagination-item:not(.pagination-current):hover { /* \u8DF3\u9875\u6309\u94AE\uFF1Ahover */ } /* \u5E95\u90E8 */ #tb_rich_poster_container { width: 982px !important; background-color: var(--very-light-background) !important; } #tb_rich_poster_container { border-radius: 0 0 24px 24px; margin-left: -1px; } .tb_rich_poster .poster_body .editor_textfield { border-color: var(--border-color) !important; background-color: var(--default-background) !important; color: var(--default-fore) !important; } .tb_rich_poster .poster_body .editor_textfield { border-radius: 8px; /* \u6807\u9898\u6587\u672C\u6846 */ } .tb_rich_poster .poster_body .editor_textfield:focus { border-color: var(--tieba-theme-color) !important; } .old_style_wrapper { border-color: var(--border-color) !important; background-color: var(--elem-color) !important; } .old_style_wrapper { /* \u7F16\u8F91\u5668\u5BB9\u5668 */ } .old_style_wrapper .edui-editor-body { background: none !important; } .edui-container .edui-toolbar { background: none !important; } .edui-container .edui-toolbar { /* \u7F16\u8F91\u5668\u5DE5\u5177\u680F */ } .edui-editor-body .edui-body-container { border-color: var(--border-color) !important; background-color: var(--default-background) !important; } .edui-editor-body .edui-body-container { /* \u7F16\u8F91\u5668 */ } .frs_content_footer_pagelet { background: none !important; } .footer { display: none !important; } .icon_author { background-image: none !important; } .icon_author { /* \u7528\u6237\u56FE\u6807 */ } .icon_author::after { content: "person"; font-style: normal; } .icon_replyer { background-image: none !important; } .icon_replyer { /* \u56DE\u8D34\u56FE\u6807 */ } .icon_replyer::after { content: "comment"; font-style: normal; }@keyframes kf-fade-in-50de6ad2 { 0% { opacity: 0; } 100% { opacity: 1; } } @keyframes kf-fade-out-50de6ad2 { 0% { opacity: 1; } 100% { opacity: 0; } } @keyframes kf-dialog-in-50de6ad2 { 0% { opacity: 0; transform: scale(1.2); } 100% { opacity: 1; transform: scale(1); } } @keyframes kf-zoom-in-50de6ad2 { 0% { transform: scale(0.72); } 100% { transform: scale(1); } } @keyframes kf-fade-zoom-in-50de6ad2 { 0% { opacity: 0; transform: scale(0.72); } 100% { opacity: 1; transform: scale(1); } } html[data-v-50de6ad2] { padding: 0; margin: 0; text-align: justify; } body[data-v-50de6ad2] { overflow-x: hidden; overflow-y: scroll; overflow: hidden scroll; padding: 0; margin: 0; font-family: var(--code-zh); } body[no-scrollbar][data-v-50de6ad2] { overflow: hidden; } div[data-v-50de6ad2], p[data-v-50de6ad2] { margin: 0; } select[data-v-50de6ad2] { padding: 1px 8px; border: 1px solid var(--border-color); border-radius: 8px; cursor: pointer; } option[data-v-50de6ad2] { cursor: pointer; } option[data-v-50de6ad2]:checked { background-color: var(--tieba-theme-color); color: var(--default-background); } a[data-v-50de6ad2] { color: inherit; -webkit-text-decoration: none; text-decoration: none; word-break: break-all; } .dialogJ[data-v-50de6ad2] { position: fixed !important; top: 50% !important; left: 50% !important; } .dialogJ[data-v-50de6ad2] { transform: translate(-50%, -50%); } @keyframes stretch-50de6ad2 { 0% { padding: 2px 14px; } 100% { padding: 4px 14px; } } a[data-v-50de6ad2] { color: inherit; } .dropdown-menu[data-v-50de6ad2] { position: fixed; z-index: 1; display: flex; overflow: hidden; width: -moz-max-content; width: max-content; min-width: 120px; flex-direction: column; padding: 4px; border: 1px solid var(--border-color); border-radius: 8px; background-color: var(--default-background); box-shadow: 0 0 20px rgba(0, 0, 0, 0.08); animation: kf-fade-in-50de6ad2 0.2s; font-size: 14px; } .dropdown-menu .menu-item[data-v-50de6ad2] { display: flex; width: 100%; align-items: center; padding: 4px 14px; border: none; border-radius: 6px; animation: stretch-50de6ad2 0.2s cubic-bezier(0.22, 0.61, 0.36, 1); background: none; color: var(--default-fore); font-size: 14px; gap: 6px; transition: 0.2s; } .dropdown-menu .menu-item .menu-title[data-v-50de6ad2] { display: flex; width: 100%; gap: 12px; text-align: justify; } .dropdown-menu .menu-item .menu-title .menu-inner[data-v-50de6ad2] { margin-left: auto; color: var(--minimal-fore); } .dropdown-menu .menu-item[data-v-50de6ad2]:hover { background-color: var(--default-hover); } .dropdown-menu .menu-item[data-v-50de6ad2]:active { background-color: var(--default-active); } .dropdown-menu .menu-separator[data-v-50de6ad2] { width: calc(100% + 8px); height: 1px; margin: 6px 0 6px -4px; background-color: var(--border-color); } .blur-effect[data-v-50de6ad2] { background-color: var(--trans-default-background); } html:not([perf-saver]) .blur-effect[data-v-50de6ad2] { -webkit-backdrop-filter: blur(24px); backdrop-filter: blur(24px); } html.dark-theme .blur-effect[data-v-50de6ad2] { -webkit-backdrop-filter: blur(24px) brightness(0.8); backdrop-filter: blur(24px) brightness(0.8); }@keyframes kf-fade-in-4cad486c { 0% { opacity: 0; } 100% { opacity: 1; } } @keyframes kf-fade-out-4cad486c { 0% { opacity: 1; } 100% { opacity: 0; } } @keyframes kf-dialog-in-4cad486c { 0% { opacity: 0; transform: scale(1.2); } 100% { opacity: 1; transform: scale(1); } } @keyframes kf-zoom-in-4cad486c { 0% { transform: scale(0.72); } 100% { transform: scale(1); } } @keyframes kf-fade-zoom-in-4cad486c { 0% { opacity: 0; transform: scale(0.72); } 100% { opacity: 1; transform: scale(1); } } html[data-v-4cad486c] { padding: 0; margin: 0; text-align: justify; } body[data-v-4cad486c] { overflow-x: hidden; overflow-y: scroll; overflow: hidden scroll; padding: 0; margin: 0; font-family: var(--code-zh); } body[no-scrollbar][data-v-4cad486c] { overflow: hidden; } div[data-v-4cad486c], p[data-v-4cad486c] { margin: 0; } select[data-v-4cad486c] { padding: 1px 8px; border: 1px solid var(--border-color); border-radius: 8px; cursor: pointer; } option[data-v-4cad486c] { cursor: pointer; } option[data-v-4cad486c]:checked { background-color: var(--tieba-theme-color); color: var(--default-background); } a[data-v-4cad486c] { color: inherit; -webkit-text-decoration: none; text-decoration: none; word-break: break-all; } .dialogJ[data-v-4cad486c] { position: fixed !important; top: 50% !important; left: 50% !important; } .dialogJ[data-v-4cad486c] { transform: translate(-50%, -50%); } #nav-bar[data-v-4cad486c] { position: fixed; z-index: 1200; top: 0; left: 0; display: flex; width: 100%; height: 48px; align-items: center; justify-content: center; border-bottom: 1px solid var(--border-color); background-color: var(--trans-page-background); transition: 0.4s; box-shadow: 0 10px 10px rgba(0, 0, 0, 0.01); } html.dark-theme #nav-bar[data-v-4cad486c] { box-shadow: 0 10px 16px rgba(0, 0, 0, 0.2); } #nav-bar.fold[data-v-4cad486c] { transform: translateY(-32px); } #nav-bar.fold[data-v-4cad486c]::after { position: absolute; top: 48px; width: 100%; height: 32px; content: ""; } #nav-bar.fold[data-v-4cad486c]:hover { transform: translateY(0); } #nav-bar.fold:hover #nav-container[data-v-4cad486c] { display: flex; } #nav-bar.fold:hover #fold-bar[data-v-4cad486c] { display: none; } #nav-bar.fold #fold-bar[data-v-4cad486c] { position: absolute; bottom: 6.5px; width: 60px; height: 3px; border-radius: 3px; margin: 0 auto; background-color: var(--border-color); } #nav-bar.fold #nav-container[data-v-4cad486c] { display: none; } #nav-bar.hide[data-v-4cad486c] { box-shadow: none !important; } #nav-bar.hide[data-v-4cad486c] { transform: translateY(-100%); } #nav-bar.fixed-on-top[data-v-4cad486c] { position: absolute; } #nav-bar #nav-container[data-v-4cad486c] { display: flex; width: 100%; max-width: var(--content-max); height: 100%; justify-content: space-between; } .shrink-view #nav-bar #nav-container[data-v-4cad486c] { justify-content: space-around; } #nav-bar #nav-container .left-container .nav-title-container[data-v-4cad486c] { display: flex; height: 100%; align-items: center; padding: 0; border: none; background: none; gap: 8px; -webkit-text-decoration: underline 3px var(--tieba-theme-color); text-decoration: underline 3px var(--tieba-theme-color); } #nav-bar #nav-container .left-container .nav-title-container .nav-icon[data-v-4cad486c] { width: 36px; } #nav-bar #nav-container .left-container .nav-title-container .nav-title[data-v-4cad486c] { color: var(--default-fore); font-size: 20px; font-style: italic; font-weight: bold; transition: 0.2s; } #nav-bar #nav-container .left-container .nav-title-container:hover .nav-title[data-v-4cad486c], #nav-bar #nav-container .left-container .nav-title-container:active .nav-title[data-v-4cad486c], #nav-bar #nav-container .left-container .nav-title-container:focus .nav-title[data-v-4cad486c] { color: var(--highlight-fore); } #nav-bar #nav-container .middle-container[data-v-4cad486c] { display: flex; height: 100%; justify-content: center; } #nav-bar #nav-container .middle-container .middle-menu-trigger[data-v-4cad486c] { height: 100%; padding: 0 10px; border: none; color: var(--default-fore); font-size: 15px; font-weight: bold; text-decoration: underline; -webkit-text-decoration: underline solid rgba(0, 0, 0, 0); text-decoration: underline solid rgba(0, 0, 0, 0); text-decoration-thickness: 2px; -webkit-text-decoration: underline 2px rgba(0, 0, 0, 0); text-decoration: underline 2px rgba(0, 0, 0, 0); } #nav-bar #nav-container .middle-container .middle-menu-trigger[data-v-4cad486c]:hover { -webkit-text-decoration: underline 2px var(--tieba-theme-color); text-decoration: underline 2px var(--tieba-theme-color); } #nav-bar #nav-container .right-container[data-v-4cad486c] { display: flex; gap: 6px; } #nav-bar #nav-container .right-container .avatar-button[data-v-4cad486c] { display: flex; height: 100%; align-items: center; padding: 0; padding: 0 2px; border: 4px; } #nav-bar #nav-container .right-container .avatar-button .nav-avatar[data-v-4cad486c] { width: 32px; height: 32px; border-radius: 24px; box-shadow: 0 0 0 1px var(--border-color); transition: 0.4s; } #nav-bar #nav-container .right-container .avatar-button:hover > .nav-avatar[data-v-4cad486c] { box-shadow: 0 0 0 2px var(--tieba-theme-color); } #nav-bar #nav-container .right-container .menu-button[data-v-4cad486c] { padding: 2px 8px; border: none; color: var(--highlight-fore); font-size: 26px; } #nav-bar #nav-container .right-container .menu-button[data-v-4cad486c]:hover { color: var(--tieba-theme-color); } .menu-trigger[data-v-4cad486c] { border-radius: 0; background-color: transparent; } .menu-trigger[data-v-4cad486c]:hover { background-color: var(--default-hover); } .menu-trigger:hover > .nav-menu[data-v-4cad486c], .menu-trigger:active > .nav-menu[data-v-4cad486c] { display: block; } .nav-menu[data-v-4cad486c] { position: absolute; z-index: 1201; display: none; cursor: default; font-weight: normal; } .nav-menu[data-v-4cad486c]:hover { display: block; }.shield-container[data-v-64c498cf] { display: flex; width: 100%; flex-direction: column; gap: 16px; } .shield-container .words-container[data-v-64c498cf] { display: flex; flex-wrap: wrap; padding: 12px; border-radius: 12px; background-color: var(--trans-light-background); gap: 4px; } .shield-container .words-container .shield-elem[data-v-64c498cf] { display: flex; align-items: center; padding: 4px 8px; border: none; border-radius: 8px; font-size: 14px; gap: 4px; } .shield-container .words-container .shield-elem .icon[data-v-64c498cf] { color: var(--light-fore); } .shield-container .words-container .remove-all[data-v-64c498cf] { background-color: #d62929; color: var(--default-background); font-variation-settings: "FILL" 0; } .shield-container .empty-list-container[data-v-64c498cf] { color: var(--minimal-fore); } .shield-container .shield-controls[data-v-64c498cf] { display: flex; flex-direction: column; gap: 8px; } .shield-container .shield-controls .shield-input[data-v-64c498cf] { width: 100%; height: auto; max-height: 6em; box-sizing: border-box; padding: 6px; font-size: 16px; resize: none; } .shield-container .shield-controls .submit-controls[data-v-64c498cf] { display: flex; align-items: center; justify-content: flex-end; gap: 12px; } .shield-container .shield-controls .submit-controls label[data-v-64c498cf] { margin-left: 4px; -webkit-user-select: none; -moz-user-select: none; user-select: none; } .shield-container .shield-controls .submit-controls .regex-check[data-v-64c498cf] { margin-right: 8px; font-size: 16px; } .shield-container .shield-controls .submit-controls .submit-button[data-v-64c498cf] { padding: 4px 12px; font-size: 14px; font-weight: bold; } `); (function () { 'use strict'; var __defProp = Object.defineProperty; var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value; var __publicField = (obj, key, value) => { __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value); return value; }; (function(vue, marked2, elementPlus) { const cssLoader = (e) => { const t = GM_getResourceText(e); return GM_addStyle(t), t; }; cssLoader("element-plus/dist/index.css"); 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$g = Object.prototype; var hasOwnProperty$d = objectProto$g.hasOwnProperty; var nativeObjectToString$1 = objectProto$g.toString; var symToStringTag$1 = Symbol$1 ? Symbol$1.toStringTag : void 0; function getRawTag(value) { var isOwn = hasOwnProperty$d.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$f = Object.prototype; var nativeObjectToString = objectProto$f.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$1 = "[object Symbol]"; function isSymbol(value) { return typeof value == "symbol" || isObjectLike(value) && baseGetTag(value) == symbolTag$1; } function arrayMap(array, iteratee) { var index2 = -1, length = array == null ? 0 : array.length, result = Array(length); while (++index2 < length) { result[index2] = iteratee(array[index2], index2, array); } return result; } var isArray = Array.isArray; var INFINITY$3 = 1 / 0; var symbolProto$1 = Symbol$1 ? Symbol$1.prototype : void 0, symbolToString = symbolProto$1 ? symbolProto$1.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$3 ? "-0" : result; } var reWhitespace = /\s/; function trimmedEndIndex(string) { var index2 = string.length; while (index2-- && reWhitespace.test(string.charAt(index2))) { } return index2; } var reTrimStart$1 = /^\s+/; function baseTrim(string) { return string ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart$1, "") : 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 INFINITY$2 = 1 / 0, MAX_INTEGER = 17976931348623157e292; function toFinite(value) { if (!value) { return value === 0 ? value : 0; } value = toNumber(value); if (value === INFINITY$2 || value === -INFINITY$2) { var sign = value < 0 ? -1 : 1; return sign * MAX_INTEGER; } return value === value ? value : 0; } function toInteger(value) { var result = toFinite(value), remainder = result % 1; return result === result ? remainder ? result - remainder : result : 0; } function identity(value) { return value; } var asyncTag = "[object AsyncFunction]", funcTag$1 = "[object Function]", genTag = "[object GeneratorFunction]", proxyTag = "[object Proxy]"; function isFunction(value) { if (!isObject(value)) { return false; } var tag = baseGetTag(value); return tag == funcTag$1 || 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$2 = Function.prototype; var funcToString$2 = funcProto$2.toString; function toSource(func) { if (func != null) { try { return funcToString$2.call(func); } catch (e) { } try { return func + ""; } catch (e) { } } return ""; } var reRegExpChar = /[\\^$.*+?()[\]{}|]/g; var reIsHostCtor = /^\[object .+?Constructor\]$/; var funcProto$1 = Function.prototype, objectProto$e = Object.prototype; var funcToString$1 = funcProto$1.toString; var hasOwnProperty$c = objectProto$e.hasOwnProperty; var reIsNative = RegExp( "^" + funcToString$1.call(hasOwnProperty$c).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; } var WeakMap = getNative(root, "WeakMap"); var objectCreate = Object.create; var baseCreate = /* @__PURE__ */ function() { function object() { } return function(proto) { if (!isObject(proto)) { return {}; } if (objectCreate) { return objectCreate(proto); } object.prototype = proto; var result = new object(); object.prototype = void 0; return result; }; }(); function apply(func, thisArg, args) { switch (args.length) { case 0: return func.call(thisArg); case 1: return func.call(thisArg, args[0]); case 2: return func.call(thisArg, args[0], args[1]); case 3: return func.call(thisArg, args[0], args[1], args[2]); } return func.apply(thisArg, args); } function copyArray(source, array) { var index2 = -1, length = source.length; array || (array = Array(length)); while (++index2 < length) { array[index2] = source[index2]; } return array; } var HOT_COUNT = 800, HOT_SPAN = 16; var nativeNow = Date.now; function shortOut(func) { var count = 0, lastCalled = 0; return function() { var stamp = nativeNow(), remaining = HOT_SPAN - (stamp - lastCalled); lastCalled = stamp; if (remaining > 0) { if (++count >= HOT_COUNT) { return arguments[0]; } } else { count = 0; } return func.apply(void 0, arguments); }; } function constant(value) { return function() { return value; }; } var defineProperty = function() { try { var func = getNative(Object, "defineProperty"); func({}, "", {}); return func; } catch (e) { } }(); var baseSetToString = !defineProperty ? identity : function(func, string) { return defineProperty(func, "toString", { "configurable": true, "enumerable": false, "value": constant(string), "writable": true }); }; const baseSetToString$1 = baseSetToString; var setToString = shortOut(baseSetToString$1); function arrayEach(array, iteratee) { var index2 = -1, length = array == null ? 0 : array.length; while (++index2 < length) { if (iteratee(array[index2], index2, array) === false) { break; } } return array; } function baseFindIndex(array, predicate, fromIndex, fromRight) { var length = array.length, index2 = fromIndex + (fromRight ? 1 : -1); while (fromRight ? index2-- : ++index2 < length) { if (predicate(array[index2], index2, array)) { return index2; } } return -1; } function baseIsNaN(value) { return value !== value; } function strictIndexOf(array, value, fromIndex) { var index2 = fromIndex - 1, length = array.length; while (++index2 < length) { if (array[index2] === value) { return index2; } } return -1; } function baseIndexOf(array, value, fromIndex) { return value === value ? strictIndexOf(array, value, fromIndex) : baseFindIndex(array, baseIsNaN, fromIndex); } var MAX_SAFE_INTEGER$2 = 9007199254740991; var reIsUint = /^(?:0|[1-9]\d*)$/; function isIndex(value, length) { var type = typeof value; length = length == null ? MAX_SAFE_INTEGER$2 : length; return !!length && (type == "number" || type != "symbol" && reIsUint.test(value)) && (value > -1 && value % 1 == 0 && value < length); } function baseAssignValue(object, key, value) { if (key == "__proto__" && defineProperty) { defineProperty(object, key, { "configurable": true, "enumerable": true, "value": value, "writable": true }); } else { object[key] = value; } } function eq(value, other) { return value === other || value !== value && other !== other; } var objectProto$d = Object.prototype; var hasOwnProperty$b = objectProto$d.hasOwnProperty; function assignValue(object, key, value) { var objValue = object[key]; if (!(hasOwnProperty$b.call(object, key) && eq(objValue, value)) || value === void 0 && !(key in object)) { baseAssignValue(object, key, value); } } function copyObject(source, props, object, customizer) { var isNew = !object; object || (object = {}); var index2 = -1, length = props.length; while (++index2 < length) { var key = props[index2]; var newValue = customizer ? customizer(object[key], source[key], key, object, source) : void 0; if (newValue === void 0) { newValue = source[key]; } if (isNew) { baseAssignValue(object, key, newValue); } else { assignValue(object, key, newValue); } } return object; } var nativeMax$6 = Math.max; function overRest(func, start, transform) { start = nativeMax$6(start === void 0 ? func.length - 1 : start, 0); return function() { var args = arguments, index2 = -1, length = nativeMax$6(args.length - start, 0), array = Array(length); while (++index2 < length) { array[index2] = args[start + index2]; } index2 = -1; var otherArgs = Array(start + 1); while (++index2 < start) { otherArgs[index2] = args[index2]; } otherArgs[start] = transform(array); return apply(func, this, otherArgs); }; } function baseRest(func, start) { return setToString(overRest(func, start, identity), func + ""); } var MAX_SAFE_INTEGER$1 = 9007199254740991; function isLength(value) { return typeof value == "number" && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER$1; } function isArrayLike(value) { return value != null && isLength(value.length) && !isFunction(value); } function isIterateeCall(value, index2, object) { if (!isObject(object)) { return false; } var type = typeof index2; if (type == "number" ? isArrayLike(object) && isIndex(index2, object.length) : type == "string" && index2 in object) { return eq(object[index2], value); } return false; } function createAssigner(assigner) { return baseRest(function(object, sources) { var index2 = -1, length = sources.length, customizer = length > 1 ? sources[length - 1] : void 0, guard = length > 2 ? sources[2] : void 0; customizer = assigner.length > 3 && typeof customizer == "function" ? (length--, customizer) : void 0; if (guard && isIterateeCall(sources[0], sources[1], guard)) { customizer = length < 3 ? void 0 : customizer; length = 1; } object = Object(object); while (++index2 < length) { var source = sources[index2]; if (source) { assigner(object, source, index2, customizer); } } return object; }); } var objectProto$c = Object.prototype; function isPrototype(value) { var Ctor = value && value.constructor, proto = typeof Ctor == "function" && Ctor.prototype || objectProto$c; return value === proto; } function baseTimes(n, iteratee) { var index2 = -1, result = Array(n); while (++index2 < n) { result[index2] = iteratee(index2); } return result; } var argsTag$2 = "[object Arguments]"; function baseIsArguments(value) { return isObjectLike(value) && baseGetTag(value) == argsTag$2; } var objectProto$b = Object.prototype; var hasOwnProperty$a = objectProto$b.hasOwnProperty; var propertyIsEnumerable$1 = objectProto$b.propertyIsEnumerable; var isArguments = baseIsArguments(/* @__PURE__ */ function() { return arguments; }()) ? baseIsArguments : function(value) { return isObjectLike(value) && hasOwnProperty$a.call(value, "callee") && !propertyIsEnumerable$1.call(value, "callee"); }; function stubFalse() { return false; } var freeExports$2 = typeof exports == "object" && exports && !exports.nodeType && exports; var freeModule$2 = freeExports$2 && typeof module == "object" && module && !module.nodeType && module; var moduleExports$2 = freeModule$2 && freeModule$2.exports === freeExports$2; var Buffer$1 = moduleExports$2 ? root.Buffer : void 0; var nativeIsBuffer = Buffer$1 ? Buffer$1.isBuffer : void 0; var isBuffer = nativeIsBuffer || stubFalse; var argsTag$1 = "[object Arguments]", arrayTag$1 = "[object Array]", boolTag$1 = "[object Boolean]", dateTag$1 = "[object Date]", errorTag$1 = "[object Error]", funcTag = "[object Function]", mapTag$2 = "[object Map]", numberTag$1 = "[object Number]", objectTag$3 = "[object Object]", regexpTag$2 = "[object RegExp]", setTag$2 = "[object Set]", stringTag$2 = "[object String]", weakMapTag$1 = "[object WeakMap]"; var arrayBufferTag$1 = "[object ArrayBuffer]", dataViewTag$2 = "[object DataView]", float32Tag = "[object Float32Array]", float64Tag = "[object Float64Array]", int8Tag = "[object Int8Array]", int16Tag = "[object Int16Array]", int32Tag = "[object Int32Array]", uint8Tag = "[object Uint8Array]", uint8ClampedTag = "[object Uint8ClampedArray]", uint16Tag = "[object Uint16Array]", uint32Tag = "[object Uint32Array]"; var typedArrayTags = {}; typedArrayTags[float32Tag] = typedArrayTags[float64Tag] = typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = typedArrayTags[uint32Tag] = true; typedArrayTags[argsTag$1] = typedArrayTags[arrayTag$1] = typedArrayTags[arrayBufferTag$1] = typedArrayTags[boolTag$1] = typedArrayTags[dataViewTag$2] = typedArrayTags[dateTag$1] = typedArrayTags[errorTag$1] = typedArrayTags[funcTag] = typedArrayTags[mapTag$2] = typedArrayTags[numberTag$1] = typedArrayTags[objectTag$3] = typedArrayTags[regexpTag$2] = typedArrayTags[setTag$2] = typedArrayTags[stringTag$2] = typedArrayTags[weakMapTag$1] = false; function baseIsTypedArray(value) { return isObjectLike(value) && isLength(value.length) && !!typedArrayTags[baseGetTag(value)]; } function baseUnary(func) { return function(value) { return func(value); }; } var freeExports$1 = typeof exports == "object" && exports && !exports.nodeType && exports; var freeModule$1 = freeExports$1 && typeof module == "object" && module && !module.nodeType && module; var moduleExports$1 = freeModule$1 && freeModule$1.exports === freeExports$1; var freeProcess = moduleExports$1 && freeGlobal.process; var nodeUtil = function() { try { var types = freeModule$1 && freeModule$1.require && freeModule$1.require("util").types; if (types) { return types; } return freeProcess && freeProcess.binding && freeProcess.binding("util"); } catch (e) { } }(); var nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray; var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray; var objectProto$a = Object.prototype; var hasOwnProperty$9 = objectProto$a.hasOwnProperty; function arrayLikeKeys(value, inherited) { var isArr = isArray(value), isArg = !isArr && isArguments(value), isBuff = !isArr && !isArg && isBuffer(value), isType = !isArr && !isArg && !isBuff && isTypedArray(value), skipIndexes = isArr || isArg || isBuff || isType, result = skipIndexes ? baseTimes(value.length, String) : [], length = result.length; for (var key in value) { if ((inherited || hasOwnProperty$9.call(value, key)) && !(skipIndexes && // Safari 9 has enumerable `arguments.length` in strict mode. (key == "length" || // Node.js 0.10 has enumerable non-index properties on buffers. isBuff && (key == "offset" || key == "parent") || // PhantomJS 2 has enumerable non-index properties on typed arrays. isType && (key == "buffer" || key == "byteLength" || key == "byteOffset") || // Skip index properties. isIndex(key, length)))) { result.push(key); } } return result; } function overArg(func, transform) { return function(arg) { return func(transform(arg)); }; } var nativeKeys = overArg(Object.keys, Object); var objectProto$9 = Object.prototype; var hasOwnProperty$8 = objectProto$9.hasOwnProperty; function baseKeys(object) { if (!isPrototype(object)) { return nativeKeys(object); } var result = []; for (var key in Object(object)) { if (hasOwnProperty$8.call(object, key) && key != "constructor") { result.push(key); } } return result; } function keys(object) { return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object); } var objectProto$8 = Object.prototype; var hasOwnProperty$7 = objectProto$8.hasOwnProperty; var assign = createAssigner(function(object, source) { if (isPrototype(source) || isArrayLike(source)) { copyObject(source, keys(source), object); return; } for (var key in source) { if (hasOwnProperty$7.call(source, key)) { assignValue(object, key, source[key]); } } }); const assign$1 = assign; function nativeKeysIn(object) { var result = []; if (object != null) { for (var key in Object(object)) { result.push(key); } } return result; } var objectProto$7 = Object.prototype; var hasOwnProperty$6 = objectProto$7.hasOwnProperty; function baseKeysIn(object) { if (!isObject(object)) { return nativeKeysIn(object); } var isProto = isPrototype(object), result = []; for (var key in object) { if (!(key == "constructor" && (isProto || !hasOwnProperty$6.call(object, key)))) { result.push(key); } } return result; } function keysIn(object) { return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object); } 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$2 = "__lodash_hash_undefined__"; var objectProto$6 = Object.prototype; var hasOwnProperty$5 = objectProto$6.hasOwnProperty; function hashGet(key) { var data = this.__data__; if (nativeCreate) { var result = data[key]; return result === HASH_UNDEFINED$2 ? void 0 : result; } return hasOwnProperty$5.call(data, key) ? data[key] : void 0; } var objectProto$5 = Object.prototype; var hasOwnProperty$4 = objectProto$5.hasOwnProperty; function hashHas(key) { var data = this.__data__; return nativeCreate ? data[key] !== void 0 : hasOwnProperty$4.call(data, key); } var HASH_UNDEFINED$1 = "__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$1 : value; return this; } function Hash(entries) { var index2 = -1, length = entries == null ? 0 : entries.length; this.clear(); while (++index2 < length) { var entry = entries[index2]; 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$1 = Array.prototype; var splice = arrayProto$1.splice; function listCacheDelete(key) { var data = this.__data__, index2 = assocIndexOf(data, key); if (index2 < 0) { return false; } var lastIndex = data.length - 1; if (index2 == lastIndex) { data.pop(); } else { splice.call(data, index2, 1); } --this.size; return true; } function listCacheGet(key) { var data = this.__data__, index2 = assocIndexOf(data, key); return index2 < 0 ? void 0 : data[index2][1]; } function listCacheHas(key) { return assocIndexOf(this.__data__, key) > -1; } function listCacheSet(key, value) { var data = this.__data__, index2 = assocIndexOf(data, key); if (index2 < 0) { ++this.size; data.push([key, value]); } else { data[index2][1] = value; } return this; } function ListCache(entries) { var index2 = -1, length = entries == null ? 0 : entries.length; this.clear(); while (++index2 < length) { var entry = entries[index2]; 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 = getNative(root, "Map"); function mapCacheClear() { this.size = 0; this.__data__ = { "hash": new Hash(), "map": new (Map || 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(map2, key) { var data = map2.__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 index2 = -1, length = entries == null ? 0 : entries.length; this.clear(); while (++index2 < length) { var entry = entries[index2]; 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$3 = "Expected a function"; function memoize(func, resolver) { if (typeof func != "function" || resolver != null && typeof resolver != "function") { throw new TypeError(FUNC_ERROR_TEXT$3); } 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 = 1 / 0; function toKey(value) { if (typeof value == "string" || isSymbol(value)) { return value; } var result = value + ""; return result == "0" && 1 / value == -INFINITY$1 ? "-0" : result; } function baseGet(object, path) { path = castPath(path, object); var index2 = 0, length = path.length; while (object != null && index2 < length) { object = object[toKey(path[index2++])]; } return index2 && index2 == length ? object : void 0; } function get(object, path, defaultValue) { var result = object == null ? void 0 : baseGet(object, path); return result === void 0 ? defaultValue : result; } function arrayPush(array, values2) { var index2 = -1, length = values2.length, offset = array.length; while (++index2 < length) { array[offset + index2] = values2[index2]; } return array; } var spreadableSymbol = Symbol$1 ? Symbol$1.isConcatSpreadable : void 0; function isFlattenable(value) { return isArray(value) || isArguments(value) || !!(spreadableSymbol && value && value[spreadableSymbol]); } function baseFlatten(array, depth, predicate, isStrict, result) { var index2 = -1, length = array.length; predicate || (predicate = isFlattenable); result || (result = []); while (++index2 < length) { var value = array[index2]; if (depth > 0 && predicate(value)) { if (depth > 1) { baseFlatten(value, depth - 1, predicate, isStrict, result); } else { arrayPush(result, value); } } else if (!isStrict) { result[result.length] = value; } } return result; } var getPrototype = overArg(Object.getPrototypeOf, Object); var objectTag$2 = "[object Object]"; var funcProto = Function.prototype, objectProto$4 = Object.prototype; var funcToString = funcProto.toString; var hasOwnProperty$3 = objectProto$4.hasOwnProperty; var objectCtorString = funcToString.call(Object); function isPlainObject(value) { if (!isObjectLike(value) || baseGetTag(value) != objectTag$2) { return false; } var proto = getPrototype(value); if (proto === null) { return true; } var Ctor = hasOwnProperty$3.call(proto, "constructor") && proto.constructor; return typeof Ctor == "function" && Ctor instanceof Ctor && funcToString.call(Ctor) == objectCtorString; } var FUNC_ERROR_TEXT$2 = "Expected a function"; function before(n, func) { var result; if (typeof func != "function") { throw new TypeError(FUNC_ERROR_TEXT$2); } n = toInteger(n); return function() { if (--n > 0) { result = func.apply(this, arguments); } if (n <= 1) { func = void 0; } return result; }; } function baseSlice(array, start, end) { var index2 = -1, length = array.length; if (start < 0) { start = -start > length ? 0 : length + start; } end = end > length ? length : end; if (end < 0) { end += length; } length = start > end ? 0 : end - start >>> 0; start >>>= 0; var result = Array(length); while (++index2 < length) { result[index2] = array[index2 + start]; } return result; } function castSlice(array, start, end) { var length = array.length; end = end === void 0 ? length : end; return !start && end >= length ? array : baseSlice(array, start, end); } var rsAstralRange$2 = "\\ud800-\\udfff", rsComboMarksRange$3 = "\\u0300-\\u036f", reComboHalfMarksRange$3 = "\\ufe20-\\ufe2f", rsComboSymbolsRange$3 = "\\u20d0-\\u20ff", rsComboRange$3 = rsComboMarksRange$3 + reComboHalfMarksRange$3 + rsComboSymbolsRange$3, rsVarRange$2 = "\\ufe0e\\ufe0f"; var rsZWJ$2 = "\\u200d"; var reHasUnicode = RegExp("[" + rsZWJ$2 + rsAstralRange$2 + rsComboRange$3 + rsVarRange$2 + "]"); function hasUnicode(string) { return reHasUnicode.test(string); } function asciiToArray(string) { return string.split(""); } var rsAstralRange$1 = "\\ud800-\\udfff", rsComboMarksRange$2 = "\\u0300-\\u036f", reComboHalfMarksRange$2 = "\\ufe20-\\ufe2f", rsComboSymbolsRange$2 = "\\u20d0-\\u20ff", rsComboRange$2 = rsComboMarksRange$2 + reComboHalfMarksRange$2 + rsComboSymbolsRange$2, rsVarRange$1 = "\\ufe0e\\ufe0f"; var rsAstral = "[" + rsAstralRange$1 + "]", rsCombo$2 = "[" + rsComboRange$2 + "]", rsFitz$1 = "\\ud83c[\\udffb-\\udfff]", rsModifier$1 = "(?:" + rsCombo$2 + "|" + rsFitz$1 + ")", rsNonAstral$1 = "[^" + rsAstralRange$1 + "]", rsRegional$1 = "(?:\\ud83c[\\udde6-\\uddff]){2}", rsSurrPair$1 = "[\\ud800-\\udbff][\\udc00-\\udfff]", rsZWJ$1 = "\\u200d"; var reOptMod$1 = rsModifier$1 + "?", rsOptVar$1 = "[" + rsVarRange$1 + "]?", rsOptJoin$1 = "(?:" + rsZWJ$1 + "(?:" + [rsNonAstral$1, rsRegional$1, rsSurrPair$1].join("|") + ")" + rsOptVar$1 + reOptMod$1 + ")*", rsSeq$1 = rsOptVar$1 + reOptMod$1 + rsOptJoin$1, rsSymbol = "(?:" + [rsNonAstral$1 + rsCombo$2 + "?", rsCombo$2, rsRegional$1, rsSurrPair$1, rsAstral].join("|") + ")"; var reUnicode = RegExp(rsFitz$1 + "(?=" + rsFitz$1 + ")|" + rsSymbol + rsSeq$1, "g"); function unicodeToArray(string) { return string.match(reUnicode) || []; } function stringToArray(string) { return hasUnicode(string) ? unicodeToArray(string) : asciiToArray(string); } function arrayReduce(array, iteratee, accumulator, initAccum) { var index2 = -1, length = array == null ? 0 : array.length; if (initAccum && length) { accumulator = array[++index2]; } while (++index2 < length) { accumulator = iteratee(accumulator, array[index2], index2, array); } return accumulator; } function basePropertyOf(object) { return function(key) { return object == null ? void 0 : object[key]; }; } var deburredLetters = { // Latin-1 Supplement block. "À": "A", "Á": "A", "Â": "A", "Ã": "A", "Ä": "A", "Å": "A", "à": "a", "á": "a", "â": "a", "ã": "a", "ä": "a", "å": "a", "Ç": "C", "ç": "c", "Ð": "D", "ð": "d", "È": "E", "É": "E", "Ê": "E", "Ë": "E", "è": "e", "é": "e", "ê": "e", "ë": "e", "Ì": "I", "Í": "I", "Î": "I", "Ï": "I", "ì": "i", "í": "i", "î": "i", "ï": "i", "Ñ": "N", "ñ": "n", "Ò": "O", "Ó": "O", "Ô": "O", "Õ": "O", "Ö": "O", "Ø": "O", "ò": "o", "ó": "o", "ô": "o", "õ": "o", "ö": "o", "ø": "o", "Ù": "U", "Ú": "U", "Û": "U", "Ü": "U", "ù": "u", "ú": "u", "û": "u", "ü": "u", "Ý": "Y", "ý": "y", "ÿ": "y", "Æ": "Ae", "æ": "ae", "Þ": "Th", "þ": "th", "ß": "ss", // Latin Extended-A block. "Ā": "A", "Ă": "A", "Ą": "A", "ā": "a", "ă": "a", "ą": "a", "Ć": "C", "Ĉ": "C", "Ċ": "C", "Č": "C", "ć": "c", "ĉ": "c", "ċ": "c", "č": "c", "Ď": "D", "Đ": "D", "ď": "d", "đ": "d", "Ē": "E", "Ĕ": "E", "Ė": "E", "Ę": "E", "Ě": "E", "ē": "e", "ĕ": "e", "ė": "e", "ę": "e", "ě": "e", "Ĝ": "G", "Ğ": "G", "Ġ": "G", "Ģ": "G", "ĝ": "g", "ğ": "g", "ġ": "g", "ģ": "g", "Ĥ": "H", "Ħ": "H", "ĥ": "h", "ħ": "h", "Ĩ": "I", "Ī": "I", "Ĭ": "I", "Į": "I", "İ": "I", "ĩ": "i", "ī": "i", "ĭ": "i", "į": "i", "ı": "i", "Ĵ": "J", "ĵ": "j", "Ķ": "K", "ķ": "k", "ĸ": "k", "Ĺ": "L", "Ļ": "L", "Ľ": "L", "Ŀ": "L", "Ł": "L", "ĺ": "l", "ļ": "l", "ľ": "l", "ŀ": "l", "ł": "l", "Ń": "N", "Ņ": "N", "Ň": "N", "Ŋ": "N", "ń": "n", "ņ": "n", "ň": "n", "ŋ": "n", "Ō": "O", "Ŏ": "O", "Ő": "O", "ō": "o", "ŏ": "o", "ő": "o", "Ŕ": "R", "Ŗ": "R", "Ř": "R", "ŕ": "r", "ŗ": "r", "ř": "r", "Ś": "S", "Ŝ": "S", "Ş": "S", "Š": "S", "ś": "s", "ŝ": "s", "ş": "s", "š": "s", "Ţ": "T", "Ť": "T", "Ŧ": "T", "ţ": "t", "ť": "t", "ŧ": "t", "Ũ": "U", "Ū": "U", "Ŭ": "U", "Ů": "U", "Ű": "U", "Ų": "U", "ũ": "u", "ū": "u", "ŭ": "u", "ů": "u", "ű": "u", "ų": "u", "Ŵ": "W", "ŵ": "w", "Ŷ": "Y", "ŷ": "y", "Ÿ": "Y", "Ź": "Z", "Ż": "Z", "Ž": "Z", "ź": "z", "ż": "z", "ž": "z", "IJ": "IJ", "ij": "ij", "Œ": "Oe", "œ": "oe", "ʼn": "'n", "ſ": "s" }; var deburrLetter = basePropertyOf(deburredLetters); const deburrLetter$1 = deburrLetter; var reLatin = /[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g; var rsComboMarksRange$1 = "\\u0300-\\u036f", reComboHalfMarksRange$1 = "\\ufe20-\\ufe2f", rsComboSymbolsRange$1 = "\\u20d0-\\u20ff", rsComboRange$1 = rsComboMarksRange$1 + reComboHalfMarksRange$1 + rsComboSymbolsRange$1; var rsCombo$1 = "[" + rsComboRange$1 + "]"; var reComboMark = RegExp(rsCombo$1, "g"); function deburr(string) { string = toString(string); return string && string.replace(reLatin, deburrLetter$1).replace(reComboMark, ""); } var reAsciiWord = /[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g; function asciiWords(string) { return string.match(reAsciiWord) || []; } var reHasUnicodeWord = /[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/; function hasUnicodeWord(string) { return reHasUnicodeWord.test(string); } var rsAstralRange = "\\ud800-\\udfff", rsComboMarksRange = "\\u0300-\\u036f", reComboHalfMarksRange = "\\ufe20-\\ufe2f", rsComboSymbolsRange = "\\u20d0-\\u20ff", rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange, rsDingbatRange = "\\u2700-\\u27bf", rsLowerRange = "a-z\\xdf-\\xf6\\xf8-\\xff", rsMathOpRange = "\\xac\\xb1\\xd7\\xf7", rsNonCharRange = "\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf", rsPunctuationRange = "\\u2000-\\u206f", rsSpaceRange = " \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000", rsUpperRange = "A-Z\\xc0-\\xd6\\xd8-\\xde", rsVarRange = "\\ufe0e\\ufe0f", rsBreakRange = rsMathOpRange + rsNonCharRange + rsPunctuationRange + rsSpaceRange; var rsApos$1 = "['’]", rsBreak = "[" + rsBreakRange + "]", rsCombo = "[" + rsComboRange + "]", rsDigits = "\\d+", rsDingbat = "[" + rsDingbatRange + "]", rsLower = "[" + rsLowerRange + "]", rsMisc = "[^" + rsAstralRange + rsBreakRange + rsDigits + rsDingbatRange + rsLowerRange + rsUpperRange + "]", rsFitz = "\\ud83c[\\udffb-\\udfff]", rsModifier = "(?:" + rsCombo + "|" + rsFitz + ")", rsNonAstral = "[^" + rsAstralRange + "]", rsRegional = "(?:\\ud83c[\\udde6-\\uddff]){2}", rsSurrPair = "[\\ud800-\\udbff][\\udc00-\\udfff]", rsUpper = "[" + rsUpperRange + "]", rsZWJ = "\\u200d"; var rsMiscLower = "(?:" + rsLower + "|" + rsMisc + ")", rsMiscUpper = "(?:" + rsUpper + "|" + rsMisc + ")", rsOptContrLower = "(?:" + rsApos$1 + "(?:d|ll|m|re|s|t|ve))?", rsOptContrUpper = "(?:" + rsApos$1 + "(?:D|LL|M|RE|S|T|VE))?", reOptMod = rsModifier + "?", rsOptVar = "[" + rsVarRange + "]?", rsOptJoin = "(?:" + rsZWJ + "(?:" + [rsNonAstral, rsRegional, rsSurrPair].join("|") + ")" + rsOptVar + reOptMod + ")*", rsOrdLower = "\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])", rsOrdUpper = "\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])", rsSeq = rsOptVar + reOptMod + rsOptJoin, rsEmoji = "(?:" + [rsDingbat, rsRegional, rsSurrPair].join("|") + ")" + rsSeq; var reUnicodeWord = RegExp([ rsUpper + "?" + rsLower + "+" + rsOptContrLower + "(?=" + [rsBreak, rsUpper, "$"].join("|") + ")", rsMiscUpper + "+" + rsOptContrUpper + "(?=" + [rsBreak, rsUpper + rsMiscLower, "$"].join("|") + ")", rsUpper + "?" + rsMiscLower + "+" + rsOptContrLower, rsUpper + "+" + rsOptContrUpper, rsOrdUpper, rsOrdLower, rsDigits, rsEmoji ].join("|"), "g"); function unicodeWords(string) { return string.match(reUnicodeWord) || []; } function words(string, pattern, guard) { string = toString(string); pattern = guard ? void 0 : pattern; if (pattern === void 0) { return hasUnicodeWord(string) ? unicodeWords(string) : asciiWords(string); } return string.match(pattern) || []; } var rsApos = "['’]"; var reApos = RegExp(rsApos, "g"); function createCompounder(callback) { return function(string) { return arrayReduce(words(deburr(string).replace(reApos, "")), callback, ""); }; } var nativeIsFinite = root.isFinite, nativeMin$1 = Math.min; function createRound(methodName) { var func = Math[methodName]; return function(number, precision) { number = toNumber(number); precision = precision == null ? 0 : nativeMin$1(toInteger(precision), 292); if (precision && nativeIsFinite(number)) { var pair = (toString(number) + "e").split("e"), value = func(pair[0] + "e" + (+pair[1] + precision)); pair = (toString(value) + "e").split("e"); return +(pair[0] + "e" + (+pair[1] - precision)); } return func(number); }; } var nativeCeil$1 = Math.ceil, nativeMax$5 = Math.max; function chunk(array, size, guard) { if (guard ? isIterateeCall(array, size, guard) : size === void 0) { size = 1; } else { size = nativeMax$5(toInteger(size), 0); } var length = array == null ? 0 : array.length; if (!length || size < 1) { return []; } var index2 = 0, resIndex = 0, result = Array(nativeCeil$1(length / size)); while (index2 < length) { result[resIndex++] = baseSlice(array, index2, index2 += size); } return result; } function baseClamp(number, lower, upper) { if (number === number) { if (upper !== void 0) { number = number <= upper ? number : upper; } if (lower !== void 0) { number = number >= lower ? number : lower; } } return number; } function stackClear() { this.__data__ = new ListCache(); this.size = 0; } function stackDelete(key) { var data = this.__data__, result = data["delete"](key); this.size = data.size; return result; } function stackGet(key) { return this.__data__.get(key); } function stackHas(key) { return this.__data__.has(key); } var LARGE_ARRAY_SIZE = 200; function stackSet(key, value) { var data = this.__data__; if (data instanceof ListCache) { var pairs = data.__data__; if (!Map || pairs.length < LARGE_ARRAY_SIZE - 1) { pairs.push([key, value]); this.size = ++data.size; return this; } data = this.__data__ = new MapCache(pairs); } data.set(key, value); this.size = data.size; return this; } function Stack(entries) { var data = this.__data__ = new ListCache(entries); this.size = data.size; } Stack.prototype.clear = stackClear; Stack.prototype["delete"] = stackDelete; Stack.prototype.get = stackGet; Stack.prototype.has = stackHas; Stack.prototype.set = stackSet; var freeExports = typeof exports == "object" && exports && !exports.nodeType && exports; var freeModule = freeExports && typeof module == "object" && module && !module.nodeType && module; var moduleExports = freeModule && freeModule.exports === freeExports; var Buffer2 = moduleExports ? root.Buffer : void 0, allocUnsafe = Buffer2 ? Buffer2.allocUnsafe : void 0; function cloneBuffer(buffer, isDeep) { if (isDeep) { return buffer.slice(); } var length = buffer.length, result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length); buffer.copy(result); return result; } function arrayFilter(array, predicate) { var index2 = -1, length = array == null ? 0 : array.length, resIndex = 0, result = []; while (++index2 < length) { var value = array[index2]; if (predicate(value, index2, array)) { result[resIndex++] = value; } } return result; } function stubArray() { return []; } var objectProto$3 = Object.prototype; var propertyIsEnumerable = objectProto$3.propertyIsEnumerable; var nativeGetSymbols = Object.getOwnPropertySymbols; var getSymbols = !nativeGetSymbols ? stubArray : function(object) { if (object == null) { return []; } object = Object(object); return arrayFilter(nativeGetSymbols(object), function(symbol) { return propertyIsEnumerable.call(object, symbol); }); }; const getSymbols$1 = getSymbols; function baseGetAllKeys(object, keysFunc, symbolsFunc) { var result = keysFunc(object); return isArray(object) ? result : arrayPush(result, symbolsFunc(object)); } function getAllKeys(object) { return baseGetAllKeys(object, keys, getSymbols$1); } var DataView = getNative(root, "DataView"); var Promise$1 = getNative(root, "Promise"); var Set$1 = getNative(root, "Set"); var mapTag$1 = "[object Map]", objectTag$1 = "[object Object]", promiseTag = "[object Promise]", setTag$1 = "[object Set]", weakMapTag = "[object WeakMap]"; var dataViewTag$1 = "[object DataView]"; var dataViewCtorString = toSource(DataView), mapCtorString = toSource(Map), promiseCtorString = toSource(Promise$1), setCtorString = toSource(Set$1), weakMapCtorString = toSource(WeakMap); var getTag = baseGetTag; if (DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag$1 || Map && getTag(new Map()) != mapTag$1 || Promise$1 && getTag(Promise$1.resolve()) != promiseTag || Set$1 && getTag(new Set$1()) != setTag$1 || WeakMap && getTag(new WeakMap()) != weakMapTag) { getTag = function(value) { var result = baseGetTag(value), Ctor = result == objectTag$1 ? value.constructor : void 0, ctorString = Ctor ? toSource(Ctor) : ""; if (ctorString) { switch (ctorString) { case dataViewCtorString: return dataViewTag$1; case mapCtorString: return mapTag$1; case promiseCtorString: return promiseTag; case setCtorString: return setTag$1; case weakMapCtorString: return weakMapTag; } } return result; }; } const getTag$1 = getTag; var Uint8Array2 = root.Uint8Array; const Uint8Array$1 = Uint8Array2; function cloneArrayBuffer(arrayBuffer) { var result = new arrayBuffer.constructor(arrayBuffer.byteLength); new Uint8Array$1(result).set(new Uint8Array$1(arrayBuffer)); return result; } function cloneTypedArray(typedArray, isDeep) { var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer; return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length); } function initCloneObject(object) { return typeof object.constructor == "function" && !isPrototype(object) ? baseCreate(getPrototype(object)) : {}; } var HASH_UNDEFINED = "__lodash_hash_undefined__"; function setCacheAdd(value) { this.__data__.set(value, HASH_UNDEFINED); return this; } function setCacheHas(value) { return this.__data__.has(value); } function SetCache(values2) { var index2 = -1, length = values2 == null ? 0 : values2.length; this.__data__ = new MapCache(); while (++index2 < length) { this.add(values2[index2]); } } SetCache.prototype.add = SetCache.prototype.push = setCacheAdd; SetCache.prototype.has = setCacheHas; function arraySome(array, predicate) { var index2 = -1, length = array == null ? 0 : array.length; while (++index2 < length) { if (predicate(array[index2], index2, array)) { return true; } } return false; } function cacheHas(cache, key) { return cache.has(key); } var COMPARE_PARTIAL_FLAG$5 = 1, COMPARE_UNORDERED_FLAG$3 = 2; function equalArrays(array, other, bitmask, customizer, equalFunc, stack) { var isPartial = bitmask & COMPARE_PARTIAL_FLAG$5, arrLength = array.length, othLength = other.length; if (arrLength != othLength && !(isPartial && othLength > arrLength)) { return false; } var arrStacked = stack.get(array); var othStacked = stack.get(other); if (arrStacked && othStacked) { return arrStacked == other && othStacked == array; } var index2 = -1, result = true, seen = bitmask & COMPARE_UNORDERED_FLAG$3 ? new SetCache() : void 0; stack.set(array, other); stack.set(other, array); while (++index2 < arrLength) { var arrValue = array[index2], othValue = other[index2]; if (customizer) { var compared = isPartial ? customizer(othValue, arrValue, index2, other, array, stack) : customizer(arrValue, othValue, index2, array, other, stack); } if (compared !== void 0) { if (compared) { continue; } result = false; break; } if (seen) { if (!arraySome(other, function(othValue2, othIndex) { if (!cacheHas(seen, othIndex) && (arrValue === othValue2 || equalFunc(arrValue, othValue2, bitmask, customizer, stack))) { return seen.push(othIndex); } })) { result = false; break; } } else if (!(arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) { result = false; break; } } stack["delete"](array); stack["delete"](other); return result; } function mapToArray(map2) { var index2 = -1, result = Array(map2.size); map2.forEach(function(value, key) { result[++index2] = [key, value]; }); return result; } function setToArray(set) { var index2 = -1, result = Array(set.size); set.forEach(function(value) { result[++index2] = value; }); return result; } var COMPARE_PARTIAL_FLAG$4 = 1, COMPARE_UNORDERED_FLAG$2 = 2; var boolTag = "[object Boolean]", dateTag = "[object Date]", errorTag = "[object Error]", mapTag = "[object Map]", numberTag = "[object Number]", regexpTag$1 = "[object RegExp]", setTag = "[object Set]", stringTag$1 = "[object String]", symbolTag = "[object Symbol]"; var arrayBufferTag = "[object ArrayBuffer]", dataViewTag = "[object DataView]"; var symbolProto = Symbol$1 ? Symbol$1.prototype : void 0, symbolValueOf = symbolProto ? symbolProto.valueOf : void 0; function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) { switch (tag) { case dataViewTag: if (object.byteLength != other.byteLength || object.byteOffset != other.byteOffset) { return false; } object = object.buffer; other = other.buffer; case arrayBufferTag: if (object.byteLength != other.byteLength || !equalFunc(new Uint8Array$1(object), new Uint8Array$1(other))) { return false; } return true; case boolTag: case dateTag: case numberTag: return eq(+object, +other); case errorTag: return object.name == other.name && object.message == other.message; case regexpTag$1: case stringTag$1: return object == other + ""; case mapTag: var convert = mapToArray; case setTag: var isPartial = bitmask & COMPARE_PARTIAL_FLAG$4; convert || (convert = setToArray); if (object.size != other.size && !isPartial) { return false; } var stacked = stack.get(object); if (stacked) { return stacked == other; } bitmask |= COMPARE_UNORDERED_FLAG$2; stack.set(object, other); var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack); stack["delete"](object); return result; case symbolTag: if (symbolValueOf) { return symbolValueOf.call(object) == symbolValueOf.call(other); } } return false; } var COMPARE_PARTIAL_FLAG$3 = 1; var objectProto$2 = Object.prototype; var hasOwnProperty$2 = objectProto$2.hasOwnProperty; function equalObjects(object, other, bitmask, customizer, equalFunc, stack) { var isPartial = bitmask & COMPARE_PARTIAL_FLAG$3, objProps = getAllKeys(object), objLength = objProps.length, othProps = getAllKeys(other), othLength = othProps.length; if (objLength != othLength && !isPartial) { return false; } var index2 = objLength; while (index2--) { var key = objProps[index2]; if (!(isPartial ? key in other : hasOwnProperty$2.call(other, key))) { return false; } } var objStacked = stack.get(object); var othStacked = stack.get(other); if (objStacked && othStacked) { return objStacked == other && othStacked == object; } var result = true; stack.set(object, other); stack.set(other, object); var skipCtor = isPartial; while (++index2 < objLength) { key = objProps[index2]; var objValue = object[key], othValue = other[key]; if (customizer) { var compared = isPartial ? customizer(othValue, objValue, key, other, object, stack) : customizer(objValue, othValue, key, object, other, stack); } if (!(compared === void 0 ? objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack) : compared)) { result = false; break; } skipCtor || (skipCtor = key == "constructor"); } if (result && !skipCtor) { var objCtor = object.constructor, othCtor = other.constructor; if (objCtor != othCtor && ("constructor" in object && "constructor" in other) && !(typeof objCtor == "function" && objCtor instanceof objCtor && typeof othCtor == "function" && othCtor instanceof othCtor)) { result = false; } } stack["delete"](object); stack["delete"](other); return result; } var COMPARE_PARTIAL_FLAG$2 = 1; var argsTag = "[object Arguments]", arrayTag = "[object Array]", objectTag = "[object Object]"; var objectProto$1 = Object.prototype; var hasOwnProperty$1 = objectProto$1.hasOwnProperty; function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) { var objIsArr = isArray(object), othIsArr = isArray(other), objTag = objIsArr ? arrayTag : getTag$1(object), othTag = othIsArr ? arrayTag : getTag$1(other); objTag = objTag == argsTag ? objectTag : objTag; othTag = othTag == argsTag ? objectTag : othTag; var objIsObj = objTag == objectTag, othIsObj = othTag == objectTag, isSameTag = objTag == othTag; if (isSameTag && isBuffer(object)) { if (!isBuffer(other)) { return false; } objIsArr = true; objIsObj = false; } if (isSameTag && !objIsObj) { stack || (stack = new Stack()); return objIsArr || isTypedArray(object) ? equalArrays(object, other, bitmask, customizer, equalFunc, stack) : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack); } if (!(bitmask & COMPARE_PARTIAL_FLAG$2)) { var objIsWrapped = objIsObj && hasOwnProperty$1.call(object, "__wrapped__"), othIsWrapped = othIsObj && hasOwnProperty$1.call(other, "__wrapped__"); if (objIsWrapped || othIsWrapped) { var objUnwrapped = objIsWrapped ? object.value() : object, othUnwrapped = othIsWrapped ? other.value() : other; stack || (stack = new Stack()); return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack); } } if (!isSameTag) { return false; } stack || (stack = new Stack()); return equalObjects(object, other, bitmask, customizer, equalFunc, stack); } function baseIsEqual(value, other, bitmask, customizer, stack) { if (value === other) { return true; } if (value == null || other == null || !isObjectLike(value) && !isObjectLike(other)) { return value !== value && other !== other; } return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack); } var COMPARE_PARTIAL_FLAG$1 = 1, COMPARE_UNORDERED_FLAG$1 = 2; function baseIsMatch(object, source, matchData, customizer) { var index2 = matchData.length, length = index2, noCustomizer = !customizer; if (object == null) { return !length; } object = Object(object); while (index2--) { var data = matchData[index2]; if (noCustomizer && data[2] ? data[1] !== object[data[0]] : !(data[0] in object)) { return false; } } while (++index2 < length) { data = matchData[index2]; var key = data[0], objValue = object[key], srcValue = data[1]; if (noCustomizer && data[2]) { if (objValue === void 0 && !(key in object)) { return false; } } else { var stack = new Stack(); if (customizer) { var result = customizer(objValue, srcValue, key, object, source, stack); } if (!(result === void 0 ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG$1 | COMPARE_UNORDERED_FLAG$1, customizer, stack) : result)) { return false; } } } return true; } function isStrictComparable(value) { return value === value && !isObject(value); } function getMatchData(object) { var result = keys(object), length = result.length; while (length--) { var key = result[length], value = object[key]; result[length] = [key, value, isStrictComparable(value)]; } return result; } function matchesStrictComparable(key, srcValue) { return function(object) { if (object == null) { return false; } return object[key] === srcValue && (srcValue !== void 0 || key in Object(object)); }; } function baseMatches(source) { var matchData = getMatchData(source); if (matchData.length == 1 && matchData[0][2]) { return matchesStrictComparable(matchData[0][0], matchData[0][1]); } return function(object) { return object === source || baseIsMatch(object, source, matchData); }; } function baseHasIn(object, key) { return object != null && key in Object(object); } function hasPath(object, path, hasFunc) { path = castPath(path, object); var index2 = -1, length = path.length, result = false; while (++index2 < length) { var key = toKey(path[index2]); if (!(result = object != null && hasFunc(object, key))) { break; } object = object[key]; } if (result || ++index2 != length) { return result; } length = object == null ? 0 : object.length; return !!length && isLength(length) && isIndex(key, length) && (isArray(object) || isArguments(object)); } function hasIn(object, path) { return object != null && hasPath(object, path, baseHasIn); } var COMPARE_PARTIAL_FLAG = 1, COMPARE_UNORDERED_FLAG = 2; function baseMatchesProperty(path, srcValue) { if (isKey(path) && isStrictComparable(srcValue)) { return matchesStrictComparable(toKey(path), srcValue); } return function(object) { var objValue = get(object, path); return objValue === void 0 && objValue === srcValue ? hasIn(object, path) : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG); }; } function baseProperty(key) { return function(object) { return object == null ? void 0 : object[key]; }; } function basePropertyDeep(path) { return function(object) { return baseGet(object, path); }; } function property(path) { return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path); } function baseIteratee(value) { if (typeof value == "function") { return value; } if (value == null) { return identity; } if (typeof value == "object") { return isArray(value) ? baseMatchesProperty(value[0], value[1]) : baseMatches(value); } return property(value); } function createBaseFor(fromRight) { return function(object, iteratee, keysFunc) { var index2 = -1, iterable = Object(object), props = keysFunc(object), length = props.length; while (length--) { var key = props[fromRight ? length : ++index2]; if (iteratee(iterable[key], key, iterable) === false) { break; } } return object; }; } var baseFor = createBaseFor(); function baseForOwn(object, iteratee) { return object && baseFor(object, iteratee, keys); } function createBaseEach(eachFunc, fromRight) { return function(collection, iteratee) { if (collection == null) { return collection; } if (!isArrayLike(collection)) { return eachFunc(collection, iteratee); } var length = collection.length, index2 = fromRight ? length : -1, iterable = Object(collection); while (fromRight ? index2-- : ++index2 < length) { if (iteratee(iterable[index2], index2, iterable) === false) { break; } } return collection; }; } var baseEach = createBaseEach(baseForOwn); const baseEach$1 = baseEach; var now = function() { return root.Date.now(); }; var FUNC_ERROR_TEXT$1 = "Expected a function"; var nativeMax$4 = 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$4(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 defaultTo(value, defaultValue) { return value == null || value !== value ? defaultValue : value; } var objectProto = Object.prototype; var hasOwnProperty = objectProto.hasOwnProperty; var defaults = baseRest(function(object, sources) { object = Object(object); var index2 = -1; var length = sources.length; var guard = length > 2 ? sources[2] : void 0; if (guard && isIterateeCall(sources[0], sources[1], guard)) { length = 1; } while (++index2 < length) { var source = sources[index2]; var props = keysIn(source); var propsIndex = -1; var propsLength = props.length; while (++propsIndex < propsLength) { var key = props[propsIndex]; var value = object[key]; if (value === void 0 || eq(value, objectProto[key]) && !hasOwnProperty.call(object, key)) { object[key] = source[key]; } } } return object; }); function assignMergeValue(object, key, value) { if (value !== void 0 && !eq(object[key], value) || value === void 0 && !(key in object)) { baseAssignValue(object, key, value); } } function isArrayLikeObject(value) { return isObjectLike(value) && isArrayLike(value); } function safeGet(object, key) { if (key === "constructor" && typeof object[key] === "function") { return; } if (key == "__proto__") { return; } return object[key]; } function toPlainObject(value) { return copyObject(value, keysIn(value)); } function baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) { var objValue = safeGet(object, key), srcValue = safeGet(source, key), stacked = stack.get(srcValue); if (stacked) { assignMergeValue(object, key, stacked); return; } var newValue = customizer ? customizer(objValue, srcValue, key + "", object, source, stack) : void 0; var isCommon = newValue === void 0; if (isCommon) { var isArr = isArray(srcValue), isBuff = !isArr && isBuffer(srcValue), isTyped = !isArr && !isBuff && isTypedArray(srcValue); newValue = srcValue; if (isArr || isBuff || isTyped) { if (isArray(objValue)) { newValue = objValue; } else if (isArrayLikeObject(objValue)) { newValue = copyArray(objValue); } else if (isBuff) { isCommon = false; newValue = cloneBuffer(srcValue, true); } else if (isTyped) { isCommon = false; newValue = cloneTypedArray(srcValue, true); } else { newValue = []; } } else if (isPlainObject(srcValue) || isArguments(srcValue)) { newValue = objValue; if (isArguments(objValue)) { newValue = toPlainObject(objValue); } else if (!isObject(objValue) || isFunction(objValue)) { newValue = initCloneObject(srcValue); } } else { isCommon = false; } } if (isCommon) { stack.set(srcValue, newValue); mergeFunc(newValue, srcValue, srcIndex, customizer, stack); stack["delete"](srcValue); } assignMergeValue(object, key, newValue); } function baseMerge(object, source, srcIndex, customizer, stack) { if (object === source) { return; } baseFor(source, function(srcValue, key) { stack || (stack = new Stack()); if (isObject(srcValue)) { baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack); } else { var newValue = customizer ? customizer(safeGet(object, key), srcValue, key + "", object, source, stack) : void 0; if (newValue === void 0) { newValue = srcValue; } assignMergeValue(object, key, newValue); } }, keysIn); } function castFunction(value) { return typeof value == "function" ? value : identity; } function forEach(collection, iteratee) { var func = isArray(collection) ? arrayEach : baseEach$1; return func(collection, castFunction(iteratee)); } function baseFilter(collection, predicate) { var result = []; baseEach$1(collection, function(value, index2, collection2) { if (predicate(value, index2, collection2)) { result.push(value); } }); return result; } function filter(collection, predicate) { var func = isArray(collection) ? arrayFilter : baseFilter; return func(collection, baseIteratee(predicate)); } function createFind(findIndexFunc) { return function(collection, predicate, fromIndex) { var iterable = Object(collection); if (!isArrayLike(collection)) { var iteratee = baseIteratee(predicate); collection = keys(collection); predicate = function(key) { return iteratee(iterable[key], key, iterable); }; } var index2 = findIndexFunc(collection, predicate, fromIndex); return index2 > -1 ? iterable[iteratee ? collection[index2] : index2] : void 0; }; } var nativeMax$3 = Math.max; function findIndex(array, predicate, fromIndex) { var length = array == null ? 0 : array.length; if (!length) { return -1; } var index2 = fromIndex == null ? 0 : toInteger(fromIndex); if (index2 < 0) { index2 = nativeMax$3(length + index2, 0); } return baseFindIndex(array, baseIteratee(predicate), index2); } var find = createFind(findIndex); const find$1 = find; function baseFindKey(collection, predicate, eachFunc) { var result; eachFunc(collection, function(value, key, collection2) { if (predicate(value, key, collection2)) { result = key; return false; } }); return result; } function findKey(object, predicate) { return baseFindKey(object, baseIteratee(predicate), baseForOwn); } function baseMap(collection, iteratee) { var index2 = -1, result = isArrayLike(collection) ? Array(collection.length) : []; baseEach$1(collection, function(value, key, collection2) { result[++index2] = iteratee(value, key, collection2); }); return result; } function map(collection, iteratee) { var func = isArray(collection) ? arrayMap : baseMap; return func(collection, baseIteratee(iteratee)); } var INFINITY = 1 / 0; function flatMapDeep(collection, iteratee) { return baseFlatten(map(collection, iteratee), INFINITY); } function forOwn(object, iteratee) { return object && baseForOwn(object, castFunction(iteratee)); } var stringTag = "[object String]"; function isString(value) { return typeof value == "string" || !isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag; } function baseValues(object, props) { return arrayMap(props, function(key) { return object[key]; }); } function values(object) { return object == null ? [] : baseValues(object, keys(object)); } var nativeMax$2 = Math.max; function includes(collection, value, fromIndex, guard) { collection = isArrayLike(collection) ? collection : values(collection); fromIndex = fromIndex && !guard ? toInteger(fromIndex) : 0; var length = collection.length; if (fromIndex < 0) { fromIndex = nativeMax$2(length + fromIndex, 0); } return isString(collection) ? fromIndex <= length && collection.indexOf(value, fromIndex) > -1 : !!length && baseIndexOf(collection, value, fromIndex) > -1; } var nativeMax$1 = Math.max; function indexOf(array, value, fromIndex) { var length = array == null ? 0 : array.length; if (!length) { return -1; } var index2 = fromIndex == null ? 0 : toInteger(fromIndex); if (index2 < 0) { index2 = nativeMax$1(length + index2, 0); } return baseIndexOf(array, value, index2); } function isNil(value) { return value == null; } var regexpTag = "[object RegExp]"; function baseIsRegExp(value) { return isObjectLike(value) && baseGetTag(value) == regexpTag; } var nodeIsRegExp = nodeUtil && nodeUtil.isRegExp; var isRegExp = nodeIsRegExp ? baseUnary(nodeIsRegExp) : baseIsRegExp; var arrayProto = Array.prototype; var nativeJoin = arrayProto.join; function join(array, separator) { return array == null ? "" : nativeJoin.call(array, separator); } var kebabCase = createCompounder(function(result, word, index2) { return result + (index2 ? "-" : "") + word.toLowerCase(); }); var merge = createAssigner(function(object, source, srcIndex) { baseMerge(object, source, srcIndex); }); function once(func) { return before(2, func); } var MAX_SAFE_INTEGER = 9007199254740991; var nativeFloor = Math.floor; function baseRepeat(string, n) { var result = ""; if (!string || n < 1 || n > MAX_SAFE_INTEGER) { return result; } do { if (n % 2) { result += string; } n = nativeFloor(n / 2); if (n) { string += string; } } while (n); return result; } var nativeCeil = Math.ceil, nativeMax = Math.max; function baseRange(start, end, step, fromRight) { var index2 = -1, length = nativeMax(nativeCeil((end - start) / (step || 1)), 0), result = Array(length); while (length--) { result[fromRight ? length : ++index2] = start; start += step; } return result; } function createRange(fromRight) { return function(start, end, step) { if (step && typeof step != "number" && isIterateeCall(start, end, step)) { end = step = void 0; } start = toFinite(start); if (end === void 0) { end = start; start = 0; } else { end = toFinite(end); } step = step === void 0 ? start < end ? 1 : -1 : toFinite(step); return baseRange(start, end, step, fromRight); }; } var range = createRange(); const range$1 = range; function repeat(string, n, guard) { if (guard ? isIterateeCall(string, n, guard) : n === void 0) { n = 1; } else { n = toInteger(n); } return baseRepeat(toString(string), n); } var round = createRound("round"); function baseSome(collection, predicate) { var result; baseEach$1(collection, function(value, index2, collection2) { result = predicate(value, index2, collection2); return !result; }); return !!result; } function some(collection, predicate, guard) { var func = isArray(collection) ? arraySome : baseSome; if (guard && isIterateeCall(collection, predicate, guard)) { predicate = void 0; } return func(collection, baseIteratee(predicate)); } var MAX_ARRAY_LENGTH = 4294967295; function split(string, separator, limit) { if (limit && typeof limit != "number" && isIterateeCall(string, separator, limit)) { separator = limit = void 0; } limit = limit === void 0 ? MAX_ARRAY_LENGTH : limit >>> 0; if (!limit) { return []; } string = toString(string); if (string && (typeof separator == "string" || separator != null && !isRegExp(separator))) { separator = baseToString(separator); if (!separator && hasUnicode(string)) { return castSlice(stringToArray(string), 0, limit); } } return string.split(separator, limit); } function startsWith(string, target, position) { string = toString(string); position = position == null ? 0 : baseClamp(toInteger(position), 0, string.length); target = baseToString(target); return string.slice(position, position + target.length) == target; } function take(array, n, guard) { if (!(array && array.length)) { return []; } n = guard || n === void 0 ? 1 : toInteger(n); return baseSlice(array, 0, n < 0 ? 0 : n); } 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 }); } function charsStartIndex(strSymbols, chrSymbols) { var index2 = -1, length = strSymbols.length; while (++index2 < length && baseIndexOf(chrSymbols, strSymbols[index2], 0) > -1) { } return index2; } var reTrimStart = /^\s+/; function trimStart(string, chars, guard) { string = toString(string); if (string && (guard || chars === void 0)) { return string.replace(reTrimStart, ""); } if (!string || !(chars = baseToString(chars))) { return string; } var strSymbols = stringToArray(string), start = charsStartIndex(strSymbols, stringToArray(chars)); return castSlice(strSymbols, start).join(""); } function baseZipObject(props, values2, assignFunc) { var index2 = -1, length = props.length, valsLength = values2.length, result = {}; while (++index2 < length) { var value = index2 < valsLength ? values2[index2] : void 0; assignFunc(result, props[index2], value); } return result; } function zipObject(props, values2) { return baseZipObject(props || [], values2 || [], assignValue); } var _GM_addStyle = /* @__PURE__ */ (() => typeof GM_addStyle != "undefined" ? GM_addStyle : void 0)(); var _GM_deleteValue = /* @__PURE__ */ (() => typeof GM_deleteValue != "undefined" ? GM_deleteValue : void 0)(); var _GM_getValue = /* @__PURE__ */ (() => typeof GM_getValue != "undefined" ? GM_getValue : void 0)(); var _GM_info = /* @__PURE__ */ (() => typeof GM_info != "undefined" ? GM_info : void 0)(); var _GM_listValues = /* @__PURE__ */ (() => typeof GM_listValues != "undefined" ? GM_listValues : void 0)(); var _GM_openInTab = /* @__PURE__ */ (() => typeof GM_openInTab != "undefined" ? GM_openInTab : void 0)(); var _GM_setValue = /* @__PURE__ */ (() => typeof GM_setValue != "undefined" ? GM_setValue : void 0)(); const _sfc_main$m = /* @__PURE__ */ vue.defineComponent({ __name: "user-button", props: { isAnchor: { type: Boolean }, shadowBorder: { type: Boolean }, unsetBackground: { type: Boolean }, themeStyle: { type: Boolean }, noBorder: { type: [Boolean, String] } }, setup(__props) { const props = __props; return (_ctx, _cache) => { return vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(_ctx.isAnchor ? "a" : "button"), { class: vue.normalizeClass(["user-button", { "shadow-border": props.shadowBorder, "unset-background": props.unsetBackground, "theme-style": props.themeStyle, "no-border": props.noBorder, "no-border-all": props.noBorder === "all" }]), type: "button" }, { default: vue.withCtx(() => [ vue.renderSlot(_ctx.$slots, "default") ]), _: 3 }, 8, ["class"]); }; } }); const _withScopeId$9 = (n) => (vue.pushScopeId("data-v-db54e64e"), n = n(), vue.popScopeId(), n); const _hoisted_1$g = /* @__PURE__ */ _withScopeId$9(() => /* @__PURE__ */ vue.createElementVNode("span", null, "|", -1)); const _hoisted_2$f = { class: "toast-controls" }; const _sfc_main$l = /* @__PURE__ */ vue.defineComponent({ __name: "toast", props: { message: {}, duration: { default: 6e3 }, icon: {}, type: {}, blurEffect: { type: Boolean } }, setup(__props) { const props = __props; const toastContainer = vue.ref(); function chooseIcon() { if (props.icon) { return props.icon; } else { if (props.type) { switch (props.type) { case "basic": return void 0; case "check": return "check"; case "warning": return "warning"; case "error": return "error"; default: return void 0; } } } } return (_ctx, _cache) => { return vue.openBlock(), vue.createElementBlock("div", { ref_key: "toastContainer", ref: toastContainer, class: vue.normalizeClass(["toast-container", { "blur-effect": props.blurEffect }]) }, [ chooseIcon() ? (vue.openBlock(), vue.createElementBlock("div", { key: 0, class: vue.normalizeClass(["toast-icon icon", props.type]) }, vue.toDisplayString(chooseIcon()), 3)) : vue.createCommentVNode("", true), vue.createElementVNode("div", { class: vue.normalizeClass(["toast-content", props.type]) }, vue.toDisplayString(props.message), 3), _hoisted_1$g, vue.createElementVNode("div", _hoisted_2$f, [ vue.createVNode(_sfc_main$m, { class: "close-button icon", "shadow-border": true, onClick: vue.unref(passToNextToast) }, { default: vue.withCtx(() => [ vue.createTextVNode("close") ]), _: 1 }, 8, ["onClick"]) ]) ], 2); }; } }); const _export_sfc = (sfc, props) => { const target = sfc.__vccOpts || sfc; for (const [key, val] of props) { target[key] = val; } return target; }; const toastVue = /* @__PURE__ */ _export_sfc(_sfc_main$l, [["__scopeId", "data-v-db54e64e"]]); class Queue { constructor(items) { __publicField(this, "items", []); if (items) this.items = items; } /** 队首 */ peek() { return this.items[0] ? this.items[0] : void 0; } /** 队列长度 */ length() { return this.items.length; } /** 入队 */ enqueue(...elements) { this.items.push(...elements); } /** 出队 */ dequeue() { return this.items.shift(); } /** 队列是否为空 */ isEmpty() { return this.items.length === 0; } /** 清空队列 */ clear() { this.items = []; } } let publicToastInstance; let isToasting = false; const toastsQueue = new Queue(); function toast(props) { toastsQueue.enqueue([{ blurEffect: perfProfile.get() === "performance", ...props }, -1]); const interval = setInterval(() => { if (!isToasting) { const peek = toastsQueue.peek(); if (peek) renderToast(peek[0]); clearInterval(interval); } }, 100); } function renderToast(toastProps) { isToasting = true; publicToastInstance = vue.createApp(toastVue, toastProps); if (!document.getElementById( "t-wrapper" /* toast-wrapper */ )) { document.body.insertBefore(templateCreate("div", { "id": "t-wrapper" }), document.body.firstChild); } const vm = publicToastInstance.mount("#t-wrapper"); const peek = toastsQueue.peek(); if (!peek) return; peek[1] = setTimeout(() => { publicToastInstance.unmount(); toastsQueue.dequeue(); isToasting = false; }, toastProps.duration ? toastProps.duration : 6e3); return vm; } function passToNextToast() { publicToastInstance.unmount(); const peek = toastsQueue.peek(); if (peek) { clearTimeout(peek[1]); } toastsQueue.dequeue(); isToasting = false; const next = toastsQueue.peek(); if (next) { setTimeout(() => { renderToast(next[0]); }, 10); } } async function requestInstance(api) { try { const response = await api; if (response.ok) { return await response.json(); } } catch (error) { toast({ message: errorMessage(error), type: "error", duration: 6e3 }); } } const modules = []; function AllModules() { return modules; } function errorMessage(error) { const errBody = error.stack ? error.stack : error.message; return `${_GM_info.script.name} ${_GM_info.script.version} ${errBody}`; } function spawnOffsetTS(year = 0, month = 0, day = 0, hours = 0, minutes = 0, seconds = 0) { const now2 = /* @__PURE__ */ new Date(); const offset = new Date( now2.getFullYear() + year, now2.getMonth() + month, now2.getDate() + day, now2.getHours() + hours, now2.getMinutes() + minutes, now2.getSeconds() + seconds, 0 ); return offset.getTime(); } function requestBody(body) { let reqBody = ""; forOwn(body, (value, key) => { if (!value) value = ""; reqBody += `${key}=${value}&`; }); return reqBody.slice(0, -1); } function waitUntil(pred, timeout = Infinity) { return new Promise((resolve, reject) => { const startTime = performance.now(); let id = -1; function tick() { if (pred()) { cancelAnimationFrame(id); resolve(); } else if (performance.now() - startTime >= timeout) { cancelAnimationFrame(id); reject(new Error("等待超时")); console.warn("[waitUntil] 等待超时,该函数未在指定时间内得到期望值:", pred); console.trace("发生错误的调用者:"); if (_GM_info.script.version === "developer-only") { alert(`等待超时,该函数未在指定时间内得到期望值:${pred}`); } } else { id = requestAnimationFrame(tick); } } id = requestAnimationFrame(tick); }); } function isLiteralObject(obj) { return obj && typeof obj === "object" && !Array.isArray(obj); } function outputFile(filename, content) { const blob = new Blob([content], { type: "text/plain" }); const url = URL.createObjectURL(blob); const link = document.createElement("a"); link.href = url; link.download = filename; link.click(); URL.revokeObjectURL(url); } async function selectLocalFile(mode = "text") { return new Promise((resolve, reject) => { const input = document.createElement("input"); input.type = "file"; input.addEventListener("change", function() { if (!input.files) return; const file = input.files[0]; const reader = new FileReader(); reader.addEventListener("loadend", function() { const base64String = reader.result; resolve(base64String); }); reader.addEventListener("error", function() { reject(new Error()); }); switch (mode) { case "text": { reader.readAsText(file); break; } case "base64": { reader.readAsDataURL(file); break; } } }); input.click(); }); } const fadeInElems = []; const fadeInClass = "fade-in-elem"; function DOMS(...args) { const single = args[0] === true; const selector = single ? args[1] : args[0]; switch (args.length) { case 1: return document.querySelectorAll(selector); case 2: if (single) return document.querySelector(selector); if (args[1] instanceof Element) { return args[1].querySelectorAll(selector); } return document.querySelectorAll(selector); case 3: if (single) { if (args[2] instanceof Element) return args[2].querySelector(selector); return document.querySelector(selector); } return args[2].querySelectorAll(selector); case 4: return args[3].querySelector(selector); } } function afterHead(callbackfn) { callbackfn(); } function mergeNodeAttrs(node, attrs) { forOwn(attrs, (value, key) => { if (value !== node.getAttribute(key)) { if (isLiteralObject(value)) { node.setAttribute(key, JSON.stringify(attrs[key])); } else { node.setAttribute(key, attrs[key]); } } }); } function templateCreate(tag, attrs, children = [], doc) { const DOC = doc ? doc : document; const elem = DOC.createElement(tag); if (attrs) { mergeNodeAttrs(elem, attrs); } if (typeof children === "string") { elem.appendChild(document.createTextNode(children)); } else { forEach(children, (child) => { if (typeof child === "string") { elem.appendChild(document.createTextNode(child)); } else { elem.appendChild(child); } }); } return elem; } function findParent(el, trait, mode = "className") { const verifier = (() => { switch (mode) { case "selector": { const allValid = new Set(DOMS(trait)); return (parent) => { return allValid.has(parent); }; } case "className": { return (parent) => parent.classList.contains(trait) ?? false; } case "id": { return (parent) => parent.id === trait; } case "tagName": { return (parent) => parent.tagName.toLowerCase() === trait.toLowerCase(); } } })(); while (el.parentElement && !verifier(el.parentElement)) { el = el.parentElement; } return el.parentElement; } function fadeInLoad(selector) { DOMS(selector).forEach((elem) => { elem.classList.add(fadeInClass); elem.addEventListener("animationend", () => { elem.style.opacity = "1"; elem.classList.remove(fadeInClass); }); }); } class TbObserver { constructor(selector, options, initEvent) { __publicField(this, "selector"); __publicField(this, "options"); __publicField(this, "initEvent"); __publicField(this, "events", []); this.selector = selector; this.options = options; this.initEvent = initEvent; } observe() { const eventFuncs = () => { this.events.forEach((func) => { func(); }); }; if (typeof this.initEvent === "undefined") { eventFuncs(); } else { window.addEventListener(this.initEvent, eventFuncs); } const observer = new MutationObserver(eventFuncs); const obsElem = DOMS(this.selector)[0]; if (obsElem) observer.observe(obsElem, this.options); } addEvent(...events) { forEach(events, (event) => { if (this.events.includes(event)) return; if (typeof this.initEvent === "undefined") { event(); } else { window.addEventListener(this.initEvent, event); } this.events.push(event); }); } } const threadFloorsObserver = new TbObserver("#j_p_postlist", { childList: true }); const threadCommentsObserver = new TbObserver("#j_p_postlist", { childList: true, subtree: true }); const legacyIndexFeedsObserver = new TbObserver("#new_list", { childList: true }); const forumThreadsObserver = new TbObserver("#pagelet_frs-list\\/pagelet\\/thread", { attributes: true }, "load"); function loadPerf() { setPerfAttr(); setThreadLazyload(); } function setPerfAttr() { const perfAttr = { default: "perf-default", saver: "perf-saver", performance: "perf-performance" }; forEach(document.documentElement.attributes, (attr) => { if (startsWith(attr.name, "perf-")) { document.documentElement.removeAttribute(attr.name); } }); document.documentElement.toggleAttribute(perfAttr[perfProfile.get()]); } async function setThreadLazyload() { if (currentPageType() !== "thread") return; const lazyloadDiff = { default: 1e3, saver: 500, performance: 9999 }; await waitUntil(() => typeof datalazyload !== "undefined"); threadFloorsObserver.addEvent(setDiff); function setDiff() { setTimeout(() => { datalazyload.userConfig.diff = lazyloadDiff[perfProfile.get()]; }, 500); } } const defaultStyle = document.createElement("style"); defaultStyle.id = "default-stylesheet"; afterHead(() => { document.head.appendChild(defaultStyle); }); function parseMultiCSS(cssObject) { return flatMapDeep(cssObject, (value, key) => { return [ `${key} {`, ...flatMapDeep(value, (v, k) => `${startsWith(k, "--") ? k : kebabCase(k)}: ${v};`), "}", "" ]; }).join("\n"); } function parseCSSRule(cssRule) { let css = ""; forOwn(cssRule, (value, key) => { css += `${kebabCase(key)}:${value};`; }); return css; } function injectCSSList(css) { const cssElem = document.createElement("style"); cssElem.textContent = css; afterHead(() => { document.head.appendChild(cssElem); }); return cssElem; } function injectCSSRule(selector, cssRule) { if (selector === "") return; if (cssRule.length === 0) return; if (!defaultStyle.sheet) return; const css = `${selector}{${parseCSSRule(cssRule)}}`; return defaultStyle.sheet.insertRule(css); } function removeCSSRule(index2) { if (!defaultStyle.sheet) return; defaultStyle.sheet.deleteRule(index2); } function assignCSSRule(el, cssRule) { assign$1(el.style, cssRule); } function hexToRGBA(hex) { const hexValue = startsWith(hex, "#") ? trimStart(hex, "#") : hex; const tokenConverter = hexValue.length <= 4 ? (chunk2) => parseInt(repeat(chunk2[0], 2), 16) : (chunk2) => parseInt(join(chunk2, ""), 16); const chunkSize = hexValue.length <= 4 ? 1 : 2; const chunks = chunk(hexValue, chunkSize); return { r: tokenConverter(chunks[0]), g: tokenConverter(chunks[1]), b: tokenConverter(chunks[2]), a: chunks.length === 4 ? tokenConverter(chunks[3]) : 1 }; } function rgbaToHSLA(rgba) { const normalizedR = rgba.r / 255; const normalizedG = rgba.g / 255; const normalizedB = rgba.b / 255; const minValue = Math.min(normalizedR, normalizedG, normalizedB); const maxValue = Math.max(normalizedR, normalizedG, normalizedB); const lightness = (maxValue + minValue) / 2; let saturation; if (lightness <= 0.5) { saturation = (maxValue - minValue) / (maxValue + minValue); } else { saturation = (maxValue - minValue) / (2 - maxValue - minValue); } let hue; if (maxValue === minValue) { hue = 0; } else if (maxValue === normalizedR) { hue = (normalizedG - normalizedB) / (maxValue - minValue); } else if (maxValue === normalizedG) { hue = 2 + (normalizedB - normalizedR) / (maxValue - minValue); } else { hue = 4 + (normalizedR - normalizedG) / (maxValue - minValue); } hue *= 60; if (hue < 0) { hue += 360; } return { h: round(hue, 2), s: `${round(saturation * 100)}%`, l: `${round(lightness * 100)}%`, a: rgba.a }; } const darkPrefers = matchMedia("(prefers-color-scheme: dark)"); const dynCSSRules = { customBackground: () => { var _a; return findIndex(Array.from(((_a = defaultStyle.sheet) == null ? void 0 : _a.cssRules) ?? { length: 0 }), (rule) => rule.selectorText === "body.custom-background"); } }; async function loadDynamicCSS() { const theme = themeColor.get(); const darkRGBA = hexToRGBA(theme.dark); const lightRGBA = hexToRGBA(theme.light); const darkHSLA = rgbaToHSLA(darkRGBA); const lightHSLA = rgbaToHSLA(lightRGBA); const dynCSS = parseMultiCSS({ ":root": { "--content-max": wideScreen.get().noLimit ? "100vw" : `${wideScreen.get().maxWidth}px`, "--code-zh": `${join(userFonts.get(), ",")}`, "--code-monospace": `${join(monospaceFonts.get(), ",")}` }, "html.dark-theme": { "--tieba-theme-color": theme.dark, "--trans-tieba-theme-color": `rgb(${darkRGBA.r} ${darkRGBA.g} ${darkRGBA.b} / 80%)`, "--tieba-theme-hover": `hsl(${darkHSLA.h}deg ${parseInt(darkHSLA.s) + 40}% ${parseInt(darkHSLA.l) + 10}%)`, "--tieba-theme-active": `hsl(${darkHSLA.h}deg ${parseInt(darkHSLA.s) + 50}% ${parseInt(darkHSLA.l) + 20}%)`, "--tieba-theme-background": `rgb(${darkRGBA.r} ${darkRGBA.g} ${darkRGBA.b} / 24%)`, "--tieba-theme-fore": `hsl(${darkHSLA.h}deg 100% 75%)` }, "html.light-theme": { "--tieba-theme-color": theme.light, "--trans-tieba-theme-color": `rgb(${lightRGBA.r} ${lightRGBA.g} ${lightRGBA.b} / 80%)`, "--tieba-theme-hover": `hsl(${lightHSLA.h}deg ${parseInt(lightHSLA.s) - 40}% ${parseInt(lightHSLA.l) - 10}%)`, "--tieba-theme-active": `hsl(${lightHSLA.h}deg ${parseInt(lightHSLA.s) - 50}% ${parseInt(lightHSLA.l) - 20}%)`, "--tieba-theme-background": `rgb(${lightRGBA.r} ${lightRGBA.g} ${lightRGBA.b} / 24%)`, "--tieba-theme-fore": `hsl(${lightHSLA.h}deg 60% 32%)` } }); _GM_addStyle(dynCSS); } async function loadTiebaCSS() { switch (currentPageType()) { case "forum": Promise.resolve().then(() => tiebaForum); break; } document.head.appendChild(templateCreate("link", { type: "image/icon", rel: "shortcut icon", href: getResource("/assets/images/main/favicon32.ico") })); } async function setCustomBackground() { afterHead(function() { if (dynCSSRules.customBackground() !== -1) { removeCSSRule(dynCSSRules.customBackground()); } injectCSSRule("body.custom-background", { backgroundImage: `url('${customBackground.get()}') !important`, backgroundRepeat: "no-repeat !important", backgroundAttachment: "fixed !important", backgroundSize: "cover !important" }) ?? -1; waitUntil(() => !isNil(document.body)).then(function() { if (customBackground.get()) { document.body.classList.add("custom-background"); } else { document.body.classList.remove("custom-background"); } }); }); } const MainTitle = "Tieba Remix"; const Owner = "HacksawBlade"; const RepoName = "Tieba-Remix"; const GithubRepo = `https://github.com/${Owner}/${RepoName}`; const GiteeRepo = `https://gitee.com/${Owner}/${RepoName}`; const BaiduPassport = "https://passport.baidu.com/"; const REMIXED = "\n██████╗ ███████╗███╗ ███╗██╗██╗ ██╗███████╗██████╗ \n██╔══██╗██╔════╝████╗ ████║██║╚██╗██╔╝██╔════╝██╔══██╗\n██████╔╝█████╗ ██╔████╔██║██║ ╚███╔╝ █████╗ ██║ ██║\n██╔══██╗██╔══╝ ██║╚██╔╝██║██║ ██╔██╗ ██╔══╝ ██║ ██║\n██║ ██║███████╗██║ ╚═╝ ██║██║██╔╝ ██╗███████╗██████╔╝\n╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝╚═╝╚═╝ ╚═╝╚══════╝╚═════╝ \n"; class UserKey { constructor(key, defaultValue, listeners) { __publicField(this, "key"); __publicField(this, "defaultValue"); __publicField(this, "listeners"); this.key = key; this.defaultValue = defaultValue; this.listeners = { getter: (listeners == null ? void 0 : listeners.getter) ? [listeners.getter] : [], setter: (listeners == null ? void 0 : listeners.setter) ? [listeners.setter] : [] }; } dispatchEvent(event, value) { forEach(this.listeners[event], (listener) => listener(value)); } get() { let value = _GM_getValue(this.key, this.defaultValue); if (isLiteralObject(value) && keys(value).length < keys(this.defaultValue).length) { value = merge(this.defaultValue, value); } this.dispatchEvent("getter", value); return value; } set(value) { _GM_setValue(this.key, value); this.dispatchEvent("setter", value); } remove() { _GM_deleteValue(this.key); } merge(value) { if (isLiteralObject(value)) { const merged = { ...this.get(), ...value }; this.set(merged); this.dispatchEvent("setter", merged); } } mergeDeeply(value) { if (isLiteralObject(value)) { const merged = merge(this.get(), value); this.set(merged); this.dispatchEvent("setter", merged); } } } class UserKeyTS extends UserKey { constructor(key, defaultValue, invalidfn, listeners) { super(key, defaultValue, listeners); __publicField(this, "defaultInvalid", () => spawnOffsetTS(0, 0, 0, 12)); this.defaultInvalid = invalidfn ? invalidfn : this.defaultInvalid; } get() { let value = getUserValueTS(this.key, this.defaultValue); if (isLiteralObject(value) && keys(value).length < keys(this.defaultValue).length) { value = merge(this.defaultValue, value); } this.dispatchEvent("getter", value); return value; } /** * 设置时间敏感的用户 key * @param value 需要设置的值 * @param invalidTime 失效时间,默认为函数执行 12 小时后 */ set(value, invalidTime) { setUserValueTS(this.key, value, invalidTime ? invalidTime : this.defaultInvalid()); this.dispatchEvent("setter", value); } merge(value, invalidTime) { if (isLiteralObject(value)) { const merged = { ...this.get(), ...value }; this.set(merged, invalidTime ? invalidTime : this.defaultInvalid()); this.dispatchEvent("setter", merged); } } mergeDeeply(value, invalidTime) { if (isLiteralObject(value)) { const merged = merge(this.get(), value); this.set(merged, invalidTime ? invalidTime : this.defaultInvalid()); this.dispatchEvent("setter", merged); } } } const perfProfile = new UserKey("perfProfile", "default", { setter() { setPerfAttr(); } }); const disabledModules = new UserKey("disabledModules", []); const unreadFeeds = new UserKeyTS("unreadFeeds", []); const experimental = new UserKey("experimental", { moreBlurEffect: false, rasterEffect: false }); const latestRelease = new UserKeyTS("latestRelease", void 0); const updateConfig = new UserKey("updateConfig", { time: "6h", notify: true }); const showUpdateToday = new UserKeyTS("showUpdateToday", true, () => (/* @__PURE__ */ new Date()).setHours(0, 0, 0, 0) + 24 * 60 * 60 * 1e3); const ignoredTag = new UserKey("ignoredTag", ""); const themeType = new UserKey( "themeType", "auto", { setter(value) { setTheme(value); } } ); const compactLayout = new UserKey("compactLayout", false); const wideScreen = new UserKey("wideScreen", { maxWidth: 1080, noLimit: false }); const themeColor = new UserKey("themeColor", { light: "#614ec2", dark: "#7161c1" }); const customBackground = new UserKey( "customBackground", void 0, { setter() { setCustomBackground(); } } ); const pageExtension = new UserKey("pageExtension", { index: true, thread: true }); const userFonts = new UserKey("userFonts", []); const monospaceFonts = new UserKey("monospaceFonts", [ "Consolas", "JetBrains Mono", "Fira Code", "Menlo", "monospace" ]); const navBarHideMode = new UserKey("navBarHideMode", "fold"); function getUserValueTS(key, def) { try { const valueTS = _GM_getValue(key, { value: def, invalidTime: 0 }); const timeStamp = Date.now(); if (valueTS.invalidTime >= timeStamp) { return valueTS.value; } else { return def; } } catch (error) { return def; } } function setUserValueTS(key, value, invalidTime) { try { if (invalidTime) { _GM_setValue(key, { value, invalidTime }); } else { _GM_setValue(key, value); } } catch (error) { console.warn("setUserValueTS", error); } } const _sfc_main$k = /* @__PURE__ */ vue.defineComponent({ __name: "dialog-wrapper", props: { dialog: {}, childProps: {}, blurEffect: { type: Boolean, default: perfProfile.get() === "performance" && experimental.get().moreBlurEffect }, forced: { type: Boolean, default: false }, darker: { type: Boolean, default: true } }, emits: ["RequestClose"], setup(__props, { emit: __emit }) { const props = __props; const emit = __emit; const dialog = vue.createApp(props.dialog, props.childProps); vue.onMounted(() => { dialog.mount(".dialog-wrapper"); }); function onClick(e) { if (!includes(e.target.classList, "dialog-toggle")) return; if (!props.forced) { emit("RequestClose"); dialog.unmount(); unloadDialog(); } } return (_ctx, _cache) => { return vue.openBlock(), vue.createElementBlock("div", { class: vue.normalizeClass(["dialog-wrapper dialog-toggle", { "blur-effect": props.blurEffect, "darker": props.darker }]), onClick }, null, 2); }; } }); const dialogWrapperVue = /* @__PURE__ */ _export_sfc(_sfc_main$k, [["__scopeId", "data-v-f9deea39"]]); let publicDialogInstance; const dialogQueue = new Queue(); function renderComponent(root2, container, rootProps) { const app = vue.createApp(root2, rootProps); return { app, instance: app.mount(container) }; } const scrollbarWidth = once(function() { const temp = templateCreate("div"); assignCSSRule(temp, { width: "100px", height: "100px", overflow: "scroll", position: "absolute", top: "-9999px" }); document.body.appendChild(temp); const scrollbarWidth2 = temp.offsetWidth - temp.clientWidth; document.body.removeChild(temp); return scrollbarWidth2; }); function renderPage(root2, rootProps) { if (document.getElementsByTagName("body").length === 0) { document.documentElement.appendChild(templateCreate("body")); } removeDefault(); const page = templateCreate("div", { id: "remixed-page" }); document.body.insertBefore(page, document.body.firstChild); document.body.appendChild(templateCreate("div", { "id": "carousel_wrap" })); injectCSSRule("#spage-tbshare-container, .tbui_aside_float_bar", { display: "none !important" }); return renderComponent(root2, page, rootProps); } async function renderDialog(dialog, dialogProps, wrapperProps) { const dialogWrapper = document.getElementById("dialog-wrapper"); if (!dialogWrapper) { document.body.insertBefore(templateCreate("div", { "id": "dialog-wrapper" }), document.body.firstChild); } document.body.setAttribute("no-scrollbar", ""); document.body.style.paddingRight = `${scrollbarWidth()}px`; if (dialogWrapper == null ? void 0 : dialogWrapper.hasChildNodes()) { dialogQueue.enqueue([dialog, dialogProps, wrapperProps]); return new Promise((resolve) => { const peek = dialogQueue.peek(); const interval = setInterval(() => { if (dialogQueue.peek() !== peek) { clearInterval(interval); resolve(""); } }); }); } else { publicDialogInstance = vue.createApp(dialogWrapperVue, { dialog, childProps: dialogProps, ...wrapperProps }); const vm = publicDialogInstance.mount("#dialog-wrapper"); return vm; } } function unloadDialog() { document.body.removeAttribute("no-scrollbar"); document.body.style.paddingRight = ""; if (publicDialogInstance) publicDialogInstance.unmount(); const next = dialogQueue.dequeue(); if (next) { renderDialog(next[0], next[1], next[2]); } } function removeDefault() { forEach(document.head.children, (el) => { if (el && el.tagName.toUpperCase() === "LINK" && includes(el.getAttribute("href"), "static-common/style")) { el.remove(); } if (el && el.tagName.toUpperCase() === "SCRIPT" && includes(el.getAttribute("src"), "static-common/lib")) { el.remove(); } }); forEach(document.body.children, (el) => { if (el && el.tagName.toUpperCase() === "STYLE") { el.remove(); } if (el && el.tagName.toUpperCase() === "SCRIPT") { el.remove(); } if (el && el.tagName.toUpperCase() === "IFRAME") { el.remove(); } if (el && includes(el.className, "translatorExtension")) { el.remove(); } if (el && includes(el.className, "dialogJ")) { el.remove(); } }); } const _hoisted_1$f = { class: "message-box remove-default" }; const _hoisted_2$e = { key: 0, class: "title" }; const _hoisted_3$d = { key: 0, class: "message-controls" }; const _hoisted_4$c = { key: 1, class: "message-controls" }; const _sfc_main$j = /* @__PURE__ */ vue.defineComponent({ __name: "message-box", props: { title: {}, message: {}, type: { default: "basic" }, embedded: { type: Boolean }, buttons: {} }, emits: ["positive", "cancel", "negative"], setup(__props, { emit: __emit }) { const props = __props; const messageWrapper = vue.ref(); const messageContent = vue.ref(); const emit = __emit; vue.onMounted(function() { if (props.embedded) { if (messageContent.value) { if (props.message) { messageContent.value.innerHTML = props.message; } } } }); function defaultClose(event) { event(); emitAndClose("positive"); } function emitAndClose(emitName) { emit(emitName, emitName); setMessageInbox(emitName); unloadDialog(); } return (_ctx, _cache) => { return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$f, [ vue.createElementVNode("div", { ref_key: "messageWrapper", ref: messageWrapper, class: "message-wrapper" }, [ props.title ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_2$e, vue.toDisplayString(props.title), 1)) : vue.createCommentVNode("", true), props.message ? (vue.openBlock(), vue.createElementBlock("div", { key: 1, ref_key: "messageContent", ref: messageContent, class: "message markdown" }, vue.toDisplayString(props.message), 513)) : vue.createCommentVNode("", true), vue.renderSlot(_ctx.$slots, "default", {}, void 0, true) ], 512), !props.buttons || props.buttons.length === 0 ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_3$d, [ vue.createVNode(_sfc_main$m, { class: "message-button", "shadow-border": true, "theme-style": true, onClick: _cache[0] || (_cache[0] = ($event) => emitAndClose("positive")) }, { default: vue.withCtx(() => [ vue.createTextVNode(" 确定") ]), _: 1 }), props.type === "OkCancel" ? (vue.openBlock(), vue.createBlock(_sfc_main$m, { key: 0, class: "message-button", "shadow-border": true, onClick: _cache[1] || (_cache[1] = ($event) => emitAndClose("cancel")) }, { default: vue.withCtx(() => [ vue.createTextVNode("取消") ]), _: 1 })) : vue.createCommentVNode("", true), props.type === "forceTrueFalse" ? (vue.openBlock(), vue.createBlock(_sfc_main$m, { key: 1, class: "message-button", "shadow-border": true, onClick: _cache[2] || (_cache[2] = ($event) => emitAndClose("cancel")) }, { default: vue.withCtx(() => [ vue.createTextVNode("拒绝") ]), _: 1 })) : vue.createCommentVNode("", true) ])) : (vue.openBlock(), vue.createElementBlock("div", _hoisted_4$c, [ (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(props.buttons, (button, index2) => { return vue.openBlock(), vue.createBlock(_sfc_main$m, { class: "message-button", "shadow-border": "", "theme-style": index2 == 0, onClick: ($event) => defaultClose(button.event) }, { default: vue.withCtx(() => [ vue.createTextVNode(vue.toDisplayString(button.title), 1) ]), _: 2 }, 1032, ["theme-style", "onClick"]); }), 256)) ])) ]); }; } }); const messageBoxVue = /* @__PURE__ */ _export_sfc(_sfc_main$j, [["__scopeId", "data-v-8df9d0bc"]]); let messageInbox; function messageBox(messageBoxProps) { renderDialog(messageBoxVue, { message: messageBoxProps.message, title: messageBoxProps.title, type: messageBoxProps.type, embedded: messageBoxProps.embedded, buttons: messageBoxProps.buttons }, { forced: messageBoxProps.type === "forceTrueFalse" }); return new Promise((resolve) => { const interval = setInterval(() => { const inbox = getMessageInbox(); if (inbox) { clearInterval(interval); resolve(inbox); } }, 10); }); } function getMessageInbox() { const inbox = messageInbox; messageInbox = void 0; return inbox; } function setMessageInbox(value) { messageInbox = value; } marked2.marked.setOptions({}); function currentPageType() { if (location.hostname.toLowerCase() !== "tieba.baidu.com") return "unhandled"; const pathname = location.pathname.toLocaleLowerCase(); if (includes(["/", "/index.html"], pathname)) return "index"; if (/\/p\/\d+/.test(pathname)) return "thread"; if (pathname === "/f") return "forum"; if (pathname === "/home/main") return "user"; return "unhandled"; } async function getLatestReleaseFromGitee(forceUpdate = false) { if (latestRelease.get() && !forceUpdate) { return latestRelease.get(); } else { const TTL = function() { switch (updateConfig.get().time) { case "1h": return 1; case "3h": return 3; case "6h": return 6; case "never": return -1; } }(); if (TTL < 0) return; const updateUrl = `https://gitee.com/api/v5/repos/${Owner}/${RepoName}/releases/latest/`; const response = await fetch(updateUrl); if (response.ok) { const result = await response.json(); if (result.message) return; latestRelease.set(result, spawnOffsetTS(0, 0, 0, TTL)); return result; } else { return; } } } function checkUpdateAndNotify(showLatest = false) { if (updateConfig.get().time === "never") return; if (!updateConfig.get().notify) return; if (!showUpdateToday.get()) return; if (_GM_info.script.version === "developer-only") return; getLatestReleaseFromGitee().then((latestRelease2) => { if (latestRelease2 && latestRelease2.tag_name.slice(1) !== _GM_info.script.version) { if (ignoredTag.get() === latestRelease2.tag_name) return; messageBox({ title: latestRelease2.name, message: marked2.marked(latestRelease2.body), embedded: true, type: "OkCancel", buttons: [ { title: "安装", event() { installFromRelease(latestRelease2); } }, { title: "今日不再提醒", event() { showUpdateToday.set(false); } }, { title: "跳过该版本", event() { ignoredTag.set(latestRelease2.tag_name); } } ] }); } else { if (showLatest) messageBox({ title: "检查更新", message: "当前已是最新版本", type: "OkCancel" }); } }); } function installFromRelease(release) { function notFound() { toast({ message: "安装失败:未找到可用的资源", type: "error", duration: 6e3, blurEffect: true }); } if (!release.assets || release.assets.length <= 0) { notFound(); return; } const asset = function() { for (const asset2 of release.assets) { if (asset2.name && asset2.name.endsWith(".user.js")) { return asset2.browser_download_url; } } }(); if (asset) { _GM_openInTab(asset, { active: true }); } else { notFound(); return; } } function getResource(path) { return `${GiteeRepo}/raw/beta/${path}`; } function setTheme(theme) { switch (theme) { case "dark": darkTheme(); break; case "light": lightTheme(); break; case "auto": default: darkPrefers.matches ? darkTheme() : lightTheme(); break; } function lightTheme() { document.documentElement.classList.add("light-theme"); document.documentElement.classList.remove("dark-theme"); document.documentElement.classList.remove("dark"); } function darkTheme() { document.documentElement.classList.add("dark-theme"); document.documentElement.classList.remove("light-theme"); document.documentElement.classList.add("dark"); } } function backupUserConfigs() { const excluded = ["unreadFeeds", "latestRelease", "showUpdateToday"]; const userKeys = filter(_GM_listValues(), (key) => !includes(excluded, key)); const userValues = map(userKeys, (key) => { return _GM_getValue(key); }); const configs = zipObject(userKeys, userValues); outputFile(`tieba-remix-backup@${(/* @__PURE__ */ new Date()).getTime()}.json`, JSON.stringify(configs)); } async function restoreUserConfigs() { const backupData = JSON.parse(await selectLocalFile()); forEach(Object.entries(backupData), ([key, value]) => { _GM_setValue(key, value); }); } function parseUserModules(glob, callbackfn) { const modules2 = []; forEach(glob, async (moduleExport) => { const currentModule = (await moduleExport()).default; const disabledSet = new Set(disabledModules.get()); const runnable = (() => { if (currentModule.switch || currentModule.switch === void 0) { if (disabledSet.has(currentModule.id)) { return false; } if (currentModule.scope === true) { return true; } if (Array.isArray(currentModule.scope)) { for (let i = 0; i < currentModule.scope.length; i++) { const scope = currentModule.scope[i]; if (currentPageType() === scope) { return true; } } } if (currentModule.scope instanceof RegExp) { if (currentModule.scope.test(location.href)) { return true; } } } return false; })(); const runModule = { "immediately": () => { currentModule.entry(); }, "afterHead": () => { afterHead(() => { currentModule.entry(); }); }, "DOMLoaded": () => { document.addEventListener("DOMContentLoaded", () => { currentModule.entry(); }); }, "loaded": () => { window.addEventListener("load", () => { currentModule.entry(); }); } }; currentModule.runnable = runnable; if (runnable) { runModule[currentModule.runAt](); } modules2.push(currentModule); if (callbackfn) callbackfn(currentModule); }); return modules2; } const tiebaAPI = { /** 首页推荐 */ feedlist: () => fetch(`/f/index/feedlist?${requestBody({ "is_new": 1, "tag_id": "like" })}`), /** 用户头像 */ URL_profile: (portrait) => `https://gss0.baidu.com/7Ls0a8Sm2Q5IlBGlnYG/sys/portrait/item/${portrait}`, /** 当前登录用户信息 */ userInfo: (serverTime) => fetch(`/f/user/json_userinfo?${requestBody({ "_": serverTime })}`), /** 用户主页 */ URL_userHome: (portrait) => `/home/main?id=${portrait}&fr=index`, /** 搜索建议 */ suggestions: (query, encoding = "UTF-8", serverTime) => fetch(`/suggestion?${requestBody({ "query": query, "ie": encoding, "_": serverTime })}`), /** 贴吧热议 */ topicList: () => fetch("/hottopic/browse/topicList"), /** 吧跳转 */ URL_forum: (keywords, encoding = "utf-8") => `/f?ie=${encoding}&kw=${keywords}`, /** 未读消息 */ unreadMessages: (serverTime) => fetch(`/im/pcmsg/query/getAllUnread?${requestBody({ "_": serverTime })}`), /** 收藏更新 */ favUpdateNum: () => fetch("/sysmsg/userpost/queryStoreUpdateNum"), /** 获取 tbs */ tbs: () => fetch("/dc/common/tbs"), /** imgtbs */ imgtbs: () => fetch("/dc/common/imgtbs"), /** 获取已关注的吧 */ followedForums: () => fetch("/mo/q/newmoindex"), /** 更详细的用户信息 */ userInfoAll: (un, encoding = "UTF-8") => fetch(`/home/get/panel?${requestBody({ "ie": encoding, "un": un })}`), /** 关注吧 */ followForum: (tbs, forumId, forumName) => fetch(`/mo/q/favolike?${requestBody({ "itb_tbs": tbs, "fid": forumId, "kw": forumName })}`), /** 取消关注吧 */ unfollowForum: (tbs, forumName) => fetch(`/mo/q/delmylike?${requestBody({ "itb_tbs": tbs, "forum_name": forumName })}`), /** 通过 `uid` 查找用户 */ getUserFromUID: (uid) => fetch(`/im/pcmsg/query/getUserInfo?${requestBody({ "chatUid": uid })}`), /** 一键签到(Web 端) */ oneKeySign: () => fetch("/tbmall/onekeySignin1"), /** 热门动态 */ hotFeeds: (un, pn, encoding = "utf-8", serverTime) => fetch(`/mo/q/newmoindex?${requestBody({ "un": un, "pn": pn, "ie": encoding, "_": serverTime })}`), /** 获取当前页所有楼中楼数据 */ totalComments: (timeStamp, tid, fid, pn, lzOnly = false) => fetch(`/p/totalComment?${requestBody({ "t": timeStamp, "tid": tid, "fid": fid, "pn": pn, "see_lz": Number(lzOnly) })}`), /** 获取热门话题相关贴 */ topicRelatedThreads: (topicName, page, lastId, topicId, sortType = 1) => fetch(`/hottopic/browse/getTopicRelateThread?${requestBody({ "topic_name": topicName, "page_no": page, "last_id": lastId, "topic_id": topicId, "sort_type": sortType })}`), /** 将贴子添加到收藏 */ addFavoritePost: (tbs, tid, fid, encoding = "utf-8") => fetch("/i/submit/open_storethread", { method: "POST", body: JSON.stringify({ tbs, tid, fid, encoding }) }), forumSignInfo: (forumName, encoding = "utf-8") => fetch(`/sign/info?${requestBody({ "kw": forumName, "ie": encoding })}`), forumLoadMonth: (forumName, encoding = "utf-8") => fetch(`/sign/loadmonth?${requestBody({ "kw": forumName, "ie": encoding })}`), addFloor: (tbs, forum, forumId, threadId, content, floorNum, richText, ev = "comment", __type__ = "reply") => fetch("/f/commit/post/add", { method: "POST", body: JSON.stringify({ "ie": "utf-8", "kw": forum, "fid": forumId, "tid": threadId, "floor_num": floorNum, "rich_text": Number(richText), "tbs": tbs, "content": content, "basilisk": 1, "nick_name": PageData.user.user_nickname, "ev": ev, "biz[po]": PageData.user.portrait.split("?")[0], "__type__": __type__, "geetest_success": 0 }) }) }; function parsePostFromElement(elem) { const titleTagWrapperAnch = DOMS(".title-tag-wraper a", "a", elem)[0]; const threadNameWrapper = elem.getElementsByClassName("thread-name-wraper")[0]; const threadNameWrapperAnch = threadNameWrapper.getElementsByTagName("a")[0]; const listPostNum = DOMS(".list-post-num em", threadNameWrapper)[0]; const imgs = DOMS("img:not(.nicknameEmoji)", "img", elem); const nReply = elem.getElementsByClassName("n_reply")[0]; const nReplyAnch = nReply.getElementsByTagName("a")[0]; const imgArray = []; if (imgs.length > 0) { forEach(imgs, (img) => { imgArray.push({ thumb: img.src, original: defaultTo(img.getAttribute("original"), "") }); }); } return { id: defaultTo(elem.getAttribute("data-thread-id"), ""), forum: { id: defaultTo(elem.getAttribute("data-forum-id"), ""), name: titleTagWrapperAnch.title, href: titleTagWrapperAnch.href }, author: { portrait: split(nReplyAnch.href, /(\?id=)|&/)[2], name: transEmojiFromDOMString(nReplyAnch.innerHTML), href: nReplyAnch.href }, time: defaultTo(elem.getElementsByClassName("time")[0].textContent, ""), title: threadNameWrapperAnch.title, content: defaultTo(elem.getElementsByClassName("n_txt")[0].textContent, ""), replies: defaultTo(listPostNum.getAttribute("data-num"), 0), images: imgArray }; } function parsePostsFromString(responseString, callbackfn) { const feedList = []; const dom = new DOMParser().parseFromString(responseString, "text/html"); const threads = dom.getElementsByClassName("j_feed_li"); const undesired = "home-place-item"; forEach(threads, (thread2) => { if (thread2.classList.contains(undesired)) return; const post = parsePostFromElement(thread2); if (callbackfn) callbackfn(post); feedList.push(post); }); return feedList; } function transEmojiFromDOMString(str) { const indexRegex = new RegExp("(?<=nickemoji\\/).*?(?=.png)", "gi"); if (!str.match(indexRegex)) return str; const emojis = [ "º", "◎", "▫", "◆", "♤", "♀", "♂", "ლ", "♬", "☞", "☜", "✆", "☎", "♋", "Ω", "℃", "℉", "😄", "😍", "😘", "😚", "😜", "😳", "😁", "😞", "😢", "😂", "😫", "😨", "😱", "😡", "😷", "😲", "😈", "🐷", "🐶", "🐑", "🐵", "🐨", "🐴", "🐼", "🐯", "🍪", "🍺", "🍦", "🍭", "🍗", "🍼", "🔯", "🍒", "👀", "🐭", "😇", "😺", "😻", "🙀", "😿", "😹", "😾", "👹", "👺", "🌞", "🌝", "🌚", "🌜", "🌛", "👦", "👧", "🎎", "🌸", "🍀", "🌹", "🌻", "🌺", "🍁", "🌿", "🍄", "🌵", "🌴", "🌳", "🌰", "🌱", "🌼", "🌐", "🌙", "🌋", "🌌", "⛅", "⚡", "☔", "⛄", "🌀", "🌈", "🌊", "🔥", "✨", "🌟", "💥", "💫", "💢", "💦", "💧", "💤", "💨", "🎀", "🌂", "💄", "💕", "💖", "💞", "💘", "💌", "💋", "💝", "🎒", "🎓", "🎏", "🎃", "👻", "🎅", "🎄", "🎁", "🙈", "🐒", "💯", "👯", "💍" ]; const transformed = [ "1-1.png", "1-2.png", "1-4.png", "1-5.png", "1-6.png", "1-7.png", "1-8.png", "1-9.png", "1-10.png", "1-11.png", "1-12.png", "1-13.png", "1-14.png", "1-15.png", "1-16.png", "1-17.png", "1-18.png", "1-19.png", "1-20.png", "1-21.png", "1-22.png", "1-23.png", "1-24.png", "1-25.png", "1-26.png", "1-27.png", "1-28.png", "1-29.png", "1-30.png", "1-31.png", "1-32.png", "1-33.png", "1-34.png", "1-35.png", "2-1.png", "2-2.png", "2-3.png", "2-4.png", "2-5.png", "2-6.png", "2-7.png", "2-8.png", "2-9.png", "2-10.png", "2-11.png", "2-12.png", "2-13.png", "2-14.png", "2-15.png", "2-16.png", "2-17.png", "2-18.png", "2-19.png", "2-20.png", "2-21.png", "2-22.png", "2-23.png", "2-24.png", "2-25.png", "2-26.png", "2-27.png", "2-28.png", "2-29.png", "2-30.png", "2-31.png", "2-32.png", "2-33.png", "2-34.png", "2-35.png", "3-1.png", "3-2.png", "3-3.png", "3-4.png", "3-5.png", "3-6.png", "3-7.png", "3-8.png", "3-9.png", "3-10.png", "3-11.png", "3-12.png", "3-13.png", "3-14.png", "3-15.png", "3-16.png", "3-17.png", "3-18.png", "3-19.png", "3-20.png", "3-21.png", "3-22.png", "3-23.png", "3-24.png", "3-25.png", "3-26.png", "3-27.png", "3-28.png", "3-29.png", "3-30.png", "3-31.png", "3-32.png", "3-33.png", "3-34.png", "3-35.png", "4-1.png", "4-2.png", "4-3.png", "4-4.png", "4-5.png", "4-6.png", "4-7.png", "4-8.png", "4-9.png", "4-10.png", "4-11.png", "4-12.png", "4-13.png", "4-14.png", "4-15.png", "4-16.png", "4-17.png", "4-18.png", "4-19.png", "4-20.png", "4-21.png", "4-22.png", "4-23.png" ]; const arrIndex = str.match(indexRegex); arrIndex == null ? void 0 : arrIndex.forEach((index2) => { const emoji = emojis[transformed.indexOf(`${index2}.png`)]; const arrInner = split(str, RegExp( `]*?${index2}.png(?:[^>]*?)*>`, "g" )); str = join(arrInner, decodeURIComponent(emoji)); }); return str; } function levelToClass(level) { if (level < 0) return; if (level >= 1 && level <= 3) return "green"; if (level >= 4 && level <= 9) return "blue"; if (level >= 9 && level <= 15) return "yellow"; if (level >= 16) return "orange"; } const _sfc_main$i = {}; const _hoisted_1$e = { class: "block-panel blur-if-custom-background" }; function _sfc_render(_ctx, _cache) { return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$e, [ vue.renderSlot(_ctx.$slots, "default") ]); } const BlockPanel = /* @__PURE__ */ _export_sfc(_sfc_main$i, [["render", _sfc_render]]); /** * Flex Masonry * @author @HacksawBlade * @version 1.1 * @license MIT */ class FlexMasonry { constructor(options) { __publicField(this, "container"); __publicField(this, "items"); __publicField(this, "columnContainers", []); __publicField(this, "columnWidth"); __publicField(this, "gap"); __publicField(this, "options"); __publicField(this, "containerSelector"); __publicField(this, "itemsSelector"); __publicField(this, "columnSelector", ".masonry-column"); __publicField(this, "columnsHeight", []); __publicField(this, "fragment"); /** 当前布局的列数 */ __publicField(this, "_columns"); options = parseOptions(options); this.container = (() => { if (typeof options.container === "string") { this.containerSelector = options.container; const _container = document.querySelector(options.container); if (_container) { return _container; } else { throw new Error("Can't find container element."); } } else { return options.container; } })(); if (options.items) { this.items = (() => { if (typeof options.items === "string") { this.itemsSelector = options.items; const _items = document.querySelectorAll(options.items); if (_items) { return Array.from(_items); } else { return []; } } else { return options.items; } })().map((el) => { el.style.visibility = "hidden"; return { element: el, cachedHeight: el.clientHeight }; }); } else { this.items = []; } this.columnWidth = options.columnWidth; if (options.gap) { if (Array.isArray(options.gap)) { this.gap = options.gap; } else { this.gap = [options.gap, options.gap]; } } else { this.gap = [0, 0]; } this._columns = 0; this.options = options; this.initStyle(); if (options.autoExec) this.exec(); } initStyle() { this.container.style.display = "flex"; this.container.style.alignItems = "flex-start"; this.container.style.justifyContent = "center"; this.container.style.gap = `${this.gap[0]}px`; } get columns() { return this._columns; } /** 执行布局 */ exec() { this.calcColumns(); const originalPosition = window.scrollY; this.calc(); this.layout(); if (this.options.fixScrollOffset) window.scrollTo(0, originalPosition); } adjustWidth() { const elColumns = this.container.querySelectorAll(this.columnSelector); const width = (this.container.clientWidth - this.gap[0] * (this._columns - 1)) / this._columns; elColumns.forEach((el) => { el.style.width = `${width}px`; }); } /** 仅计算布局 */ calc() { this.columnsHeight = Array(this.calcColumns()).fill(0); const fragment = document.createDocumentFragment(); const _col = this.container.querySelectorAll(this.columnSelector); _col.forEach((col) => { col.remove(); }); this.columnContainers.length = 0; for (let i = 0; i < this._columns; i++) { this.columnContainers.push( fragment.appendChild(createNewElement("div", { class: this.columnSelector.substring(1), style: `width: ${(this.container.clientWidth - this.gap[0] * (this._columns - 1)) / this._columns}px;` })) ); } this.columnContainers.forEach((ccontainer) => { ccontainer.style.display = "flex"; ccontainer.style.flexDirection = "column"; ccontainer.style.gap = `${this.gap[1]}px`; }); this.items.forEach((el) => { this._appendElement(el); }); this.fragment = fragment; } /** * 仅应用布局 * * 调用该函数前需要已经至少计算过一次布局 */ layout() { if (this.fragment) { this.container.appendChild(this.fragment); } else { throw Error("Never conducted layout calculations before. You should use exec() or calc() first."); } } removeUnusedColumns() { const _col = this.container.querySelectorAll(this.columnSelector); _col.forEach((col) => { if (col.children.length === 0) col.remove(); }); } /** * 清空布局中的所有 `items` * * 该操作并不会将元素从文档中移除 */ clear() { this.items.length = 0; this.columnsHeight = Array(this.calcColumns()).fill(0); } /** 仅计算当前需要的列数 */ calcColumns() { this._columns = Math.ceil((this.container.clientWidth - this.columnWidth) / (this.columnWidth + this.gap[0])); return this._columns; } /** * 向布局中加入元素 * @param el 要添加的元素 */ appendElement(...elems) { const masonryElements = elems.map((el) => { return { element: el, cachedHeight: el.clientHeight }; }); this._appendElement(...masonryElements); this.items.push(...masonryElements); } _appendElement(...elems) { elems.forEach((el) => { const minIndex = this.columnsHeight.indexOf(Math.min(...this.columnsHeight)); this.columnsHeight[minIndex] += el.cachedHeight; this.columnContainers[minIndex].appendChild(el.element); el.element.style.visibility = "visible"; const clientHeight = this.columnContainers[minIndex].clientHeight; if (clientHeight !== 0) { this.columnsHeight[minIndex] = this.columnContainers[minIndex].clientHeight; } }); } /** * 在原有子项的基础上追加子项 * @param newItems 要添加的新元素,接受 CSS选择器 * @param interval 插入每个元素间的时间间隔 */ append(newItems, interval) { const appended = (() => { if (newItems) { if (typeof newItems === "string") { const _items = document.querySelectorAll(newItems); return Array.from(_items); } else { return newItems; } } else { if (this.itemsSelector) { const _items = Array.from(document.querySelectorAll(this.itemsSelector)); const appendCount = _items.length - this.items.length; if (appendCount > 0) { const _appended = _items.slice(-appendCount); return _appended; } } } })(); if (appended) { if (!interval || interval <= 0) { appended.forEach((el) => { this.appendElement(el); }); } else { appended.forEach((el, index2) => { setTimeout(() => { this.appendElement(el); }, interval * index2); }); } } } refreshContainer() { if (this.containerSelector) { const newContainer = document.querySelector(this.containerSelector); if (newContainer) { this.container = newContainer; } } } } function parseOptions(options) { options.gap = options.gap || 0; options.autoExec = options.autoExec === void 0 ? true : options.autoExec; options.fixScrollOffset = options.fixScrollOffset === void 0 ? false : options.fixScrollOffset; return options; } function createNewElement(tag, attrs) { const el = document.createElement(tag); for (const key in attrs) { el.setAttribute(key, attrs[key]); } return el; } class FrameInterval { constructor(callback) { __publicField(this, "id"); __publicField(this, "callback"); __publicField(this, "thenfn", () => void 0); __publicField(this, "stopCondition"); this.callback = callback ?? (() => void 0); this.stopCondition = () => false; this.id = requestAnimationFrame(this.tick.bind(this)); } tick() { if (this.stopCondition()) { this.cancel(); return; } this.callback(); this.id = requestAnimationFrame(this.tick.bind(this)); } cancel() { if (this.id) { cancelAnimationFrame(this.id); this.id = void 0; } this.thenfn(); } until(stopCondition) { this.stopCondition = stopCondition; return this; } then(thenfn) { this.thenfn = thenfn; } } const _sfc_main$h = /* @__PURE__ */ vue.defineComponent({ __name: "header-progress", props: { calc: { type: Function } }, setup(__props) { const props = __props; const headerProgress2 = vue.ref(); const valueRef = vue.ref(0); vue.onMounted(function() { if (headerProgress2.value) { new FrameInterval(calcValue).until(() => valueRef.value >= 100); } }); function calcValue() { valueRef.value = props.calc(); } return (_ctx, _cache) => { return vue.openBlock(), vue.createElementBlock("div", { ref_key: "headerProgress", ref: headerProgress2, id: "header-progress", class: vue.normalizeClass({ "complete": valueRef.value >= 100 }), style: vue.normalizeStyle(`width: ${valueRef.value}vw;`) }, null, 6); }; } }); const HeaderProgress = /* @__PURE__ */ _export_sfc(_sfc_main$h, [["__scopeId", "data-v-bedddce2"]]); const TOGGLE_ON_CLASS = "toggle-on"; const TOGGLE_OFF_CLASS = "toggle-off"; const _sfc_main$g = /* @__PURE__ */ vue.defineComponent({ __name: "toggle-button", props: { "modelValue": { type: Boolean, ...{ required: true, default: false } }, "modelModifiers": {} }, emits: ["update:modelValue"], setup(__props) { const model = vue.useModel(__props, "modelValue"); const toggleClass = vue.computed(() => { return model.value ? TOGGLE_ON_CLASS : TOGGLE_OFF_CLASS; }); function toggle() { model.value = !model.value; } return (_ctx, _cache) => { return vue.openBlock(), vue.createBlock(_sfc_main$m, { class: vue.normalizeClass(["toggle-button", toggleClass.value]), onClick: toggle }, { default: vue.withCtx(() => [ vue.renderSlot(_ctx.$slots, "default", {}, void 0, true) ]), _: 3 }, 8, ["class"]); }; } }); const ToggleButton = /* @__PURE__ */ _export_sfc(_sfc_main$g, [["__scopeId", "data-v-6728dba5"]]); const _withScopeId$8 = (n) => (vue.pushScopeId("data-v-b1e43839"), n = n(), vue.popScopeId(), n); const _hoisted_1$d = { class: "image-container dialog-toggle" }; const _hoisted_2$d = ["src"]; const _hoisted_3$c = /* @__PURE__ */ _withScopeId$8(() => /* @__PURE__ */ vue.createElementVNode("span", null, "|", -1)); const _hoisted_4$b = { class: "zoom-size" }; const _hoisted_5$a = /* @__PURE__ */ _withScopeId$8(() => /* @__PURE__ */ vue.createElementVNode("span", null, "|", -1)); const _hoisted_6$7 = /* @__PURE__ */ _withScopeId$8(() => /* @__PURE__ */ vue.createElementVNode("span", null, "|", -1)); const _hoisted_7$7 = ["src", "onClick"]; const MIN_SIZE = 0.1; const MAX_SIZE = 8; const VLI_THRESHOLD = 5; const VLI_WIDTH_SCALE = 2; const _sfc_main$f = /* @__PURE__ */ vue.defineComponent({ __name: "images-viewer", props: { content: {}, defaultIndex: { default: 0 } }, emits: ["RequestClose"], setup(__props, { emit: __emit }) { vue.useCssVars((_ctx) => ({ "487af7f1": imageTransition.value })); const props = __props; const imageArray = []; if (typeof props.content === "string") { imageArray.push(props.content); } else if (Array.isArray(props.content)) { imageArray.push(...props.content); } else { map(props.content.images, (value) => { imageArray.push(value.original); }); } const emit = __emit; const imageViewer = vue.ref(); const currImage = vue.ref(); const curr = vue.ref(props.defaultIndex); const scale = vue.ref(1); const deg = vue.ref(0); const imageLeft = vue.ref(void 0); const imageTop = vue.ref(void 0); const showControls = vue.ref(true); const vliMode = vue.ref(false); const imageStyle = vue.computed(() => { return { transform: `scale(${scale.value}) rotate(${deg.value}deg)`, left: `${imageLeft.value}px`, top: `${imageTop.value}px` }; }); const imageTransition = vue.computed(function() { return vliMode.value ? "all 0.4s ease, left 0s, top 0.1s ease-out" : "all 0.4s ease, left 0s, top 0s"; }); const imageProps = { naturalHeight: 0, scaledHeight: 0, vliMaxTop: 0, vliMinTop: 0 }; vue.onMounted(() => { var _a, _b, _c; let offsetX = 0, offsetY = 0; (_a = currImage.value) == null ? void 0 : _a.addEventListener("mousedown", (e) => { if (!currImage.value) return; e.preventDefault(); if (vliMode.value) return; offsetX = e.clientX - currImage.value.offsetLeft; offsetY = e.clientY - currImage.value.offsetTop; document.addEventListener("mousemove", moveHandler); }); document.addEventListener("mouseup", (e) => { e.preventDefault(); document.removeEventListener("mousemove", moveHandler); }); (_b = currImage.value) == null ? void 0 : _b.addEventListener("load", function() { if (!currImage.value) return; vliMode.value = false; (() => { if (currImage.value.naturalHeight < window.innerHeight && currImage.value.naturalWidth < window.innerWidth) { scale.value = 1; return; } if (currImage.value.naturalHeight / currImage.value.naturalWidth >= VLI_THRESHOLD) { vliMode.value = true; scale.value = window.innerWidth / VLI_WIDTH_SCALE / currImage.value.naturalWidth; imageLeft.value = void 0; return; } vliMode.value = false; scale.value = Math.min( window.innerWidth / currImage.value.naturalWidth, window.innerHeight / currImage.value.naturalHeight ); })(); imageProps.naturalHeight = currImage.value.naturalHeight; imageProps.scaledHeight = imageProps.naturalHeight * scale.value; imageProps.vliMaxTop = -(imageProps.naturalHeight * (1 - scale.value) / 2) + window.innerHeight / 2; imageProps.vliMinTop = -imageProps.scaledHeight - imageProps.naturalHeight * (1 - scale.value) / 2 + window.innerHeight / 2; currImage.value.classList.remove("changing"); }); (_c = currImage.value) == null ? void 0 : _c.addEventListener("transitionend", function() { var _a2, _b2, _c2; if (Math.abs(deg.value) >= 360) { (_a2 = currImage.value) == null ? void 0 : _a2.classList.add("changing"); deg.value = Math.abs(deg.value) % 360; (_b2 = currImage.value) == null ? void 0 : _b2.offsetHeight; (_c2 = currImage.value) == null ? void 0 : _c2.classList.remove("changing"); } }); function moveHandler(e) { if (!currImage.value) return; imageLeft.value = e.clientX - offsetX; imageTop.value = e.clientY - offsetY; } }); vue.watch(curr, function() { var _a; (_a = currImage.value) == null ? void 0 : _a.classList.add("changing"); deg.value = 0; imageLeft.value = void 0; imageTop.value = void 0; }); vue.watch(imageTop, function(newTop) { if (vliMode.value) { if (!currImage.value || !imageTop.value || !newTop) return; if (newTop > imageProps.vliMaxTop) { imageTop.value = imageProps.vliMaxTop; } if (newTop < imageProps.vliMinTop) { imageTop.value = imageProps.vliMinTop; } } }); vue.watch(vliMode, function(newMode) { if (newMode && currImage.value && !imageTop.value) { imageTop.value = Math.max( imageProps.vliMinTop, -(currImage.value.naturalHeight * (1 - scale.value) / 2) ); } }); function unload() { emit("RequestClose"); unloadDialog(); } function listBack() { if (curr.value > 0) curr.value--; } function listForward() { if (curr.value < imageArray.length - 1) curr.value++; } function zoomImage(delta) { scale.value += delta; if (scale.value < MIN_SIZE) { scale.value = MIN_SIZE; } if (scale.value > MAX_SIZE) { scale.value = MAX_SIZE; } } function rotateImage(delta) { deg.value += delta; } function imageWheel(event) { event.preventDefault(); if (!currImage.value) return; if (!vliMode.value) { zoomImage(-event.deltaY / 1e3); showControls.value = event.deltaY > 0; } else { if (!imageTop.value) imageTop.value = 0; imageTop.value += -event.deltaY / 1e3 * window.innerHeight; showControls.value = event.deltaY < 0; } } return (_ctx, _cache) => { return vue.openBlock(), vue.createElementBlock("div", { ref_key: "imageViewer", ref: imageViewer, class: "images-viewer dialog-toggle", onWheel: imageWheel }, [ vue.createElementVNode("div", _hoisted_1$d, [ vue.createElementVNode("img", { ref_key: "currImage", ref: currImage, class: "curr-image changing", src: imageArray[curr.value], style: vue.normalizeStyle(vue.unref(parseCSSRule)(imageStyle.value)) }, null, 12, _hoisted_2$d) ]), vue.createElementVNode("div", { class: vue.normalizeClass(["control-panel head-controls", { "hide": !showControls.value }]) }, [ vue.createVNode(ToggleButton, { class: "vli-mode head-btn icon", title: "长图模式", modelValue: vliMode.value, "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => vliMode.value = $event) }, { default: vue.withCtx(() => [ vue.createTextVNode("chrome_reader_mode ") ]), _: 1 }, 8, ["modelValue"]), _hoisted_3$c, vue.createVNode(_sfc_main$m, { class: "zoom-in head-btn icon", title: "缩小", onClick: _cache[1] || (_cache[1] = ($event) => zoomImage(0.5)) }, { default: vue.withCtx(() => [ vue.createTextVNode(" zoom_in ") ]), _: 1 }), vue.createVNode(_sfc_main$m, { class: "zoom-out head-btn icon", title: "放大", onClick: _cache[2] || (_cache[2] = ($event) => zoomImage(-0.5)) }, { default: vue.withCtx(() => [ vue.createTextVNode(" zoom_out ") ]), _: 1 }), vue.createElementVNode("span", _hoisted_4$b, vue.toDisplayString(vue.unref(round)(scale.value * 100) + "%"), 1), _hoisted_5$a, vue.createVNode(_sfc_main$m, { class: "turn-left head-btn icon", title: "逆时针旋转", onClick: _cache[3] || (_cache[3] = ($event) => rotateImage(-90)) }, { default: vue.withCtx(() => [ vue.createTextVNode(" undo ") ]), _: 1 }), vue.createVNode(_sfc_main$m, { class: "turn-right head-btn icon", title: "顺时针旋转", onClick: _cache[4] || (_cache[4] = ($event) => rotateImage(90)) }, { default: vue.withCtx(() => [ vue.createTextVNode(" redo ") ]), _: 1 }), _hoisted_6$7, vue.createVNode(_sfc_main$m, { class: "close head-btn icon", title: "关闭", onClick: unload }, { default: vue.withCtx(() => [ vue.createTextVNode(" close ") ]), _: 1 }) ], 2), imageArray.length > 1 ? (vue.openBlock(), vue.createBlock(_sfc_main$m, { key: 0, class: vue.normalizeClass(["control-panel back icon", { "hide": !showControls.value }]), title: "上一张", onClick: listBack }, { default: vue.withCtx(() => [ vue.createTextVNode(" chevron_left ") ]), _: 1 }, 8, ["class"])) : vue.createCommentVNode("", true), imageArray.length > 1 ? (vue.openBlock(), vue.createBlock(_sfc_main$m, { key: 1, class: vue.normalizeClass(["control-panel forward icon", { "hide": !showControls.value }]), title: "下一张", onClick: listForward }, { default: vue.withCtx(() => [ vue.createTextVNode(" chevron_right ") ]), _: 1 }, 8, ["class"])) : vue.createCommentVNode("", true), vue.createElementVNode("div", { class: vue.normalizeClass(["control-panel bottom-controls", { "hide": !showControls.value }]) }, [ (vue.openBlock(), vue.createElementBlock(vue.Fragment, null, vue.renderList(imageArray, (image, index2) => { return vue.createVNode(_sfc_main$m, { class: vue.normalizeClass(["bottom-btn", { "selected": index2 === curr.value }]), "no-border": "all" }, { default: vue.withCtx(() => [ vue.createElementVNode("img", { class: "image-list", src: image, alt: "", onClick: ($event) => curr.value = index2 }, null, 8, _hoisted_7$7) ]), _: 2 }, 1032, ["class"]); }), 64)) ], 2) ], 544); }; } }); const imagesViewerVue = /* @__PURE__ */ _export_sfc(_sfc_main$f, [["__scopeId", "data-v-b1e43839"]]); function getFloatCoord(...args) { if (args[0] instanceof HTMLElement) return getFloatCoord1(args[0], args[1], args[2]); if (typeof args[0] === "number" && typeof args[1] === "number") return getFloatCoord2(args[0], args[1], args[2], args[3]); return { x: 0, y: 0 }; } function getFloatCoord1(el, coord, mode) { const clientRect = el.getBoundingClientRect(); return getFloatCoord2(clientRect.width, clientRect.height, coord, mode); } function getFloatCoord2(width, height, coord, mode) { const offsetX = (() => { switch (mode) { case "baseline": return 0; case "middle": return width / 2; } })(); const x = Math.min( coord.x - offsetX, window.innerWidth - scrollbarWidth() - Math.ceil(width) // 修正误差 ); const y = Math.ceil(coord.y + height) > window.innerHeight ? coord.y - height : coord.y; return { x, y }; } function renderJSX(jsxel, parent) { const vnode = vue.createVNode(jsxel); vue.render(vnode, parent); return { el: parent.firstChild, vnode }; } function insertJSX(jsxel, parent, position) { const tempContainer = templateCreate("div"); const vnode = renderJSX(jsxel, parent.appendChild(tempContainer)); forEach(tempContainer.children, (el) => { parent.insertBefore(el, position ?? null); }); tempContainer.remove(); return vnode; } function appendJSX(jsxel, parent) { const tempContainer = templateCreate("div"); const vnode = renderJSX(jsxel, parent.appendChild(tempContainer)); forEach(tempContainer.children, (el) => { parent.appendChild(el); }); tempContainer.remove(); return vnode; } function imagesViewer(props) { renderDialog(imagesViewerVue, props, { blurEffect: false }); } function headerProgress(props, delay = 2e3, timeout = 1e4) { const progressBar = vue.createVNode(HeaderProgress, { "calc": props.calc }, null); const rendered = insertJSX(progressBar, document.body, document.body.firstChild ?? void 0); const timeoutTimer = setTimeout(() => { rendered.el.remove(); }, timeout); waitUntil(() => rendered.el.style.width === "100vw", timeout).then(function() { setTimeout(() => { rendered.el.remove(); clearTimeout(timeoutTimer); }, delay); }); return rendered; } function bindFloatMessage(target, message, delay = 500) { const CursorMargin = 4; if (DOMS(".float-message").length <= 0) { appendJSX(vue.createVNode("div", { "class": "float-message" }, [vue.createVNode("div", { "class": "float-content" }, null)]), document.body); } const floatMessage = DOMS(true, ".float-message", "div"); let timeout = -1; target.addEventListener("mouseenter", function() { if (timeout >= 0) clearTimeout(timeout); }); target.addEventListener("mouseleave", function() { if (timeout >= 0) clearTimeout(timeout); floatMessage.style.display = "none"; }); target.addEventListener("mousemove", function(e) { if (timeout >= 0) clearTimeout(timeout); timeout = setTimeout(() => { if (floatMessage.style.display !== "block") { floatMessage.innerText = message; floatMessage.style.display = "block"; floatMessage.style.top = "0"; floatMessage.style.left = "0"; const coord = getFloatCoord(floatMessage, { x: e.clientX + CursorMargin, y: e.clientY + CursorMargin }, "baseline"); console.log(coord); floatMessage.style.left = `${coord.x}px`; floatMessage.style.top = `${coord.y < e.clientY ? coord.y - CursorMargin * 2 : coord.y}px`; } }, delay); }); } const _hoisted_1$c = { class: "main-content" }; const _hoisted_2$c = { class: "title" }; const _hoisted_3$b = { key: 0, class: "content" }; const _hoisted_4$a = { key: 0, class: "img-container" }; const _hoisted_5$9 = ["src"]; const _hoisted_6$6 = { class: "bottom-controls" }; const _hoisted_7$6 = ["src"]; const _hoisted_8$5 = { class: "author-info" }; const _hoisted_9$5 = { class: "author-name" }; const _hoisted_10$5 = { class: "post-time" }; const _hoisted_11$4 = { class: "replies" }; const _sfc_main$e = /* @__PURE__ */ vue.defineComponent({ __name: "post-container", props: { post: {}, lazyLoad: { type: Boolean, default: false }, dynamic: { type: Boolean, default: false } }, emits: ["clickImage", "assetsLoaded"], setup(__props, { emit: __emit }) { const props = __props; const emit = __emit; const postContainer = vue.ref(); const isIntersecting = vue.ref(!props.lazyLoad); const loadedAssets = vue.ref(0); vue.onMounted(() => { if (!postContainer.value) return; if (props.post.images.length === 0) { emit("assetsLoaded", postContainer.value); } if (!props.lazyLoad) return; const iObs = new IntersectionObserver((entries) => { entries.forEach((entry) => { if (entry.isIntersecting) { isIntersecting.value = true; iObs.disconnect(); } }); }); iObs.observe(postContainer.value.$el); }); function showImage(e, index2) { e.preventDefault(); emit("clickImage", (() => { const output = []; map(props.post.images, (value) => { output.push(value.original); }); return output; })(), index2); } function addLoadedPost() { loadedAssets.value += 1; if (loadedAssets.value === props.post.images.length) { emit("assetsLoaded", postContainer.value); } } return (_ctx, _cache) => { return vue.openBlock(), vue.createBlock(_sfc_main$m, { ref_key: "postContainer", ref: postContainer, "is-anchor": true, class: vue.normalizeClass(["post-container", { "dynamic": props.dynamic, "assets-loaded": loadedAssets.value === props.post.images.length }]), href: "/p/" + props.post.id, target: "_blank" }, { default: vue.withCtx(() => [ vue.createElementVNode("div", null, [ vue.createVNode(_sfc_main$m, { "is-anchor": true, class: "forum-btn", "shadow-border": true, href: props.post.forum.href, target: "_blank" }, { default: vue.withCtx(() => [ vue.createTextVNode(vue.toDisplayString(props.post.forum.name + " 吧"), 1) ]), _: 1 }, 8, ["href"]) ]), vue.createElementVNode("div", _hoisted_1$c, [ vue.createElementVNode("p", _hoisted_2$c, vue.toDisplayString(props.post.title), 1), props.post.content && props.post.content !== " " ? (vue.openBlock(), vue.createElementBlock("p", _hoisted_3$b, vue.toDisplayString(props.post.content), 1)) : vue.createCommentVNode("", true) ]), props.post.images.length > 0 ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_4$a, [ (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(props.post.images, (image, index2) => { return vue.openBlock(), vue.createBlock(_sfc_main$m, { class: "img-button", onClick: ($event) => showImage($event, index2), "no-border": "all" }, { default: vue.withCtx(() => [ vue.createElementVNode("img", { class: "post-img", src: isIntersecting.value ? image.original : "", onLoad: addLoadedPost }, null, 40, _hoisted_5$9) ]), _: 2 }, 1032, ["onClick"]); }), 256)) ])) : vue.createCommentVNode("", true), vue.createElementVNode("div", _hoisted_6$6, [ vue.createVNode(_sfc_main$m, { class: "author", "is-anchor": true, href: props.post.author.href, target: "_blank", "shadow-border": true }, { default: vue.withCtx(() => [ vue.createElementVNode("img", { class: "author-portrait", src: isIntersecting.value ? vue.unref(tiebaAPI).URL_profile(props.post.author.portrait) : "" }, null, 8, _hoisted_7$6), vue.createElementVNode("div", _hoisted_8$5, [ vue.createElementVNode("div", _hoisted_9$5, vue.toDisplayString(props.post.author.name), 1), vue.createElementVNode("div", _hoisted_10$5, vue.toDisplayString(props.post.time), 1) ]) ]), _: 1 }, 8, ["href"]), vue.createElementVNode("div", _hoisted_11$4, vue.toDisplayString(props.post.replies), 1) ]) ]), _: 1 }, 8, ["href", "class"]); }; } }); const PostContainer = /* @__PURE__ */ _export_sfc(_sfc_main$e, [["__scopeId", "data-v-b160e8b2"]]); const maxFeeds = 1e3; const nextFeedsMargin = 320; const unreadTTL = 2; const _sfc_main$d = /* @__PURE__ */ vue.defineComponent({ __name: "feeds-masonry", props: { initFeeds: { default: Array }, showProgress: { type: Boolean, default: false } }, setup(__props, { expose: __expose }) { const props = __props; const feeds = vue.ref([]); const masonryWrapper = vue.ref(); const masonryContainer = vue.ref(); const hasMoreFeeds = vue.ref(true); let currentLoadedFeeds = []; let isFetchingFeeds = false; const debAddFeeds = debounce(addFeeds, 1e3, { leading: true }); let flexMasonry; window.addEventListener("resize", throttle(function() { flexMasonry.adjustWidth(); if (flexMasonry.columns !== flexMasonry.calcColumns()) flexMasonry.exec(); }, 100), { passive: true }); vue.onMounted(() => { if (!masonryWrapper.value) return; if (!masonryContainer.value) return; debAddFeeds(props.initFeeds); renderMasonry(); window.addEventListener("scroll", () => { if (isFetchingFeeds) return; const scrollHeight = document.documentElement.scrollHeight; const scrollTop = document.documentElement.scrollTop || document.body.scrollTop; const clientHeight = document.documentElement.clientHeight; if (scrollTop + clientHeight >= scrollHeight - nextFeedsMargin) { if (feeds.value.length < maxFeeds) { debAddFeeds(); } } }); }); vue.watch(hasMoreFeeds, (newVal) => { if (!newVal) { toast({ message: "没有更多推送了", type: "warning" }); } }); async function addFeeds(newFeeds) { if (!newFeeds) newFeeds = []; if (isFetchingFeeds) return; isFetchingFeeds = true; if (newFeeds.length <= 0) { const response = await requestInstance(tiebaAPI.feedlist()); if (response) { newFeeds = parsePostsFromString(response.data.html); hasMoreFeeds.value = Boolean(response.data.has_more); if (props.showProgress) { headerProgress({ calc: () => currentLoadedFeeds.length / response.data.total * 100 }); } } } feeds.value.push(...newFeeds); await waitUntil(() => currentLoadedFeeds.length >= (newFeeds ?? []).length); renderMasonry().then(function() { unreadFeeds.set(newFeeds ? newFeeds : [], spawnOffsetTS(0, 0, 0, unreadTTL)); currentLoadedFeeds.length = 0; isFetchingFeeds = false; }); } async function renderMasonry() { await vue.nextTick(() => { if (!masonryContainer.value) return; if (!flexMasonry) { flexMasonry = new FlexMasonry({ container: masonryContainer.value, // items: ".post-elem.assets-loaded", columnWidth: 320, gap: 12, fixScrollOffset: true }); } else { flexMasonry.append(".masonry-wrapper > .post-elem.assets-loaded", 60); } }); } function addToLoaded(payload) { currentLoadedFeeds.push(payload.$el); } function showImages(images, index2) { imagesViewer({ content: images, defaultIndex: index2 }); } function refresh() { if (!isFetchingFeeds) { feeds.value.length = 0; flexMasonry.clear(); debAddFeeds(); } } function refreshAndMove() { var _a; window.scrollTo({ top: (_a = masonryContainer.value) == null ? void 0 : _a.offsetTop, behavior: "smooth" }); refresh(); } __expose({ feeds, isFetchingFeeds, refresh, refreshAndMove }); return (_ctx, _cache) => { return vue.openBlock(), vue.createElementBlock("div", { ref_key: "masonryWrapper", ref: masonryWrapper, class: "masonry-wrapper" }, [ vue.createElementVNode("div", { ref_key: "masonryContainer", ref: masonryContainer, class: "masonry-container" }, null, 512), (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(feeds.value, (post) => { return vue.openBlock(), vue.createBlock(PostContainer, { key: post.id, post, class: "post-elem", dynamic: "", "shadow-border": "", onClickImage: showImages, onAssetsLoaded: addToLoaded }, null, 8, ["post"]); }), 128)) ], 512); }; } }); const FeedsMasonry = /* @__PURE__ */ _export_sfc(_sfc_main$d, [["__scopeId", "data-v-0a8673bc"]]); const _withScopeId$7 = (n) => (vue.pushScopeId("data-v-8c03e998"), n = n(), vue.popScopeId(), n); const _hoisted_1$b = { class: "about-wrapper" }; const _hoisted_2$b = { class: "main-title" }; const _hoisted_3$a = ["src"]; const _hoisted_4$9 = { class: "title" }; const _hoisted_5$8 = { class: "script-info" }; const _hoisted_6$5 = { class: "author-info" }; const _hoisted_7$5 = { class: "version" }; const _hoisted_8$4 = { class: "author" }; const _hoisted_9$4 = { class: "about-desc" }; const _hoisted_10$4 = { class: "line" }; const _hoisted_11$3 = { class: "about-controls" }; const _hoisted_12$3 = /* @__PURE__ */ _withScopeId$7(() => /* @__PURE__ */ vue.createElementVNode("div", { class: "about-desc" }, null, -1)); const _sfc_main$c = /* @__PURE__ */ vue.defineComponent({ __name: "about.detail", emits: ["changeView"], setup(__props, { emit: __emit }) { const scriptInfo = _GM_info; const emit = __emit; return (_ctx, _cache) => { return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$b, [ vue.createElementVNode("div", _hoisted_2$b, [ vue.createElementVNode("img", { src: vue.unref(getResource)("/assets/images/main/icon.png"), alt: "icon", class: "main-icon" }, null, 8, _hoisted_3$a), vue.createElementVNode("div", _hoisted_4$9, vue.toDisplayString(vue.unref(MainTitle)), 1) ]), vue.createElementVNode("div", _hoisted_5$8, [ vue.createElementVNode("div", _hoisted_6$5, [ vue.createElementVNode("div", _hoisted_7$5, vue.toDisplayString(vue.unref(scriptInfo).script.version), 1), vue.createElementVNode("div", _hoisted_8$4, "@" + vue.toDisplayString(vue.unref(scriptInfo).script.author), 1) ]), vue.createElementVNode("div", _hoisted_9$4, [ (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(`本开源项目使用 MIT 协议`.split("\n"), (line) => { return vue.openBlock(), vue.createElementBlock("div", _hoisted_10$4, vue.toDisplayString(line), 1); }), 256)) ]) ]), vue.createElementVNode("div", _hoisted_11$3, [ vue.createVNode(_sfc_main$m, { class: "about-button github", "is-anchor": true, href: vue.unref(GithubRepo), "shadow-border": true, target: "_balnk" }, { default: vue.withCtx(() => [ vue.createTextVNode("开放源代码 ") ]), _: 1 }, 8, ["href"]), vue.createVNode(_sfc_main$m, { class: "about-button update", "shadow-border": true, onClick: _cache[0] || (_cache[0] = ($event) => emit("changeView", "about", "update")) }, { default: vue.withCtx(() => [ vue.createTextVNode(" 检查更新 ") ]), _: 1 }) ]), _hoisted_12$3 ]); }; } }); const AboutDetail = /* @__PURE__ */ _export_sfc(_sfc_main$c, [["__scopeId", "data-v-8c03e998"]]); const _withScopeId$6 = (n) => (vue.pushScopeId("data-v-8906d00c"), n = n(), vue.popScopeId(), n); const _hoisted_1$a = { key: 0, class: "update-wrapper" }; const _hoisted_2$a = { class: "icon" }; const _hoisted_3$9 = { class: "content" }; const _hoisted_4$8 = { class: "title-container" }; const _hoisted_5$7 = { class: "title" }; const _hoisted_6$4 = { key: 0, class: "is-pre-release" }; const _hoisted_7$4 = { class: "main-info" }; const _hoisted_8$3 = ["src"]; const _hoisted_9$3 = { class: "owner" }; const _hoisted_10$3 = ["innerHTML"]; const _hoisted_11$2 = { class: "update-controls" }; const _hoisted_12$2 = { key: 1, class: "forbidden-wrapper" }; const _hoisted_13$2 = /* @__PURE__ */ _withScopeId$6(() => /* @__PURE__ */ vue.createElementVNode("div", { class: "icon" }, "warning", -1)); const _hoisted_14$2 = /* @__PURE__ */ _withScopeId$6(() => /* @__PURE__ */ vue.createElementVNode("div", { class: "forbidden-text" }, "请求过于频繁,请稍后重试", -1)); const _hoisted_15$2 = [ _hoisted_13$2, _hoisted_14$2 ]; const _sfc_main$b = /* @__PURE__ */ vue.defineComponent({ __name: "about.update", setup(__props) { const release = vue.ref(); const forbidden = vue.ref(false); const isLatest = vue.ref(); const scriptInfo = _GM_info; marked2.marked.setOptions({}); vue.onMounted(async () => { const latest = await getLatestReleaseFromGitee(); if (latest) { forbidden.value = false; release.value = latest; isLatest.value = `v${scriptInfo.script.version}` >= release.value.tag_name; } else { forbidden.value = true; } }); return (_ctx, _cache) => { var _a, _b, _c, _d, _e, _f, _g, _h; return !forbidden.value ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_1$a, [ isLatest.value !== void 0 ? (vue.openBlock(), vue.createElementBlock("div", { key: 0, class: vue.normalizeClass(["latest-info", { "is-latest": isLatest.value }]) }, [ vue.createElementVNode("div", _hoisted_2$a, vue.toDisplayString(isLatest.value ? "check" : "warning"), 1), vue.createElementVNode("div", _hoisted_3$9, vue.toDisplayString(isLatest.value ? "当前是最新版本" : "检测到新版本"), 1) ], 2)) : vue.createCommentVNode("", true), vue.createElementVNode("div", _hoisted_4$8, [ vue.createElementVNode("div", _hoisted_5$7, vue.toDisplayString((_a = release.value) == null ? void 0 : _a.name), 1), ((_b = release.value) == null ? void 0 : _b.prerelease) ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_6$4, "预览版")) : vue.createCommentVNode("", true) ]), vue.createElementVNode("div", _hoisted_7$4, [ ((_c = release.value) == null ? void 0 : _c.author.avatar_url) ? (vue.openBlock(), vue.createElementBlock("img", { key: 0, src: (_d = release.value) == null ? void 0 : _d.author.avatar_url, alt: "", class: "avatar" }, null, 8, _hoisted_8$3)) : vue.createCommentVNode("", true), vue.createElementVNode("div", _hoisted_9$3, vue.toDisplayString((_e = release.value) == null ? void 0 : _e.author.name), 1) ]), vue.createElementVNode("div", { class: "release-body markdown", innerHTML: ((_f = release.value) == null ? void 0 : _f.body) ? vue.unref(marked2.marked)((_g = release.value) == null ? void 0 : _g.body) : "" }, null, 8, _hoisted_10$3), vue.createElementVNode("div", _hoisted_11$2, [ vue.createVNode(_sfc_main$m, { class: "up-button download-button", "shadow-border": "", "theme-style": "", "is-anchor": "", href: (_h = release.value) == null ? void 0 : _h.assets[0].browser_download_url }, { default: vue.withCtx(() => [ vue.createTextVNode("安装更新 ") ]), _: 1 }, 8, ["href"]) ]) ])) : (vue.openBlock(), vue.createElementBlock("div", _hoisted_12$2, _hoisted_15$2)); }; } }); const AboutUpdate = /* @__PURE__ */ _export_sfc(_sfc_main$b, [["__scopeId", "data-v-8906d00c"]]); const _hoisted_1$9 = { class: "layout-custom-back" }; const _hoisted_2$9 = ["src"]; const _hoisted_3$8 = { class: "custom-back-buttons" }; const _sfc_main$a = /* @__PURE__ */ vue.defineComponent({ __name: "layout.custom-back", setup(__props) { const imageData = vue.ref(customBackground.get()); const alphaValue = vue.ref("100"); const imageAlphaInput = vue.ref(); vue.watch(imageData, (newValue) => { customBackground.set(newValue); }); vue.watch(alphaValue, (newValue) => { var _a; const inputElement = (_a = imageAlphaInput.value) == null ? void 0 : _a.$el; if (newValue === "" || +newValue < 0) alphaValue.value = "0", inputElement.value = "0"; if (+newValue > 100) alphaValue.value = "100", inputElement.value = "100"; }); vue.onMounted(async function() { imageData.value = customBackground.get(); }); async function clearImage() { imageData.value = void 0; } async function selectImageFile() { imageData.value = await selectLocalFile("base64"); } return (_ctx, _cache) => { return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$9, [ vue.withDirectives(vue.createElementVNode("img", { class: "custom-image", src: imageData.value ?? "", title: "自定义背景", alt: "自定义背景", style: vue.normalizeStyle(`opacity: ${+alphaValue.value / 100}`) }, null, 12, _hoisted_2$9), [ [vue.vShow, imageData.value] ]), vue.createElementVNode("div", _hoisted_3$8, [ vue.createVNode(_sfc_main$m, { onClick: clearImage }, { default: vue.withCtx(() => [ vue.createTextVNode("清除") ]), _: 1 }), vue.createVNode(_sfc_main$m, { onClick: selectImageFile }, { default: vue.withCtx(() => [ vue.createTextVNode("上传图片") ]), _: 1 }) ]) ]); }; } }); const LayoutCustomBack = /* @__PURE__ */ _export_sfc(_sfc_main$a, [["__scopeId", "data-v-fcb5c431"]]); var zhCn = { name: "zh-cn", el: { colorpicker: { confirm: "确定", clear: "清空" }, datepicker: { now: "此刻", today: "今天", cancel: "取消", clear: "清空", confirm: "确定", selectDate: "选择日期", selectTime: "选择时间", startDate: "开始日期", startTime: "开始时间", endDate: "结束日期", endTime: "结束时间", prevYear: "前一年", nextYear: "后一年", prevMonth: "上个月", nextMonth: "下个月", year: "年", month1: "1 月", month2: "2 月", month3: "3 月", month4: "4 月", month5: "5 月", month6: "6 月", month7: "7 月", month8: "8 月", month9: "9 月", month10: "10 月", month11: "11 月", month12: "12 月", weeks: { sun: "日", mon: "一", tue: "二", wed: "三", thu: "四", fri: "五", sat: "六" }, months: { jan: "一月", feb: "二月", mar: "三月", apr: "四月", may: "五月", jun: "六月", jul: "七月", aug: "八月", sep: "九月", oct: "十月", nov: "十一月", dec: "十二月" } }, select: { loading: "加载中", noMatch: "无匹配数据", noData: "无数据", placeholder: "请选择" }, cascader: { noMatch: "无匹配数据", loading: "加载中", placeholder: "请选择", noData: "暂无数据" }, pagination: { goto: "前往", pagesize: "条/页", total: "共 {total} 条", pageClassifier: "页", page: "页", prev: "上一页", next: "下一页", currentPage: "第 {pager} 页", prevPages: "向前 {pager} 页", nextPages: "向后 {pager} 页", deprecationWarning: "你使用了一些已被废弃的用法,请参考 el-pagination 的官方文档" }, messagebox: { title: "提示", confirm: "确定", cancel: "取消", error: "输入的数据不合法!" }, upload: { deleteTip: "按 delete 键可删除", delete: "删除", preview: "查看图片", continue: "继续上传" }, table: { emptyText: "暂无数据", confirmFilter: "筛选", resetFilter: "重置", clearFilter: "全部", sumText: "合计" }, tour: { next: "下一步", previous: "上一步", finish: "结束导览" }, tree: { emptyText: "暂无数据" }, transfer: { noMatch: "无匹配数据", noData: "无数据", titles: ["列表 1", "列表 2"], filterPlaceholder: "请输入搜索内容", noCheckedFormat: "共 {total} 项", hasCheckedFormat: "已选 {checked}/{total} 项" }, image: { error: "加载失败" }, pageHeader: { title: "返回" }, popconfirm: { confirmButtonText: "确定", cancelButtonText: "取消" } } }; const _withScopeId$5 = (n) => (vue.pushScopeId("data-v-54fb2e9b"), n = n(), vue.popScopeId(), n); const _hoisted_1$8 = { class: "theme-color-component" }; const _hoisted_2$8 = { class: "picker" }; const _hoisted_3$7 = /* @__PURE__ */ _withScopeId$5(() => /* @__PURE__ */ vue.createElementVNode("label", { for: "light-theme" }, "浅色主题", -1)); const _hoisted_4$7 = { class: "picker" }; const _hoisted_5$6 = /* @__PURE__ */ _withScopeId$5(() => /* @__PURE__ */ vue.createElementVNode("label", { for: "dark-theme" }, "深色主题", -1)); const _sfc_main$9 = /* @__PURE__ */ vue.defineComponent({ __name: "theme.color", setup(__props) { const lightTheme = vue.ref(themeColor.get().light); const darkTheme = vue.ref(themeColor.get().dark); function changeThemeColor() { themeColor.set({ dark: darkTheme.value, light: lightTheme.value }); } function resetThemeColor() { themeColor.remove(); lightTheme.value = themeColor.get().light; darkTheme.value = themeColor.get().dark; } return (_ctx, _cache) => { return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$8, [ vue.createVNode(vue.unref(elementPlus.ElConfigProvider), { locale: vue.unref(zhCn) }, { default: vue.withCtx(() => [ vue.createElementVNode("div", _hoisted_2$8, [ vue.createVNode(vue.unref(elementPlus.ElColorPicker), { modelValue: lightTheme.value, "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => lightTheme.value = $event), id: "light-theme", "popper-class": "theme-picker", size: "small", onChange: changeThemeColor }, null, 8, ["modelValue"]), _hoisted_3$7 ]), vue.createElementVNode("div", _hoisted_4$7, [ vue.createVNode(vue.unref(elementPlus.ElColorPicker), { modelValue: darkTheme.value, "onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => darkTheme.value = $event), id: "dark-theme", "popper-class": "theme-picker", size: "small", onChange: changeThemeColor }, null, 8, ["modelValue"]), _hoisted_5$6 ]), vue.createVNode(_sfc_main$m, { class: "reset-button", onClick: resetThemeColor }, { default: vue.withCtx(() => [ vue.createTextVNode("重置") ]), _: 1 }) ]), _: 1 }, 8, ["locale"]) ]); }; } }); const ThemeColor = /* @__PURE__ */ _export_sfc(_sfc_main$9, [["__scopeId", "data-v-54fb2e9b"]]); const getUserSettings = once(() => ({ "visibility": { name: "显示", icon: "visibility", description: "主题、显示设置", sub: { "theme": { name: "主题", content: { "switch-theme": { title: "主题偏好设置", description: `在自动模式下,将根据当前系统设置自动选择合适的主题。你也可以手动应用某一种主题。`, widgets: [{ type: "select", content: { "自动": "auto", "深色": "dark", "浅色": "light" }, init() { return themeType.get(); }, event(e) { const newValue = e.target.value; themeType.set(newValue); } }] }, "color": { title: "主题颜色", description: `自定义主题色。由于存在深浅两种主题,需要设置两种主题色。`, widgets: [{ type: "component", component: vue.markRaw(ThemeColor) }] } } }, "layout": { name: "页面布局", content: { "compact-layout": { title: "紧凑布局", description: `在尽量保证视觉观感的请款下,针对部分页面应用更加紧凑的布局,以提高信息密度。当前会受到影响的页面有:新版看贴页面。`, widgets: [{ type: "toggle", init() { return compactLayout.get(); }, event() { compactLayout.set(!compactLayout.get()); document.body.toggleAttribute("compact-layout"); return compactLayout.get(); } }] }, "custom-background": { title: "自定义背景图", description: `上传图片作为页面背景图`, widgets: [{ type: "component", component: vue.markRaw(LayoutCustomBack) }] }, "wide-screen-title": { title: "宽屏设置", description: `针对宽屏设备进行配置`, widgets: [{ type: "subTitle", content: "强制拉伸画幅" }, { type: "desc", content: `对于宽屏设备,不一定需要页面内容宽度始终等于屏幕宽度。如果你想应用强制宽屏,可以开启此项。` }, { type: "toggle", init() { return wideScreen.get().noLimit; }, event() { const value = wideScreen.get().noLimit; wideScreen.merge({ noLimit: !value }); return !value; } }, { type: "subTitle", content: "最大宽度" }, { type: "desc", content: `配置页面元素跟随屏幕拉伸的最大宽度,若开启了 “强制拉伸画幅” 则此项失效` }, { type: "textbox", placeHolder: "输入最大宽度像素值", init() { return String(wideScreen.get().maxWidth); }, event(e) { const newValue = e.target.value; if (!isNaN(+newValue)) { wideScreen.merge({ maxWidth: +newValue }); } } }] } } }, "page-extension": { name: "页面扩展", content: { "index": { title: "新版主页", description: `新版主页旨在提供纯粹的浏览体验,它通过 Vue 构建。 在新版主页上我们目前会更激进地测试一些新功能,包括尚未被广泛使用的新 Web API,以及自构建的 JavaScript 库。`, widgets: [{ type: "toggle", init() { return pageExtension.get().index; }, event() { pageExtension.merge({ index: !pageExtension.get().index }); return pageExtension.get().index; } }] }, "thread": { title: "新版看帖页面", description: `新版看帖页面使用了全新的 UI 界面,并试图改进屏幕空间利用率。`, widgets: [{ type: "toggle", init() { return pageExtension.get().thread; }, event() { pageExtension.merge({ thread: !pageExtension.get().thread }); return pageExtension.get().thread; } }] } } }, "fonts": { name: "字体", content: { "code-zh": { title: "主要字体组合", description: `应用在贴吧绝大多数场景的字体组合。`, widgets: [{ type: "textarea", placeHolder: "写入字体名,以换行分隔。若需要中英文混排,需将英文字体写在中文字体之前。", init() { return join(userFonts.get(), "\n"); }, event(e) { userFonts.set(split(e.target.value, "\n")); return join(userFonts.get(), "\n"); } }] }, "code-monospace": { title: "等宽字体组合", description: `应用在数据显示等场景的等宽字体组合。`, widgets: [{ type: "textarea", placeHolder: "写入字体名,以换行分隔。建议在此处写入等宽字体。", init() { return join(monospaceFonts.get(), "\n"); }, event(e) { monospaceFonts.set(split(e.target.value, "\n")); return join(monospaceFonts.get(), "\n"); } }] } } }, "nav-bar": { name: "导航栏", content: { "nav-bar-mode": { title: "导航栏隐藏模式", description: `设置导航栏的隐藏模式。`, widgets: [{ type: "select", content: { "滚动折叠": "fold", "始终折叠": "alwaysFold", "滚动隐藏": "hideWhenScroll", "顶部固定": "fixedOnTop", "始终显示": "never" }, init() { return navBarHideMode.get(); }, event(e) { const newValue = e.target.value; navBarHideMode.set(newValue); } }] } } } } }, "modules": { name: "模块", icon: "deployed_code", description: "用户模块管理及部署", sub: AllModules().reduce((accu, curr, index2) => { function toSubSettingKey(module2) { return { name: module2.name, description: module2.brief, content: { "module-info": { title: module2.name, description: `${module2.id} ${module2.version} ${module2.description}`, widgets: [{ type: "toggle", init() { return includes(disabledModules.get(), module2.id) ? false : true; }, event() { if (includes(disabledModules.get(), module2.id)) { const newSet = new Set(disabledModules.get()); newSet.delete(module2.id); disabledModules.set([...newSet]); return true; } else { disabledModules.set([module2.id, ...disabledModules.get()]); return false; } } }] }, ...module2.settings } }; } if (index2 === 1) { const accuObject = toSubSettingKey(accu); accu = {}; accu[accuObject.name] = accuObject; } accu[curr.name] = toSubSettingKey(curr); return accu; }) }, "performance": { name: "性能", icon: "speed", description: "硬件性能与流量相关", sub: { "perfPresets": { name: "性能预设", content: { "persets": { title: "性能预设", description: "从以下预设性能等级选择其一,将会自动对相关场景进行行为调整。", widgets: [{ type: "select", content: { "默认": "default", "节能": "saver", "高性能": "performance" }, init() { return perfProfile.get(); }, event(e) { const newValue = e.target.value; perfProfile.set(newValue); } }] } } } } }, "enhanced": { name: "高级", icon: "labs", description: "提前测试一些尚不稳定的新功能", sub: { "experimental": { name: "实验性功能", content: { "title": { title: "实验室", description: `本版块列举了一些实验性功能,这些功能正处于开发阶段,它们当中的大部分都是默认关闭的。 这些功能可能会产生已知、未知的错误或性能问题,如果这些问题能被更及时全面地反馈,将有助于整个项目的发展。 需要注意的是,这些特性并不保证会保留到后续版本中。`, widgets: [{ type: "icon", content: "lab_research" }] }, "moreBlurEffect": { title: "更多模糊效果", description: `优先考虑提供更多的模糊效果。 仅当性能预设为“高性能”时,才会生效。`, widgets: [{ type: "toggle", init() { return experimental.get().moreBlurEffect; }, event() { experimental.merge({ moreBlurEffect: !experimental.get().moreBlurEffect }); } }] }, "rasterEffect": { title: "栅格特效", description: `将部分场景的模糊效果替换为栅格特效。 可能会使文字可见度降低。存在性能问题。`, widgets: [{ type: "toggle", init() { return experimental.get().rasterEffect; }, event() { experimental.merge({ rasterEffect: !experimental.get().rasterEffect }); } }] } } }, "backup-recover": { name: "备份与恢复", content: { "data-backup": { title: "数据备份", description: `备份脚本所有自定义配置`, widgets: [{ type: "button", content: "备份", event() { backupUserConfigs(); } }] }, "recover-backup": { title: "数据恢复", description: `从备份文件中恢复脚本所有自定义配置`, widgets: [{ type: "button", content: "恢复", event() { restoreUserConfigs(); } }] } } }, "factory-reset": { name: "重置所有配置", content: { "title": { title: "重置所有配置", description: `如果你需要将脚本的一切配置恢复默认,请使用此功能。` }, "reset": { widgets: [{ type: "button", content: "重置", event() { if (confirm("该操作是不可逆的,请做最后一次确认")) { forEach(_GM_listValues(), (key) => { _GM_deleteValue(key); }); location.reload(); } } }] } } } } }, "about": { name: "关于", icon: "person", description: "开发信息与检查更新", sub: { "update": { name: "检查更新", content: { "update-time": { title: "检查更新设置", description: `发行信息追踪频率`, widgets: [{ type: "select", content: { "1 小时": "1h", "3 小时": "3h", "6 小时": "6h", "从不": "never" }, init() { return updateConfig.get().time; }, event(e) { const newValue = e.target.value; updateConfig.merge({ time: newValue }); } }] }, "update-notify": { description: `启用一个对话框提示用户更新。该对话框可以立即安装更新,也可以推迟更新操作。`, widgets: [{ type: "toggle", init() { return updateConfig.get().notify; }, event() { updateConfig.merge({ notify: !updateConfig.get().notify }); } }] }, "update-component": { widgets: [{ type: "component", component: vue.markRaw(AboutUpdate) }] } } }, "about": { name: "关于项目", content: { "about-component": { widgets: [{ type: "component", component: vue.markRaw(AboutDetail) }] } } } } } })); const _sfc_main$8 = /* @__PURE__ */ vue.defineComponent({ __name: "user-textbox", props: { modelValue: { default: "" }, mutiLines: { type: Boolean }, lodashStyle: { type: Boolean, default: false } }, emits: ["update:modelValue"], setup(__props) { const props = __props; return (_ctx, _cache) => { return vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(props.mutiLines ? "textarea" : "input"), { class: vue.normalizeClass(["user-textbox", { "lodash-style": props.lodashStyle }]), type: "text", value: _ctx.modelValue, onInput: _cache[0] || (_cache[0] = ($event) => _ctx.$emit("update:modelValue", $event.target.value)), autocomplete: "off" }, null, 40, ["class", "value"]); }; } }); const UserTextbox = /* @__PURE__ */ _export_sfc(_sfc_main$8, [["__scopeId", "data-v-a690d550"]]); const _withScopeId$4 = (n) => (vue.pushScopeId("data-v-8c694269"), n = n(), vue.popScopeId(), n); const _hoisted_1$7 = { class: "settings-wrapper remove-default" }; const _hoisted_2$7 = { class: "left-container" }; const _hoisted_3$6 = { class: "search-controls" }; const _hoisted_4$6 = /* @__PURE__ */ _withScopeId$4(() => /* @__PURE__ */ vue.createElementVNode("div", { class: "title" }, "设置", -1)); const _hoisted_5$5 = { class: "left-panel" }; const _hoisted_6$3 = { class: "icon" }; const _hoisted_7$3 = { class: "key-info" }; const _hoisted_8$2 = { class: "key-title" }; const _hoisted_9$2 = { class: "key-desc" }; const _hoisted_10$2 = { class: "middle-container" }; const _hoisted_11$1 = { class: "key-title" }; const _hoisted_12$1 = { key: 0, class: "right-container" }; const _hoisted_13$1 = { class: "setting-content" }; const _hoisted_14$1 = { key: 0, class: "content-title" }; const _hoisted_15$1 = { key: 1, class: "content-desc" }; const _hoisted_16$1 = { class: "line" }; const _hoisted_17$1 = { class: "setting-control" }; const _hoisted_18$1 = { key: 1, class: "icon-component icon" }; const _hoisted_19$1 = ["onChange"]; const _hoisted_20$1 = ["value", "selected"]; const _hoisted_21$1 = { key: 4, class: "content-sub-title" }; const _hoisted_22$1 = { key: 5, class: "content-desc" }; const _hoisted_23$1 = { class: "line" }; const _hoisted_24$1 = ["src", "alt", "title", "onLoad"]; const _hoisted_25$1 = { key: 1, class: "empty-container filled-icon" }; const _sfc_main$7 = /* @__PURE__ */ vue.defineComponent({ __name: "settings", setup(__props) { const userSettings = getUserSettings(); const searchText = vue.ref(""); const selectedKey = vue.ref(); const selectedSubKey = vue.ref(); function selectMainKey(key) { selectedKey.value = key; selectedSubKey.value = void 0; } function selectSubKey(key) { selectedSubKey.value = key; } function changeView(key, sub) { selectedKey.value = userSettings[key]; selectedSubKey.value = userSettings[key].sub[sub]; } function clearSelections() { selectedKey.value = void 0; selectedSubKey.value = void 0; } function searchKey() { if (searchText.value.length <= 0) { clearSelections(); return; } if (!find$1(userSettings, (mainKey) => { if (find$1(mainKey.sub, (subKey) => { if (subKey.name.toLowerCase().includes(searchText.value.toLowerCase())) { selectedKey.value = mainKey; selectedSubKey.value = subKey; return true; } else { return false; } })) return true; else return false; })) clearSelections(); } const debSearchKey = debounce(searchKey, 500); return (_ctx, _cache) => { var _a, _b, _c; return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$7, [vue.createElementVNode("div", _hoisted_2$7, [vue.createElementVNode("div", _hoisted_3$6, [_hoisted_4$6, vue.createVNode(UserTextbox, { modelValue: searchText.value, "onUpdate:modelValue": [_cache[0] || (_cache[0] = ($event) => searchText.value = $event), vue.unref(debSearchKey)], class: "search-box", placeholder: "输入需要搜索的设置" }, null, 8, ["modelValue", "onUpdate:modelValue"])]), vue.createElementVNode("div", _hoisted_5$5, [(vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(vue.unref(userSettings), (setting) => { var _a2; return vue.openBlock(), vue.createBlock(_sfc_main$m, { class: vue.normalizeClass(["key-button main-key", { "selected": ((_a2 = selectedKey.value) == null ? void 0 : _a2.name) === setting.name }]), onClick: ($event) => selectMainKey(setting), "no-border": "all" }, { default: vue.withCtx(() => [vue.createElementVNode("div", _hoisted_6$3, vue.toDisplayString(setting.icon), 1), vue.createElementVNode("div", _hoisted_7$3, [vue.createElementVNode("div", _hoisted_8$2, vue.toDisplayString(setting.name), 1), vue.createElementVNode("div", _hoisted_9$2, vue.toDisplayString(setting.description), 1)])]), _: 2 }, 1032, ["class", "onClick"]); }), 256))])]), vue.createElementVNode("div", _hoisted_10$2, [(vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList((_a = selectedKey.value) == null ? void 0 : _a.sub, (setting) => { var _a2; return vue.openBlock(), vue.createBlock(_sfc_main$m, { class: vue.normalizeClass(["key-button sub-key", { "selected": ((_a2 = selectedSubKey.value) == null ? void 0 : _a2.name) === setting.name }]), onClick: ($event) => selectSubKey(setting), "no-border": "all" }, { default: vue.withCtx(() => [vue.createElementVNode("div", _hoisted_11$1, vue.toDisplayString(setting.name), 1)]), _: 2 }, 1032, ["class", "onClick"]); }), 256))]), ((_b = selectedSubKey.value) == null ? void 0 : _b.name) ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_12$1, [((_c = selectedSubKey.value) == null ? void 0 : _c.name) ? (vue.openBlock(true), vue.createElementBlock(vue.Fragment, { key: 0 }, vue.renderList(selectedSubKey.value.content, (content) => { return vue.openBlock(), vue.createElementBlock("div", _hoisted_13$1, [(content == null ? void 0 : content.title) ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_14$1, vue.toDisplayString(content == null ? void 0 : content.title), 1)) : vue.createCommentVNode("", true), (content == null ? void 0 : content.description) ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_15$1, [(content == null ? void 0 : content.description) ? (vue.openBlock(true), vue.createElementBlock(vue.Fragment, { key: 0 }, vue.renderList(content.description.split("\n"), (line) => { return vue.openBlock(), vue.createElementBlock("div", _hoisted_16$1, vue.toDisplayString(line), 1); }), 256)) : vue.createCommentVNode("", true)])) : vue.createCommentVNode("", true), (content == null ? void 0 : content.widgets) ? (vue.openBlock(true), vue.createElementBlock(vue.Fragment, { key: 2 }, vue.renderList(content.widgets, (widget) => { var _a2; return vue.openBlock(), vue.createElementBlock("div", _hoisted_17$1, [widget.type === "toggle" ? (vue.openBlock(), vue.createBlock(ToggleButton, { key: 0, class: "settings-toggle-button icon", "model-value": widget.init ? widget.init() : void 0, onClick: widget.event, "icon-type": "", "no-border": "all" }, null, 8, ["model-value", "onClick"])) : vue.createCommentVNode("", true), widget.type === "icon" ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_18$1, vue.toDisplayString(widget.content), 1)) : vue.createCommentVNode("", true), widget.type === "button" ? (vue.openBlock(), vue.createBlock(_sfc_main$m, { key: 2, onClick: widget.event, "shadow-border": "" }, { default: vue.withCtx(() => [vue.createTextVNode(vue.toDisplayString(widget.content), 1)]), _: 2 }, 1032, ["onClick"])) : vue.createCommentVNode("", true), widget.type === "select" && vue.unref(isLiteralObject)(widget.content) ? (vue.openBlock(), vue.createElementBlock("select", { key: 3, onChange: widget.event }, [(vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(widget.content, (value, key) => { return vue.openBlock(), vue.createElementBlock("option", { value, selected: widget.init && value === widget.init() }, vue.toDisplayString(key), 9, _hoisted_20$1); }), 256))], 40, _hoisted_19$1)) : vue.createCommentVNode("", true), widget.type === "subTitle" ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_21$1, vue.toDisplayString(widget.content), 1)) : vue.createCommentVNode("", true), widget.type === "desc" ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_22$1, [widget.content ? (vue.openBlock(true), vue.createElementBlock(vue.Fragment, { key: 0 }, vue.renderList(widget.content.split("\n"), (line) => { return vue.openBlock(), vue.createElementBlock("div", _hoisted_23$1, vue.toDisplayString(line), 1); }), 256)) : vue.createCommentVNode("", true)])) : vue.createCommentVNode("", true), vue.unref(includes)(["textbox", "textarea"], widget.type) ? (vue.openBlock(), vue.createBlock(UserTextbox, { key: 6, class: vue.normalizeClass(["content-textbox", { "textarea": widget.type === "textarea" }]), value: widget.init ? widget.init() : "", "muti-lines": widget.type === "textarea", placeholder: widget.placeHolder, onChange: widget.event }, null, 8, ["class", "value", "muti-lines", "placeholder", "onChange"])) : vue.createCommentVNode("", true), widget.type === "image" ? (vue.openBlock(), vue.createElementBlock("img", { key: 7, class: "content-image", src: (_a2 = widget.content) == null ? void 0 : _a2.toString(), alt: widget.altContent, title: widget.altContent, onLoad: widget.init }, null, 40, _hoisted_24$1)) : vue.createCommentVNode("", true), widget.component ? (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(widget == null ? void 0 : widget.component), { key: 8, onChangeView: changeView }, null, 32)) : vue.createCommentVNode("", true)]); }), 256)) : vue.createCommentVNode("", true)]); }), 256)) : vue.createCommentVNode("", true)])) : (vue.openBlock(), vue.createElementBlock("div", _hoisted_25$1, "settings"))]); }; } }); const Settings = /* @__PURE__ */ _export_sfc(_sfc_main$7, [["__scopeId", "data-v-8c694269"]]); const _withScopeId$3 = (n) => (vue.pushScopeId("data-v-b3af10bd"), n = n(), vue.popScopeId(), n); const _hoisted_1$6 = { class: "index-wrapper" }; const _hoisted_2$6 = { class: "grid-container" }; const _hoisted_3$5 = { class: "head-controls" }; const _hoisted_4$5 = { class: "search-controls" }; const _hoisted_5$4 = { class: "search-suggestions" }; const _hoisted_6$2 = ["src"]; const _hoisted_7$2 = { class: "sugg-content" }; const _hoisted_8$1 = { class: "sugg-title" }; const _hoisted_9$1 = { class: "sugg-desc" }; const _hoisted_10$1 = { key: 0, class: "block-wrapper followed-container" }; const _hoisted_11 = { class: "block-controls followed" }; const _hoisted_12 = /* @__PURE__ */ _withScopeId$3(() => /* @__PURE__ */ vue.createElementVNode("p", { class: "block-title" }, "关注的吧", -1)); const _hoisted_13 = { class: "block-container followed-list" }; const _hoisted_14 = { key: 0, class: "icon signed" }; const _hoisted_15 = { class: "forum-title" }; const _hoisted_16 = { key: 1, class: "block-wrapper topic-container" }; const _hoisted_17 = { class: "block-controls topics" }; const _hoisted_18 = /* @__PURE__ */ _withScopeId$3(() => /* @__PURE__ */ vue.createElementVNode("p", { class: "block-title" }, "贴吧热议", -1)); const _hoisted_19 = { class: "block-container topic-list" }; const _hoisted_20 = ["src"]; const _hoisted_21 = { class: "topic-content" }; const _hoisted_22 = { class: "topic-title" }; const _hoisted_23 = { class: "topic-name" }; const _hoisted_24 = { class: "topic-desc" }; const _hoisted_25 = /* @__PURE__ */ _withScopeId$3(() => /* @__PURE__ */ vue.createElementVNode("div", { id: "carousel_wrap" }, null, -1)); const _hoisted_26 = { class: "block-controls feeds" }; const _hoisted_27 = /* @__PURE__ */ _withScopeId$3(() => /* @__PURE__ */ vue.createElementVNode("p", { class: "block-title" }, "推送", -1)); const _hoisted_28 = { key: 0, class: "empty-container" }; const _hoisted_29 = /* @__PURE__ */ _withScopeId$3(() => /* @__PURE__ */ vue.createElementVNode("p", { class: "no-feed-content" }, "没有更多了", -1)); const _hoisted_30 = [ _hoisted_29 ]; const _sfc_main$6 = /* @__PURE__ */ vue.defineComponent({ __name: "index", setup(__props) { const initFeeds = vue.ref([]); const userInfo = vue.ref(); const followed = vue.ref(); const masonryContainer = vue.ref(); const feedsContainer = vue.ref(); const searchText = vue.ref(""); const suggToggle = vue.ref(false); const suggestions = vue.ref([]); vue.ref(false); const configMenu = vue.ref(); vue.ref(false); const profileMenu = vue.ref(); const topicList = vue.ref([]); const feedsIntersecting = vue.ref(false); const feedsMasonry = vue.ref({}); let signedForums = 0; initFeeds.value = unreadFeeds.get(); vue.onMounted(async () => { init().then(() => { if (masonryContainer.value) { const iObs = new IntersectionObserver((entries) => { if (entries[0].isIntersecting) { feedsIntersecting.value = true; } else { feedsIntersecting.value = false; } }); iObs.observe(masonryContainer.value); } }); }); window.addEventListener("focusin", (ev) => toggleSuggControls(ev)); window.addEventListener("mousedown", (ev) => toggleSuggControls(ev)); async function init() { userInfo.value = await (async () => { try { const userInfoResp = await (await tiebaAPI.userInfo()).json(); if (userInfoResp) { return userInfoResp.data; } } catch (error) { toast({ message: errorMessage(error), type: "error", duration: 6e3 }); } })(); configMenu.value = [ { title: "设置", click() { renderDialog(Settings); } }, "separator", { title: "源代码 (GitHub)", href: GithubRepo }, { title: "源代码 (Gitee)", href: GiteeRepo } ]; profileMenu.value = [ { title: "登录", icon: "login", href: BaiduPassport } ]; if (userInfo.value) { profileMenu.value = [ { title: "我的收藏", icon: "star" }, "separator", { title: "主页", icon: "home", href: tiebaAPI.URL_userHome(userInfo.value.user_portrait) }, { title: "修改", icon: "settings" }, "separator", { title: "退出登录", icon: "logout" } ]; } if (userInfo.value) { getFollowedInstance(); } requestInstance(tiebaAPI.topicList()).then((response) => { if (response) { topicList.value.push(...response.data.bang_topic.topic_list); } }); if (!feedsContainer.value) return; } function toggleSuggControls(e) { const el = e.target; const pt = findParent(el, "search-controls"); if (pt) { suggToggle.value = true; } else { suggToggle.value = false; } } async function loadSuggestions(query) { const response = await tiebaAPI.suggestions(query); if (response.ok) { response.json().then((value) => { if (!query || query === "") { const topicList2 = value.hottopic_list.search_data; if (topicList2) suggestions.value = map(topicList2, (topic) => ({ image: topic.topic_pic, title: topic.topic_name, desc: topic.topic_desc, href: topic.topic_url })); } else { const matchList = value.query_match.search_data; if (matchList) suggestions.value = map(matchList, (match) => ({ image: match.fpic, title: match.fname, desc: match.forum_desc, href: tiebaAPI.URL_forum(match.fname) })); } }); } } function searchBoxFocus() { if (suggestions.value.length <= 0) { loadSuggestions().then(() => { suggToggle.value = true; }); } else { suggToggle.value = true; } } function searchTextChange() { loadSuggestions(searchText.value); } const searchMatch = debounce(searchTextChange, 500); function getFollowedInstance() { requestInstance(tiebaAPI.followedForums()).then((response) => { if (response) { signedForums = 0; followed.value = response.data; forEach(followed.value.like_forum, (forum) => { if (forum.is_sign === 1) signedForums++; }); followed.value.like_forum.sort((a, b) => parseInt(b.user_exp) - parseInt(a.user_exp)); } }); } async function oneKeySignInstance() { messageBox({ title: "一键签到", message: "需要注意,Web端签到获取到的经验远少于移动端,建议使用其他设备进行签到。", type: "OkCancel" }).then((tag) => { if (tag === "positive") { requestInstance(tiebaAPI.oneKeySign()).then((response) => { toast({ message: `本次共签到成功 ${response.data.signedForumAmount} 个吧,未签到 ${response.data.unsignedForumAmount} 个吧,签到失败 ${response.data.signedForumAmountFail} 个吧,共获得 ${response.data.gradeNoVip} 经验。`, type: "check", blurEffect: true }); getFollowedInstance(); }); } }); } return (_ctx, _cache) => { return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$6, [ vue.createElementVNode("div", _hoisted_2$6, [ vue.createElementVNode("div", _hoisted_3$5, [ vue.createElementVNode("div", _hoisted_4$5, [ vue.createVNode(UserTextbox, { modelValue: searchText.value, "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => searchText.value = $event), class: "search-box", placeholder: "搜索 贴吧", autocomplete: "none", onFocus: searchBoxFocus, onInput: vue.unref(searchMatch) }, null, 8, ["modelValue", "onInput"]), vue.createVNode(_sfc_main$m, { class: "search-button", "theme-style": true, "no-border": "" }, { default: vue.withCtx(() => [ vue.createTextVNode("搜索") ]), _: 1 }), vue.withDirectives(vue.createElementVNode("div", _hoisted_5$4, [ (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(suggestions.value, (sugg) => { return vue.openBlock(), vue.createBlock(_sfc_main$m, { "is-anchor": true, class: "search-elem", href: sugg.href, target: "_blank", "no-border": "" }, { default: vue.withCtx(() => [ vue.createElementVNode("img", { class: "sugg-img", src: sugg.image, alt: "" }, null, 8, _hoisted_6$2), vue.createElementVNode("div", _hoisted_7$2, [ vue.createElementVNode("p", _hoisted_8$1, vue.toDisplayString(sugg.title), 1), vue.createElementVNode("p", _hoisted_9$1, vue.toDisplayString(sugg.desc), 1) ]) ]), _: 2 }, 1032, ["href"]); }), 256)) ], 512), [ [vue.vShow, suggToggle.value && suggestions.value.length > 0] ]) ]) ]), followed.value ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_10$1, [ vue.createElementVNode("div", _hoisted_11, [ _hoisted_12, vue.createVNode(BlockPanel, { class: "signed-count left-align" }, { default: vue.withCtx(() => { var _a; return [ vue.createTextVNode(vue.toDisplayString(vue.unref(signedForums)) + " / " + vue.toDisplayString((_a = followed.value) == null ? void 0 : _a.like_forum.length), 1) ]; }), _: 1 }), vue.createVNode(BlockPanel, { class: "followed" }, { default: vue.withCtx(() => [ vue.createVNode(_sfc_main$m, { class: "panel-btn icon sign-btn", onClick: oneKeySignInstance, "unset-background": "", "no-border": "" }, { default: vue.withCtx(() => [ vue.createTextVNode(" task_alt") ]), _: 1 }), vue.createVNode(_sfc_main$m, { class: "panel-btn icon settings", "unset-background": "", "no-border": "" }, { default: vue.withCtx(() => [ vue.createTextVNode("settings") ]), _: 1 }) ]), _: 1 }) ]), vue.createElementVNode("div", _hoisted_13, [ (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(followed.value.like_forum, (forum) => { return vue.openBlock(), vue.createBlock(_sfc_main$m, { "is-anchor": true, class: "followed-btn", "shadow-border": true, href: vue.unref(tiebaAPI).URL_forum(forum.forum_name), target: "_blank", "no-border": "" }, { default: vue.withCtx(() => [ forum.is_sign === 1 ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_14, "check")) : vue.createCommentVNode("", true), vue.createElementVNode("div", _hoisted_15, vue.toDisplayString(forum.forum_name), 1), vue.createElementVNode("div", { class: vue.normalizeClass(["forum-level", "level-" + vue.unref(levelToClass)(forum.user_level)]) }, vue.toDisplayString(forum.user_level), 3) ]), _: 2 }, 1032, ["href"]); }), 256)) ]) ])) : vue.createCommentVNode("", true), topicList.value.length > 0 ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_16, [ vue.createElementVNode("div", _hoisted_17, [ _hoisted_18, vue.createVNode(BlockPanel, { class: "topics" }, { default: vue.withCtx(() => [ vue.createVNode(_sfc_main$m, { class: "panel-btn icon switch", "unset-background": true, "no-border": "" }, { default: vue.withCtx(() => [ vue.createTextVNode("tune") ]), _: 1 }), vue.createVNode(_sfc_main$m, { class: "panel-btn icon more", "unset-background": true, "no-border": "" }, { default: vue.withCtx(() => [ vue.createTextVNode("more_horiz ") ]), _: 1 }), vue.createVNode(_sfc_main$m, { class: "panel-btn icon settings", "unset-background": true, "no-border": "" }, { default: vue.withCtx(() => [ vue.createTextVNode("settings ") ]), _: 1 }) ]), _: 1 }) ]), vue.createElementVNode("div", _hoisted_19, [ (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(vue.unref(take)(topicList.value, 10), (topic) => { return vue.openBlock(), vue.createBlock(_sfc_main$m, { "is-anchor": true, class: "topic-btn", "shadow-border": true, href: topic.topic_url, target: "_blank" }, { default: vue.withCtx(() => [ vue.createElementVNode("img", { class: "topic-img", src: topic.topic_pic }, null, 8, _hoisted_20), vue.createElementVNode("div", _hoisted_21, [ vue.createElementVNode("div", _hoisted_22, [ vue.createElementVNode("div", { class: vue.normalizeClass("topic-rank-" + topic.idx_num) }, vue.toDisplayString(topic.idx_num), 3), vue.createElementVNode("div", _hoisted_23, vue.toDisplayString(topic.topic_name), 1) ]), vue.createElementVNode("div", _hoisted_24, vue.toDisplayString(topic.topic_desc), 1) ]) ]), _: 2 }, 1032, ["href"]); }), 256)) ]) ])) : vue.createCommentVNode("", true), _hoisted_25 ]), vue.createElementVNode("div", { ref_key: "masonryContainer", ref: masonryContainer, class: "masonry-container" }, [ vue.createElementVNode("div", _hoisted_26, [ _hoisted_27, feedsMasonry.value && feedsMasonry.value.feeds && (feedsMasonry.value.feeds.length > 0 || feedsMasonry.value.isFetchingFeeds) ? (vue.openBlock(), vue.createBlock(BlockPanel, { key: 0 }, { default: vue.withCtx(() => [ vue.createVNode(_sfc_main$m, { class: "panel-button icon refresh", "unset-background": "", onClick: feedsMasonry.value.refreshAndMove, "no-border": "" }, { default: vue.withCtx(() => [ vue.createTextVNode("refresh ") ]), _: 1 }, 8, ["onClick"]), vue.createVNode(_sfc_main$m, { class: "panel-button icon settings", "unset-background": "", "no-border": "" }, { default: vue.withCtx(() => [ vue.createTextVNode("settings") ]), _: 1 }) ]), _: 1 })) : vue.createCommentVNode("", true) ]), vue.createVNode(FeedsMasonry, { ref_key: "feedsMasonry", ref: feedsMasonry, "init-feeds": initFeeds.value, "show-progress": "" }, null, 8, ["init-feeds"]), initFeeds.value.length === 0 ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_28, _hoisted_30)) : vue.createCommentVNode("", true) ], 512) ]); }; } }); const indexVue = /* @__PURE__ */ _export_sfc(_sfc_main$6, [["__scopeId", "data-v-b3af10bd"]]); async function index$g() { if (currentPageType() !== "index") return; if (!pageExtension.get().index) return; const bodyMask = _GM_addStyle(parseMultiCSS({ "body": { display: "none" } })); await waitUntil(() => !isNil(DOMS(true, ".wrap1"))); renderPage(indexVue); DOMS(true, ".wrap1").remove(); bodyMask.remove(); } const _hoisted_1$5 = { class: "pager-wrapper" }; const _hoisted_2$5 = { key: 0, class: "pager-button-container" }; const _hoisted_3$4 = { key: 1, class: "pager-separactor" }; const _hoisted_4$4 = { key: 2, class: "jumper-container" }; const _hoisted_5$3 = { class: "tail-slot" }; const _sfc_main$5 = /* @__PURE__ */ vue.defineComponent({ __name: "pager", props: { total: {}, current: {}, jumperValue: {}, maxDisplay: { default: 9 }, fill: { type: Boolean, default: false }, showPagers: { type: Boolean, default: true }, head: { type: Boolean, default: true }, tail: { type: Boolean, default: true }, jumper: { type: Boolean, default: true }, pagerClick: {}, headClick: {}, tailClick: {}, prevClick: {}, nextClick: {}, pagerChange: {}, jumperEnter: {} }, emits: [ "update:current", "update:jumperValue" ], setup(__props, { expose: __expose, emit: __emit }) { const props = __props; const current = vue.ref(props.current); const jumperValue = vue.ref(props.jumperValue ?? ""); const emit = __emit; const pagerCount = Math.min(props.maxDisplay, props.total); const pagerStart = vue.computed( () => current.value + pagerCount / 2 > props.total ? props.total - pagerCount + 1 : Math.max(1, current.value - Math.floor(props.maxDisplay / 2)) ); const pagerEnd = vue.computed(() => Math.min(props.total, pagerStart.value + props.maxDisplay - 1) + 1); __expose({ current, jumperValue }); function pagerChange(type, page) { if (props.pagerChange && page !== current.value) props.pagerChange(page); current.value = page; emit("update:current", page); switch (type) { case "page": if (props.pagerClick) props.pagerClick(page); break; case "head": if (props.headClick) props.headClick(); break; case "tail": if (props.tailClick) props.tailClick(); break; case "prev": if (props.prevClick) props.prevClick(page); break; case "next": if (props.nextClick) props.nextClick(page); break; } } function handleJumperEnter() { if (!jumperValue.value) return; const page = +jumperValue.value; if (page < 1 || page > props.total) return; pagerChange(null, page); if (props.jumperEnter) props.jumperEnter(page); jumperValue.value = ""; } return (_ctx, _cache) => { return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$5, [ _ctx.showPagers ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_2$5, [ vue.withDirectives(vue.createVNode(_sfc_main$m, { class: "pager-button pager-head-button", "no-border": "", onClick: _cache[0] || (_cache[0] = ($event) => pagerChange("head", 1)) }, { default: vue.withCtx(() => [ vue.createTextVNode("1") ]), _: 1 }, 512), [ [vue.vShow, current.value > Math.ceil(vue.unref(pagerCount) / 2) && current.value > 1 && _ctx.total > vue.unref(pagerCount)] ]), vue.withDirectives(vue.createVNode(_sfc_main$m, { class: "pager-button pager-back-button icon", "no-border": "", onClick: _cache[1] || (_cache[1] = ($event) => pagerChange("prev", Math.max(1, current.value - vue.unref(pagerCount)))) }, { default: vue.withCtx(() => [ vue.createTextVNode(" keyboard_double_arrow_left ") ]), _: 1 }, 512), [ [vue.vShow, current.value > Math.ceil(vue.unref(pagerCount) / 2) && current.value > 1 && _ctx.total > vue.unref(pagerCount)] ]), (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(vue.unref(range$1)(pagerStart.value, pagerEnd.value), (displayNumber, i) => { return vue.openBlock(), vue.createBlock(_sfc_main$m, { key: i, class: vue.normalizeClass(["pager-button", { "fill": _ctx.fill, "curr-pager-button": displayNumber === current.value }]), onClick: ($event) => pagerChange("page", displayNumber), "no-border": "all", disabled: displayNumber === current.value }, { default: vue.withCtx(() => [ vue.createTextVNode(vue.toDisplayString(displayNumber), 1) ]), _: 2 }, 1032, ["class", "onClick", "disabled"]); }), 128)), vue.withDirectives(vue.createVNode(_sfc_main$m, { class: "pager-button pager-forward-button icon", "no-border": "", onClick: _cache[2] || (_cache[2] = ($event) => pagerChange("next", Math.min(_ctx.total, current.value + vue.unref(pagerCount)))) }, { default: vue.withCtx(() => [ vue.createTextVNode(" keyboard_double_arrow_right ") ]), _: 1 }, 512), [ [vue.vShow, _ctx.total - vue.unref(pagerCount) > 1 && _ctx.total - current.value > vue.unref(pagerCount) / 2] ]), vue.withDirectives(vue.createVNode(_sfc_main$m, { class: "pager-button pager-tail-button", "no-border": "", onClick: _cache[3] || (_cache[3] = ($event) => pagerChange("tail", _ctx.total)) }, { default: vue.withCtx(() => [ vue.createTextVNode(vue.toDisplayString(_ctx.total), 1) ]), _: 1 }, 512), [ [vue.vShow, _ctx.tail && _ctx.total - vue.unref(pagerCount) > 1 && _ctx.total - current.value > vue.unref(pagerCount) / 2] ]) ])) : vue.createCommentVNode("", true), _ctx.showPagers && _ctx.jumper ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_3$4, "|")) : vue.createCommentVNode("", true), _ctx.showPagers && _ctx.jumper ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_4$4, [ vue.createTextVNode(" 转到 "), vue.createVNode(UserTextbox, { modelValue: jumperValue.value, "onUpdate:modelValue": [ _cache[4] || (_cache[4] = ($event) => jumperValue.value = $event), _cache[5] || (_cache[5] = ($event) => emit("update:jumperValue", jumperValue.value)) ], class: "jumper", onKeydown: vue.withKeys(handleJumperEnter, ["enter"]) }, null, 8, ["modelValue"]), vue.createTextVNode(" 页 ") ])) : vue.createCommentVNode("", true), vue.createElementVNode("div", _hoisted_5$3, [ vue.renderSlot(_ctx.$slots, "tailSlot", {}, void 0, true) ]) ]); }; } }); const Pager$1 = /* @__PURE__ */ _export_sfc(_sfc_main$5, [["__scopeId", "data-v-88fc5825"]]); const _hoisted_1$4 = { id: "thread-editor" }; const _hoisted_2$4 = { id: "thread-editor-toolbar" }; const _sfc_main$4 = /* @__PURE__ */ vue.defineComponent({ __name: "thread-editor", props: { ueditor: {}, type: { default: "thread" } }, setup(__props) { const props = __props; const editorSlot = vue.ref(); const originParent = vue.ref(); vue.onMounted(async function() { var _a; if (!editorSlot.value) return; originParent.value = props.ueditor.parentElement; editorSlot.value.appendChild(props.ueditor); await waitUntil(() => DOMS(".edui-editor-body").length > 0); const toolbar = DOMS(".edui-toolbar")[0]; const editorBody = DOMS(".edui-editor-body")[0]; if (toolbar.compareDocumentPosition(editorBody) & Node.DOCUMENT_POSITION_FOLLOWING) { (_a = toolbar.parentNode) == null ? void 0 : _a.insertBefore(editorBody, toolbar); } DOMS("#ueditor_replace")[0].focus(); }); vue.onUnmounted(async function() { unload(); }); function submit() { DOMS(".j_submit", "a")[0].click(); unload(); } function unload() { if (!originParent.value) return; if (!editorSlot.value) return; originParent.value.appendChild(DOMS(".edui-container")[0]); unloadDialog(); } return (_ctx, _cache) => { return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$4, [ vue.createVNode(_sfc_main$m, { id: "thread-editor-exit", class: "icon", "shadow-border": "", onClick: unload }, { default: vue.withCtx(() => [ vue.createTextVNode("close ") ]), _: 1 }), _ctx.type === "thread" ? (vue.openBlock(), vue.createBlock(UserTextbox, { key: 0, class: "title-editor", placeholder: "输入标题", "lodash-style": "" })) : vue.createCommentVNode("", true), vue.createElementVNode("div", { ref_key: "editorSlot", ref: editorSlot, id: "thread-editor-slot" }, null, 512), vue.createElementVNode("div", _hoisted_2$4, [ vue.createVNode(_sfc_main$m, { id: "thread-editor-submit", "shadow-border": "", "theme-style": "", onClick: submit }, { default: vue.withCtx(() => [ vue.createTextVNode("发表") ]), _: 1 }) ]) ]); }; } }); const ThreadEditor = /* @__PURE__ */ _export_sfc(_sfc_main$4, [["__scopeId", "data-v-217ff1bf"]]); const _withScopeId$2 = (n) => (vue.pushScopeId("data-v-e01667c9"), n = n(), vue.popScopeId(), n); const _hoisted_1$3 = { id: "toggle-panel", class: "toggle-panel" }; const _hoisted_2$3 = /* @__PURE__ */ _withScopeId$2(() => /* @__PURE__ */ vue.createElementVNode("div", { class: "panel-info" }, [ /* @__PURE__ */ vue.createElementVNode("div", { class: "panel-title" }), /* @__PURE__ */ vue.createElementVNode("div", { class: "panel-desc" }) ], -1)); const _hoisted_3$3 = { class: "toggle-wrapper" }; const _hoisted_4$3 = { class: "toggle-container" }; const _hoisted_5$2 = { class: "toggle-name" }; const _sfc_main$3 = /* @__PURE__ */ vue.defineComponent({ __name: "toggle-panel", props: { toggles: {} }, setup(__props) { const props = __props; return (_ctx, _cache) => { return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$3, [ _hoisted_2$3, vue.createElementVNode("div", _hoisted_3$3, [ (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(props.toggles, (toggle) => { return vue.openBlock(), vue.createElementBlock("div", _hoisted_4$3, [ vue.createVNode(ToggleButton, { class: "panel-button", "model-value": toggle.defaultValue ?? false, "icon-type": "", "shadow-border": "", onClick: toggle.event }, { default: vue.withCtx(() => [ vue.createTextVNode(vue.toDisplayString(toggle.icon), 1) ]), _: 2 }, 1032, ["model-value", "onClick"]), vue.createElementVNode("div", _hoisted_5$2, vue.toDisplayString(toggle.name), 1) ]); }), 256)) ]) ]); }; } }); const TogglePanel = /* @__PURE__ */ _export_sfc(_sfc_main$3, [["__scopeId", "data-v-e01667c9"]]); class TiebaComponent { constructor(selector, type, parent) { __publicField(this, "selector"); __publicField(this, "type"); __publicField(this, "parent"); this.selector = selector; this.type = type; this.parent = parent; } get() { if (!this.parent) return DOMS(this.selector, this.type)[0]; else return DOMS(this.selector, this.type, this.parent)[0]; } } const floatButtonMap = { "auxiliary": "tbui_fbar_auxiliaryCare", "down": "tbui_fbar_down", "post": "tbui_fbar_post", "props": "tbui_fbar_props", "tsukkomi": "tbui_fbar_tsukkomi", "share": "tbui_fbar_share", "favor": "tbui_fbar_favor", "feedback": "tbui_fbar_feedback", "top": "tbui_fbar_top", "other": "*" }; class FloatBar extends TiebaComponent { /** * 获取当前页面的 float buttons * @returns FloatBarButton[] */ buttons() { if (!this.get()) return []; return Array.from(DOMS(".tbui_aside_fbar_button", "li", floatBar.get())).map((el) => ({ el, type: function() { for (let i = 0; i < el.classList.length; i++) { const cls = el.classList[i]; if (!cls.includes("tbui_fbar_")) continue; const key = findKey(floatButtonMap, (value) => value === cls); if (key) { return key; } } return "other"; }() })); } add(type, event, className, icon, index2 = 0) { const anchor = templateCreate("a", { href: "javascript:;" }); const el = templateCreate("li", { class: "tbui_aside_fbar_button" }, [anchor]); el.addEventListener("click", event); if (type !== "other") { el.classList.add(floatButtonMap[type]); } if (className) el.classList.add(className); floatBar.get().insertBefore(el, floatBar.get().children[index2]); setFloatButtonIcon(anchor, icon); return { el, type }; function setFloatButtonIcon(el2, icon2) { el2.classList.add("icon"); el2.classList.add("tbui_aside_fbar_button"); el2.innerHTML = icon2 ? icon2 : ""; } } remove(param) { switch (typeof param) { case "string": { const el = DOMS(param, "li", floatBar.get())[0]; el.remove(); break; } case "number": { const el = floatBar.get().children[param]; el.remove(); break; } } } } const floatBar = new FloatBar(".tbui_aside_float_bar", "ul"); class Pager extends TiebaComponent { allPagerButtons() { return DOMS("a, .tP", this.get()); } getPagerButton(pagerType, index2 = 0) { const allButtons = this.allPagerButtons(); switch (pagerType) { case "prev": { return this.findMatchingButton(allButtons, "上一页"); } case "next": { return this.findMatchingButton(allButtons, "下一页", true); } case "head": { return this.findMatchingButton(allButtons, "首页"); } case "tail": { return this.findMatchingButton(allButtons, "尾页", true); } case "page": { let count = 0; for (const el of allButtons) { if (/^\d+$/.test(el.innerText)) { if (count === index2 && el instanceof HTMLAnchorElement) { return el; } count++; } } return null; } default: return null; } } getByPage(page) { return this.findMatchingButton(this.allPagerButtons(), page.toString()); } jumpTo(page) { const permKeys = ["pn", "see_lz"]; const params = new URLSearchParams(location.search); const newParams = new URLSearchParams(); for (const [key, value] of params) { if (includes(permKeys, key)) { newParams.set(key, value); } } const url = new URL(location.href); url.search = newParams.toString(); history.pushState({}, "", url); const jumperBox = DOMS(true, "#jumpPage4, #jumpPage6", "input"); const jumperButton = DOMS(true, "#pager_go4, #pager_go6", "button"); jumperBox.value = page.toString(); jumperButton.click(); } findMatchingButton(buttons, text, reverse = false) { const iterator = reverse ? Array.from(buttons).reverse() : buttons; for (const el of iterator) { if (el.innerText === text) { return el; } } return null; } } const pager = new Pager(".l_pager", "li"); const compactCSS = "body[compact-layout] #j_p_postlist {\n gap: 0;\n}\nbody[compact-layout] .core_reply_content li.first_no_border {\n margin-top: -4px;\n}"; function threadParser() { const postWrappers = DOMS(".l_post", "div"); const contents = DOMS(".d_post_content", "div"); const dAuthors = DOMS(".d_author", "div"); const avatars = DOMS(".p_author_face", "a"); const nameAnchors = DOMS(".p_author_name", "a"); const levels = DOMS(".d_badge_lv", "div"); const badgeTitles = DOMS(".d_badge_title", "div"); const replyButtons = DOMS(".lzl_link_unfold", "a"); const locations = map(DOMS(".post-tail-wrap span:first-child, .ip-location", "span"), (el) => el.innerText); const platforms = map(DOMS(".tail-info a, .p_tail_wap", "a"), (el) => el.innerText); const floors = map(DOMS(".j_jb_ele + .tail-info + .tail-info, .p_tail li:first-child span", "span"), (el) => el.innerText); const times = map(DOMS(".post-tail-wrap span:nth-last-child(2), .p_tail li:last-child span", "span"), (el) => el.innerText); const threadContents = []; for (let i = 0; i < contents.length; i++) { contents[i].classList.add("floor-content"); avatars[i].classList.add("floor-avatar"); nameAnchors[i].classList.add("floor-name"); threadContents.push({ post: contents[i], replyButton: replyButtons[i], dataField: defaults(postWrappers[i].getAttribute("data-field"), ""), isLouzhu: DOMS(".louzhubiaoshi_wrap", dAuthors[i]).length > 0, profile: { avatar: avatars[i], nameAnchor: nameAnchors[i], level: parseInt(levels[i].innerText), badgeTitle: badgeTitles[i].innerText }, tail: { location: locations[i], platform: platforms[i], floor: floors[i], time: times[i] } }); } const thread2 = { displayWrapper: DOMS(true, ".wrap2", "div"), title: PageData.thread.title, reply: parseInt(DOMS(true, ".l_reply_num span:nth-child(1)", "span").innerText), pages: PageData.pager.total_page, lzOnlyButton: DOMS(true, "#lzonly_cntn", "a"), favorButton: DOMS(true, ".j_favor", "a"), cotents: threadContents, forum: { info: { name: PageData.forum.forum_name // followersDisplay: DOMS(true, ".card_menNum", "span").innerText, // postsDisplay: DOMS(true, ".card_infoNum", "span").innerText, }, components: { nameAnchor: DOMS(true, ".card_title_fname", "a"), iconContainer: DOMS(true, ".card_head a, .plat_picbox", "a"), followButton: DOMS(true, ".card_head .focus_btn", "a"), signButton: DOMS(true, ".j_sign_box", "a") } }, pager: { listPager: DOMS(true, ".pb_list_pager", "li"), jumper: { textbox: DOMS(true, ".jump_input_bright", "input"), submitButton: DOMS(true, ".jump_btn_bright", "button") } } }; return thread2; } const threadCSS = '@keyframes kf-fade-in {\n 0% {\n opacity: 0;\n }\n 100% {\n opacity: 1;\n }\n}\n@keyframes kf-fade-out {\n 0% {\n opacity: 1;\n }\n 100% {\n opacity: 0;\n }\n}\n@keyframes kf-dialog-in {\n 0% {\n opacity: 0;\n transform: scale(1.2);\n }\n 100% {\n opacity: 1;\n transform: scale(1);\n }\n}\n@keyframes kf-zoom-in {\n 0% {\n transform: scale(0.72);\n }\n 100% {\n transform: scale(1);\n }\n}\n@keyframes kf-fade-zoom-in {\n 0% {\n opacity: 0;\n transform: scale(0.72);\n }\n 100% {\n opacity: 1;\n transform: scale(1);\n }\n}\nhtml {\n padding: 0;\n margin: 0;\n text-align: justify;\n}\n\nbody {\n overflow-x: hidden;\n overflow-y: scroll;\n overflow: hidden scroll;\n padding: 0;\n margin: 0;\n font-family: var(--code-zh);\n}\nbody[no-scrollbar] {\n overflow: hidden;\n}\n\ndiv,\np {\n margin: 0;\n}\n\nselect {\n padding: 1px 8px;\n border: 1px solid var(--border-color);\n border-radius: 8px;\n cursor: pointer;\n}\n\noption {\n cursor: pointer;\n}\n\noption:checked {\n background-color: var(--tieba-theme-color);\n color: var(--default-background);\n}\n\na {\n color: inherit;\n -webkit-text-decoration: none;\n text-decoration: none;\n word-break: break-all;\n}\n\n.dialogJ {\n position: fixed !important;\n top: 50% !important;\n left: 50% !important;\n}\n\n.dialogJ {\n transform: translate(-50%, -50%);\n}\n\n.lzl_cnt .at, .lzl_cnt .lzl_content_main a, .content-wrapper .author-container .floor-name, .d_post_content a,\n.lzl_cnt .lzl_content_main a:not(.at) {\n color: var(--tieba-theme-fore);\n cursor: pointer;\n -webkit-text-decoration: none;\n text-decoration: none;\n transition: 0.4s;\n}\n\n.d_post_content a,\n.lzl_cnt .lzl_content_main a:not(.at) {\n text-decoration: underline;\n -webkit-text-decoration: underline solid currentColor;\n text-decoration: underline solid currentColor;\n text-decoration-thickness: 1.2px;\n -webkit-text-decoration: underline 1.2px;\n text-decoration: underline 1.2px;\n}\n\n.lzl_cnt .at:hover, .lzl_cnt .lzl_content_main a:hover, .content-wrapper .author-container .floor-name:hover, .d_post_content a:hover {\n background-color: var(--default-hover);\n}\n\n.d_post_content a:hover,\n.lzl_cnt .lzl_content_main a:hover:not(.at) {\n text-decoration: underline;\n -webkit-text-decoration: underline solid rgba(0, 0, 0, 0);\n text-decoration: underline solid rgba(0, 0, 0, 0);\n text-decoration-thickness: 1.2px;\n -webkit-text-decoration: underline 1.2px rgba(0, 0, 0, 0);\n text-decoration: underline 1.2px rgba(0, 0, 0, 0);\n}\n\n.lzl_cnt .at:active, .lzl_cnt .lzl_content_main a:active, .content-wrapper .author-container .floor-name:active, .d_post_content a:active {\n background-color: var(--default-active);\n}\n\n.lzl_p_p img, .content-wrapper .author-container .floor-avatar img {\n -o-object-fit: contain;\n object-fit: contain;\n}\n\nbody {\n background-color: var(--page-background);\n overflow-x: hidden;\n}\n\nbody.special_conf_skin {\n background: var(--page-background);\n}\n\n.wrap1 {\n background: none !important;\n background-color: transparent !important;\n}\n.wrap1 .wrap2 {\n background: none !important;\n background-color: transparent !important;\n}\n\n.head_inner {\n display: none;\n}\n\n#container {\n width: 100%;\n max-width: 100%;\n max-width: var(--content-max);\n box-sizing: border-box;\n margin-top: 120px;\n}\n#container .content {\n width: 100%;\n}\n#container .content .pb_content {\n position: relative;\n width: 100%;\n box-sizing: border-box;\n padding: 24px 48px;\n border-radius: 6px 6px 0 0;\n border-top: 6px solid var(--tieba-theme-color);\n background-color: var(--default-background);\n box-shadow: 0 12px 80px -32px rgba(0, 0, 0, 0.4);\n}\n#container .tittle_fill_dom {\n display: none;\n}\n\n.card_top_wrap,\n.nav_wrap,\n.p_thread {\n display: none;\n}\n\n.core_title_wrap_bright {\n display: none !important;\n}\n\n.lzl_cnt .at {\n padding: 2px 0;\n color: var(--default-fore);\n font-size: 14px;\n font-weight: bold;\n}\n.lzl_cnt .lzl_content_main img {\n vertical-align: text-bottom;\n}\n\n#j_p_postlist {\n display: flex;\n box-sizing: border-box;\n flex-direction: column;\n gap: 16px;\n}\n#j_p_postlist .save_face_bg {\n display: none;\n}\n#j_p_postlist .l_post_bright {\n border: none;\n}\n#j_p_postlist .l_post_bright .d_post_content_main {\n background-color: transparent !important;\n background-color: initial !important;\n}\n#j_p_postlist .l_post_bright .d_post_content_main {\n width: 100%;\n padding: 0;\n}\n#j_p_postlist .l_post_bright .d_post_content_main .p_content {\n min-height: 0;\n min-height: initial;\n padding: 0;\n margin-bottom: -42px;\n background-color: transparent;\n background-color: initial;\n}\n#j_p_postlist .l_post_bright .d_post_content_main .p_content .shield-tip {\n background: none;\n}\n#j_p_postlist .l_post_bright .d_post_content_main .p_content .d_post_content {\n background-color: transparent !important;\n background-color: initial !important;\n}\n#j_p_postlist .l_post_bright .d_post_content_main .p_content .d_post_content {\n padding: 0;\n font-size: 16px;\n grid-area: content;\n}\n#j_p_postlist .l_post_bright .d_post_content_main .p_content .replace_div {\n width: auto !important;\n}\n#j_p_postlist .l_post_bright .d_post_content_main .p_content .BDE_Smiley {\n width: 24px;\n height: 24px;\n vertical-align: text-bottom;\n}\n#j_p_postlist .l_post_bright .d_post_content_main .p_content .BDE_Image {\n display: flex;\n width: -moz-max-content;\n width: max-content;\n max-width: 100%;\n height: auto;\n border-radius: 12px;\n margin: 6px auto;\n}\n#j_p_postlist .l_post_bright .d_post_content_main .core_reply {\n margin-right: 0;\n margin-right: initial;\n}\n#j_p_postlist .l_post_bright .d_post_content_main .core_reply .core_reply_tail {\n margin-top: 0;\n}\n#j_p_postlist .l_post_bright .d_post_content_main .core_reply .core_reply_wrapper {\n border: none !important;\n background-color: transparent !important;\n background-color: initial !important;\n}\n#j_p_postlist .l_post_bright .d_post_content_main .core_reply .core_reply_wrapper {\n width: 100%;\n}\n#j_p_postlist .l_post_bright .d_post_content_main .core_reply .core_reply_wrapper .core_reply_content {\n padding: 0 0 0 36px;\n}\n#j_p_postlist .l_post_bright .d_post_content_main .core_reply .core_reply_wrapper .core_reply_content .lzl_single_post {\n animation: kf-fade-in 0.4s;\n}\n#j_p_postlist .l_post_bright .d_post_content_main .core_reply .core_reply_wrapper .core_reply_content .lzl_single_post:not(.first_no_border) {\n padding-top: 0;\n margin-top: 0;\n}\n#j_p_postlist .l_post_bright .d_post_content_main .core_reply .core_reply_wrapper .core_reply_content .edui-container {\n width: auto !important;\n}\n#j_p_postlist .l_post_bright .d_post_content_main .core_reply .core_reply_wrapper .core_reply_content .edui-container {\n max-height: 64px;\n}\n#j_p_postlist .l_post_bright .d_post_content_main .core_reply .core_reply_wrapper .core_reply_content .edui-container .edui-editor-body {\n height: -moz-max-content !important;\n height: max-content !important;\n}\n#j_p_postlist .l_post_bright .d_post_content_main .core_reply .core_reply_wrapper .core_reply_content .edui-container .edui-editor-body {\n overflow: hidden;\n max-height: 72px;\n padding: 6px;\n border-radius: 6px;\n}\n#j_p_postlist .l_post_bright .d_post_content_main .core_reply .core_reply_wrapper .core_reply_content .edui-container .edui-editor-body .edui-body-container {\n min-height: 16px !important;\n}\n#j_p_postlist .l_post_bright .d_post_content_main .core_reply .core_reply_wrapper .core_reply_content .edui-container .edui-editor-body .edui-body-container {\n max-height: 64px;\n padding-left: 0;\n border-radius: 6px;\n font-size: 14px;\n overflow-y: auto;\n}\n#j_p_postlist .l_post_bright .d_post_content_main .core_reply .core_reply_wrapper .core_reply_content .lzl_panel_wrapper {\n width: 100%;\n}\n#j_p_postlist .l_post_bright .d_post_content_main .core_reply .core_reply_wrapper .core_reply_content .lzl_panel_wrapper .lzl_panel_submit {\n background: none;\n}\n\n.main-wrapper {\n display: flex;\n max-width: 80%;\n flex-direction: column;\n padding: 8px;\n margin: auto;\n margin-top: 48px;\n}\n@media (min-width: 1200px) {\n .main-wrapper {\n max-width: 60%;\n }\n}\n\n.left_section {\n width: 100%;\n}\n\n.right_section {\n display: none;\n}\n\n#title-wrapper {\n display: flex;\n box-sizing: border-box;\n align-items: flex-end;\n justify-content: space-between;\n margin: 24px 0;\n gap: 8px;\n}\n.shrink-view #title-wrapper {\n padding: 0 48px;\n}\n#title-wrapper .thread-title {\n max-width: 60%;\n font-size: 32px;\n line-height: 36px;\n text-align: left;\n}\n#title-wrapper .forum-wrapper-button {\n background-color: var(--trans-light-background) !important;\n}\n#title-wrapper .forum-wrapper-button {\n display: flex;\n overflow: hidden;\n width: -moz-max-content;\n width: max-content;\n height: -moz-max-content;\n height: max-content;\n align-items: center;\n padding: 0;\n border-radius: 8px;\n gap: 8px;\n}\nhtml:not([perf-saver]) body.custom-background #title-wrapper .forum-wrapper-button {\n -webkit-backdrop-filter: blur(24px);\n backdrop-filter: blur(24px);\n}\nhtml.dark-theme body.custom-background #title-wrapper .forum-wrapper-button {\n -webkit-backdrop-filter: blur(24px) brightness(0.8);\n backdrop-filter: blur(24px) brightness(0.8);\n}\n#title-wrapper .forum-wrapper-button:last-child {\n padding-right: 8px;\n}\n#title-wrapper .forum-wrapper-button .forum-icon {\n width: 36px;\n height: 36px;\n}\n#title-wrapper .forum-wrapper-button .forum-name {\n color: var(--highlight-fore);\n font-size: 14px;\n font-weight: bold;\n}\n#title-wrapper .forum-wrapper-button .forum-info {\n display: flex;\n flex-direction: column;\n justify-content: center;\n}\n#title-wrapper .forum-wrapper-button .forum-info .forum-members {\n display: flex;\n gap: 8px;\n}\n#title-wrapper .forum-wrapper-button .button-container {\n display: flex;\n align-items: center;\n}\n#title-wrapper .forum-wrapper-button .button-container .forum-button {\n padding: 0 4px;\n color: var(--tieba-theme-color);\n font-size: 16px;\n font-weight: bold;\n}\n#title-wrapper .forum-wrapper-button .button-container .forum-button:not(:hover):not(:active):not(:focus) {\n background-color: transparent;\n}\n\n.forum-mask-wrapper {\n position: relative;\n z-index: -1;\n display: flex;\n justify-content: center;\n -webkit-user-select: none;\n -moz-user-select: none;\n user-select: none;\n}\n@keyframes mask-fade-in {\n 0% {\n opacity: 0;\n }\n 100% {\n opacity: 0.1;\n }\n}\n.forum-mask-wrapper .forum-mask {\n position: absolute;\n top: -320px;\n width: 480px;\n height: 480px;\n border-radius: 480px;\n animation: mask-fade-in 1s ease-in-out;\n filter: blur(60px);\n opacity: 0.1;\n -webkit-user-select: none;\n -moz-user-select: none;\n user-select: none;\n}\n\n.content-wrapper {\n display: flex;\n width: 100%;\n flex-direction: column;\n gap: 16px;\n}\n.content-wrapper .author-container {\n display: grid;\n margin-bottom: 8px;\n grid-gap: 6px;\n gap: 6px;\n grid-template: "avatar name" auto "avatar tags" auto/36px 1fr;\n}\n.content-wrapper .author-container .floor-avatar {\n width: -moz-max-content !important;\n width: max-content !important;\n height: -moz-max-content !important;\n height: max-content !important;\n padding: 0 !important;\n}\n.content-wrapper .author-container .floor-avatar {\n overflow: hidden;\n grid-area: avatar;\n}\n.content-wrapper .author-container .floor-avatar img {\n width: 36px;\n height: 36px;\n border-radius: 8px;\n}\n.content-wrapper .author-container .floor-name {\n width: -moz-fit-content;\n width: fit-content;\n color: var(--highlight-fore);\n font-size: 14px;\n font-weight: bold;\n grid-area: name;\n}\n.content-wrapper .author-container .badge-container {\n display: flex;\n margin-top: -4px;\n gap: 4px;\n grid-area: tags;\n}\n.content-wrapper .author-container .badge-container .floor-badge {\n display: flex;\n width: -moz-fit-content;\n width: fit-content;\n padding: 0 6px;\n border-radius: 6px;\n background-color: var(--trans-light-background);\n color: var(--light-fore);\n gap: 6px;\n}\n.content-wrapper .author-container .badge-container .floor-badge .badge-level {\n font-weight: bold;\n}\n.content-wrapper .floor-wrapper {\n display: grid;\n grid-template: "avatar name" auto "avatar tags" auto "content content" 1fr "footer footer" auto "comments comments" auto/36px 1fr;\n}\n.content-wrapper .floor-wrapper .floor-avatar {\n width: -moz-max-content !important;\n width: max-content !important;\n height: -moz-max-content !important;\n height: max-content !important;\n padding: 0 !important;\n}\n.content-wrapper .floor-wrapper .floor-avatar {\n overflow: hidden;\n grid-area: avatar;\n}\n.content-wrapper .floor-wrapper .floor-avatar img {\n width: 36px;\n border-radius: 8px;\n}\n.content-wrapper .floor-wrapper .floor-name {\n width: -moz-fit-content;\n width: fit-content;\n margin: 0 8px 4px;\n font-size: 14px;\n grid-area: name;\n}\n.content-wrapper .floor-wrapper .floor-badge {\n display: flex;\n width: -moz-fit-content;\n width: fit-content;\n padding: 0 6px;\n border-radius: 6px;\n margin: 0 8px 8px;\n background-color: var(--trans-light-background);\n color: var(--light-fore);\n gap: 6px;\n grid-area: tags;\n}\n.content-wrapper .floor-wrapper .floor-badge .badge-level {\n font-weight: bold;\n}\n.content-wrapper .floor-wrapper .floor-content {\n padding: 8px 0;\n font-size: 16px;\n grid-area: content;\n}\n.content-wrapper .floor-wrapper .floor-content .BDE_Smiley {\n width: 24px;\n height: 24px;\n vertical-align: sub;\n}\n.content-wrapper .floor-wrapper .floor-info {\n display: flex;\n justify-content: flex-end;\n color: var(--light-fore);\n gap: 12px;\n grid-area: footer;\n}\n.content-wrapper .floor-wrapper .floor-comments {\n width: 100%;\n grid-area: comments;\n}\n.content-wrapper .floor-wrapper .floor-comments .core_reply_wrapper {\n width: 100%;\n}\n\n#ueditor_replace {\n overflow: hidden;\n}\n\n#thread-jsx-components {\n display: flex;\n box-sizing: border-box;\n flex-direction: column;\n gap: 12px;\n}\n#thread-jsx-components .dummy-button {\n width: 100%;\n padding: 8px 0 0;\n border: none;\n border-radius: 0;\n border-bottom: 3px solid var(--border-color);\n margin-top: 8px;\n background-color: transparent;\n box-shadow: none;\n color: var(--minimal-fore);\n cursor: text;\n font-size: 16px;\n text-align: justify;\n}\n#thread-jsx-components .dummy-button:hover {\n border-color: var(--light-background);\n}\n#thread-jsx-components .dummy-button:focus {\n border-color: var(--tieba-theme-color);\n}\n\n.pb_footer {\n display: none;\n}\n\n.svelte-zmnt4x {\n display: none;\n}\n\n.wrap2 {\n padding-bottom: 0 !important;\n}\n\n.head_ad_pop {\n display: none !important;\n}\n\n.plat_head,\n.star_nav_wrap {\n display: none;\n}'; async function thread() { if (!pageExtension.get().thread) return; if (currentPageType() !== "thread") return; injectCSSList(threadCSS); injectCSSList(compactCSS); await waitUntil(() => !isNil(document.body)).then(function() { if (compactLayout.get()) { document.body.toggleAttribute("compact-layout"); } }); waitUntil(() => !isNil(floatBar.get())).then(function() { floatBar.add("other", function() { renderDialog(TogglePanel, { toggles: [{ icon: "favorite", name: "收藏", defaultValue: function() { return DOMS(true, ".j_favor, #j_favthread .p_favthr_main").innerText === "收藏" ? false : true; }(), event() { DOMS(true, ".j_favor, #j_favthread .p_favthr_main").click(); } }, { icon: "face_6", name: "只看楼主", defaultValue: function() { return DOMS(true, "#lzonly_cntn").innerText === "只看楼主" ? false : true; }(), event() { DOMS(true, "#lzonly_cntn").click(); } }, { icon: "compare_arrows", name: "紧凑布局", defaultValue: (() => compactLayout.get())(), event() { document.body.toggleAttribute("compact-layout"); compactLayout.set(!compactLayout.get()); } }] }); }, "module-settings", "menu"); document.body.insertBefore(templateCreate("div", { class: "vue-module-control", style: "display: none;" }), document.body.firstChild); }); const pbContent = await waitUntil(() => !isNil(DOMS(true, "#pb_content"))).then(() => DOMS(true, "#pb_content", "div")); if (perfProfile.get() === "performance" && experimental.get().moreBlurEffect) { pbContent.classList.add("blur-effect"); pbContent.style.backgroundColor = "var(--trans-default-background)"; } createContents(); async function createContents() { var _a; const threadList = await waitUntil(() => !isNil(DOMS(true, "#j_p_postlist"))).then(() => DOMS(true, "#j_p_postlist")); threadList.classList.add("content-wrapper"); let thread2 = threadParser(); const forumIconLink = thread2.forum.components.iconContainer.children[0].src; insertJSX(vue.createVNode("div", { "id": "title-wrapper" }, [vue.createVNode("h3", { "class": "thread-title" }, [PageData.thread.title]), vue.createVNode(_sfc_main$m, { "class": "forum-wrapper-button", "noBorder": true }, { default: () => [vue.createVNode("img", { "class": "forum-icon", "src": forumIconLink, "alt": "" }, null), vue.createVNode("a", { "class": "forum-name", "href": `/f?kw=${PageData.forum.name_url}`, "target": "_blank" }, [PageData.forum.forum_name, vue.createTextVNode(" 吧")]), vue.createVNode("div", { "class": "button-container" }, [vue.createVNode(_sfc_main$m, { "class": "icon forum-button add-forum-button", "noBorder": true }, { default: () => [PageData.user.is_like ? "check" : "add"] })])] })]), DOMS(true, ".content"), DOMS(true, "#pb_content")); bindFloatMessage(DOMS(true, ".forum-wrapper-button"), `关注 ${PageData.forum.member_count},帖子 ${PageData.forum.post_num}`); DOMS(true, ".add-forum-button", "button").addEventListener("click", function() { DOMS(true, "#j_head_focus_btn", "button").click(); }); (_a = DOMS(true, ".sign-in-button", "button")) == null ? void 0 : _a.addEventListener("click", function() { DOMS(true, ".j_signbtn", "button").click(); }); threadFloorsObserver.addEvent(function() { if (DOMS(".d_author").length === 0) return; thread2 = threadParser(); forEach(DOMS(".d_post_content_main", "div", threadList), (floor, i) => { const authorContainer = createAuthorContainer(i); floor.insertBefore(authorContainer, floor.firstChild); }); forEach(DOMS(".d_author"), (el) => el.remove()); }); function createAuthorContainer(index2) { const authorContainer = templateCreate("div", { class: "author-container" }); thread2.cotents[index2].profile.nameAnchor.classList.add("anchor"); authorContainer.appendChild(thread2.cotents[index2].profile.avatar); authorContainer.appendChild(thread2.cotents[index2].profile.nameAnchor); const badgeContainer = appendJSX(vue.createVNode("div", { "class": "badge-container" }, null), authorContainer); appendJSX(vue.createVNode("div", { "class": `floor-badge level-${levelToClass(thread2.cotents[index2].profile.level)}` }, [vue.createVNode("div", { "class": "badge-level" }, [thread2.cotents[index2].profile.level]), vue.createVNode("div", { "class": "badge-title" }, [thread2.cotents[index2].profile.badgeTitle])]), badgeContainer.el); if (thread2.cotents[index2].isLouzhu) appendJSX(vue.createVNode("div", { "class": "floor-badge" }, [vue.createTextVNode("楼主")]), badgeContainer.el); return authorContainer; } const avatarObserver = new IntersectionObserver(function(entries, observer) { forEach(entries, function(entry) { if (entry.isIntersecting) { const avatar = entry.target.children[0]; const lazyLink = avatar.getAttribute("data-tb-lazyload"); if (avatar.src !== lazyLink) { if (lazyLink) avatar.src = lazyLink; else observer.unobserve(entry.target); } else { observer.unobserve(entry.target); } } }); }, { root: null, rootMargin: "0px", threshold: 0.5 }); forEach(thread2.cotents, (content) => { avatarObserver.observe(content.profile.avatar); }); threadCommentsObserver.addEvent(() => { forEach(DOMS(".lzl_cnt"), (el) => { forEach(el.childNodes, (node) => { if (node) node.nodeType === 3 ? node.remove() : void 0; }); }); }); } const pagerVNodes = []; const insertPager = (parent, position, additionalStyles) => { const { vnode: pagerVNode } = insertJSX(createPager(additionalStyles), parent, position ?? void 0); pagerVNodes.push(pagerVNode); function createPager(additionalStyles2) { const pagerComponent = vue.createVNode(Pager$1, { "total": PageData.pager.total_page, "current": PageData.pager.cur_page, "showPagers": PageData.pager.total_page > 1, "pagerChange": function(page) { pager.jumpTo(page); forEach(pagerVNodes, (pagerVNode2) => { pagerVNode2.component.exposeProxy.current = page; }); }, "style": parseCSSRule({ width: "100%", padding: "0", ...additionalStyles2 }) }, { tailSlot: () => `回帖 ${PageData.thread.reply_num}` }); return pagerComponent; } }; insertPager(pbContent, pbContent.firstChild, { marginBottom: "24px", position: PageData.pager.total_page <= 1 ? "absolute" : "", right: PageData.pager.total_page <= 1 ? "48px" : "" }); createTextbox(); async function createTextbox() { await waitUntil(() => !isNil(floatBar.get())); await waitUntil(() => !isNil(DOMS(true, "#ueditor_replace"))); if (!some(floatBar.buttons(), { type: "post" })) { floatBar.add("post", showEditor, void 0, void 0, 2); } const postButton = find$1(floatBar.buttons(), (button) => { return button.type === "post"; }); postButton == null ? void 0 : postButton.el.addEventListener("click", showEditor); insertPager(pbContent, pbContent.lastChild, { paddingTop: "24px" }); appendJSX(vue.createVNode("div", { "id": "thread-jsx-components" }, [vue.createVNode(_sfc_main$m, { "class": "dummy-button", "noBorder": true, "onClick": showEditor }, { default: () => [vue.createTextVNode("回复帖子")] })]), pbContent); function showEditor() { const ueditor = function() { if (DOMS(".edui-container").length > 0) return DOMS(true, ".edui-container"); return DOMS(true, "#ueditor_replace"); }(); renderDialog(ThreadEditor, { ueditor, type: "reply" }, { forced: true, blurEffect: false, darker: true }); } } } setTheme(themeType.get()); darkPrefers.addEventListener("change", () => setTheme(themeType.get())); Promise.all([ loadDynamicCSS(), loadTiebaCSS(), index$g(), thread(), parseUserModules( /* @__PURE__ */ Object.assign({ "./modules/easy-jump/index.ts": () => Promise.resolve().then(() => index$f), "./modules/no-login/index.ts": () => Promise.resolve().then(() => index$d), "./modules/notrans-emojis/index.ts": () => Promise.resolve().then(() => index$b), "./modules/portal/index.ts": () => Promise.resolve().then(() => index$9), "./modules/remixed-theme/index.ts": () => Promise.resolve().then(() => index$7), "./modules/shield/index.ts": () => Promise.resolve().then(() => index$5), "./modules/tieba-tags/index.ts": () => Promise.resolve().then(() => index$3), "./modules/toolkit/index.ts": () => Promise.resolve().then(() => index$1) }), (module2) => { AllModules().push(module2); } ), document.addEventListener("DOMContentLoaded", function() { if (currentPageType() === "thread") { threadFloorsObserver.observe(); threadCommentsObserver.observe(); } if (currentPageType() === "index") { if (!pageExtension.get().index) legacyIndexFeedsObserver.observe(); } if (currentPageType() === "forum") { forumThreadsObserver.observe(); } }) ]); window.addEventListener("load", function() { checkUpdateAndNotify(); }); waitUntil(() => !isNil(document.body)).then(function() { if (wideScreen.get().noLimit) { document.body.classList.add("shrink-view"); } else { const shrinkListener = throttle(function() { if (window.innerWidth <= wideScreen.get().maxWidth) { document.body.classList.add("shrink-view"); } else { document.body.classList.remove("shrink-view"); } }, 200); shrinkListener(); window.addEventListener("resize", shrinkListener); } }); loadPerf(); console.info(REMIXED); const tiebaForum = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ __proto__: null }, Symbol.toStringTag, { value: "Module" })); const index$e = { id: "easy-jump", name: "直链跳转", author: "锯条", version: "1.0.2", brief: "链接跳转避免二次确认", description: `自动跳转至分享链接的原始地址,不再进行中转(不处理被严重警告的链接)`, scope: /jump2?.bdimg.com\/safecheck\//, runAt: "immediately", entry: main$6 }; function main$6() { afterHead(function() { injectCSSRule("html", { backgroundColor: "var(--page-background)" }); injectCSSRule("body", { display: "none" }); }); waitUntil(() => DOMS(".link").length > 0).then(function() { const link = DOMS(".link")[0].innerText; location.href = link; }); } const index$f = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ __proto__: null, default: index$e }, Symbol.toStringTag, { value: "Module" })); const index$c = { id: "nologin-tieba", name: "免登录浏览", author: "锯条", version: "1.0", brief: "免登录浏览贴吧", description: `始终伪装为已登录状态,让免登录浏览和已登录基本一致`, scope: ["thread"], runAt: "DOMLoaded", entry: main$5 }; function main$5() { if (PageData.user.is_login) return; PageData.user.is_login = 1; } const index$d = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ __proto__: null, default: index$c }, Symbol.toStringTag, { value: "Module" })); const index$a = { id: "notrans-emojis", name: "别动我的 emoji😠", author: "锯条", version: "1.0", brief: "拒绝替换我的 emoji", description: "原版贴吧会将部分emoji表情替换为旧版,该模块会让这些emoji重新跟随系统样式", scope: true, runAt: "afterHead", entry: main$4 }; function main$4() { const indexRegExp = new RegExp("(?<=nickemoji\\/).*?(?=.png)", "gi"); const emojis = [ "º", "◎", "▫", "◆", "♤", "♀", "♂", "ლ", "♬", "☞", "☜", "✆", "☎", "♋", "Ω", "℃", "℉", "😄", "😍", "😘", "😚", "😜", "😳", "😁", "😞", "😢", "😂", "😫", "😨", "😱", "😡", "😷", "😲", "😈", "🐷", "🐶", "🐑", "🐵", "🐨", "🐴", "🐼", "🐯", "🍪", "🍺", "🍦", "🍭", "🍗", "🍼", "🔯", "🍒", "👀", "🐭", "😇", "😺", "😻", "🙀", "😿", "😹", "😾", "👹", "👺", "🌞", "🌝", "🌚", "🌜", "🌛", "👦", "👧", "🎎", "🌸", "🍀", "🌹", "🌻", "🌺", "🍁", "🌿", "🍄", "🌵", "🌴", "🌳", "🌰", "🌱", "🌼", "🌐", "🌙", "🌋", "🌌", "⛅", "⚡", "☔", "⛄", "🌀", "🌈", "🌊", "🔥", "✨", "🌟", "💥", "💫", "💢", "💦", "💧", "💤", "💨", "🎀", "🌂", "💄", "💕", "💖", "💞", "💘", "💌", "💋", "💝", "🎒", "🎓", "🎏", "🎃", "👻", "🎅", "🎄", "🎁", "🙈", "🐒", "💯", "👯", "💍" ]; const transformed = [ "1-1.png", "1-2.png", "1-4.png", "1-5.png", "1-6.png", "1-7.png", "1-8.png", "1-9.png", "1-10.png", "1-11.png", "1-12.png", "1-13.png", "1-14.png", "1-15.png", "1-16.png", "1-17.png", "1-18.png", "1-19.png", "1-20.png", "1-21.png", "1-22.png", "1-23.png", "1-24.png", "1-25.png", "1-26.png", "1-27.png", "1-28.png", "1-29.png", "1-30.png", "1-31.png", "1-32.png", "1-33.png", "1-34.png", "1-35.png", "2-1.png", "2-2.png", "2-3.png", "2-4.png", "2-5.png", "2-6.png", "2-7.png", "2-8.png", "2-9.png", "2-10.png", "2-11.png", "2-12.png", "2-13.png", "2-14.png", "2-15.png", "2-16.png", "2-17.png", "2-18.png", "2-19.png", "2-20.png", "2-21.png", "2-22.png", "2-23.png", "2-24.png", "2-25.png", "2-26.png", "2-27.png", "2-28.png", "2-29.png", "2-30.png", "2-31.png", "2-32.png", "2-33.png", "2-34.png", "2-35.png", "3-1.png", "3-2.png", "3-3.png", "3-4.png", "3-5.png", "3-6.png", "3-7.png", "3-8.png", "3-9.png", "3-10.png", "3-11.png", "3-12.png", "3-13.png", "3-14.png", "3-15.png", "3-16.png", "3-17.png", "3-18.png", "3-19.png", "3-20.png", "3-21.png", "3-22.png", "3-23.png", "3-24.png", "3-25.png", "3-26.png", "3-27.png", "3-28.png", "3-29.png", "3-30.png", "3-31.png", "3-32.png", "3-33.png", "3-34.png", "3-35.png", "4-1.png", "4-2.png", "4-3.png", "4-4.png", "4-5.png", "4-6.png", "4-7.png", "4-8.png", "4-9.png", "4-10.png", "4-11.png", "4-12.png", "4-13.png", "4-14.png", "4-15.png", "4-16.png", "4-17.png", "4-18.png", "4-19.png", "4-20.png", "4-21.png", "4-22.png", "4-23.png" ]; threadCommentsObserver.addEvent(() => { try { forEach(DOMS(` .p_author_name:has(.nicknameEmoji), .at:has(.nicknameEmoji), .lzl_content_main:has(.nicknameEmoji) `), (el) => { updateEmojis(el); }); } catch (error) { forEach(DOMS(".p_author_name, .at, .lzl_content_main"), (el) => { if (includes(el.classList, "nicknameEmoji")) { updateEmojis(el); } }); } }); legacyIndexFeedsObserver.addEvent(() => { try { forEach(DOMS(` .new_list .post_author:has(.nicknameEmoji), .userinfo_username:has(.nicknameEmoji) `), (el) => { updateEmojis(el); }); } catch (error) { forEach(DOMS(".newlist .post_author, .userinfo_username"), (el) => { if (includes(el.classList, "nicknameEmoji")) { updateEmojis(el); } }); } }); forumThreadsObserver.addEvent(() => { try { forEach(DOMS(".threadlist_author a:has(.nicknameEmoji)"), (el) => { updateEmojis(el); }); } catch (error) { forEach(DOMS(".threadlist_author a"), (el) => { if (includes(el.classList, "nicknameEmoji")) { updateEmojis(el); } }); } }); function updateEmojis(elem) { const arrIndex = elem.innerHTML.match(indexRegExp); arrIndex == null ? void 0 : arrIndex.forEach((index2) => { const emoji = emojis[transformed.indexOf(`${index2}.png`)]; const arrInner = elem.innerHTML.split(RegExp( `]*?${index2}.png(?:[^>]*?)*>`, "g" )); elem.innerHTML = arrInner.join(decodeURIComponent(emoji)); }); } } const index$b = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ __proto__: null, default: index$a }, Symbol.toStringTag, { value: "Module" })); const index$8 = { id: "portal", name: "传送门", author: "锯条", version: "1.1.1", brief: "为贴子中的b站番号添加跳转链接", description: `该模块可以识别贴子中的 av/BV 号并将其转换为超链接`, scope: ["thread"], runAt: "immediately", entry: main$3 }; function main$3() { const LINKED_CLASS = "linked"; const avRegExp = new RegExp("(? { threadCommentsObserver.addEvent(biliPortal); }); function biliPortal() { addBiliLinks(".d_post_content"); addBiliLinks(".lzl_cnt .lzl_content_main"); function addBiliLinks(selector) { forEach(DOMS(selector), (elem) => { var _a, _b, _c, _d; if (elem.classList.contains(LINKED_CLASS)) return; elem.classList.add(LINKED_CLASS); if (((_a = elem.textContent) == null ? void 0 : _a.toLowerCase().indexOf("av")) !== -1) { const avs = (_b = elem.textContent) == null ? void 0 : _b.match(avRegExp); bindingLinks(avs ?? void 0, true); } if (((_c = elem.textContent) == null ? void 0 : _c.indexOf("BV")) !== -1) { const BVs = (_d = elem.textContent) == null ? void 0 : _d.match(BVRegExp); bindingLinks(BVs ?? void 0); } function bindingLinks(array, lowerCase = false) { if (!array) return; const hadHyperLink = []; forEach(array, (videoID) => { if (hadHyperLink.indexOf(videoID) === -1) { hadHyperLink.push(videoID); const htmlArray = elem.innerHTML.split( RegExp(`(?${videoID}`; elem.innerHTML = htmlArray.join(linkedID); } }); } }); } } } const index$9 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ __proto__: null, default: index$8 }, Symbol.toStringTag, { value: "Module" })); const floatMessageCSS = "@keyframes kf-fade-in {\n 0% {\n opacity: 0;\n }\n 100% {\n opacity: 1;\n }\n}\n@keyframes kf-fade-out {\n 0% {\n opacity: 1;\n }\n 100% {\n opacity: 0;\n }\n}\n@keyframes kf-dialog-in {\n 0% {\n opacity: 0;\n transform: scale(1.2);\n }\n 100% {\n opacity: 1;\n transform: scale(1);\n }\n}\n@keyframes kf-zoom-in {\n 0% {\n transform: scale(0.72);\n }\n 100% {\n transform: scale(1);\n }\n}\n@keyframes kf-fade-zoom-in {\n 0% {\n opacity: 0;\n transform: scale(0.72);\n }\n 100% {\n opacity: 1;\n transform: scale(1);\n }\n}\nhtml {\n padding: 0;\n margin: 0;\n text-align: justify;\n}\n\nbody {\n overflow-x: hidden;\n overflow-y: scroll;\n overflow: hidden scroll;\n padding: 0;\n margin: 0;\n font-family: var(--code-zh);\n}\nbody[no-scrollbar] {\n overflow: hidden;\n}\n\ndiv,\np {\n margin: 0;\n}\n\nselect {\n padding: 1px 8px;\n border: 1px solid var(--border-color);\n border-radius: 8px;\n cursor: pointer;\n}\n\noption {\n cursor: pointer;\n}\n\noption:checked {\n background-color: var(--tieba-theme-color);\n color: var(--default-background);\n}\n\na {\n color: inherit;\n -webkit-text-decoration: none;\n text-decoration: none;\n word-break: break-all;\n}\n\n.dialogJ {\n position: fixed !important;\n top: 50% !important;\n left: 50% !important;\n}\n\n.dialogJ {\n transform: translate(-50%, -50%);\n}\n\n.float-message {\n position: fixed;\n z-index: 99999;\n display: none;\n overflow: hidden;\n box-sizing: border-box;\n padding: 4px 6px;\n border: 1px solid var(--border-color);\n border-radius: 6px;\n background-color: var(--default-background);\n font-size: 14px;\n box-shadow: 0 0 10px rgba(0, 0, 0, 0.01);\n animation: kf-fade-in 0.2s;\n}\nhtml.dark-theme .float-message {\n box-shadow: 0 0 16px rgba(0, 0, 0, 0.2);\n}\n.float-message .float-content {\n display: flex;\n overflow: auto;\n}"; const userButtonCSS = "@keyframes kf-fade-in {\n 0% {\n opacity: 0;\n }\n 100% {\n opacity: 1;\n }\n}\n@keyframes kf-fade-out {\n 0% {\n opacity: 1;\n }\n 100% {\n opacity: 0;\n }\n}\n@keyframes kf-dialog-in {\n 0% {\n opacity: 0;\n transform: scale(1.2);\n }\n 100% {\n opacity: 1;\n transform: scale(1);\n }\n}\n@keyframes kf-zoom-in {\n 0% {\n transform: scale(0.72);\n }\n 100% {\n transform: scale(1);\n }\n}\n@keyframes kf-fade-zoom-in {\n 0% {\n opacity: 0;\n transform: scale(0.72);\n }\n 100% {\n opacity: 1;\n transform: scale(1);\n }\n}"; const floatBarCSS = '@keyframes kf-fade-in {\n 0% {\n opacity: 0;\n }\n 100% {\n opacity: 1;\n }\n}\n@keyframes kf-fade-out {\n 0% {\n opacity: 1;\n }\n 100% {\n opacity: 0;\n }\n}\n@keyframes kf-dialog-in {\n 0% {\n opacity: 0;\n transform: scale(1.2);\n }\n 100% {\n opacity: 1;\n transform: scale(1);\n }\n}\n@keyframes kf-zoom-in {\n 0% {\n transform: scale(0.72);\n }\n 100% {\n transform: scale(1);\n }\n}\n@keyframes kf-fade-zoom-in {\n 0% {\n opacity: 0;\n transform: scale(0.72);\n }\n 100% {\n opacity: 1;\n transform: scale(1);\n }\n}\nhtml {\n padding: 0;\n margin: 0;\n text-align: justify;\n}\n\nbody {\n overflow-x: hidden;\n overflow-y: scroll;\n overflow: hidden scroll;\n padding: 0;\n margin: 0;\n font-family: var(--code-zh);\n}\nbody[no-scrollbar] {\n overflow: hidden;\n}\n\ndiv,\np {\n margin: 0;\n}\n\nselect {\n padding: 1px 8px;\n border: 1px solid var(--border-color);\n border-radius: 8px;\n cursor: pointer;\n}\n\noption {\n cursor: pointer;\n}\n\noption:checked {\n background-color: var(--tieba-theme-color);\n color: var(--default-background);\n}\n\na {\n color: inherit;\n -webkit-text-decoration: none;\n text-decoration: none;\n word-break: break-all;\n}\n\n.dialogJ {\n position: fixed !important;\n top: 50% !important;\n left: 50% !important;\n}\n\n.dialogJ {\n transform: translate(-50%, -50%);\n}\n\n.tbui_aside_float_bar {\n background-color: var(--very-light-background) !important;\n}\n\n.tbui_aside_float_bar {\n bottom: 20px;\n left: calc(50% + var(--content-max) / 2 + 20px);\n display: flex;\n overflow: hidden;\n width: -moz-max-content;\n width: max-content;\n flex-direction: column;\n border-radius: 8px;\n margin-left: 0;\n gap: 4px;\n box-shadow: 0 0 10px rgba(0, 0, 0, 0.01);\n}\nhtml.dark-theme .tbui_aside_float_bar {\n box-shadow: 0 0 16px rgba(0, 0, 0, 0.2);\n}\n.shrink-view .tbui_aside_float_bar {\n bottom: 0;\n left: calc(100% - 40px);\n}\n.tbui_aside_float_bar .tbui_aside_fbar_button {\n margin: 0 !important;\n}\n.tbui_aside_float_bar .tbui_aside_fbar_button {\n border-radius: 0;\n background-color: var(--default-background);\n transition: 0.4s;\n}\n.tbui_aside_float_bar .tbui_aside_fbar_button a {\n border-radius: 0;\n}\n.tbui_aside_float_bar .tbui_aside_fbar_button a:hover {\n color: var(--tieba-theme-color);\n}\n.tbui_aside_float_bar .tbui_aside_fbar_button a:active {\n color: var(--tieba-theme-fore);\n}\n.tbui_aside_float_bar .tbui_aside_fbar_button[style*="visibility: hidden"] {\n margin-top: -4px !important;\n}\n.tbui_aside_float_bar .tbui_aside_fbar_button[style*="visibility: hidden"] {\n height: 0;\n}'; const _hoisted_1$2 = { key: 0, class: "menu-separator" }; const _hoisted_2$2 = { key: 0, class: "icon" }; const _hoisted_3$2 = { class: "menu-title" }; const _hoisted_4$2 = { key: 0, class: "menu-inner" }; const _sfc_main$2 = /* @__PURE__ */ vue.defineComponent({ __name: "dropdown-menu", props: { menuItems: {}, blurEffect: { type: Boolean } }, emits: ["RequestClose"], setup(__props, { emit: __emit }) { const props = __props; const emit = __emit; vue.onMounted(() => { setTimeout(() => { window.addEventListener("click", () => { setTimeout(() => { emit("RequestClose"); }, 100); }); window.addEventListener("focusin", (ev) => { if (!findParent(ev.target, "dropdown-menu")) { emit("RequestClose"); } }); }, 100); }); return (_ctx, _cache) => { return vue.openBlock(), vue.createElementBlock("div", { class: vue.normalizeClass(["dropdown-menu", _ctx.blurEffect ? "blur-effect" : ""]) }, [ (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(props.menuItems, (menuItem) => { return vue.openBlock(), vue.createElementBlock(vue.Fragment, null, [ typeof menuItem === "string" ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_1$2)) : (vue.openBlock(), vue.createBlock(_sfc_main$m, { key: 1, class: "menu-item", "is-anchor": menuItem.href !== void 0, href: menuItem.href ? menuItem.href : "javascript:;", onClick: menuItem.click, target: menuItem.href ? "_blank" : "", "no-border": "" }, { default: vue.withCtx(() => [ menuItem.icon ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_2$2, vue.toDisplayString(menuItem.icon), 1)) : vue.createCommentVNode("", true), vue.createElementVNode("div", _hoisted_3$2, [ vue.createTextVNode(vue.toDisplayString(menuItem.title) + " ", 1), menuItem.innerText ? (vue.openBlock(), vue.createElementBlock("span", _hoisted_4$2, vue.toDisplayString(menuItem.innerText), 1)) : vue.createCommentVNode("", true) ]) ]), _: 2 }, 1032, ["is-anchor", "href", "onClick", "target"])) ], 64); }), 256)) ], 2); }; } }); const DropdownMenu = /* @__PURE__ */ _export_sfc(_sfc_main$2, [["__scopeId", "data-v-50de6ad2"]]); const _withScopeId$1 = (n) => (vue.pushScopeId("data-v-4cad486c"), n = n(), vue.popScopeId(), n); const _hoisted_1$1 = { id: "fold-bar" }; const _hoisted_2$1 = { id: "nav-container" }; const _hoisted_3$1 = { class: "left-container" }; const _hoisted_4$1 = ["src"]; const _hoisted_5$1 = /* @__PURE__ */ _withScopeId$1(() => /* @__PURE__ */ vue.createElementVNode("p", { class: "nav-title" }, "贴吧", -1)); const _hoisted_6$1 = { class: "right-container" }; const _hoisted_7$1 = { class: "middle-container" }; const _sfc_main$1 = /* @__PURE__ */ vue.defineComponent({ __name: "nav-bar", props: { hideMode: { default: navBarHideMode.get() } }, setup(__props) { const props = __props; const navBar = vue.ref(); const teiggerHide = vue.ref(false); const navAvatar = vue.ref(); const userPortrait = vue.ref(""); const middleMenu = vue.ref({}); const userMenu = vue.ref([]); const extendMenu = vue.ref([]); init(); vue.onMounted(async function() { { waitUntil(() => userPortrait.value !== "").then(function() { if (navAvatar.value) navAvatar.value.src = tiebaAPI.URL_profile(userPortrait.value); }); } }); async function init() { await waitUntil(() => PageData !== void 0).then(() => { userPortrait.value = PageData.user.portrait; loadNavMenuContent(); }); forEach(DOMS(".menu-trigger", "button", DOMS(true, "#nav-bar")), (el) => { el.addEventListener("mousemove", function(e) { e.stopPropagation(); const menu = el.lastElementChild; const elRect = el.getBoundingClientRect(); const menuCoord = getFloatCoord(menu, { x: elRect.left + elRect.width / 2, y: 0 }, "middle"); menu.style.left = `${menuCoord.x}px`; menu.style.top = "48px"; }); }); switch (props.hideMode) { case "alwaysFold": teiggerHide.value = true; break; case "fold": case "hideWhenScroll": { const modeClass = props.hideMode === "fold" ? "fold" : "hide"; const threshold = 50, timeout = 1e3; let lastScrollY = window.scrollY; let timer = -1; const handle = throttle(function() { var _a, _b; if (window.scrollY > lastScrollY + threshold) { (_a = navBar.value) == null ? void 0 : _a.classList.add(modeClass); teiggerHide.value = true; clearTimeout(timer); } else if (window.scrollY < lastScrollY - threshold) { (_b = navBar.value) == null ? void 0 : _b.classList.remove(modeClass); teiggerHide.value = false; clearTimeout(timer); } else { clearTimeout(timer); timer = setTimeout(handle, timeout); } lastScrollY = window.scrollY; }); window.addEventListener("scroll", handle); break; } } } async function login() { const loginButton = DOMS(".u_login"); const directLoginButton = DOMS("#TANGRAM__PSP_24__submit"); if (directLoginButton.length > 0) { const confirmDirect = await messageBox({ title: "快速登录", message: "检测到快速登录入口,是否尝试直接登录?", type: "OkCancel" }); if (confirmDirect === "positive") { directLoginButton[0].click(); } else { regularLogin(); } } else { regularLogin(); } function regularLogin() { loginButton.length > 0 ? DOMS("a", loginButton[0])[0].click() : cannotLogin(); } function cannotLogin() { toast({ message: "未检测到可用的登录入口,请刷新重试", type: "warning" }); } } function loadNavMenuContent() { middleMenu.value = { "消息": [ { title: "查看私信", href: "/im/pcmsg" }, { title: "查看回复", href: `/i/sys/jump?u=${userPortrait.value}&type=replyme` }, { title: "查看 @", href: `/i/sys/jump?u=${userPortrait.value}&type=atme` }, "separator", { title: "查看好友申请", href: `/i/sys/jump?u=${userPortrait.value}&type=friendapply` }, { title: "查看新粉丝", href: `/i/sys/jump?u=${userPortrait.value}&type=fans` }, "separator", { title: "我的收藏", href: `/i/sys/jump?u=${userPortrait.value}&type=storethread` }, { title: "我的通知", href: "/sysmsg/index?type=notity" } ], "更多": [ { title: "账号设置", href: "//passport.baidu.com/?center&tpl=tb&aid=6&default_tab=3#3,0" }, { title: "贴吧设置", href: `/home/profile?un=${PageData.user.name_url}` }, "separator", { title: "服务中心", href: "//tieba.baidu.com/pmc" }, { title: "问题反馈", href: "//tieba.baidu.com/hermes/feedback" } ] }; userMenu.value = [ { title: "我的贴吧", href: `/home/main?id=${userPortrait.value}&fr=userbar` }, { title: "我的收藏", href: `/i/sys/jump?un=${PageData.user.user_name}${PageData.user.name_url}&type=storethread&st_mod=userbar&fr=tb0_pb` } ]; PageData.user.is_login ? userMenu.value.push("separator", { title: "退出登录", click() { DOMS("a", "a", DOMS(".u_logout")[0])[0].click(); } }) : userMenu.value.push("separator", { title: "登录", click() { login(); } }); extendMenu.value = [ { title: "脚本设置", click() { renderDialog(Settings); } }, { title: "检查更新", click() { checkUpdateAndNotify(true); } }, "separator", { title: "源代码仓库", innerText: "GitHub", href: GithubRepo }, { title: "源代码仓库", innerText: "Gitee", href: GiteeRepo }, { title: "切换至 GreasyFork", href: "https://greasyfork.org/zh-CN/scripts/460113" } ]; } return (_ctx, _cache) => { return vue.openBlock(), vue.createElementBlock("nav", { ref_key: "navBar", ref: navBar, id: "nav-bar", class: vue.normalizeClass(["nav-bar remove-default", { "fold": _ctx.hideMode === "alwaysFold", "blur-effect": !vue.unref(experimental).get().rasterEffect, "raster-effect": vue.unref(experimental).get().rasterEffect, "fixed-on-top": _ctx.hideMode === "fixedOnTop" }]) }, [ vue.withDirectives(vue.createElementVNode("div", _hoisted_1$1, null, 512), [ [vue.vShow, teiggerHide.value] ]), vue.createElementVNode("div", _hoisted_2$1, [ vue.createElementVNode("div", _hoisted_3$1, [ vue.createVNode(_sfc_main$m, { class: "nav-button nav-title-container", "is-anchor": "", href: "/", "no-border": "all" }, { default: vue.withCtx(() => [ vue.createElementVNode("img", { src: vue.unref(getResource)("/assets/images/main/icon64.png"), alt: "", class: "nav-icon" }, null, 8, _hoisted_4$1), _hoisted_5$1 ]), _: 1 }) ]), vue.createElementVNode("div", _hoisted_6$1, [ vue.createElementVNode("div", _hoisted_7$1, [ (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(middleMenu.value, (menu, key) => { return vue.openBlock(), vue.createBlock(_sfc_main$m, { key, class: "menu-trigger middle-menu-trigger", "no-border": "all" }, { default: vue.withCtx(() => [ vue.createTextVNode(vue.toDisplayString(key) + " ", 1), vue.createVNode(DropdownMenu, { class: "nav-menu", "menu-items": menu }, null, 8, ["menu-items"]) ]), _: 2 }, 1024); }), 128)) ]), vue.createVNode(_sfc_main$m, { class: "nav-button menu-trigger avatar-button", "no-border": "all" }, { default: vue.withCtx(() => [ vue.createElementVNode("img", { ref_key: "navAvatar", ref: navAvatar, class: "nav-avatar" }, null, 512), vue.createVNode(DropdownMenu, { class: "nav-menu", "menu-items": userMenu.value }, null, 8, ["menu-items"]) ]), _: 1 }), vue.createVNode(_sfc_main$m, { class: "nav-button menu-trigger menu-button icon", "shadow-border": "", "no-border": "all" }, { default: vue.withCtx(() => [ vue.createTextVNode(" menu "), vue.createVNode(DropdownMenu, { class: "nav-menu", "menu-items": extendMenu.value, style: { "font-family": "initial" } }, null, 8, ["menu-items"]) ]), _: 1 }) ]) ]) ], 2); }; } }); const navBarVue = /* @__PURE__ */ _export_sfc(_sfc_main$1, [["__scopeId", "data-v-4cad486c"]]); const navBarCSS = "#com_userbar {\n display: none;\n}"; function _navBar() { injectCSSList(navBarCSS); waitUntil(() => DOMS("#com_userbar").length > 0).then(function() { const elder = DOMS("#com_userbar")[0]; const navWrapper = vue.createVNode("div", { "id": "nav-wrapper", "class": "nav-wrapper" }, null); insertJSX(navWrapper, document.body, elder); renderComponent(navBarVue, DOMS("#nav-wrapper")[0]); }); } _navBar(); const index$6 = { id: "remixed-theme", name: "Tieba Remix 主题", author: "锯条", version: "0.3", brief: "更现代的主题样式", description: `包含新的样式、昼夜主题及其自动切换等功能`, scope: true, runAt: "immediately", entry: main$2 }; const themeSheets = []; function main$2() { themeSheets.push(injectCSSList(userButtonCSS)); themeSheets.push(injectCSSList(floatBarCSS)); themeSheets.push(injectCSSList(floatMessageCSS)); fadeInElems.push(".tbui_aside_float_bar .svg-container"); fadeInElems.push(".d_badge_bright .d_badge_lv, .user_level .badge_index"); fadeInElems.forEach((selector) => { injectCSSRule(selector, { opacity: "0" }); }); setCustomBackground(); document.addEventListener("DOMContentLoaded", () => { DOMS(".post-tail-wrap .icon-jubao").forEach((elem) => { elem.removeAttribute("src"); elem.after("举报"); }); threadFloorsObserver.addEvent(() => { DOMS(".d_badge_lv").forEach((elem) => { if (elem.textContent === "") { let parent = elem; while (!parent.classList.contains("l_badge")) { if (parent.parentElement) parent = parent.parentElement; } parent.style.display = "none"; } }); }); }); window.addEventListener("load", () => { fadeInLoad(".tbui_aside_float_bar .svg-container"); threadFloorsObserver.addEvent(() => { const lvlClassHead = "tieba-lvl-"; const lvlGreen = `${lvlClassHead}green`; const lvlBlue = `${lvlClassHead}blue`; const lvlYellow = `${lvlClassHead}yellow`; const lvlOrange = `${lvlClassHead}orange`; DOMS( ".d_badge_bawu1 .d_badge_lv, .d_badge_bawu2 .d_badge_lv, .badge_index" ).forEach((elem) => { if (elem.className.indexOf(lvlClassHead) !== -1) return; const lvl = parseInt(defaults(elem.textContent, "0")); if (lvl >= 1 && lvl <= 3) { elem.classList.add(lvlGreen); } else if (lvl >= 4 && lvl <= 9) { elem.classList.add(lvlBlue); } else if (lvl >= 10 && lvl <= 15) { elem.classList.add(lvlYellow); } else if (lvl >= 16) { elem.classList.add(lvlOrange); } }); fadeInLoad(".d_badge_bright .d_badge_lv, .user_level .badge_index"); }); themeSheets.forEach((sheet) => { document.head.appendChild(sheet); }); }); } const index$7 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ __proto__: null, default: index$6 }, Symbol.toStringTag, { value: "Module" })); const shieldList = new UserKey("shieldList", []); const _withScopeId = (n) => (vue.pushScopeId("data-v-64c498cf"), n = n(), vue.popScopeId(), n); const _hoisted_1 = { class: "shield-container" }; const _hoisted_2 = { key: 0, class: "words-container" }; const _hoisted_3 = { class: "icon" }; const _hoisted_4 = { key: 1, class: "empty-list-container" }; const _hoisted_5 = { class: "shield-controls" }; const _hoisted_6 = { class: "submit-controls" }; const _hoisted_7 = { class: "regex-check" }; const _hoisted_8 = /* @__PURE__ */ _withScopeId(() => /* @__PURE__ */ vue.createElementVNode("label", { for: "use-regex" }, "正则表达式", -1)); const _hoisted_9 = { class: "user-scope" }; const _hoisted_10 = /* @__PURE__ */ _withScopeId(() => /* @__PURE__ */ vue.createElementVNode("label", { for: "user-scope" }, "屏蔽用户名", -1)); const _sfc_main = /* @__PURE__ */ vue.defineComponent({ __name: "module.shield", setup(__props) { const shieldListRef = vue.ref(shieldList.get()); const inputRule = vue.ref(""); const useRegex = vue.ref(false); const scope = vue.ref("posts"); function inputKeyPress(e) { if (e.key === "Enter") { e.preventDefault(); updateShieldList(); } } function removeAll() { shieldListRef.value.length = 0; shieldList.remove(); } function removeAllWithConfirm() { if (confirm("确定要删除所有屏蔽规则吗?")) { removeAll(); } } function updateShieldList() { if (inputRule.value.length <= 0) return; const sh = { rule: inputRule.value, type: useRegex.value ? "regex" : "string", scope: scope.value, switch: true }; shieldListRef.value.push(sh); inputRule.value = ""; shieldList.set(shieldListRef.value); } return (_ctx, _cache) => { return vue.openBlock(), vue.createElementBlock("div", _hoisted_1, [ shieldListRef.value.length > 0 ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_2, [ (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(shieldListRef.value, (sh) => { return vue.openBlock(), vue.createBlock(_sfc_main$m, { class: vue.normalizeClass(["shield-elem", { "content-scope": sh.scope === "posts", "user-scope": sh.scope === "users" }]) }, { default: vue.withCtx(() => [ vue.createElementVNode("div", _hoisted_3, vue.toDisplayString(sh.scope === "posts" ? "chat" : "account_circle"), 1), vue.createTextVNode(" " + vue.toDisplayString(sh.rule), 1) ]), _: 2 }, 1032, ["class"]); }), 256)), vue.createVNode(_sfc_main$m, { class: "remove-all shield-elem icon", onClick: removeAllWithConfirm }, { default: vue.withCtx(() => [ vue.createTextVNode("delete") ]), _: 1 }) ])) : (vue.openBlock(), vue.createElementBlock("div", _hoisted_4, "当前没有记录屏蔽规则")), vue.createElementVNode("div", _hoisted_5, [ vue.createVNode(UserTextbox, { modelValue: inputRule.value, "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => inputRule.value = $event), "muti-lines": true, class: "shield-input", placeholder: "输入屏蔽规则", onKeypress: inputKeyPress }, null, 8, ["modelValue"]), vue.createElementVNode("div", _hoisted_6, [ vue.createElementVNode("div", _hoisted_7, [ vue.withDirectives(vue.createElementVNode("input", { "onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => useRegex.value = $event), id: "use-regex", type: "checkbox" }, null, 512), [ [vue.vModelCheckbox, useRegex.value] ]), _hoisted_8 ]), vue.createElementVNode("div", _hoisted_9, [ vue.withDirectives(vue.createElementVNode("input", { "onUpdate:modelValue": _cache[2] || (_cache[2] = ($event) => scope.value = $event), id: "user-scope", type: "checkbox" }, null, 512), [ [vue.vModelCheckbox, scope.value] ]), _hoisted_10 ]), vue.createVNode(_sfc_main$m, { class: "submit-button", "shadow-border": true, "theme-style": true, onClick: updateShieldList }, { default: vue.withCtx(() => [ vue.createTextVNode("确定 ") ]), _: 1 }) ]) ]) ]); }; } }); const moduleShieldVue = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-64c498cf"]]); const index$4 = { id: "shield", name: "贴吧屏蔽", author: "锯条", version: "1.2", brief: "眼不见为净", description: `用户自定义屏蔽规则,符合规则的贴子和楼层将不会显示在首页、看贴页面和进吧页面。支持正则匹配`, scope: true, runAt: "immediately", settings: { "shield-controls": { title: "管理屏蔽规则", description: `这些屏蔽规则将会在首页(旧版)、看贴页面生效,会自动隐藏所有符合匹配规则的贴子和楼层。`, widgets: [{ type: "component", component: vue.markRaw(moduleShieldVue) }] } }, entry: main$1 }; function matchShield(obj, str) { if (obj.ignoreCase === void 0) obj.ignoreCase = true; if (obj.type === "string") { if (obj.ignoreCase) { obj.rule = obj.rule.toLowerCase(); str = str.toLowerCase(); } if (str.indexOf(obj.rule) !== -1) { return true; } } if (obj.type === "regex") { let regex; if (obj.ignoreCase) { regex = new RegExp(obj.rule, "i"); } else { regex = new RegExp(obj.rule); } if (regex.test(str)) { return true; } } return false; } function shieldElementsBySelector(observer, parentSelector, subSelector) { observer.addEvent(() => { DOMS(parentSelector).forEach((elem) => { let isMatch = false; const content = join(map(DOMS(subSelector, elem), (el) => el.textContent ?? ""), "\n"); for (const sh of shieldList.get()) { if (matchShield(sh, content)) { isMatch = true; break; } } if (isMatch) { elem.style.display = "none"; } }); }); } function main$1() { shieldElementsBySelector(threadFloorsObserver, ".l_post_bright", ".d_post_content"); shieldElementsBySelector(threadFloorsObserver, ".l_post_bright", ".d_name a"); shieldElementsBySelector(threadCommentsObserver, ".lzl_single_post", ".lzl_cnt .j_user_card"); shieldElementsBySelector(legacyIndexFeedsObserver, ".j_feed_li", ".title, .n_txt"); shieldElementsBySelector(legacyIndexFeedsObserver, ".j_feed_li", ".post_author"); shieldElementsBySelector(forumThreadsObserver, ".j_thread_list", ".threadlist_title a"); shieldElementsBySelector(forumThreadsObserver, ".j_thread_list", ".frs-author-name-wrap"); } const index$5 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ __proto__: null, default: index$4 }, Symbol.toStringTag, { value: "Module" })); const tagCSS = ':root {\r\n --myself-theme-background: rgba(25, 110, 153, 0.2);\r\n --myself-theme-fore: rgb(16, 73, 101);\r\n --cengzhu-theme-background: rgba(255, 89, 107, 0.2);\r\n --cengzhu-theme-fore: rgb(178, 62, 90);\r\n}\r\n\r\n@media (prefers-color-scheme: dark) {\r\n :root {\r\n --myself-theme-background: rgba(34, 135, 204, 0.2);\r\n --myself-theme-fore: rgb(40, 160, 242);\r\n --cengzhu-theme-background: rgba(204, 71, 103, 0.2);\r\n --cengzhu-theme-fore: rgb(255, 89, 118);\r\n }\r\n}\r\n\r\n.tag-elem {\r\n display: inline-block;\r\n}\r\n\r\n.tag-elem::after {\r\n padding: 2px 6px;\r\n border-radius: 4px;\r\n margin: 0 4px;\r\n background-color: var(--trans-light-background);\r\n color: var(--light-fore);\r\n font-size: 12px;\r\n font-weight: normal;\r\n}\r\n\r\n.tieba-tags-me::after {\r\n /* background-color: var(--myself-theme-background);\r\n color: var(--myself-theme-fore); */\r\n content: "我";\r\n}\r\n\r\n.tieba-tags-lz::after {\r\n /* background-color: var(--tieba-theme-background);\r\n color: var(--tieba-theme-fore); */\r\n content: "楼主";\r\n}\r\n\r\n.tieba-tags-cz::after {\r\n /* background-color: var(--cengzhu-theme-background);\r\n color: var(--cengzhu-theme-fore); */\r\n content: "层主";\r\n}\r\n'; const index$2 = { id: "tieba-tags", name: "楼中楼标签", author: "锯条", version: "2.0.1", brief: "优化楼中楼浏览体验", description: `为楼中楼的楼主、层主等用户添加特殊标签`, scope: ["thread"], runAt: "loaded", entry: main }; function main() { const TAGGED = "is-tagged"; const TB_TAG = "tag-elem"; const MY_TAG = "tieba-tags-me"; const LZ_TAG = "tieba-tags-lz"; const CZ_TAG = "tieba-tags-cz"; const louzhu = PageData.thread.author; const myPortrait = PageData.user.portrait; const myUserName = PageData.user.user_name; let louzhuPortrait = getLouzhuPortrait(document); injectCSSList(tagCSS); (async () => { if (!louzhuPortrait) { const response = await fetch(location.href.split("?")[0], { mode: "cors", credentials: "include" }); if (response.ok) { await response.text().then((value) => { const fpDOC = new DOMParser().parseFromString(value, "text/html"); louzhuPortrait = getLouzhuPortrait(fpDOC); }); } } })().then(() => { threadCommentsObserver.addEvent(createTagsAll); }); function getLouzhuPortrait(doc) { const j_tags = doc.getElementsByClassName("j_louzhubiaoshi"); if (j_tags.length > 0) { const targetFloor = findParent(j_tags[0], "l_post_bright"); if (targetFloor) { const dataAttr = targetFloor.getAttribute("data-field"); if (dataAttr) { const dataField = JSON.parse(dataAttr); return split(dataField.author.portrait, "?")[0]; } } } return void 0; } function createTagsAll() { forEach(DOMS(".lzl_cnt .at"), (elem) => { if (elem.classList.contains(TAGGED)) return; elem.classList.add(TAGGED); let isLouzhu = false; let isMe = false; const username = elem.getAttribute("username"); if (userClassify(myUserName, myPortrait)) { isMe = true; addTag(elem, MY_TAG); } if (!isMe) { if (userClassify(louzhu, louzhuPortrait)) { isLouzhu = true; addTag(elem, LZ_TAG); } } if (!isMe && !isLouzhu) { const floor = findParent(elem, "l_post_bright"); if (floor) { const cengzhuCard = floor.getElementsByClassName("p_author_name")[0]; const cengzhu = cengzhuCard.textContent; if (cengzhu) { if (elem.textContent === cengzhu) { addTag(elem, CZ_TAG); } } } } function userClassify(un, portrait) { if (username === un && un !== "") { return true; } else if (indexOf(["", " "], username) !== -1) { const targetPortrait = elem.getAttribute("portrait"); if (targetPortrait && portrait) { if (targetPortrait === portrait) { return true; } } else { return dataClassify(); } } else if (!username) { return dataClassify(); } return false; function dataClassify() { const dataAttr = elem.getAttribute("data-field"); if (dataAttr) { const dataField = JSON.parse(dataAttr.replace(/'/g, '"')); if (portrait) { if (dataField.id === portrait) { return true; } } else { if (dataField.un === un) { return true; } } } return false; } } }); function addTag(elem, className) { elem.appendChild( templateCreate("div", { class: `${TB_TAG} ${className}` }) ); } } } const index$3 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ __proto__: null, default: index$2 }, Symbol.toStringTag, { value: "Module" })); const index = { id: "toolkit", name: "实用工具库", author: "锯条", version: "1.1", brief: "优化原版贴吧体验的一组功能", description: "这是一个轻量级的工具库,包含了诸如自动展开长图等实用功能。", scope: true, runAt: "immediately", settings: { autoExpand: { title: "自动展开长图", description: `该功能会自动将帖子中所有的长图片自动展开,无需手动操作`, widgets: [{ type: "toggle", init: () => toolkitToggles.get().autoExpand, event() { toolkitToggles.merge({ autoExpand: !toolkitToggles.get().autoExpand }); } }] }, reloadAvatars: { title: "重新加载错误头像", description: `原版贴吧的帖子页面时常会出现加载失败的头像,本功能可以将这些无法正常显示的头像资源链接到正常的 URL`, widgets: [{ type: "toggle", init: () => toolkitToggles.get().reloadAvatars, event() { toolkitToggles.merge({ reloadAvatars: !toolkitToggles.get().reloadAvatars }); } }] } }, entry: function() { for (const key in toolkitFeatures) { const k = key; if (toolkitToggles.get()[k]) toolkitFeatures[k](); } } }; const toolkitFeatures = { /** 自动展开长图 */ autoExpand() { threadFloorsObserver.addEvent(() => { forEach(DOMS(".replace_tip"), (el) => { el.click(); }); }); }, /** 重新加载错误头像 */ reloadAvatars() { const observer = new IntersectionObserver(function(entries) { forEach(entries, (entry) => { if (entry.isIntersecting) { const avatar = entry.target; if (!avatar.complete) return; if (avatar.naturalWidth > 0) { avatar.setAttribute("data-loaded", ""); } else { const userCard = findParent(avatar, "j_user_card"); if (!userCard) return; const dataField = userCard.getAttribute("data-field"); if (!dataField) return; const portarit = JSON.parse(dataField.replaceAll(/'/g, '"')).id; avatar.src = tiebaAPI.URL_profile(portarit); avatar.setAttribute("data-loaded", ""); } } }); }, { threshold: 0 }); threadCommentsObserver.addEvent(function() { const avatars = DOMS(".lzl_single_post img:not(.BDE_Smiley, [data-loaded])", "img"); avatars.forEach((avatar) => observer.observe(avatar)); }); } }; const toolkitToggles = new UserKey("toolkitToggles", { autoExpand: true, reloadAvatars: true }); const index$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ __proto__: null, default: index }, Symbol.toStringTag, { value: "Module" })); })(Vue, marked, ElementPlus); })();