直播插件

虎牙、斗鱼、哔哔哔里、抖音 页面美化!新增虎牙、斗鱼、哔哩哔哩的护眼主题🚀,ctrl+alt+j激活

As of 2023-10-27. See the latest version.

  1. // ==UserScript==
  2. // @name 直播插件
  3. // @namespace https://github.com/wuxin0011/tampermonkey-script/live-plugin
  4. // @version 4.1.5
  5. // @author wuxin0011
  6. // @description 虎牙、斗鱼、哔哔哔里、抖音 页面美化!新增虎牙、斗鱼、哔哩哔哩的护眼主题🚀,ctrl+alt+j激活
  7. // @license MIT
  8. // @icon data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAArhJREFUWEfllz9ME1Ecx3+/dzUxIUpPxcTEqVD+LDjIoiTSwQldjHGDAwYpbYE4aOJQ8KBFTUx0KLSWoNIDoyFuGsMkcTBx0URjjFBQBmKiQ49ijInh3s/06iWlgfauh8Xoje++7/f5vN+73r0i7PCFO8yHDQI1QzG5HEIOgskPsm85w9IFMmBkQguBNlQOAQTWB4hryWB3V1YgFP++OOCtKAfcYLjD4xeJ8adYE4p5gINn8YpPb78oBehPihDQ0KoS1Vl65/MFnJJfNgLbLeJs6/UA457/S0CUfI3art0ra3dupbalA5UdfdXpRGTJ7PaIUmAWiMbUqehj2wJiR28zcLqPRD2p6ehsMQlR8n9GQTiZuhd5n8naEtjX1X+ctPVHquvgYefHrw8RUFGVsSdbSYjtgWV0sFYDbksgC+dB1XXgNMgy14tJ/hkidjs9NfosX8IpBeaZwM7kwksWyMK1F6qrSjDgBjAjwZhwMzUZeWmMiZL/NQpCWz48R6BlVYnqb9yi7wGxwx8GjkfV6qpT+fBcCQQKq0rsrS4kCPJm8JI6IEqBS6oydqPYw+aU/MOATAQNJ1anI2+2ytt6CAtKyLKj8tOXI+lE7FWh3G8B81tQbOVW7/8tAoW/BWJ7YM7qyqzkCel5wY+RlWJ2s5v+DK0U3dvZ7xZovUlNRB9YmWdkdYHaa3ddtP7zQnKgp99qkf2dvfWcQ5OqjE5bndswEj+kEZzVj2TuUPxbcsC7x2oRO3l3KP5D0HhD9kwYjp9DghnivDyHUsYuI+L5hWD3lK3/BfVXx2s5p2MLQW+i1G7YEqgbiTZqmtC6OOi9/u8LeOQ5xwpL1uWulDGtlnN2AgAncseJa7gk+96Z6YrpLagbnmjmqHk2gAArAOgwAsznjiNBemHQO7qtAmaKlZIx3YFSipuZ8wvlidcmZtmgQAAAAABJRU5ErkJggg==
  9. // @source https://github.com/wuxin0011/tampermonkey-script/live-plugin
  10. // @supportURL https://github.com/wuxin0011/tampermonkey-script/issues
  11. // @match https://*.douyin.com/*
  12. // @match https://*.douyu.com/*
  13. // @match https://*.huya.com/*
  14. // @match https://*.bilibili.com/*
  15. // @match https://www.douyu.com/*
  16. // @match https://www.huya.com/*
  17. // @match https://www.bilibili.com/*
  18. // @match https://www.douyin.com/*
  19. // @grant GM_addStyle
  20. // ==/UserScript==
  21.  
  22. (function () {
  23. 'use strict';
  24.  
  25. const exculues = [
  26. "https://i.huya.com/",
  27. "https://www.douyu.com/member/",
  28. "https://yuba.douyu.com/",
  29. "https://manga.bilibili.com/",
  30. "https://account.bilibili.com/",
  31. "https://member.bilibili.com/",
  32. "https://show.bilibili.com/",
  33. "https://www.bilibili.com/cheese",
  34. "https://pay.bilibili.com/",
  35. "https://show.bilibili.com/",
  36. "https://link.bilibili.com/"
  37. ];
  38. const prefix = "[live-plugin]:";
  39. const msg = (...args) => `${prefix} ${args}`;
  40. const emptyMethod = (...args) => {
  41. console.warn(`${prefix} run empty method...`);
  42. };
  43. const log$1 = (...args) => console.log(msg(args));
  44. const warn = (...args) => console.warn(msg(args));
  45. const error = (...args) => console.error(msg(args));
  46. const douyu_address_pattern = /^https:\/\/www\.douyu\.((com)|(cn)).*/;
  47. const bilibili_address_pattern = /^https:\/\/.*\.bilibili\..*/;
  48. const huya_address_pattern = /^https:\/\/www\.huya\.((com)|(cn)).*/;
  49. const douyin_address_pattern = /^https:\/\/.*\.douyin\.((com)|(cn)).*/;
  50. const localhost = /^http:\/\/127\.0\.0\.1\.*|^http:\/\/localhost.*/;
  51. const local_url = window.location.href;
  52. const is_huya = huya_address_pattern.test(local_url);
  53. const is_douyu = douyu_address_pattern.test(local_url);
  54. const is_bilibili = bilibili_address_pattern.test(local_url);
  55. const is_douyin = douyin_address_pattern.test(local_url);
  56. const is_localhost = localhost.test(local_url);
  57. const wd = window.document;
  58. const wls = window.localStorage;
  59. const download_plugin_url = "https://greatest.deepsurf.us/zh-CN/scripts/449261-%E8%99%8E%E7%89%99%E7%9B%B4%E6%92%AD";
  60. const source_code_url = "https://github.com/wuxin0011/tampermonkey-script/tree/main/live-plugin";
  61. const isImage = (file) => /.*(\.(png|jpg|jpeg|apng|avif|bmp|gif|ico|cur|svg|tiff|webp))$/.test(file);
  62. const querySelector = (el, sel) => !!el && !!sel && el instanceof HTMLElement ? el.querySelector(sel) : el ? wd.querySelector(el) : emptyMethod;
  63. const querySelectorAll = (el, sel) => !!el && !!sel && el instanceof HTMLElement ? el.querySelectorAll(sel) : el ? wd.querySelectorAll(el) : emptyMethod;
  64. const addEventListener = (el, type, callback) => !!el && type && typeof callback === "function" ? el === wd || el instanceof HTMLElement ? el.addEventListener(type, callback, false) : false : false;
  65. const createElement = (tag) => !!tag && wd.createElement(tag);
  66. const appendChild = (el1, el2) => !!el1 && !!el2 && el1 instanceof HTMLElement && el2 instanceof HTMLElement && el1.appendChild(el2);
  67. const insertChild = (el1, el2) => !!el1 && !!el2 && el1 instanceof HTMLElement && el2 instanceof HTMLElement && el1.insertBefore(el2, el1.firstChild);
  68. const is_exculues = exculues.filter((url) => local_url.indexOf(url) !== -1).length !== 0;
  69. const addStyle = (str) => {
  70. if ((window == null ? void 0 : window.GM_addStyle) && typeof window.GM_addStyle == "function") {
  71. window.GM_addStyle(str);
  72. } else {
  73. let head = querySelector("head");
  74. let style = createElement("style");
  75. style.innerText = str;
  76. head.appendChild(style);
  77. }
  78. };
  79. const removeDOM = (element, realRemove = false) => {
  80. try {
  81. if (!(element instanceof HTMLElement)) {
  82. element = querySelector(element);
  83. }
  84. if (element instanceof HTMLElement) {
  85. element.style.display = "none";
  86. if (realRemove) {
  87. element.remove();
  88. }
  89. }
  90. } catch (e) {
  91. error(e);
  92. }
  93. };
  94. const isArray = (a) => a && (a == null ? void 0 : a.length) > 0;
  95. const timeoutSelectorAll = (selector, callback, time = 0) => {
  96. if (typeof callback != "function") {
  97. warn("callback should is a function!");
  98. return;
  99. }
  100. setTimeout(() => {
  101. const nodes = querySelectorAll(selector);
  102. if (isArray(nodes)) {
  103. callback(nodes);
  104. }
  105. }, time);
  106. };
  107. const timeoutSelectorAllOne = (selector, callback, time = 0) => {
  108. if (typeof callback != "function") {
  109. warn("callback should is a function!");
  110. return;
  111. }
  112. setTimeout(() => {
  113. const nodes = querySelectorAll(selector);
  114. if (isArray(nodes)) {
  115. for (let node of nodes) {
  116. callback(node);
  117. }
  118. }
  119. }, time);
  120. };
  121. const getLocalStore = (k, type = Array.name, isParse = true) => {
  122. let obj = wls.getItem(k);
  123. if (type === Array.name) {
  124. if (isParse && obj) {
  125. obj = JSON.parse(obj);
  126. }
  127. return Array.isArray(obj) ? obj : [];
  128. }
  129. if (type === Object.name) {
  130. if (isParse && obj) {
  131. obj = JSON.parse(obj);
  132. }
  133. return obj ? obj : {};
  134. }
  135. if (type === String.name) {
  136. return obj ? obj : "";
  137. }
  138. if (type === Boolean.name) {
  139. return obj === "true" || obj === true;
  140. }
  141. return obj;
  142. };
  143. const addLocalStore = (k, v = [], type = Array.name, isParse = true) => (type === Object.name || type === Array.name) && isParse ? wls.setItem(k, JSON.stringify(v)) : wls.setItem(k, v);
  144. const removeVideo = (selector, time1 = 100, maxCount = 1e3) => {
  145. let count = 0;
  146. let video_timer = setInterval(() => {
  147. try {
  148. const video2 = querySelector(selector);
  149. if (video2 && video2 instanceof HTMLVideoElement) {
  150. video2.pause();
  151. }
  152. removeDOM(video2, false);
  153. if (count >= maxCount) {
  154. clearInterval(video_timer);
  155. }
  156. count = count + 1;
  157. } catch (e) {
  158. }
  159. }, time1);
  160. };
  161. const throttle = (wait, func, ...args) => {
  162. let pre = Date.now();
  163. return () => {
  164. if (Date.now() - pre > wait) {
  165. func(...args);
  166. pre = Date.now();
  167. }
  168. };
  169. };
  170. const intervalRemoveElement = (selectors, time = 160, maxCount = 1e3) => {
  171. if (!isArray(selectors)) {
  172. warn(`selectors 必须是数组 : ${selectors}`);
  173. return;
  174. }
  175. let count = 0;
  176. let timer = setInterval(() => {
  177. selectors.forEach((sel) => {
  178. removeDOM(sel, true);
  179. });
  180. if (count >= maxCount) {
  181. clearInterval(timer);
  182. return;
  183. }
  184. count = count + 1;
  185. }, time);
  186. };
  187. const loopDo = (callback, count = 100, wait = 100) => {
  188. if (typeof callback != "function") {
  189. warn("callback is a function!");
  190. return;
  191. }
  192. let timer = setInterval(() => {
  193. count--;
  194. if (count === 0) {
  195. clearInterval(timer);
  196. } else {
  197. callback(timer);
  198. }
  199. }, wait);
  200. };
  201. const findMark = (selector, callback, count = 100, wait = 100) => {
  202. if (!selector) {
  203. warn("selector not allow or null !");
  204. return;
  205. }
  206. if (typeof callback != "function") {
  207. warn("callback is a function!");
  208. return;
  209. }
  210. loopDo((timer) => {
  211. try {
  212. let element = selector instanceof HTMLElement ? selector : querySelector(selector);
  213. if (element && element instanceof HTMLElement) {
  214. let isMark = element.getAttribute("mark");
  215. if (!isMark) {
  216. element.setAttribute("mark", true);
  217. callback(element);
  218. } else {
  219. clearInterval(timer);
  220. }
  221. }
  222. } catch (e) {
  223. clearInterval(timer);
  224. error(e);
  225. }
  226. }, 100, 100);
  227. setTimeout(() => {
  228. let element = selector instanceof HTMLElement ? selector : querySelector(selector);
  229. if (element && element instanceof HTMLElement) {
  230. let isMark = element.getAttribute("mark");
  231. if (!isMark) {
  232. element.setAttribute("mark", true);
  233. callback(element);
  234. }
  235. }
  236. }, 5e3);
  237. };
  238. const setTimeoutMark = (selector, callback, wait = 0) => {
  239. if (!selector) {
  240. warn("selector not allow or null !");
  241. return;
  242. }
  243. if (typeof callback != "function") {
  244. warn("callback is a function!");
  245. return;
  246. }
  247. let timer = setTimeout(() => {
  248. try {
  249. let element = selector instanceof HTMLElement ? selector : querySelector(selector);
  250. if (element && element instanceof HTMLElement) {
  251. let isMark = element.getAttribute("mark");
  252. if (!isMark) {
  253. element.setAttribute("mark", true);
  254. callback(element);
  255. } else {
  256. clearInterval(timer);
  257. }
  258. }
  259. } catch (e) {
  260. clearInterval(timer);
  261. error(e);
  262. }
  263. }, wait);
  264. };
  265. const backgroundNone = (element, selectors = [".layout-Main"], time = 100, maxCount = 500) => {
  266. if (!(element instanceof HTMLElement) || !isArray(selectors)) {
  267. warn(`element 参数应是 元素, selector 应该是元素选择器集合`);
  268. return;
  269. }
  270. let count = 0;
  271. let timer = setInterval(() => {
  272. selectors.forEach((sel) => {
  273. let b = querySelector(element, sel);
  274. if (!(b instanceof HTMLElement)) {
  275. return;
  276. }
  277. b.style.backgroundImage = "none";
  278. });
  279. if (count >= maxCount) {
  280. clearInterval(timer);
  281. return;
  282. }
  283. count = count + 1;
  284. }, time);
  285. };
  286. const uploadImage = (file, callback) => {
  287. try {
  288. if (!isImage(file == null ? void 0 : file.name)) {
  289. return alert("图片格式不正确!");
  290. }
  291. let fileReader = new FileReader();
  292. fileReader.readAsDataURL(file);
  293. fileReader.onerror = (e) => {
  294. return alert("图片解析失败!" + JSON.stringify(e));
  295. };
  296. fileReader.onload = (e) => {
  297. let base64 = e.target.result;
  298. let str = base64.slice(base64.indexOf(",") + 1);
  299. if (atob) {
  300. str = atob(str);
  301. let bytes = str.length;
  302. const size = (bytes / (1024 * 1024)).toFixed(2);
  303. if (size > 5) {
  304. if (confirm("图片保存失败,浏览器最大只能保存5MB大小图片,确认查看原因?")) {
  305. window.location.href = "https://developer.mozilla.org/zh-CN/docs/Web/API/File_and_Directory_Entries_API/Introduction";
  306. }
  307. return;
  308. }
  309. callback(base64);
  310. } else {
  311. alert("保存失败,当前浏览器不支持!");
  312. }
  313. };
  314. } catch (e) {
  315. alert("图片解析失败!");
  316. }
  317. };
  318. const findButton = (sel = "body", key = "full_screen_button_class_or_id", text = "全屏", tagName = "div") => {
  319. var _a, _b;
  320. const container = querySelector(sel);
  321. let classId = "";
  322. if (container) {
  323. const fullButton = querySelector(container, key);
  324. if (fullButton && fullButton instanceof HTMLElement && ((fullButton == null ? void 0 : fullButton.textContent) === text || (fullButton == null ? void 0 : fullButton.title) === text)) {
  325. classId = `${sel} ${fullButton.id ? fullButton.id : fullButton.className}`;
  326. }
  327. if (!classId) {
  328. const nodes = querySelectorAll(container, tagName);
  329. if (isArray(nodes)) {
  330. for (let i = 0; i < nodes.length; i++) {
  331. if (nodes[i] && nodes[i] instanceof HTMLElement && (((_a = nodes[i]) == null ? void 0 : _a.title) === text || ((_b = nodes[i]) == null ? void 0 : _b.textContent) === text)) {
  332. classId = `${sel} ${nodes[i].id ? nodes[i].id : nodes[i].className}`;
  333. }
  334. }
  335. }
  336. }
  337. }
  338. if (key && classId) {
  339. addLocalStore(key, classId, String.name, false);
  340. }
  341. return classId || key;
  342. };
  343. const addFullScreenEvent = (callback) => {
  344. if (typeof callback != "function") {
  345. returnn;
  346. }
  347. document.addEventListener("fullscreenchange", callback);
  348. document.addEventListener("webkitfullscreenchange", callback);
  349. document.addEventListener("mozfullscreenchange", callback);
  350. document.addEventListener("MSFullscreenChange", callback);
  351. };
  352. const handlerPromise = (result, callback) => {
  353. if (typeof callback !== "function") {
  354. warn("回调函数不能为空!");
  355. return;
  356. }
  357. if (!result) {
  358. warn("请求结果为空!");
  359. callback(result);
  360. return;
  361. }
  362. if (result instanceof Promise) {
  363. result.then((res) => {
  364. callback(res);
  365. }).catch((e) => {
  366. error(e);
  367. });
  368. } else {
  369. callback(result);
  370. }
  371. };
  372. const handlerDisplay = (element, isBlock) => {
  373. if (!(element && element instanceof HTMLElement)) {
  374. return;
  375. }
  376. if (isBlock) {
  377. if (!element.classList.contains("m-container-display-block")) {
  378. element.classList.add("m-container-display-block");
  379. }
  380. if (element.classList.contains("m-container-display-none")) {
  381. element.classList.remove("m-container-display-none");
  382. }
  383. } else {
  384. if (element.classList.contains("m-container-display-block")) {
  385. element.classList.remove("m-container-display-block");
  386. }
  387. if (!element.classList.contains("m-container-display-none")) {
  388. element.classList.add("m-container-display-none");
  389. }
  390. }
  391. };
  392. const support = {
  393. supportSearch() {
  394. return !is_douyin;
  395. },
  396. supportAdd() {
  397. return !is_douyin;
  398. },
  399. supportReset() {
  400. return !is_douyin;
  401. },
  402. supportBg() {
  403. return !is_douyin && !is_bilibili;
  404. },
  405. supportMenu() {
  406. return !is_douyin && !is_bilibili;
  407. },
  408. supportGift() {
  409. return !is_douyin && !is_bilibili;
  410. },
  411. supportAutoFullScreen() {
  412. return true;
  413. },
  414. supportAutoViewMaxPro() {
  415. return true;
  416. },
  417. supportTable() {
  418. return !is_douyin;
  419. },
  420. supportTheme() {
  421. return !is_douyin;
  422. }
  423. };
  424. class HostUser {
  425. constructor(roomId, name) {
  426. this.roomId = roomId;
  427. this.name = name;
  428. }
  429. }
  430. const isRisk = (obj) => obj ? JSON.stringify(obj).indexOf("非法访问") !== -1 : false;
  431. const isBVId = (keywords) => /.*\/BV(.*)/.test(keywords);
  432. const getBVId = (url) => {
  433. try {
  434. let videoBVId = "BV";
  435. if (/.*\/BV(.*)/.test(url)) {
  436. videoBVId += /.*\/BV(.*)\/.*/.test(url) ? url.match(/.*\/BV(.*)/)[1].match(/(.*)\/{1}.*/)[1] : url.match(/.*\/BV(.*)/)[1];
  437. }
  438. return videoBVId;
  439. } catch (error2) {
  440. warn("通过房间号获取up信息失败!,请检查是否 https://www.bilibili.com/video/xxxxxxx 空间地址...");
  441. return null;
  442. }
  443. };
  444. const isUserId = (keywords) => /https:\/\/space\.bilibili\.com\/\d+.*/.test(keywords) || /\d+/.test(keywords);
  445. const getUserId = (keywords) => {
  446. let isMatch = keywords.match(/https:\/\/space\.bilibili\.com.*\/(\d+).*/);
  447. if (isMatch) {
  448. try {
  449. return isMatch[1];
  450. } catch (error2) {
  451. warn("通过房间号获取up信息失败!,请检查是否 https://space.bilibili.com 空间地址...");
  452. return null;
  453. }
  454. }
  455. return keywords;
  456. };
  457. const getBiliBiliInfoByVideoID = async (url = window.location.href) => {
  458. if (!url) {
  459. return null;
  460. }
  461. let videoBVId = null;
  462. if (isBVId(url)) {
  463. videoBVId = getBVId(url);
  464. } else {
  465. videoBVId = url;
  466. }
  467. if (!videoBVId) {
  468. return null;
  469. }
  470. return await fetch(`https://api.bilibili.com/x/web-interface/wbi/view?bvid=${videoBVId}`, {
  471. method: "get",
  472. mode: "cors"
  473. }).then((res) => res.json());
  474. };
  475. const getBiliBiliInfoByUserId = async (userId) => {
  476. if (!isUserId(userId)) {
  477. return null;
  478. }
  479. userId = getUserId(userId);
  480. if (!userId) {
  481. return null;
  482. }
  483. log$1("user Id", userId);
  484. return await fetch(`https://api.bilibili.com/x/space/wbi/acc/info?mid=${userId}`, {
  485. method: "get",
  486. mode: "cors"
  487. }).then((res) => res.json());
  488. };
  489. const DARK_THEME_KEY = "wx_dark_theme_key";
  490. const THEME_IS_AUTO = "wx_dark_theme_is_auto";
  491. const THEME_TYPE_KEY = "wx_dark_theme_type_key";
  492. const DARK_COLOR_VARIABLE = "--w-bg-darker";
  493. const theme = {
  494. light: "light",
  495. dark: "dark"
  496. };
  497. const DARK_THEME_TYPE = {
  498. "DEFAULT": "DEFAULT",
  499. "ORDINARY": "ORDINARY",
  500. "BLACK0": "BLACK0",
  501. "BLACK1": "BLACK1",
  502. "BLACK2": "BLACK2",
  503. "BLACK3": "BLACK3"
  504. };
  505. const DARK_TYPE = {
  506. [DARK_THEME_TYPE.DEFAULT]: {
  507. "name": "默认",
  508. "color": "#343b44"
  509. },
  510. [DARK_THEME_TYPE.ORDINARY]: {
  511. "name": "普通",
  512. "color": "#37404c"
  513. },
  514. [DARK_THEME_TYPE.BLACK0]: {
  515. "name": "深黑1",
  516. "color": "#22272e"
  517. },
  518. [DARK_THEME_TYPE.BLACK1]: {
  519. "name": "深黑2",
  520. "color": "#232222"
  521. },
  522. [DARK_THEME_TYPE.BLACK2]: {
  523. "name": "深黑3",
  524. "color": "#171514"
  525. },
  526. [DARK_THEME_TYPE.BLACK3]: {
  527. "name": "深黑4",
  528. "color": "#121212"
  529. }
  530. };
  531. const isDark = () => wls.getItem(DARK_THEME_KEY) === theme.dark;
  532. const isAutoDark = () => wls.getItem(THEME_IS_AUTO) === THEME_IS_AUTO || wls.getItem(THEME_IS_AUTO) === null;
  533. const LOCAL_THEME_TYPE = wls.getItem(THEME_TYPE_KEY) === null ? DARK_THEME_TYPE.DEFAULT : wls.getItem(THEME_TYPE_KEY);
  534. const darkColor = () => {
  535. let type = wls.getItem(THEME_TYPE_KEY) === null ? DARK_THEME_TYPE.DEFAULT : wls.getItem(THEME_TYPE_KEY);
  536. let l1 = DARK_TYPE[type];
  537. return (l1 == null ? void 0 : l1.color) ?? "#121212";
  538. };
  539. const updateStyleColor = (key, value) => document.documentElement.style.setProperty(key, value);
  540. const updateDarkStyleType = (type) => {
  541. wls.setItem(THEME_TYPE_KEY, type);
  542. updateDarkClass();
  543. };
  544. const toggleColorMode = (event, isClick = false) => {
  545. if (!event) {
  546. return;
  547. }
  548. try {
  549. const isAppearanceTransition = (document == null ? void 0 : document.startViewTransition) && !window.matchMedia("(prefers-reduced-motion: reduce)").matches;
  550. if (!isAppearanceTransition) {
  551. log$1("不支持快照切换...,将使用普通方式切换主题");
  552. isClick ? clickUpdateTheme() : themeUpdate();
  553. return;
  554. }
  555. } catch (error2) {
  556. isClick ? clickUpdateTheme() : themeUpdate();
  557. return;
  558. }
  559. const x = event.clientX;
  560. const y = event.clientY;
  561. const endRadius = Math.hypot(
  562. Math.max(x, innerWidth - x),
  563. Math.max(y, innerHeight - y)
  564. );
  565. const transition = document.startViewTransition(() => {
  566. isClick ? clickUpdateTheme() : themeUpdate();
  567. });
  568. transition.ready.then(() => {
  569. const clipPath = [
  570. `circle(0px at ${x}px ${y}px)`,
  571. `circle(${endRadius}px at ${x}px ${y}px)`
  572. ];
  573. document.documentElement.animate(
  574. {
  575. clipPath: isNeedDark() ? [...clipPath].reverse() : clipPath
  576. },
  577. {
  578. duration: 400,
  579. easing: "ease-out",
  580. pseudoElement: isNeedDark() ? "::view-transition-old(root)" : "::view-transition-new(root)"
  581. }
  582. );
  583. });
  584. };
  585. const clickUpdateTheme = () => {
  586. const classList = document.documentElement.classList;
  587. if (!classList.contains("dark")) {
  588. classList.add("dark");
  589. wls.setItem(DARK_THEME_KEY, theme.dark);
  590. } else if (classList.contains("dark")) {
  591. classList.remove("dark");
  592. wls.setItem(DARK_THEME_KEY, theme.light);
  593. }
  594. };
  595. const autoDarkType = () => {
  596. let hour = (/* @__PURE__ */ new Date()).getHours();
  597. console.log("current hours:", hour);
  598. let type = DARK_THEME_TYPE.DEFAULT;
  599. if (isAutoDark()) {
  600. if (hour >= 0 && hour <= 7) {
  601. type = DARK_THEME_TYPE.BLACK3;
  602. } else if (hour > 7 && hour <= 17)
  603. ;
  604. else if (hour > 17 && hour < 18) {
  605. type = DARK_THEME_TYPE.ORDINARY;
  606. } else if (hour >= 18 && hour < 19) {
  607. type = DARK_THEME_TYPE.BLACK0;
  608. } else if (hour >= 19 && hour < 20) {
  609. type = DARK_THEME_TYPE.BLACK1;
  610. } else if (hour >= 21 && hour < 22) {
  611. type = DARK_THEME_TYPE.BLACK2;
  612. } else if (hour >= 22 && hour <= 23) {
  613. type = DARK_THEME_TYPE.BLACK3;
  614. }
  615. }
  616. return type;
  617. };
  618. const autoDarkColor = () => {
  619. let color = "";
  620. if (isAutoDark()) {
  621. let type = autoDarkType();
  622. color = DARK_TYPE[type].color;
  623. } else {
  624. color = darkColor();
  625. }
  626. return color;
  627. };
  628. const isNeedDark = () => ((/* @__PURE__ */ new Date()).getHours() < 7 || (/* @__PURE__ */ new Date()).getHours() >= 17) && isAutoDark() || isDark();
  629. const updateDarkClass = () => {
  630. if (!support.supportTheme()) {
  631. return;
  632. }
  633. if (isNeedDark()) {
  634. updateStyleColor(DARK_COLOR_VARIABLE, autoDarkColor());
  635. }
  636. const classList = document.documentElement.classList;
  637. if (!classList.contains("dark") && isNeedDark()) {
  638. classList.add("dark");
  639. } else if (classList.contains("dark") && !isNeedDark()) {
  640. classList.remove("dark");
  641. }
  642. };
  643. const themeUpdate = () => {
  644. updateDarkClass();
  645. };
  646. const themeOptions = () => {
  647. let str = "";
  648. let local_theme = LOCAL_THEME_TYPE;
  649. for (let [k, v] of Object.entries(DARK_TYPE)) {
  650. str += `<option value="${k}" ${local_theme == k ? "selected " : ""} class="m-select-option">${v.name}</option>`;
  651. }
  652. return str;
  653. };
  654. const root$1 = `
  655. html {
  656. --w-brand: #3aa675;
  657. --w-light: #e5e7eb;
  658. --w-brand-light: #349469;
  659. --w-bg: #22272e;
  660. --w-bg-light: #2b313a;
  661. --w-bg-lighter: #262c34;
  662. --w-bg-dark: #343b44;
  663. --w-bg-darker: #37404c;
  664. --w-bg-darker: var(--w-bg-dark);
  665. --w-text: #adbac7;
  666. --w-text-light: #cbd4dc;
  667. --w-text-lighter: #cdd6dd;
  668. --w-text-lightest: #8094a8;
  669. --w-border: #3e4c5a;
  670. --w-border-dark: #34404c;
  671. --w-blue-link-hover:#00aeec;
  672. --w-skeleton:#494f57;
  673. --w-white: #fff;
  674. }
  675.  
  676.  
  677. ::view-transition-old(root),
  678. ::view-transition-new(root) {
  679. animation: none;
  680. mix-blend-mode: normal;
  681. }
  682. ::view-transition-old(root) {
  683. z-index: 10;
  684. }
  685. ::view-transition-new(root) {
  686. z-index: 10000;
  687. }
  688. .dark::view-transition-old(root) {
  689. z-index: 10000;
  690. }
  691. .dark::view-transition-new(root) {
  692. z-index: 10;
  693. }
  694.  
  695.  
  696. .m-container-display-block{
  697. display:block !important ;
  698. }
  699. .m-container-display-none{
  700. display:none !important ;
  701. }
  702.  
  703.  
  704.  
  705.  
  706. ::-webkit-scrollbar {
  707. width: 6px !important;
  708. background-color: teal !important;
  709. }
  710.  
  711. ::-webkit-scrollbar-track {
  712. background-color: #eee !important;
  713. }
  714.  
  715. ::-webkit-scrollbar-thumb {
  716. background-color: var(--w-blue-link-hover) !important;
  717. border-radius: 6px !important;
  718. }
  719.  
  720.  
  721. .dark ::-webkit-scrollbar {
  722. width: 6px !important;
  723. background-color: teal !important;
  724. }
  725.  
  726. .dark ::-webkit-scrollbar-track {
  727. background-color: var(--w-text) !important;
  728. }
  729.  
  730. .dark ::-webkit-scrollbar-thumb {
  731. background-color: var(--w-bg-light) !important;
  732. border-radius: 6px !important;
  733. }
  734.  
  735.  
  736.  
  737. `;
  738. const liveDarkCss = `
  739.  
  740. ${root$1}
  741.  
  742.  
  743. .dark.m-container {
  744. --m-container-background-color: var(--w-bg-darker);
  745. }
  746.  
  747. .dark .m-select-dark-option,
  748. .dark .m-select-dark,.dark .m-dark-type-select,
  749. .dark.m-container {
  750. background-color: var(--m-container-background-color) ;
  751. color:var(--w-text-light) ;
  752. }
  753.  
  754.  
  755. .dark.m-container .m-link,
  756. .dark.m-container .m-link:visited {
  757. color: var(--w-text) ;
  758. }
  759.  
  760.  
  761. .dark.m-container table tr,
  762. .dark.m-container table tbody tr:nth-child(1)
  763. {
  764. border-color: var(--w-text-light) ;
  765. }
  766.  
  767.  
  768.  
  769.  
  770.  
  771. `;
  772. const css$5 = `
  773. ${root$1}
  774. .m-container,
  775. .m-container .btn,
  776. .m-container table,
  777. .m-container table tbody,
  778. .m-container table thead,
  779. .m-container table tr {
  780. margin: 0 ;
  781. padding: 0 ;
  782. border: none;
  783. outline: none;
  784. }
  785. .m-container {
  786. --m-font-color: #fff;
  787. --m-container-background-color: #fff;
  788. --m-container-width: 800px;
  789. --m-container-height: 400px;
  790. --m-container-operation-right-width: 150px;
  791. --m-container-input-width: ${is_bilibili ? "200px" : "100px"};
  792. --m-container-box-transition: all 0.5s ease-in-out;
  793. --m-container-select-width: var(--m-container-input-width);
  794. --m-container-input-outline: 1px solid rgba(8, 125, 235, 0.6) ;
  795. }
  796. .m-container {
  797. box-sizing: border-box ;
  798. position: fixed ;
  799. flex-direction: column ;
  800. width: var(--m-container-width) ;
  801. height: var(--m-container-height) ;
  802. top: 100px ;
  803. left: 50% ;
  804. border-radius: 10px ;
  805. overflow: hidden ;
  806. font-size:14px;
  807. background-color: var(--m-container-background-color) ;
  808. z-index: ${is_douyin ? "10" : "100000000"} ;
  809. padding: 15px ;
  810. transition: var(--m-container-box-transition) ;
  811. box-shadow: 20px 20px 10px rgba(0, 0, 0, 0.1),
  812. -1px -2px 18px rgba(0, 0, 0, 0.1) ;
  813. opacity: 0;
  814. font-family: "Arial","Microsoft YaHei","黑体","宋体",sans-serif;
  815. transform: translate(-50%, -150%);
  816. }
  817. .m-container-is-active {
  818. opacity: 1;
  819. transform: translate(-50%, 0%);
  820. z-index:100000000 ;
  821. }
  822. .m-container-box {
  823. display: flex ;
  824. flex-direction: column ;
  825. width: 100% ;
  826. height: 100% ;
  827. }
  828. .m-container .operation {
  829. box-sizing: border-box ;
  830. height: auto ;
  831. justify-content: start ;
  832. }
  833. .m-container input[type="text"] {
  834. width: var(--m-container-input-width) ;
  835. box-sizing: border-box ;
  836. border: 1px solid rgba(8, 125, 235, 0.6) ;
  837. outline: none ;
  838. padding: 5px 10px ;
  839. border-radius: 20px ;
  840. transition: var(--m-container-box-transition);
  841. }
  842. .m-container input:focus {
  843. border: 1px solid rgba(8, 125, 235, 1) ;
  844. }
  845. .m-container .operation input[type="checkbox"] {
  846. display: inline ;
  847. }
  848. .m-container .operation input[type="file"] {
  849. display: none ;
  850. }
  851. .m-container table {
  852. position: relative ;
  853. box-sizing: border-box ;
  854. overflow: hidden ;
  855. text-align: left ;
  856. flex: 1 ;
  857. display: flex ;
  858. flex-direction: column ;
  859. }
  860. .m-container table tr {
  861. margin: 5px 0 ;
  862. display: flex ;
  863. border-bottom: 1px solid rgba(0, 0, 0, 0.4) ;
  864. justify-content: space-between;
  865. }
  866. .m-container table tr td:nth-child(1),
  867. .m-container table thead th:nth-child(1) {
  868. width: 50px;
  869. text-align: center ;
  870. }
  871. .m-container table tr td:nth-child(2),
  872. .m-container table tr td:nth-child(3),
  873. .m-container table tr td:nth-child(4),
  874. .m-container table thead th:nth-child(2),
  875. .m-container table thead th:nth-child(3),
  876. .m-container table thead th:nth-child(4) {
  877. flex: 1 ;
  878. text-align: center ;
  879. white-space: nowrap ;
  880. overflow: hidden ;
  881. text-overflow: ellipsis ;
  882. }
  883. .m-container table tbody {
  884. flex: 1 ;
  885. overflow: auto ;
  886. }
  887. .m-container table th,
  888. .m-container table td {
  889. padding: 10px ;
  890. font-size:14px;
  891. }
  892. .m-container table tbody tr:nth-child(1) {
  893. border-bottom: 1px solid rgba(0, 0, 0, 0.4) ;
  894. }
  895. .m-container .m-link,
  896. .m-container .m-link:visited {
  897. color: teal ;
  898. }
  899. .m-container .m-link:hover {
  900. color: blue ;
  901. text-decoration: underline ;
  902. }
  903. .m-container .btn {
  904. cursor: pointer ;
  905. padding: 5px 8px ;
  906. border: none ;
  907. max-width:50px ;
  908. color: var(--m-font-color) ;
  909. font-size: 12px ;
  910. border-radius: 20px ;
  911. margin: 0 ;
  912. background-color: rgba(166, 169, 173, 1) ;
  913. z-index: 1000 ;
  914. outline: none ;
  915. font-family: "Arial","Microsoft YaHei","黑体","宋体",sans-serif;
  916. box-shadow: 1px 1px 3px rgba(0, 0, 0, 0.4), 0px 0px 1px rgba(0, 0, 0, 0.4) ;
  917. }
  918. .m-container .btn:hover {
  919. box-shadow: inset 0 0 10px rgba(0, 0, 0, 0.1) ;
  920. }
  921. .m-container .btn:hover {
  922. background-color: rgba(166, 169, 173, 0.6) ;
  923. }
  924. .m-container .btn-primary {
  925. background-color: rgba(64, 158, 255, 1) ;
  926. }
  927. .m-container .btn-primary:hover {
  928. background-color: rgba(64, 158, 255, 0.6) ;
  929. }
  930. .m-container .btn-success {
  931. background-color: rgba(103, 194, 58, 1) ;
  932. }
  933. .m-container .btn-success:hover {
  934. background-color: rgba(103, 194, 58, 0.6) ;
  935. }
  936. .m-container .btn-info {
  937. background-color: rgba(119, 119, 119, 1) ;
  938. }
  939. .m-container .btn-info:hover {
  940. background-color: rgba(119, 119, 119, 0.6) ;
  941. }
  942. .m-container .btn-warning {
  943. background-color: rgba(230, 162, 60, 1) ;
  944. }
  945. .m-container .btn-warning:hover {
  946. background-color: rgba(230, 162, 60, 0.6) ;
  947. }
  948. .m-container .btn-danger {
  949. background-color: rgba(245, 108, 108, 1) ;
  950. }
  951. .m-container .btn-danger:hover {
  952. background-color: rgba(245, 108, 108, 0.6) ;
  953. }
  954. #m-container-box1 {
  955. position: absolute ;
  956. z-index: 10000000 ;
  957. transition: var(--m-container-box-transition) ;
  958. width: 100% ;
  959. height: 100% ;
  960. }
  961. #m-container-box2 {
  962. position: absolute ;
  963. z-index: 9999 ;
  964. transition: var(--m-container-box-transition) ;
  965. width: 100% ;
  966. height: 100% ;
  967. }
  968. .m-ani-left-is-active {
  969. transform: translateX(0) ;
  970. visibility: visible ;
  971. opacity: 1 ;
  972. }
  973. .m-ani-left-is-close {
  974. transform: translateX(-100%) ;
  975. visibility: hidden ;
  976. opacity: 0 ;
  977. }
  978. .m-ani-right-is-active {
  979. transform: translateX(0) ;
  980. visibility: visible ;
  981. opacity: 1 ;
  982. }
  983. .m-ani-right-is-close {
  984. transform: translateX(100%) ;
  985. visibility: hidden ;
  986. opacity: 0 ;
  987. }
  988. .m-type-container .m-type-item {
  989. display: flex ;
  990. height: 30px ;
  991. }
  992. .m-type-container .m-type-item .m-type-item-left {
  993. flex: 1 ;
  994. position: relative ;
  995. box-sizing: border-box ;
  996. overflow: hidden ;
  997. }
  998. .m-type-container .m-type-item .m-type-item-right {
  999. width: var(--m-container-operation-right-width);
  1000. text-align: center ;
  1001. }
  1002. .m-type-container .m-type-item .m-type-item-left .m-select-option-container,
  1003. .m-type-container .m-type-item .m-type-item-left .m-select-input-container {
  1004. transition: var(--m-container-box-transition) ;
  1005. position: absolute ;
  1006. width: 100% ;
  1007. }
  1008. .m-type-container .m-select {
  1009. display: flex ;
  1010. }
  1011. .m-type-container .m-select .m-select-item {
  1012. margin-right: 10px ;
  1013. }
  1014. .m-type-container .m-select .m-select-item:last-child {
  1015. margin-right: 0 ;
  1016. }
  1017. .m-type-container .m-select select {
  1018. width: 100px ;
  1019. color: rgba(119, 119, 119, 0.9) ;
  1020. }
  1021. .m-type-container .m-select select::placeholder {
  1022. color: rgba(119, 119, 119, 0.9) ;
  1023. }
  1024. .m-type-container .m-tag-select {
  1025. width: calc(var(--m-container-select-width)/2) ;
  1026. outline: none ;
  1027. border: 1px solid rgba(8, 125, 235, 0.6) ;
  1028. padding: 5px 8px ;
  1029. padding: 5px 10px ;
  1030. }
  1031. .m-container select {
  1032. border: 1px solid rgba(8, 125, 235, 1) ;
  1033. }
  1034. .m-type-container .m-select .m-option-default {
  1035. color: rgba(119, 119, 119, 0.6) ;
  1036. }
  1037. .m-type-container input[type="text"] {
  1038. width: 350px ;
  1039. }
  1040. .m-type-container .m-select input {
  1041. width: var(--m-container-input-width) ;
  1042. }
  1043. .m-type-container .m-search-msg {
  1044. color: red ;
  1045. }
  1046.  
  1047. .m-container-display-block{
  1048. display:block !important;
  1049. }
  1050. .m-container-display-none{
  1051. display:none !important;
  1052. }
  1053.  
  1054. .m-container .m-link:hover {
  1055. color: var(--w-text-light) ;
  1056. text-decoration: underline ;
  1057. }
  1058.  
  1059.  
  1060. ${liveDarkCss}
  1061.  
  1062. `;
  1063. const htmlTemplate = (isShowBg, isShowMenu, isShowFullScreen, isShowGift, isShowLogo, isMaxPro = true) => {
  1064. return `
  1065. <div class="m-container-box" id="m-container-box2">
  1066. <div class="operation">
  1067. ${support.supportSearch() ? `<input type="text" placeholder="房间号或者名称...">` : ``}
  1068. ${support.supportAdd() ? `<button class="btn btn-primary add-room" title="复制地址栏房间号,手动添加房间,也可以通过点击房间名称添加">添加</button>` : ``}
  1069. ${support.supportReset() ? `<button class="btn btn-success clear-room" title="重置表格数据">重置</button>` : ``}
  1070. ${support.supportTheme() ? `<button class="btn btn-info room-theme" title="${isNeedDark() ? "点击切换到白天模式" : "点击切换到黑夜模式"}">${isNeedDark() ? "白天" : "黑夜"}</button>` : ``}
  1071. ${support.supportBg() ? `<button class="btn btn-warning bg-btn" title="上传背景图">背景</button>` : ``}
  1072. ${support.supportBg() ? `<input type="file" id="file">` : ``}
  1073. ${support.supportBg() ? `<input type="checkbox" id="checkbox1" ${isShowBg ? "checked" : ""} class="checkbox" title="是否显示背景" />背景` : ``}
  1074. ${support.supportMenu() ? `<input type="checkbox" id="checkbox2" ${isShowMenu ? "checked" : ""} class="checkbox" title="是否显示左侧菜单"/>菜单 ` : ``}
  1075. ${` <input type="checkbox" id="checkbox3" ${isShowFullScreen ? "checked" : ""} class="checkbox" title="自动全屏"/>全屏`}
  1076. ${support.supportGift() ? `<input type="checkbox" id="checkbox4" ${isShowGift ? "checked" : ""} class="checkbox" title="显示礼物栏"/>礼物` : ``}
  1077. <input type="checkbox" id="checkbox5" ${isShowLogo ? "checked" : ""} class="checkbox" title="关闭或者显示插件Logo. ctrl+alt+j 可唤醒"/>logo
  1078. ${`<input type="checkbox" id="checkbox6" ${isMaxPro ? "checked" : ""} class="checkbox" title="自动最高画质"/>画质`}
  1079. ${support.supportTheme() ? `<input type="checkbox" id="m-dark-is-auto" ${isAutoDark() ? "checked" : ""} class="checkbox" title="自动调整主题,根据时间段改变"/>自动` : ``}
  1080. ${support.supportTheme() ? `<select class="m-dark-type-select" id="m-dark-select">
  1081. ${themeOptions()}
  1082. </select>` : ``}
  1083. <a class="m-link" href="https://greatest.deepsurf.us/zh-CN/scripts/449261-%E8%99%8E%E7%89%99%E7%9B%B4%E6%92%AD" target="_blank" title="更新、反馈">更新</a>
  1084. <button class="btn btn-info btn-close-container" title="关闭 , ctrl+alt+j 可唤醒" >关闭</button>
  1085. </div>
  1086. <table class="${support.supportTable() ? "" : "m-container-display-none"}">
  1087. <thead>
  1088. <th>序号</th>
  1089. <th>名称</th>
  1090. <th>房间号</th>
  1091. <th>操作</th>
  1092. </thead>
  1093. <tbody>
  1094. </tbody>
  1095. </table>
  1096. </div>
  1097. `;
  1098. };
  1099. class LivePluginElement extends HTMLElement {
  1100. constructor() {
  1101. super();
  1102. this.attachShadow({ mode: "open" });
  1103. const style = document.createElement("style");
  1104. style.innerHTML = css$5;
  1105. this.shadowRoot.appendChild(style);
  1106. }
  1107. createContainer(isShowBg, isShowMenu, isShowFullScreen, isShowGift, isShowLogo, isMaxPro = true) {
  1108. const livePlugin = document.createElement("live-plugin-element");
  1109. const container = document.createElement("div");
  1110. container.className = `${isNeedDark() ? "dark" : ""} m-container`;
  1111. container.innerHTML = htmlTemplate(isShowBg, isShowMenu, isShowFullScreen, isShowGift, isShowLogo, isMaxPro);
  1112. livePlugin.shadowRoot.appendChild(container);
  1113. document.querySelector("body").append(livePlugin);
  1114. return container;
  1115. }
  1116. }
  1117. const iconLogo = () => {
  1118. let logo = "none";
  1119. if (is_douyu) {
  1120. logo = `<svg t="1694231763777" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5947" width="40" height="40"><path d="M838.45600394 295.68265482c63.56182914-60.97275259 162.72346075-74.95376592 162.72346075-74.95376593s-6.08432987-74.95376592-101.10343901-106.41104592c-136.57378765-43.49648592-212.17482272 19.41807408-212.17482272 19.41807406S517.15160494 3.24645925 346.53146074 92.18123852s-291.27111111 332.04906667-291.27111111 332.04906666c65.63309037 81.03809581 234.31142717 82.9799032 234.31142717 81.68536495-20.0653432 4.66033778-51.5226232 28.73874963-49.58081582 28.73874962-71.58796642-20.71261235-236.25323457 74.95376592-210.88028445 141.88139456 26.14967309 66.92762864 257.74256987 49.58081581 257.74256989 49.58081582s47.50955457 35.47034864 37.54160988 35.47034863c-124.53458173-10.09739852-144.59992494 55.53569185-144.59992494 57.60695309 31.45728 0 222.27222124 51.5226232 222.27222122 51.52262321s31.45728 135.92651852 61.62002173 137.86832592c29.51547259 2.07126124 55.53569185-49.58081581 55.53569185-51.5226232 37.54160987-37.54160987 27.44421136-116.50844445 24.07841186-120.52151309 18.12353581-10.09739852 101.10343902-35.47034864 245.70336395-187.44914172s55.40623803-349.3958795 49.45136197-353.40894815z m-805.97952789 371.53248394c0-81.03809581 186.15460347-140.5868563 186.80187259-124.53458173-24.07841185 56.95968395 0 96.44310124 0 96.44310124l-37.54160988 33.52854123 51.52262321 2.07126125s29.51547259 41.55467852 31.45728 43.49648592c-131.91344987 11.9097521-228.87436642-14.23992098-232.24016592-51.00480791zM223.29141728 653.10467161v8.67340642h-8.02613728l8.02613728-8.67340642z m204.14868544 121.16878222c-2.07126124 6.08432987-20.71261235 12.03920592-20.71261236 12.03920592l-4.01306864-12.03920592c-0.12945383 0 26.66748839-5.30760691 24.725681 0z" fill="#999999" p-id="5948"></path><path d="M361.80701235 124.28578765c-48.80409283 0-88.41696395 36.76488691-88.41696396 82.97990321s39.48341728 82.9799032 88.41696396 82.97990322 88.41696395-36.76488691 88.41696395-82.97990322-39.61287111-82.9799032-88.41696395-82.97990321z m0 141.88139457c-11.3919368 0-23.43114272-3.3657995-32.75181827-10.09739852 11.3919368 0 20.71261235-9.32067555 20.71261234-20.71261234s-9.32067555-20.71261235-20.71261234-20.71261234c-10.74466765 0-19.41807408 8.02613728-20.71261236 18.1235358-4.01306864-8.02613728-6.08432987-16.6995437-6.08432987-26.14967309 0-32.75181827 26.79694222-58.90149136 59.5487605-58.90149136h5.3076069c-11.3919368 6.08432987-19.41807408 18.12353581-19.41807407 32.10454913 0 20.0653432 16.6995437 36.76488691 36.76488691 36.76488692 16.05227457 0 30.16274173-10.09739852 34.82307951-24.72568099 1.29453827 4.66033778 2.07126124 10.09739852 2.07126123 14.7577363 0 33.52854124-26.79694222 59.5487605-59.54876048 59.54876049z m-22.13660445 204.14868543s27.44421136 18.12353581 75.60103506 0l-18.1235358-25.37295012c0.12945383 0-57.47749925 25.37295013-57.47749926 25.37295012z m115.21390618-62.91456c-14.11046717 14.11046717-49.58081581 31.45728-49.58081581 31.45728s51.5226232 29.51547259 63.56182914 21.35988149c12.03920592-7.24941431-9.96794469-50.74590025-13.98101333-52.81716149z m43.49648592-33.3990874c-12.03920592 11.3919368-37.54160987 29.51547259-37.54160987 29.51547258l47.50955456 35.47034865c10.09739852-12.16865975-1.94180741-64.98582124-9.96794469-64.98582123z m22.00715061-31.45728c-2.07126124 9.32067555-13.33374419 23.43114272-17.34681283 26.14967308 10.74466765 5.30760691 28.73874963 24.72568098 28.73874963 24.72568098 11.3919368-16.05227457-3.23634569-48.1568237-11.3919368-50.87535406z" fill="#FFFFFF" p-id="5949"></path><path d="M777.48325136 240.7942321c8.02613728-2.07126124 53.59388445 45.56774717 47.50955456 47.50955457 77.6722963-85.05116445 146.54173235-82.9799032 146.54173235-85.05116445-20.0653432-51.5226232-113.14264494-74.95376592-113.14264494-74.95376592-140.5868563-25.37295013-158.7103921 37.54160987-162.72346075 39.48341728-162.72346075-118.45025185-317.29133037-47.50955457-315.34952295-49.5808158 105.11650765 23.43114272 75.60103506 108.48230717 75.60103506 108.48230716s-14.11046717 85.05116445-111.07138371 73.01195853c-97.09037037-12.03920592-81.03809581-120.52151309-81.0380958-120.5215131-97.7376395 78.96683457-186.80187259 241.04302617-186.8018726 241.04302616 10.09739852 16.05227457 119.09752098 53.59388445 154.56786964 55.53569186 210.23301531-4.01306864 325.31746765-217.61188347 329.33053629-217.61188345 44.79102419 73.01195852 33.52854124 148.61299358-12.03920593 187.44914173-48.54518518 41.55467852-186.41351111 44.14375506-186.4135111 44.14375506 20.0653432 52.16989235 161.29946864 30.81001086 161.29946865 30.81001086C519.09341235 592.13191902 360.38302024 615.56306173 354.42814419 615.56306173 519.09341235 688.57502025 655.6672 539.96202667 657.60900741 537.89076543c-9.32067555 71.58796642-112.49537581 117.15571358-114.43718322 117.15571359 12.03920592 56.95968395-99.03217778 153.9206005-140.58685629 145.8944632-101.10343902-43.49648592-170.74959803 2.07126124-170.74959804 2.07126125l93.07730174 25.37295011s97.09037037 10.09739852 101.10343901 49.58081581 37.54160987 86.99297185 41.55467853 86.99297185c97.09037037-70.94069728 47.50955457-133.85525728 47.50955456-133.85525729s184.73061136-73.01195852 287.9053116-271.07631408-33.52854124-317.29133037-25.50240394-319.23313777zM730.62096592 181.89274075c-31.45728-8.02613728-7.37886815-24.07841185 18.1235358-37.54160989 86.99297185-28.73874963 129.84218864 6.73159902 127.90038124 6.73159901-100.45616987-41.55467852-146.02391703 30.81001086-146.02391704 30.81001088z" fill="#D8D8D8" p-id="5950"></path><path d="M331.64427061 613.62125431c98.38490864-27.44421136 117.80298272-50.22808494 117.80298272-50.22808492s-91.0060405-56.18296098-139.93958717-56.95968396c-48.80409283-0.64726914-111.84810667 68.22216691-92.43003258 105.76377679 61.62002173 132.56071902 178.77573531 147.96572445 178.7757353 147.96572445 89.06423309-8.02613728 107.05831506-86.99297185 109.1295763-91.0060405-107.70558419 2.07126124-169.97287506-49.45136197-173.33867457-55.53569186z m-80.26137283 35.47034866c10.09739852-26.79694222 70.94069728-79.6141037 70.94069728-79.61410372-10.74466765-10.09739852-70.94069728-29.51547259-70.94069728-29.51547258 14.11046717-6.08432987 81.03809581 20.71261235 81.0380958 20.71261235 60.19602963-32.75181827 66.2803595-16.6995437 66.2803595-16.69954371-40.90740939 9.45012939-147.31845531 105.11650765-147.3184553 105.11650766z" fill="#FFFFFF" p-id="5951"></path><path d="M331.64427061 613.62125431c98.38490864-27.44421136 117.80298272-50.22808494 117.80298272-50.22808492s-91.0060405-56.18296098-139.93958717-56.95968396c-48.80409283-0.64726914-93.72457086 66.2803595-90.35877135 91.65330963 9.32067555 19.41807408 19.41807408 36.76488691 30.16274172 51.52262321 12.03920592-27.44421136 70.29342815-77.6722963 70.29342816-77.6722963-10.74466765-10.09739852-70.94069728-29.51547259-70.94069728-29.51547258 14.11046717-6.08432987 81.03809581 20.71261235 81.03809579 20.71261234 60.19602963-32.75181827 66.2803595-16.6995437 66.28035952-16.6995437-38.83614815 9.32067555-133.85525728 93.07730173-146.54173236 104.4692385 62.91456 84.40389531 145.8944632 95.66637827 145.89446322 95.66637829 89.06423309-8.02613728 107.05831506-73.01195852 109.12957628-77.02502717-107.18776889 1.68289975-169.45505975-49.83972347-172.82085925-55.92405334z" fill="#FFFFFF" p-id="5952"></path><path d="M839.75054222 292.96412445c63.56182914-61.62002173 163.37072987-74.95376592 163.37072987-74.95376593s-6.08432987-74.95376592-101.10343901-107.05831505c-137.2210568-43.49648592-212.82209185 20.0653432-212.82209185 20.0653432S517.79887408 0.39847506 346.40200691 89.46270815 54.48362666 421.51177482 54.48362666 421.51177482c65.63309037 81.03809581 234.31142717 82.9799032 234.31142717 82.33263407-20.0653432 4.66033778-51.5226232 28.73874963-49.58081581 28.73874963-71.58796642-21.35988148-236.25323457 74.95376592-210.88028444 141.88139457 26.14967309 66.92762864 258.38983902 49.58081581 258.389839 49.5808158s47.50955457 35.47034864 37.54160989 35.47034864c-124.53458173-9.32067555-144.59992494 55.53569185-144.59992495 57.60695308 32.10454914 0 222.91949037 51.5226232 222.91949038 51.52262322s32.10454914 136.57378765 61.62002173 138.51559506c30.16274173 2.07126124 55.53569185-49.58081581 55.53569185-51.5226232 37.54160987-37.54160987 28.0914805-116.50844445 24.07841185-120.5215131 18.12353581-10.09739852 101.10343902-35.47034864 246.35063309-188.09641086 144.59992494-151.84933925 55.66514569-350.04314864 49.5808158-354.05621728zM31.82920691 665.14387753c0-81.03809581 186.15460347-141.23412543 186.80187259-124.53458172-24.07841185 57.60695309 0 97.09037037 0 97.09037036l-37.54160987 33.52854124 51.5226232 2.07126123s30.16274173 41.55467852 32.10454914 43.49648593c-132.56071902 11.9097521-228.87436642-14.7577363-232.88743506-51.65207704z m191.46221037-13.98101334v8.67340642h-8.02613728l8.02613728-8.67340642z m204.79595457 121.81605136c-2.07126124 6.08432987-20.71261235 12.03920592-20.71261235 12.03920593l-4.01306864-12.03920593s26.66748839-6.08432987 24.72568099 0z" p-id="5953"></path><path d="M361.80701235 120.91998815c-48.80409283 0-88.41696395 37.54160987-88.41696396 82.97990321s39.48341728 82.9799032 88.41696396 82.97990321 88.41696395-37.54160987 88.41696395-82.97990321-39.61287111-82.9799032-88.41696395-82.97990321z m0 142.65811754c-12.03920592 0-23.43114272-3.3657995-32.75181827-10.09739852 11.3919368 0 20.71261235-9.32067555 20.71261234-20.71261235s-9.32067555-20.71261235-20.71261234-20.71261235c-10.74466765 0-19.41807408 8.02613728-20.71261236 18.1235358-4.01306864-8.02613728-6.08432987-16.6995437-6.08432987-26.14967309 0-32.75181827 26.79694222-59.5487605 59.5487605-59.54876049h6.08432987c-11.3919368 6.08432987-19.41807408 18.12353581-19.41807407 32.10454914 0 20.0653432 16.6995437 36.76488691 36.76488691 36.76488692 16.05227457 0 30.16274173-10.74466765 34.82307951-24.725681 1.29453827 4.66033778 2.07126124 10.09739852 2.07126123 14.7577363-0.77672297 33.39908741-27.57366518 60.19602963-60.32548345 60.19602964z m-22.13660445 204.79595456s28.0914805 18.12353581 75.60103506 0l-18.1235358-25.37295012c0.12945383-0.12945383-57.47749925 25.37295013-57.47749926 25.37295012z m115.8611753-63.56182914c-14.11046717 14.11046717-50.22808494 31.45728-50.22808493 31.45728s52.16989235 29.51547259 63.56182914 22.13660444c12.03920592-8.15559111-9.32067555-51.65207703-13.33374421-53.59388444z m43.49648594-33.52854124c-12.03920592 11.3919368-37.54160987 29.51547259-37.54160989 29.5154726l47.50955458 35.47034864c10.09739852-11.3919368-1.94180741-64.98582124-9.96794469-64.98582124z m22.13660444-31.45728c-2.07126124 9.32067555-13.33374419 23.43114272-17.34681284 26.1496731 10.74466765 5.30760691 28.73874963 24.72568098 28.73874962 24.72568098 11.26248297-16.05227457-3.3657995-48.1568237-11.39193678-50.87535408z" fill="#FFFFFF" p-id="5954"></path><path d="M778.1305205 238.07570173c8.02613728-2.07126124 53.59388445 45.56774717 47.50955456 47.50955457 77.6722963-85.05116445 147.31845531-82.9799032 147.3184553-85.05116445-20.0653432-51.5226232-113.14264494-74.95376592-113.14264493-74.95376593-141.23412543-25.37295013-159.35766124 37.54160987-163.37072988 39.48341728-162.72346075-119.09752098-317.9385995-48.1568237-315.99679209-50.22808493 105.11650765 23.43114272 75.60103506 109.1295763 75.60103505 109.1295763s-14.11046717 85.05116445-111.0713837 73.01195852c-97.09037037-12.03920592-81.68536494-120.52151309-81.68536495-120.52151309C165.68446419 255.55196839 76.62023111 417.49870617 76.62023111 417.49870617c10.09739852 16.05227457 119.09752098 53.59388445 155.34459259 55.53569186 210.23301531-4.01306864 325.9647368-217.61188347 329.3305363-217.61188346 44.79102419 73.01195852 33.52854124 149.26026272-12.03920592 188.09641086-48.93354667 41.55467852-186.80187259 44.27320889-186.8018726 44.27320888 20.0653432 52.16989235 161.94673778 30.81001086 161.94673777 30.81001087-4.66033778 70.94069728-164.01799902 95.01910914-169.32560592 95.01910913 165.31253728 73.01195852 301.88632494-75.60103506 303.95758617-77.67229628-10.09739852 72.23523555-113.14264494 117.80298272-115.08445234 117.80298272 12.03920592 57.60695309-99.03217778 153.9206005-141.23412544 146.54173234-101.10343902-43.49648592-170.74959803 2.07126124-170.74959802 2.07126122l93.72457087 25.37295014s97.7376395 10.09739852 101.10343901 49.5808158c4.01306864 39.48341728 37.54160987 86.99297185 41.55467851 86.99297185 97.7376395-70.94069728 47.50955457-134.50252642 47.50955457-134.50252641s184.73061136-73.01195852 288.55258075-271.72358322-34.30526419-318.58586864-26.27912691-320.00986074z m-46.86228544-59.54876049c-32.10454914-8.02613728-7.37886815-24.07841185 18.1235358-37.54160988 87.64024098-28.73874963 130.48945778 6.73159902 128.54765037 6.73159901-100.45616987-41.55467852-146.67118617 30.81001086-146.67118617 30.81001087z" fill="#D8D8D8" p-id="5955"></path><path d="M331.64427061 611.67944691c98.38490864-27.44421136 118.45025185-50.22808494 118.45025186-50.22808494s-91.65330963-56.18296098-139.93958717-57.60695308c-48.80409283-0.64726914-112.49537581 68.22216691-92.43003258 105.7637768 61.62002173 132.56071902 178.77573531 148.61299358 178.7757353 148.61299356 89.71150222-8.02613728 107.05831506-86.99297185 109.12957629-91.00604049-108.35285333 1.94180741-170.62014419-49.58081581-173.9859437-55.53569185z m-80.26137283 35.47034864c10.09739852-26.79694222 70.94069728-80.39082667 70.94069728-80.39082666-10.74466765-10.09739852-70.94069728-29.51547259-70.94069728-29.51547259 14.11046717-6.08432987 81.68536494 20.71261235 81.68536494 20.71261234 60.97275259-32.75181827 66.2803595-16.6995437 66.2803595-16.6995437-41.55467852 10.09739852-147.96572445 105.89323061-147.96572444 105.89323061z" fill="#9A6E38" p-id="5956"></path><path d="M331.64427061 611.67944691c98.38490864-27.44421136 118.45025185-50.22808494 118.45025186-50.22808494s-91.65330963-56.18296098-139.93958717-57.60695308c-48.80409283-0.64726914-94.37184 66.2803595-91.00604049 91.65330963 9.32067555 19.41807408 19.41807408 36.76488691 30.16274172 51.52262321 12.03920592-27.44421136 70.29342815-78.31956543 70.29342816-78.31956543-10.74466765-10.09739852-70.94069728-29.51547259-70.94069728-29.5154726 14.11046717-6.08432987 81.68536494 20.71261235 81.68536494 20.71261235 60.97275259-32.75181827 66.2803595-16.6995437 66.2803595-16.6995437-38.83614815 9.32067555-133.85525728 93.07730173-146.54173235 104.46923851 62.91456 85.05116445 146.54173235 96.44310124 146.54173235 96.44310124 89.71150222-8.02613728 107.05831506-73.01195852 109.1295763-77.02502716-108.48230717 2.07126124-170.74959803-49.45136197-174.11539754-55.40623803z" fill="#FCB316" p-id="5957"></path></svg>`;
  1121. } else if (is_huya) {
  1122. logo = `<svg t="1694231489964" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="4471" width="40" height="40"><path d="M516.032 156.352a425.408 425.408 0 0 1 162.624 22.4 388.096 388.096 0 0 1 124.224 69.632 300.16 300.16 0 0 1 78.336 99.904c12.032 25.28 20.096 52.544 23.424 80.384 2.496 21.184 2.496 43.136-4.352 63.552a104.128 104.128 0 0 1-36.928 50.816c-22.4 16.896-49.28 26.496-76.16 33.408-45.568 11.328-92.416 15.552-139.072 19.392-49.664 3.776-99.392 6.976-148.992 11.52-33.472 2.752-66.944 5.888-100.544 7.296a554.24 554.24 0 0 1-90.432-2.112c-26.304-3.328-52.928-9.728-75.584-24.064a102.592 102.592 0 0 1-39.168-45.056c-11.136-24.704-13.504-52.352-12.416-79.168 1.728-58.496 22.848-115.84 57.728-162.624 42.048-56.896 102.336-99.008 168.576-122.944a394.816 394.816 0 0 1 108.736-22.336z m-32.576 101.312a24.32 24.32 0 0 0-13.888 6.272 51.072 51.072 0 0 0-10.624 18.56 217.344 217.344 0 0 0-10.24 53.12c-2.432 30.592-1.664 61.44 2.496 91.84 2.752 18.816 6.592 37.76 14.592 55.168 3.968 8.064 9.088 16.512 17.6 20.288 8.768 3.328 18.368 1.92 27.264 0.064 19.072-4.352 37.056-12.48 54.4-21.44a447.36 447.36 0 0 0 65.92-42.304c16.448-12.992 32.576-26.88 45.056-43.904 5.632-8.192 11.648-18.304 8.384-28.608-4.16-11.584-13.312-20.544-22.144-28.8a336.704 336.704 0 0 0-55.232-38.912 399.808 399.808 0 0 0-73.152-33.536c-16.192-5.056-33.216-9.92-50.432-7.808m212.544 473.28c19.2-7.424 37.952-16.64 54.016-29.632 0.768 26.112-5.568 52.224-16.384 75.904l-1.024-1.024c-7.936-8.384-16.896-15.872-23.68-25.344a189.312 189.312 0 0 1-12.928-19.904m-285.248 46.912c-1.216-10.624-3.584-21.568-0.96-32.128 20.032 6.144 40.768 9.728 61.632 11.712-12.544 21.952-32.192 38.976-53.632 51.968a208.96 208.96 0 0 0-1.664-2.176c-0.576-9.984-4.224-19.456-5.376-29.376" fill="#F6F8F9" p-id="4472"></path><path d="M553.664 65.984c22.784-23.488 51.072-42.752 83.136-50.56 5.76-1.6 11.328 1.6 16.832 2.944 42.176 14.272 79.68 39.744 112.256 69.632a486.848 486.848 0 0 1 85.824 107.52c1.536 2.496 3.136 5.056 4.288 7.808-31.616-34.688-62.4-70.4-98.496-100.608a399.36 399.36 0 0 0-99.008-60.16c-4.288-1.6-8.192-4.544-12.864-4.8-32.192 2.88-62.976 14.272-91.968 28.224M194.176 22.72c59.648 7.168 118.912 22.656 171.904 51.456 3.84 2.24 8 4.096 11.584 6.848-8.384-1.92-16.384-5.376-24.64-7.68C308.928 60.16 262.976 50.944 216.768 52.416c-3.584 0.256-7.872-0.32-10.432 2.88-14.08 14.208-24.256 31.616-33.728 49.088a802.56 802.56 0 0 0-49.664 119.488c-3.712 10.752-6.464 21.76-9.984 32.576 6.144-74.432 31.36-146.496 67.712-211.392 4.288-7.616 8.64-15.104 13.504-22.336M406.464 151.68c99.456-33.792 210.944-27.776 307.584 12.672 39.936 16.768 77.44 39.488 110.144 67.968a323.328 323.328 0 0 1 81.408 106.944c10.944 23.552 18.88 48.576 23.104 74.176 5.696 33.408 5.056 69.12-9.344 100.416-2.24 4.736-4.352 9.6-7.872 13.568-2.368 6.08-7.04 10.88-11.008 15.936-24.128 28.288-59.136 44.544-94.208 54.72-50.56 14.4-103.232 18.944-155.456 23.36-36.48 2.816-73.024 5.184-109.44 8.128-63.168 4.928-126.272 12.352-189.696 11.52a384.896 384.896 0 0 1-77.056-8.384 177.28 177.28 0 0 1-56.192-22.528 127.552 127.552 0 0 1-45.44-49.984c-13.76-26.752-18.304-57.28-18.048-87.104 0.192-63.616 20.992-126.72 57.408-178.816 46.72-67.136 116.864-116.608 194.112-142.592z m109.568 4.672a394.816 394.816 0 0 0-108.736 22.336c-66.24 23.936-126.592 66.048-168.576 122.944a288.896 288.896 0 0 0-57.728 162.624c-1.088 26.816 1.28 54.464 12.48 79.232 8.192 18.432 21.952 34.304 39.104 44.992 22.656 14.336 49.28 20.672 75.584 24 30.016 3.52 60.352 3.584 90.432 2.112 33.6-1.344 67.072-4.48 100.544-7.232 49.6-4.608 99.264-7.744 148.928-11.52 46.656-3.84 93.568-8.064 139.072-19.392 26.88-6.912 53.76-16.512 76.16-33.408 17.024-12.736 30.4-30.528 36.928-50.816 6.912-20.416 6.912-42.368 4.352-63.552a261.504 261.504 0 0 0-23.424-80.384 300.992 300.992 0 0 0-78.336-99.904 388.096 388.096 0 0 0-124.224-69.632 426.176 426.176 0 0 0-162.56-22.4" fill="#954607" p-id="4473"></path><path d="M483.456 257.664c17.152-2.048 34.176 2.752 50.432 7.808 25.536 8.448 49.856 20.16 73.152 33.536 19.52 11.328 38.4 23.936 55.232 38.976 8.832 8.256 17.92 17.152 22.144 28.8 3.264 10.304-2.752 20.416-8.384 28.608-12.416 17.024-28.544 30.912-45.056 43.904a447.36 447.36 0 0 1-65.92 42.304 238.272 238.272 0 0 1-54.4 21.44c-8.896 1.792-18.496 3.2-27.2-0.192-8.512-3.776-13.632-12.224-17.6-20.288-8-17.344-11.84-36.352-14.592-55.104a428.608 428.608 0 0 1-2.496-91.904c1.6-17.984 4.096-36.032 10.24-53.12a49.536 49.536 0 0 1 10.624-18.496 24.128 24.128 0 0 1 13.824-6.272m430.016 270.272c1.344-0.96 2.56-2.624 4.416-2.56a404.8 404.8 0 0 1 104.256 9.472c0.768 5.376 0.96 10.88 1.344 16.32a374.4 374.4 0 0 1-5.056 79.36A549.888 549.888 0 0 0 945.92 553.6c-10.56-8.896-20.8-18.304-32.448-25.664M40.576 611.2a415.36 415.36 0 0 1 138.752-37.76 185.792 185.792 0 0 1-9.152 9.664 527.04 527.04 0 0 0-109.824 168.448 327.232 327.232 0 0 1-52.544-121.92c10.496-6.912 21.504-12.992 32.768-18.432m794.944 40.32c25.408 1.472 50.56 7.424 73.984 17.28 27.136 11.264 51.776 27.84 73.984 46.912 1.984 1.856 4.608 3.584 5.12 6.528a328 328 0 0 1-82.432 102.912c-4.928-25.6-10.24-51.264-18.432-76.096-11.584-35.136-26.944-70.016-52.224-97.536m-87.936 10.112a12.992 12.992 0 0 1 19.712 5.376c3.008 8.576-1.664 17.408-6.72 24.128 3.968 34.112-5.76 68.096-19.584 98.944a158.144 158.144 0 0 1-65.408-31.232c-6.272-4.608-11.456-10.496-17.152-15.68a575.552 575.552 0 0 1-174.4 15.488c-15.168 28.544-40.832 50.048-68.8 65.408a206.08 206.08 0 0 1-45.504-96.576c-6.08-4.864-12.416-10.24-15.232-17.728-1.024-5.312 3.52-10.112 8.32-11.712 4.864-2.048 11.776-3.072 15.36 1.792 6.464 8.192 16.32 12.48 25.728 16.384 29.568 11.456 61.44 15.488 92.928 17.152A549.184 549.184 0 0 0 640 720.768c27.712-6.464 55.296-15.104 79.872-29.696 8-4.928 16.192-10.176 21.696-17.92 1.536-3.968 1.984-8.96 6.016-11.52z m-51.584 69.312c-8.32 3.2-16.896 5.696-25.28 8.64 17.28 16.896 38.464 30.336 61.952 36.608l1.024 1.024c10.816-23.68 17.152-49.792 16.384-75.904a200.512 200.512 0 0 1-54.08 29.632z m-313.472 4.032c6.336 25.984 17.024 51.264 33.664 72.32l1.664 2.176c21.44-12.992 41.152-30.016 53.632-51.968a314.688 314.688 0 0 1-61.632-11.712 186.688 186.688 0 0 1-27.328-10.816m-202.176 4.544a240.384 240.384 0 0 1 109.248-55.36 222.72 222.72 0 0 0-24.128 50.24c-17.088 50.688-21.632 104.64-21.632 157.824a449.728 449.728 0 0 1-125.888-76.864 288 288 0 0 1 62.4-75.84" fill="#954607" p-id="4474"></path><path d="M553.664 65.984c28.928-13.952 59.776-25.344 92.032-28.096 4.608 0.32 8.576 3.264 12.864 4.8a396.288 396.288 0 0 1 99.008 60.16c36.096 30.208 66.88 65.92 98.496 100.608 10.048 10.56 20.864 20.352 30.528 31.232 68.416 74.304 117.248 168.064 132.416 268.416 2.176 15.936 4.224 32 4.48 48.064-0.384-5.44-0.64-10.88-1.344-16.32a405.056 405.056 0 0 0-104.256-9.472c-1.856-0.064-3.072 1.6-4.416 2.56 11.648 7.36 21.888 16.768 32.448 25.6 26.752 23.104 50.688 49.216 72.512 76.928a324.672 324.672 0 0 1-29.824 91.776c-0.512-2.944-3.136-4.608-5.12-6.528a277.184 277.184 0 0 0-73.984-46.912 225.28 225.28 0 0 0-73.984-17.28c25.28 27.52 40.64 62.4 52.224 97.536 8.192 24.832 13.568 50.432 18.432 76.096l0.064 0.192c-49.408 41.472-108.736 69.824-170.304 88.128-80.704 23.936-165.504 31.616-249.408 28.928-82.88-3.072-165.952-18.112-242.752-49.856v-0.256c0-53.184 4.608-107.136 21.632-157.824 5.888-17.664 14.08-34.56 24.128-50.24a240.384 240.384 0 0 0-109.248 55.36 288.832 288.832 0 0 0-62.464 75.904 358.912 358.912 0 0 1-57.536-63.872 524.928 524.928 0 0 1 109.824-168.448c3.2-3.136 6.336-6.272 9.152-9.728a413.888 413.888 0 0 0-138.688 37.76c-11.264 5.44-22.272 11.52-32.768 18.432a404.48 404.48 0 0 1 4.736-176.896 491.392 491.392 0 0 1 100.416-196.288c3.52-10.816 6.272-21.824 9.984-32.576 13.696-40.896 29.568-81.216 49.664-119.488 9.472-17.472 19.648-34.944 33.728-49.088 2.496-3.2 6.784-2.624 10.432-2.88 46.208-1.472 92.16 7.744 136.256 20.928 8.32 2.304 16.256 5.696 24.64 7.68 1.664 0.512 3.328 1.6 5.12 0.832a494.336 494.336 0 0 1 167.488-15.552l3.392-0.32z m-147.2 85.696c-77.248 25.984-147.392 75.456-194.112 142.592a316.288 316.288 0 0 0-57.408 178.816c-0.256 29.824 4.288 60.352 18.048 87.104a128 128 0 0 0 45.44 49.984c17.024 11.072 36.48 17.856 56.192 22.528 25.216 5.824 51.2 7.744 77.056 8.384 63.424 0.832 126.592-6.592 189.696-11.52 36.48-2.944 72.96-5.312 109.44-8.128 52.224-4.416 104.896-8.896 155.456-23.36 35.072-10.176 70.08-26.432 94.208-54.72 3.968-5.056 8.64-9.856 11.008-15.936 3.52-3.968 5.632-8.832 7.872-13.568 14.336-31.232 14.976-67.008 9.344-100.416a286.976 286.976 0 0 0-23.104-74.176 323.328 323.328 0 0 0-81.408-106.944 408.256 408.256 0 0 0-110.144-67.968c-96.64-40.448-208.128-46.528-307.584-12.672z m341.12 509.952c-4.032 2.56-4.48 7.552-6.144 11.584-5.504 7.744-13.76 12.992-21.696 17.92-24.576 14.592-52.16 23.232-79.872 29.696a543.488 543.488 0 0 1-143.168 12.608c-31.488-1.6-63.36-5.696-92.928-17.152-9.408-3.904-19.264-8.192-25.728-16.384-3.584-4.864-10.496-3.84-15.36-1.792-4.8 1.6-9.28 6.4-8.32 11.712 2.88 7.488 9.152 12.8 15.232 17.728 6.528 35.392 21.952 69.248 45.504 96.576 28.032-15.36 53.632-36.864 68.8-65.408a577.408 577.408 0 0 0 174.4-15.488c5.696 5.248 10.816 11.072 17.152 15.68 18.944 15.424 41.6 25.92 65.408 31.232 13.888-30.848 23.616-64.832 19.584-98.944 5.056-6.72 9.792-15.616 6.72-24.128-2.752-7.68-13.248-10.56-19.584-5.44" fill="#F49F17" p-id="4475"></path><path d="M670.72 739.648c8.384-2.944 16.96-5.44 25.28-8.64 4.032 6.784 8.064 13.632 12.992 19.904 6.72 9.472 15.68 16.96 23.68 25.344a143.232 143.232 0 0 1-61.952-36.608z m-288.192-4.672c8.768 4.352 17.984 7.872 27.328 10.752-2.688 10.56-0.256 21.504 0.96 32.128 1.088 9.984 4.8 19.456 5.44 29.44a186.56 186.56 0 0 1-33.728-72.32z" fill="#F3EBDE" p-id="4476"></path></svg>`;
  1123. } else if (is_douyin) {
  1124. logo = `<svg t="1694230416862" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="4262" width="40" height="40"><path d="M230.4 51.2h563.2C892.416 51.2 972.8 131.584 972.8 230.4v563.2C972.8 892.416 892.416 972.8 793.6 972.8h-563.2C131.584 972.8 51.2 892.416 51.2 793.6v-563.2C51.2 131.584 131.584 51.2 230.4 51.2z" fill="#170B1A" p-id="4263"></path><path d="M511.488 323.072c0.512-57.856 0-115.712 0.512-173.568h118.272c-0.512 10.24 1.024 20.48 2.56 30.208h-87.04v470.016c0.512 19.968-4.608 39.936-14.336 57.344-15.36 26.624-44.032 45.056-74.752 47.616-19.456 1.536-39.424-2.048-56.832-11.776a97.570133 97.570133 0 0 1-33.28-29.696c30.208 16.896 69.632 15.36 98.816-3.584 28.16-17.408 46.592-50.176 46.592-83.968-0.512-100.864-0.512-201.728-0.512-302.592z m195.072-33.28c16.384 10.24 34.816 18.432 53.76 22.528 11.264 2.56 22.528 3.584 34.304 3.584v26.624c-33.792-7.68-65.024-26.624-88.064-52.736z" fill="#25F4EE" p-id="4264"></path><path d="M298.496 437.248c42.496-26.624 94.208-37.376 143.36-30.208v28.16c-13.312 0.512-26.112 2.048-39.424 4.608-31.744 6.656-61.952 19.968-88.064 39.424-28.16 20.992-49.664 49.664-64.512 81.408-14.336 30.208-21.504 63.488-20.992 97.28 0 36.864 10.24 72.704 27.648 104.96 8.192 14.848 17.408 29.184 29.696 40.96-25.088-17.408-46.08-40.96-61.44-67.584-20.992-35.328-31.232-76.8-30.208-118.272 1.536-37.888 12.288-75.264 32.256-108.032 17.408-29.184 42.496-54.784 71.68-72.704z" fill="#25F4EE" p-id="4265"></path><path d="M545.792 179.712h87.552c3.072 16.896 9.216 32.768 16.896 48.128 12.288 23.552 29.696 44.544 52.224 58.368a11.946667 11.946667 0 0 1 3.584 3.584 168.0384 168.0384 0 0 0 88.576 52.736c0.512 30.72 0 61.952 0 92.672a277.333333 277.333333 0 0 1-162.816-51.712c0 73.728 0 147.456 0.512 221.184 0 9.728 0.512 19.456 0 29.696-2.56 35.84-13.824 71.168-31.744 102.4-15.36 27.136-36.352 51.2-61.44 69.632-32.256 24.064-72.192 37.376-112.128 38.4-20.48 0.512-40.96-0.512-60.928-5.12-28.16-6.144-54.784-17.92-78.336-34.304l-1.536-1.536c-11.776-11.776-21.504-26.112-29.696-40.96-17.408-31.744-27.648-68.096-27.648-104.96-0.512-33.28 6.656-67.072 20.992-97.28 14.848-31.744 36.864-60.416 64.512-81.408 26.112-19.456 56.32-32.768 88.064-39.424 12.8-2.56 26.112-4.096 39.424-4.608 0.512 11.776 0 23.552 0.512 34.816v59.904c-14.848-5.12-31.232-5.12-46.592-1.536-18.432 4.096-35.84 12.288-50.176 24.576-8.704 7.68-16.384 16.896-21.504 27.136-9.216 17.408-12.288 37.888-10.24 57.344 2.048 18.944 10.24 37.376 22.528 51.712 8.192 10.24 18.944 17.92 29.696 25.088 8.704 12.288 19.968 22.528 33.28 29.696 17.408 9.216 37.376 13.312 56.832 11.776 30.72-2.048 59.392-20.992 74.752-47.616 9.728-17.408 14.848-37.376 14.336-57.344 1.024-157.696 0.512-314.368 0.512-471.04z" fill="#FFFFFF" p-id="4266"></path><path d="M633.344 179.712c10.24 0.512 20.48 0 31.232 0 0 34.304 10.752 68.608 30.72 96.768 2.56 3.584 5.12 6.656 7.68 9.728-22.528-13.824-40.448-34.816-52.224-58.368-7.68-14.848-13.824-31.232-17.408-48.128z m161.28 162.816c11.264 2.56 22.528 3.584 34.304 3.584v119.296c-58.368 0.512-116.736-18.944-164.352-53.248v236.544c0.512 17.92-1.024 35.84-5.12 53.248-11.264 53.248-43.008 101.376-87.04 132.608-23.552 16.896-50.176 28.672-77.824 34.816-33.792 7.68-69.12 7.168-102.4-1.536-39.424-10.24-76.288-32.256-103.936-62.464 23.552 16.896 50.176 28.16 78.336 34.304 19.968 4.608 40.448 5.632 60.928 5.12 39.936-1.024 79.872-14.336 112.128-38.4 25.088-18.432 45.568-42.496 61.44-69.632 17.92-31.232 29.184-66.56 31.744-102.4 0.512-9.728 0.512-19.456 0-29.696-0.512-73.728-0.512-147.456-0.512-221.184a277.333333 277.333333 0 0 0 162.816 51.712c-0.512-30.72 0-61.952-0.512-92.672z" fill="#FE2C55" p-id="4267"></path><path d="M442.368 434.688c11.264 0 23.04 0.512 34.304 2.048v122.368c-16.384-5.632-34.816-6.144-51.712-2.048-32.256 7.168-59.392 31.744-70.656 62.976-11.264 30.72-6.656 66.56 12.8 92.672-11.264-6.656-21.504-14.848-29.696-25.088-12.288-14.336-20.48-32.768-22.528-51.712-2.048-19.456 1.024-39.936 10.24-57.344 5.12-10.24 12.8-19.456 21.504-27.136 14.336-12.288 32.256-19.968 50.176-24.576 15.36-3.584 31.744-3.584 46.592 1.536v-59.904c-1.024-10.24-0.512-22.016-1.024-33.792z" fill="#FE2C55" p-id="4268"></path></svg>`;
  1125. } else if (is_bilibili) {
  1126. logo = `<svg viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2753" width="24" height="24"><path d="M306.005333 117.632L444.330667 256h135.296l138.368-138.325333a42.666667 42.666667 0 0 1 60.373333 60.373333L700.330667 256H789.333333A149.333333 149.333333 0 0 1 938.666667 405.333333v341.333334a149.333333 149.333333 0 0 1-149.333334 149.333333h-554.666666A149.333333 149.333333 0 0 1 85.333333 746.666667v-341.333334A149.333333 149.333333 0 0 1 234.666667 256h88.96L245.632 177.962667a42.666667 42.666667 0 0 1 60.373333-60.373334zM789.333333 341.333333h-554.666666a64 64 0 0 0-63.701334 57.856L170.666667 405.333333v341.333334a64 64 0 0 0 57.856 63.701333L234.666667 810.666667h554.666666a64 64 0 0 0 63.701334-57.856L853.333333 746.666667v-341.333334A64 64 0 0 0 789.333333 341.333333zM341.333333 469.333333a42.666667 42.666667 0 0 1 42.666667 42.666667v85.333333a42.666667 42.666667 0 0 1-85.333333 0v-85.333333a42.666667 42.666667 0 0 1 42.666666-42.666667z m341.333334 0a42.666667 42.666667 0 0 1 42.666666 42.666667v85.333333a42.666667 42.666667 0 0 1-85.333333 0v-85.333333a42.666667 42.666667 0 0 1 42.666667-42.666667z" p-id="2754" fill="currentColor"></path></svg>`;
  1127. }
  1128. return logo;
  1129. };
  1130. class LivePlugin {
  1131. constructor() {
  1132. this.baseUrl = "/";
  1133. this.key = "key";
  1134. this.bg_key = "bg_key";
  1135. this.bg_show_key = "bg_show_key";
  1136. this.bg_is_first_key = "bg_is_first_key";
  1137. this.full_screen_key = "full_screen_key";
  1138. this.full_screen_is_find = true;
  1139. this.full_screen_class_or_id = "full_screen_button_class_or_id";
  1140. this.full_button_tag_name = "div";
  1141. this.full_screen_button = getLocalStore(this.full_screen_class_or_id, String.name, false) || this.full_screen_class_or_id;
  1142. this.full_screen_text = "全屏";
  1143. this.full_cancel_text = "退出全屏";
  1144. this.full_screen_is_first_key = "full_screen_is_first_key";
  1145. this.default_background_image = "https://cdn.staticaly.com/gh/wuxin0011/blog-resource@main/picgo/bg5.jpg";
  1146. this.users = [];
  1147. this.menu = null;
  1148. this.menu_show_key = "menu_show_key";
  1149. this.menu_is_first_key = "menu_is_first_key";
  1150. this.tbody = null;
  1151. this.m_container = null;
  1152. this.gift_key = `${this.key}_gift`;
  1153. this.gift_tool = null;
  1154. this.gift_is_first_key = "gift_is_first_key";
  1155. this.logo_btn = null;
  1156. this.btn_logo_svg = iconLogo();
  1157. this.logo_show_key = `${this.key}_logo_show`;
  1158. this.header_logo = "none";
  1159. this.button_name = "";
  1160. this.is_new = false;
  1161. this.btn_is_first_key = "btn_is_first_key";
  1162. this.video_player_container = ".room-player-wrap";
  1163. this.auto_max_pro_key = "auto_max_pro_key";
  1164. this.is_first_auto_max_pro_key = "is_first_auto_max_pro_key";
  1165. this.auto_max_pro_class_or_id_list = "auto_max_pro_class_or_id_list";
  1166. this.auto_max_pro_keywords = ["登录", "会员", "大会员"];
  1167. if (is_localhost) {
  1168. this.init();
  1169. }
  1170. }
  1171. // 初始化操作方法,子类可以继承该类,实现该类中空方法,参考此操作,初始化构造器实调用该方法就可以了。。。
  1172. init() {
  1173. if (!this.removeRoom()) {
  1174. this.common();
  1175. this.detail();
  1176. this.index();
  1177. this.category();
  1178. this.create_container();
  1179. this.clickLogoShowContainer();
  1180. this.addEven();
  1181. loopDo(() => {
  1182. this.isShowLeftMenu();
  1183. this.isShowGift();
  1184. }, 30, 1e3);
  1185. }
  1186. this.settingBackgroundImage();
  1187. }
  1188. /*********************************建议下面操作方法必须重写的,并且参考此步骤*****************************/
  1189. /**
  1190. * 公共
  1191. */
  1192. common() {
  1193. }
  1194. /**
  1195. * 首页
  1196. */
  1197. index() {
  1198. }
  1199. /**
  1200. * 分类
  1201. */
  1202. category() {
  1203. }
  1204. /**
  1205. * 详情
  1206. */
  1207. detail() {
  1208. }
  1209. /**
  1210. * 点击房间名称操作
  1211. */
  1212. removeRoomByClickRoomName() {
  1213. }
  1214. /**
  1215. * 通过房间号获取名称
  1216. * @param roomId 房间号
  1217. * @returns {null} name
  1218. */
  1219. getNameByRoomId(roomId) {
  1220. warn("请自定义实现通过名称获取房间号方法");
  1221. return null;
  1222. }
  1223. /**
  1224. * 通过一个地址获取房间号
  1225. * @param url 地址
  1226. * @returns {null} 房间号
  1227. */
  1228. getRoomIdByUrl(url) {
  1229. warn("请自定义实现通过名称获取房间号方法");
  1230. return null;
  1231. }
  1232. /**
  1233. * 自动最高画质!
  1234. */
  1235. isAutoMaxVideoPro() {
  1236. let that = this;
  1237. if (!(wls.getItem(that.is_first_auto_max_pro_key) === null ? true : getLocalStore(that.auto_max_pro_key, Boolean.name))) {
  1238. return;
  1239. }
  1240. log$1("查找播放视频画质列表", that.auto_max_pro_class_or_id_list);
  1241. loopDo((timer) => {
  1242. let items = querySelectorAll(that.auto_max_pro_class_or_id_list);
  1243. if (isArray(items)) {
  1244. for (let item of items) {
  1245. let result = that.auto_max_pro_keywords.findIndex((key) => item.innerText.indexOf(key) !== -1);
  1246. if (result === -1) {
  1247. log$1("当前最高画质", item.innerText);
  1248. if (is_huya) {
  1249. item = querySelector(item, "span");
  1250. }
  1251. item.click();
  1252. clearInterval(timer);
  1253. return;
  1254. }
  1255. }
  1256. }
  1257. }, 100, 500);
  1258. }
  1259. /*********************************子类继承无需修改的方法******************************/
  1260. /**
  1261. * 容器,所有操作容器均在此容器中,
  1262. */
  1263. create_container() {
  1264. let that = this;
  1265. that.users = getLocalStore(that.key, Array.name) || [];
  1266. let isShowBg = wls.getItem(this.bg_is_first_key) === null ? true : getLocalStore(that.bg_show_key, Boolean.name);
  1267. let isShowMenu = wls.getItem(this.menu_is_first_key) === null ? false : getLocalStore(that.menu_show_key, Boolean.name);
  1268. let isShowFullScreen = wls.getItem(this.full_screen_is_first_key) === null ? false : getLocalStore(that.full_screen_key, Boolean.name);
  1269. let isShowGift = wls.getItem(this.gift_is_first_key) === null ? false : getLocalStore(that.gift_key, Boolean.name);
  1270. let isShowLogo = wls.getItem(this.btn_is_first_key) === null ? true : getLocalStore(that.logo_show_key, Boolean.name);
  1271. let isAutoMaxPro = wls.getItem(this.is_first_auto_max_pro_key) === null ? true : getLocalStore(that.auto_max_pro_key, Boolean.name);
  1272. that.m_container = new LivePluginElement().createContainer(isShowBg, isShowMenu, isShowFullScreen, isShowGift, isShowLogo, isAutoMaxPro);
  1273. if (querySelector(that.m_container, "#m-container-box2 table tbody")) {
  1274. that.tbody = querySelector(that.m_container, "#m-container-box2 table tbody");
  1275. that.is_new = true;
  1276. } else {
  1277. that.tbody = querySelector(that.m_container, ".m-container table tbody");
  1278. that.is_new = false;
  1279. }
  1280. that.operationDOMButton();
  1281. that.createRoomItem(that.users);
  1282. that.createButton();
  1283. log$1("操作面板初始化完毕!");
  1284. }
  1285. /**
  1286. * 通过用户列表构建列表
  1287. * @param {Object} arr 用户列表
  1288. */
  1289. createRoomItem(arr) {
  1290. if (!isArray(arr)) {
  1291. return;
  1292. }
  1293. let that = this;
  1294. arr.forEach((item, index) => {
  1295. let tr = createElement("tr");
  1296. tr.innerHTML = `
  1297. <td>${index + 1}</td>
  1298. <td>${item.name}</td>
  1299. <td>${item.roomId}</td>
  1300. <td><button class="btn btn-danger" room-id="${item.roomId}">删除</button></td>
  1301. `;
  1302. appendChild(that.tbody, tr);
  1303. addEventListener(querySelector(tr, "button"), "click", function(e) {
  1304. let roomId = e.target.getAttribute("room-id");
  1305. that.userDelete(roomId);
  1306. handlerPromise(that.getRoomIdByUrl(local_url), (result) => {
  1307. if (result === roomId) {
  1308. window.location.reload();
  1309. }
  1310. });
  1311. removeDOM(tr, true);
  1312. });
  1313. });
  1314. }
  1315. /**
  1316. * 绘制表格
  1317. * @param {Object} arr 表格数据
  1318. */
  1319. resetTbody(arr) {
  1320. if (!this.tbody) {
  1321. error("tbody 为 null !");
  1322. return;
  1323. }
  1324. querySelectorAll(this.tbody, "tr").forEach((item) => removeDOM(item, true));
  1325. this.createRoomItem(arr);
  1326. }
  1327. /**
  1328. * 操作框容器
  1329. */
  1330. operationDOMButton() {
  1331. let that = this;
  1332. if (!that.m_container) {
  1333. return;
  1334. }
  1335. const container = that.m_container;
  1336. const inputValue = querySelector(container, ".operation input");
  1337. addEventListener(inputValue, "input", () => {
  1338. let arr = [];
  1339. try {
  1340. arr = that.users.filter((item) => {
  1341. var _a, _b;
  1342. return item && (item == null ? void 0 : item.roomId) && ((_a = item == null ? void 0 : item.roomId) == null ? void 0 : _a.indexOf(inputValue.value)) !== -1 || item && (item == null ? void 0 : item.name) && ((_b = item == null ? void 0 : item.name) == null ? void 0 : _b.indexOf(inputValue.value)) !== -1;
  1343. });
  1344. } catch (error2) {
  1345. arr = [...that.users];
  1346. }
  1347. that.resetTbody(arr);
  1348. });
  1349. const addRoomBtn = querySelector(container, ".operation button.add-room");
  1350. addEventListener(addRoomBtn, "click", function() {
  1351. const keywords = inputValue.value.trim();
  1352. if (!keywords) {
  1353. return alert("请输入房间号!");
  1354. }
  1355. if (!that.userIsExist(keywords)) {
  1356. if (is_bilibili) {
  1357. that.handlerBiliBiliKeywords(keywords, inputValue);
  1358. } else {
  1359. handlerPromise(that.getNameByRoomId(keywords), (res) => {
  1360. that.searchUserByRoomId(res, keywords, inputValue);
  1361. });
  1362. }
  1363. } else {
  1364. alert("该主播已添加!");
  1365. }
  1366. });
  1367. const clearRoomBtn = querySelector(container, ".operation button.clear-room");
  1368. addEventListener(clearRoomBtn, "click", function() {
  1369. if (confirm("确认重置?")) {
  1370. that.users = [];
  1371. let deleteKeyList = [
  1372. that.key,
  1373. that.bg_key,
  1374. that.menu_show_key,
  1375. that.gift_key,
  1376. that.logo_show_key,
  1377. that.full_screen_key,
  1378. that.bg_is_first_key,
  1379. that.btn_is_first_key,
  1380. that.full_screen_is_first_key,
  1381. that.menu_is_first_key,
  1382. that.gift_is_first_key,
  1383. that.is_first_auto_max_pro_key,
  1384. DARK_THEME_KEY,
  1385. THEME_IS_AUTO
  1386. ];
  1387. for (let item of deleteKeyList) {
  1388. wls.removeItem(item);
  1389. }
  1390. that.resetTbody(that.users);
  1391. window.location.reload();
  1392. }
  1393. });
  1394. const uploadButton = querySelector(container, ".operation #file");
  1395. addEventListener(uploadButton, "change", function(e) {
  1396. const file = uploadButton.files[0] || null;
  1397. uploadImage(file, (base64) => {
  1398. addLocalStore(that.bg_key, base64, String.name, false);
  1399. console.log("result");
  1400. that.settingBackgroundImage(base64);
  1401. });
  1402. addLocalStore(that.bg_is_first_key, false, Boolean.name);
  1403. });
  1404. const upload = querySelector(container, ".operation .bg-btn");
  1405. addEventListener(upload, "click", function(e) {
  1406. uploadButton.click();
  1407. addLocalStore(that.bg_is_first_key, false, Boolean.name);
  1408. });
  1409. const close_container = querySelector(container, ".operation .btn-close-container");
  1410. addEventListener(close_container, "click", function(e) {
  1411. that.isShowContainer();
  1412. });
  1413. const close_container2 = querySelector(container, ".operation #m-close-button1");
  1414. addEventListener(close_container2, "click", function(e) {
  1415. that.isShowContainer();
  1416. });
  1417. const checkbox = querySelector(container, ".operation #checkbox1");
  1418. addEventListener(checkbox, "change", function(e) {
  1419. log$1("背景是否开启", e.target.checked ? "开启" : "关闭");
  1420. addLocalStore(that.bg_show_key, e.target.checked, Boolean.name);
  1421. addLocalStore(that.bg_is_first_key, false, Boolean.name);
  1422. that.settingBackgroundImage();
  1423. });
  1424. const menu = querySelector(container, ".operation #checkbox2");
  1425. addEventListener(menu, "change", function(e) {
  1426. that.getLeftMenu(e.target.checked);
  1427. addLocalStore(that.menu_is_first_key, false, Boolean.name);
  1428. });
  1429. const full_screen_btn = querySelector(container, ".operation #checkbox3");
  1430. addEventListener(full_screen_btn, "change", function(e) {
  1431. addLocalStore(that.full_screen_key, e.target.checked, Boolean.name);
  1432. addLocalStore(that.full_screen_is_first_key, false, Boolean.name);
  1433. that.isFullScreen(true);
  1434. });
  1435. const show_gift = querySelector(container, ".operation #checkbox4");
  1436. addEventListener(show_gift, "change", function(e) {
  1437. addLocalStore(that.gift_key, e.target.checked, Boolean.name);
  1438. that.isShowGift();
  1439. addLocalStore(that.gift_is_first_key, false, Boolean.name);
  1440. });
  1441. const show_logo_btn = querySelector(container, ".operation #checkbox5");
  1442. addEventListener(show_logo_btn, "change", function(e) {
  1443. e.preventDefault();
  1444. if (!that.logo_btn) {
  1445. warn("获取不到Logo哦!");
  1446. return alert("获取不到logo");
  1447. }
  1448. if (that.logo_btn.style.display === "block") {
  1449. if (confirm("确认隐藏Logo?隐藏之后不再显示哦!如需显示logo,点击直播头部Logo即可显示")) {
  1450. that.logo_btn.style.display = "none";
  1451. addLocalStore(that.logo_show_key, false, Boolean.name);
  1452. }
  1453. } else {
  1454. that.logo_btn.style.display = "block";
  1455. addLocalStore(that.logo_show_key, true, Boolean.name);
  1456. }
  1457. addLocalStore(that.btn_is_first_key, false, Boolean.name);
  1458. });
  1459. const auto_max_pro = querySelector(container, ".operation #checkbox6");
  1460. addEventListener(auto_max_pro, "change", function(e) {
  1461. addLocalStore(that.auto_max_pro_key, e.target.checked, Boolean.name);
  1462. addLocalStore(that.is_first_auto_max_pro_key, false, Boolean.name);
  1463. that.isAutoMaxVideoPro();
  1464. });
  1465. this.themeContr(container);
  1466. this.initAnimation(container);
  1467. log$1("操作按钮添加成功!");
  1468. }
  1469. handlerBiliBiliKeywords(keywords, inputValue) {
  1470. let that = this;
  1471. if (isBVId(keywords)) {
  1472. handlerPromise(getBiliBiliInfoByVideoID(keywords), (result) => {
  1473. var _a, _b, _c, _d;
  1474. if (result && (result == null ? void 0 : result.code) == 0) {
  1475. that.searchUserByRoomId((_b = (_a = result == null ? void 0 : result.data) == null ? void 0 : _a.owner) == null ? void 0 : _b.name, (_d = (_c = result == null ? void 0 : result.data) == null ? void 0 : _c.owner) == null ? void 0 : _d.mid, inputValue);
  1476. } else if (isRisk(result)) {
  1477. alert("服务不可用,该操作已被官方禁止,请待会再尝试吧!");
  1478. } else {
  1479. alert("搜索失败!请复制 https://www.bilibili.com/video/xxxxxx 地址尝试");
  1480. }
  1481. });
  1482. } else if (isUserId(keywords)) {
  1483. handlerPromise(getBiliBiliInfoByUserId(keywords), (result) => {
  1484. var _a, _b;
  1485. if (result && (result == null ? void 0 : result.code) == 0) {
  1486. that.searchUserByRoomId((_a = result == null ? void 0 : result.data) == null ? void 0 : _a.name, (_b = result == null ? void 0 : result.data) == null ? void 0 : _b.mid, inputValue);
  1487. } else if (isRisk(result)) {
  1488. alert("服务不可用,该操作已被官方禁止,请待会再尝试吧!");
  1489. } else {
  1490. alert("搜索失败!请复制 https://space.bilibili.com/xxxxxxxx 地址尝试");
  1491. }
  1492. });
  1493. } else {
  1494. alert("搜索失败!请复制 https://space.bilibili.com/xxxxxxxx 或者 https://www.bilibili.com/video/xxxxxx 地址尝试");
  1495. }
  1496. }
  1497. themeContr(container) {
  1498. const theme_is_auto_box = querySelector(container, ".operation #m-dark-is-auto");
  1499. const theme_btn = querySelector(container, ".operation .room-theme");
  1500. const theme_select = querySelector(container, ".operation #m-dark-select");
  1501. const cancelAutoTheme = (result = false) => {
  1502. theme_is_auto_box.checked = result;
  1503. wls.setItem(THEME_IS_AUTO, result ? THEME_IS_AUTO : `no_${THEME_IS_AUTO}`);
  1504. theme_btn.innerText = isNeedDark() ? "白天" : "黑夜";
  1505. theme_btn.title = isNeedDark() ? "点击切换到白天模式" : "点击切换到黑夜模式";
  1506. };
  1507. addEventListener(theme_btn, "click", function(e) {
  1508. toggleColorMode(e, true);
  1509. if (container.classList.contains("dark")) {
  1510. container.classList.remove("dark");
  1511. localStorage.setItem(DARK_THEME_KEY, theme.light);
  1512. } else if (!container.classList.contains("dark")) {
  1513. localStorage.setItem(DARK_THEME_KEY, theme.dark);
  1514. container.className = `dark ${container.className}`;
  1515. }
  1516. cancelAutoTheme(false);
  1517. });
  1518. addEventListener(theme_is_auto_box, "change", function(e) {
  1519. wls.setItem(DARK_THEME_KEY, theme.light);
  1520. cancelAutoTheme(e.target.checked);
  1521. toggleColorMode(e);
  1522. if (!isNeedDark()) {
  1523. container.classList.contains("dark") && container.classList.remove("dark");
  1524. } else {
  1525. !container.classList.contains("dark") && (container.className = `dark ${container.className}`);
  1526. }
  1527. });
  1528. addEventListener(theme_select, "change", function(e) {
  1529. localStorage.setItem(DARK_THEME_KEY, theme.dark);
  1530. cancelAutoTheme(false);
  1531. updateDarkStyleType(e.target.value);
  1532. if (document.documentElement.classList.contains("dark")) {
  1533. !container.classList.contains("dark") && (container.className = `dark ${container.className}`);
  1534. }
  1535. });
  1536. }
  1537. initAnimation(container) {
  1538. let box1 = querySelector(container, "#m-container-box1");
  1539. let box2 = querySelector(container, "#m-container-box2");
  1540. let change1 = querySelector(container, "#m-change-box1");
  1541. let change2 = querySelector(container, "#m-change-box2");
  1542. let select1 = querySelector(container, ".m-type-item-left .m-select-option-container #m-select-input-address");
  1543. let select2 = querySelector(".m-type-item-left .m-select-input-container #m-select-input-select");
  1544. let select1_box1 = querySelector(container, ".m-type-item-left #m-select-option");
  1545. let select2_box2 = querySelector(container, ".m-type-item-left #m-select-input");
  1546. addEventListener(change1, "click", () => {
  1547. if (box1 && box2) {
  1548. box1.classList.add("m-ani-left-is-close");
  1549. box1.classList.remove("m-ani-left-is-active");
  1550. box2.classList.add("m-ani-right-is-active");
  1551. box2.classList.remove("m-ani-right-is-close");
  1552. }
  1553. });
  1554. addEventListener(change2, "click", () => {
  1555. if (box1 && box2) {
  1556. box1.classList.add("m-ani-left-is-active");
  1557. box1.classList.remove("m-ani-left-is-close");
  1558. box2.classList.add("m-ani-right-is-close");
  1559. box2.classList.remove("m-ani-right-is-active");
  1560. }
  1561. });
  1562. addEventListener(select1, "click", () => {
  1563. if (select1_box1 && select2_box2) {
  1564. select1_box1.classList.remove("m-ani-left-is-active");
  1565. select1_box1.classList.add("m-ani-left-is-close");
  1566. select2_box2.classList.remove("m-ani-right-is-close");
  1567. select2_box2.classList.add("m-ani-right-is-active");
  1568. }
  1569. });
  1570. addEventListener(select2, "click", () => {
  1571. if (select1_box1 && select2_box2) {
  1572. select1_box1.classList.add("m-ani-left-is-active");
  1573. select1_box1.classList.remove("m-ani-left-is-close");
  1574. select2_box2.classList.add("m-ani-right-is-close");
  1575. select2_box2.classList.remove("m-ani-right-is-active");
  1576. }
  1577. });
  1578. log$1("动画初始化完毕!");
  1579. }
  1580. searchUserByRoomId(name, roomId, inputValue) {
  1581. let that = this;
  1582. if (name) {
  1583. that.addUser(roomId, name);
  1584. inputValue.value = "";
  1585. } else {
  1586. if (confirm(`房间号为${roomId}的主播不存在!确定添加?`)) {
  1587. that.addUser(roomId, roomId);
  1588. inputValue.value = "";
  1589. }
  1590. }
  1591. }
  1592. /**
  1593. * 右侧操作按钮
  1594. * @param text 指定按钮文本,默认是小虎牙或者是小鱼丸
  1595. */
  1596. createButton() {
  1597. let that = this;
  1598. let body = querySelector("body");
  1599. if (!body) {
  1600. error("获取不到 body ");
  1601. return;
  1602. }
  1603. if (!!that.logo_btn) {
  1604. warn("button已经添加了!不能重复添加!");
  1605. return;
  1606. }
  1607. let text = this.button_name;
  1608. const btn = createElement("button");
  1609. btn.style.cursor = "pointer";
  1610. btn.style.position = "fixed";
  1611. btn.style.top = "300px";
  1612. btn.style.right = "0px";
  1613. btn.style.zIndex = 999999999999;
  1614. let backgroundColor = "";
  1615. if (that.btn_logo_svg !== "none") {
  1616. btn.innerHTML = that.btn_logo_svg;
  1617. btn.style.backgroundColor = "transparent";
  1618. } else {
  1619. backgroundColor = is_bilibili ? "255,102,102" : "255, 93, 35";
  1620. btn.style.padding = "5px 10px";
  1621. btn.style.backgroundColor = `rgb(${backgroundColor})`;
  1622. btn.style.borderRadius = "20px";
  1623. btn.style.fontSize = "12px";
  1624. btn.style.color = "#fff";
  1625. btn.textContent = text ? text : is_huya ? "小虎牙" : is_douyu ? "小鱼丸" : is_bilibili ? "小B" : "默认";
  1626. }
  1627. btn.style.border = "none";
  1628. btn.style.outline = "none";
  1629. addEventListener(btn, "click", function() {
  1630. that.isShowContainer();
  1631. });
  1632. addEventListener(btn, "mouseenter", function() {
  1633. btn.style.backgroundColor = `rgba(${backgroundColor},0.6)`;
  1634. });
  1635. let flag = false;
  1636. let x, y;
  1637. const mouse_key = that.key + "_mouse_key";
  1638. let { mouse_left, mouse_top } = getLocalStore(mouse_key, Object.name);
  1639. log$1(`获到Logo位置信息 ${mouse_left}px, ${mouse_top}px`);
  1640. if (!isNaN(Number(mouse_left)) && !isNaN(Number(mouse_top))) {
  1641. btn.style.left = mouse_left + "px";
  1642. btn.style.top = mouse_top + "px";
  1643. btn.style.right = "auto";
  1644. }
  1645. addEventListener(btn, "mousedown", (event) => {
  1646. x = event.offsetX;
  1647. y = event.offsetY;
  1648. log$1("mouseDown", x, y);
  1649. flag = true;
  1650. addEventListener(wd, "mousemove", move);
  1651. });
  1652. addEventListener(btn, "mouseup", () => {
  1653. flag = false;
  1654. wd.removeEventListener("mousemove", move);
  1655. wd.onmousemove = null;
  1656. });
  1657. addEventListener(btn, "mouseleave", () => {
  1658. flag = false;
  1659. btn.style.backgroundColor = `rgba(${backgroundColor},1)`;
  1660. wd.removeEventListener("mousemove", move);
  1661. wd.onmousemove = null;
  1662. });
  1663. function move(e) {
  1664. e.preventDefault();
  1665. if (!flag) {
  1666. return;
  1667. }
  1668. let btn_top = Math.min(Math.max(0, e.clientY - y), window.innerHeight - btn.offsetHeight);
  1669. let btn_left = Math.min(Math.max(0, e.clientX - x), window.innerWidth - btn.offsetWidth);
  1670. btn.style.left = `${btn_left}px`;
  1671. btn.style.top = `${btn_top}px`;
  1672. btn.style.right = "auto";
  1673. addLocalStore(mouse_key, { "mouse_left": btn_left, "mouse_top": btn_top }, Object.name);
  1674. }
  1675. btn.style.display = wls.getItem(that.btn_is_first_key) == null || getLocalStore(that.logo_show_key, Boolean.name) ? "block" : "none";
  1676. that.logo_btn = btn;
  1677. appendChild(body, that.logo_btn);
  1678. log$1("button 添加完毕!");
  1679. }
  1680. /**
  1681. * 该房间是否已改被删除
  1682. * @param url 房间链接地址 默认 window.location.href
  1683. */
  1684. removeRoom(url = local_url) {
  1685. try {
  1686. if (!this.isRemove(url)) {
  1687. return false;
  1688. }
  1689. this.roomIsNeedRemove();
  1690. return true;
  1691. } catch (error2) {
  1692. return false;
  1693. }
  1694. }
  1695. /**
  1696. * 房间已被删除之后操作
  1697. * @param url 房间链接地址 默认 window.location.href
  1698. */
  1699. roomAlreadyRemove() {
  1700. let that = this;
  1701. removeDOM(querySelector("body"), true);
  1702. const h2 = createElement("h3");
  1703. let html = querySelector("html");
  1704. let body = querySelector("body") ?? createElement("body");
  1705. body.style.display = "flex";
  1706. body.style.flexDirection = "column";
  1707. body.style.justifyContent = "center";
  1708. body.style.alignItems = "center";
  1709. handlerPromise(this.getRoomIdByUrl(local_url), (roomId) => {
  1710. let name = this.getUser(roomId) ? this.getUser(roomId).name : "";
  1711. const a = createElement("a");
  1712. a.textContent = "点击解锁";
  1713. a.style.display = "block";
  1714. a.style.cursor = "pointer";
  1715. a.style.fontSize = "20px";
  1716. a.onclick = (e) => {
  1717. e.preventDefault();
  1718. that.userDelete(roomId);
  1719. window.location.reload();
  1720. };
  1721. h2.style.fontSize = "36px";
  1722. h2.textContent = `主播【${name}】已被你屏蔽`;
  1723. let title = querySelector("title");
  1724. if (!title) {
  1725. title = createElement("title");
  1726. }
  1727. title.textContent = `主播【${name}】已被你屏蔽`;
  1728. html.appendChild(body);
  1729. body.appendChild(h2);
  1730. body.appendChild(a);
  1731. let logo_show = getLocalStore(that.logo_show_key, Boolean.name);
  1732. if (logo_show) {
  1733. let logo = createElement("a");
  1734. logo.textContent = "显示logo";
  1735. logo.style.display = "block";
  1736. logo.style.cursor = "pointer";
  1737. logo.style.fontSize = "20px";
  1738. logo.onclick = (e) => {
  1739. e.preventDefault();
  1740. logo.style.display = "none";
  1741. addLocalStore(that.logo_show_key, false, Boolean.name);
  1742. that.createButton();
  1743. };
  1744. body.appendChild(logo);
  1745. }
  1746. removeDOM(this.m_container, true);
  1747. this.m_container = null;
  1748. this.create_container();
  1749. });
  1750. }
  1751. /**
  1752. * 判断链接是否应该被删除
  1753. * @param href 房间链接地址 默认 window.location.href
  1754. */
  1755. isRemove(href) {
  1756. try {
  1757. let res = this.getRoomIdByUrl(href);
  1758. if (res instanceof Promise) {
  1759. return false;
  1760. }
  1761. return this.userIsExist(res);
  1762. } catch (error2) {
  1763. return false;
  1764. }
  1765. }
  1766. /**
  1767. * 设置背景图
  1768. * @param url 背景图地址 默认 是默认地址
  1769. * @param container 修改背景容器 默认是body
  1770. */
  1771. settingBackgroundImage(url, container) {
  1772. if (!support.supportBg()) {
  1773. log$1("当前平台不支持背景");
  1774. return;
  1775. }
  1776. container = querySelector("body");
  1777. if (!container || !(container instanceof HTMLElement)) {
  1778. warn("壁纸设置失败 获取不到 container !");
  1779. return;
  1780. }
  1781. let isShowBg = wls.getItem(this.bg_is_first_key) === null ? true : getLocalStore(this.bg_show_key, Boolean.name);
  1782. log$1("是否添加背景=>", isShowBg ? "显示" : "关闭", wls.getItem(this.bg_is_first_key) === null ? "null" : wls.getItem(this.bg_is_first_key));
  1783. if (isShowBg) {
  1784. url = !!url ? url : wls.getItem(this.bg_key) && isShowBg ? wls.getItem(this.bg_key) : this.default_background_image;
  1785. container.style.backgroundSize = "cover";
  1786. container.style.backgroundRepeat = "no-repeat ";
  1787. container.style.backgroundAttachment = "fixed";
  1788. container.style.backgroundImage = `url(${url})`;
  1789. log$1("背景图添加完毕!");
  1790. } else {
  1791. container.style.backgroundImage = "none";
  1792. log$1("背景图已关闭!");
  1793. }
  1794. }
  1795. /**
  1796. * 通过房间名称或者id判断房间是否已经保存到本地
  1797. * @param keywords 房间名或者id
  1798. * @param list 本地缓存数据,默认是本地缓存用户数据
  1799. */
  1800. userIsExist(keywords, list = this.users) {
  1801. return !!this.getUser(keywords, list);
  1802. }
  1803. /**
  1804. * 通过房间名称或者id判断房间是否已经保存到本地
  1805. * @param keywords 房间名或者id
  1806. * @param list 本地缓存数据,默认是本地缓存用户数据
  1807. */
  1808. getUser(keywords, list = this.users) {
  1809. if (!keywords) {
  1810. return null;
  1811. }
  1812. for (let i = 0; i < list.length; i++) {
  1813. if (list[i].name && list[i].name === keywords || list[i].roomId && list[i].roomId === keywords) {
  1814. return list[i];
  1815. }
  1816. }
  1817. return null;
  1818. }
  1819. /**
  1820. * 通过房间id或者房间名删除本地缓存的数据
  1821. * @param keywords 房间名或者id
  1822. */
  1823. userDelete(keywords) {
  1824. let that = this;
  1825. if (!isArray(that.users)) {
  1826. return;
  1827. }
  1828. that.users.forEach((item, index) => {
  1829. if (keywords === item.name || keywords === item.roomId) {
  1830. that.users.splice(index, 1);
  1831. }
  1832. });
  1833. addLocalStore(this.key, this.users);
  1834. }
  1835. /**
  1836. * 添加并保存直播间
  1837. * @param id, 房间id
  1838. * @param name 房间名
  1839. */
  1840. addUser(id, name) {
  1841. if (this.userIsExist(id) || this.userIsExist(name)) {
  1842. alert("该房间已存在!");
  1843. return;
  1844. }
  1845. if (!isArray(this.users)) {
  1846. this.users = [];
  1847. }
  1848. const newUser = new HostUser(id, name);
  1849. this.users.unshift(newUser);
  1850. addLocalStore(this.key, this.users);
  1851. this.resetTbody(this.users);
  1852. handlerPromise(this.getRoomIdByUrl(local_url), (res) => {
  1853. if (id === res) {
  1854. this.roomIsNeedRemove(local_url);
  1855. }
  1856. });
  1857. }
  1858. /**
  1859. * @param selector video
  1860. */
  1861. roomIsNeedRemove(selector = querySelector("video")) {
  1862. this.roomAlreadyRemove();
  1863. removeVideo(selector);
  1864. this.settingBackgroundImage();
  1865. }
  1866. /*
  1867. * 操作左侧导航栏,需要传入选择器,和修改值 建议放到公共方法下执行!
  1868. * @param {selector} = [选择器]
  1869. * @param {value} = [要修改的值]
  1870. */
  1871. getLeftMenu(value = false) {
  1872. let menu = querySelector(this.menu);
  1873. if (!menu) {
  1874. return alert("获取不到导航菜单,操作失败!");
  1875. }
  1876. handlerDisplay(menu, value);
  1877. addLocalStore(this.menu_show_key, value, Boolean.name, false);
  1878. }
  1879. /*
  1880. * 操作左侧导航栏,需要传入选择器,和修改值 建议放到公共方法下执行!
  1881. */
  1882. isShowLeftMenu() {
  1883. let menu = this.menu ? querySelector(this.menu) : "";
  1884. const isShow = wls.getItem(this.menu_is_first_key) != null && getLocalStore(this.menu_show_key, Boolean.name);
  1885. handlerDisplay(menu, isShow);
  1886. }
  1887. /**
  1888. * 检查是否能找到全屏按钮
  1889. * @returns
  1890. */
  1891. checkFullScreenButton() {
  1892. if (this.full_screen_is_find) {
  1893. this.full_screen_button = findButton(this.video_player_container, this.full_screen_class_or_id, this.full_screen_text, this.full_button_tag_name);
  1894. }
  1895. }
  1896. /**
  1897. * 自动全屏
  1898. * @param isClickFull 是否是通过点击方式触发
  1899. */
  1900. isFullScreen(isClickFull = false) {
  1901. let that = this;
  1902. let is_should_full_screen = getLocalStore(that.full_screen_key, Boolean.name);
  1903. if (!is_should_full_screen) {
  1904. return;
  1905. }
  1906. let button = null;
  1907. if (isClickFull) {
  1908. button = querySelector(that.full_screen_button);
  1909. if (button && button instanceof HTMLElement) {
  1910. button.click();
  1911. that.isShowContainer();
  1912. } else {
  1913. that.checkFullScreenButton(button);
  1914. }
  1915. } else {
  1916. loopDo((timer) => {
  1917. button = querySelector(that.full_screen_button);
  1918. log$1("fullScreen button", that.full_screen_button, !!button ? "找到button了" : "未找到全屏button");
  1919. if (button && button instanceof HTMLElement) {
  1920. let isClick = button == null ? void 0 : button.isClick;
  1921. if (isClick) {
  1922. clearInterval(timer);
  1923. return;
  1924. }
  1925. if (!isClick) {
  1926. log$1("全屏按钮自动触发了!");
  1927. button.click();
  1928. button.isClick = true;
  1929. }
  1930. } else {
  1931. that.checkFullScreenButton(button);
  1932. }
  1933. }, 30, 3e3);
  1934. }
  1935. }
  1936. /**
  1937. * 是否显示礼物
  1938. */
  1939. isShowGift() {
  1940. let gift = this.gift_tool ? querySelector(this.gift_tool) : "";
  1941. handlerDisplay(gift, wls.getItem(this.gift_is_first_key) != null && getLocalStore(this.gift_key, Boolean.name));
  1942. }
  1943. /**
  1944. * 是否显示容器
  1945. */
  1946. isShowContainer() {
  1947. if (this.m_container && this.m_container instanceof HTMLElement) {
  1948. if (this.is_new) {
  1949. if (this.m_container.classList.contains("m-container-is-active")) {
  1950. this.m_container.classList.remove("m-container-is-active");
  1951. } else {
  1952. this.m_container.classList.add("m-container-is-active");
  1953. }
  1954. } else {
  1955. this.m_container.style.display = this.m_container.style.display === "block" ? "none" : "block";
  1956. }
  1957. log$1("container class=>", this.m_container.classList);
  1958. }
  1959. }
  1960. /**
  1961. * 点击 直播平台 Logo
  1962. */
  1963. clickLogoShowContainer() {
  1964. let that = this;
  1965. if (is_bilibili) {
  1966. return;
  1967. }
  1968. if (this.header_logo === "none" || !this.header_logo) {
  1969. warn("Logo选择器不能为 none !");
  1970. return;
  1971. }
  1972. findMark(that.header_logo, (a) => {
  1973. if (!(a instanceof HTMLAnchorElement)) {
  1974. return;
  1975. }
  1976. a.href = "javascript:;void(0)";
  1977. a.title = "点击Logo,显示插件配置";
  1978. addEventListener(a, "click", (e) => {
  1979. e.preventDefault();
  1980. log$1("click header logo !");
  1981. that.isShowContainer();
  1982. });
  1983. loopDo(() => {
  1984. a = querySelector(that.header_logo);
  1985. a.href = "javascript:;void(0)";
  1986. }, 5, 1e3);
  1987. log$1("logo点击按钮装置完毕!");
  1988. }, 5, 500);
  1989. }
  1990. createSpan(container, place, id, name = id, message = "确认屏蔽up主 ", remove = true) {
  1991. if (!container || !place || !id || !name) {
  1992. error("createSpan 参数不全!");
  1993. return;
  1994. }
  1995. const span = createElement("span");
  1996. span.classList = "m-span-text";
  1997. appendChild(place, span);
  1998. addEventListener(span, "click", () => {
  1999. if (remove) {
  2000. removeDOM(container, true);
  2001. }
  2002. this.addUser(id, name);
  2003. this.removeRoom(local_url);
  2004. });
  2005. }
  2006. addEven() {
  2007. let that = this;
  2008. addFullScreenEvent(() => {
  2009. that.isShowGift();
  2010. });
  2011. document.addEventListener("keydown", function(event) {
  2012. if (event.ctrlKey && event.altKey && event.key === "j") {
  2013. that.isShowContainer();
  2014. }
  2015. });
  2016. }
  2017. }
  2018. class TriggerLive extends LivePlugin {
  2019. constructor() {
  2020. super();
  2021. this.video_player_container = ".room-player-wrap";
  2022. this.full_screen_button = ".room-player-wrap .player-fullscreen-btn";
  2023. this.full_button_tag_name = "span";
  2024. this.full_screen_is_find = false;
  2025. this.default_background_image = "https://livewebbs2.msstatic.com/huya_1682329462_content.jpg";
  2026. this.baseUrl = "https://www.huya.com/";
  2027. this.menu = ".mod-sidebar";
  2028. this.header_logo = "#duya-header #duya-header-logo a";
  2029. this.gift_tool = ".room-core #player-gift-wrap";
  2030. this.auto_max_pro_class_or_id_list = ".player-videoline-videotype .player-videotype-list li";
  2031. this.init();
  2032. }
  2033. // 首页操作
  2034. index() {
  2035. if (local_url === this.baseUrl || /https:\/\/.*\.huya\.*\/\?/.test(local_url)) {
  2036. removeVideo(".mod-index-main video");
  2037. const banner_close = querySelector(".mod-index-wrap #banner i");
  2038. if (banner_close) {
  2039. banner_close.click();
  2040. }
  2041. loopDo((timer) => {
  2042. let pauseBtn = querySelector(".player-pause-btn");
  2043. if (pauseBtn) {
  2044. pauseBtn.click();
  2045. clearInterval(timer);
  2046. }
  2047. }, 10, 300);
  2048. }
  2049. }
  2050. // 分类页操作
  2051. category() {
  2052. let that = this;
  2053. if (new RegExp(/^https:\/\/.*\.huya\.((com)|(cn))\/g(\/.*)$/).test(local_url)) {
  2054. timeoutSelectorAllOne(".live-list-nav dd", (node) => {
  2055. addEventListener(node, "click", () => {
  2056. setTimeout(() => {
  2057. that.removeRoomByClickRoomName();
  2058. }, 2e3);
  2059. });
  2060. });
  2061. }
  2062. }
  2063. // 公共部分操作
  2064. common() {
  2065. this.removeRoomByClickRoomName();
  2066. this.autoHideMenu();
  2067. this.updateHeaderIcon();
  2068. }
  2069. // 头部logo显示不明显问题
  2070. updateHeaderIcon() {
  2071. loopDo((timer) => {
  2072. const imgs = querySelectorAll("#duya-header-logo img");
  2073. if (!isArray(imgs)) {
  2074. return;
  2075. }
  2076. for (let img of imgs) {
  2077. img.src = "https://a.msstatic.com/huya/main3/static/img/logo.png";
  2078. }
  2079. clearInterval(timer);
  2080. });
  2081. loopDo((timer) => {
  2082. const icon = querySelector("[class^=NavItem] [class^=NavItemHd] i[class*=fav]");
  2083. if (!icon) {
  2084. return;
  2085. }
  2086. icon.style.backgroundImage = "url(https://a.msstatic.com/huya/hd/h5/header/components/HeaderDynamic/NavItem/img/fav-0.15b3e0b4a39185db705b7c523cd3f17c.png)";
  2087. clearInterval(timer);
  2088. });
  2089. loopDo((timer) => {
  2090. const icon = querySelector("[class^=NavItem] [class^=NavItemHd] i[class*=history]");
  2091. if (!icon) {
  2092. return;
  2093. }
  2094. icon.style.backgroundImage = "url(https://a.msstatic.com/huya/hd/h5/header/components/HeaderDynamic/NavItem/img/history-0.2b32fba04f79057de5abcb2b35cd8eec.png)";
  2095. clearInterval(timer);
  2096. });
  2097. }
  2098. // 详情操作
  2099. detail() {
  2100. let that = this;
  2101. if (new RegExp(/^https:\/\/www\.huya\.com(\/\w+)$/).test(local_url)) {
  2102. findMark(".host-name", (hostName) => {
  2103. hostName.title = `点击屏蔽主播【${hostName == null ? void 0 : hostName.textContent}】`;
  2104. addEventListener(hostName, "click", () => {
  2105. if (confirm(`确认屏蔽主播【${hostName == null ? void 0 : hostName.textContent}】?`)) {
  2106. that.addUser(that.getRoomIdByUrl(local_url), hostName.textContent);
  2107. }
  2108. });
  2109. });
  2110. let ads = [
  2111. ".main-wrap .room-mod-ggTop",
  2112. "#chatRoom .room-gg-chat",
  2113. "#huya-ab"
  2114. ];
  2115. intervalRemoveElement(ads, 500, 20);
  2116. this.isFullScreen();
  2117. this.isAutoMaxVideoPro();
  2118. }
  2119. }
  2120. // 通过地址获取房间号
  2121. getRoomIdByUrl(url = local_url) {
  2122. try {
  2123. return url && url.match(/https:\/\/www\.huya\.com\/(.*)/) ? url.match(/https:\/\/www\.huya\.com\/(.*)/)[1] : "";
  2124. } catch (error2) {
  2125. warn("url 匹配失败 请检查" + url);
  2126. return "";
  2127. }
  2128. }
  2129. // 通过房间号查找名称
  2130. getNameByRoomId(roomId) {
  2131. let that = this;
  2132. let hostName = querySelector(".host-name");
  2133. if (!hostName) {
  2134. warn(`获取不到hostname`);
  2135. return "";
  2136. }
  2137. const rooms = querySelectorAll(".game-live-item");
  2138. if (!isArray(rooms)) {
  2139. return "";
  2140. }
  2141. for (let room of rooms) {
  2142. const a = querySelector(room, "a");
  2143. if (a && a.href) {
  2144. const id = that.getRoomIdByUrl(a.href);
  2145. const user = querySelector(room, ".txt i");
  2146. if (id === roomId) {
  2147. hostName = user;
  2148. }
  2149. }
  2150. }
  2151. return (hostName == null ? void 0 : hostName.textContent) || "";
  2152. }
  2153. // 通过点击直播间名称删除直播间
  2154. removeRoomByClickRoomName() {
  2155. const that = this;
  2156. timeoutSelectorAllOne(".game-live-item", (li) => {
  2157. setTimeoutMark(li, () => {
  2158. const a = querySelector(li, "a");
  2159. const url = a.href;
  2160. const user = querySelector(li, ".txt i");
  2161. const name = user.textContent || "";
  2162. addEventListener(user, "click", () => {
  2163. if (confirm(`确认禁用 ${name}?`)) {
  2164. that.addUser(that.getRoomIdByUrl(url), name);
  2165. removeDOM(li);
  2166. }
  2167. });
  2168. if (that.isRemove(url)) {
  2169. removeDOM(li);
  2170. }
  2171. }, 0);
  2172. }, 500);
  2173. }
  2174. autoHideMenu() {
  2175. const isShow = wls.getItem(this.menu_is_first_key) != null && getLocalStore(this.menu_show_key, Boolean.name);
  2176. if (isShow) {
  2177. return;
  2178. }
  2179. loopDo((timer) => {
  2180. const b = querySelector("body");
  2181. const clickM = querySelector("#sidebar-hide-btn");
  2182. if (b instanceof HTMLElement && clickM instanceof HTMLElement) {
  2183. if (!b.classList.contains("sidebar-min")) {
  2184. clickM.click();
  2185. log("左侧侧边栏自动收起!");
  2186. }
  2187. clearInterval(timer);
  2188. }
  2189. }, 100, 100);
  2190. }
  2191. }
  2192. const getInfo = async (roomId = local_url) => {
  2193. if (douyu_address_pattern.test(roomId)) {
  2194. roomId = FishLive.prototype.getRoomIdByUrl(roomId);
  2195. }
  2196. return await fetch(`https://www.douyu.com/betard/${roomId}`, {
  2197. mode: "cors",
  2198. cache: "default",
  2199. method: "GET"
  2200. }).then((res) => res.json());
  2201. };
  2202. class FishLive extends LivePlugin {
  2203. constructor() {
  2204. super();
  2205. this.video_player_container = "#room-html5-player";
  2206. this.baseUrl = "https://www.douyu.com/";
  2207. this.default_background_image = "https://sta-op.douyucdn.cn/dylamr/2022/11/07/1e10382d9a430b4a04245e5427e892c8.jpg";
  2208. this.menu = "#js-aside";
  2209. this.full_screen_button = "[class^=controlbar] [class^=fs]";
  2210. this.gift_tool = ".layout-Player-main #js-player-toolbar";
  2211. this.header_logo = "#js-header .Header-left .Header-logo";
  2212. this.auto_max_pro_class_or_id_list = "#js-player-video .room-Player-Box [class^=rate] ul>li";
  2213. this.init();
  2214. }
  2215. // 公共部分页面操作
  2216. common() {
  2217. this.autoHideMenu();
  2218. }
  2219. //首页操作
  2220. index() {
  2221. let that = this;
  2222. if (window.location.href === that.baseUrl || new RegExp(/https:\/\/www\.douyu\.com\/\?.*/).test(local_url)) {
  2223. window.scroll(0, 0);
  2224. removeVideo(".layout-Slide-player video");
  2225. const vbox = querySelector("#room-html5-player");
  2226. if (vbox) {
  2227. const divs = querySelectorAll(vbox, "div");
  2228. if (isArray(divs)) {
  2229. for (let div of divs) {
  2230. if ((div == null ? void 0 : div.title) === "暂停") {
  2231. div.click();
  2232. }
  2233. }
  2234. }
  2235. }
  2236. that.removeRoomByClickRoomName();
  2237. window.onscroll = throttle(500, () => {
  2238. that.removeRoomByClickRoomName();
  2239. });
  2240. let topBtn = querySelector(".layout-Main .ToTopBtn");
  2241. if (topBtn) {
  2242. topBtn.style.display = "block";
  2243. }
  2244. }
  2245. }
  2246. // 分类页面操作
  2247. category() {
  2248. let that = this;
  2249. if (new RegExp(/https:\/\/www.douyu.com(\/((directory.*)|(g_.*)))$/).test(local_url)) {
  2250. that.removeRoomByClickRoomName();
  2251. querySelectorAll(".layout-Module-filter .layout-Module-label");
  2252. timeoutSelectorAllOne(".layout-Module-filter .layout-Module-label", (label) => {
  2253. addEventListener(label, "click", (e) => {
  2254. e.preventDefault();
  2255. let to_link = label && label.href ? label.href : null;
  2256. if (to_link) {
  2257. window.location.href = to_link;
  2258. } else {
  2259. window.location.href = "https://www.douyu.com/g_" + local_url.match(RegExp(
  2260. /subCate\/.*/g
  2261. ))[0].replace("subCate", "").match(new RegExp(
  2262. /\w+/g
  2263. ))[0];
  2264. }
  2265. });
  2266. });
  2267. }
  2268. }
  2269. // 详情页操作
  2270. detail() {
  2271. let that = this;
  2272. if (!new RegExp(/.*douyu.*(\/((.*rid=\d+)|(\d+)).*)$/).test(local_url)) {
  2273. return;
  2274. }
  2275. findMark(".Title-roomInfo h2.Title-anchorNameH2", (hostName) => {
  2276. hostName.title = `点击屏蔽主播【${hostName == null ? void 0 : hostName.textContent}】`;
  2277. addEventListener(hostName, "click", () => {
  2278. that.addUser(that.getRoomIdByUrl(local_url), hostName.textContent);
  2279. });
  2280. });
  2281. if (new RegExp(/.*douyu.*\/topic(\/(.*rid=\d+).*)/).test(local_url)) {
  2282. let divs = querySelectorAll("#root>div");
  2283. let backgroundNones = [".wm-general-wrapper.bc-wrapper.bc-wrapper-player", ".wm-general-bgblur"];
  2284. if (isArray(divs)) {
  2285. for (let element of divs) {
  2286. if (!!querySelector(element, ".layout-Main")) {
  2287. backgroundNone(element, backgroundNones);
  2288. } else {
  2289. removeDOM(element, true);
  2290. }
  2291. }
  2292. }
  2293. }
  2294. if (new RegExp(/.*douyu.*(\/(\d+)).*/).test(local_url)) {
  2295. findMark(".roomSmallPlayerFloatLayout-closeBtn", (closeBtn) => {
  2296. closeBtn.click();
  2297. });
  2298. removeDOM(".layout-Main .ToTopBtn", true);
  2299. }
  2300. this.isFullScreen();
  2301. this.isAutoMaxVideoPro();
  2302. }
  2303. // 通过点击直播间名称删除直播间
  2304. removeRoomByClickRoomName() {
  2305. let that = this;
  2306. if (this.baseUrl === local_url || new RegExp(/https:\/\/www\.douyu\.com\/\?.*/).test(local_url)) {
  2307. timeoutSelectorAllOne(".layout-List-item", (li) => {
  2308. setTimeoutMark(li, () => {
  2309. const a = querySelector(li, ".DyCover");
  2310. const url = (a == null ? void 0 : a.href) || "";
  2311. const user = querySelector(li, ".DyCover-user");
  2312. const name = (user == null ? void 0 : user.textContent) || "";
  2313. a.setAttribute("href", "javascript:;void(0)");
  2314. addEventListener(a, "click", (e) => {
  2315. e.preventDefault();
  2316. });
  2317. addEventListener(user, "click", (e) => {
  2318. e.preventDefault();
  2319. that.addUser(that.getRoomIdByUrl(url), name);
  2320. removeDOM(li);
  2321. });
  2322. if (that.isRemove(url) || that.userIsExist(name)) {
  2323. removeDOM(li);
  2324. }
  2325. }, 100);
  2326. }, 100);
  2327. }
  2328. if (new RegExp(/https:\/\/www.douyu.com(\/((directory)|(g_)).*)/).test(local_url)) {
  2329. timeoutSelectorAllOne(".layout-Cover-item", (li) => {
  2330. setTimeoutMark(li, () => {
  2331. const link = querySelector(li, "a.DyListCover-wrap");
  2332. if (link) {
  2333. const url = (link == null ? void 0 : link.href) || "";
  2334. link.setAttribute("href", "javascript:;void(0)");
  2335. addEventListener(link, "click", (e) => {
  2336. e.preventDefault();
  2337. });
  2338. const user = querySelector(link, "div.DyListCover-userName");
  2339. const name = user.textContent || "";
  2340. if (that.isRemove(url) || that.userIsExist(name)) {
  2341. removeDOM(li, true);
  2342. } else {
  2343. addEventListener(user, "click", (e) => {
  2344. e.preventDefault();
  2345. const id = that.getRoomIdByUrl(url);
  2346. that.addUser(id, name);
  2347. removeDOM(li);
  2348. });
  2349. addEventListener(li, "mouseenter", (e) => {
  2350. const a = querySelector(e.target, "a.DyListCover-wrap.is-hover");
  2351. const url2 = a == null ? void 0 : a.href;
  2352. a.setAttribute("href", "javascript:;void(0)");
  2353. addEventListener(a, "click", (e2) => {
  2354. e2.preventDefault();
  2355. });
  2356. const user2 = querySelector(a, ".DyListCover-userName");
  2357. const name2 = user2.textContent || "";
  2358. addEventListener(user2, "click", (e2) => {
  2359. e2.preventDefault();
  2360. const id = that.getRoomIdByUrl(url2);
  2361. that.addUser(id, name2);
  2362. removeDOM(li);
  2363. });
  2364. });
  2365. }
  2366. }
  2367. }, 100);
  2368. }, 0);
  2369. }
  2370. }
  2371. // 通过房间号获取直播间name
  2372. async getNameByRoomId(keywords) {
  2373. var _a;
  2374. let that = this;
  2375. let searchResult = await getInfo(keywords);
  2376. if ((searchResult == null ? void 0 : searchResult.room) && ((_a = searchResult == null ? void 0 : searchResult.room) == null ? void 0 : _a.nickname)) {
  2377. log$1(`搜索到主播 ${searchResult.room.nickname}`);
  2378. return searchResult.room.nickname;
  2379. }
  2380. let hostName = querySelector(".Title-blockInline .Title-anchorName h2");
  2381. let rooms = null;
  2382. if (!hostName) {
  2383. rooms = querySelectorAll(".layout-List-item");
  2384. if (isArray(rooms)) {
  2385. for (let room of rooms) {
  2386. const id = that.getRoomIdByUrl(querySelector(room, "a").href);
  2387. const user = querySelector(room, ".DyCover-user");
  2388. if (id === keywords) {
  2389. hostName = user;
  2390. }
  2391. }
  2392. }
  2393. if (!hostName) {
  2394. rooms = querySelectorAll(".layout-Cover-item");
  2395. if (isArray(rooms)) {
  2396. for (let room of rooms) {
  2397. const id = that.getRoomIdByUrl(querySelector(room, "a").href);
  2398. const user = querySelector(room, ".DyListCover-userName");
  2399. if (id === keywords) {
  2400. hostName = user;
  2401. }
  2402. }
  2403. }
  2404. }
  2405. }
  2406. return (hostName == null ? void 0 : hostName.textContent) || "";
  2407. }
  2408. // 通过房间地址获取房间号
  2409. getRoomIdByUrl(url = local_url) {
  2410. try {
  2411. if (new RegExp(/.*rid=(\d+).*/).test(url)) {
  2412. return url.match(new RegExp(/rid=(\d+)/))[1];
  2413. }
  2414. if (/https:\/\/www\.douyu\.com\/(\d+).*/.test(url)) {
  2415. return url.match(new RegExp(/https:\/\/www\.douyu\.com\/(\d+)/))[1];
  2416. }
  2417. return null;
  2418. } catch (e) {
  2419. return null;
  2420. }
  2421. }
  2422. isFullScreen() {
  2423. }
  2424. autoHideMenu() {
  2425. const isShow = wls.getItem(this.menu_is_first_key) != null && getLocalStore(this.menu_show_key, Boolean.name);
  2426. if (isShow) {
  2427. return;
  2428. }
  2429. loopDo((timer) => {
  2430. const clickM = querySelector(".Aside-toggle");
  2431. const leftSider = querySelector("#js-aside");
  2432. if (leftSider instanceof HTMLElement && clickM instanceof HTMLElement) {
  2433. const leftSiderWidth = Number(window.getComputedStyle(leftSider).width.split("px")[0]);
  2434. if (leftSiderWidth > 80) {
  2435. clickM.click();
  2436. log$1("左侧侧边栏自动收起!");
  2437. }
  2438. clearInterval(timer);
  2439. }
  2440. }, 100, 100);
  2441. }
  2442. }
  2443. class BiliBili extends LivePlugin {
  2444. constructor() {
  2445. super();
  2446. this.header_logo = ".bili-header .bili-header__bar ul>li>a";
  2447. this.video_player_container = "#bilibili-player";
  2448. this.fullScreenText = "进入全屏 (f)";
  2449. this.full_screen_is_find = false;
  2450. this.full_screen_button = ".bpx-player-ctrl-btn.bpx-player-ctrl-full";
  2451. this.auto_max_pro_class_or_id_list = ".bpx-player-ctrl-btn.bpx-player-ctrl-quality .bpx-player-ctrl-quality-menu>.bpx-player-ctrl-quality-menu-item";
  2452. this.init();
  2453. }
  2454. /**
  2455. * 重写 button
  2456. * @returns
  2457. */
  2458. createButton() {
  2459. let that = this;
  2460. loopDo(() => {
  2461. if (!!that.logo_btn) {
  2462. return;
  2463. }
  2464. let buttonBoxs = querySelector(".palette-button-wrap .storage-box .storable-items");
  2465. let btn = createElement("button");
  2466. btn.className = "primary-btn";
  2467. btn.style.fontSize = "16px";
  2468. if (!buttonBoxs) {
  2469. buttonBoxs = document.querySelector("body");
  2470. btn = createElement("div");
  2471. btn.style.display = "none";
  2472. btn.className = "m-bilibili-btn";
  2473. btn.style.cursor = "pointer";
  2474. btn.style.position = "fixed";
  2475. btn.style.bottom = "220px";
  2476. btn.style.right = "6px";
  2477. btn.style.display = "block";
  2478. btn.style.zIndex = 9999999;
  2479. window.onscroll = () => {
  2480. if (window.scrollY >= 530) {
  2481. btn.style.display = "block";
  2482. } else {
  2483. btn.style.display = "none";
  2484. }
  2485. };
  2486. }
  2487. btn.title = "点击显示";
  2488. btn.innerHTML = iconLogo();
  2489. that.logo_btn = btn;
  2490. addEventListener(btn, "click", function() {
  2491. that.isShowContainer();
  2492. });
  2493. insertChild(buttonBoxs, that.logo_btn);
  2494. }, 20, 500);
  2495. }
  2496. async getRoomIdByUrl(href) {
  2497. var _a, _b;
  2498. try {
  2499. if (isBVId(href)) {
  2500. let result = await getBiliBiliInfoByVideoID(local_url);
  2501. if (result.code === 0 && ((_a = result == null ? void 0 : result.owner) == null ? void 0 : _a.mid)) {
  2502. return (_b = result == null ? void 0 : result.owner) == null ? void 0 : _b.mid;
  2503. }
  2504. }
  2505. if (isUserId(href)) {
  2506. return href.match(/https:\/\/space\.bilibili\.com\/(\d+).*/)[1];
  2507. }
  2508. } catch (error2) {
  2509. }
  2510. return this.getBilibiliRoomId(href);
  2511. }
  2512. getBilibiliRoomId(href) {
  2513. return !!href && href.replace(/https:\/\/.*\.bilibili.com\/(.*?)/, "$1").replace(/\//ig, "");
  2514. }
  2515. // 添加删除按钮
  2516. addDeleteRoomButton(time = 1e3) {
  2517. loopDo(() => {
  2518. timeoutSelectorAll(".feed-card", (divs) => {
  2519. var _a, _b;
  2520. for (let feed of divs) {
  2521. const isMark = !!querySelector(feed, ".m-span-text");
  2522. if (!isMark) {
  2523. let item = querySelector(feed, "div.bili-video-card__info--bottom");
  2524. const name = (_a = querySelector(item, "span.bili-video-card__info--author")) == null ? void 0 : _a.textContent;
  2525. const href = (_b = querySelector(item, ".bili-video-card__info--owner")) == null ? void 0 : _b.href;
  2526. const id = this.getBilibiliRoomId(href);
  2527. if (this.userIsExist(id) || this.userIsExist(name)) {
  2528. removeDOM(feed, true);
  2529. } else if (id && name) {
  2530. this.createSpan(feed, item, id, name);
  2531. }
  2532. }
  2533. }
  2534. }, time);
  2535. }, 10, 500);
  2536. loopDo(() => {
  2537. timeoutSelectorAll(".bili-video-card", (divs) => {
  2538. var _a, _b, _c, _d;
  2539. for (let feed of divs) {
  2540. const isMark = !!querySelector(feed, ".m-span-text");
  2541. if (!isMark) {
  2542. let item = querySelector(feed, "div.bili-video-card__info--bottom");
  2543. let isLive = false;
  2544. if (!item) {
  2545. isLive = true;
  2546. item = querySelector(feed, ".bili-live-card__info--text");
  2547. }
  2548. const name = !isLive ? (_a = querySelector(item, "span.bili-video-card__info--author")) == null ? void 0 : _a.textContent : (_b = querySelector(item, "a.bili-live-card__info--uname span")) == null ? void 0 : _b.textContent;
  2549. const href = !isLive ? (_c = querySelector(item, ".bili-video-card__info--owner")) == null ? void 0 : _c.href : (_d = querySelector(item, "a.bili-live-card__info--uname")) == null ? void 0 : _d.href;
  2550. const id = this.getBilibiliRoomId(href);
  2551. if (this.userIsExist(name) || this.userIsExist(id)) {
  2552. removeDOM(feed, true);
  2553. } else if (id && name) {
  2554. this.createSpan(feed, item, id, name);
  2555. }
  2556. }
  2557. }
  2558. }, 0);
  2559. }, 1e5, 500);
  2560. }
  2561. clickLogoShowContainer() {
  2562. let that = this;
  2563. super.clickLogoShowContainer();
  2564. window.onscroll = () => {
  2565. if (parseInt(window.scrollY) > 90) {
  2566. operationLogo();
  2567. } else {
  2568. super.clickLogoShowContainer();
  2569. }
  2570. };
  2571. const operationLogo = () => {
  2572. if (!(wls.getItem(that.btn_is_first_key) == null || getLocalStore(that.logo_show_key, Boolean.name))) {
  2573. return;
  2574. }
  2575. findMark(that == null ? void 0 : that.header_logo, (logo) => {
  2576. logo.setAttribute("href", "javascript:;void(0)");
  2577. logo.setAttribute("title", "点击Logo,显示插件配置");
  2578. addEventListener(logo, "click", (e) => {
  2579. e.preventDefault();
  2580. that.isShowContainer();
  2581. });
  2582. });
  2583. };
  2584. }
  2585. common() {
  2586. let that = this;
  2587. that.addDeleteRoomButton(1e3);
  2588. setTimeout(() => {
  2589. const refreshButton = querySelector(".feed-roll-btn .primary-btn");
  2590. addEventListener(refreshButton, "click", () => {
  2591. that.addDeleteRoomButton(200);
  2592. });
  2593. }, 3e3);
  2594. }
  2595. index() {
  2596. }
  2597. detailLeftVideoList(time = 1e3, sel = ".video-page-card-small") {
  2598. timeoutSelectorAll(sel, (videoList) => {
  2599. var _a;
  2600. for (let videoDom of videoList) {
  2601. const isMark = !!videoDom.getAttribute("mark");
  2602. videoDom.setAttribute("mark", true);
  2603. const playinfo = querySelector(videoDom, ".playinfo");
  2604. const link = querySelector(videoDom, ".upname a");
  2605. const id = !!link && (link == null ? void 0 : link.href) && this.getBilibiliRoomId(link.href);
  2606. const name = (_a = querySelector(videoDom, ".upname .name")) == null ? void 0 : _a.textContent;
  2607. if (this.userIsExist(id) || this.userIsExist(name)) {
  2608. removeDOM(videoDom, true);
  2609. } else if (!isMark && id && name) {
  2610. const span = createElement("span");
  2611. span.classList = "m-span-text";
  2612. addEventListener(span, "click", () => {
  2613. removeDOM(videoDom, true);
  2614. this.addUser(id, name);
  2615. this.detailLeftVideoList(0);
  2616. });
  2617. appendChild(playinfo, span);
  2618. }
  2619. }
  2620. }, time);
  2621. }
  2622. async detail() {
  2623. var _a, _b;
  2624. if (new RegExp(/https:\/\/www\.bilibili\.com\/video\/(.*)/).test(local_url)) {
  2625. loopDo(() => {
  2626. this.detailLeftVideoList(100, ".video-page-operator-card-small");
  2627. this.detailLeftVideoList();
  2628. }, 1e3, 1e7);
  2629. const nextBtn = querySelector(".rec-footer");
  2630. addEventListener(nextBtn, "click", () => {
  2631. loopDo(() => {
  2632. this.detailLeftVideoList(0);
  2633. }, 1e3, 1e7);
  2634. });
  2635. }
  2636. if (/https:\/\/www.bilibili.com\/video\/.*/.test(local_url)) {
  2637. this.isFullScreen();
  2638. this.isAutoMaxVideoPro();
  2639. let result = await getBiliBiliInfoByVideoID(local_url);
  2640. if (result && (result == null ? void 0 : result.code) === 0 && this.userIsExist((_a = result == null ? void 0 : result.owner) == null ? void 0 : _a.mid) || this.userIsExist((_b = result == null ? void 0 : result.owner) == null ? void 0 : _b.name)) {
  2641. this.roomIsNeedRemove();
  2642. }
  2643. }
  2644. }
  2645. async getNameByRoomId(keywords) {
  2646. var _a, _b, _c;
  2647. if (isBVId(keywords)) {
  2648. let result = await getBiliBiliInfoByVideoID(keywords);
  2649. if (result && (result == null ? void 0 : result.code) === 0) {
  2650. return (_b = (_a = result == null ? void 0 : result.data) == null ? void 0 : _a.owner) == null ? void 0 : _b.name;
  2651. }
  2652. } else if (isUserId(keywords)) {
  2653. let result = await getBiliBiliInfoByUserId(keywords);
  2654. if (result && (result == null ? void 0 : result.code) === 0) {
  2655. return (_c = result == null ? void 0 : result.data) == null ? void 0 : _c.name;
  2656. }
  2657. } else {
  2658. warn(" getNameByRoomId can not find result !");
  2659. return null;
  2660. }
  2661. }
  2662. }
  2663. class DouYin extends LivePlugin {
  2664. constructor() {
  2665. super();
  2666. this.header_logo = "#root .N_HNXA04 .HQwsRJFy a";
  2667. this.full_screen_class_or_id = ".xgplayer-page-full-screen .xgplayer-icon";
  2668. this.full_button_tag_name = "div";
  2669. this.full_screen_text = "进入全屏";
  2670. this.full_cancel_text = "退出全屏";
  2671. this.auto_max_pro_class_or_id_list = "#slidelist .gear .virtual>.item";
  2672. this.init();
  2673. }
  2674. removeRoomByClickRoomName() {
  2675. this.notSupport();
  2676. }
  2677. getNameByRoomId(roomId) {
  2678. return this.notSupport();
  2679. }
  2680. getRoomIdByUrl(url) {
  2681. return this.notSupport();
  2682. }
  2683. notSupport() {
  2684. log$1("抖音暂时不支持该操作!");
  2685. return null;
  2686. }
  2687. common() {
  2688. this.isFullScreen();
  2689. this.isAutoMaxVideoPro();
  2690. }
  2691. }
  2692. const login$1 = () => {
  2693. const addStyle2 = (str) => {
  2694. const head = document.querySelector("head");
  2695. const s = document.createElement("style");
  2696. s.innerHTML = str;
  2697. head.appendChild(s);
  2698. };
  2699. const login_box = "login-box";
  2700. const login_btn = "login-btn";
  2701. const cancel_btn = "cancel-btn";
  2702. const localUrl = window.location.href;
  2703. const huyaLogin = () => /https?:\/\/.*\.huya\.com\/.*/.test(localUrl);
  2704. const douyinLogin = () => /https?:\/\/.*\.douyin\.com\/.*/.test(localUrl);
  2705. const hy = [{
  2706. [login_box]: "#UDBSdkLgn",
  2707. [login_btn]: "[class^=HeaderDynamic] [class^=Login] [class^=LoginHd] span",
  2708. [cancel_btn]: "#close-udbLogin"
  2709. }];
  2710. const douyin = [{
  2711. [login_box]: "[id^=login-full-panel]",
  2712. [login_btn]: "#_7hLtYmO>button",
  2713. [cancel_btn]: ".dy-account-close"
  2714. }, {
  2715. [login_box]: "[id^=login-full-panel]",
  2716. [login_btn]: "#tcTjz3nj",
  2717. [cancel_btn]: ".dy-account-close"
  2718. }];
  2719. let LOGIN_BOX = [];
  2720. const addLoginCancel = (loginSelector, loginBtnCancel) => {
  2721. let loginContainer = document.querySelector(loginSelector);
  2722. if (!(loginContainer instanceof HTMLElement)) {
  2723. return;
  2724. }
  2725. if (loginContainer.classList.contains("m-display-block")) {
  2726. loginContainer.classList.remove("m-display-block");
  2727. }
  2728. console.log("login cancel 扫描中...");
  2729. let timer = setInterval(() => {
  2730. let closeBtn = loginContainer.querySelector(loginBtnCancel);
  2731. if (closeBtn && closeBtn.mark) {
  2732. clearInterval(timer);
  2733. return;
  2734. }
  2735. if (closeBtn && !closeBtn.mark) {
  2736. console.log("cancel button 已经找到了", closeBtn);
  2737. closeBtn.mark = true;
  2738. closeBtn.addEventListener("click", () => {
  2739. console.log("click me!", loginContainer);
  2740. });
  2741. }
  2742. }, 1e3);
  2743. };
  2744. const handlerLogin = (loginSelector, loginBtnSelector, loginBtnCancel) => {
  2745. let loginContainer = null;
  2746. let timer = setInterval(() => {
  2747. loginContainer = document.querySelector(loginSelector);
  2748. if (!loginContainer) {
  2749. return;
  2750. }
  2751. if (loginContainer.mark) {
  2752. clearInterval(timer);
  2753. return;
  2754. }
  2755. loginContainer.mark = true;
  2756. if (loginContainer && !loginContainer.classList.contains("m-display-none")) {
  2757. loginContainer.classList.add("m-display-none");
  2758. }
  2759. }, 100);
  2760. let timer1 = setInterval(() => {
  2761. const btn = document.querySelector(loginBtnSelector);
  2762. if (btn && btn.mark) {
  2763. clearInterval(timer1);
  2764. return;
  2765. }
  2766. if (btn && !btn.mark) {
  2767. btn.mark = true;
  2768. btn.addEventListener("click", () => {
  2769. loginContainer = document.querySelector(loginSelector);
  2770. if (loginContainer) {
  2771. if (loginContainer.classList.contains("m-display-none")) {
  2772. loginContainer.classList.remove("m-display-none");
  2773. if (!loginContainer.classList.contains("m-display-block")) {
  2774. loginContainer.classList.add("m-display-block");
  2775. }
  2776. addLoginCancel(loginSelector, loginBtnCancel);
  2777. } else {
  2778. if (loginContainer.classList.contains("m-display-block")) {
  2779. loginContainer.classList.remove("m-display-block");
  2780. }
  2781. if (!loginContainer.classList.contains("m-display-none")) {
  2782. loginContainer.classList.add("m-display-none");
  2783. }
  2784. }
  2785. }
  2786. console.log("click me login !", loginContainer);
  2787. });
  2788. }
  2789. }, 100);
  2790. };
  2791. const initbox = () => {
  2792. if (huyaLogin()) {
  2793. LOGIN_BOX = [...hy];
  2794. } else if (douyinLogin()) {
  2795. LOGIN_BOX = [...douyin];
  2796. } else
  2797. ;
  2798. LOGIN_BOX.forEach((item) => {
  2799. handlerLogin(item[login_box], item[login_btn], item[cancel_btn]);
  2800. });
  2801. };
  2802. initbox();
  2803. const loginCss = `
  2804. .m-display-block {
  2805. display:block !important;
  2806. }
  2807. .m-display-none {
  2808. display:none !important;
  2809. }
  2810. `;
  2811. addStyle2(loginCss);
  2812. };
  2813. const isDouyuDetail = new RegExp(/.*douyu.*(\/((.*rid=\d+)|(\d+)).*)$/).test(local_url);
  2814. const isCreate = () => local_url.indexOf("https://www.douyu.com/creator") !== -1;
  2815. const createDark = isCreate() ? `
  2816. .dark * {
  2817. background-color: var(--w-bg-darker) !important;
  2818. border-color: var(--w-text) !important;
  2819. color: var(--w-text-light) !important;
  2820. }
  2821. ` : ``;
  2822. const loadingLazy = isDouyuDetail ? `` : `
  2823. .dark .LazyLoad{
  2824. background: var(--w-bg-dark) !important;
  2825. }
  2826. `;
  2827. const darkCss$1 = `
  2828. ${createDark}
  2829. ${loadingLazy}
  2830.  
  2831. .dark .DyCover-pic,
  2832. .dark .Search-backTop {
  2833. background: var(--w-bg-dark) !important;
  2834. }
  2835.  
  2836.  
  2837. .dark .Horn4Category-popWrap
  2838. {
  2839. background: var(--w-bg) !important;
  2840. background-image:none !important;
  2841. border:1px solid var(--w-text-light) !important;
  2842. }
  2843.  
  2844. .dark .wm-general-bgblur,
  2845. .dark body,.dark .layout-Module-head.is-fixed,
  2846. .dark .layout-List-item,.dark .layout-List-item .DyCover,
  2847. .dark .Header-wrap,.dark .layout-Module-container,.dark .AnchorRank-more,
  2848. .dark .Elevator,.dark .Elevator-item,.dark .Elevator-item.is-active>span::before,.dark .public-DropMenu-drop,
  2849. .dark .Category-item,.dark .DropMenuList-linkAll,.dark .GiftInfoPanel-brief,
  2850. .dark .Header-menu-wrap,.dark .DyListCover-wrap,
  2851. .dark .layout-Module-label--hasList.is-active, .dark .layout-Module-label,
  2852. .dark .ListFooter .dy-Pagination-next, .dark .ListFooter .dy-Pagination-prev,
  2853. .dark .ListFooter .dy-Pagination .dy-Pagination-item,.dark .ListFooter .dy-Pagination .dy-Pagination-item-active,.dark .ListFooter .ListFooter-btn-wrap,
  2854. .dark .layout-Player-title,.dark .layout-Player-aside,
  2855. .dark .layout-Player-asideMain,.dark .layout-Player-barrage,.dark .layout-Player-toolbar,
  2856. .dark .Barrage-listItem,.dark .Barrage-EntranceIntroduce, .dark .Barrage-roomVip--super,
  2857. .dark .DiamondsFansBarrage, .dark #js-floatingbarrage-container li, .dark #js-fansflating-barrage,
  2858. .dark .Barrage-EntranceIntroduce-Anchor, .dark .Barrage-EntranceIntroduce-Goodgame, .dark .FollowGuide,
  2859. .dark .BarrageBuffer,
  2860. .dark .Barrage-FansHome-content,.dark .Barrage-FansHome,
  2861. .dark .ChatSend-txt,.dark .layout-Classify-card,.dark .cate2TagB-item,
  2862. .dark .PlayerToolbar-signCont,.dark .dy-Modal-content,.dark .CustomGroupCommon .dy-Modal-title,
  2863. .dark .CustomGroupManager-title,.dark .FilterKeywords,
  2864. .dark .Barrage-toolbarClear .Barrage-toolbarText,.dark .Barrage-toolbarLock:hover .Barrage-toolbarText,
  2865. .dark .dy-ModalRadius-content, .dark .categoryTab-item, .dark customizeModal-submit, .dark .customizeModal-cancel, .dark .search-ipt,
  2866. .dark .addedCategory-item, .dark .Search, .dark .Header-wrap.is-start .Search, .dark .Search-historyList>li, .dark .Search-text,
  2867. .dark .ListHeader-hero-header,.dark .layout-Module-label--hasList,.dark .ListHeader-pop,.dark .layout-Module-filter-more,
  2868. .dark .Barrage-toolbarClear, .dark .Barrage-toolbarLock,.dark .AssembleExpressHeader-head, .dark .Emotion, .dark .ShieldTool-list,.dark .BarrageTips,
  2869. .dark .BarrageTips .BarrageTips--active,.dark .FansMedalDialog-normal, .dark .ChatBarrageCollect .ChatBarrageCollect-tip,.dark .AssembleExpressHeader,
  2870. .dark .TagItem,.dark .ChatBarrageCollectPop , .dark .Horn4Category-popWrap,.dark .Horn4Category-inputor,.dark .ChatFansBarragePop,
  2871. .dark .PopularBarrage .PopularBarragePanel-foot, .dark .PopularBarrage .PopularBarragePanelStyle, .dark .BarrageWordPanel-card,
  2872. .dark .BarrageWordPanel-btn,.dark .BarrageWordPanel-header h2,.dark .BarrageWordPanel-header,.dark .CustomGroupManager-saveBtn,
  2873. .dark .DyRecCover-wrap,.dark .CustomGroupCommon .dy-Modal-header,.dark .CustomGroupCommon .dy-Modal-close-x,
  2874. .dark .CustomGroupCommon .dy-Modal-close,.dark .CustomGroupCommon,.dark .dy-Modal-close,.dark .dy-Modal-header,
  2875. .dark .dy-Modal-footer button,.dark .FilterSwitchStatus-switch,.dark .LevelFilKeyTab .tab.active,.dark .LevelFilterLimit,
  2876. .dark .BarrageFilter-fkbutton, .dark .FilterKeywords-edit-input, .dark .LevelFilterLimit-input,.dark .LevelFilKeyTab,
  2877. .dark .Search-recommend:hover,.dark .DropPaneList.HistoryList .DropPaneList-title,.dark .index-listWrap-jz2Rt,
  2878. .dark .layout-Card-horizon,.dark .layout-Tab-container .layout-Tab-item.is-active,.dark .layout-Tab-container .layout-Tab-item,
  2879. .dark .SearchChannel-item,.dark SearchChannel-item-detail,.dark .layout-Tab-container.is-fixed,
  2880. .dark .layout-Player-chat,
  2881. .dark layout-Player-chat *,
  2882. .dark #js-footer
  2883. {
  2884. background: var(--w-bg-darker) !important;
  2885. color: var(--w-text-light) !important;
  2886. }
  2887.  
  2888.  
  2889.  
  2890.  
  2891. .dark .Elevator-item.is-active>span,
  2892. .dark .Elevator-item:nth-child(odd)
  2893. {
  2894. background-color: rgba(var(--w-bg-darker),0.7) !important;
  2895. }
  2896.  
  2897. .dark .SearchAnchorVideo-title,
  2898. .dark .dy-ModalRadius-header, .dark .addedCategory-count,
  2899. .dark .RoomList .layout-Module-title, .dark .RoomList .layout-Module-title a,.dark layout-Module-title span,
  2900. .dark .AnchorRank .layout-Module-title,.dark .AnchorRank .layout-Module-title a,
  2901. .dark .DyCover-intro,.dark .DyCover-user,.dark .DyCover-zone,.dark a, .dark .layout-Module-title a,
  2902. .dark .DyRecCover-zone,.dark .DyRecCover-intro,.dark .DyRecCover-userName,.dark .DyRecCover-tag,
  2903. .dark .Category-item,.dark .DropMenuList-name, .dark .DropMenuList-linkAll,.dark .ListHeader-title,
  2904. .dark .layout-Module-label--hasList.is-active, .dark .layout-Module-label.is-active,
  2905. .dark .DyListCover-intro,.dark .DyListCover-zone,.dark .DyListCover-hot,.dark .DyListCover-userName,
  2906. .dark .ListFooter .dy-Pagination .dy-Pagination-item-active a,
  2907. .dark .ListFooter .dy-Pagination .dy-Pagination-item,
  2908. .dark .ListFooter .dy-Pagination .dy-Pagination-item-active,
  2909. .dark .ListFooter .ListFooter-btn-input,.dark .ListFooter-btn,.dark .ListFooter-btn-label,
  2910. .dark .Title-header,.dark .Title-report,.dark .Title-anchorName,
  2911. .dark .Barrage-main .Barrage-content,.dark .Barrage-roomVip--super,
  2912. .dark .PlayerToolbar span,.dark .Title-followNum, .dark .PlayerToolbar-signCont,
  2913. .dark .Barrage-EntranceIntroduce-Anchor, .dark .Barrage-EntranceIntroduce-Goodgame ,.dark .Barrage-EntranceIntroduce-Content,
  2914. .dark .SwipeTabsContent .tabItem ,.dark .layout-Classify-card>strong ,.dark .secondCateCard-hot,
  2915. .dark .layout-Classify-card.secondCateCard,.dark .layout-Classify-card.secondCateCard.secondCateCark-hoverCard,.dark .HoverCark-wrap,
  2916. .dark .PlayerToolbar-signCont .RoomText-list .SignBaseComponent-text-link,.dark .customizeModal-title>h3,.dark .Search-label, .dark .Search-historyList>li,
  2917. .dakr .Search-hotList li,.dark .Search-linkIcon svg,.dark .categoryTab-tab,.dark .ListHeader-hero-content-tag,
  2918. .dark .Barrage-toolbarClear, .dark .Barrage-toolbarLock,.dark .Barrage-toolbarText,.dark .ShieldTool-listItem,.dark .BarrageTips,.dark .ChatBarrageCollectPop-title,
  2919. .dark .FansBarrageColor-item-txt,.dark .ChatFansBarragePop-txt,
  2920. .dark .PopularBarrage .PopularBarragePanel-descFansPrivilege,
  2921. .dark .PopularBarrage .PopularBarragePanel-descFansRenew,
  2922. .dark .PopularBarrage .PopularBarragePanel-descLock,.dark .dy-Modal-close,
  2923. .dark .ChatFansBarragePop-diamondsTxt,.dark .BarrageWordPanel-example,.dark .BarrageWordPanel-feedbackTips,
  2924. .dark .BarrageWordPanel-block h3,.dark .BarrageWordPanel-reward,.dark .BarrageWordPanel-tips,
  2925. .dark .CustomGroupManager-title strong,.dark .CustomGroupManager-groupItem,.dark .CustomGroupManager-checkItem>span,
  2926. .dark .CustomGroupManager,.dark .LevelFilKeyTab .tab, .dark .layout-Result,
  2927. .dark .FKNokeywords-title, .dark .Search-recommend-info p,.dark .layout-Module-title,
  2928. .dark .Search-keyword, .dark .Search-anchor.is-horizon .Search-anchor-info .Search-anchor-recommendTitle,
  2929. .dark .Search-anchor .Search-anchor-info .Search-anchor-recommendTitle,.dark SearchAnchorVideo-title,
  2930. .dark .Search-anchor-info h1,.dark .Search-anchor-info h2,.dark .Search-anchor-info h3,.dark .Search-anchor-info h4,.dark .Search-anchor-info h5,.dark .Search-anchor-info h6,
  2931. .dark .DropPaneList-live.is-live,.dark .Search-category h3,.dark .Search-category p,.dark .Search-category p span,
  2932. .dark .FilterKeywords-allText, .dark .FilterKeywords-intelligentText,
  2933. .dark .SearchChannel-item-detail-name,.dark .SearchChannel-item-detail-name span,
  2934. .dark .SearchChannel-item-detail-desc.SearchChannel-item-detail-isCate,.dark .SearchChannel-item-detail-desc.SearchChannel-item-detail-isCate span,
  2935. .dark .Search-yuba .des .name,.dark .layout-Search-input>input
  2936. {
  2937. color: var(--w-text-light) !important;
  2938. }
  2939.  
  2940.  
  2941. .dark .Search-recommend-info h3,.dark .Search-feedback-section,.dark .Search-feedback-section,
  2942. .dark .Header-menu-link.active a:hover,
  2943. .dark .RoomList .layout-Module-title:hover,
  2944. .dark .RoomList .layout-Module-title a:hover,
  2945. .dark .DyCover-intro:hover,
  2946. .dark .DyCover-user:hover,
  2947. .dark .DyCover-zone:hover,
  2948. .dark a:hover,.dark .FilterSwitchStatus h3,.dark .FilterSwitchStatus-status,
  2949. .dark .layout-Module-title a:hover,
  2950. .dark .DropMenuList-name:hover,
  2951. .dark .DropMenuList-linkAll:hover,
  2952. .dark .ListHeader-title,
  2953. .dark .layout-Module-label--hasList.is-active:hover,
  2954. .dark .layout-Module-label.is-active:hover,
  2955. .dark .ListFooter .dy-Pagination .dy-Pagination-item-active a:hover,
  2956. .dark .ListFooter .dy-Pagination .dy-Pagination-item:hover,
  2957. .dark .ListFooter .dy-Pagination .dy-Pagination-item-active:hover,
  2958. .dark .Title-anchorName:hover,.dark .Title-row-icon,.dark .Title-row-text,
  2959. .dark .SwipeTabsContent .tabItem:hover,.dark .SwipeTabsContent .tabItem.active,
  2960. .dark .layout-Classify-card>strong:hover,.dark .secondCateCard-hot:hover,
  2961. .dark .Barrage-toolbarClear:hover, .dark .Barrage-toolbarLock:hover,
  2962. .dark .ShieldTool-listItem.is-checked .ShieldTool-checkText,.dark .BarrageTips .BarrageTips--active,
  2963. .dark .ChatFansBarragePop-txt span,.dark .dark .ChatFansBarragePop-diamondsTxt span,.dark .ChatFansBarragePop-diamondsTxt span,
  2964. .dark .PopularBarrage .PopularBarragePanel-descFansPrivilege:hover,
  2965. .dark .PopularBarrage .PopularBarragePanel-descFansRenew:hover,.dark .DropPaneList-name,
  2966. .dark .PopularBarrage .PopularBarragePanel-descLock:hover,.dark .DropPaneList span,
  2967. .dark .Search-content-title, .dark .Search-default-title, .dark .Search-history-title, .dark .Search-hot-title,
  2968. .dark .FilKeyTab .tab.active,.dark Search-anchor-data,.dark .Search-anchor.is-horizon .Search-anchor-info p,
  2969. .dark .Search-anchor .Search-anchor-info,.dark Search-anchor-cate,.dark .Search-anchor-info,
  2970. .dark .Search-anchor-info h4.is-official,.dark .Search-anchor-info h3.is-official,.dark .Search-anchor-info h2.is-official,.dark .Search-anchor-info .is-official
  2971. {
  2972. color: var(--w-text) !important;
  2973. }
  2974.  
  2975.  
  2976.  
  2977.  
  2978. .dark .dark .CustomGroupManager-saveBtn,.dark .CustomGroupCommon .dy-Modal-header,
  2979. .dark .Search-historyList>li,.dark .layout-List-item,.dark .DyListCover-wrap,.dark .layout-Module-container,
  2980. .dark .ListFooter .dy-Pagination-item,.dark .ListFooter .dy-Pagination-next,.dark .ListFooter .dy-Pagination-prev,
  2981. .dark .ListFooter .dy-Pagination .dy-Pagination-item,.dark .ListFooter .dy-Pagination .dy-Pagination-item-active,
  2982. .dark .layout-Player-aside,.dark .layout-Player-asideMain, .dark .layout-Player-barrage,
  2983. .dark .PopularBarrage .PopularBarragePanel-foot,.dark .BarrageWordPanel-card,.dark .BarrageWordPanel-btn,
  2984. .dark .dy-Modal-footer button,.dark .LevelFilterLimit-input,
  2985. .dark .layout-Classify-card, .dark customizeModal-submit,.dark .layout-Menu,
  2986. .dark .layout-Player-asideMain, .layout-Player-toolbar,
  2987. .dark .customizeModal-cancel,.dark .ChatBarrageCollect .ChatBarrageCollect-tip
  2988. {
  2989. border: 1px solid var(--w-border) !important;
  2990. }
  2991.  
  2992.  
  2993.  
  2994.  
  2995. .dark .Header-wrap,.dark .layout-Player-title,
  2996. .dark .ChatSend-txt,
  2997. .dark .public-DropMenu-drop-main:before,.dark .Search-anchor-avatar,
  2998. .dark .categoryTab-head,.dark .ListHeader-hero-header,.dark .ListHeader-hero-content-icon,
  2999. .dark .EmotionTab,.dark .ChatFansBarragePop-describe,.dark .FansMedalPanel-container,
  3000. .dark .LevelFilterLimit,.dark .FKNokeywords-title
  3001. {
  3002. border-color:var(--w-border) !important;
  3003. }
  3004.  
  3005.  
  3006.  
  3007. .dark .Category-item,
  3008. .dark .layout-Module-label--hasList.is-active,
  3009. .dark .layout-Module-label,
  3010. .dark .DropMenuList-linkAll,
  3011. .dark .ListFooter .ListFooter-btn-wrap,
  3012. .dark .cate2TagB-item,
  3013. .dark .PlayerToolbar-signCont .RoomText-list .SignBaseComponent-text-link,
  3014. .dark .categoryTab-item,.dark .Header-wrap.is-start .Search ,.dark .addedCategory-item .dark .search-ipt,
  3015. .dark .layout-Module-filter-more,.dark .Barrage-toolbarClear, .dark .Barrage-toolbarLock,
  3016. .dark .ShieldTool-list,.dark .BarrageTips,.dark .ChatBarrageCollect .ChatBarrageCollect-tip:hover,
  3017. .dark .AssembleExpressHeader,.dark .TagItem,
  3018. .dark .dy-Modal-footer button:hover,.dark .FilterSwitchStatus-switch,
  3019. .dark .BarrageWordPanel-btn,.dark .LevelFilterLimit-input:focus,
  3020. .dark .BarrageFilter-fkbutton, .dark .FilterKeywords-edit-input, .dark .LevelFilterLimit-input,
  3021. .dark .FilterKeywords-edit-input:focus, .dark .LevelFilterLimit-input:focus
  3022. {
  3023. border: 1px solid var(--w-text-light) !important;
  3024. }
  3025.  
  3026.  
  3027. .dark .Category-item:hover,
  3028. .dark .layout-Module-label--hasList.is-active:hover,
  3029. .dark .layout-Module-label:hover,
  3030. .dark .DropMenuList-linkAll:hover,
  3031. .dark .categoryTab-item:hover,
  3032. .dark .addedCategory-item:hover,
  3033. .dark .Barrage-toolbarClear:hover, .dark .Barrage-toolbarLock:hover,
  3034. .dark .ChatBarrageCollect .ChatBarrageCollect-tip:hover,.dark .TagItem:hover,
  3035. .dark .BarrageWordPanel-btn:hover
  3036. {
  3037. border: 1px solid var(--w-text) !important;
  3038. }
  3039.  
  3040.  
  3041. .dark .Barrage-roomVip--super,
  3042. .dark .Barrage {
  3043. border: none !important;
  3044. }
  3045.  
  3046. .dark .Search-direct,
  3047. .dark .DyCover,.dark .Search-yuba,
  3048. .dark .layout-Card-history, .dark .layout-Card-rank,
  3049. .dark .layout-Cover-item,.dark .Search-input-pane,
  3050. .dark .ListRecommend-refresh,.dark .ListHeader-pop-label,
  3051. .dark layout-Module-label,.dark .Search-default-item,
  3052. .dark .Search-recommend .Search-direct,.dark Search-category,
  3053. .dark .layout-Search-input,.dark .layout-Search-btn,
  3054. .dark .Search-feedback-textarea,.dark .VideoCollectionMix .layout-videoCollection-item,
  3055. .dark .categoryBoxB-editB .edit,.dark .layout-Nav-backTop,.dark .ChatSend-button,
  3056. .dakr .Search-direct {
  3057. background: var(--w-bg-darker) !important;
  3058. border:1px solid var(--w-text) !important;
  3059. color: var(--w-text-light) !important;
  3060. }
  3061.  
  3062.  
  3063. .dark .DyCover:hover,.dark .layout-Search-btn:hover,
  3064. .dark .ChatSend-button:hover,
  3065. .dark .dark Search-category:hover,.dark .categoryBoxB-editB .edit:hover,
  3066. .dark .Search-default-item:hover,.dark .Search-recommend .Search-direct:hover,
  3067. .dark .Category-item:hover,.dark .ListRecommend-refresh:hover,
  3068. .dakr .Search-direct:hover,.dark .ListHeader-pop-label:hover,
  3069. .dark .Search-topicRecommend:hover,.dark layout-Module-label:hover,
  3070. .dark .Search-direct:hover,
  3071. .dark .Search-recommend:hover {
  3072. background: var(--w-bg) !important;
  3073. border:1px solid var(--w-text-light) !important;
  3074. color: var(--w-text) !important;
  3075. }
  3076.  
  3077.  
  3078. .dark .dy-ModalRadius-footer button,
  3079. .dark .layout-Tab-item,.dark .dy-ModalRadius-close,
  3080. .dark .DropPaneList>a{
  3081. background: var(--w-bg-dark) !important;
  3082. border: none !important;
  3083. color: var(--w-text-light) !important;
  3084. }
  3085.  
  3086. .dark .dy-ModalRadius-close:hover,.dy-ModalRadius-footer button:hover,
  3087. .dark .layout-Tab-item.is-active,.dark .layout-Tab-item:hover,
  3088. .dark .Search-rank-wrapper:hover .Search-rank,
  3089. .dark .YubaMessage-link:hover,
  3090. .dark .layout-Tab-item:hover,
  3091. .dark .Search-hotList li:hover,
  3092. .dark .DropPaneList>a:hover {
  3093. background: var(--w-bg) !important;
  3094. color: var(--w-text) !important;
  3095. }
  3096.  
  3097. `;
  3098. const css$4 = is_douyu ? `
  3099.  
  3100. .layout-List-item .DyCover-content .DyCover-user,.layout-Cover-item .DyListCover-userName,.Title-blockInline .Title-anchorName h2{
  3101. cursor:pointer !important;
  3102. }
  3103. .layout-List-item .DyCover-content .DyCover-user:hover,.layout-Cover-item .DyListCover-userName:hover,.Title-blockInline .Title-anchorName h2:hover {
  3104. color:rgb(255, 135, 0) !important;
  3105. }
  3106.  
  3107. .layout-Section.layout-Slide .layout-Slide-player,
  3108. .layout-Slide-bannerInner,
  3109. .Header-broadcast-wrap,
  3110. #lazyModule3,
  3111. #lazyModule4,
  3112. #lazyModule5,
  3113. #lazyModule6,
  3114. #lazyModule7,
  3115. #lazyModule8,
  3116. #lazyModule23,
  3117. #lazyModule24,
  3118. #js-room-activity,
  3119. #js-right-nav,
  3120. #js-bottom,
  3121. #js-header .Header .HeaderNav,
  3122. #js-header .Header .HeaderGif-left,
  3123. #js-header .Header .HeaderGif-right,
  3124. .Header-download-wrap,
  3125. .AnchorInterToolsUser,
  3126. .RechangeJulyPopups,
  3127. li.Header-menu-link,
  3128. .layout-Main .layout-Customize,
  3129. .HeaderCell-label-wrap,
  3130. .Title-AnchorLevel,.RoomVipSysTitle,
  3131. .Aside-nav .Aside-nav-item,
  3132. .Title-roomInfo .Title-row,
  3133. #player-marvel-controller+div,
  3134. .layout-Player-main .GuessGameMiniPanelB-wrapper,
  3135. #js-player-asideMain #layout-Player-aside .FirePower,
  3136. .layout-Player-video .layout-Player-videoAbove .ChargeTask-closeBg,
  3137. #bc4-bgblur,.Search-ad,
  3138. .SignBaseComponent-sign-ad,
  3139. .SignBaseComponent-sign-ad .LazyLoad,
  3140. .list-Banner-adv,
  3141. .Baby-image.is-achievement,
  3142. .multiBitRate-da4b60{
  3143. display:none !important;
  3144. }
  3145.  
  3146.  
  3147. li.Header-menu-link:nth-child(1),
  3148. li.Header-menu-link:nth-child(2),
  3149. li.Header-menu-link:nth-child(3),
  3150. .Aside-nav .Aside-nav-item:nth-child(1)
  3151. {
  3152. display:inline-block !important;
  3153. }
  3154.  
  3155. .layout-Player-aside .layout-Player-chat,.layout-Player-aside .layout-Player-chat .ChatToolBar {
  3156. display:block !important;
  3157. }
  3158.  
  3159.  
  3160. .Barrage-main .UserLevel,
  3161. .Barrage-main .js-user-level,
  3162. .Barrage-main .Barrage-icon,
  3163. .Barrage-main .Motor,
  3164. .Barrage-main .Motor-flag,
  3165. .Barrage-main .Barrage-hiIcon,
  3166. .Barrage-main .UserGameDataMedal,
  3167. .Barrage-main .ChatAchievement,
  3168. .Barrage-main .Barrage-notice,
  3169. .layout-Player .layout-Player-announce,
  3170. .layout-Player .layout-Player-rank,
  3171. .MatchSystemTeamMedal,
  3172. #js-player-video .ScreenBannerAd,
  3173. .layout-Main #layout-Player-aside .BarrageSuspendedBallAd,
  3174. .layout-Main #layout-Player-aside .SignBarrage,
  3175. #js-player-video-case .VRTips~div,
  3176. .layout-Main .Title-roomInfo .Title-row,
  3177. .layout-Main .ToTopBtn,
  3178. .Header-right .public-DropMenu-drop .DropPane-ad,
  3179. .Header-right .CloudGameLink,
  3180. .Header-menu-wrap .DropMenuList-ad,
  3181. .public-DropMenu-drop-main div.Header-UserPane-top~div,
  3182. #js-player-dialog .LiveRoomLoopVideo,
  3183. .Header-search-wrap .Search label,
  3184. .RedEnvelopAd.RedEnvelopAdMouseDisable,
  3185. .Barrage .Barrage-userEnter{
  3186. display:none !important;
  3187. }
  3188.  
  3189. /* 一般禁用模式 */
  3190. .layout-Player-main #js-player-toolbar{
  3191. display:block;
  3192. }
  3193. #root div.layout-Main{
  3194. margin-top:70px !important;
  3195. display:block !important;
  3196. width:auto !important;
  3197. max-width:auto !important;
  3198. }
  3199. #root>div,
  3200. #root>div .wm-general-bgblur
  3201. {
  3202. background-image:none !important;
  3203. }
  3204.  
  3205. .Title-roomInfo .Title-row:nth-child(1),
  3206. .Title-roomInfo .Title-row:nth-child(2) {
  3207. display:block !important;
  3208. }
  3209.  
  3210. .layout-Player-main .Title-roomInfo .is-normal .Title-blockInline,
  3211. .layout-Player-main .Title-roomInfo .is-normal:nth-child(2)
  3212.  
  3213. {
  3214. display:none !important;
  3215. }
  3216.  
  3217. .layout-Player-main .Title-roomInfo .is-normal .Title-blockInline:nth-child(0),
  3218. .layout-Player-main .Title-roomInfo .is-normal .Title-blockInline:nth-child(1),
  3219. .layout-Player-main .Title-roomInfo .is-normal .Title-blockInline:nth-child(2)
  3220. {
  3221. display:inline-block !important;
  3222. }
  3223.  
  3224. .Barrage-main .Barrage-content {
  3225. color:#333 !important;
  3226. }
  3227. .Barrage-main .Barrage-nickName{
  3228. color:#2b94ff !important;
  3229. }
  3230. .Barrage-listItem{
  3231. color: #333 !important;
  3232. background-color: #f2f5f6 !important;
  3233. }
  3234.  
  3235. .Header-search-wrap input#header-search-input::placeholder {
  3236. color: transparent !important;
  3237. opacity:0 !important;
  3238. }
  3239.  
  3240. #js-aside,
  3241. .layout-Player-main #js-player-toolbar {
  3242. display:none;
  3243. }
  3244.  
  3245.  
  3246.  
  3247. ${darkCss$1}
  3248.  
  3249.  
  3250. ` : "";
  3251. const darkCss = `
  3252.  
  3253. /* 修改背景和字体颜色 */
  3254.  
  3255. .dark #main_col,
  3256. .dark .room-core,
  3257. .dark input,
  3258. .dark input:focus,
  3259. .dark textarea,
  3260. .dark textarea:focus,
  3261. .dark .hy-header-style-normal .duya-header-wrap,
  3262. .dark .duya-header,
  3263. .dark .duya-header .duya-header-bd,
  3264. .dark #J_liveListNav dl dd .role-box--CmncxF51UUP9Y9q3Gf4Tt.role-box_3--2j_unpb869X0sxOjH9L165,
  3265. .dark #J_liveListNav dl dd .role-box--CmncxF51UUP9Y9q3Gf4Tt.role-box_3--2j_unpb869X0sxOjH9L165:hover,
  3266. .dark #J_liveListNav dl dd [class^=role-box],
  3267. .dark #J_liveListNav dl dd [class^=role-box]:hover,
  3268. .dark #J_liveListNav dl dd div li,
  3269. .dark #J_liveListNav dl dd div li:hover,
  3270. .dark .js-responded-list,
  3271. .dark .program-preview-box .preview-bd,
  3272. .dark .game-live-item,
  3273. .dark .game-live-item .txt .num,
  3274. .dark .game-live-item .txt .game-type a,
  3275. .dark .game-live-item .txt .game-type,
  3276. .dark .live-box .box-hd .more-list li,
  3277. .dark #J_duyaHeaderRight ul li a,
  3278. .dark .Category--2-gctJ3idXKRr9fHBvo6NK .SecTitle--1gf_r_H6RSc--8znfHWnx4,
  3279. .dark [class^=Category] [class^=SecTitle],
  3280. .dark .nav-expand-list,
  3281. .dark .nav-expand-list-more ,
  3282. .dark #js-game-list li,
  3283. .dark .mod-list .box-hd .filter dd .tag-layer,
  3284. .dark #J_mainWrap,
  3285. .dark .room-hd,.dark .room-core-r,
  3286. .dark .room-sidebar,.dark .room-player-gift-placeholder,
  3287. .dark #chat-room__wrap #chat-room__list div,.dark #chat-room__wrap #chat-room__list div a,
  3288. .dark #js-preview-box,.dark #recom-banners,.dark #tipsOrchat,
  3289. .dark .banners-box,.dark .box-recom .recom-banners,.dark .box-recom .recom-moments,
  3290. .dark .hotMoment-box .moment-item .moment-comment .comment-item,.dark #J_RoomChatSpeaker textarea,
  3291. .dark .chat-room__input,.dark .chat-room__ft,
  3292. .dark .room-panel,.dark .Panel--8WJ1xUECB7O5tfnF11lg,
  3293. .dark .subscribe-live-item,.dark .list-hd .follow-ctrl,
  3294. .dark .btn-more,.dark #js-search-main .host-item,.dark #js-search-main .host-item .desc,
  3295. .dark .search-left .superStar-item,.dark .chat-room__input .btn-sendMsg ,
  3296. .dark .nav-expand-list.nav-expand-game span a,.dark .chat-room__ft .chat-emot div,
  3297. .dark #tipsOrchat ._PortalChatPanelRoot div, .dark .ddJUGO,
  3298. .dark .laypageskin_default a,.dark .laypage_main button,.dark .laypage_main input,
  3299. .dark .player-gift-wrap,.dark .checkbox--3UDS8fEzoJbhidQEBAym6M.checked--2qEbUox3t-pKVluoe87qMG i,
  3300. .dark .chat-room__bd .chat-room__scroll .clearBtn,
  3301. .dark .chat-room__bd .chat-room__scroll .lockBtn,
  3302. .dark [class^=panel],
  3303. .dark [class^=Panel],
  3304. .dark [class^=PanelHd],
  3305. .dark [class^=PanelBd],
  3306. .dark [class^=PanelFt],
  3307. .dark [class^=PopMsg],.dark [class^=PopMsg] [class^=title],.dark [class^=PopMsg] [class^=desc],.dark [class^=PopMsg] [class^=PopMsgArr],.dark .room-hd .host-control .subscribe-entrance .subscribe-hd.sub-off,
  3308. .dark .listItem--2DQMeljGuIpJJbgUmLePE3,.dark .listItem--2DQMeljGuIpJJbgUmLePE3 span,
  3309. .dark .barrageBox--12mXUQ-jjQe4g8cXRIDZnw .title--3ejSSMCTSLSPah47f_19h-,
  3310. .dark .duya-header-search input,.dark .inpage-advice-list li:hover,
  3311. .dark #play2 .content .content-aside>div,.dark #play2 .content .content-aside>div h2,
  3312. .dark #play2 .content .content-aside>div .more,.dark .main-info,
  3313. .dark .comment-container textarea, .dark .main-vplayer .vplayer-wrap .video_embed .video_embed_flash,
  3314. .dark .loGrI3HWkrL4-I82d11qx,
  3315. .dark .loGrI3HWkrL4-I82d11qx ._5zt-PSmfE5nKpsIw9OQE,
  3316. .dark .loGrI3HWkrL4-I82d11qx ._5zt-PSmfE5nKpsIw9OQE .MuTvmvGkEFS9kogNu9hjs,
  3317. .dark .loGrI3HWkrL4-I82d11qx ._5zt-PSmfE5nKpsIw9OQE .MuTvmvGkEFS9kogNu9hjs:focus,
  3318. .dark #play2, .dark .duya-header-bd,.dark .aside-danmulist .danmulist-header,
  3319. .dark .search-suggest, .dark .search-suggest ,
  3320. .dark .search-suggest .search-item:hover,
  3321. .dark .search-suggest .search-item.current,
  3322. .dark #J_liveListNav dl dd span,
  3323. .dark #player-gift-wrap,.dark .player-all-gift-panel,
  3324. .dark #player-box-panel,
  3325. .dark .more-attivity-panel,.dark [class^=roomBlockWords],
  3326.  
  3327. .dark [class*=msg-of-king],
  3328. .dark .ButtonMon--220refp4DGUDqT-yPXcS8W.fans--33nbMT8b0W7GezN12PjsS8 .btn--1nWuP5PQFEC5TC290fbKN,
  3329. .dark [class^=ButtonMon][class^=fans] [class^=btn],
  3330. .dark #player-gift-tip .mic-name-color,
  3331. .dark #player-gift-tip .make-friend-people-switch,
  3332. .dark .huya-footer{
  3333. background-color: var(--w-bg-darker) !important;
  3334. color: var(--w-text-light) !important;
  3335. outline: none !important;
  3336. }
  3337.  
  3338.  
  3339. /* 修改字体颜色 */
  3340. .dark .hy-nav-item-on .hy-nav-link,
  3341. .dark .hy-nav-link:hover {
  3342. background-color: none !important;
  3343. color: #fff !important;
  3344. }
  3345.  
  3346.  
  3347. /* 修改border */
  3348.  
  3349. .dark .loGrI3HWkrL4-I82d11qx ._5zt-PSmfE5nKpsIw9OQE,
  3350. .dark .search-suggest .search-item:hover,
  3351. .dark .search-suggest .search-item.current {
  3352. background-color:none !important;
  3353. border:1px solid var(--w-text-light) !important;
  3354. outline: none !important;
  3355. }
  3356.  
  3357. /* 修改字体颜色 */
  3358. .dark .duya-header a, .dark p,.dark span,
  3359. .dark h1,.dark h2, .dark h3,.dark h4,.dark h5,.dark h6
  3360. .dark .duya-header-nav .hy-nav-item a,
  3361. .dark .duya-header-right a,
  3362. .dark .liveList-title a,
  3363. .dark .game-live-item .title,
  3364. .dark .game-live-item .txt,
  3365. .dark .duya-header i,
  3366. .dark .video-funny .title span,
  3367. .dark .live-box .box-hd .title a,
  3368. .dark .hy-header-style-skr .hy-nav-link,
  3369. .dark .Category--2-gctJ3idXKRr9fHBvo6NK .Item--2Tc1DF80qnq4qFUM3vHPPM a,
  3370. .dark [class^=Category] [class^=Item] a,
  3371. .dark #js-game-list li a .g-gameCard-fullName,
  3372. .dark .box-hd .title,
  3373. .dark .mod-list .box-hd .filter dd .tag-layer,
  3374. .dark .room-hd .host-info .host-title,
  3375. .dark .room-hd .host-name,
  3376. .dark .recom-title,
  3377. .dark .page-ctrl,
  3378. .dark .page-ctrl .ctrl-left,
  3379. .dark .page-ctrl .ctrl-right,
  3380. .dark .page-ctrl .ctrl-page,
  3381. .dark #chat-room__wrap #chat-room__list div a,
  3382. .dark #chat-room__wrap #chat-room__list div a span,
  3383. .dark .program-preview-box .preview-list .preview-item .preview-link,
  3384. .dark .program-preview-box .preview-hd .title,
  3385. .dark .program-preview-box .preview-list .preview-item .preview-line,
  3386. .dark .chat-room__list .msg-bubble span.msg,
  3387. .dark .subscribe-live-item .txt .msg-row .nick,
  3388. .dark .subscribe-live-item .txt .msg-row .intro,
  3389. .dark .subscribe-live-item .txt .msg-row .num,
  3390. .dark .list-hd .title,
  3391. .dark .list-hd .follow-ctrl .icon,
  3392. .dark .search-left .superStar-item .nick,
  3393. .dark .search-left .superStar-item .recommend,
  3394. .dark .search-left .superStar-item .room,
  3395. .dark .chat-room__list .msg-bubble .colon,
  3396. .dark .chat-room__list .msg-bubble .msg,
  3397. .dark .chat-room__input .btn-sendMsg,
  3398. .dark #tipsOrchat .live-tips,
  3399. .dark #tipsOrchat ._PortalChatPanelRoot div p,
  3400. .dark #tipsOrchat ._PortalChatPanelRoot div span,
  3401. .dark #tipsOrchat ._PortalChatPanelRoot div i,.dark .checkbox--3UDS8fEzoJbhidQEBAym6M i,
  3402. .dark [class^=checkbox] i,
  3403. .dark .checkbox--3UDS8fEzoJbhidQEBAym6M span,.dark [class^=checkbox] span,
  3404. .dark .listItem--2DQMeljGuIpJJbgUmLePE3,.dark [class^=listItem],
  3405. .dark .barrageBox--12mXUQ-jjQe4g8cXRIDZnw .title--3ejssMCTSLSPah47f_19h-,
  3406. .dark [class^=barrageBox] [class^=title],
  3407. .dark [class^=barrageBox] [class^=panel-hd],
  3408. .dark [class^=panel],
  3409. .dark [class^=panel] [class^=panel-hd],
  3410. .dark [class^=panel-hd],
  3411. .dark .chat-room__ft span,.dark .chat-room__ft p,
  3412. .dark .duya-header-right a i,
  3413. .dark .duya-header-right a span,
  3414. .dark #player-gift-tip .super-fans-gift .super-fans-gift-content i,
  3415. .dark #player-gift-tip .motorcade-gather-gift,.dark #player-gift-tip .mic-name,
  3416. .dark .chat-room__bd .chat-room__scroll .clearBtn,
  3417. .dark .chat-room__bd .chat-room__scroll .lockBtn,
  3418. .dark .search-advice-list li a,.dark .search-header .find-result,
  3419. .dark #play2 .crumb,.dark #play2 .crumb a,.dark .live-box .box-hd .more-list li a,
  3420. .dark .aside-videolist .video-item .item-detail .detail-nick span, dark .aside-videolist .video-item .item-detail .detail-playcount span
  3421. .dark .live-box .box-hd .more-list li a{
  3422. color: var(--w-text-light) !important;
  3423. }
  3424.  
  3425.  
  3426. /* 修改字体颜色 hover */
  3427. .dark .liveList-title a:hover,.dark .game-live-item .title:hover,.dark .game-live-item .txt:hover,.dark .live-box .box-hd .title a:hover,.dark .live-box .box-hd .more-list li a:hover,
  3428. .dark #js-game-list li a .g-gameCard-fullName:hover,.dark .box-hd .title:hover,.dark .game-live-item .txt i:hover,.dark .host-name:hover,.dark .mod-list .box-hd .filter dd .tag-layer:hover,
  3429. .dark .subscribe-live-item .txt .msg-row .nick:hover,.dark .subscribe-live-item .txt .msg-row .intro:hover,.dark .list-hd .title:hover,.dark #js-search-main .host-item .nick,
  3430. .dark .search-main .type-keyword,.dark #tipsOrchat .live-tips i,.dark .duya-header-right a:hover,.dark .duya-header-right a i:hover,.dark .duya-header-right a span:hover,.dark .chat-room__bd .chat-room__scroll .clearBtn:hover,
  3431. .dark .chat-room__bd .chat-room__scroll .lockBtn:hover,.dark .main-info .info-video .video-detail .video-title,
  3432. .dark .main-info .info-video .video-author h3,
  3433. .dark .FavoritePresenter--MMD7zrcd7sYoYy4-nf4LW .subscribe-hd--24Dtf1lXtfSas6Og00JGh .subscribe-tit--27roiaLDJp7Mr5zcqn8qjy,
  3434. .dark .search-header .find-result em,.dark .aside-videolist .video-item:hover .item-detail h3,
  3435. .dark .Category--2-gctJ3idXKRr9fHBvo6NK .Item--2Tc1DF80qnq4qFUM3vHPPM a:hover,
  3436. .dark dark [class^=FavoritePresenter] [class^=subscribe-hd],
  3437. .dark dark [class^=FavoritePresenter] [class^=subscribe-hd] [class^=subscribe-tit],
  3438. .dark dark [class^=Category] [class^=Item] a:hover
  3439. {
  3440.  
  3441. color: var(--w-text) !important;
  3442. }
  3443.  
  3444.  
  3445.  
  3446. /* 修改border */
  3447. .dark .program-preview-box,.dark .recom-banners,.dark .recom-moments,.dark .game-live-item,.dark .nav-expand-list,
  3448. .dark #js-game-list li,.dark .g-gameCard-item,.dark .room-sidebar,.dark .list-hd .follow-ctrl,.dark .btn-more,.dark #js-search-main .host-item,.dark .subscribe-live-item,
  3449. .dark .chat-room__input .btn-sendMsg,.dark .laypageskin_default a,.dark .chat-room__bd .chat-room__scroll .clearBtn,.dark .chat-room__bd .chat-room__scroll .lockBtn,
  3450. .dark .main-info .info-draw,.dark .main-info .info-comment,.dark .main-info .info-comment h2,
  3451. .dark #chat-room__wrap #chat-room__list .RoomMessageRichText--2Y0TYze1NxfsGAbfcA8jGV,
  3452. .dark #chat-room__wrap #chat-room__list [class^=RoomMessageRichText]{
  3453. border:1px solid var(--w-border) !important;
  3454. outline: none !important;
  3455. }
  3456.  
  3457.  
  3458. .dark .room-hd .host-control .subscribe-entrance .subscribe-hd.sub-off:hover,
  3459. .dark .nav-expand-list.nav-expand-game span:hover {
  3460. background-color: var(--w-bg-darker) !important;
  3461. color: var(--w-text-light) !important;
  3462. outline: none !important;
  3463. }
  3464.  
  3465.  
  3466. .dark .hy-header-style-normal .duya-header-wrap,.dark #player-gift-wrap,
  3467. .dark .duya-header,.dark .player-all-gift-panel,.dark .player-all-gift-panel .arrow,
  3468. .dark .chat-room__input,.dark #player-gift-tip,.dark .player-face li .player-superfans-card-count,
  3469. .dark .player-face li .plaer-face-icon-bg,.dark .player-face li .player-superfans-card-count,
  3470. .dark #player-gift-tip,.dark #player-gift-tip .make-friend-people-switch,
  3471. .dark #player-gift-tip .make-friend-unsubscribe,
  3472. .dark #player-gift-tip .make-friend-line,
  3473. .dark #player-gift-tip .bottom,.dark #player-pc-watch-btn,
  3474. .dakr .inpage-advice-list li,.dark #play2 .content .content-aside>div .more
  3475. {
  3476. background-color: var(--w-bg-darker) !important;
  3477. border-color:var(--w-border) !important;
  3478. outline: none !important;
  3479. }
  3480.  
  3481.  
  3482. /* 只修改border-color */
  3483. .dark .chat-room__input,
  3484. .dark .chat-room__ft .chat-room__ft__chat,
  3485. .dark ._2uc0_gzwdW4cbL_UOgWDJd,
  3486. .dark #tipsOrchat{
  3487. border-color:var(--w-border) !important;
  3488. outline: none !important;
  3489. }
  3490.  
  3491. .dark #duya-header,
  3492. .dark #chat-room__wrap #chat-room__list div a,
  3493. .dark #chat-room__wrap #chat-room__list div a span {
  3494. border:none !important;
  3495. outline: none !important;
  3496. }
  3497.  
  3498. .dark .laypageskin_default a:hover,
  3499. .dark .comment-container textarea,.dark .player-face li .plaer-face-icon-bg,
  3500. .dark .room-hd .host-control .subscribe-entrance .subscribe-hd.sub-off .subscribe-count,
  3501. .dark .nav-expand-list.nav-expand-game span a:hover{
  3502. border-color:var(--w-text-light) !important;
  3503. }
  3504.  
  3505.  
  3506. /* 修改border color background */
  3507. .dark .laypage_main button:hover,
  3508. .dark .laypageskin_default .laypage_curr,
  3509. .dark #J_duyaHeaderRight ul li a,
  3510. .dark .chat-room__bd .load-more-msg,
  3511. .dark .ixyGIy,
  3512.  
  3513. .dark .laypageskin_default a:hover {
  3514. color: var(--w-text);
  3515. border-color:var(--w-text) !important;
  3516. background-color: var(--w-bg-darker) !important;
  3517. }
  3518.  
  3519. .dark .chat-room__bd .chat-room__scroll .clearBtn,
  3520. .dark .chat-room__bd .chat-room__scroll .lockBtn,
  3521. .dark .hy-header-style-normal .duya-header-search input,
  3522. .dark .comment-container textarea:focus,.dark #pub_msg_input,
  3523. .dark .room-hd .host-control .subscribe-entrance .subscribe-hd.sub-off
  3524. {
  3525. border:1px solid var(--w-text-light) !important;
  3526. outline: none !important;
  3527. }
  3528.  
  3529.  
  3530. .dark .ChatSpeaker--2lgjsxdm6dK5MZ-6kVGLtx textarea:focus,
  3531. .dark [class^=ChatSpeaker] textarea:focus,
  3532. .dark .hy-header-style-normal .duya-header-search input:focus {
  3533. border:1px solid var(--w-text) !important;
  3534. outline: none !important;
  3535. }
  3536.  
  3537.  
  3538.  
  3539. .dark .MmdPopPanel--e_LkiARLtmY25hB1R9rdB,.dark [class^=MmdPopPanel],
  3540. .dark .SubConfirmPop--2VSR0gV-WvcfUtEzoh_Kjh .control--2EUGLFp0K_j4h_YJLiCtlj span,
  3541. .dark .SubConfirmPop--2VSR0gV-WvcfUtEzoh_Kjh span,
  3542. .dark .msg-of-king,.dark [class^=roomBlockWords] [class^=btn],
  3543. .dark [class^=SubConfirmPop],.dark [class^=emot-preview],
  3544. .dark [class^=colorNormal],
  3545. .dark #player-danmu-report,
  3546. .dark #pc-watch-download-tips,.dark #pc-watch-download-tips,
  3547. .dark [class^=colorNormal][class^=lock],
  3548. .dark .ucard-normal--1-VRAi0Zm5CwE-PaY2FEie,
  3549. .dark [class^=ucard-normal],
  3550. .dark .chat-room__list .msg-timed span,
  3551. .dark [class^=roomBlockWords-list] li,
  3552. .dark .hy-nav-item-on .hy-nav-link, .dark .hy-nav-link:hover,
  3553. .dark #search-bar-input,
  3554. .dark .room-hd .host-control .subscribe-entrance .subscribe-hd.sub-on,
  3555. .dark .room-hd .host-control .subscribe-entrance .subscribe-hd.sub-off
  3556. {
  3557. background-color: var(--w-bg-darker) !important;
  3558. border:1px solid var(--w-text) !important;
  3559. color: var(--w-text-light) !important;
  3560. outline: none !important;
  3561. }
  3562.  
  3563.  
  3564. .dark .SubConfirmPop--2VSR0gV-WvcfUtEzoh_Kjh span:hover,
  3565. .dark [class^=SubConfirmPop] span:hover,
  3566. .dark #J_liveListNav dl dd ul li ul li:hover,
  3567. .dark .SubConfirmPop--2VSR0gV-WvcfUtEzoh_Kjh .control--2EUGLFp0K_j4h_YJLiCtlj span:hover,
  3568. .dark [class^=SubConfirmPop] [class^=control] span:hover,
  3569. .dark .room-hd .host-control .subscribe-entrance .subscribe-hd.sub-on:hover,
  3570. .dark .room-hd .host-control .subscribe-entrance .subscribe-hd.sub-off:hover{
  3571. background: var(--w-bg) !important;
  3572. border:1px solid var(--w-text-light) !important;
  3573. color: var(--w-text) !important;
  3574. outline: none !important;
  3575. }
  3576.  
  3577. .dark .host-item .avatar .avatar-mask,
  3578. .dark .superStar-item .avatar .avatar-mask {
  3579. background:none !important;
  3580. }
  3581.  
  3582.  
  3583. .dark #J_liveListNav dl dd span:hover,
  3584. .dark #J_duyaHeaderRight ul li a:hover,
  3585. .dark .g-gameCard-link:hover{
  3586. background: var(--w-bg) !important;
  3587. color: var(--w-text) !important;
  3588. outline: none !important;
  3589. }
  3590.  
  3591. `;
  3592. const css$3 = is_huya ? `
  3593.  
  3594. .game-live-item i,.host-name {
  3595. cursor:pointer;
  3596. }
  3597. .game-live-item .txt i:hover,.host-name:hover {
  3598. color:rgb(255, 135, 0);
  3599. }
  3600. .helperbar-root--12hgWk_4zOxrdJ73vtf1YI,[class^=helperbar-root],
  3601. .mod-index-wrap .mod-index-main .main-bd,
  3602. .mod-index-wrap .mod-index-main .main-hd,
  3603. .mod-index-wrap #js-main,#J_treasureChestContainer,
  3604. .mod-index-wrap #banner,.player-banner-activity,
  3605. .mod-index-wrap .mod-game-type,
  3606. .mod-index-wrap .mod-actlist,
  3607. .mod-index-wrap .mod-news-section,
  3608. .mod-index-wrap .mod-index-list .live-box #J_adBnM,
  3609. .mod-index-wrap .mod-index-recommend,
  3610. .mod-index-wrap .mod-news-section,
  3611. .mod-index-wrap .recommend-wrap,
  3612. #player-marquee-wrap,.small-handle-tip,
  3613. #player-marquee-wrap .player-marquee-noble-item,
  3614. #player-marquee-wrap .player-banner-enter,
  3615. #player-marquee-wrap [id^=player-banner-enter],
  3616. #player-marquee-wrap [id^=player-marquee],
  3617. .RoomPublicMessage--n3v61Bk0DehYuR0xEQ9S1,[class^=RoomPublicMessage],
  3618. #huya-ab-fixed,
  3619. #huya-ab,
  3620. .liveList-header-r,
  3621. .room-footer,
  3622. .J_roomSideHd,
  3623. #J_roomSideHd,
  3624. #match-cms-content,
  3625. #matchComponent2,
  3626. .hy-nav-item,
  3627. .list-adx,
  3628. .layout-Banner,
  3629. #J_duyaHeaderRight>div>div>div,
  3630. .nav-expand-list .third-clickstat,
  3631. #main_col .special-bg,
  3632. .player-recommend.recommend-ab-mode .end-ab-wrap,
  3633. .chat-wrap-panel.wrap-income,
  3634. .match-room .match-nav,
  3635. .host-detail.J_roomHdDetail span,
  3636. .host-detail.J_roomHdDetail .host-video,
  3637. .room-hd-r .jump-to-phone,
  3638. .room-hd-r #share-entrance,
  3639. .room-hd-r #J_illegalReport,
  3640. .room-hd-r .gamePromote.J_gamePromote,
  3641. .main-wrap .room-mod-ggTop,
  3642. #chatRoom .room-gg-chat,
  3643. .room-core .room-business-game,
  3644. .room-backToTop.j_room-backToTop,
  3645. .end-ab-banner,
  3646. .player-app-qrcode,
  3647. .player-play-big, .chat-room__list .msg-nobleSpeak-decorationPrefix,
  3648. #main_col #matchComponent2,
  3649. .room-weeklyRankList{
  3650. display:none !important;
  3651. }
  3652.  
  3653. .ssr-wrapper .mod-sidebar, .room-core #player-gift-wrap, {
  3654. display:none;
  3655. }
  3656.  
  3657. .hy-nav-item:nth-child(1),
  3658. .hy-nav-item:nth-child(2),
  3659. .hy-nav-item:nth-child(3),
  3660. #J_duyaHeaderRight>div>div>div:nth-child(3),
  3661. #J_duyaHeaderRight>div>div>div:nth-child(4)
  3662. {
  3663. display:inline-block !important;
  3664. }
  3665. .mod-index-wrap .mod-index-list{
  3666. margin-top:80px !important;
  3667. }
  3668. .duya-header{
  3669. background: hsla(0,0%,100%,.95) !important;
  3670. border-bottom: 1px solid #e2e2e2 !important;
  3671. box-shadow: 0 0 6px rgb(0 0 0 / 6%) !important;
  3672. }
  3673. .duya-header a,.duya-header i{
  3674. color:#000 !important;
  3675. }
  3676. /*******直播间样式*****/
  3677. #main_col,
  3678. .chat-room__list .msg-normal,.chat-room__list .msg-bubble,#J_mainRoom{
  3679. background:none !important;
  3680. }
  3681. #wrap-ext,
  3682. .chat-room__list .msg-normal-decorationPrefix,
  3683. .chat-room__list .msg-normal-decorationSuffix,
  3684. .chat-room__list .msg-bubble-decorationPrefix,
  3685. .chat-room__list img,
  3686. .chat-room__list .msg-noble,
  3687. .chat-room__list .msg-sys,
  3688. .chat-room__list .msg-auditorSys,
  3689. .J_box_msgOfKing,
  3690. .chat-room__list .msg-onTVLottery{
  3691. display: none !important;
  3692. }
  3693. .chat-room__list .msg-bubble span.msg{
  3694. color: #333 !important;
  3695. background:none!important;
  3696. }
  3697. .chat-room__list .msg-bubble .colon,
  3698. .chat-room__list .msg-bubble .msg,
  3699. .chat-room__list .name{
  3700. color: #3c9cfe !important;
  3701. background:none!important;
  3702. }
  3703.  
  3704. #search-bar-input::placeholder{
  3705. color: transparent !important;
  3706. opacity:0 !important;
  3707. }
  3708. .mod-sidebar,
  3709. .room-core #player-gift-wrap{
  3710. display:none ;
  3711. }
  3712.  
  3713. #player-ctrl-wrap {
  3714. opacity: 0;
  3715. transition: all 500ms ease-in 0s !important;
  3716. bottom: 16px;
  3717. }
  3718. #J_playerMain:hover #player-ctrl-wrap{
  3719. opacity: 1;
  3720. }
  3721.  
  3722. [class^=NavItem] span[class^=NavText] {
  3723. color:#555 !important;
  3724. }
  3725. .duya-header-search input {
  3726. background-color: #e5e7eb;
  3727. }
  3728. [class^=NavItem] [class^=NavItemHd] i[class*=fav] {
  3729. background-image:url('https://a.msstatic.com/huya/hd/h5/header/components/HeaderDynamic/NavItem/img/fav-0.15b3e0b4a39185db705b7c523cd3f17c.png') !important;
  3730. }
  3731.  
  3732. [class^=NavItem] [class^=NavItemHd] i[class*=history] {
  3733. background-image:url('https://a.msstatic.com/huya/hd/h5/header/components/HeaderDynamic/NavItem/img/history-0.2b32fba04f79057de5abcb2b35cd8eec.png') !important;
  3734. }
  3735.  
  3736. ${darkCss}
  3737.  
  3738. ` : "";
  3739. const css$2 = is_douyin ? `
  3740. #related-video-card-login-guide,
  3741. #captcha_container,
  3742. .JsAsIOEV,
  3743. #login-full-panel{
  3744. display:none !important;
  3745. }
  3746.  
  3747. .login-mask-enter-done,
  3748. .box-align-center, {
  3749. display:none ;
  3750.  
  3751. }
  3752.  
  3753. .m-douyin-login{
  3754. display:block !important;
  3755. }
  3756.  
  3757. ::-webkit-scrollbar {
  3758. width: 6px !important;
  3759. background-color: teal !important;
  3760. }
  3761. ::-webkit-scrollbar-track {
  3762. background-color: var(--w-bg) !important;
  3763. }
  3764. ::-webkit-scrollbar-thumb {
  3765. background-color: var(--w-bg-light) !important;
  3766. border-radius: 6px !important;
  3767. }
  3768. ` : "";
  3769. const anime = /.*:\/\/www\.bilibili\.com\/anime\/.*/.test(local_url) ? `
  3770. .dark .home-cell-desc-title[data-v-350d21cc],
  3771. .dark .home-cell-desc-title,
  3772. .dark .home-cell-desc-subtitle[data-v-350d21cc],
  3773. .dark .home-cell-desc-subtitle,
  3774. .dark .with-up-space,
  3775. .dark .with-up-space[data-v-350d21cc]
  3776. {
  3777. color:var(--w-text-light) !important;
  3778. }
  3779.  
  3780.  
  3781. .dark .nav-tool-container .section,
  3782. .dark .nav-tool-container .section[data-v-3b26ecb6] {
  3783. border: 1px solid var(--w-border) !important;
  3784. color:var(--w-text-light) !important;
  3785. background:var(--w-bg-darker) !important;
  3786. }
  3787.  
  3788.  
  3789.  
  3790. .dark .nav-tool-container .section:hover,
  3791. .dark .nav-tool-container .section[data-v-3b26ecb6]:hover {
  3792. color:var(--w-blue-link-hover) !important;
  3793. border-color: var(--w-blue-link-hover) !important;
  3794. background:var(--w-bg-darker) !important;
  3795. }
  3796.  
  3797.  
  3798.  
  3799.  
  3800.  
  3801.  
  3802.  
  3803. ` : ``;
  3804. const blackboard = `
  3805.  
  3806. .dark .q-textarea {
  3807. background-color : var(--w-bg-darker) !important;
  3808. color : var(--w-text-light) !important;
  3809. border :1px solid var(--w-text-light) !important;
  3810. }
  3811. .dark .activity-questions-list-wrap .activity-questions-item .activity-questions-item-title .title,
  3812. .dark .activity-questions-list-wrap .activity-questions-item .activity-questions-item-required,
  3813. .dark .activity-questions-item-index,
  3814. .dark .activity-questions-list-wrap .activity-questions-item {
  3815. color : var(--w-text-light) !important;
  3816. }
  3817.  
  3818.  
  3819. `;
  3820. const comment = `
  3821. .dark .player-left-components *,
  3822. .dark .bb-comment *,
  3823. .dark .bb-comment, .dark .comment-bilibili-fold,
  3824. .dark .bb-comment .comment-send-lite .comment-emoji,
  3825. .dark .bb-comment .comment-send.comment-send-lite,
  3826. .dark .bb-comment .comment-send-lite.comment-send-lite,
  3827. .dark .comment-bilibili-fold .comment-send .comment-emoji,
  3828. .dark .comment-bilibili-fold .comment-send-lite .comment-emoji,
  3829. .dark .comment-bilibili-fold .comment-send.comment-send-lite,
  3830. .dark .comment-bilibili-fold .comment-send-lite.comment-send-lite,
  3831. .dark .bili-rich-textarea__inner,.dark .bili-emoji__footer,
  3832. .dark .bili-emoji__pkg,.dark .bili-emoji,.dark .emoji-box
  3833. {
  3834. background:var(--w-bg-darker) !important;
  3835. color:var(--w-text) !important;
  3836. }
  3837.  
  3838.  
  3839.  
  3840. .dark .bili-emoji,.dark .emoji-box .emoji-title,
  3841. .dark .bb-comment,
  3842. .dark .bb-comment .comment-header,
  3843. .dark .bb-comment .comment-header .tabs-order,
  3844. .dark .bb-comment .comment-header .tabs-order li,
  3845. .dark .bb-comment .comment-send .dynamic-repost,
  3846. .dark .bb-comment .comment-send-lite .dynamic-repost,
  3847. .dark .comment-bilibili-fold .comment-header .tabs-order li,
  3848. .dark .comment-bilibili-fold .comment-send .dynamic-repost,
  3849. .dark .comment-bilibili-fold .comment-send-lite .dynamic-repost {
  3850. color:var(--w-text-light) !important;
  3851. }
  3852.  
  3853.  
  3854.  
  3855.  
  3856. .dark .bb-comment .comment-send-lite .comment-emoji,
  3857. .dark .bb-comment .comment-header,
  3858. .dark .bb-comment .comment-list .list-item .con,
  3859. .dark .bb-comment .bottom-page.center,
  3860. .dark .comment-bilibili-fold .comment-header,
  3861. .dark .comment-bilibili-fold .comment-send .comment-emoji,
  3862. .dark .comment-bilibili-fold .comment-send-lite .comment-emoji,
  3863. .dark .comment-bilibili-fold .comment-list .list-item .con{
  3864. border-color: var(--w-border) !important;
  3865. }
  3866.  
  3867.  
  3868.  
  3869. .dark .emoji-box,.dark .emoji-box .emoji-tabs,.dark .bili-emoji__pkg.active,
  3870. .dark .bb-comment .operation .opera-list,
  3871. .dark .bb-comment .comment-send .comment-emoji,
  3872. .dark .bb-comment .comment-send .textarea-container .ipt-txt,
  3873. .dark .bb-comment .comment-send-lite .textarea-container .ipt-txt,
  3874. .dark .bb-comment .comment-list .list-item .info .reply-tags span,
  3875. .dark .comment-bilibili-fold .comment-send .textarea-container .ipt-txt,
  3876. .dark .comment-bilibili-fold .comment-list .list-item .info .reply-tags span,
  3877. .dark .comment-bilibili-fold .comment-send-lite .textarea-container .ipt-txt,
  3878. .dark .comment-bilibili-fold .operation .opera-list{
  3879. color:var(--w-text-light) !important;
  3880. background:var(--w-bg-darker) !important;
  3881. border-color: var(--w-text) !important;
  3882. }
  3883.  
  3884.  
  3885. .dark .bb-comment .comment-list .list-item .reply-box .view-more .btn-more:hover, .comment-bilibili-fold .comment-list .list-item .reply-box .view-more .btn-more:hover,
  3886. .dark .btn.idc-btn.primary:hover {
  3887. color:var(--w-blue-link-hover) !important;
  3888. border-color: var(--w-blue-link-hover) !important;
  3889. background:var(--w-bg-darker) !important;
  3890. }
  3891.  
  3892. .dark .btn.idc-btn.default:hover,.dark .bili-emoji__list__item:hover,
  3893. .dark .emoji-box .emoji-wrap .emoji-pic:hover,
  3894. .dark .emoji-list.emoji-text.emoji-pic:hover,
  3895. .dark .emoji-box .emoji-tabs .tab-link:hover,
  3896. .dark .emoji-box .emoji-tabs .tab-link.on {
  3897. color:var(--w-blue-link-hover) !important;
  3898. border:1px solid var(--w-blue-link-hover) !important;
  3899. background:var(--w-bg-darker) !important;
  3900. }
  3901.  
  3902. `;
  3903. const dialog = `
  3904. .dark .bili-dialog-bomb,.dark .bili-dialog-bomb .appeal-box,
  3905. .dark .bili-dialog-bomb .appeal-box .header,
  3906. .dark .bili-dialog-bomb .appeal-box .wrap .container .textarea .textarea-wrap textarea,
  3907. .dark .bili-dialog-bomb .appeal-box .submit
  3908. {
  3909. color:var(--w-text-light) !important;
  3910. background:var(--w-bg-darker) !important;
  3911. }
  3912.  
  3913. .dark .bili-dialog-bomb .appeal-box .wrap .container .question {
  3914. color:var(--w-text-light) !important;
  3915. }
  3916.  
  3917.  
  3918.  
  3919. `;
  3920. const footer = `
  3921. .bili-footer {
  3922. color:var(--w-text-light) !important;
  3923. background:var(--w-bg-darker) !important;
  3924. }
  3925.  
  3926. .dark .bili-footer p {
  3927. color:var(--w-text-light) !important;
  3928. }
  3929.  
  3930. `;
  3931. const header = `
  3932. .bb-comment, .comment-bilibili-fold {
  3933. }
  3934.  
  3935. `;
  3936. const login = `
  3937.  
  3938. .dark .tab__form,
  3939. .dark .tab__form .form__item input ,
  3940. .dark .tab__form .form__item input::placeholder,
  3941. .dark .tab__form .form__item input:focus,
  3942. .dark .bili-mini-content-wp {
  3943. background:var(--w-bg-darker) !important;
  3944. color:var(--w-text) !important;
  3945. }
  3946.  
  3947.  
  3948. .dark .tab__form {
  3949. border:1px solid var(--w-text) !important;
  3950. }
  3951.  
  3952.  
  3953. .dark .bili-mini-customer-title,
  3954. .dark .bili-mini-content-wp .login-scan-title,
  3955. .dark .bili-mini-content-wp .login-scan-desc p,
  3956. .dark .login-tab-item[data-v-35ff7abe],
  3957. .dark .login-tab-item, .dark .login-sns-name,
  3958. .dark .login-agreement-wp p,
  3959. .dark .tab__form .form__item .form_info {
  3960. color:var(--w-text) !important;
  3961. }
  3962.  
  3963. .dark .btn_primary.disabled[data-v-327e145a],
  3964. .dark .btn_primary.disabled,
  3965. .dark .btn_primary,
  3966. .dark .btn_primary[data-v-327e145a],
  3967. .dark .btn_other,
  3968. .dark .btn_other[data-v-327e145a] {
  3969. color:var(--w-text-light) !important;
  3970. background:var(--w-bg-darker) !important;
  3971. border:1px solid var(--w-text-light) !important;
  3972. }
  3973.  
  3974. .dark .btn_other:hover,
  3975. .dark .btn_primary:hover,
  3976. .dark .btn_primary[data-v-327e145a]:hover,
  3977. .dark .btn_other[data-v-327e145a]:hover {
  3978. color:var(--w-blue-link-hover) !important;
  3979. border-color: var(--w-blue-link-hover) !important;
  3980. background:var(--w-bg-darker) !important;
  3981. }
  3982.  
  3983.  
  3984. .dark .tab__form .form__item input ,
  3985. .dark .tab__form .form__item input::placeholder,
  3986. .dark .tab__form .form__item input:focus {
  3987. border:none !important;
  3988. }
  3989.  
  3990.  
  3991.  
  3992. `;
  3993. const page_num = `
  3994.  
  3995.  
  3996. .dark .be-pager-options-elevator {
  3997. color:var(--w-text-light) !important;
  3998. }
  3999.  
  4000. .dark .be-pager-item-active,
  4001. .dark .be-pager-options-elevator input {
  4002. background:var(--w-bg-darker) !important;
  4003. }
  4004.  
  4005. .dark .be-pager-next,
  4006. .dark .be-pager-prev,
  4007. .dark .be-pager-item {
  4008. color:var(--w-text-light) !important;
  4009. background:var(--w-bg-darker) !important;
  4010. border:1px solid var(--w-text-light) !important;
  4011. }
  4012.  
  4013.  
  4014. .dark .be-pager-next:hover,
  4015. .dark .be-pager-prev:hover,
  4016. .dark .be-pager-item:hover
  4017. {
  4018. color:var(--w-blue-link-hover) !important;
  4019. border-color: var(--w-blue-link-hover) !important;
  4020. background:var(--w-bg-darker) !important;
  4021. }
  4022.  
  4023. .dark .be-pager-item .be-pager-item-active,
  4024. .dark .be-pager-item-active {
  4025. color :var(--w-blue-link-hover) !important;
  4026. border-color :var(--w-blue-link-hover) !important;
  4027. }
  4028.  
  4029. `;
  4030. const videoToolsDarkCss = `
  4031.  
  4032. .dark .main-container .tool-bar *,
  4033. .dark .main-container .ep-list-wrapper *,
  4034. .dark .ep-section-module *,
  4035. .dark .nav-tools *,
  4036. .dark .toolbar *,
  4037.  
  4038. .dark .main-container .review-module .review-list *,
  4039. .dark .main-container .tool-bar .mobel-info .mobel-more {
  4040. color:var(--w-text-light) !important;
  4041. border-color: var(--w-border) !important;
  4042. outline-color: var(--w-border) !important;
  4043. background-color:var(--w-bg-darker) !important;
  4044. }
  4045.  
  4046. `;
  4047. const root = `
  4048. :root {
  4049. --w-brand: #3aa675;
  4050. --w-light: #e5e7eb;
  4051. --w-white: #fff;
  4052. --w-brand-light: #349469;
  4053. --w-bg: #22272e;
  4054. --w-bg-light: #2b313a;
  4055. --w-bg-lighter: #262c34;
  4056. --w-bg-dark: #343b44;
  4057. --w-bg-darker: #37404c;
  4058. --w-bg-darker: var(--w-bg-dark);
  4059. --w-text: #adbac7;
  4060. --w-text-light: #cbd4dc;
  4061. --w-text-lighter: #cdd6dd;
  4062. --w-text-lightest: #8094a8;
  4063. --w-border: #3e4c5a;
  4064. --w-border-dark: #34404c;
  4065. --w-blue-link-hover:#00aeec;
  4066. --w-skeleton:#494f57;
  4067. }
  4068. .dark body,
  4069. .dark #app {
  4070. --v_bg1: var(--w-bg-darker);
  4071. --v_bg2: var(--w-bg-darker);
  4072. --v_bg3: var(--w-bg-darker);
  4073. --v_bg1_float: var(--w-bg-darker);
  4074. --v_bg2_float: var(--w-bg-darker);
  4075. --v_text_white: var(--w-white);
  4076. --v_text1: var(--w-text);
  4077. --v_text2: var(--w-text-light);
  4078. --v_text3: var(--w-text-lighter);
  4079. --v_text4: var(--w-text-lightest);
  4080. --v_line_light: var(--w-text-lighter);
  4081. --v_line_regular: var(--w-text-lighter);
  4082. --v_line_bold: var(--w-text-lightest);
  4083. --v_graph_white:var(--w-text);
  4084. --v_graph_bg_thin: var(--w-bg-darker);
  4085. --v_graph_bg_regular: var(--w-bg-darker);
  4086. --v_graph_bg_thick: var(--w-bg);
  4087. --v_graph_weak: var(--w-text);
  4088. --v_graph_medium: var(--w-text-light);
  4089. --v_graph_icon: var(--w-text-lightest);
  4090. --v_shadow: var(--w-text);
  4091. --v_text_hover: var(--w-blue-link-hover);
  4092. --v_text_active:var(--w-blue-link-hover);
  4093. --v_text_disabled: #C9CCD0 ;
  4094. --v_line_border: var(--w-text-lighter);
  4095. --v_line_bolder_hover: var(--w-text-lightest);
  4096. --v_line_bolder_active: var(--w-text-lightest);
  4097. --v_line_bolder_disabled: var(--w-text);
  4098.  
  4099. }
  4100.  
  4101. .dark body,
  4102. .dark #app {
  4103. --bg1: var(--v_bg1);
  4104. --bg2: var(--v_bg2);
  4105. --bg3: var(--v_bg3);
  4106. --bg1_float: var(--v_bg1_float);
  4107. --bg2_float: var(--v_bg2_float);
  4108. --text_white: var(--v_text_white);
  4109. --text1: var(--v_text1);
  4110. --text2: var(--v_text2);
  4111. --text3: var(--v_text3);
  4112. --text4: var(--v_text4);
  4113. --line_light: var(--v_line_light);
  4114. --line_regular: var(--v_line_regular);
  4115. --line_bold: var(--v_line_bold);
  4116. --graph_white: var(--v_graph_white);
  4117. --graph_bg_thin: var(--v_graph_bg_thin);
  4118. --graph_bg_regular: var(--v_graph_bg_regular);
  4119. --graph_bg_thick: var(--v_graph_bg_thick);
  4120. --graph_weak: var(--w-text);
  4121. --graph_medium: var(--w-text-light);
  4122. --graph_icon: var(--w-text-lightest);
  4123. --shadow: var(--w-text);
  4124. --text_hover: var(--v_text_hover);
  4125. --text_active: var(--v_text_active);
  4126. --text_disabled: var(--v_text_disabled);
  4127. --line_border: var(--v_line_border);
  4128. --line_bolder_hover: var(--v_line_bolder_hover);
  4129. --line_bolder_active: var(--v_line_bolder_active);
  4130. --line_bolder_disabled: var(--v_line_bolder_disabled);
  4131. --b_text1: var(--text1);
  4132. --b_text2: var(--text2);
  4133. --b_text3: var(--text3);
  4134. --b_text4: var(--text4);
  4135. }
  4136.  
  4137.  
  4138.  
  4139.  
  4140. `;
  4141. const common = `
  4142. ${root}
  4143. ${header}
  4144. ${footer}
  4145. ${login}
  4146. ${page_num}
  4147. ${comment}
  4148. ${dialog}
  4149. ${videoToolsDarkCss}
  4150. `;
  4151. const douga = /.*:\/\/www\.bilibili\.com\/v\/douga\/.*/.test(local_url) ? `
  4152.  
  4153.  
  4154. .dark .home-cell-desc-title[data-v-350d21cc],.dark .home-cell-desc-title,
  4155. .dark .home-cell-desc-subtitle[data-v-350d21cc], .with-up-space,.dark .home-cell-desc-subtitle[data-v-350d21cc], .with-up-space[data-v-350d21cc]
  4156. {
  4157. color:var(--w-text-light) !important;
  4158. }
  4159.  
  4160.  
  4161. .dark .channel-layout,
  4162. .dark channel-nav{
  4163. border: 1px solid var(--w-border) !important;
  4164. color:var(--w-text-light) !important;
  4165. background:var(--w-bg-darker) !important;
  4166. }
  4167.  
  4168.  
  4169.  
  4170. .dark .nav-tool-container .section:hover,
  4171. .dark .nav-tool-container .section[data-v-3b26ecb6]:hover {
  4172. color:var(--w-blue-link-hover) !important;
  4173. border-color: var(--w-blue-link-hover) !important;
  4174. background:var(--w-bg-darker) !important;
  4175. }
  4176.  
  4177. .dark .channel-layout,
  4178. .dark channel-nav,
  4179. .dark .bili-rank-list-video .bili-rank-list-video__item:nth-of-type(2n) {
  4180. background:var(--w-bg-darker) !important;
  4181. }
  4182.  
  4183.  
  4184. .dark .bili-rank-list-video .bili-rank-list-video__item:nth-of-type(2n + 1) {
  4185. background-color:var(--w-bg) !important;
  4186. }
  4187.  
  4188.  
  4189.  
  4190.  
  4191.  
  4192. ` : ``;
  4193. const guochuang = /.*:\/\/www\.bilibili\.com\/guochuang\/.*/.test(local_url) ? `
  4194. .dark .spread-module .t,.dark .spread-module,
  4195. .dark .pgc-rank-list .rank-item .ri-detail .ri-title,.dark .pgc-rank-list .rank-item .ri-detail .ri-point,
  4196. .dark .name, .dark .new-stat-module .zone-title .headline .name,.dark .headline .name,
  4197. .dark .index-entry-wrapper .filter-block-title span,
  4198. .dark .block-area,.dark .block-area .timeline-title .headline .name,
  4199. .dark .block-area .block-left .block-header .block-title,
  4200. .dark .video-item-biref .biref-info .biref-title,
  4201. .dark .handpick-right-module .block-header .block-title {
  4202. color:var(--w-text-light) !important;
  4203. }
  4204.  
  4205. .dark .video-item-biref .biref-info .biref-title:hover {
  4206. color:var(--w-blue-link-hover) !important;
  4207. }
  4208.  
  4209. .dark .spread-module .num {
  4210. background:var(--w-bg-darker) !important;
  4211. color:var(--w-text-light) !important;
  4212. }
  4213.  
  4214. .dakr .block-area .timeline-toggle-block .timeline-toggle-btn {
  4215. background: none !important;
  4216. }
  4217.  
  4218.  
  4219.  
  4220. .dark .timeline-box .timeline-item .item-right p.num a,
  4221. .dark .timeline-box .timeline-item .item-right p.num span,
  4222. .dark .new-stat-module .zone-title .headline .new-stat-more,
  4223. .dark .back-top-tools .tool-item,.dakr .block-area .timeline-toggle-block .timeline-toggle-btn,
  4224. .dark .sec-rank .more-link,.dark .pgc-rank-dropdown,.dark .pgc-rank-dropdown .dropdown-list,
  4225. .dark .random-change {
  4226. border: 1px solid var(--w-border) !important;
  4227. color:var(--w-text-light) !important;
  4228. background:var(--w-bg-darker) !important;
  4229. }
  4230.  
  4231. .dakr .block-area .timeline-toggle-block .timeline-toggle-btn:hover,
  4232. .dark .new-stat-module .zone-title .headline .new-stat-more:hover,
  4233. .dark .timeline-box .timeline-item .item-right p.num a:hover,
  4234. .dark .timeline-box .timeline-item .item-right p.num span:hover,
  4235. .dark .sec-rank .more-link:hover,.dark .back-top-tools .tool-item:hover,
  4236. .dark .random-change:hover {
  4237. color:var(--w-blue-link-hover) !important;
  4238. border-color: var(--w-blue-link-hover) !important;
  4239. background:var(--w-bg-darker) !important;
  4240. }
  4241.  
  4242.  
  4243.  
  4244.  
  4245.  
  4246.  
  4247.  
  4248. ` : ``;
  4249. const home = `
  4250.  
  4251. /* 黑色主题模式下骨架屏 */
  4252. .dark .bili-video-card__skeleton--cover,
  4253. .dark .bili-video-card__skeleton,
  4254. .dark .bili-video-card__skeleton--right,
  4255. .dark .bili-video-card__skeleton hide,
  4256. .dark .bili-video-card__skeleton--text.short,
  4257. .dark .bili-video-card__skeleton--light,
  4258. .dark .bili-video-card__skeleton--text {
  4259. background:var(--w-skeleton) !important;
  4260. }
  4261.  
  4262.  
  4263. /* 黑色主题模式下不显示壁纸 */
  4264. .dark #bili-header-banner-img {
  4265. display:none !important;
  4266. }
  4267.  
  4268.  
  4269.  
  4270. .dark body,.dark #header-v3,.dark .app-v1,.dark .app-v2,.dark .app-v3,.dark .app-v4,.dark .app-v5,
  4271. .dark #app,.dark .v-img, .dark .bili-header * ,
  4272. .dark .header-channel,.dark .header-channel-fixed-right-item,
  4273. .dark .bili-video-card__wrap,.dark .bili-header .game,
  4274. .dark .large-header,
  4275. .dark .bili-header .slide-down,
  4276. .dark .bili-header .bili-header__channel .channel-entry-more__link,
  4277. .dark .bili-header .bili-header__channel .channel-link,
  4278. .dark .bili-header .bili-header__channel .channel-items__left,
  4279. .dark .bili-header .bili-header__channel,
  4280. .dark .bili-header .manga,
  4281. .dark .bili-header .manga-right-title,
  4282. .dark .bili-header .header-fav-card__image,
  4283. .dark .bili-header .header-fav-card,
  4284. .dark .bili-header .search-panel,
  4285. .dark .bili-header .center-search-container .center-search__bar #nav-searchform.is-actived .nav-search-content,
  4286. .dark .bili-header .center-search-container .center-search__bar #nav-searchform.is-focus .nav-search-content,
  4287. .dark .history-panel-popover,.dark .bili-header .bili-header__banner,
  4288. .dark .bili-header .center-search-container .center-search__bar #nav-searchform,
  4289. .dark .bili-header .center-search-container .center-search__bar .nav-search-content .nav-search-input:focus,
  4290. .dark .bili-header .avatar-panel-popover .level-item .level-item__bar .level-progress__inner,
  4291. .dark .bili-header .avatar-panel-popover .level-item .level-item__lv0,
  4292. .dark .bili-header .avatar-panel-popover .split-line,
  4293. .dark .bili-header .avatar-panel-popover .logout-item,
  4294. .dark .video-container-v1 .danmaku-box .danmaku-wrap,
  4295. .dark #i_cecream {
  4296. background:var(--w-bg-darker) !important;
  4297. color:var(--w-text) !important;
  4298. }
  4299.  
  4300.  
  4301. .dark .bili-header .header-avatar-wrap .header-avatar-wrap--container .bili-avatar,
  4302. .dark .bili-header .game-left,.dark .bili-header .game-right,
  4303. .dark .bili-header .bili-header__channel .channel-items__left {
  4304. border-color:var(--w-border-dark) !important;
  4305. }
  4306.  
  4307.  
  4308. .dark .feed-roll-btn .primary-btn,
  4309. .dark .header-channel-fixed-right-item,
  4310. .dark .bili-header .bili-header__channel .channel-entry-more__link,
  4311. .dark .bili-header .bili-header__channel .channel-link {
  4312. border:1px solid var(--w-text-light) !important;
  4313. }
  4314.  
  4315.  
  4316. .dark .bili-header .search-panel {
  4317. border-color:1px solid var(--w-border) !important;
  4318. }
  4319.  
  4320.  
  4321.  
  4322. .dark .header-channel-fixed-right-item:hover,
  4323. .dark .bili-header,
  4324. .dark .bili-header .live-left-list,
  4325. .dark .bili-header .bili-header__channel .channel-entry-more__link,
  4326. .dark .history-panel-popover .header-tabs-panel__item,
  4327. .dark .bili-header .avatar-panel-popover .vip-item .senior,
  4328. .dark .bili-header .avatar-panel-popover .coins-item .coin-item__text ,
  4329. .dark .bili-header .avatar-panel-popover .coins-item .coin-item__num ,
  4330. .dark .bili-header .avatar-panel-popover .level-item .level-item__bar--tag>span,
  4331. .dark .bili-header .center-search-container .center-search__icon,
  4332. .dark .bili-header .bili-header__channel .channel-link {
  4333. border-color: var(--w-text) !important;
  4334. }
  4335.  
  4336.  
  4337. .dark a,.dark .roll-btn,
  4338. .dark .bili-header .left-entry .download-wrapper .download-top-title .main,
  4339. .dark .bili-header .left-entry .download-wrapper .download-top-title .sub,
  4340. .dark .bili-header .left-entry .download-wrapper .download-bottom,
  4341. .dark .bili-header .right-entry__outside .right-entry-icon ,
  4342. .dark .bili-header .slide-down .left-entry .mini-header__title,
  4343. .dark .bili-header .slide-down .left-entry .entry-title,
  4344. .dark .bili-header .slide-down .left-entry .default-entry,
  4345. .dark .bili-header .slide-down .left-entry .default-entry span,
  4346. .dark .bili-header .slide-down .left-entry .loc-mc-box__text,
  4347. .dark .bili-header .slide-down .left-entry .download-entry,
  4348. .dark .bili-header .slide-down .left-entry .loc-entry ,
  4349. .dark .bili-video-card .bili-video-card__info--date,
  4350. .dark .bili-video-card .bili-video-card__info--author,
  4351. .dark .bili-header .bili-header__channel .channel-link__right,
  4352. .dark .bili-header .bili-header__channel .channel-link__left,
  4353. .dark .right-entry-text,.dark .channel-entry-popover .name, .dark .more-channel-popover .name ,
  4354. .dark .icon-title,.dark .bili-header .slide-down .right-entry .right-entry__outside .right-entry-icon,
  4355. .dark .bili-header .live .title,.dark .bili-header .live-left-list-item,
  4356. .dark .bili-header .live-left-list-item-text,
  4357. .dark .bili-header .game-right-title,
  4358. .dark .bili-header .game-left-panel-item-title,
  4359. .dark .bili-header .game-left-banner-title,
  4360. .dark .bili-header .manga-right-list-item-text,
  4361. .dark .bili-header .header-fav-card__info--name,
  4362. .dark .favorite-panel-popover__nav *,
  4363. .dark .favorite-panel-popover__nav .tab-item,
  4364. .dark .favorite-panel-popover__nav .tab-item__num,
  4365. .dark .bili-header .header-fav-card__info--title,
  4366. .dark .dark .history-panel-popover .header-tabs-panel__content--date,
  4367. .dark .history-panel-popover .header-history-card__info--title,
  4368. .dark .header-tabs-panel *,
  4369. .dark .header-tabs-panel,
  4370. .dark .header-tabs-panel__content--date,
  4371. .dark .bili-header .center-search-container .center-search__bar .nav-search-content .nav-search-input,
  4372. .dark .bili-header .avatar-panel-popover .links-item .single-link-item,
  4373. .dark .bili-header .avatar-panel-popover .vip-item__link,
  4374. .dark .bili-header .avatar-panel-popover .vip-item .senior,
  4375. .dark .bili-header .center-search-container .center-search__bar .nav-search-content .nav-search-clean svg,
  4376. .dark .bili-header .avatar-panel-popover .level-item .level-item__text,
  4377. .dark .bili-video-card .bili-video-card__info--tit>a {
  4378. color:var(--w-text) !important;
  4379. }
  4380.  
  4381.  
  4382.  
  4383. .dark .v-inline-window__close-icon,.dark .bili-header .center-search-container .center-search__bar .nav-search-btn,
  4384. .dark .vip-entry-desc-subtitle,.dark .vip-entry-desc-title,.dark .vip-entry-desc-subtitle,
  4385. .dark .bili-header .avatar-panel-popover .coins-item .coin-item__num,
  4386. .dark .bili-header .avatar-panel-popover .counts-item .single-count-item .count-num {
  4387. color:var(--w-text-light) !important;
  4388. }
  4389.  
  4390. .dark a:hover,.dark .roll-btn:hover,
  4391. .dark .vip-entry-desc-subtitle:hover,
  4392. .dark .bili-header .avatar-panel-popover .counts-item .single-count-item:hover .count-text,
  4393. .dark .bili-header .avatar-panel-popover .counts-item .single-count-item:hover .count-num ,
  4394. .dark .bili-header .avatar-panel-popover .vip-item__link:hover,
  4395. .dark .bili-header .manga-right-title:hover,
  4396. .dark .bili-header .game-right-list-item:hover,
  4397. .dark .bili-header .manga-right-list-item-text:hover,
  4398. .dark .bili-header .header-fav-card__info--name:hover,
  4399. .dark .bili-header .header-fav-card__info--title:hover,
  4400. .dark .bili-header .left-entry .download-wrapper .download-bottom:hover ,
  4401. .dark .bili-header .live-left-list-item-text:hover,
  4402. .dark .bili-header .game-right-title:hover,
  4403. .dark .bili-header .game-left-panel-item-title:hover,
  4404. .dark .bili-header .slide-down .left-entry .default-entry span:hover,
  4405. .dark .bili-video-card .bili-video-card__info--date:hover,
  4406. .dark .bili-header .bili-header__channel .channel-link__right:hover,
  4407. .dark .bili-header .bili-header__channel .channel-link__left:hover,
  4408. .dark .bili-video-card .bili-video-card__info--author:hover,.dark .right-entry-text:hover,
  4409. .dark .icon-title:hover,.dark .bili-header .slide-down .right-entry .right-entry__outside .right-entry-icon:hover,
  4410. .dark .history-panel-popover .header-history-card__info--title:hover
  4411. .dark .bili-video-card .bili-video-card__info--tit>a:hover {
  4412. color:var(--w-blue-link-hover) !important;
  4413. }
  4414.  
  4415.  
  4416. .dark .header-channel-fixed-right-item:hover,
  4417. .dark .channel-entry-popover .name:hover, .dark .more-channel-popover .name:hover,
  4418. .dark .bili-header .bili-header__channel .channel-entry-more__link:hover,
  4419. .dark .bili-header .bili-header__channel .channel-link:hover,
  4420. .dark .channel-panel__item:hover,
  4421. .dark .dynamic-video-item:hover,
  4422. .dark .bili-header .header-dynamic-list-item .header-dynamic__box--right:hover,
  4423. .dark .bili-video-card .bili-video-card__info--tit>a:hover {
  4424. color:var(--w-blue-link-hover) !important;
  4425. border-color: var(--w-blue-link-hover) !important;
  4426. background:var(--w-bg-darker) !important;
  4427. }
  4428.  
  4429.  
  4430.  
  4431. /* all */
  4432. /* background 和 白色 border 和 白色 link */
  4433. .dark .bili-header .live,
  4434. .dark .bili-header .avatar-panel-popover,
  4435. .dark .history-tip,
  4436. .dark .bili-video-card .bili-video-card__info--icon-text,
  4437. .dark .v-popover-content,.dark .wnd_bottom .r-l,
  4438. .dark .history-panel-popover .header-tabs-panel__content .view-all-history-btn,
  4439. .dark .bili-header .histories .history-item,
  4440. .dark .bili-header .left-entry .download-wrapper .download-top-content .button,
  4441. .dark .bili-header .avatar-panel-popover .links-item .link-red-tip,
  4442. .dark .bili-header .avatar-panel-popover .links-item .link-beta-tip,
  4443. .dark .vip-entry-containter,.dark vip-entry-btn,
  4444. .dark .vip-entry-btn[data-v-ae740c54],
  4445. .dark .bili-header .center-search-container .center-search__bar #nav-searchform,
  4446. .dark .feed-roll-btn .primary-btn{
  4447. color:var(--w-text-light) !important;
  4448. background:var(--w-bg-darker) !important;
  4449. border:1px solid var(--w-text-light) !important;
  4450. }
  4451.  
  4452.  
  4453.  
  4454. /* background 和 蓝色 border 和 蓝色 link */
  4455. .dark .wnd_bottom .r-l:hover,
  4456. .dark .vip-entry-containter:hover,.dark vip-entry-btn:hover,
  4457. .dark .vip-entry-btn[data-v-ae740c54]:hover,
  4458. .dark .bili-video-card .bili-video-card__info--icon-text:hover,
  4459. .dark .bili-header .game-right-list-item:hover,
  4460. .dark .history-panel-popover .header-tabs-panel__content .view-all-history-btn:hover,
  4461. .dark .bili-header .message-entry-popover .message-inner-list__item:hover,
  4462. .dark .bili-header .left-entry .download-wrapper .download-top-content .button:hover,
  4463. .dark .bili-header .histories .history-item:hover,
  4464. .dark .bili-header .center-search-container .center-search__bar .nav-search-btn:hover,
  4465. .dark .feed-roll-btn .primary-btn:hover{
  4466. color:var(--w-blue-link-hover) !important;
  4467. border-color: var(--w-blue-link-hover) !important;
  4468. background:var(--w-bg-darker) !important;
  4469. }
  4470. /******************************************************************/
  4471.  
  4472.  
  4473. /* background 和 蓝色 border */
  4474. .dark .trending-item:hover,
  4475. .dark .header-history-card:hover,
  4476. .dark .header-dynamic-list-item:hover,
  4477. .dark .header-history-card .header-history-video:hover,
  4478. .dark .bili-header .avatar-panel-popover .links-item .single-link-item:hover,
  4479. .dark .bili-header .header-fav-card:hover {
  4480. border:1px solid var(--w-text-light) !important;
  4481. background:var(--w-bg-darker) !important;
  4482. }
  4483.  
  4484.  
  4485.  
  4486. /* 蓝色border */
  4487. .dark .bili-header .center-search-container .center-search__bar #nav-searchform.is-focus,
  4488. .dark .suggest-item:hover {
  4489. border:1px solid var(--w-text) !important;
  4490. background:var(--w-bg-darker) !important;
  4491. }
  4492.  
  4493.  
  4494.  
  4495. /* border none */
  4496. .dark .bili-header .center-search-container .center-search__bar .nav-search-content,
  4497. .dark .bili-header .center-search-container .center-search__bar .nav-search-content .nav-search-input:focus,
  4498. .dark .bili-header .search-panel {
  4499. border: none !important;
  4500. }
  4501.  
  4502.  
  4503. /* fill */
  4504. .dark .bili-header .avatar-panel-popover .level-item .level-item__bar--next svg .level-bg {
  4505. fill: var(--w-text); !important;
  4506. }
  4507.  
  4508. `;
  4509. const commonDark = `
  4510. .dark * {
  4511. color:var(--w-text-light) !important;
  4512. border-color: var(--w-border) !important;
  4513. background-color:var(--w-bg-darker) !important;
  4514. outline-color: var(--w-border) !important;
  4515. }
  4516.  
  4517. `;
  4518. const css$1 = commonDark;
  4519. const is_account = local_url.indexOf("https://account.bilibili.com/") !== -1;
  4520. const account_css = is_account ? `
  4521. ${css$1}
  4522.  
  4523. ` : ``;
  4524. const app_bilibili = /https:\/\/app\.bilibili\.com\/.*/.test(local_url) ? `
  4525.  
  4526. ${css$1}
  4527.  
  4528. .dark .head-img,
  4529. .dark .header-wrap {
  4530. background:var(--w-bg-darker) !important;
  4531. }
  4532. ` : ``;
  4533. const game_bilibili = /https:\/\/game\.bilibili\.com\/.*/.test(local_url) ? `
  4534. ${css$1}
  4535. .dark span,.dark a,.dark p,.dark h1,.dark h2,.dark h3,.dark h4,.dark h5,
  4536. .dark .aside-wrap_2TTgM .anchor_wrapper_2leFH .anchor_item_3DKWq .text_H0qLc,
  4537. .dark .gameSns-content-account-text_2kf1l .title_3cbN0,.dark .gameSns-content-account-text_2kf1l .subtitle_3xtPu,
  4538. .dark .contactUs-content-info-item_3hznU .text_NvNTR,.dark .mine-header-userInfo_2PEyA .user-basic-nav_3ydDD .user-statistics-type_2qxNK,
  4539. .dark .mine-header-userInfo_2PEyA .user-basic-nav_3ydDD .user-statistics-num_13v1B,
  4540. .dark .gameSns-content-other-account_9YJ6O .wechat-text_2GmEa, .dark .gameSns-content-other-account_9YJ6O .weibo-text_35duF,
  4541. .dark .Card-header_1d4vx .card-title_2RmHu .title_SE4va,.dark .game-item-footer-score_2F75T .gameScoreNum_EuGJV,
  4542. .dark .Card-header_1BQ_x .card-title_HKAAg,.dark .collection-wrap_19zMo .collection-item_1UBgM .collection-item-game-name_c4Qj2,
  4543. .dark .collection-wrap_19zMo .collection-item_1UBgM .collection-item-game-count_SEbUq,
  4544. .dark .game-item-footer-name_2wzwp,.dark .game-item-footer-type_wMU_g,.dark .game-item-footer-no_269PI,
  4545. .dark .list-item-cont_27du8 .testGameItem_1xvId .gameDes_1vyj7 .gameScore-no_UmJz1,
  4546. .dark .bili-game-footer .bili-game-footer-content .bili-game-footer-content-record,
  4547. .dark .bili-game-footer .bili-game-footer-content .bili-game-footer-content-record p,
  4548. .dark .list-item-cont_27du8 .testGameItem_1xvId .gameDes_1vyj7 .gameScore_OHEKi .gameScoreNum_2smPo,
  4549. .dark .list-item-cont_27du8 .testGameItem_1xvId .gameDes_1vyj7 .gameName_OGhFc,
  4550. .dark .Card-header_3tA8E .card-title_3s7_S, .dark .hotActivity-item-time_h-F8o,
  4551. .dark .list-item-title_IY-UG .date_cylZ8, .dark .list-item-title_IY-UG .games-num_2LlQZ,
  4552. .dark .list-item-cont_1zPV3 .hotGameItem_EJS60 .gameDes_2fvpP .gameName_2u5sS,
  4553. .dark .loadComplete-txt_2z5n_,.dark .Card-header_1d4vx .card-title_2RmHu .title_SE4va,
  4554. .dark .Card-recomend-item_1FSJD .card-content_1oudE .card-content-title_370f1>div,
  4555. .dark .feed-wrap_3BqTh .card-game-common_2b0P9 .card-content-info-text_1DwU6 .card-content-info-name_2y0cn,
  4556. .dark .feed-wrap_3BqTh .card-game-common_2b0P9 .card-content-info-text_1DwU6 .card-content-info-des_27h0g,
  4557. .dark .Bookswiper_3q1oK .gallery-thumbs_2oCbc .swiper-thumb-slide .gallery-thumbs-item_3mq8s .game-info_2X55m .game-info-tag_3lnOf,
  4558. .dark .Bookswiper_3q1oK .gallery-thumbs_2oCbc .swiper-thumb-slide .gallery-thumbs-item_3mq8s .game-info_2X55m .game-info-name_1X85G,
  4559. .dark .Card-recomend-item_1FSJD .card-content_1oudE .card-content-footer_2WHGE .score-degree_DnAAx,
  4560. .dark .Card-recomend-item_1FSJD .card-content_1oudE .card-content-footer_2WHGE .score-comment_3P3Er,
  4561. .dark .Card-recomend-item_1FSJD .card-content_1oudE .card-content-des_1sNxd{
  4562. color:var(--w-text-light) !important;
  4563. }
  4564.  
  4565.  
  4566. .dark .game-item-footer-name_2wzwp:hover,
  4567. .dark .game-item-footer-type_wMU_g:hover,
  4568. .dark .list-item-cont_27du8 .testGameItem_1xvId .gameDes_1vyj7 .gameName_OGhFc:hover,
  4569. .dark .video-item-biref .biref-info .biref-title:hover {
  4570. color:var(--w-blue-link-hover) !important;
  4571. }
  4572.  
  4573.  
  4574. .dark .bili-game-footer,.dark .list_item_1gw1l,.dark .scroll-wrap_1vXo6 ,
  4575. .dark .Card-header_1d4vx .card-title_2RmHu .title_SE4va,
  4576. .dark .bili-game-header-nav .bili-game-header-nav-bar {
  4577. background:var(--w-bg-darker) !important;
  4578. color:var(--w-text-light) !important;
  4579. }
  4580.  
  4581.  
  4582. .dark .Home_1ebVE,
  4583. .dakr .block-area .timeline-toggle-block .timeline-toggle-btn {
  4584. background: none !important;
  4585. }
  4586.  
  4587.  
  4588. .dark .loadingTip-loadMore_1ydD3 .load_btn_2aV1A,.dark .body_RAI9S .aside_17bL3,
  4589. .dark .category-item_3tacB,.dark .collection-wrap_19zMo .collection-item_1UBgM,
  4590. .dark .tag_2uAvO{
  4591. border: 1px solid var(--w-border) !important;
  4592. color:var(--w-text-light) !important;
  4593. background:var(--w-bg-darker) !important;
  4594. }
  4595.  
  4596. .dark .category-item_3tacB:hover,.dark .Card-header_1BQ_x .btn-more_1RGB7 a:hover,
  4597. .dark .loadingTip-loadMore_1ydD3 .load_btn_2aV1A:hover,
  4598. .dark .tag_2uAvO:hover {
  4599. color:var(--w-blue-link-hover) !important;
  4600. border-color: var(--w-blue-link-hover) !important;
  4601. background:var(--w-bg-darker) !important;
  4602. }
  4603.  
  4604. ` : ``;
  4605. const is_link$2 = local_url.indexOf("https://link.bilibili.com/") !== -1;
  4606. const link_css$2 = is_link$2 ? `
  4607. ${css$1}
  4608.  
  4609. ` : ``;
  4610. const is_link$1 = local_url.indexOf("https://message.bilibili.com/") !== -1;
  4611. const link_css$1 = is_link$1 ? `
  4612.  
  4613. ${css$1}
  4614.  
  4615.  
  4616. ` : ``;
  4617. const is_link = local_url.indexOf("https://live.bilibili.com/") !== -1;
  4618. const link_css = is_link ? `
  4619.  
  4620. .dark * {
  4621. color:var(--w-text-light) !important;
  4622. border-color: var(--w-border) !important;
  4623. }
  4624.  
  4625. .dark {
  4626. color:var(--w-text-light) !important;
  4627. border-color: var(--w-border) !important;
  4628. background-color:var(--w-bg-darker) !important;
  4629. }
  4630.  
  4631. .dark #webShare .bili-share-pc,
  4632. .dark .live-non-revenue-player .sc-gsnTZi div {
  4633. color:var(--w-text-light) !important;
  4634. border-color: var(--w-border) !important;
  4635. background-color:var(--w-bg-darker) !important;
  4636. }
  4637.  
  4638. ` : ``;
  4639. const other = `
  4640. ${account_css}
  4641. ${app_bilibili}
  4642. ${game_bilibili}
  4643. ${link_css$2}
  4644. ${link_css$1}
  4645. ${link_css}
  4646. `;
  4647. const read = /.*:\/\/.*\.bilibili\.com\/read\/.*/.test(local_url) ? `
  4648. .dark p,.dark a,.dark span,
  4649. .dark h1,.dark h2,.dark h3,.dark h4,.dark h5,.dark h6,
  4650. .dark .iconfont,
  4651. .dark #article-content,.dark .interaction-info,.dark .interaction-info .toolbar .share-box,
  4652. .dark .normal-article-holder,
  4653. .dark .normal-article-holder h1,
  4654. .dark .normal-article-holder h2,
  4655. .dark .normal-article-holder h3,
  4656. .dark .normal-article-holder h4,
  4657. .dark .normal-article-holder h5,
  4658. .dark .normal-article-holder h6,
  4659. .dark .article-container .title-container .title,
  4660. .dark .article-breadcrumb .breadcrumb-title,
  4661. .dark [class^=article-read-info]>span,
  4662. .dark .right-side-bar .to-top [class^=iconfont],
  4663. .dark .right-side-bar .side-toolbar [class^=toolbar-item],
  4664. .dark .coin-dialog-wrapper .coin-title,.dark .coin-dialog-wrapper .van-icon-guanbi,
  4665. .dark .right-side-bar .side-toolbar .toolbar-item [class^=iconfont]
  4666.  
  4667. {
  4668. color:var(--w-text-light) !important;
  4669. }
  4670.  
  4671. .dark .right-side-bar [class^=to-top],
  4672. .dark .right-side-bar [class^=side-toolbar],
  4673. .dark [class^=follow-btn],
  4674. .dark .coin-dialog-wrapper .confirm-btn,
  4675. .dark .van-popover.van-followed,
  4676. .dark .right-side-bar [class^=catalog],
  4677. .dark .coin-dialog-wrapper,
  4678. .dark .article-read-info .spoiler[data-v-36aefa22],
  4679. .dark .article-read-info .spoiler,
  4680. .dark .article-container {
  4681. border: 1px solid var(--w-border) !important;
  4682. color:var(--w-text-light) !important;
  4683. background:var(--w-bg-darker) !important;
  4684. }
  4685.  
  4686. .dark .article-container ,
  4687. .dark .comment-wrapper .comment-m,
  4688. .dark [class^=followed],
  4689. .dark [class^=article-up-info],
  4690. .dark .right-side-bar [class^=catalog]::after,
  4691. .dark .fixed-top-header {
  4692. color:var(--w-text-light) !important;
  4693. background:var(--w-bg-darker) !important;
  4694. }
  4695.  
  4696.  
  4697.  
  4698. .dark .nav-tool-container .section:hover,
  4699. .dark .right-side-bar .to-top [class^=iconfont]:hover,
  4700. .dark .right-side-bar [class^=to-top]:hover,
  4701. .dark .coin-dialog-wrapper .confirm-btn:hover,
  4702. .dark .nav-tool-container [class^=section]:hover {
  4703. color:var(--w-blue-link-hover) !important;
  4704. border-color: var(--w-blue-link-hover) !important;
  4705. background:var(--w-bg-darker) !important;
  4706. }
  4707.  
  4708.  
  4709. .dark .coin-dialog-wrapper .van-icon-guanbi:hover {
  4710. color:var(--w-blue-link-hover) !important;
  4711. }
  4712.  
  4713.  
  4714. .dark .van-popover.van-followed .follow_dropdown li:hover {
  4715. background:var(--w-bg) !important;
  4716. color:var(--w-blue-link-hover) !important;
  4717. }
  4718.  
  4719.  
  4720.  
  4721.  
  4722.  
  4723. ` : ``;
  4724. const space = /.*:\/\/space\.bilibili\.com\/\d+.*/.test(local_url) ? `
  4725. .dark .list-create {
  4726. background:var(--w-bg) !important;
  4727. }
  4728. .dark .elec .elec-status-bg-grey,
  4729. .dark #page-index #i-ann-content textarea,
  4730. .dark .bili-dyn-item,
  4731. .dark .bili-dyn-card-video__body,
  4732. .dark .bili-rich-text__content,
  4733. .dark .bili-dyn-card-video__desc,
  4734. .dark .bili-dyn-card-video__title,
  4735. .dark .series-item .item-title .qipapnum[data-v-40b5e135],
  4736. .dark .series-item .item-title .qipapnum,
  4737. .dark .contribution-sidenav .contribution-item,
  4738. .dark .album-list__tabs,
  4739. .dark #page-series-index .channel-option.no-channel[data-v-9e6dac30],
  4740. .dark #page-series-index .channel-option.no-channel,
  4741. .dark #page-series-index .channel-option,
  4742. .dark .bili-rich-textarea__inner.empty,
  4743. .dark .note-editor .rich-text-options,
  4744. .dark #web-toolbar,
  4745. .dark .n .n-inner {
  4746. background-color:var(--w-bg-darker) !important;
  4747. color:var(--w-text) !important;
  4748. }
  4749.  
  4750. .dark .n .n-cursor {
  4751. background:var(--w-text-light) !important;
  4752. }
  4753.  
  4754.  
  4755. .dark #page-series-index .channel-option.no-channel p[data-v-9e6dac30],
  4756. .dark #page-series-index .channel-option.no-channel p,
  4757. .dark .album-list__title,.dark .album-list__tab-name,
  4758. .dark .small-item .meta,.dark .n .n-data .n-data-v, .dark .n .n-data .n-data-k,
  4759. .dark #page-series-index .channel-item .channel-name,.dark #page-series-index .channel-item , .dark #page-series-index .channel-item .channel-name[data-v-9e6dac30],
  4760. .dark #page-index .channel.guest .channel-item .channel-title .channel-name, .dark #page-index .channel.guest .channel-name, .dark #page-index .channel-name,
  4761. .dark #page-index .col-2 .section-title,
  4762. .dark #page-index .col-2 .section .user-auth .auth-description,
  4763. .dark .user-info .user-info-title .info-title[data-v-31d5659a],
  4764. .dark .user-info .user-info-title [class^=info-title],
  4765. .dark .user-info .info-content .info-command[data-v-31d5659a],
  4766. .dark .user-info .info-content [class^=info-command],
  4767. .dark .user-info .info-content .info-value[data-v-31d5659a],
  4768. .dark .user-info .info-content [class^=info-value],
  4769. .dark #id-card .idc-content .idc-username,.dark .m-level idc-m-level,
  4770. .dark .idc-meta-item,
  4771. .dark .elec .elec-count,.dark .elec,
  4772. .dark .elec .elec-setting, .elec .elec-total-c-num,
  4773. .dark .elec-total-c,
  4774. .dark .user-info .info-content .info-tags .info-tag .icon-tag[data-v-31d5659a],
  4775. .dark .user-info .info-content .info-tags .info-tag [class^=icon-tag],
  4776. .dark .user-info .info-content .info-tags .info-tag .tag-content[data-v-31d5659a],
  4777. .dark .user-info .info-content .info-tags .info-tag [class^=tag-content],
  4778. .dark #page-video #submit-video-type-filter a .count,
  4779. .dark #page-series-index .channel-index .breadcrumb[data-v-9e6dac30],
  4780. .dark #page-series-index .channel-index [class^=breadcrumb],
  4781. .dark #page-series-index .channel-index .breadcrumb .item.cur[data-v-9e6dac30],
  4782. .dark #page-series-index .channel-index .breadcrumb .item.cur,
  4783. .dark .breadcrumb, .dark .breadcrumb .item.cur, .dark .breadcrumb .item,
  4784. .dark #page-setting .setting-privacy-item .setting-privacy-name,
  4785. .dark #page-setting .setting-privacy-item,
  4786. .dark #page-fav .fav-sidenav .nav-title .text,.dark #page-fav .fav-main .filter-item .text,.dark #page-fav .fav-main .filter-item,.dark #page-fav .fav-main,
  4787. .dark #page-index .channel .empty-state p,.dark #page-index .channel,.dark #page-index p,.dark .private-hint,.dark .section-title,
  4788. .dark #page-fav .fav-main .filter-item,.dark .be-dropdown-item, .dark #page-fav .fav-main .filter-item .filter-type .be-dropdown-item i, .dark #page-fav .fav-main .filter-item .filter-type .be-dropdown-item span, .dark #page-fav .fav-main .filter-item .filter-type .be-dropdown-item p,.dark #page-fav .fav-main .filter-item .filter-type .be-dropdown-item a,
  4789. .dark .favInfo-box .favInfo-details .fav-options .meta,.dark .favInfo-box .favInfo-details .fav-options,
  4790. .dark span,.dark .sub-tabs span, .dark .sub-tabs .filter-content,.dark .sub-tabs,.dark .sub-tab,
  4791. .dark .bili-dyn-title__text,.dark .bili-rich-textarea__inner,
  4792. .dark .bili-dyn-forward-publishing__editor .bili-rich-textarea__inner,
  4793. .dark .bili-popover, .dark .bili-popover__arrow,
  4794. .dark .game-card__info-title[data-v-7c9854da],.dark [class^=game-card__info-title],
  4795. .dark .section-title {
  4796. color:var(--w-text-light) !important;
  4797. }
  4798.  
  4799.  
  4800. .dark #page-setting .setting-tag-list a,
  4801. .dark #page-fav .fav-sidenav .nav-title .text:hover{
  4802. color:var(--w-text-light) !important;
  4803. }
  4804.  
  4805.  
  4806.  
  4807.  
  4808. .dark .bili-rich-textarea__inner,
  4809. .dark .bili-popover, .dark .bili-popover__arrow,
  4810. .dark .section {
  4811. border-color: var(--w-border) !important;
  4812. }
  4813.  
  4814.  
  4815.  
  4816.  
  4817. /* border-color color background */
  4818. .dark .section .count,
  4819. .dark .g-search input,
  4820. .dark #id-card,
  4821. .dark #page-index .col-1,
  4822. .dark #page-fav .fav-main .search-input input,
  4823. .dark .bili-topic-search__popover,
  4824. .dark #page-video #submit-video-type-filter,
  4825. .dark #page-dynamic .col-2 .section,
  4826.  
  4827. .dark #page-index .col-2 .section {
  4828. border-color: var(--w-border) !important;
  4829. color:var(--w-text-light) !important;
  4830. background:var(--w-bg-darker) !important;
  4831. }
  4832.  
  4833. .dark #page-index,.dark #page-index .col-1, .dark #page-index .col-2,
  4834. .dark #page-index .channel, .dark #page-index .channel .channel-item,
  4835. .dark #page-index .col-1 .section-title,.dark #page-index .col-2 .section-title,
  4836. .dark .series-item .split-line[data-v-40b5e135],.dark .series-item .split-line,
  4837. .dark .g-search input:focus {
  4838. border-color: var(--w-text) !important;
  4839. }
  4840.  
  4841. .dark .n .n-inner {
  4842. box-shadow:none !important;
  4843. }
  4844.  
  4845.  
  4846. .dark .col-full,
  4847. .dark .btn,
  4848. .dark .btn.btn-large,
  4849. .dark .btn.btn-large .btn-content[data-v-53027a10],
  4850. .dark .new-elec-trigger,
  4851. .dark .btn.idc-btn.default,
  4852. .dark .elec-status,
  4853. .dark .bili-dyn-more__menu, .dark .be-dropdown-menu,
  4854. .dark #page-series-index .channel-option.no-channel .create-channel[data-v-9e6dac30],
  4855. .dark #page-series-index .channel-option.no-channel .create-channel,
  4856. .dark .favInfo-box.favEmpty .favInfo-details .fav-options .fav-play,
  4857. .dark .favInfo-box.invalid .favInfo-details .fav-options .fav-play,
  4858. .dark .reply-box .box-normal .reply-box-send[data-v-757acbb5]::after,
  4859. .dark .reply-box .box-normal .reply-box-send::after,
  4860. .dark .reply-box .box-normal .reply-box-send,
  4861. .dark .be-dropdown-item:hover,
  4862. .dark .resizable-component .editor-innter,
  4863. .dark .btn.idc-btn.primary {
  4864. color:var(--w-text-light) !important;
  4865. background-color:var(--w-bg-darker) !important;
  4866. border-color: var(--w-text) !important;
  4867. }
  4868.  
  4869.  
  4870.  
  4871. .dark #page-series-index .channel-option.no-channel .create-channel[data-v-9e6dac30]:hover,
  4872. .dark #page-series-index .channel-option.no-channel .create-channel:hover,
  4873. .dark .favInfo-box.favEmpty .favInfo-details .fav-options .fav-play:hover,
  4874. .dark .favInfo-box.invalid .favInfo-details .fav-options .fav-play:hover,
  4875. .dark .btn.primary.btn-large:hover,
  4876. .dark .btn:hover,
  4877. .dark .btn.btn-large .btn-content[data-v-53027a10]:hover,
  4878. .dark .btn.btn-large .btn-content:hover,
  4879. .dark .btn.btn-large:hover,
  4880. .dark .bili-dyn-more__menu:hover,
  4881. .dark .contribution-sidenav .contribution-item:hover,
  4882. .dark .btn:hover,
  4883. .dark .reply-box .box-normal .reply-box-send[data-v-757acbb5]:hover::after,
  4884. .dark .reply-box .box-normal .reply-box-send:hover::after,
  4885. .dark .reply-box .box-normal .reply-box-send,
  4886. .dark .reply-box .box-normal .reply-box-send:hover,
  4887. .dark .new-elec-trigger:hover,
  4888. .dark .elec-status:hover,
  4889. .dark .btn.idc-btn.primary:hover {
  4890. color:var(--w-blue-link-hover) !important;
  4891. border-color: var(--w-blue-link-hover) !important;
  4892. background:var(--w-bg-darker) !important;
  4893. }
  4894.  
  4895. .dark .btn.idc-btn.default:hover {
  4896. color:var(--w-blue-link-hover) !important;
  4897. border:1px solid var(--w-blue-link-hover) !important;
  4898. background:var(--w-bg-darker) !important;
  4899. }
  4900.  
  4901. .dark #page-setting #setting-new-tag-btn,
  4902. .dark #page-setting .setting-tag-list a,
  4903. .dark #page-setting #setting-new-tag {
  4904. background:var(--w-bg) !important;
  4905. border-color: var(--w-text) !important;
  4906. }
  4907.  
  4908. .dark #page-fav .fav-sidenav .fav-item.cur ,
  4909. .dark #page-fav .fav-sidenav .fav-item:hover {
  4910. background:var(--w-bg) !important;
  4911. }
  4912.  
  4913.  
  4914. .dark .h .h-v-host {
  4915. color: var(--w-white) !important;
  4916. background: var(--w-blue-link-hove) !important;
  4917. }
  4918.  
  4919.  
  4920. ` : ``;
  4921. const t = `
  4922.  
  4923.  
  4924. `;
  4925. const video = `
  4926.  
  4927. html {
  4928. --graph_bg_thick:var(--w-border-dark);
  4929. }
  4930.  
  4931.  
  4932.  
  4933. .dark .bili-header__bar,
  4934. .dark .bpx-player-sending-bar,
  4935. .dark .harmony-font,.dark #v_desc,
  4936. .dark .bili-comment.browser-pc,
  4937. .dark .comment-container, .dark .bpx-player-auxiliary .bpx-player-dm-function,
  4938. .dark .reply-header,.dark .arc_toolbar_report,.dark .video-toolbar-left,
  4939. .dark .bui-collapse .bui-collapse-header,
  4940. .dark .bpx-player-auxiliary .bpx-player-collapse .bui-collapse-body,
  4941. .dark .bpx-player-auxiliary .bpx-player-contextmenu.bpx-player-white,
  4942. .dark .bpx-player-auxiliary .bpx-player-dm-wrap,
  4943. .dark .bpx-player-dm-load-status,
  4944. .dark .base-video-sections-v1,
  4945. .dark .video-sections-v1[data-v-482ecf06],.dark .video-sections-v1,
  4946. .dark .video-sections-head_second-line,
  4947. .dark .bili-header .header-login-entry[data-v-fc330406], .dark .bili-header .header-login-entry,
  4948. .dark .vip-login-tip[data-v-fc330406], .dark .vip-login-tip,
  4949. .dark .reply-box.fixed-box[data-v-757acbb5],.dark .reply-box.fixed-box,
  4950. .dark .at-panel .at-list-container .at-list-ground .at-user-list .at-user-item[data-v-78329793],
  4951. .dark .at-panel .at-list-container .at-list-ground .at-user-list .at-user-item,
  4952. .dark .emoji-panel .emoji-content .emoji-info[data-v-c4965e38],.dark .emoji-panel, .dark .emoji-panel .emoji-content,
  4953. .dark .emoji-panel .emoji-tab[data-v-c4965e38],.dark .emoji-panel .emoji-tab,.dark .emoji-panel .emoji-title[data-v-c4965e38],.dark .emoji-panel .emoji-title,
  4954. .dark .note-list .list-note-operation[data-v-13587840],.dark .note-list .list-note-operation,.dark .note-list,
  4955. .dark .note-list .note-card-container .note-card[data-v-13587840],.dark .note-list .note-card-container .note-card,
  4956. .dark .user-card-m-exp .user-info-wrapper .face,
  4957. .dark #app .header[data-v-67c4001b],.dark #app .header,
  4958. .dark #app .container .textarea .textarea-warp textarea[data-v-67c4001b],.dark #app .container .textarea .textarea-warp textarea,
  4959. .dark #app .submit[data-v-67c4001b],.dark #app .submit,
  4960. .dark .coin-operated-m-exp,
  4961. .dark .mini-header {
  4962. background:var(--w-bg-darker) !important;
  4963. color:var(--w-text) !important;
  4964. }
  4965.  
  4966.  
  4967.  
  4968. .dark .reply-box.fixed-box[data-v-757acbb5],.dark .reply-box.fixed-box,
  4969. .dark .reply-box .box-expand .reply-box-emoji .emoji-btn[data-v-757acbb5], .dark .reply-box .box-expand .reply-box-emoji .emoji-btn,
  4970. .dark .emoji-panel[data-v-c4965e38], .dark .emoji-panel,
  4971. .dark .reply-box .box-expand .at-btn[data-v-757acbb5], .dark .reply-box .box-expand .at-btn,
  4972. .dark .arc_toolbar_report,
  4973. .dark .video-toolbar-container,
  4974.  
  4975. .dark #v_tag {
  4976. border-color:var(--w-border-dark) !important;
  4977. }
  4978.  
  4979. .dark .collection-m-exp .title,
  4980. .dark .reply-item .bottom-line[data-v-36229167], .dark .reply-item .bottom-line {
  4981. border-color:var(--w-text) !important;
  4982. }
  4983.  
  4984.  
  4985.  
  4986. .dark .collection-m-exp .content .group-list li label .count, .dark .collection-m-exp .content .group-list li label,.dark .collection-m-exp,
  4987. .dark .collection-m-exp .content .group-list li label .personal, .dark .collection-m-exp .content .group-list,.dark .collection-m-exp .content,
  4988. .dark .at-panel .at-list-container .at-list-ground .at-user-list .at-user-item .user-info .user-fan[data-v-78329793] ,
  4989. .dark .at-panel .at-list-container .at-list-ground .at-user-list .at-user-item .user-info .user-fan,
  4990. .dark .at-panel .at-list-container .at-list-ground .ground-name[data-v-78329793],
  4991. .dark .at-panel .at-list-container .at-list-ground .ground-name,
  4992. .dark .user-card-m-exp .user-info-wrapper .info p ,.dark .user-card-m-exp .user-info-wrapper .info .sign ,
  4993. .dark .user-card-m-exp .user-info-wrapper .info .social a ,
  4994. .dark #app .container .question[data-v-67c4001b],
  4995. .dark #app .container .question,
  4996. .dark #app .container .textarea .textarea-warp .limit[data-v-67c4001b],
  4997. .dark #app .container .textarea .textarea-warp .limit,
  4998. .dark .collection-m-exp .content .group-list li,
  4999. .dark .note-list .note-card-container .note-card .note-info[data-v-13587840],.dark .note-list .note-card-container .note-card .note-info
  5000. {
  5001.  
  5002. color:var(--w-text) !important;
  5003. }
  5004.  
  5005.  
  5006.  
  5007.  
  5008. .dark .at-panel .at-list-container .at-list-ground .at-user-list .at-user-item .user-info .user-name[data-v-78329793],
  5009. .dark .at-panel .at-list-container .at-list-ground .at-user-list .at-user-item .user-info .user-name,
  5010. .dark .at-panel .panel-title[data-v-78329793], .dark .at-panel .panel-title,
  5011. .dark .reply-box .box-expand .reply-box-emoji .emoji-btn[data-v-757acbb5],
  5012. .dark .reply-box .box-expand .reply-box-emoji .emoji-btn,
  5013. .dark .reply-box .box-expand .at-btn[data-v-757acbb5],
  5014. .dark .reply-box .box-expand .at-btn,
  5015. .dark .arc_toolbar_report,
  5016. .dark .bpx-player-video-info-online,.dark .bpx-player-video-info-divide,.dark .bpx-player-video-info-dm,
  5017. .dark .basic-desc-info,.dark .desc-info-text,
  5018. .dark .reply-content-container .reply-content,
  5019. .dark .root-reply,.dark .play-num, .dark .abstract,
  5020. .dark .reply-item .root-reply-container .content-warp .user-info .user-name,
  5021. .dark .mini-header__title,
  5022. .dark .toggle-btn-text,.dark .video-toolbar-left-item,
  5023. .dark .video-complaint-info video-toolbar-item-text,
  5024. .dark .video-note video-toolbar-right-item toolbar-right-note,
  5025. .dark .bpx-player-sending-bar .bpx-player-video-info,
  5026. .dark .mini-header .right-entry .right-entry__outside .right-entry-icon,
  5027. .dark .bpx-player-dm-btn-time,.dark .bpx-player-dm-btn-dm,.dark.bpx-player-dm-btn-date,
  5028. .dark .bpx-player-auxiliary .bpx-player-dm-container .dm-info-row,
  5029. .dark .bpx-player-auxiliary .bpx-player-dm-container .dm-info-row .dm-info-dm,
  5030. .dark .bpx-player-auxiliary .bpx-player-contextmenu.bpx-player-white>li,
  5031. .dark .dm-info-date,.dark .first-line-title, .dark .cur-page,
  5032. .dark .bili-header .header-login-entry>img[data-v-fc330406],
  5033. .dark .bili-header .header-login-entry>img,
  5034. .dark .bili-header .login-panel-popover .register-tip[data-v-fc330406] ,
  5035. .dark .bili-header .login-panel-popover .register-tip,
  5036. .dark .bili-header .login-panel-popover .login-btn[data-v-fc330406],
  5037. .dark .bili-header .login-panel-popover .login-btn,
  5038. .dark .bili-header .login-panel-popover .register-tip[data-v-fc330406]>a,
  5039. .dark .bili-header .login-panel-popover .register-tip>a,
  5040. .dark .vip-login-countdown-row .countdown-lable[data-v-fc330406],
  5041. .dark .vip-login-countdown-row .countdown-lable,
  5042. .dark .vip-login-countdown-row .counddown-wrap[data-v-fc330406],
  5043. .dark .vip-login-countdown-row .counddown-wrap,
  5044. .dark .vip-login-countdown-row .counddown-wrap span[data-v-fc330406],
  5045. .dark .vip-login-countdown-row .counddown-wrap span,
  5046. .dark .vip-login-title[data-v-fc330406],
  5047. .dark .vip-login-title,
  5048. .dark .vip-login-subtitle[data-v-fc330406],
  5049. .dark .vip-login-subtitle,
  5050. .dark .video-page-card-small .card-box .info .title,
  5051. .dark .bili-header .upload-panel-popover .upload-item .item-title[data-v-fc330406],
  5052. .dark .bili-header .upload-panel-popover .upload-item .item-title,
  5053. .dark .video-page-card-small .card-box .info .upname,
  5054. .dark .video-page-card-small .card-box .info .playinfo,
  5055. .dark .next-button .txt,.dark .video-episode-card__info-title, .dark .video-episode-card__info-duration,
  5056. .dark .membersinfo-normal .header .staff-amt[data-v-42892ec8],
  5057. .dark .membersinfo-normal .header .staff-amt,
  5058. .dark .reply-header .reply-navigation .nav-bar .nav-title .nav-title-text[data-v-a3384d8f],
  5059. .dark .reply-header .reply-navigation .nav-bar .nav-title .nav-title-text,
  5060. .dark .bili-header .login-panel-popover .register-exper[data-v-fc330406],
  5061. .dark .bili-header .login-panel-popover .register-exper,
  5062. .dark .reply-header .reply-navigation .nav-bar .nav-sort.hot .hot-sort[data-v-a3384d8f],
  5063. .dark .reply-header .reply-navigation .nav-bar .nav-sort.time .time-sort[data-v-a3384d8f],
  5064. .dark .reply-header .reply-navigation .nav-bar .nav-sort.hot .hot-sort,
  5065. .dark .reply-header .reply-navigation .nav-bar .nav-sort.time .time-sort,
  5066. .dark .sub-reply-item .sub-user-info .sub-user-name[data-v-26797283],.dark .sub-reply-item .sub-user-info .sub-user-name,
  5067. .dark .video-info-container .video-title[data-v-4f1c0915],.dark .video-info-container .video-title,
  5068. .dark .video-info-detail[data-v-3b903b56], .dark .video-info-detail,
  5069. .dark .reply-box.disabled .box-normal .reply-box-send .send-text[data-v-757acbb5], .dark .reply-box.disabled .box-normal .reply-box-send .send-text,
  5070. .dark .sub-reply-list .view-more .view-more-pagination[data-v-27ad2dff], .dark .sub-reply-list .view-more .view-more-paginatio,
  5071. .dark .note-content, .dark .note-list .note-card-container .note-card .note-content[data-v-13587840],.dark .note-list .note-card-container .note-card .note-content,
  5072. .dark .note-pc .note-container .note-header .note-title,
  5073. .dark .note-list .note-card-container .note-card .user-info .user-name,.dark .note-list .note-card-container .note-card .user-info .user-name[data-v-13587840],
  5074. .dark .recommend-list-v1 .rec-title,.dark .recommend-list-v1 .rec-title[data-v-39ee0c7c],
  5075. .dark .video-toolbar-right-item, .dark .video-note.video-toolbar-right-item[data-v-bb961c9e],.dark .video-note.video-toolbar-right-item,
  5076. .dark .user-card-m-exp .user-info-wrapper .info .social .tip_text,
  5077. .dark .user-card-m-exp .user-info-wrapper .info .official-wrapper,
  5078. .dark .user-card-m-exp .user-info-wrapper .info .user .name,
  5079. .dark .coin-operated-m-exp .coin-title,.dark .coin-operated-m-exp .like-checkbox,
  5080. .dark .coin-operated-m-exp .coin-bottom .tips,
  5081. .dark .collection-m-exp .title,
  5082. .dark .video-title {
  5083. color:var(--w-text-light) !important;
  5084. }
  5085.  
  5086.  
  5087. .dark .dark .user-card-m-exp .user-info-wrapper .info .user .name:hover,
  5088. .dark .video-page-card-small .card-box .info .title:hover,
  5089. .dark .bili-header .upload-panel-popover .upload-item .item-title[data-v-fc330406]:hover,
  5090. .dark .bili-header .upload-panel-popover .upload-item .item-title:hover,
  5091. .dark .video-page-card-small .card-box .info .upname:hover,
  5092. .dark .video-episode-card__info-title:hover, .dark .video-episode-card__info-duration:hover,
  5093. .dark .first-line-title:hover,
  5094. .dark .video-complaint-info video-toolbar-item-text:hover,
  5095. .dark .video-note video-toolbar-right-item toolbar-right-note:hover,
  5096. .dark .mini-header .right-entry .right-entry__outside .right-entry-icon:hover,
  5097. .dark .mini-header__title:hover,.dark .toggle-btn-text:hover,
  5098. .dark .bili-header .login-panel-popover .login-btn[data-v-fc330406]:before,
  5099. .dark .bili-header .login-panel-popover .login-btn:before,
  5100. .dark .bili-header .login-panel-popover .login-btn[data-v-fc330406]:hover:before,
  5101. .dark .bili-header .login-panel-popover .login-btn:hover:before,
  5102. .dark .bili-header .login-panel-popover .register-tip[data-v-fc330406]>a:hover,
  5103. .dark .bili-header .login-panel-popover .register-tip>a:hover,
  5104. .dark .reply-header .reply-navigation .nav-bar .nav-title .nav-title-text[data-v-a3384d8f]:hover,
  5105. .dark .reply-header .reply-navigation .nav-bar .nav-title .nav-title-text:hover,
  5106. .dark .user-card-m-exp .user-info-wrapper .info .social a:hover
  5107.  
  5108. {
  5109. color:var(--w-blue-link-hover) !important;
  5110. }
  5111.  
  5112.  
  5113. .dark .at-panel[data-v-78329793], .dark .at-panel,
  5114. .dark .at-panel .at-list-container .at-list-ground .at-user-list .at-user-item[data-v-78329793]:hover,
  5115. .dark .at-panel .at-list-container .at-list-ground .at-user-list .at-user-item:hover,
  5116. .dark .bpx-player-auxiliary .bpx-player-dm-btn-footer,
  5117. .dark .bpx-player-auxiliary .bpx-player-dm-btn-history.bpx-player-disable,
  5118. .dark .bpx-player-auxiliary .bpx-player-dm-btn-history,
  5119. .dark .membersinfo-normal .header[data-v-42892ec8],.membersinfo-normal .header,
  5120. .dark .reply-box .box-normal .reply-box-warp .reply-box-textarea[data-v-757acbb5],
  5121. .dark .reply-box .box-normal .reply-box-warp .reply-box-textarea,
  5122. .dark .vip-login-countdown-row .counddown-wrap span[data-v-fc330406],.dark .vip-login-countdown-row .counddown-wrap span,
  5123. .dark .reply-tag-item,
  5124. .dark .vip-login-btn, .dark .vip-login-btn[data-v-fc330406],
  5125. .dark .bili-header .header-upload-entry[data-v-fc330406],
  5126. .dark .bili-header .header-upload-entry, .dark .bili-header .header-upload-entry[data-v-fc330406],
  5127. .dark .second-line_right,.dark .base-video-sections-v1 .video-section-list .video-episode-card__info-playing,
  5128. .dark .reply-box.disabled .box-normal .reply-box-warp .disable-mask[data-v-757acbb5],
  5129. .dark .reply-box.disabled .box-normal .reply-box-warp .disable-mask,
  5130. .dark .reply-box.disabled .box-normal .reply-box-warp .disable-mask .no-login-mask .login-btn[data-v-757acbb5],
  5131. .dark .reply-box.disabled .box-normal .reply-box-warp .disable-mask .no-login-mask .login-btn,
  5132. .dark .recommend-list-v1 .rec-footer[data-v-39ee0c7c], .dark .recommend-list-v1 .rec-footer,
  5133. .dark .reply-box .box-normal .reply-box-send[data-v-757acbb5],.dark .reply-box .box-normal .reply-box-send,
  5134. .dark .reply-box .reply-box-send[data-v-757acbb5],.dark .reply-box .reply-box-send,
  5135. .dark .video-tool-more-popover .video-tool-more-dropdown .dropdown-item,
  5136. .dark .video-tool-more-popover, .dark .note-header.drag-el,
  5137. .dark .user-card-m-exp .user-info-wrapper .info .user .user-label,
  5138. .dark .user-card-m-exp .user-info-wrapper .info .btn-box .like ,
  5139. .dark .user-card-m-exp .user-info-wrapper .info .btn-box .liked,
  5140. .dark .user-card-m-exp .user-info-wrapper .info .btn-box .message,
  5141. .dark #app .submit .cancel[data-v-67c4001b],
  5142. .dark #app .submit .cancel,
  5143. .dark #app .submit .confirm[data-v-67c4001b],
  5144. .dark #app .submit .confirm,
  5145. .dark .coin-operated-m,
  5146. .dark .coin-operated-m-exp .coin-bottom .bi-btn,
  5147. .dark .collection-m-exp,
  5148. .dark .primary-btn,.dark .palette-button-wrap .flexible-roll-btn-inner[data-v-46b9cf37],.dark .palette-button-wrap .flexible-roll-btn-inner,
  5149. .dark .collection-m-exp .content .group-list .add-group .add-btn,
  5150. .dark .collection-m-exp .bottom .btn.disable,
  5151. .dark .collection-m-exp .bottom .btn,
  5152. .dark .fixed-sidenav-storage .fixed-sidenav-storage-item[data-v-5d529e3e],.dark .fixed-sidenav-storage .fixed-sidenav-storage-item,
  5153. .dark .video-tag-container .tag-panel .tag .show-more-btn[data-v-934a50f8],.dark .video-tag-container .tag-panel .tag .show-more-btn,
  5154. .dark .video-tag-container .tag-panel .tag-link {
  5155. color:var(--w-text-light) !important;
  5156. background:var(--w-bg-darker) !important;
  5157. border:1px solid var(--w-text-light) !important;
  5158. }
  5159.  
  5160.  
  5161. .dark .collection-m-exp .bottom .btn.disable:hover,.dark .collection-m-exp .bottom .btn:hover,
  5162. .dark .collection-m-exp .content .group-list .add-group .add-btn:hover,
  5163. .dark .coin-operated-m-exp .coin-bottom .bi-btn:hover,
  5164. .dark #app .submit .cancel[data-v-67c4001b]:hover,.dark #app .submit .cancel:hover,
  5165. .dark #app .submit .confirm[data-v-67c4001b]:hover,.dark #app .submit .confirm:hover,
  5166. .dark .fixed-sidenav-storage .fixed-sidenav-storage-item[data-v-5d529e3e]:hover,.dark .fixed-sidenav-storage .fixed-sidenav-storage-item:hover,
  5167. .dark .primary-btn:hover,
  5168. .dark .palette-button-wrap .flexible-roll-btn-inner[data-v-46b9cf37]:hover,.dark .palette-button-wrap .flexible-roll-btn-inner:hover,
  5169.  
  5170. .dark .dark .user-card-m-exp .user-info-wrapper .info .btn-box .message:hover,
  5171. .dark .user-card-m-exp .user-info-wrapper .info .user .user-label:hover,
  5172. .dark .user-card-m-exp .user-info-wrapper .info .btn-box .liked:hover,
  5173. .dark .user-card-m-exp .user-info-wrapper .info .btn-box .like:hover ,
  5174. .dark .reply-box.disabled .box-normal .reply-box-warp .disable-mask .no-login-mask .login-btn[data-v-757acbb5]:hover,
  5175. .dark .reply-box.disabled .box-normal .reply-box-warp .disable-mask .no-login-mask .login-btn:hover,
  5176. .dark .bpx-player-auxiliary .bpx-player-dm-btn-footer:hover,
  5177. .dark .bpx-player-auxiliary .bpx-player-dm-btn-history.bpx-player-disable:hover,
  5178. .dark .bpx-player-auxiliary .bpx-player-dm-btn-history:hover,
  5179. .dark .second-line_right:hover,
  5180. .dark .vip-login-btn[data-v-fc330406]:hover,
  5181. .dark .vip-login-btn:hover,
  5182. .dark .bili-header .header-upload-entry[data-v-fc330406]:hover,
  5183. .dark .bili-header .header-upload-entry:hover,
  5184. .dark .recommend-list-v1 .rec-footer[data-v-39ee0c7c]:hover, .dark .recommend-list-v1 .rec-footer:hover,
  5185. .dark .reply-box .box-normal .reply-box-send[data-v-757acbb5]:hover,.dark .reply-box .box-normal .reply-box-send:hover,
  5186. .dark .reply-box .reply-box-send[data-v-757acbb5]:hover,.dark .reply-box .reply-box-send:hover,
  5187. .dark .video-tag-container .tag-panel .tag .show-more-btn[data-v-934a50f8]:hover,.dark .video-tag-container .tag-panel .tag .show-more-btn:hover,
  5188. .dark .video-tag-container .tag-panel .tag-link:hover {
  5189. color:var(--w-blue-link-hover) !important;
  5190. border-color: var(--w-blue-link-hover) !important;
  5191. background:var(--w-bg-darker) !important;
  5192. }
  5193.  
  5194. .dark .bpx-player-dm-setting-wrap,
  5195. .dark .bpx-player-dm-setting,
  5196. .dark .bui-dropdown-icon,
  5197. .dark .bui-collapse .bui-collapse-header .bui-collapse-arrow .bui-collapse-arrow-text .arrow-icon,
  5198. .dark .bui-danmaku-switch {
  5199. fill:var(--w-text-light) !important;
  5200. }
  5201.  
  5202.  
  5203. .dark #bilibili-player-placeholder {
  5204. box-shadow: none !important;
  5205. }
  5206. `;
  5207. const isUrl = window.location.href.indexOf("https://www.bilibili.com/bangumi/play") !== -1;
  5208. const bangumiCss = isUrl ? `
  5209.  
  5210. .dark * {
  5211. color:var(--w-text-light) !important;
  5212. border-color: var(--w-border) !important;
  5213. outline-color: var(--w-border) !important;
  5214. }
  5215.  
  5216. .dark .home-container,.dark #__next,.dark .main-container,
  5217. .dark .plp-r *,
  5218. .dark .mediainfo_mediaInfo__Cpow4 *{
  5219. color:var(--w-text-light) !important;
  5220. border-color: var(--w-border) !important;
  5221. outline-color: var(--w-border) !important;
  5222. background-color:var(--w-bg-darker) !important;
  5223. }
  5224.  
  5225. .dark .bili-avatar-icon.bili-avatar-right-icon{
  5226. display:none !important;
  5227. }
  5228.  
  5229.  
  5230. .dark .reply-box .box-normal .reply-box-send .send-text[data-v-757acbb5],
  5231. .dark .reply-box .box-normal .reply-box-send .send-text {
  5232. background:none !important;
  5233. }
  5234.  
  5235.  
  5236. .dark * [class^=imageListItem_title][class^=imageListItem_active]:hover,
  5237. .dark * [class^=imageListItem_title]:hover,
  5238. .dark * .ep-title:hover {
  5239. color:var(--w-blue-link-hover) !important;
  5240. }
  5241.  
  5242.  
  5243.  
  5244. ` : ``;
  5245. const router = `
  5246. ${home}
  5247. ${video}
  5248. ${space}
  5249. ${blackboard}
  5250. ${t}
  5251. ${anime}
  5252. ${guochuang}
  5253. ${douga}
  5254. ${read}
  5255. ${bangumiCss}
  5256. `;
  5257. const dark = `
  5258. ${common}
  5259. ${router}
  5260. ${other}
  5261.  
  5262. `;
  5263. const css = is_bilibili ? `
  5264. div#i_cecream .floor-single-card,
  5265. div#i_cecream .bili-live-card.is-rcmd,
  5266. div#i_cecream .adblock-tips,
  5267. .activity-m-v1,
  5268. div.video-container-v1 div.pop-live-small-mode.part-undefined,
  5269. .recommended-swipe.grid-anchor,
  5270. .video-page-special-card-small
  5271. {
  5272. display:none !important;
  5273. }
  5274.  
  5275. /* 输入框*/
  5276. .nav-search-content>input::placeholder {
  5277. color: transparent;
  5278. opacity:0 !important;
  5279. }
  5280.  
  5281. .m-bilibili-btn {
  5282. cursor: pointer !important;
  5283. background: #FFFFFF !important;
  5284. background: var(--bg1_float) !important;
  5285. border: 1px solid #E3E5E7 !important;
  5286. border: 1px solid var(--line_regular) !important;
  5287. border-radius: 8px !important;
  5288. box-sizing: border-box !important;
  5289. padding: 6px !important;
  5290. margin-bottom: 6px !important;
  5291. color: #18191C !important;
  5292. color: var(--text1) !important;
  5293. line-height: 14px;
  5294. font-size: 12px;
  5295. display: flex;
  5296. flex-direction: column;
  5297. align-items: center;
  5298. width: 40px;
  5299. }
  5300.  
  5301. .m-span-text {
  5302. transition: all 0.3s ease ;
  5303. cursor: pointer ;
  5304. opacity: 0 ;
  5305. float:right ;
  5306. display:inline-block ;
  5307. margin:0 10px ;
  5308. transform: scale(0.5) ;
  5309. font-size:20px ;
  5310. position:relative ;
  5311. }
  5312. .m-span-text::before{
  5313. content:"🧹" ;
  5314. cursor: pointer ;
  5315. }
  5316.  
  5317. .bili-video-card__info--bottom:hover .m-span-text,
  5318. .video-page-card-small:hover .m-span-text,
  5319. .up-info-container:hover .m-span-text,
  5320. .video-page-operator-card-small:hover .m-span-text
  5321. {
  5322. opacity: 1;
  5323. transform: scale(1.1);
  5324. color:orange;
  5325. }
  5326.  
  5327.  
  5328.  
  5329.  
  5330. ${dark}
  5331. ` : "";
  5332. addStyle(
  5333. `
  5334. ${root$1}
  5335. ${css$4}
  5336. ${css$3}
  5337. ${css}
  5338. ${css$2}
  5339. `
  5340. );
  5341. (function() {
  5342. if (typeof window == "undefined") {
  5343. return;
  5344. }
  5345. if (is_exculues) {
  5346. return;
  5347. }
  5348. if (window == null ? void 0 : window.LivePluginLoadingComplate) {
  5349. return;
  5350. }
  5351. if (!is_localhost) {
  5352. console.clear();
  5353. }
  5354. customElements.define("live-plugin-element", LivePluginElement);
  5355. try {
  5356. login$1();
  5357. updateDarkClass();
  5358. } catch (error2) {
  5359. console.error("live-plugin:", error2);
  5360. }
  5361. try {
  5362. let pluginSupport = true;
  5363. if (is_huya) {
  5364. new TriggerLive();
  5365. } else if (is_douyu) {
  5366. new FishLive();
  5367. } else if (is_bilibili) {
  5368. new BiliBili();
  5369. } else if (is_douyin) {
  5370. new DouYin();
  5371. } else if (is_localhost) {
  5372. new LivePlugin();
  5373. } else {
  5374. pluginSupport = false;
  5375. error("插件地址不适配,请检查匹配地址!!!");
  5376. }
  5377. if (pluginSupport) {
  5378. console.log(
  5379. "%c%s%c%s",
  5380. "background-image: linear-gradient(120deg, #84fab0 0%, #8fd3f4 100%); padding: 2px; border-radius: 20px 0 0 20px; color: #fff;font-size:12px;",
  5381. `欢迎使用live-plugin 下载地址:`,
  5382. "background-image: linear-gradient(to right, #f78ca0 0%, #f9748f 19%, #fd868c 60%, #fe9a8b 100%); padding: 2px; border-radius: 0 20px 20px 0; color: #fff;font-size:12px;",
  5383. download_plugin_url
  5384. );
  5385. console.log(
  5386. "%c%s%c%s",
  5387. " background-image: linear-gradient(to top, #c1dfc4 0%, #deecdd 100%);padding: 2px; border-radius: 20px 0 0 20px; color: #fff;font-size:16px;",
  5388. `源码地址:`,
  5389. "background-image: linear-gradient(to top, #00c6fb 0%, #005bea 100%); padding: 2px; border-radius: 0 20px 20px 0; color: #fff;font-size:16px;",
  5390. source_code_url
  5391. );
  5392. }
  5393. } catch (e) {
  5394. error(e);
  5395. }
  5396. window.LivePluginLoadingComplate = true;
  5397. })();
  5398.  
  5399. })();