- // ==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
- // ==/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(
- `<img[^>]*?${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(
- `<img[^>]*?${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("(?<!:\\/\\/www.bilibili.com\\/video\\/)av[1-9]\\d*", "gi");
- const BVRegExp = new RegExp("(?<!:\\/\\/www.bilibili.com\\/video\\/)BV[A-Za-z0-9]{10}", "g");
- document.addEventListener("DOMContentLoaded", () => {
- 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(`(?<!://www.bilibili.com/video/)${videoID}`, "g")
- );
- if (lowerCase)
- videoID = videoID.toLowerCase();
- const linkedID = `<a href='https://www.bilibili.com/video/${videoID}' target='_blank'>${videoID}</a>`;
- 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://gf.qytechs.cn/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);
-
- })();