Greasy Fork is available in English.
知乎修改器的移动版:首页可持续加载内容,回答可以查看全部回答和评论,文章可以查看全部评论,回答内容、文章、评论可直接点赞、反对,去除禁止复制的限制,列表标题类别显示功能设置,收起按钮悬浮设置,列表、问题详情、回答、文章内容置顶创建和修改时间设置,一键获取内容链接设置,问题详情添加查看问题日志按钮,自定义样式,隐藏模块,缓存列表和浏览历史记录等功能。
- // ==UserScript==
- // @name 知乎修改器移动版-持续更新
- // @namespace http://tampermonkey.net/
- // @version 2.9.2
- // @description 知乎修改器的移动版:首页可持续加载内容,回答可以查看全部回答和评论,文章可以查看全部评论,回答内容、文章、评论可直接点赞、反对,去除禁止复制的限制,列表标题类别显示功能设置,收起按钮悬浮设置,列表、问题详情、回答、文章内容置顶创建和修改时间设置,一键获取内容链接设置,问题详情添加查看问题日志按钮,自定义样式,隐藏模块,缓存列表和浏览历史记录等功能。
- // @compatible edge Violentmonkey
- // @compatible edge Tampermonkey
- // @compatible chrome Violentmonkey
- // @compatible chrome Tampermonkey
- // @compatible firefox Violentmonkey
- // @compatible firefox Tampermonkey
- // @compatible safari Violentmonkey
- // @compatible safari Tampermonkey
- // @author liuyubing
- // @license MIT
- // @match *://*.zhihu.com/*
- // @grant GM_setValue
- // @grant GM_getValue
- // @grant GM.getValue
- // @grant GM.setValue
- // @grant GM_registerMenuCommand
- // @run-at document-start
- // ==/UserScript==
- "use strict";
- (() => {
- var dom = (n2) => document.querySelector(n2);
- var domById = (id) => document.getElementById(id);
- var domA = (n2) => document.querySelectorAll(n2);
- var domC = (name, attrObjs) => {
- const node = document.createElement(name);
- for (let key in attrObjs) {
- node[key] = attrObjs[key];
- }
- return node;
- };
- var domP = (node, attrName, attrValue) => {
- const nodeP = node.parentElement;
- if (!nodeP)
- return void 0;
- if (!attrName || !attrValue)
- return nodeP;
- if (nodeP === document.body)
- return void 0;
- const attrValueList = (nodeP.getAttribute(attrName) || "").split(" ");
- return attrValueList.includes(attrValue) ? nodeP : domP(nodeP, attrName, attrValue);
- };
- var insertAfter = (newElement, targetElement) => {
- const parent = targetElement.parentNode;
- if (parent.lastChild === targetElement) {
- parent.appendChild(newElement);
- } else {
- parent.insertBefore(newElement, targetElement.nextSibling);
- }
- };
- var fnReturnStr = (str, isHave = false, strFalse = "") => isHave ? str : strFalse;
- var fnInitDomStyle = (id, innerHTML) => {
- const element = domById(id);
- element ? element.innerHTML = innerHTML : document.head.appendChild(domC("style", { id, type: "text/css", innerHTML }));
- };
- function throttle(fn, time = 300) {
- let tout = void 0;
- return function() {
- if (tout)
- return;
- tout = setTimeout(() => {
- tout = void 0;
- fn.apply(this, arguments);
- }, time);
- };
- }
- var copy = async (value) => {
- if (navigator.clipboard && navigator.permissions) {
- await navigator.clipboard.writeText(value);
- } else {
- const domTextarea = domC("textArea", {
- value,
- style: "width: 0px;position: fixed;left: -999px;top: 10px;"
- });
- domTextarea.setAttribute("readonly", "readonly");
- document.body.appendChild(domTextarea);
- domTextarea.select();
- document.execCommand("copy");
- document.body.removeChild(domTextarea);
- }
- };
- var messageDoms = [];
- var message = (value, t2 = 3e3) => {
- const time = +/* @__PURE__ */ new Date();
- const classTime = `ctz-message-${time}`;
- const nDom = domC("div", {
- innerHTML: value,
- className: `ctz-message ${classTime}`
- });
- const domBox = domById("CTZ_MESSAGE_BOX");
- if (!domBox)
- return;
- domBox.appendChild(nDom);
- messageDoms.push(nDom);
- if (messageDoms.length > 3) {
- const prevDom = messageDoms.shift();
- prevDom && domBox.removeChild(prevDom);
- }
- setTimeout(() => {
- const nPrevDom = dom(`.${classTime}`);
- if (nPrevDom) {
- domById("CTZ_MESSAGE_BOX").removeChild(nPrevDom);
- messageDoms.shift();
- }
- }, t2);
- };
- var hexToRgba = (hex, opacity) => {
- return "rgba(" + parseInt("0x" + hex.slice(1, 3)) + "," + parseInt("0x" + hex.slice(3, 5)) + "," + parseInt("0x" + hex.slice(5, 7)) + "," + opacity + ")";
- };
- var nodesStopPropagation = (names, fnArr = [], type = "click") => {
- let nodeArray = [];
- names.forEach((item) => {
- nodeArray = nodeArray.concat(Array.prototype.slice.call(domA(item)));
- });
- for (let i2 = 0, len = nodeArray.length; i2 < len; i2++) {
- nodeArray[i2].addEventListener(type, (event) => {
- event.stopPropagation();
- fnArr.forEach((fn) => {
- fn(event);
- });
- });
- }
- };
- var fnLog = (...str) => console.log("%c「修改器」", "color: green;font-weight: bold;", ...str);
- var HTML_HOOTS = ["www.zhihu.com", "zhuanlan.zhihu.com"];
- var ID_CTZ_COMMENT = "CTZ_COMMENT";
- var ID_CTZ_COMMENT_CHILD = "CTZ_COMMENT_CHILD";
- var ID_CTZ_COMMENT_CLOSE = "CTZ_BUTTON_COMMENT_CLOSE";
- var ID_CTZ_COMMENT_BACK = "CTZ_BOTTOM_COMMENT_BACK";
- var CLASS_INPUT_CLICK = "ctz-i";
- var CLASS_INPUT_CHANGE = "ctz-i-change";
- var CLASS_TIME_ITEM = "ctz-list-item-time";
- var CLASS_COPY_LINK = "ctz-copy-link";
- var EXTRA_CLASS_HTML = {
- "zhuanlan.zhihu.com": "zhuanlan",
- "www.zhihu.com": "zhihu"
- };
- var HEADER = [
- { href: "#CTZ_BASIS", value: "基础设置" },
- { href: "#CTZ_HIDDEN", value: "隐藏模块" },
- { href: "#CTZ_FILTER", value: "屏蔽内容" },
- // { href: '#CTZ_BLOCK_WORD', value: '屏蔽词' },
- // { href: '#CTZ_BLACKLIST', value: '黑名单' },
- { href: "#CTZ_HISTORY", value: "历史记录" }
- // { href: '#CTZ_DEFAULT', value: '默认功能' },
- ];
- var THEMES = [
- { label: "浅色", value: "0" /* 浅色 */, background: "#fff", color: "#000" },
- { label: "深色", value: "1" /* 深色 */, background: "#000", color: "#fff" },
- { label: "自动", value: "2" /* 自动 */, background: "linear-gradient(to right, #fff, #000)", color: "#000" }
- ];
- var THEME_CONFIG_LIGHT = {
- ["0" /* 默认 */]: { name: "默认", background: "#ffffff", background2: "" },
- ["1" /* 红 */]: { name: "红", background: "#ffe4c4", background2: "#fff4e7" },
- ["2" /* 黄 */]: { name: "黄", background: "#faf9de", background2: "#fdfdf2" },
- ["3" /* 绿 */]: { name: "绿", background: "#cce8cf", background2: "#e5f1e7" },
- ["4" /* 灰 */]: { name: "灰", background: "#eaeaef", background2: "#f3f3f5" },
- ["5" /* 紫 */]: { name: "紫", background: "#e9ebfe", background2: "#f2f3fb" }
- };
- var THEME_CONFIG_DARK = {
- ["0" /* 默认 */]: { name: "默认", color: "#fff", background: "#121212", background2: "#333333" },
- ["1" /* 夜间护眼一 */]: { name: "夜间护眼一", color: "#f7f9f9", background: "#15202b", background2: "#38444d" },
- ["2" /* 夜间护眼二 */]: { name: "夜间护眼二", color: "#f7f9f9", background: "#1f1f1f", background2: "#303030" },
- ["3" /* 夜间护眼三 */]: { name: "夜间护眼三", color: "#f7f9f9", background: "#272822", background2: "#383932" }
- };
- var INPUT_NAME_THEME = "theme";
- var INPUT_NAME_THEME_DARK = "themeDark";
- var INPUT_NAME_ThEME_LIGHT = "themeLight";
- var VoteTypeOb = {
- [0 /* 赞同 */]: {
- ["answers" /* 回答 */]: '{"type":"up"}',
- ["articles" /* 文章 */]: '{"voting":1}',
- ["zvideos" /* 视频 */]: '{"voting":1}'
- },
- [1 /* 中立 */]: {
- ["answers" /* 回答 */]: '{"type":"neutral"}',
- ["articles" /* 文章 */]: '{"voting":0}',
- ["zvideos" /* 视频 */]: '{"voting":0}'
- },
- [2 /* 反对 */]: {
- ["answers" /* 回答 */]: '{"type":"down"}',
- ["articles" /* 文章 */]: '{"voting":-1}',
- ["zvideos" /* 视频 */]: '{"voting":-1}'
- }
- };
- var NAME_CONFIG = "mobileConfig";
- var NAME_HISTORY = "mobileHistory";
- var HISTORY_DEFAULT = {
- view: [],
- list: []
- };
- var CONFIG_HIDDEN_DEFAULT = {
- hiddenOpenApp: true,
- hiddenReadMoreText: true,
- hiddenReward: true,
- hiddenAD: true,
- hiddenBottomSticky: true
- };
- var CONFIG_FILTER_DEFAULT = {
- removeZhihuOfficial: true,
- removeAnonymousAnswer: false,
- removeFromYanxuan: true,
- removeUnrealAnswer: true,
- removeFromEBook: true,
- removeStoryAnswer: true,
- removeYanxuanAnswer: true,
- removeYanxuanRecommend: true,
- removeYanxuanCPRecommend: true,
- hiddenAnswerYanxuanRecommend: true
- };
- var CONFIG_DEFAULT = {
- ...CONFIG_HIDDEN_DEFAULT,
- ...CONFIG_FILTER_DEFAULT,
- openButtonTop: 100,
- openButtonLeft: 0,
- questionTitleTag: true,
- releaseTimeForList: true,
- releaseTimeForAnswer: true,
- releaseTimeForQuestion: true,
- releaseTimeForArticle: true,
- theme: "2" /* 自动 */,
- themeLight: "0" /* 默认 */,
- themeDark: "1" /* 夜间护眼一 */,
- copyAnswerLink: true,
- showQuestionLog: true,
- showAllContent: true,
- showToAnswer: true,
- showIP: true,
- haveTopSearch: true
- };
- var SAVE_HISTORY_NUMBER = 500;
- var HIDDEN_ANSWER_TAG = {
- removeFromYanxuan: "盐选专栏",
- // removeUnrealAnswer: '虚构创作',
- removeFromEBook: "电子书"
- };
- var HIDDEN_ANSWER_ACCOUNT = {
- removeStoryAnswer: "故事档案局",
- removeYanxuanAnswer: "盐选科普",
- removeYanxuanRecommend: "盐选推荐",
- removeYanxuanCPRecommend: "盐选测评室"
- };
- var HIDDEN_ARRAY = [
- [{ value: "hiddenAD", label: "广告" }],
- [
- { value: "hiddenOpenApp", label: "隐藏跳转APP的提示和按钮" },
- { value: "hiddenReward", label: "隐藏赞赏按钮" }
- ],
- [
- { value: "hiddenLogo", label: "隐藏LOGO" },
- { value: "hiddenHeader", label: "隐藏顶部悬浮模块" },
- { value: "hiddenBottomSticky", label: "隐藏进入回答页面时的底部操作栏" },
- { value: "hiddenCommitImg", label: "隐藏评论区图片" }
- ],
- [
- { value: "hiddenAnswers", label: "隐藏列表回答内容" },
- { value: "hiddenListVideoContent", label: "隐藏列表视频回答的内容" },
- { value: "hiddenListImg", label: "隐藏列表图片" }
- // { value: 'hiddenReadMoreText', label: '隐藏列表「阅读全文」文字' },
- ],
- [
- { value: "hiddenItemActions", label: "隐藏列表回答操作栏" },
- { value: "hiddenAnswerItemActions", label: "隐藏详情回答操作栏" }
- ],
- [
- { value: "hiddenQuestionFollowing", label: "隐藏关注问题按钮" },
- { value: "hiddenQuestionAnswer", label: "隐藏问题写回答按钮" }
- ],
- [
- { value: "hiddenAnswerItemTime", label: "隐藏回答底部发布编辑时间和IP" },
- { value: "hiddenAnswerItemTimeButHaveIP", label: "隐藏回答底部发布编辑时间(保留IP)" }
- ],
- [
- { value: "hiddenDetailAvatar", label: "隐藏回答人头像" },
- { value: "hiddenDetailName", label: "隐藏回答人姓名" },
- { value: "hiddenDetailBadge", label: "隐藏回答人简介" },
- { value: "hiddenDetailVoters", label: "隐藏回答人下赞同数" },
- { value: "hiddenWhoVoters", label: "隐藏回答人下 你赞同过、XXX赞同了 等信息" }
- ],
- [
- { value: "hiddenZhuanlanAvatarWrapper", label: "隐藏文章作者头像" },
- { value: "hiddenZhuanlanAuthorInfoHead", label: "隐藏文章作者姓名" },
- { value: "hiddenZhuanlanAuthorInfoDetail", label: "隐藏文章作者简介" },
- { value: "hiddenZhuanlanFollowButton", label: "隐藏文章作者关注按钮" },
- { value: "hiddenZhuanlanTitleImage", label: "隐藏文章标题图片" },
- { value: "hiddenZhuanlanImage", label: "隐藏文章内容图片" },
- { value: "hiddenZhuanlanActions", label: "隐藏文章底部悬浮操作栏" }
- ],
- [
- { value: "hiddenAnswerYanxuanRecommend", label: "隐藏回答页盐选推荐" },
- { value: "hiddenAnswerRelatedRecommend", label: "隐藏回答页相关推荐" },
- { value: "hiddenAnswerHotRecommend", label: "隐藏回答页热门推荐" }
- ]
- ];
- var BASIC_SHOW_CONTENT = [
- { label: "隐藏修改器唤起按钮,可在脚本菜单<b>⚙️ 设置</b>打开", value: "openButtonInvisible" },
- { label: "页面顶部显示搜索框", value: "haveTopSearch" },
- { label: "<b>回答、文章</b>显示完整内容和评论", value: "showAllContent" },
- {
- label: `<b>列表</b>标题类别显示<span class="ctz-label-tag ctz-label-tag-Answer">问答</span><span class="ctz-label-tag ctz-label-tag-Article">文章</span><span class="ctz-label-tag ctz-label-tag-ZVideo">视频</span><span class="ctz-label-tag ctz-label-tag-Pin">想法</span>`,
- value: "questionTitleTag",
- needFetch: false
- },
- // { label: '<b>收起</b>按钮悬浮', value: 'suspensionPickup' },
- { label: "<b>列表</b>内容置顶创建和修改时间", value: "releaseTimeForList" },
- { label: "<b>问题详情</b>置顶创建和修改时间", value: "releaseTimeForQuestion" },
- { label: "<b>问题详情回答</b>置顶创建和修改时间", value: "releaseTimeForAnswer" },
- { label: "<b>文章</b>置顶创建时间", value: "releaseTimeForArticle" },
- { label: "一键获取内容链接", value: "copyAnswerLink" },
- { label: "<b>列表</b>显示直达问题按钮", value: "showToAnswer" },
- { label: "<b>问题详情</b>显示<b>查看问题日志</b>按钮", value: "showQuestionLog" },
- { label: "<b>评论</b>顺序、关闭操作栏置于底部", value: "commentHeaderToBottom" },
- { label: "显示用户IP(存在历史回答IP缺失的情况)", value: "showIP" }
- ];
- var myStorage = {
- set: async function(name, value) {
- value.t = +/* @__PURE__ */ new Date();
- const v = JSON.stringify(value);
- localStorage.setItem(name, v);
- await GM.setValue(name, v);
- },
- get: async function(name) {
- const config = await GM.getValue(name);
- const configLocal = localStorage.getItem(name);
- const cParse = config ? JSON.parse(config) : null;
- const cLParse = configLocal ? JSON.parse(configLocal) : null;
- if (!cParse && !cLParse)
- return "";
- if (!cParse)
- return configLocal;
- if (!cLParse)
- return config;
- if (cParse.t < cLParse.t)
- return configLocal;
- return config;
- },
- getConfig: async function() {
- const nConfig = await this.get(NAME_CONFIG);
- const c2 = nConfig ? JSON.parse(nConfig) : {};
- const configSave = { ...CONFIG_DEFAULT, ...c2 };
- return Promise.resolve(configSave);
- },
- getHistory: async function() {
- const nHistory = await myStorage.get(NAME_HISTORY);
- const h2 = nHistory ? JSON.parse(nHistory) : HISTORY_DEFAULT;
- return Promise.resolve(h2);
- },
- /** 修改配置中的值 */
- updateConfig: async function(key, value) {
- const config = await this.getConfig();
- if (typeof key === "string") {
- config[key] = value;
- } else {
- for (let itemKey in key) {
- config[itemKey] = key[itemKey];
- }
- }
- await this.set(NAME_CONFIG, config);
- },
- /** 更新配置 */
- setConfig: async function(params) {
- await this.set(NAME_CONFIG, params);
- },
- setHistoryItem: async function(key, params) {
- const pfHistory = await this.getHistory();
- pfHistory[key] = params.slice(0, SAVE_HISTORY_NUMBER);
- await this.set(NAME_HISTORY, pfHistory);
- },
- setHistory: async function(value) {
- this.set(NAME_HISTORY, value);
- }
- };
- var myBackground = {
- init: async function() {
- const { themeDark = "1" /* 夜间护眼一 */, themeLight = "0" /* 默认 */ } = await myStorage.getConfig();
- const innerHTML = await this.change(themeDark, themeLight);
- fnInitDomStyle("CTZ_STYLE_BACKGROUND", innerHTML);
- },
- change: async function(themeDark, themeLight) {
- const getBackground = async () => {
- const isD = await this.isUseDark();
- if (isD)
- return this.dark(themeDark);
- if (themeLight === "0" /* 默认 */)
- return this.default();
- return this.light(themeLight);
- };
- const strBg = await getBackground();
- const strText = await this.text();
- return strBg + strText;
- },
- isUseDark: async () => {
- const { theme = "2" /* 自动 */ } = await myStorage.getConfig();
- if (theme === "2" /* 自动 */) {
- const prefersDarkScheme = window.matchMedia("(prefers-color-scheme: dark)");
- return prefersDarkScheme.matches;
- }
- return theme === "1" /* 深色 */;
- },
- default: () => ".GlobalSideBar-navList{background: #fff}",
- dark: function(darkKey) {
- const { background, background2, color } = THEME_CONFIG_DARK[darkKey];
- const whiteText = `#CTZ_DIALOG,.ctz-message,#CTZ_MAIN input,#CTZ_MAIN textarea,.ctz-footer,#CTZ_CLOSE_DIALOG,.ctz-commit,#CTZ_OPEN_BUTTON,.KfeCollection-VipRecommendCard-content,.KfeCollection-VipRecommendCard-title,#CTZ_DIALOG textarea,#CTZ_DIALOG .ctz-button,.ctz-button.ctz-button-transparent,body,.zu-top-nav-link,.CommentContent,[data-za-detail-view-path-module="CommentList"] div,.CommentsForOia div,.ctz-suspension-pickup,.zm-ac-link,.css-10noe4n,.css-3ny988,.css-hmd01z,.css-z0cc58,.css-7aa3bk,.css-1965tpd,.css-b574el,.css-1jg6wq6,textarea.zg-form-text-input,.zg-form-text-input>textarea,.css-1eglonx,.css-1tip2bd,.css-1symrae,.css-u3vsx3>div,.zm-editable-editor-field-wrap,.zu-question-suggest-topic-input,.zg-form-text-input,.zg-form-select,.css-10u695f,.css-r4op92{color: ${color}!important}`;
- const linkText = `.RelevantQuery li,.modal-dialog a,.zhi a,.VoteButton,.ContentItem-more,.QuestionMainAction,a.UserLink-link,.RichContent--unescapable.is-collapsed .ContentItem-rightButton,.ContentItem-title a:hover,.css-b7erz1,.css-1vbwaf6,.css-1jj6qre,.css-jf1cpf,.css-vphnkw,.css-1icigob{color: deepskyblue!important;}`;
- const addPrefix = (i2) => {
- return i2.split(",").map((i3) => `html[data-theme=dark] ${i3}`).join(",");
- };
- const darkTransparentBg = `.ColumnHomeTop:before,.ColumnHomeBottom{background: transparent!important;}`;
- return addPrefix(this.doSetCSS(background, background2) + whiteText + linkText + darkTransparentBg) + this.doSetCSSInCTZ(background, background2) + `.MobileAppHeader-expandBackdrop{background: ${hexToRgba(background, 0.65)}!important;}`;
- },
- light: function(lightKey) {
- const { background, background2 } = THEME_CONFIG_LIGHT[lightKey];
- return this.doSetCSS(background, background2) + this.doSetCSSInCTZ(background, background2);
- },
- /** 设置字体颜色 */
- text: async function() {
- const { colorText1 } = await myStorage.getConfig();
- const styleColorText1 = `.ContentItem-title, body{color: ${colorText1}!important;}`;
- return colorText1 ? styleColorText1 : "";
- },
- /** 知乎内元素样式设置 */
- doSetCSS: function(background, background2) {
- const cssBg = `${this.cssNamesBackground1}{background-color: ${background}!important;background:${background}!important;}`;
- const cssBg2 = `${this.cssNamesBackground2}{background-color:${background2}!important;background:${background2}!important;}`;
- const cssJustBGC2 = `${this.useCSSJustBGC2}{background-color: ${background2}!important;}`;
- const cssBgTransparent = `${this.cssNamesBackgroundTransparent}{background-color: transparent!important;background: transparent!important;}`;
- const loadingStyle = `.css-w2vj5n{background: ${background}!important;color: ${background2}!important;}`;
- const borderBg = `.KfeCollection-VipRecommendCard-article{border-color: ${background}!important;}`;
- return cssBg + cssBg2 + cssBgTransparent + loadingStyle + borderBg + cssJustBGC2;
- },
- /** 修改器样式设置(不需要添加前缀) */
- doSetCSSInCTZ: function(background, background2) {
- const menuTopBeforeAfter = `.ctz-menu>a.target::after,.ctz-menu>a.target::before{${this.menuBeforeAfter(background2)}}`;
- const openButton = `#CTZ_OPEN_BUTTON{background: ${background}!important;}`;
- return menuTopBeforeAfter + openButton;
- },
- /** 使用背景色1的元素名称 */
- cssNamesBackground1: `#CTZ_DIALOG,#CTZ_BASIS_SHOW label b,.ctz-suspension-pickup,.ctz-content-top a.target,.ctz-message,#CTZ_DIALOG textarea,#CTZ_DIALOG .ctz-button,body,.App,.MobileAppHeader-searchBox,.Input-wrapper,.VideoAnswerPlayer-stateBar,.ColumnHomeColumnCard,.Toast-root-tU3yo,.AuthorsSection-author-tFZJF,.editable,textarea.zg-form-text-input,.zg-form-text-input>textarea,.ac-active,.PagingButton,[data-tooltip="回到顶部"],.css-d1dtt9,.css-k8i00s,.css-41c1px,.zm-editable-editor-field-wrap,.zu-question-suggest-topic-input,.zg-form-text-input,.zg-form-select,.css-4lspwd,.zu-top`,
- /** 使用背景色2的元素名称 */
- cssNamesBackground2: `.ctz-content,.ctz-menu>a.target,.Card,.Sticky,.ContentItem-more,.ContentItem-actions,.Popover-content,.Popover-arrow:after,.MobileAppHeader-expand,.CommentsForOia>div,.KfeCollection-VipRecommendCard,.OpenInAppButton>div,.Modal-inner,.MobileSearch-container,.ProfileBar,.MobileAppHeader,.ZVideo-mobile,.Post-content,.sgui-header,.MobileCollectionsHeader-tabs,.MobileModal-title--default,.MobileModal,.List-item,.Login,.Input-wrapper.SignFlow-accountInput,.SignFlowInput .Input-wrapper,.SearchTabs,.MobileEmptyPageWithType,.TopicHot-Header,.Favlists-mobileActions,[data-za-detail-view-path-module="SearchR###ltList"]>div,[data-za-detail-view-path-module="SearchR###ltList"]>div>a,.SearchSubTabs,.KfeCollection-PcCollegeCard-root,.modal-dialog,.ac-renderer,.css-hplpcn,.zh-add-question-form .add-question-splash-page .ac-renderer .ac-row.ac-last,.HeaderInfo-infoCard-orDxs,.Common-content-893LU,.ContentModule-module-9gTaH,.NewBottomBar-root-dVXzD,.AuthorModule-root-rxFMb,.css-w0m1iq,.zu-autocomplete-row-label,.ac-row.zu-autocomplete-row-search-link,.PostItem,.Recommendations-Main,.ErrorPage,.css-1e7fksk,.css-1gfesro,.css-ud510h,.css-vb0amv,.css-t89z5u,.css-u3vsx3>div,.css-5k4zcx,.css-13heq6w,.css-13heq6w>a,.css-1eltcns,.css-yoby3j,.css-l63y2t,.css-173civf,.css-1nalx0p,.css-mn9570,.css-4r7szo,.css-vkey2q,.css-ugzr12,.css-6v1k3,.css-1xj1964,.css-ggid2,.css-rhbxt0,.css-1j23ebo,.css-7wvdjh,.css-kt4t4n,#CTZ_COMMENT,#CTZ_COMMENT_CHILD, #CTZ_TOP_SEARCH,.mobile-top-nav-popup .top-nav-dropdown,.zm-item-tag,.mobile-top-nav-popup .top-nav-dropdown a,.Topbar,.AutoInviteItem-wrapper--mobile`,
- useCSSJustBGC2: `.slide-up`,
- /** 背景色透明的元素名称 */
- cssNamesBackgroundTransparent: `.ContentItem-more:before`,
- cssNamesColorUserBackground1: ``,
- menuBeforeAfter: (color, size = "12px") => {
- return `background: radial-gradient(circle at top left, transparent ${size}, ${color} 0) top left,
- radial-gradient(circle at top right, transparent ${size}, ${color} 0) top right,
- radial-gradient(circle at bottom right, transparent ${size}, ${color} 0) bottom right,
- radial-gradient(circle at bottom left, transparent ${size}, ${color} 0) bottom left;
- background-size: 50% 50%;
- background-repeat: no-repeat;`;
- }
- };
- var myCustomStyle = {
- init: async function() {
- const nodeCustomStyle = dom('[name="textStyleCustom"]');
- if (!nodeCustomStyle)
- return;
- const { customizeCss = "" } = await myStorage.getConfig();
- nodeCustomStyle.value = customizeCss;
- this.change(customizeCss);
- },
- change: (innerCus) => fnInitDomStyle("CTZ_STYLE_CUSTOM", innerCus)
- };
- var onUseThemeDark = async () => {
- const isD = await isDark();
- dom("html").setAttribute("data-theme", isD ? "dark" : "light");
- };
- var loadFindTheme = () => {
- onUseThemeDark();
- const elementHTML = dom("html");
- const muConfig = { attribute: true, attributeFilter: ["data-theme"] };
- if (!elementHTML)
- return;
- const muCallback = async function() {
- const themeName = elementHTML.getAttribute("data-theme");
- const isD = await isDark();
- if (themeName === "dark" && !isD || themeName === "light" && isD) {
- onUseThemeDark();
- }
- };
- const muObserver = new MutationObserver(muCallback);
- muObserver.observe(elementHTML, muConfig);
- };
- var loadBackground = () => myBackground.init();
- var isDark = async () => await myBackground.isUseDark();
- var createItem = ({ label, value, background, color, inputName }) => `<label><input class="${CLASS_INPUT_CLICK}" name="${inputName}" type="radio" value="${value}"/><div style="background: ${background};color: ${color}">${label}</div></label>`;
- var createThemeHTML = (themeConfig, inputName) => {
- return Object.keys(themeConfig).map((key) => {
- const { background, color, name } = themeConfig[key];
- return createItem({ label: name, value: key, background, color, inputName });
- }).join("");
- };
- var addBackgroundElement = () => {
- domById("CTZ_BACKGROUND").innerHTML = THEMES.map((item) => createItem({ ...item, inputName: INPUT_NAME_THEME })).join("");
- domById("CTZ_BACKGROUND_LIGHT").innerHTML = createThemeHTML(THEME_CONFIG_LIGHT, INPUT_NAME_ThEME_LIGHT);
- domById("CTZ_BACKGROUND_DARK").innerHTML = createThemeHTML(THEME_CONFIG_DARK, INPUT_NAME_THEME_DARK);
- };
- var myMenu = {
- init: function() {
- const { hash } = location;
- const nodeMenuTop = dom(".ctz-menu");
- if (!nodeMenuTop)
- return;
- const chooseId = [...nodeMenuTop.children].map((i2) => i2.hash).find((i2) => i2 === hash || hash.replace(i2, "") !== hash);
- this.click({ target: dom(`a[href="${chooseId || HEADER[0].href}"]`) });
- },
- /** 选择菜单 */
- click: function({ target }) {
- const targetForA = target.tagName === "A" ? target : target.parentElement;
- if (!(targetForA.hash && targetForA.tagName === "A"))
- return;
- const chooseId = targetForA.hash.replace(/#/, "");
- if (!chooseId)
- return;
- const nodesA = domA(".ctz-menu>a");
- for (let i2 = 0, len = nodesA.length; i2 < len; i2++) {
- nodesA[i2].classList.remove("target");
- }
- targetForA.classList.add("target");
- const nodesDiv = domA(".ctz-content>div");
- for (let i2 = 0, len = nodesDiv.length; i2 < len; i2++) {
- const item = nodesDiv[i2];
- item.style.display = chooseId === item.id ? "flex" : "none";
- }
- myMenu2.init(chooseId);
- }
- };
- var myMenu2 = {
- init: function(chooseId) {
- const domContentTop = dom(`#${chooseId} .ctz-content-top`);
- if (!domContentTop || !domContentTop.children || !domContentTop.children.length)
- return;
- const { hash } = location;
- const target = [...domContentTop.children].find((i2) => i2.hash === hash);
- this.click({ target: target || domContentTop.children[0] });
- },
- click: function({ target }) {
- const chooseId = target.hash.replace(/#/, "");
- if (!chooseId)
- return;
- const nodesA = target.parentElement.children;
- for (let i2 = 0, len = nodesA.length; i2 < len; i2++) {
- nodesA[i2].classList.remove("target");
- }
- target.classList.add("target");
- const nodesDiv = target.parentElement.parentElement.querySelectorAll(".ctz-content-center>div");
- for (let i2 = 0, len = nodesDiv.length; i2 < len; i2++) {
- const item = nodesDiv[i2];
- item.style.display = chooseId === item.id ? "block" : "none";
- }
- }
- };
- var positionOne = (position, max) => {
- if (position < 0)
- return 0;
- if (position > max)
- return max;
- return position;
- };
- var openButtonPosition = async () => {
- const { openButtonTop, openButtonLeft } = await myStorage.getConfig();
- const domFind = domById("CTZ_OPEN_BUTTON");
- if (!domFind)
- return;
- const maxLeft = window.innerWidth - domFind.offsetWidth;
- const maxTop = window.innerHeight - domFind.offsetHeight;
- const innerLeft = positionOne(openButtonLeft, maxLeft);
- const innerTop = positionOne(openButtonTop, maxTop);
- domFind.style.cssText += `top: ${innerTop}px; left: ${innerLeft}px;`;
- let startX = 0;
- let startY = 0;
- let x2 = 0;
- let y = 0;
- domFind.addEventListener("touchstart", function(e2) {
- startX = e2.targetTouches[0].pageX;
- startY = e2.targetTouches[0].pageY;
- x2 = this.offsetLeft;
- y = this.offsetTop;
- this.style.transition = "";
- });
- domFind.addEventListener("touchmove", function(e2) {
- let moveX = e2.targetTouches[0].pageX - startX;
- let moveY = e2.targetTouches[0].pageY - startY;
- const left = x2 + moveX;
- const top = y + moveY;
- this.style.left = positionOne(left, maxLeft) + "px";
- this.style.top = positionOne(top, maxTop) + "px";
- e2.preventDefault();
- });
- domFind.addEventListener("touchend", async function() {
- const left = this.offsetLeft > maxLeft / 2 ? maxLeft : 0;
- this.style.left = `${left}px`;
- this.style.transition = "all 0.5s";
- const top = this.offsetTop;
- await myStorage.updateConfig({
- openButtonTop: top,
- openButtonLeft: left
- });
- });
- };
- var ID_TOP_SEARCH_BUTTON = "CTZ_TOP_SEARCH_BUTTON";
- var ID_TOP_SEARCH_INPUT = "CTZ_TOP_SEARCH_INPUT";
- var ID_TOP_SEARCH = "CTZ_TOP_SEARCH";
- var fnHaveTopSearch = async () => {
- if (location.pathname === "/search")
- return;
- const { haveTopSearch } = await myStorage.getConfig();
- const domFind = domById(ID_TOP_SEARCH);
- if (haveTopSearch) {
- if (domFind)
- return;
- const domSearch = domC("div", {
- id: ID_TOP_SEARCH,
- innerHTML: `<input type="text" placeholder="搜索内容" id="${ID_TOP_SEARCH_INPUT}" /><button id="${ID_TOP_SEARCH_BUTTON}">搜索</button>`
- });
- const domRoot = domById("root");
- if (domRoot) {
- document.body.insertBefore(domSearch, domRoot);
- domById(ID_TOP_SEARCH_BUTTON).onclick = function() {
- const inputValue = domById(ID_TOP_SEARCH_INPUT).value.trim();
- if (inputValue) {
- window.open(`https://www.zhihu.com/search?q=${encodeURIComponent(inputValue)}&type=content`);
- }
- };
- return;
- }
- setTimeout(() => {
- fnHaveTopSearch();
- }, 500);
- } else {
- domFind && domFind.remove();
- return;
- }
- };
- var INNER_HTML = `<div id="CTZ_DIALOG" style="display: none"><div class="ctz-header"><span class="ctz-version"></span><div class="ctz-top-operate"><!-- <span id="CTZ_FETCH_STATUS">状态获取中...</span><button class="ctz-button" id="CTZ_CHANGE_FETCH" size="small">切换接口拦截</button> --></div><button id="CTZ_CLOSE_DIALOG">✕</button></div><div class="ctz-menu"></div><div class="ctz-content"><div id="CTZ_BASIS" style="display: none"><div class="ctz-content-top"><a href="#CTZ_BASIS_SHOW">显示</a><a href="#CTZ_BASIS_BACKGROUND">颜色</a><a href="#CTZ_BASIS_SETTING">配置</a></div><div class="ctz-content-center"><div id="CTZ_BASIS_SHOW" style="display: none"></div><div id="CTZ_BASIS_BACKGROUND" style="display: none"><div class="ctz-set-background"><div class="fwb mt8 ctz-background-title">外观</div><div id="CTZ_BACKGROUND" class="ctz-background-content"></div><div class="fwb mt8 ctz-background-title">浅色设置</div><div id="CTZ_BACKGROUND_LIGHT" class="ctz-background-content"></div><div class="fwb mt8 ctz-background-title">深色设置</div><div id="CTZ_BACKGROUND_DARK" class="ctz-background-content"></div></div></div><div id="CTZ_BASIS_SETTING" style="display: none"><button class="ctz-button" name="configExport" style="margin-right: 8px">获取当前配置</button><button class="ctz-button" name="configReset">恢复默认配置</button><div class="ctz-hidden-item-br"></div><div class="ctz-config-import-box"><div>配置导入</div><textarea name="textConfigImport" placeholder="配置参考获取的格式"></textarea><button class="ctz-button" name="configImport">确 定</button></div><div class="ctz-hidden-item-br"></div><div class="ctz-config-import-box"><div>自定义样式</div><textarea name="textStyleCustom" placeholder="示例: body{background: #ffffff;}"></textarea><div class="ctz-btn-box"><button class="ctz-button" name="styleCustom" style="margin-right: 12px">确 定</button><button class="ctz-button" name="styleCustomReset">清 空</button></div></div></div></div></div><div id="CTZ_HIDDEN" style="display: none"><div class="ctz-content-center"></div></div><div id="CTZ_FILTER" style="display: none"><!-- <div class="ctz-content-top"></div> --><div class="ctz-content-center"><div class="ctz-filter-defail-who"><div class="ctz-label">屏蔽以下官方账号的回答</div><div class="ctz-one"><label><input class="ctz-i" name="removeZhihuOfficial" type="checkbox" value="on" />所有知乎官方账号</label></div><div class="ctz-flex-wrap ctz-one"><label><input class="ctz-i" name="removeStoryAnswer" type="checkbox" value="on" />故事档案局</label><label><input class="ctz-i" name="removeYanxuanAnswer" type="checkbox" value="on" />盐选科普</label><label><input class="ctz-i" name="removeYanxuanRecommend" type="checkbox" value="on" />盐选推荐</label><label><input class="ctz-i" name="removeYanxuanCPRecommend" type="checkbox" value="on" />盐选测评室</label></div></div><div class="ctz-flex-wrap ctz-one"><label><span class="ctz-label">屏蔽「匿名用户」回答</span><input class="ctz-i" name="removeAnonymousAnswer" type="checkbox" value="on" /></label></div><div class="ctz-filter-defail-tag ctz-one"><div class="ctz-label">屏蔽带有以下标签的回答</div><div class="ctz-flex-wrap"><label><input class="ctz-i" name="removeFromYanxuan" type="checkbox" value="on" />选自盐选专栏</label><label><input class="ctz-i" name="removeUnrealAnswer" type="checkbox" value="on" />带有虚构创作</label><label><input class="ctz-i" name="removeFromEBook" type="checkbox" value="on" />选自电子书</label></div></div><label class="ctz-one" style="display: flex; align-items: center"><span class="ctz-label">列表屏蔽视频<span class="ctz-label-tag ctz-label-tag-ZVideo">视频</span></span><input class="ctz-i" name="removeItemAboutVideo" type="checkbox" value="on" /></label><label class="ctz-one" style="display: flex; align-items: center"><span class="ctz-label">列表屏蔽文章<span class="ctz-label-tag ctz-label-tag-Article">文章</span></span><input class="ctz-i" name="removeItemAboutArticle" type="checkbox" value="on" /></label></div></div><div id="CTZ_BLACKLIST" style="display: none"><div class="ctz-content-top"></div><div class="ctz-content-center">CTZ_BLACKLIST</div></div><div id="CTZ_HISTORY" style="display: none"><div class="ctz-content-top"><a href="#CTZ_HISTORY_LIST">推荐列表缓存</a><a href="#CTZ_HISTORY_VIEW">浏览历史记录</a></div><div class="ctz-content-center"><div id="CTZ_HISTORY_LIST" style="display: none"><button class="ctz-button" name="buttonHistoryClear" data-id="list">清空列表缓存</button><div class="ctz-set-content"></div><div class="ctz-commit ta-c mt8">--- 最多缓存500条,包含已过滤项 ---</div></div><div id="CTZ_HISTORY_VIEW" style="display: none"><button class="ctz-button" name="buttonHistoryClear" data-id="view">清空历史记录</button><div class="ctz-set-content"></div><div class="ctz-commit ta-c mt8">--- 最多缓存500条 ---</div></div></div></div></div><div class="ctz-footer"><a href="https://github.com/liuyubing233/zhihu-custom-mobile" target="_blank">Github⭐</a><ahref="https://greasyfork.org/zh-CN/scripts/488508-%E7%9F%A5%E4%B9%8E%E4%BF%AE%E6%94%B9%E5%99%A8%E7%A7%BB%E5%8A%A8%E7%89%88-%E6%8C%81%E7%BB%AD%E6%9B%B4%E6%96%B0"target="_blank">GreasyFork</a></div></div><div id="CTZ_OPEN_BUTTON">⚙︎</div><div id="CTZ_MESSAGE_BOX"></div><div id="CTZ_LOADING_TOAST" style="display: none"><div class="ctz-loading-toast-icon"><span>↻</span></div><div class="ctz-loading-toast-text">加载中...</div></div><div id="CTZ_COMMENT" style="display: none"><div class="ctz-comment-header"><div class="ctz-comment-header-left"><div class="ctz-comment-count"><span>0</span>条评论</div><div class="ctz-comment-sort"><button name="score">默认</button><button name="ts">最新</button></div></div><button class="ctz-comment-btn" id="CTZ_BUTTON_COMMENT_CLOSE">✕</button></div><div class="ctz-comment-content"><div class="ctz-comment-list"></div></div></div><div id="CTZ_COMMENT_CHILD" style="display: none"><div class="ctz-comment-header"><button class="ctz-comment-btn" id="CTZ_BOTTOM_COMMENT_BACK">◀︎ 评论回复</button></div><div class="ctz-comment-content"><div class="ctz-comment-list"></div></div></div><div style="display: none" class="ctz-preview" id="CTZ_PREVIEW_IMAGE"><div><img src="" /></div></div>`;
- var INNER_CSS = `@keyframes rotate{from{transform:translate(-50%, -50%) rotate(0deg)}to{transform:translate(-50%, -50%) rotate(360deg)}}.hover-style{cursor:pointer}.hover-style:hover{color:#1677ff !important}.ctz-btn-box{display:flex}.ctz-btn-box button{flex:1;margin-right:12px}.ctz-btn-box button:last-child{margin:0}.ctz-one{margin:4px 0;border-bottom:1px solid #ebebeb;padding-bottom:4px}.ctz-desc,.ctz-commit{font-size:14px;color:#999}.ctz-desc b,.ctz-commit b{color:#e55353}.ctz-desc{padding-left:4px}.dis-if-c{display:inline-flex;align-items:center}.ta-c{text-align:center}.fwb{font-weight:bold}.mt8{margin-top:8px}.bg-ec7259{background:#ec7259}.bg-12c2e9{background:#12c2e9}.bg-00965e{background:#00965e}.bg-9c27b0{background:#9c27b0}.c-ec7259{color:#ec7259}.c-12c2e9{color:#12c2e9}.c-00965e{color:#00965e}.c-9c27b0{color:#9c27b0}.ctz-button{box-sizing:border-box;outline:none;position:relative;display:inline-block;font-weight:400;white-space:nowrap;text-align:center;border:1px solid transparent;cursor:pointer;transition:all .3s;user-select:none;touch-action:manipulation;font-size:14px;padding:4px 15px;border-radius:4px;background-color:#ffffff;border-color:#d9d9d9;color:rgba(0,0,0,0.88);box-shadow:0 2px 0 rgba(0,0,0,0.02)}.ctz-button:hover{color:#1677ff;border-color:#1677ff}.ctz-button:active{background:rgba(0,0,0,0.08) !important}.ctz-button[size='small'],.ctz-button.ctz-button-small{padding:2px 6px;font-size:12px;height:24px}.ctz-button.ctz-button-transparent{background:transparent}.ctz-button-red{color:#e55353 !important;border:1px solid #e55353 !important}.ctz-button-red:hover{color:#ec7259 !important;border:1px solid #ec7259 !important}.ctz-button:disabled{border-color:#d0d0d0;background-color:rgba(0,0,0,0.08);color:#b0b0b0;cursor:not-allowed}[name='buttonHistoryClear']{margin-bottom:12px}#CTZ_BACKGROUND,#CTZ_BACKGROUND_LIGHT,#CTZ_BACKGROUND_DARK{display:grid;gap:8px}#CTZ_BACKGROUND>label,#CTZ_BACKGROUND_LIGHT>label,#CTZ_BACKGROUND_DARK>label{position:relative;cursor:pointer}#CTZ_BACKGROUND>label input,#CTZ_BACKGROUND_LIGHT>label input,#CTZ_BACKGROUND_DARK>label input{position:absolute;pointer-events:none;width:20px;height:20px;top:18px;left:20px}#CTZ_BACKGROUND>label input:checked+div,#CTZ_BACKGROUND_LIGHT>label input:checked+div,#CTZ_BACKGROUND_DARK>label input:checked+div{border:4px solid #1677ff}#CTZ_BACKGROUND>label div,#CTZ_BACKGROUND_LIGHT>label div,#CTZ_BACKGROUND_DARK>label div{pointer-events:none;border:4px double #eee;font-size:14px;border-radius:12px;line-height:56px;padding-left:60px}#CTZ_BACKGROUND_LIGHT{color:#000}.ctz-set-background{margin:-12px}.ctz-set-background .ctz-background-title{padding:12px 12px 0}.ctz-set-background .ctz-background-content{padding:12px;border-bottom:1px solid #d9d9d9}.ctz-set-background .ctz-background-content:last-of-type{border:none}.css-nk32ej{display:none}.TopstoryMain [itemprop='zhihu:question']{display:inline}.RichContent-inner p{margin-bottom:1.4em}a.external,a.internal,a.ztext-link{border-bottom:1px solid #81858f;cursor:pointer;text-decoration:none}.OpenInAppButton,.css-u5ygyp{display:none}.Question-main .ContentItem.AnswerItem .ContentItem-expandButton,.TopstoryMain .ContentItem.AnswerItem .ContentItem-expandButton{position:absolute;height:100%;width:100%}.Question-main .ctz-n-button-close,.TopstoryMain .ctz-n-button-close{margin-left:12px;border:0 !important}.Question-main .ctz-n-button-comment,.TopstoryMain .ctz-n-button-comment{margin-left:12px}.ctz-answer-item .AuthorInfo-avatarWrapper .AuthorInfo-avatar,.ctz-recommend-item .AuthorInfo-avatarWrapper .AuthorInfo-avatar{box-sizing:border-box;margin:0;min-width:0;max-width:100%;background-color:#ffffff;width:38px;height:38px;border-radius:2px}.ctz-answer-item .RichContent-inner img,.ctz-recommend-item .RichContent-inner img{max-width:100%}.Question-mainEntity .ContentItem-actions>.ContentItem-action{display:none}.QuestionAnswer-content .ctz-answer-item{padding:0}#CTZ_COMMENT,#CTZ_COMMENT_CHILD{position:fixed;top:0;left:0;width:100%;height:100%;background:#fff;z-index:2000;font-size:16px;transition:all .2s;flex-direction:column}#CTZ_COMMENT button,#CTZ_COMMENT_CHILD button{padding:0;margin:0;border:0}#CTZ_COMMENT button.ctz-comment-button,#CTZ_COMMENT_CHILD button.ctz-comment-button{display:inline-block;font-size:14px;line-height:32px;text-align:center;cursor:pointer;background:rgba(132,145,165,0.1);border:1px solid transparent;border-radius:3px;margin:10px 0px 10px 54px;padding:0px 6px 0px 12px;height:32px;color:#8491a5;font-weight:500}.ctz-comment-header{height:48px;display:flex;padding:0 24px;align-items:center;border-top:1px solid #ebeced;border-bottom:1px solid #ebeced}.ctz-comment-header-left{flex:1;display:flex;align-items:center}.ctz-comment-content{flex:1;overflow-y:auto}.ctz-ci{display:flex;padding:10px 20px 14px}.ctz-ci-child{padding:10px 20px 14px 54px}.ctz-ci-avatar img{box-sizing:border-box;margin:0px;min-width:0px;max-width:100%;width:24px;height:24px;border-radius:2px;filter:brightness(.95);display:block;position:relative;background-color:#f8f8fa;flex:0 0 auto;text-indent:-9999px;overflow:hidden}.ctz-ci-right{flex:1;padding-left:10px}.ctz-ci-user a,.ctz-ci-user div{display:inline-block}.ctz-ci-user a{font-size:15px;font-weight:bold}.ctz-ci-user .ctz-tag{padding:0px 4px;color:#999;height:16px;line-height:16px;box-sizing:border-box;margin-left:4px;font-size:12px;border-radius:4px}.ctz-ci-user span{margin:0 6px;font-size:16px;color:#9196a1}.ctz-ci-content{margin:4px 0px 0px;min-width:0px;overflow:hidden;overflow-wrap:break-word;font-size:15px;line-height:21px}.ctz-ci-content>p{display:inline}.ctz-ci-info{display:flex;justify-content:space-between;padding-top:4px;color:#75849a;font-size:14px}.ctz-ci-info-left span{margin-right:6px}.ctz-comment-list{padding:10px 0}.ctz-comment-child-count{padding:0 20px;height:50px;line-height:50px;font-size:16px;font-weight:bold;border-bottom:1px solid #ebeced;border-top:20px solid rgba(132,145,165,0.1)}.ctz-comment-count{font-size:16px;font-weight:bold;padding-right:16px}.ctz-comment-sort{border:2px solid #f8f8fa;background:#f8f8fa}.ctz-comment-sort button{box-sizing:border-box;margin:0px;min-width:0px;border-radius:2px;text-align:center;cursor:pointer;width:50px;height:24px;font-size:12px;line-height:24px;font-weight:600;background:transparent;color:#81858f}.ctz-comment-vote span{pointer-events:none}.ctz-comment-vote-up{color:#ee3a43}.ctz-stop-scroll{height:100% !important;overflow:hidden !important}#CTZ_OPEN_BUTTON{position:fixed;font-size:48px;background:#e1e1e1;color:#000;opacity:.6;width:48px;height:48px;line-height:44px;border-radius:8px;z-index:2000;text-align:center}#CTZ_DIALOG{position:fixed;top:0;left:0;width:100%;height:100%;background:#f5f5f5;z-index:2001;font-size:16px;transition:all .2s;flex-direction:column}#CTZ_DIALOG input[type='checkbox']{width:16px;height:16px}#CTZ_DIALOG textarea{box-sizing:border-box;margin:0;padding:4px 11px;font-size:14px;line-height:1.5;list-style:none;position:relative;display:inline-block;min-width:0;border-width:1px;border-style:solid;border-color:#d9d9d9;border-radius:6px;transition:all .2s}#CTZ_DIALOG a{color:inherit}.ctz-header,.ctz-footer{font-size:16px;display:flex;align-items:center;height:48px;padding:0 12px}.ctz-footer a{margin-right:32px}.ctz-top-operate{flex:1;padding:0 12px;font-size:12px}.ctz-version{font-size:16px}#CTZ_CLOSE_DIALOG{font-weight:bold;width:40px;height:40px;color:rgba(0,0,0,0.45);background:transparent;border:none;font-size:24px}.ctz-menu{height:36px;display:flex}.ctz-menu>a{border-radius:12px 12px 0 0;flex:1;text-align:center;cursor:pointer;transition:initial !important;position:relative;display:flex;align-items:center;justify-content:center}.ctz-menu>a span{border-radius:8px;transition:all .3s;margin:0 4px;flex:1;box-sizing:border-box;align-items:center;line-height:26px}.ctz-menu>a.target{background:#fff}.ctz-menu>a.target::after,.ctz-menu>a.target::before{position:absolute;bottom:-12px;content:' ';background:radial-gradient(circle at top left, transparent 12px, #fff 0) top left,radial-gradient(circle at top right, transparent 12px, #fff 0) top right,radial-gradient(circle at bottom right, transparent 12px, #fff 0) bottom right,radial-gradient(circle at bottom left, transparent 12px, #fff 0) bottom left;background-size:50% 50%;background-repeat:no-repeat;width:24px;height:24px}.ctz-menu>a.target::before{left:-12px;z-index:-1}.ctz-menu>a.target::after{right:-12px;z-index:-1}.ctz-content{flex:1;overflow:hidden;background:#fff;border-radius:12px;padding:8px 0}.ctz-content>div{height:100%;flex-direction:column}.ctz-content-top{height:28px;display:flex;padding-bottom:8px}.ctz-content-top a{flex:1;text-align:center;line-height:28px;margin:0 8px;border-radius:8px}.ctz-content-top a.target{background-color:#f5f5f5}.ctz-content-top~.ctz-content-center{padding-top:0}.ctz-content-center{flex:1;overflow-y:auto;padding:12px}.ctz-content-center ::-webkit-scrollbar{width:8px;height:8px}.ctz-content-center ::-webkit-scrollbar-track{border-radius:0}.ctz-content-center ::-webkit-scrollbar-thumb{background:#bbb;transition:all .2s;border-radius:8px}.ctz-content-center ::-webkit-scrollbar-thumb:hover{background-color:rgba(95,95,95,0.7)}.ctz-hidden-item-br{margin:12px 0;width:100%;height:1px;position:relative}.ctz-hidden-item-br::after{content:'';position:absolute;top:0;left:50%;transform:translateX(-50%);width:65%;height:1px;background:#d9d9d9}#CTZ_HIDDEN .ctz-content-center label{margin-right:12px;margin-bottom:4px}#CTZ_BASIS_SHOW label{margin:8px 0}#CTZ_BASIS_SHOW label b{display:inline-block;padding:0 4px;background:#f5f5f5;border-radius:2px;margin-right:2px}.ctz-suspension-pickup{position:fixed;bottom:60px;right:14px;text-align:center;height:40px;line-height:40px;width:68px;border-radius:4px;font-size:14px;background:#fff}.ctz-label{line-height:28px}.ctz-label::after{content:':'}.ctz-flex-wrap{display:flex;flex-wrap:wrap;line-height:24px}.ctz-flex-wrap label{margin-right:4px;display:flex;align-items:center}.ctz-flex-wrap label input[type='radio']{margin:0 4px 0 0}.ctz-label-tag{font-weight:normal;padding:2px 4px;border-radius:4px;font-size:12px;color:#ffffff;margin:0 2px}.ctz-label-tag-Answer{background:#ec7259}.ctz-label-tag-ZVideo{background:#12c2e9}.ctz-label-tag-Article{background:#00965e}.ctz-label-tag-Pin{background:#9c27b0}#CTZ_HISTORY_LIST .ctz-set-content a,#CTZ_HISTORY_VIEW .ctz-set-content a{word-break:break-all;display:block;margin-bottom:12px;padding:6px 12px;border:1px solid #eee;border-radius:4px}.ctz-fetch-intercept .ctz-need-fetch{display:none}.ctz-fetch-intercept.ctz-fetch-intercept-close{color:#b0b0b0 !important;cursor:not-allowed}.ctz-fetch-intercept.ctz-fetch-intercept-close span.ctz-need-fetch{display:inline}.ctz-fetch-intercept.ctz-fetch-intercept-close div.ctz-need-fetch{display:block}.ctz-fetch-intercept.ctz-fetch-intercept-close .ctz-remove-block{cursor:not-allowed !important}.ctz-fetch-intercept.ctz-fetch-intercept-close .ctz-black-item .ctz-remove-block:hover,.ctz-fetch-intercept.ctz-fetch-intercept-close .ctz-black-item a:hover{background:transparent !important;color:#b0b0b0 !important}#CTZ_MESSAGE_BOX{position:fixed;left:0;top:10px;width:100%;z-index:2002}.ctz-message{margin:20px auto;width:70%;height:48px;display:flex;align-items:center;justify-content:center;font-size:14px;border-radius:8px;box-shadow:0 0 8px #d0d4d6,0 0 8px #e6eaec;margin-bottom:12px;background:#fff}.ctz-config-import-box{display:flex;flex-direction:column}.ctz-config-import-box>div,.ctz-config-import-box>textarea{margin-bottom:12px !important}.ctz-config-import-box textarea{height:120px;resize:vertical}#CTZ_LOADING_TOAST{position:fixed;top:50%;left:50%;width:100px;height:100px;background:rgba(0,0,0,0.25);color:#fff;transform:translate(-50%, -50%);border-radius:16px;z-index:2002;display:flex;flex-direction:column;align-items:center}#CTZ_LOADING_TOAST .ctz-loading-toast-text{padding-bottom:12px}#CTZ_LOADING_TOAST .ctz-loading-toast-icon{flex:1;position:relative;font-size:34px}#CTZ_LOADING_TOAST .ctz-loading-toast-icon span{position:absolute;top:50%;left:50%;animation:rotate 1.5s infinite}.ctz-preview{box-sizing:border-box;position:fixed;height:100%;width:100%;top:0;left:0;overflow-y:auto;z-index:200;background-color:rgba(18,18,18,0.4)}.ctz-preview div{display:flex;justify-content:center;align-items:center;min-height:100%;width:100%}.ctz-preview div img{cursor:zoom-out;user-select:none;max-width:100%}.ctz-comment-loading,.ctz-answer-loading,.ctz-list-loading{text-align:center;font-size:24px;color:#1677ff;position:relative;padding:0 0 12px;height:24px}.ctz-comment-loading span,.ctz-answer-loading span,.ctz-list-loading span{position:absolute;top:50%;left:50%;animation:rotate 1.5s infinite}.ctz-comment-end,.ctz-answer-end{text-align:center;padding:0 0 12px;color:#75849a}#CTZ_BUTTON_COMMENT_CLOSE{font-size:24px}#CTZ_TOP_SEARCH{width:100vw;display:flex;padding:6px 12px;height:50px;align-items:center;border-bottom:1px solid rgba(25,27,31,0.06);box-sizing:border-box}#CTZ_TOP_SEARCH input{flex:1;background-color:hsla(210,5%,93%,0.72);border-radius:16px;font-size:14px;height:30px;margin:0 10px;padding-left:8px;padding-right:0;border:1px solid #ebeced}#CTZ_TOP_SEARCH button{width:40px;color:#1772f6;font-size:16px}`;
- var INNER_VERSION = `2.9.2`;
- var initHTML = () => {
- document.body.appendChild(domC("div", { id: "CTZ_MAIN", innerHTML: INNER_HTML }));
- fnHaveTopSearch();
- openButtonPosition();
- dom(".ctz-version").innerText = `version: ${INNER_VERSION}`;
- dom(".ctz-menu").innerHTML = HEADER.map(({ href, value }) => `<a href="${href}"><span>${value}</span></a>`).join("");
- addBackgroundElement();
- dom("#CTZ_HIDDEN .ctz-content-center").innerHTML = HIDDEN_ARRAY.map(
- (itemArr) => itemArr.map(({ label, value }) => `<label class="dis-if-c"><input class="ctz-i" name="${value}" type="checkbox" value="on" />${label}</label>`).join("") + '<div class="ctz-hidden-item-br"></div>'
- ).join("");
- dom("#CTZ_BASIS_SHOW").innerHTML += BASIC_SHOW_CONTENT.map(
- ({ label, value, needFetch }) => `<label class="ctz-flex-wrap ${needFetch ? "ctz-fetch-intercept" : ""}"><span class="ctz-label">${label}${needFetch ? '<span class="ctz-need-fetch">(接口拦截已关闭,此功能无法使用)</span>' : ""}</span><input class="ctz-i" name="${value}" type="checkbox" value="on" /></label>`
- ).join("");
- myMenu.init();
- };
- var myScroll = {
- stop: () => dom("body").classList.add("ctz-stop-scroll"),
- on: () => dom("body").classList.remove("ctz-stop-scroll")
- };
- var echoData = async () => {
- const pfConfig = await myStorage.getConfig();
- const textSameName = {
- globalTitle: (e2) => e2.value = pfConfig.globalTitle || document.title,
- customizeCss: (e2) => e2.value = pfConfig.customizeCss || ""
- };
- const echoText = (even) => {
- textSameName[even.name] ? textSameName[even.name](even) : even.value = pfConfig[even.name];
- };
- const echo = {
- radio: (even) => pfConfig.hasOwnProperty(even.name) && even.value === pfConfig[even.name] && (even.checked = true),
- checkbox: (even) => even.checked = pfConfig[even.name] || false,
- text: echoText,
- number: echoText,
- range: (even) => {
- const nValue = pfConfig[even.name];
- const nodeRange = dom(`[name="${even.name}"]`);
- const min = nodeRange && nodeRange.min;
- const rangeNum = isNaN(+nValue) || !(+nValue > 0) ? min : nValue;
- even.value = rangeNum;
- const nodeNewOne = domById(even.name);
- nodeNewOne && (nodeNewOne.innerText = rangeNum);
- }
- };
- const doEcho = (item) => {
- echo[item.type] && echo[item.type](item);
- };
- const nodeArrInputClick = domA(`.${CLASS_INPUT_CLICK}`);
- for (let i2 = 0, len = nodeArrInputClick.length; i2 < len; i2++) {
- doEcho(nodeArrInputClick[i2]);
- }
- const nodeArrInputChange = domA(`.${CLASS_INPUT_CHANGE}`);
- for (let i2 = 0, len = nodeArrInputChange.length; i2 < len; i2++) {
- doEcho(nodeArrInputChange[i2]);
- }
- };
- var echoHistory = async () => {
- const history = await myStorage.getHistory();
- const { list, view } = history;
- const nodeList = dom("#CTZ_HISTORY_LIST .ctz-set-content");
- const nodeView = dom("#CTZ_HISTORY_VIEW .ctz-set-content");
- nodeList && (nodeList.innerHTML = list.join(""));
- nodeView && (nodeView.innerHTML = view.join(""));
- };
- var addHistoryView = async () => {
- const { href, origin, pathname, hash } = location;
- const question = "www.zhihu.com/question/";
- const article = "zhuanlan.zhihu.com/p/";
- const video = "www.zhihu.com/zvideo/";
- let name = href.replace(hash, "");
- setTimeout(async () => {
- if (!href.includes(question) && !href.includes(article) && !href.includes(video))
- return;
- href.includes(question) && dom(".QuestionHeader-title") && (name = `<b class="c-ec7259">「问题」</b>${dom(".QuestionHeader-title").innerText}`);
- href.includes(article) && dom(".Post-Title") && (name = `<b class="c-00965e">「文章」</b>${dom(".Post-Title").innerText}`);
- href.includes(video) && dom(".ZVideo-title") && (name = `<b class="c-12c2e9">「视频」</b>${dom(".ZVideo-title").innerText}`);
- const nA = `<a href="${origin + pathname}" target="_blank">${name}</a>`;
- const { view } = await myStorage.getHistory();
- if (!view.includes(nA)) {
- view.unshift(nA);
- await myStorage.setHistoryItem("view", view);
- }
- }, 500);
- };
- var myDialog = {
- open: (e2) => {
- e2 && e2.preventDefault();
- const nodeDialog = domById("CTZ_DIALOG");
- nodeDialog && (nodeDialog.style.display = "flex");
- myScroll.stop();
- echoData();
- echoHistory();
- },
- hide: () => {
- const nodeDialog = domById("CTZ_DIALOG");
- nodeDialog && (nodeDialog.style.display = "none");
- myScroll.on();
- }
- };
- var DN = "display:none!important;";
- var myHidden = {
- init: async function() {
- const content = await this.change();
- fnInitDomStyle("CTZ_STYLE_HIDDEN", content || "");
- },
- change: async function() {
- const config = await myStorage.getConfig();
- const cssHidden = Object.keys(this.hiddenItem).map((key) => config[key] ? this.hiddenItem[key] : "").join("");
- let cssHiddenMore = "";
- this.hiddenArray.forEach(({ keys, value }) => {
- let trueNumber = 0;
- keys.forEach((key) => config[key] && trueNumber++);
- trueNumber === keys.length && (cssHiddenMore += value);
- });
- return cssHidden + cssHiddenMore;
- },
- hiddenItem: {
- hiddenOpenApp: `.OpenInAppButton,.css-rg1dmv,.css-1gapyfo,.css-183aq3r,.css-wfkf2m{${DN}}`,
- hiddenLogo: `.MobileAppHeader-logo,a[aria-label="知乎"]{${DN}}`,
- hiddenHeader: `.MobileAppHeader,.ColumnPageHeader.Sticky{${DN}}`,
- hiddenItemActions: `.TopstoryItem .ContentItem-actions:not(.Sticky),.SearchMain .ContentItem-actions{${DN}}`,
- hiddenBottomSticky: `.ContentItem-actions.Sticky,.css-1tu4yh8{${DN}}`,
- hiddenReward: `.Reward{${DN}}`,
- hiddenListImg: `.RichContent-cover,.css-uw6cz9,.SearchItem-rightImg{${DN}}`,
- hiddenReadMoreText: ".ContentItem-more{font-size:0!important;}",
- hiddenAnswers: `.RichContent-inner,.css-3ny988,.Topstory-recommend .VideoAnswerPlayer{${DN}}`,
- hiddenListVideoContent: `.Topstory-recommend .ZVideoItem-video,.Topstory-recommend .VideoAnswerPlayer,.Topstory-recommend .ZVideoItem .RichContent{${DN}}`,
- hiddenZhuanlanActions: `.zhuanlan .RichContent-actions.is-fixed>.ContentItem-actions{${DN}}`,
- hiddenZhuanlanTitleImage: ".css-1ntkiwo,.TitleImage,.css-78p1r9,.ArticleItem .RichContent>div:first-of-type:not(.RichContent-cover)>div:last-of-type{display: none!important;}",
- hiddenDetailAvatar: `.AnswerItem .AuthorInfo .AuthorInfo-avatarWrapper{${DN}}.AnswerItem .AuthorInfo .AuthorInfo-content{margin-left:0!important;}`,
- hiddenDetailBadge: `.AnswerItem .AuthorInfo .AuthorInfo-detail{${DN}}`,
- hiddenDetailVoters: `.css-dvccr2{${DN}}`,
- hiddenWhoVoters: ".css-1vqda4a{display: none!important;}",
- hiddenDetailName: `.AnswerItem .AuthorInfo .AuthorInfo-head{${DN}}`,
- hiddenQuestionFollowing: `.QuestionHeader .FollowButton{${DN}}`,
- hiddenQuestionAnswer: `.QuestionHeader .FollowButton ~ a{${DN}}`,
- hiddenZhuanlanFollowButton: `.zhuanlan .FollowButton{${DN}}`,
- hiddenZhuanlanAvatarWrapper: `.zhuanlan .AuthorInfo-avatarWrapper{${DN}}`,
- hiddenZhuanlanAuthorInfoHead: `.zhuanlan .AuthorInfo-head{${DN}}`,
- hiddenZhuanlanAuthorInfoDetail: `.zhuanlan .AuthorInfo-detail{${DN}}`,
- hiddenAnswerItemActions: `.Question-main .ContentItem-actions{${DN}}`,
- hiddenAnswerItemTime: `.Question-main .ContentItem-time{${DN}margin: 0;}`,
- hiddenAnswerItemTimeButHaveIP: `.Question-main .ContentItem-time>a{${DN}}.Question-main .ContentItem-time:empty{${DN}margin: 0;}`,
- hiddenZhuanlanImage: `.zhuanlan .origin_image{${DN}}`,
- hiddenCommitImg: `.comment_img{${DN}}`,
- hiddenAnswerYanxuanRecommend: `.Question-mainEntity .KfeCollection-VipRecommendCard{${DN}}`,
- hiddenAD: `.TopstoryItem--advertCard,.Pc-card,.Pc-word,.RichText-ADLinkCardContainer,#div-gpt-ad-bannerAd,#div-gpt-ad-hotFeedAd,.MRelateFeedAd,.MHotFeedAd,.MBannerAd{${DN}}`,
- hiddenAnswerRelatedRecommend: `.Question-mainEntity .RelatedReadings{${DN}}`,
- hiddenAnswerHotRecommend: `.Question-mainEntity .HotQuestions{${DN}}`
- },
- hiddenArray: []
- };
- var myVersion = {
- init: async function() {
- const config = await myStorage.getConfig();
- fnInitDomStyle("CTZ_STYLE_VERSION", this.vQuestionTitleTag(config) + this.openButtonInvisible(config) + this.vCommentHeaderToBottom(config));
- },
- change: function() {
- this.init();
- },
- /** 内容标题添加类别显示 */
- vQuestionTitleTag: function({ questionTitleTag }) {
- const cssTag = "margin-right:6px;font-weight:normal;display:inline;padding:2px 4px;border-radius:4px;font-size:12px;color:#ffffff";
- return fnReturnStr(
- `.AnswerItem .ContentItem-title::before{content:'问答';background:#ec7259}.TopstoryItem .PinItem::before{content:'想法';background:#9c27b0;${cssTag}}.PinItem>.ContentItem-title{margin-top:4px;}.ZvideoItem .ContentItem-title::before{content:'视频';background:#12c2e9}.ZVideoItem .ContentItem-title::before{content:'视频';background:#12c2e9}.ArticleItem .ContentItem-title::before{content:'文章';background:#00965e}.ContentItem .ContentItem-title::before{margin-right:6px;font-weight:normal;display:inline;padding:2px 4px;border-radius:4px;font-size:12px;color:#ffffff}.TopstoryQuestionAskItem .ContentItem-title::before{content:'提问';background:#533b77}`,
- questionTitleTag
- );
- },
- vCommentHeaderToBottom: function({ commentHeaderToBottom }) {
- return fnReturnStr(`#CTZ_COMMENT,#CTZ_COMMENT_CHILD{flex-direction: column-reverse!important;}`, commentHeaderToBottom);
- },
- /** 隐藏修改器唤起按钮 */
- openButtonInvisible: function({ openButtonInvisible }) {
- return fnReturnStr("#CTZ_OPEN_BUTTON{display: none!important;}", openButtonInvisible);
- }
- };
- var onInitStyleExtra = () => {
- myHidden.init();
- loadBackground();
- myVersion.init();
- loadFindTheme();
- };
- var myButtonOperate = {
- /** 清空历史记录 */
- buttonHistoryClear: async (target) => {
- const prevHistory = await myStorage.getHistory();
- const dataId = target.getAttribute("data-id");
- const isClear = confirm(`是否清空${target.innerText}`);
- if (!isClear)
- return;
- prevHistory[dataId] = [];
- await myStorage.setHistory(prevHistory);
- echoHistory();
- },
- /** 获取当前配置 */
- configExport: async () => {
- const config = await myStorage.get(NAME_CONFIG) ?? "";
- copy(config);
- message("已复制当前配置");
- },
- /** 恢复默认配置 */
- configReset: async function() {
- const isUse = confirm("是否启恢复默认配置?\n该功能会覆盖当前配置,建议先将配置获取保存");
- if (!isUse)
- return;
- const { filterKeywords = [], removeBlockUserContentList = [] } = await myStorage.getConfig();
- await myStorage.setConfig({
- ...CONFIG_DEFAULT,
- filterKeywords,
- removeBlockUserContentList
- });
- resetData();
- },
- /** 导入配置 */
- configImport: async function() {
- const nodeImport = dom("[name=textConfigImport]");
- const configImport = nodeImport ? nodeImport.value : "{}";
- const configThis = JSON.parse(configImport);
- const configPrev = await myStorage.getConfig();
- const nConfig = {
- ...configPrev,
- ...configThis
- };
- await myStorage.setConfig(nConfig);
- resetData();
- message("配置已导入");
- },
- /** 自定义样式 */
- styleCustom: async function() {
- const nodeText = dom('[name="textStyleCustom"]');
- const value = nodeText ? nodeText.value : "";
- await myStorage.updateConfig("customizeCss", value);
- myCustomStyle.change(value);
- },
- styleCustomReset: async function() {
- dom('[name="textStyleCustom"]').value = "";
- await myStorage.updateConfig("customizeCss", "");
- myCustomStyle.change("");
- }
- };
- var resetData = () => {
- onInitStyleExtra();
- echoData();
- onUseThemeDark();
- };
- var timeFormatter = (time, formatter = "YYYY-MM-DD HH:mm:ss") => {
- if (!time)
- return "";
- const date = new Date(time);
- const year = date.getFullYear();
- const month = date.getMonth() + 1;
- const day = date.getDate();
- const hour = date.getHours();
- const min = date.getMinutes();
- const sec = date.getSeconds();
- const preArr = (num) => String(num).length !== 2 ? "0" + String(num) : String(num);
- return formatter.replace(/YYYY/g, String(year)).replace(/MM/g, preArr(month)).replace(/DD/g, preArr(day)).replace(/HH/g, preArr(hour)).replace(/mm/g, preArr(min)).replace(/ss/g, preArr(sec));
- };
- var addTimeForQuestion = async () => {
- const { releaseTimeForQuestion } = await myStorage.getConfig();
- const className = "ctz-question-time";
- if (dom(`.${className}`))
- return;
- const nodeCreated = dom('[itemprop="dateCreated"]');
- const nodeModified = dom('[itemprop="dateModified"]');
- const nodeTitle = dom(".QuestionHeader-title");
- if (!(releaseTimeForQuestion && nodeCreated && nodeModified && nodeTitle))
- return;
- const createTime = timeFormatter(nodeCreated.content);
- const updateTime = timeFormatter(nodeModified.content);
- nodeTitle.appendChild(
- domC("div", {
- className,
- innerHTML: `<div>创建于:${createTime}</div>${updateTime !== createTime ? `<div>编辑于:${updateTime}</div>` : ""}`,
- style: "font-size: 14px;"
- })
- );
- };
- var addTimeForArticle = async () => {
- const { releaseTimeForArticle } = await myStorage.getConfig();
- const className = "ctz-article-create-time";
- if (dom(`.${className}`))
- return;
- const nodeContentTime = dom(".ContentItem-time");
- const nodeHeader = dom(".Post-Header");
- if (!(releaseTimeForArticle && nodeContentTime && nodeHeader))
- return;
- nodeHeader.appendChild(
- domC("span", {
- className,
- style: "color: #8590a6;line-height: 30px;",
- innerHTML: nodeContentTime.innerText || ""
- })
- );
- };
- var createTimeHTML = (createTime, updateTime) => {
- return `<div class="${CLASS_TIME_ITEM}" style="line-height: 24px;padding-top: 2px;font-size: 14px;"><div>创建于:${timeFormatter(+`${createTime}`)}</div>${createTime !== updateTime && updateTime ? `<div>编辑于:${timeFormatter(+`${updateTime}`)}</div>` : ""}</div>`;
- };
- var fnChanger = async (ev) => {
- const doCssVersion = ["questionTitleTag", "openButtonInvisible", "commentHeaderToBottom"];
- const { name, value, checked, type } = ev;
- const changeBackground = () => {
- myVersion.change();
- loadBackground();
- onUseThemeDark();
- };
- const ob = {
- [INPUT_NAME_THEME]: changeBackground,
- [INPUT_NAME_ThEME_LIGHT]: changeBackground,
- [INPUT_NAME_THEME_DARK]: changeBackground,
- releaseTimeForQuestion: addTimeForQuestion,
- releaseTimeForArticle: addTimeForArticle,
- haveTopSearch: fnHaveTopSearch
- };
- await myStorage.updateConfig(name, type === "checkbox" ? checked : value);
- const nodeName = domById(name);
- type === "range" && nodeName && (nodeName.innerText = value);
- if (/^hidden/.test(name)) {
- myHidden.init();
- return;
- }
- if (doCssVersion.includes(name)) {
- myVersion.change();
- return;
- }
- ob[name] && ob[name]();
- };
- function md5(s2) {
- function f12(t2, e2, n2) {
- var r2;
- !function(o3) {
- "use strict";
- function i2(t3, e3) {
- var n3 = (65535 & t3) + (65535 & e3);
- return (t3 >> 16) + (e3 >> 16) + (n3 >> 16) << 16 | 65535 & n3;
- }
- function a2(t3, e3, n3, r3, o4, a3) {
- return i2((u2 = i2(i2(e3, t3), i2(r3, a3))) << (c3 = o4) | u2 >>> 32 - c3, n3);
- var u2, c3;
- }
- function u(t3, e3, n3, r3, o4, i3, u2) {
- return a2(e3 & n3 | ~e3 & r3, t3, e3, o4, i3, u2);
- }
- function c2(t3, e3, n3, r3, o4, i3, u2) {
- return a2(e3 & r3 | n3 & ~r3, t3, e3, o4, i3, u2);
- }
- function s3(t3, e3, n3, r3, o4, i3, u2) {
- return a2(e3 ^ n3 ^ r3, t3, e3, o4, i3, u2);
- }
- function l2(t3, e3, n3, r3, o4, i3, u2) {
- return a2(n3 ^ (e3 | ~r3), t3, e3, o4, i3, u2);
- }
- function f(t3, e3) {
- var n3, r3, o4, a3, f2;
- t3[e3 >> 5] |= 128 << e3 % 32, t3[14 + (e3 + 64 >>> 9 << 4)] = e3;
- var d2 = 1732584193, p2 = -271733879, h3 = -1732584194, v2 = 271733878;
- for (n3 = 0; n3 < t3.length; n3 += 16)
- r3 = d2, o4 = p2, a3 = h3, f2 = v2, d2 = u(d2, p2, h3, v2, t3[n3], 7, -680876936), v2 = u(v2, d2, p2, h3, t3[n3 + 1], 12, -389564586), h3 = u(h3, v2, d2, p2, t3[n3 + 2], 17, 606105819), p2 = u(p2, h3, v2, d2, t3[n3 + 3], 22, -1044525330), d2 = u(d2, p2, h3, v2, t3[n3 + 4], 7, -176418897), v2 = u(v2, d2, p2, h3, t3[n3 + 5], 12, 1200080426), h3 = u(h3, v2, d2, p2, t3[n3 + 6], 17, -1473231341), p2 = u(p2, h3, v2, d2, t3[n3 + 7], 22, -45705983), d2 = u(d2, p2, h3, v2, t3[n3 + 8], 7, 1770035416), v2 = u(v2, d2, p2, h3, t3[n3 + 9], 12, -1958414417), h3 = u(h3, v2, d2, p2, t3[n3 + 10], 17, -42063), p2 = u(p2, h3, v2, d2, t3[n3 + 11], 22, -1990404162), d2 = u(d2, p2, h3, v2, t3[n3 + 12], 7, 1804603682), v2 = u(v2, d2, p2, h3, t3[n3 + 13], 12, -40341101), h3 = u(h3, v2, d2, p2, t3[n3 + 14], 17, -1502002290), d2 = c2(d2, p2 = u(p2, h3, v2, d2, t3[n3 + 15], 22, 1236535329), h3, v2, t3[n3 + 1], 5, -165796510), v2 = c2(v2, d2, p2, h3, t3[n3 + 6], 9, -1069501632), h3 = c2(h3, v2, d2, p2, t3[n3 + 11], 14, 643717713), p2 = c2(p2, h3, v2, d2, t3[n3], 20, -373897302), d2 = c2(d2, p2, h3, v2, t3[n3 + 5], 5, -701558691), v2 = c2(v2, d2, p2, h3, t3[n3 + 10], 9, 38016083), h3 = c2(h3, v2, d2, p2, t3[n3 + 15], 14, -660478335), p2 = c2(p2, h3, v2, d2, t3[n3 + 4], 20, -405537848), d2 = c2(d2, p2, h3, v2, t3[n3 + 9], 5, 568446438), v2 = c2(v2, d2, p2, h3, t3[n3 + 14], 9, -1019803690), h3 = c2(h3, v2, d2, p2, t3[n3 + 3], 14, -187363961), p2 = c2(p2, h3, v2, d2, t3[n3 + 8], 20, 1163531501), d2 = c2(d2, p2, h3, v2, t3[n3 + 13], 5, -1444681467), v2 = c2(v2, d2, p2, h3, t3[n3 + 2], 9, -51403784), h3 = c2(h3, v2, d2, p2, t3[n3 + 7], 14, 1735328473), d2 = s3(d2, p2 = c2(p2, h3, v2, d2, t3[n3 + 12], 20, -1926607734), h3, v2, t3[n3 + 5], 4, -378558), v2 = s3(v2, d2, p2, h3, t3[n3 + 8], 11, -2022574463), h3 = s3(h3, v2, d2, p2, t3[n3 + 11], 16, 1839030562), p2 = s3(p2, h3, v2, d2, t3[n3 + 14], 23, -35309556), d2 = s3(d2, p2, h3, v2, t3[n3 + 1], 4, -1530992060), v2 = s3(v2, d2, p2, h3, t3[n3 + 4], 11, 1272893353), h3 = s3(h3, v2, d2, p2, t3[n3 + 7], 16, -155497632), p2 = s3(p2, h3, v2, d2, t3[n3 + 10], 23, -1094730640), d2 = s3(d2, p2, h3, v2, t3[n3 + 13], 4, 681279174), v2 = s3(v2, d2, p2, h3, t3[n3], 11, -358537222), h3 = s3(h3, v2, d2, p2, t3[n3 + 3], 16, -722521979), p2 = s3(p2, h3, v2, d2, t3[n3 + 6], 23, 76029189), d2 = s3(d2, p2, h3, v2, t3[n3 + 9], 4, -640364487), v2 = s3(v2, d2, p2, h3, t3[n3 + 12], 11, -421815835), h3 = s3(h3, v2, d2, p2, t3[n3 + 15], 16, 530742520), d2 = l2(d2, p2 = s3(p2, h3, v2, d2, t3[n3 + 2], 23, -995338651), h3, v2, t3[n3], 6, -198630844), v2 = l2(v2, d2, p2, h3, t3[n3 + 7], 10, 1126891415), h3 = l2(h3, v2, d2, p2, t3[n3 + 14], 15, -1416354905), p2 = l2(p2, h3, v2, d2, t3[n3 + 5], 21, -57434055), d2 = l2(d2, p2, h3, v2, t3[n3 + 12], 6, 1700485571), v2 = l2(v2, d2, p2, h3, t3[n3 + 3], 10, -1894986606), h3 = l2(h3, v2, d2, p2, t3[n3 + 10], 15, -1051523), p2 = l2(p2, h3, v2, d2, t3[n3 + 1], 21, -2054922799), d2 = l2(d2, p2, h3, v2, t3[n3 + 8], 6, 1873313359), v2 = l2(v2, d2, p2, h3, t3[n3 + 15], 10, -30611744), h3 = l2(h3, v2, d2, p2, t3[n3 + 6], 15, -1560198380), p2 = l2(p2, h3, v2, d2, t3[n3 + 13], 21, 1309151649), d2 = l2(d2, p2, h3, v2, t3[n3 + 4], 6, -145523070), v2 = l2(v2, d2, p2, h3, t3[n3 + 11], 10, -1120210379), h3 = l2(h3, v2, d2, p2, t3[n3 + 2], 15, 718787259), p2 = l2(p2, h3, v2, d2, t3[n3 + 9], 21, -343485551), d2 = i2(d2, r3), p2 = i2(p2, o4), h3 = i2(h3, a3), v2 = i2(v2, f2);
- return [d2, p2, h3, v2];
- }
- function d(t3) {
- var e3, n3 = "", r3 = 32 * t3.length;
- for (e3 = 0; e3 < r3; e3 += 8)
- n3 += String.fromCharCode(t3[e3 >> 5] >>> e3 % 32 & 255);
- return n3;
- }
- function p(t3) {
- var e3, n3 = [];
- for (n3[(t3.length >> 2) - 1] = void 0, e3 = 0; e3 < n3.length; e3 += 1)
- n3[e3] = 0;
- var r3 = 8 * t3.length;
- for (e3 = 0; e3 < r3; e3 += 8)
- n3[e3 >> 5] |= (255 & t3.charCodeAt(e3 / 8)) << e3 % 32;
- return n3;
- }
- function h2(t3) {
- var e3, n3, r3 = "0123456789abcdef", o4 = "";
- for (n3 = 0; n3 < t3.length; n3 += 1)
- e3 = t3.charCodeAt(n3), o4 += r3.charAt(e3 >>> 4 & 15) + r3.charAt(15 & e3);
- return o4;
- }
- function v(t3) {
- return unescape(encodeURIComponent(t3));
- }
- function A2(t3) {
- return function(t4) {
- return d(f(p(t4), 8 * t4.length));
- }(v(t3));
- }
- function m(t3, e3) {
- return function(t4, e4) {
- var n3, r3, o4 = p(t4), i3 = [], a3 = [];
- for (i3[15] = a3[15] = void 0, o4.length > 16 && (o4 = f(o4, 8 * t4.length)), n3 = 0; n3 < 16; n3 += 1)
- i3[n3] = 909522486 ^ o4[n3], a3[n3] = 1549556828 ^ o4[n3];
- return r3 = f(i3.concat(p(e4)), 512 + 8 * e4.length), d(f(a3.concat(r3), 640));
- }(v(t3), v(e3));
- }
- function g2(t3, e3, n3) {
- return e3 ? n3 ? m(e3, t3) : h2(m(e3, t3)) : n3 ? A2(t3) : h2(A2(t3));
- }
- void 0 === (r2 = function() {
- return g2;
- }.call(e2, n2, e2, t2)) || (t2.exports = r2);
- }();
- }
- var o2 = {};
- f12(o2);
- return o2.exports(s2);
- }
- function zhihu_enc(s) {
- function f1(__unused_webpack_module, exports) {
- "use strict";
- var __webpack_unused_export__;
- function o(t2) {
- return (o = "function" == typeof Symbol && "symbol" == typeof Symbol.A ? function(t3) {
- return typeof t3;
- } : function(t3) {
- return t3 && "function" == typeof Symbol && t3.constructor === Symbol && t3 !== Symbol.prototype ? "symbol" : typeof t3;
- })(t2);
- }
- function x(e2) {
- return C(e2) || s(e2) || t();
- }
- function C(t2) {
- if (Array.isArray(t2)) {
- for (var e2 = 0, n2 = new Array(t2.length); e2 < t2.length; e2++)
- n2[e2] = t2[e2];
- return n2;
- }
- }
- function s(t2) {
- if (Symbol.A in Object(t2) || "[object Arguments]" === Object.prototype.toString.call(t2))
- return Array.from(t2);
- }
- function t() {
- throw new TypeError("Invalid attempt to spread non-iterable instance");
- }
- __webpack_unused_export__ = {
- value: true
- };
- var A = "3.0", S = "undefined" != typeof window ? window : {}, h;
- function i(t2, e2, n2) {
- e2[n2] = 255 & t2 >>> 24, e2[n2 + 1] = 255 & t2 >>> 16, e2[n2 + 2] = 255 & t2 >>> 8, e2[n2 + 3] = 255 & t2;
- }
- function B(t2, e2) {
- return (255 & t2[e2]) << 24 | (255 & t2[e2 + 1]) << 16 | (255 & t2[e2 + 2]) << 8 | 255 & t2[e2 + 3];
- }
- function Q(t2, e2) {
- return (4294967295 & t2) << e2 | t2 >>> 32 - e2;
- }
- function G(t2) {
- var e2 = new Array(4), n2 = new Array(4);
- i(t2, e2, 0), n2[0] = h.zb[255 & e2[0]], n2[1] = h.zb[255 & e2[1]], n2[2] = h.zb[255 & e2[2]], n2[3] = h.zb[255 & e2[3]];
- var r2 = B(n2, 0);
- return r2 ^ Q(r2, 2) ^ Q(r2, 10) ^ Q(r2, 18) ^ Q(r2, 24);
- }
- var __g = {
- x: function(t2, e2) {
- for (var n2 = [], r2 = t2.length, o2 = 0; 0 < r2; r2 -= 16) {
- for (var i2 = t2.slice(16 * o2, 16 * (o2 + 1)), a2 = new Array(16), u = 0; u < 16; u++)
- a2[u] = i2[u] ^ e2[u];
- e2 = __g.r(a2), n2 = n2.concat(e2), o2++;
- }
- return n2;
- },
- r: function(t2) {
- var e2 = new Array(16), n2 = new Array(36);
- n2[0] = B(t2, 0), n2[1] = B(t2, 4), n2[2] = B(t2, 8), n2[3] = B(t2, 12);
- for (var r2 = 0; r2 < 32; r2++) {
- var o2 = G(n2[r2 + 1] ^ n2[r2 + 2] ^ n2[r2 + 3] ^ h.zk[r2]);
- n2[r2 + 4] = n2[r2] ^ o2;
- }
- return i(n2[35], e2, 0), i(n2[34], e2, 4), i(n2[33], e2, 8), i(n2[32], e2, 12), e2;
- }
- };
- function l() {
- this.C = [0, 0, 0, 0], this.s = 0, this.t = [], this.S = [], this.h = [], this.i = [], this.B = [], this.Q = false, this.G = [], this.D = [], this.w = ####, this.g = null, this.a = Date.now(), this.e = 0, this.T = 255, this.V = null, this.U = Date.now, this.M = new Array(32);
- }
- l.prototype.O = function(A, C, s) {
- for (var t, S, h, i, B, Q, G, D, w, g, a, e, E, T, r, V, U, M, O, c, I; this.T < this.w; )
- try {
- switch (this.T) {
- case 27:
- this.C[this.c] = this.C[this.I] >> this.C[this.F], this.M[12] = 35, this.T = this.T * (this.C.length + (this.M[13] ? 3 : 9)) + 1;
- break;
- case 34:
- this.C[this.c] = this.C[this.I] & this.C[this.F], this.T = this.T * (this.M[15] - 6) + 12;
- break;
- case 41:
- this.C[this.c] = this.C[this.I] <= this.C[this.F], this.T = 8 * this.T + 27;
- break;
- case 48:
- this.C[this.c] = !this.C[this.I], this.T = 7 * this.T + 16;
- break;
- case 50:
- this.C[this.c] = this.C[this.I] | this.C[this.F], this.T = 6 * this.T + 52;
- break;
- case 57:
- this.C[this.c] = this.C[this.I] >>> this.C[this.F], this.T = 7 * this.T - 47;
- break;
- case 64:
- this.C[this.c] = this.C[this.I] << this.C[this.F], this.T = 5 * this.T + 32;
- break;
- case 71:
- this.C[this.c] = this.C[this.I] ^ this.C[this.F], this.T = 6 * this.T - 74;
- break;
- case 78:
- this.C[this.c] = this.C[this.I] & this.C[this.F], this.T = 4 * this.T + 40;
- break;
- case 80:
- this.C[this.c] = this.C[this.I] < this.C[this.F], this.T = 5 * this.T - 48;
- break;
- case 87:
- this.C[this.c] = -this.C[this.I], this.T = 3 * this.T + 91;
- break;
- case 94:
- this.C[this.c] = this.C[this.I] > this.C[this.F], this.T = 4 * this.T - 24;
- break;
- case 101:
- this.C[this.c] = this.C[this.I] in this.C[this.F], this.T = 3 * this.T + 49;
- break;
- case 108:
- this.C[this.c] = o(this.C[this.I]), this.T = 2 * this.T + 136;
- break;
- case 110:
- this.C[this.c] = this.C[this.I] !== this.C[this.F], this.T += 242;
- break;
- case 117:
- this.C[this.c] = this.C[this.I] && this.C[this.F], this.T = 3 * this.T + 1;
- break;
- case 124:
- this.C[this.c] = this.C[this.I] || this.C[this.F], this.T += 228;
- break;
- case 131:
- this.C[this.c] = this.C[this.I] >= this.C[this.F], this.T = 3 * this.T - 41;
- break;
- case 138:
- this.C[this.c] = this.C[this.I] == this.C[this.F], this.T = 2 * this.T + 76;
- break;
- case 140:
- this.C[this.c] = this.C[this.I] % this.C[this.F], this.T += 212;
- break;
- case 147:
- this.C[this.c] = this.C[this.I] / this.C[this.F], this.T += 205;
- break;
- case 154:
- this.C[this.c] = this.C[this.I] * this.C[this.F], this.T += 198;
- break;
- case 161:
- this.C[this.c] = this.C[this.I] - this.C[this.F], this.T += 191;
- break;
- case 168:
- this.C[this.c] = this.C[this.I] + this.C[this.F], this.T = 2 * this.T + 16;
- break;
- case 254:
- this.C[this.c] = eval(i), this.T += 20 < this.M[11] ? 98 : 89;
- break;
- case 255:
- this.s = C || 0, this.M[26] = 52, this.T += this.M[13] ? 8 : 6;
- break;
- case 258:
- g = {};
- for (var F = 0; F < this.k; F++)
- e = this.i.pop(), a = this.i.pop(), g[a] = e;
- this.C[this.W] = g, this.T += 94;
- break;
- case 261:
- this.D = s || [], this.M[11] = 68, this.T += this.M[26] ? 3 : 5;
- break;
- case 264:
- this.M[15] = 16, this.T = "string" == typeof A ? 331 : 336;
- break;
- case 266:
- this.C[this.I][i] = this.i.pop(), this.T += 86;
- break;
- case 278:
- this.C[this.c] = this.C[this.I][i], this.T += this.M[22] ? 63 : 74;
- break;
- case 283:
- this.C[this.c] = eval(String.fromCharCode(this.C[this.I]));
- break;
- case 300:
- S = this.U(), this.M[0] = 66, this.T += this.M[11];
- break;
- case 331:
- D = atob(A), w = D.charCodeAt(0) << 16 | D.charCodeAt(1) << 8 | D.charCodeAt(2);
- for (var k = 3; k < w + 3; k += 3)
- this.G.push(D.charCodeAt(k) << 16 | D.charCodeAt(k + 1) << 8 | D.charCodeAt(k + 2));
- for (V = w + 3; V < D.length; )
- E = D.charCodeAt(V) << 8 | D.charCodeAt(V + 1), T = D.slice(V + 2, V + 2 + E), this.D.push(T), V += E + 2;
- this.M[21] = 8, this.T += 1e3 < V ? 21 : 35;
- break;
- case 336:
- this.G = A, this.D = s, this.M[18] = 134, this.T += this.M[15];
- break;
- case 344:
- this.T = 3 * this.T - 8;
- break;
- case 350:
- U = 66, M = [], I = this.D[this.k];
- for (var W = 0; W < I.length; W++)
- M.push(String.fromCharCode(24 ^ I.charCodeAt(W) ^ U)), U = 24 ^ I.charCodeAt(W) ^ U;
- r = parseInt(M.join("").split("|")[1]), this.C[this.W] = this.i.slice(this.i.length - r), this.i = this.i.slice(0, this.i.length - r), this.T += 2;
- break;
- case 352:
- this.e = this.G[this.s++], this.T -= this.M[26];
- break;
- case 360:
- this.a = S, this.T += this.M[0];
- break;
- case 368:
- this.T -= 500 < S - this.a ? 24 : 8;
- break;
- case 380:
- this.i.push(16383 & this.e), this.T -= 28;
- break;
- case 400:
- this.i.push(this.S[16383 & this.e]), this.T -= 48;
- break;
- case 408:
- this.T -= 64;
- break;
- case 413:
- this.C[this.e >> 15 & 7] = (this.e >> 18 & 1) == 0 ? 32767 & this.e : this.S[32767 & this.e], this.T -= 61;
- break;
- case 418:
- this.S[65535 & this.e] = this.C[this.e >> 16 & 7], this.T -= this.e >> 16 < 20 ? 66 : 80;
- break;
- case 423:
- this.c = this.e >> 16 & 7, this.I = this.e >> 13 & 7, this.F = this.e >> 10 & 7, this.J = 1023 & this.e, this.T -= 255 + 6 * this.J + this.J % 5;
- break;
- case 426:
- this.T += 5 * (this.e >> 19) - 18;
- break;
- case 428:
- this.W = this.e >> 16 & 7, this.k = 65535 & this.e, this.t.push(this.s), this.h.push(this.S), this.s = this.C[this.W], this.S = [];
- for (var J = 0; J < this.k; J++)
- this.S.unshift(this.i.pop());
- this.B.push(this.i), this.i = [], this.T -= 76;
- break;
- case 433:
- this.s = this.t.pop(), this.S = this.h.pop(), this.i = this.B.pop(), this.T -= 81;
- break;
- case 438:
- this.Q = this.C[this.e >> 16 & 7], this.T -= 86;
- break;
- case 440:
- U = 66, M = [], I = this.D[16383 & this.e];
- for (var b = 0; b < I.length; b++)
- M.push(String.fromCharCode(24 ^ I.charCodeAt(b) ^ U)), U = 24 ^ I.charCodeAt(b) ^ U;
- M = M.join("").split("|"), O = parseInt(M.shift()), this.i.push(O === 0 ? M.join("|") : O === 1 ? -1 !== M.join().indexOf(".") ? parseInt(M.join()) : parseFloat(M.join()) : O === true + true ? eval(M.join()) : 3 === O ? null : void 0), this.T -= 88;
- break;
- case 443:
- this.b = this.e >> 2 & 65535, this.J = 3 & this.e, this.J === 0 ? this.s = this.b : this.J === 1 ? !!this.Q && (this.s = this.b) : 2 === this.J ? !this.Q && (this.s = this.b) : this.s = this.b, this.g = null, this.T -= 91;
- break;
- case 445:
- this.i.push(this.C[this.e >> 14 & 7]), this.T -= 93;
- break;
- case 448:
- this.W = this.e >> 16 & 7, this.k = this.e >> 2 & 4095, this.J = 3 & this.e, Q = this.J === 1 && this.i.pop(), G = this.i.slice(this.i.length - this.k, this.i.length), this.i = this.i.slice(0, this.i.length - this.k), c = 2 < G.length ? 3 : G.length, this.T += 6 * this.J + 1 + 10 * c;
- break;
- case 449:
- this.C[3] = this.C[this.W](), this.T -= 97 - G.length;
- break;
- case 455:
- this.C[3] = this.C[this.W][Q](), this.T -= 103 + G.length;
- break;
- case 453:
- B = this.e >> 17 & 3, this.T = B === 0 ? 445 : B === 1 ? 380 : B === true + true ? 400 : 440;
- break;
- case 458:
- this.J = this.e >> 17 & 3, this.c = this.e >> 14 & 7, this.I = this.e >> 11 & 7, i = this.i.pop(), this.T -= 12 * this.J + 180;
- break;
- case 459:
- this.C[3] = this.C[this.W](G[0]), this.T -= 100 + 7 * G.length;
- break;
- case 461:
- this.C[3] = new this.C[this.W](), this.T -= 109 - G.length;
- break;
- case 463:
- U = 66, M = [], I = this.D[65535 & this.e];
- for (var n = 0; n < I.length; n++)
- M.push(String.fromCharCode(24 ^ I.charCodeAt(n) ^ U)), U = 24 ^ I.charCodeAt(n) ^ U;
- M = M.join("").split("|"), O = parseInt(M.shift()), this.T += 10 * O + 3;
- break;
- case 465:
- this.C[3] = this.C[this.W][Q](G[0]), this.T -= 13 * G.length + 100;
- break;
- case 466:
- this.C[this.e >> 16 & 7] = M.join("|"), this.T -= 114 * M.length;
- break;
- case 468:
- this.g = 65535 & this.e, this.T -= 116;
- break;
- case 469:
- this.C[3] = this.C[this.W](G[0], G[1]), this.T -= 119 - G.length;
- break;
- case 471:
- this.C[3] = new this.C[this.W](G[0]), this.T -= 118 + G.length;
- break;
- case 473:
- throw this.C[this.e >> 16 & 7];
- case 475:
- this.C[3] = this.C[this.W][Q](G[0], G[1]), this.T -= 123;
- break;
- case 476:
- this.C[this.e >> 16 & 7] = -1 !== M.join().indexOf(".") ? parseInt(M.join()) : parseFloat(M.join()), this.T -= this.M[21] < 10 ? 124 : 126;
- break;
- case 478:
- t = [0].concat(x(this.S)), this.V = 65535 & this.e, h = this, this.C[3] = function(e2) {
- var n2 = new l();
- return n2.S = t, n2.S[0] = e2, n2.O(h.G, h.V, h.D), n2.C[3];
- }, this.T -= 50 < this.M[3] ? 120 : 126;
- break;
- case 479:
- this.C[3] = this.C[this.W].apply(null, G), this.M[3] = 168, this.T -= this.M[9] ? 127 : 128;
- break;
- case 481:
- this.C[3] = new this.C[this.W](G[0], G[1]), this.T -= 10 * G.length + 109;
- break;
- case 483:
- this.J = this.e >> 15 & 15, this.W = this.e >> 12 & 7, this.k = 4095 & this.e, this.T = 0 === this.J ? 258 : 350;
- break;
- case 485:
- this.C[3] = this.C[this.W][Q].apply(null, G), this.T -= this.M[15] % 2 == 1 ? 143 : 133;
- break;
- case 486:
- this.C[this.e >> 16 & 7] = eval(M.join()), this.T -= this.M[18];
- break;
- case 491:
- this.C[3] = new this.C[this.W].apply(null, G), this.T -= this.M[8] / this.M[1] < 10 ? 139 : 130;
- break;
- case 496:
- this.C[this.e >> 16 & 7] = null, this.T -= 10 < this.M[5] - this.M[3] ? 160 : 144;
- break;
- case 506:
- this.C[this.e >> 16 & 7] = void 0, this.T -= this.M[18] % this.M[12] == 1 ? 154 : 145;
- break;
- default:
- this.T = this.w;
- }
- } catch (A2) {
- this.g && (this.s = this.g), this.T -= 114;
- }
- }, "undefined" != typeof window && (S.__ZH__ = S.__ZH__ || {}, h = S.__ZH__.zse = S.__ZH__.zse || {}, new l().O("ABt7CAAUSAAACADfSAAACAD1SAAACAAHSAAACAD4SAAACAACSAAACADCSAAACADRSAAACABXSAAACAAGSAAACADjSAAACAD9SAAACADwSAAACACASAAACADeSAAACABbSAAACADtSAAACAAJSAAACAB9SAAACACdSAAACADmSAAACABdSAAACAD8SAAACADNSAAACABaSAAACABPSAAACACQSAAACADHSAAACACfSAAACADFSAAACAC6SAAACACnSAAACAAnSAAACAAlSAAACACcSAAACADGSAAACAAmSAAACAAqSAAACAArSAAACACoSAAACADZSAAACACZSAAACAAPSAAACABnSAAACABQSAAACAC9SAAACABHSAAACAC/SAAACABhSAAACABUSAAACAD3SAAACABfSAAACAAkSAAACABFSAAACAAOSAAACAAjSAAACAAMSAAACACrSAAACAAcSAAACABySAAACACySAAACACUSAAACABWSAAACAC2SAAACAAgSAAACABTSAAACACeSAAACABtSAAACAAWSAAACAD/SAAACABeSAAACADuSAAACACXSAAACABVSAAACABNSAAACAB8SAAACAD+SAAACAASSAAACAAESAAACAAaSAAACAB7SAAACACwSAAACADoSAAACADBSAAACACDSAAACACsSAAACACPSAAACACOSAAACACWSAAACAAeSAAACAAKSAAACACSSAAACACiSAAACAA+SAAACADgSAAACADaSAAACADESAAACADlSAAACAABSAAACADASAAACADVSAAACAAbSAAACABuSAAACAA4SAAACADnSAAACAC0SAAACACKSAAACABrSAAACADySAAACAC7SAAACAA2SAAACAB4SAAACAATSAAACAAsSAAACAB1SAAACADkSAAACADXSAAACADLSAAACAA1SAAACADvSAAACAD7SAAACAB/SAAACABRSAAACAALSAAACACFSAAACABgSAAACADMSAAACACESAAACAApSAAACABzSAAACABJSAAACAA3SAAACAD5SAAACACTSAAACABmSAAACAAwSAAACAB6SAAACACRSAAACABqSAAACAB2SAAACABKSAAACAC+SAAACAAdSAAACAAQSAAACACuSAAACAAFSAAACACxSAAACACBSAAACAA/SAAACABxSAAACABjSAAACAAfSAAACAChSAAACABMSAAACAD2SAAACAAiSAAACADTSAAACAANSAAACAA8SAAACABESAAACADPSAAACACgSAAACABBSAAACABvSAAACABSSAAACAClSAAACABDSAAACACpSAAACADhSAAACAA5SAAACABwSAAACAD0SAAACACbSAAACAAzSAAACADsSAAACADISAAACADpSAAACAA6SAAACAA9SAAACAAvSAAACABkSAAACACJSAAACAC5SAAACABASAAACAARSAAACABGSAAACADqSAAACACjSAAACADbSAAACABsSAAACACqSAAACACmSAAACAA7SAAACACVSAAACAA0SAAACABpSAAACAAYSAAACADUSAAACABOSAAACACtSAAACAAtSAAACAAASAAACAB0SAAACADiSAAACAB3SAAACACISAAACADOSAAACACHSAAACACvSAAACADDSAAACAAZSAAACABcSAAACAB5SAAACADQSAAACAB+SAAACACLSAAACAADSAAACABLSAAACACNSAAACAAVSAAACACCSAAACABiSAAACADxSAAACAAoSAAACACaSAAACABCSAAACAC4SAAACAAxSAAACAC1SAAACAAuSAAACADzSAAACABYSAAACABlSAAACAC3SAAACAAISAAACAAXSAAACABISAAACAC8SAAACABoSAAACACzSAAACADSSAAACACGSAAACAD6SAAACADJSAAACACkSAAACABZSAAACADYSAAACADKSAAACADcSAAACAAySAAACADdSAAACACYSAAACACMSAAACAAhSAAACADrSAAACADWSAAAeIAAEAAACAB4SAAACAAySAAACABiSAAACABlSAAACABjSAAACABiSAAACAB3SAAACABkSAAACABnSAAACABrSAAACABjSAAACAB3SAAACABhSAAACABjSAAACABuSAAACABvSAAAeIABEAABCABkSAAACAAzSAAACABkSAAACAAySAAACABlSAAACAA3SAAACAAySAAACAA2SAAACABmSAAACAA1SAAACAAwSAAACABkSAAACAA0SAAACAAxSAAACAAwSAAACAAxSAAAeIABEAACCAAgSAAATgACVAAAQAAGEwADDAADSAAADAACSAAADAAASAAACANcIAADDAADSAAASAAATgADVAAATgAEUAAATgAFUAAATgAGUgAADAAASAAASAAATgADVAAATgAEUAAATgAFUAAATgAHUgAADAABSAAASAAATgADVAAATgAEUAAATgAFUAAATgAIUgAAcAgUSMAATgAJVAAATgAKUgAAAAAADAABSAAADAAAUAAACID/GwQPCAAYG2AREwAGDAABCIABGwQASMAADAAAUAAACID/GwQPCAAQG2AREwAHDAABCIACGwQASMAADAAAUAAACID/GwQPCAAIG2AREwAIDAABCIADGwQASMAADAAAUAAACID/GwQPEwAJDYAGDAAHG2ATDAAIG2ATDAAJG2ATKAAACAD/DIAACQAYGygSGwwPSMAASMAADAACSAAADAABUgAACAD/DIAACQAQGygSGwwPSMAASMAADAACCIABGwQASMAADAABUgAACAD/DIAACQAIGygSGwwPSMAASMAADAACCIACGwQASMAADAABUgAACAD/DIAAGwQPSMAASMAADAACCIADGwQASMAADAABUgAAKAAACAAgDIABGwQBEwANDAAAWQALGwQPDAABG2AREwAODAAODIAADQANGygSGwwTEwAPDYAPKAAACAAESAAATgACVAAAQAAGEwAQCAAESAAATgACVAAAQAAGEwAFDAAASAAADAAQSAAACAAASAAACAKsIAADCAAASAAADAAQUAAACID/GwQPSMAADAABUAAASAAASAAACAAASAAADAAFUgAACAABSAAADAAQUAAACID/GwQPSMAADAABUAAASAAASAAACAABSAAADAAFUgAACAACSAAADAAQUAAACID/GwQPSMAADAABUAAASAAASAAACAACSAAADAAFUgAACAADSAAADAAQUAAACID/GwQPSMAADAABUAAASAAASAAACAADSAAADAAFUgAADAAFSAAACAAASAAACAJ8IAACEwARDAARSAAACAANSAAACALdIAACEwASDAARSAAACAAXSAAACALdIAACEwATDAARDIASGwQQDAATG2AQEwAUDYAUKAAAWAAMSAAAWAANSAAAWAAOSAAAWAAPSAAAWAAQSAAAWAARSAAAWAASSAAAWAATSAAAWAAUSAAAWAAVSAAAWAAWSAAAWAAXSAAAWAAYSAAAWAAZSAAAWAAaSAAAWAAbSAAAWAAcSAAAWAAdSAAAWAAeSAAAWAAfSAAAWAAgSAAAWAAhSAAAWAAiSAAAWAAjSAAAWAAkSAAAWAAlSAAAWAAmSAAAWAAnSAAAWAAoSAAAWAApSAAAWAAqSAAAWAArSAAAeIAsEAAXWAAtSAAAWAAuSAAAWAAvSAAAWAAwSAAAeIAxEAAYCAAESAAATgACVAAAQAAGEwAZCAAkSAAATgACVAAAQAAGEwAaDAABSAAACAAASAAACAJ8IAACSMAASMAACAAASAAADAAZUgAADAABSAAACAAESAAACAJ8IAACSMAASMAACAABSAAADAAZUgAADAABSAAACAAISAAACAJ8IAACSMAASMAACAACSAAADAAZUgAADAABSAAACAAMSAAACAJ8IAACSMAASMAACAADSAAADAAZUgAACAAASAAADAAZUAAACIAASEAADIAYUEgAGwQQSMAASMAACAAASAAADAAaUgAACAABSAAADAAZUAAACIABSEAADIAYUEgAGwQQSMAASMAACAABSAAADAAaUgAACAACSAAADAAZUAAACIACSEAADIAYUEgAGwQQSMAASMAACAACSAAADAAaUgAACAADSAAADAAZUAAACIADSEAADIAYUEgAGwQQSMAASMAACAADSAAADAAaUgAACAAAEAAJDAAJCIAgGwQOMwAGOBG2DAAJCIABGwQASMAADAAaUAAAEAAbDAAJCIACGwQASMAADAAaUAAAEAAcDAAJCIADGwQASMAADAAaUAAAEAAdDAAbDIAcGwQQDAAdG2AQDAAJSAAADAAXUAAAG2AQEwAeDAAeSAAADAACSAAACALvIAACEwAfDAAJSAAADAAaUAAADIAfGwQQSMAASMAADAAJCIAEGwQASMAADAAaUgAADAAJCIAEGwQASMAADAAaUAAASAAASAAADAAJSAAADAAAUgAADAAJCIABGQQAEQAJOBCIKAAADAABTgAyUAAACIAQGwQEEwAVCAAQDIAVGwQBEwAKCAAAEAAhDAAhDIAKGwQOMwAGOBImDAAKSAAADAABTgAzQAAFDAAhCIABGQQAEQAhOBHoCAAASAAACAAQSAAADAABTgA0QAAJEwAiCAAQSAAATgACVAAAQAAGEwAjCAAAEAALDAALCIAQGwQOMwAGOBLSDAALSAAADAAiUAAADIALSEAADIAAUEgAGwQQCAAqG2AQSMAASMAADAALSAAADAAjUgAA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###VAAATgCEQAABCAB/G2ACSMAAT###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"));
- var D = function(t2) {
- return __g._encrypt(encodeURIComponent(t2));
- };
- exports.XL = A, exports.ZP = D;
- }
- var o = {};
- f1(void 0, o);
- return o.ZP(s);
- }
- var createCommentHeaders = (url) => {
- function K() {
- var t2 = new RegExp("d_c0=([^;]+)").exec(document.cookie);
- return t2 && t2[1];
- }
- var z = function(t2) {
- var e2 = new URL(t2, "https://www.zhihu.com");
- return "" + e2.pathname + e2.search;
- };
- var S2 = function(t2, e2, n2, r2) {
- var o2 = n2.zse93, i2 = n2.dc0, a2 = n2.xZst81, u = z(t2), c2 = "", s2 = [o2, u, i2, "", a2].filter(Boolean).join("+");
- return {
- source: s2,
- signature: zhihu_enc(md5(s2))
- };
- }(url, void 0, {
- zse93: "101_3_3.0",
- dc0: K(),
- xZst81: null
- });
- return {
- "x-zse-93": "101_3_3.0",
- "x-zse-96": "2.0_" + S2.signature
- };
- };
- function formatDataToHump(data) {
- if (!data)
- return data;
- if (Array.isArray(data)) {
- return data.map((item) => {
- return typeof item === "object" ? formatDataToHump(item) : item;
- });
- } else if (typeof data === "object") {
- const nData = {};
- Object.keys(data).forEach((prevKey) => {
- const nKey = prevKey.replace(/\_(\w)/g, (_, $1) => $1.toUpperCase());
- nData[nKey] = formatDataToHump(data[prevKey]);
- });
- return nData;
- }
- return data;
- }
- var requestComment = async ({
- url,
- answerId,
- orderBy = "score",
- offset = "",
- type = "answers"
- }) => {
- if (!answerId && !url)
- return void 0;
- const nUrl = url || `https://www.zhihu.com/api/v4/comment_v5/${type}/${answerId}/root_comment?order_by=${orderBy}&limit=20&offset=${offset}`;
- return fetch(nUrl, {
- method: "GET",
- headers: createCommentHeaders(nUrl)
- }).then((res) => res.json()).then((res) => formatDataToHump(res));
- };
- var requestCommentChild = async ({
- url,
- answerId,
- orderBy = "ts",
- offset = ""
- }) => {
- if (!answerId && !url)
- return void 0;
- const nUrl = url || `https://www.zhihu.com/api/v4/comment_v5/comment/${answerId}/child_comment?order_by=${orderBy}&limit=20&offset=${offset}`;
- return fetch(nUrl, {
- method: "GET",
- headers: createCommentHeaders(nUrl)
- }).then((res) => res.json()).then((res) => formatDataToHump(res));
- };
- var commonRequest = async (url, method = "GET", headers = new Headers()) => {
- if (!url)
- return void 0;
- return fetch(url, { method, headers }).then((res) => res.json()).then((res) => formatDataToHump(res));
- };
- var requestVote = async (contentType, voteType, contentId) => {
- const body = VoteTypeOb[voteType][contentType];
- if (!body)
- return void 0;
- return fetch(`https://www.zhihu.com/api/v4/${contentType}/${contentId}/voters`, {
- method: "POST",
- headers: {
- ...new Headers(),
- "Content-Type": "application/json"
- },
- body
- }).then((res) => res.json()).then((res) => formatDataToHump(res));
- };
- var requestCommentVote = async (commendId, like = true) => {
- if (!commendId)
- return void 0;
- return fetch(`https://www.zhihu.com/api/v4/comments/${commendId}/like`, {
- method: like ? "POST" : "DELETE",
- headers: new Headers()
- }).then((res) => res.json()).then((res) => formatDataToHump(res));
- };
- var requestAnswer = async (answerId) => {
- if (!answerId)
- return void 0;
- const url = `https://www.zhihu.com/api/v4/answers/${answerId}?include=is_visible%2Cpaid_info%2Cpaid_info_content%2Cadmin_closed_comment%2Creward_info%2Cannotation_action%2Cannotation_detail%2Ccollapse_reason%2Cis_normal%2Cis_sticky%2Ccollapsed_by%2Csuggest_edit%2Ccomment_count%2Cthanks_count%2Cfavlists_count%2Ccan_comment%2Ccontent%2Ceditable_content%2Cvoteup_count%2Creshipment_settings%2Ccomment_permission%2Ccreated_time%2Cupdated_time%2Creview_info%2Crelevant_info%2Cquestion%2Cexcerpt%2Cattachment%2Cis_labeled%2Creaction_instruction%2Cip_info%2Crelationship.is_authorized%2Cvoting%2Cis_thanked%2Cis_author%2Cis_nothelp%3Bauthor.vip_info%2Cbadge%5B*%5D.topics%3Bsettings.table_of_content.enabled`;
- return fetch(url, {
- method: "GET",
- headers: createCommentHeaders(url)
- }).then((res) => res.json()).then((res) => formatDataToHump(res));
- };
- var myLoadingToast = {
- open: () => domById("CTZ_LOADING_TOAST").style.display = "flex",
- hide: () => domById("CTZ_LOADING_TOAST").style.display = "none"
- };
- var myPreview = {
- // 开启预览弹窗
- open: function(src, even, isVideo) {
- const nameDom = isVideo ? this.evenPathVideo : this.evenPathImg;
- const idDom = isVideo ? this.idVideo : this.idImg;
- const nodeName = dom(nameDom);
- const nodeId = domById(idDom);
- nodeName && (nodeName.src = src);
- nodeId && (nodeId.style.display = "block");
- even && (this.even = even);
- myScroll.stop();
- },
- // 关闭预览弹窗
- hide: function(pEvent) {
- if (this.even) {
- this.even.click();
- this.even = null;
- }
- pEvent.style.display = "none";
- const nodeImg = dom(this.evenPathImg);
- const nodeVideo = dom(this.evenPathVideo);
- nodeImg && (nodeImg.src = "");
- nodeVideo && (nodeVideo.src = "");
- myScroll.on();
- },
- even: null,
- evenPathImg: "#CTZ_PREVIEW_IMAGE img",
- evenPathVideo: "#CTZ_PREVIEW_VIDEO video",
- idImg: "CTZ_PREVIEW_IMAGE",
- idVideo: "CTZ_PREVIEW_VIDEO"
- };
- var CLASS_BTN_CLOSE = "ctz-n-button-close";
- var CLASS_BTN_COMMENT = "ctz-n-button-comment";
- var CLASS_ACTIVE = "is-active";
- var CLASS_VOTE_UP = "VoteButton--up";
- var CLASS_VOTE_DOWN = "VoteButton--down";
- var addListenImage = (event) => {
- const target = event.target;
- if (target.nodeName === "IMG") {
- let src = target.src;
- if (target.classList.contains("ztext-gif")) {
- src = src.replace(".jpg", ".webp");
- }
- myPreview.open(src);
- return;
- }
- };
- var eventListenButton = (event) => {
- addListenImage(event);
- const target = event.target;
- Object.keys(eventMainObject).forEach((key) => {
- if (target.classList.contains(key)) {
- event.preventDefault();
- event.stopPropagation();
- eventMainObject[key](target);
- }
- });
- };
- var eventMainObject = {
- /** 展开更多 */
- "ContentItem-expandButton": (currentNode) => {
- const nodeRich = domP(currentNode, "class", "RichContent");
- const nodeRichInner = nodeRich.querySelector(".RichContent-inner");
- const nodeBtnOther = nodeRich.querySelector(`.${CLASS_BTN_CLOSE}`);
- const nodeBtnTHis = nodeRich.querySelector(`.ContentItem-expandButton`);
- nodeRich.classList.remove("is-collapsed");
- nodeRichInner.style.maxHeight = "max-content";
- nodeBtnOther.style.display = "block";
- nodeBtnTHis.style.display = "none";
- },
- /** 收起 */
- [CLASS_BTN_CLOSE]: (currentNode) => {
- const nodeRich = domP(currentNode, "class", "RichContent");
- const nodeRichInner = nodeRich.querySelector(".RichContent-inner");
- const nodeBtnOther = nodeRich.querySelector(`.ContentItem-expandButton`);
- const nodeActions = nodeRich.querySelector(".ContentItem-actions");
- const nodeBtnTHis = nodeRich.querySelector(`.${CLASS_BTN_CLOSE}`);
- nodeActions.style.cssText = "";
- nodeRich.classList.add("is-collapsed");
- nodeRichInner.style.maxHeight = "180px";
- nodeBtnOther.style.display = "block";
- nodeBtnTHis.style.display = "none";
- },
- /** 评论 */
- [CLASS_BTN_COMMENT]: async (currentNode) => {
- const nodeContentItem = domP(currentNode, "class", "ContentItem");
- const dataZopJson = nodeContentItem.getAttribute("data-zop") || "{}";
- const dataZop = JSON.parse(dataZopJson);
- myListenComment.create(dataZop.itemId);
- },
- VoteButton: async (currentNode) => {
- const nodeContentItem = domP(currentNode, "class", "ContentItem");
- const contentType = nodeContentItem.querySelector('[itemprop="contentType"]').content;
- const contentId = nodeContentItem.querySelector('[itemprop="contentId"]').content;
- let voteType = 1 /* 中立 */;
- const currentClassList = currentNode.classList;
- if (!currentClassList.contains(CLASS_ACTIVE)) {
- voteType = currentClassList.contains(CLASS_VOTE_UP) ? 0 /* 赞同 */ : 2 /* 反对 */;
- }
- const res = await requestVote(contentType, voteType, contentId);
- if (!res)
- return;
- const { voting } = res;
- nodeContentItem.querySelectorAll(".VoteButton").forEach((item) => {
- item.classList.remove(CLASS_ACTIVE);
- });
- if (typeof voting !== "undefined") {
- voting !== 0 && currentNode.classList.add(CLASS_ACTIVE);
- }
- }
- };
- var openLoading = (box, className) => {
- if (box.querySelector(`.${className}`))
- return;
- box.appendChild(domC("div", { innerHTML: "<span>↻</span>", className }));
- };
- var removeByBox = (box, className) => {
- const nodeFind = box.querySelector(`.${className}`);
- nodeFind && nodeFind.remove();
- };
- var openEnd = (box, className) => {
- if (box.querySelector(`.${className}`))
- return;
- box.appendChild(domC("div", { innerText: "----- 没有更多了 -----", className }));
- };
- var innerHTMLContentItemMeta = (data, options) => {
- const { target } = data;
- const { extraHTML = "", haveTime, config } = options;
- const createdTime = data.createdTime || target.createdTime;
- const updatedTime = data.updatedTime || target.updatedTime;
- return `
- <div class="ContentItem-meta">
- <div class="AuthorInfo AnswerItem-authorInfo AnswerItem-authorInfo--related" itemprop="author" itemscope="" itemtype="http://schema.org/Person">
- <div class="AuthorInfo AuthorInfo--mobile">
- <meta itemprop="name" content="${target.author.name}" />
- <meta itemprop="image" content="${target.author.avatarUrl}" />
- <meta itemprop="url" content="https://www.zhihu.com/people/${target.author.urlToken}" />
- <meta itemprop="zhihu:followerCount" />
- <span class="UserLink AuthorInfo-avatarWrapper">
- <a href="//www.zhihu.com/people/${target.author.urlToken}" target="_blank" class="UserLink-link" data-za-detail-view-element_name="User">
- <img class="Avatar AuthorInfo-avatar" src="${target.author.avatarUrl}" srcset="${target.author.avatarUrl} 2x" alt="${target.author.name}" />
- </a>
- </span>
- <div class="AuthorInfo-content">
- <div class="AuthorInfo-head">
- <span class="UserLink AuthorInfo-name">
- <a href="//www.zhihu.com/people/${target.author.urlToken}" target="_blank" class="UserLink-link" data-za-detail-view-element_name="User">${target.author.name}</a>
- </span>
- </div>
- <div class="AuthorInfo-detail">
- <div class="AuthorInfo-badge"><div class="ztext AuthorInfo-badgeText">${target.author.headline}</div></div>
- </div>
- </div>
- ${extraHTML}
- </div>
- </div>
- ${haveTime ? createTimeHTML(`${createdTime}000`, `${updatedTime}000`) : ""}
- ${config.showIP ? `<div>${target.ipInfo || ""}</div>` : ""}
- <div class="LabelContainer-wrapper"></div>
- </div>
- `;
- };
- var innerHTMLRichInnerAndAction = (data, options) => {
- const { moreLength = 400, moreMaxHeight = "180px" } = options || {};
- const { target } = data;
- const type = target.type;
- const attachment = target.attachment;
- const isVideo = type === "zvideo";
- const isPin = type === "pin";
- const innerHTML = isVideo ? `
- <a
- class="video-box"
- href="https://link.zhihu.com/?target=https%3A//www.zhihu.com/video/${target.thumbnailExtraInfo.videoId}"
- target="_blank"
- data-video-id=""
- data-video-playable=""
- data-name=""
- data-poster="${target.thumbnailExtraInfo.url}"
- data-lens-id="${target.thumbnailExtraInfo.videoId}"
- >
- <img class="thumbnail" src="" />
- <span class="content">
- <span class="title">
- <span class="z-ico-extern-gray"></span>
- <span class="z-ico-extern-blue"></span>
- </span>
- <span class="url">
- <span class="z-ico-video"></span>
- https://www.zhihu.com/video/${target.thumbnailExtraInfo.videoId}
- </span>
- </span>
- </a>
- ` : isPin ? target.contentHtml || target.content : target.content;
- const isMore = isVideo ? true : innerHTML.length > moreLength;
- const vDomContent = domC("div", { innerHTML });
- const styleFrame = "border:none;width: calc(100vw - 32px);height: calc((100vw - 32px)/1.8);";
- vDomContent.querySelectorAll("img").forEach((item) => {
- item.src = item.getAttribute("data-original") || item.getAttribute("data-actualsrc") || item.src || "";
- });
- vDomContent.querySelectorAll("a.video-box").forEach((item) => {
- const nItem = item;
- const nFrame = domC("iframe", {
- style: styleFrame,
- src: nItem.href
- });
- nItem.insertAdjacentElement("afterend", nFrame);
- nItem.style.display = "none";
- });
- let contentHTML = vDomContent.innerHTML;
- vDomContent.remove();
- if (attachment && attachment.type === "video") {
- const { hd, ld, sd } = attachment.video.videoInfo.playlist;
- contentHTML += `
- <div class="VideoAnswerPlayer">
- <div class="VideoAnswerPlayer-video">
- <div class="css-122y91a">
- <div class="css-10klw3m">
- <div class="_1fog6rx">
- <div class="_1n8yr2n" tabindex="-1">
- <div class="_190hxbq">
- <video
- class="_1k7bcr7"
- preload="metadata"
- playsinline=""
- webkit-playsinline=""
- x-webkit-airplay="deny"
- src="${sd.url || ld.url || hd.url}"
- style="object-fit: contain"
- controls=""
- ></video>
- </div>
- </div>
- </div>
- </div>
- </div>
- </div>
- <a role="button" href="https://www.zhihu.com/zvideo/${attachment.video.zvideoId}?playTime=0.0&utm_id=0"
- tabindex="0" aria-label="跳转到对应视频" class="VideoAnswerPlayer-stateBar" target="_blank">
- <div class="VideoAnswerPlayer-state">
- <div class="VideoAnswerPlayer-state--title">${attachment.video.title}</div>
- <div class="VideoAnswerPlayer-state--data">${attachment.video.playCount} 播放 · ${attachment.video.voteupCount} 赞同</div>
- </div>
- </a>
- </div>
- `;
- }
- const voteCount = target.voteupCount || target.voteCount || 0;
- const voting = target.relationship ? target.relationship.voting : 0;
- return `
- <meta itemprop="upvoteCount" content="${voteCount}" />
- <meta itemprop="commentCount" content="${target.commentCount}" />
- <meta itemprop="contentType" content="${CONTENT_TYPE_OBJ[type].voteFetchType}" />
- <meta itemprop="contentId" content="${target.id}" />
- <div class="RichContent ${isMore ? "is-collapsed" : ""} RichContent--unescapable">
- <div class="RichContent-inner RichContent-inner--collapsed" style="${isMore ? `max-height: ${moreMaxHeight}` : ""}">${contentHTML}</div>
- <div class="ContentItem-actions">
- <button aria-label="赞同 ${voteCount}" aria-live="polite" type="button" class="Button VoteButton ${CLASS_VOTE_UP} ${voting === 1 ? CLASS_ACTIVE : ""}">
- ▲ 赞同 ${voteCount}
- </button>
- <button aria-label="反对" aria-live="polite" type="button" class="Button VoteButton ${CLASS_VOTE_DOWN} VoteButton--mobileDown ${voting === -1 ? CLASS_ACTIVE : ""}">
- ▼
- </button>
- <button class="ctz-n-button-comment Button Button--plain Button--withIcon Button--withLabel">评论 ${target.commentCount}</button>
- ${isMore ? '<button class="ctz-n-button-close Button" style="display: none">收起 ▲</button>' : ""}
- </div>
- ${isMore ? '<button class="Button ContentItem-rightButton ContentItem-expandButton Button--plain">展开更多 ▼</button>' : ""}
- </div>
- `;
- };
- var createHTMLCopyLink = (link) => `<button class="ctz-button ctz-button-transparent ${CLASS_COPY_LINK}" data-link="${link}" style="margin: 0px 8px">获取链接</button>`;
- var CONTENT_TYPE_OBJ = {
- answer: {
- name: "问题",
- bTypeClass: "c-ec7259",
- contentItem: "AnswerItem",
- nType: "Answer",
- voteFetchType: "answers" /* 回答 */,
- formatData: (target) => {
- return {
- itemTitle: target.question.title,
- itemHref: `https://www.zhihu.com/question/${target.question.id}`,
- itemHref2: `https://www.zhihu.com/question/${target.question.id}/answer/${target.id}`
- };
- }
- },
- article: {
- name: "文章",
- bTypeClass: "c-00965e",
- contentItem: "ArticleItem",
- nType: "Post",
- voteFetchType: "articles" /* 文章 */,
- formatData: (target) => {
- return {
- itemTitle: target.title,
- itemHref: `https://zhuanlan.zhihu.com/p/${target.id}`,
- itemHref2: `https://zhuanlan.zhihu.com/p/${target.id}`
- };
- }
- },
- zvideo: {
- name: "视频",
- bTypeClass: "c-12c2e9",
- contentItem: "ZVideoItem",
- nType: "ZVideo",
- voteFetchType: "zvideos" /* 视频 */,
- formatData: (target) => {
- return {
- itemTitle: target.title,
- itemHref: `https://www.zhihu.com/zvideo/${target.id}`,
- itemHref2: `https://www.zhihu.com/zvideo/${target.id}`
- };
- }
- },
- pin: {
- name: "想法",
- bTypeClass: "c-9c27b0",
- contentItem: "PinItem",
- nType: "Pin",
- voteFetchType: "",
- formatData: (target) => {
- return {
- itemTitle: target.title || "",
- itemHref: `https://www.zhihu.com/pin/${target.id}`,
- itemHref2: `https://www.zhihu.com/pin/${target.id}`
- };
- }
- }
- };
- var QUERY_LIST = ".ctz-comment-list";
- var CLASS_LOADING = "ctz-comment-loading";
- var ClASS_END = "ctz-comment-end";
- var CLASS_VOTE = "ctz-comment-vote";
- var CLASS_VOTE_UP2 = "ctz-comment-vote-up";
- var ACTIVE_STYLE = "color: rgb(25, 27, 31);background: #fff;";
- var myChangeCommentSort = {
- /** 默认排序 */
- score: () => {
- dom('.ctz-comment-sort>button[name="score"]').style.cssText = ACTIVE_STYLE;
- dom('.ctz-comment-sort>button[name="ts"]').style.cssText = "";
- },
- /** 时间排序 */
- ts: () => {
- dom('.ctz-comment-sort>button[name="ts"]').style.cssText = ACTIVE_STYLE;
- dom('.ctz-comment-sort>button[name="score"]').style.cssText = "";
- }
- };
- var eventVoteUp = async (currentNode) => {
- if (!currentNode.classList.contains(CLASS_VOTE))
- return;
- const prevIsVoteUp = currentNode.classList.contains(CLASS_VOTE_UP2);
- const commendId = currentNode.getAttribute("data-id");
- const res = await requestCommentVote(commendId, !prevIsVoteUp);
- if (!res)
- return;
- const nodeCount = currentNode.querySelector("span");
- const prevCount = +nodeCount.innerText || 0;
- if (prevIsVoteUp) {
- currentNode.classList.remove(CLASS_VOTE_UP2);
- nodeCount.innerText = String(prevCount - 1 >= 0 ? prevCount - 1 : 0);
- } else {
- currentNode.classList.add(CLASS_VOTE_UP2);
- nodeCount.innerText = String(prevCount + 1);
- }
- };
- var myListenComment = {
- page: {
- isEnd: true,
- isStart: true,
- next: "",
- previous: "",
- totals: 0
- },
- commentData: [],
- answerId: void 0,
- initOperate: function() {
- const me = this;
- domById(ID_CTZ_COMMENT)?.addEventListener("click", async (event) => {
- const nodeCurrent = event.target;
- const { id, name } = nodeCurrent;
- if (id === ID_CTZ_COMMENT_CLOSE) {
- dom(`#${ID_CTZ_COMMENT} .ctz-comment-content`).scrollTop = 0;
- domById(ID_CTZ_COMMENT).style.display = "none";
- myScroll.on();
- }
- if (name === "comment-more") {
- const idComment = nodeCurrent.getAttribute("data-id") || void 0;
- const parentComment = me.commentData.find((i2) => `${i2.id}` === `${idComment}`);
- myListenCommentChild.create(idComment, parentComment);
- }
- if (name === "score" || name === "ts") {
- if (nodeCurrent.style.cssText)
- return;
- myChangeCommentSort[name] && myChangeCommentSort[name]();
- me.create(me.answerId, void 0, name);
- }
- eventVoteUp(nodeCurrent);
- });
- dom(`#${ID_CTZ_COMMENT} .ctz-comment-content`).onscroll = throttle(() => {
- const { isEnd, next, totals } = me.page;
- if (isEnd || !next || me.commentData.length >= totals)
- return;
- const nodeContentDiv = dom(`#${ID_CTZ_COMMENT} ${QUERY_LIST}`);
- const bounding = nodeContentDiv.getBoundingClientRect();
- if (bounding.bottom - 100 <= window.innerHeight) {
- openLoading(dom(`#${ID_CTZ_COMMENT} .ctz-comment-content`), CLASS_LOADING);
- me.commentLoadMore();
- }
- }, 300);
- },
- /** 打开|创建评论弹窗 */
- create: async function(answerId, _, orderBy = "score", type = "answers") {
- myLoadingToast.open();
- this.answerId = answerId;
- const res = await requestComment({ answerId, orderBy, type });
- myLoadingToast.hide();
- if (!res)
- return;
- const nodeComment = domById(ID_CTZ_COMMENT);
- nodeComment.querySelector(".ctz-comment-count>span").innerHTML = `${res.paging.totals}`;
- const innerHTML = res.commentStatus.type ? `<div style="text-align:center;">${res.commentStatus.text}</div>` : createCommentHTML(res.data);
- nodeComment.querySelector(QUERY_LIST).innerHTML = innerHTML;
- myChangeCommentSort[orderBy]();
- removeByBox(dom(`#${ID_CTZ_COMMENT} .ctz-comment-content`), ClASS_END);
- removeByBox(dom(`#${ID_CTZ_COMMENT} .ctz-comment-content`), CLASS_LOADING);
- nodeComment.style.display = "flex";
- this.page = res.paging;
- this.commentData = res.data;
- if (res.paging.isEnd) {
- openEnd(dom(`#${ID_CTZ_COMMENT} .ctz-comment-content`), ClASS_END);
- }
- myScroll.stop();
- },
- /** 评论列表加载更多 */
- commentLoadMore: async function() {
- const res = await requestComment({ url: this.page.next });
- if (!res || !res.data)
- return;
- const nodeCommentContentDiv = dom(`#${ID_CTZ_COMMENT} ${QUERY_LIST}`);
- this.page = res.paging;
- this.commentData = this.commentData.concat(res.data);
- nodeCommentContentDiv.innerHTML += createCommentHTML(res.data);
- removeByBox(dom(`#${ID_CTZ_COMMENT} .ctz-comment-content`), CLASS_LOADING);
- if (res.paging.isEnd) {
- openEnd(dom(`#${ID_CTZ_COMMENT} .ctz-comment-content`), ClASS_END);
- }
- }
- };
- var myListenCommentChild = {
- page: {
- isEnd: true,
- isStart: true,
- next: "",
- previous: "",
- totals: 0
- },
- commentData: [],
- answerId: void 0,
- initOperate: function() {
- const me = this;
- domById(ID_CTZ_COMMENT_CHILD).addEventListener("click", (event) => {
- const nodeCurrent = event.target;
- if (nodeCurrent.id === ID_CTZ_COMMENT_BACK) {
- dom(`#${ID_CTZ_COMMENT_CHILD} .ctz-comment-content`).scrollTop = 0;
- domById(ID_CTZ_COMMENT_CHILD).style.display = "none";
- }
- eventVoteUp(nodeCurrent);
- });
- dom(`#${ID_CTZ_COMMENT_CHILD} .ctz-comment-content`).onscroll = throttle(() => {
- const { isEnd, next, totals } = me.page;
- if (isEnd || !next || me.commentData.length >= totals)
- return;
- const nodeContentDiv = dom(`#${ID_CTZ_COMMENT_CHILD} ${QUERY_LIST}`);
- const bounding = nodeContentDiv.getBoundingClientRect();
- if (bounding.bottom - 100 <= window.innerHeight) {
- openLoading(domById(ID_CTZ_COMMENT_CHILD), CLASS_LOADING);
- me.commentLoadMore();
- }
- }, 300);
- },
- create: async function(answerId, parentData) {
- myLoadingToast.open();
- this.answerId = answerId;
- const res = await requestCommentChild({ answerId });
- myLoadingToast.hide();
- if (!res)
- return;
- const nodeComment = domById(ID_CTZ_COMMENT_CHILD);
- const parentCommentHTML = parentData ? createCommentHTMLItem(parentData, false, false) : "";
- nodeComment.querySelector(QUERY_LIST).innerHTML = parentCommentHTML + `<div class="ctz-comment-child-count">${res.paging.totals} 条回复</div>` + createCommentHTML(res.data);
- removeByBox(dom(`#${ID_CTZ_COMMENT_CHILD} .ctz-comment-content`), ClASS_END);
- removeByBox(dom(`#${ID_CTZ_COMMENT_CHILD} .ctz-comment-content`), CLASS_LOADING);
- nodeComment.style.display = "flex";
- this.page = res.paging;
- this.commentData = res.data;
- if (res.paging.isEnd) {
- openEnd(dom(`#${ID_CTZ_COMMENT_CHILD} .ctz-comment-content`), ClASS_END);
- }
- myScroll.stop();
- },
- commentLoadMore: async function() {
- const res = await requestComment({ url: this.page.next });
- if (!res || !res.data)
- return;
- const nodeCommentContentDiv = dom(`#${ID_CTZ_COMMENT_CHILD} ${QUERY_LIST}`);
- this.page = res.paging;
- this.commentData = this.commentData.concat(res.data);
- nodeCommentContentDiv.innerHTML += createCommentHTML(res.data);
- removeByBox(dom(`#${ID_CTZ_COMMENT_CHILD} .ctz-comment-content`), CLASS_LOADING);
- if (res.paging.isEnd) {
- openEnd(dom(`#${ID_CTZ_COMMENT_CHILD} .ctz-comment-content`), ClASS_END);
- }
- }
- };
- var createCommentHTML = (data, isChild = false) => data.map((i2) => createCommentHTMLItem(i2, isChild)).join("");
- var createCommentHTMLItem = (item, isChild = false, haveChild = true) => {
- const { author, id, authorTag, content, createdTime, hot, likeCount, childComments = [], childCommentCount, childCommentNextOffset, replyToAuthor } = item;
- const vDomContent = domC("div", { innerHTML: content });
- vDomContent.querySelectorAll(".comment_img").forEach((i2) => {
- const nItem = i2;
- const nImage = domC("img", {
- src: nItem.href,
- style: " margin: 12px 0px 0px; display:block:width: 100px; height: 200px;"
- });
- nItem.insertAdjacentElement("afterend", nImage);
- nItem.style.display = "none";
- });
- const contentHTML = vDomContent.innerHTML;
- vDomContent.remove();
- return `
- <div data-id="${id}">
- <div class="ctz-ci ${isChild ? "ctz-ci-child" : ""}">
- <div class="ctz-ci-avatar">
- <a href="//www.zhihu.com/people/${author.id}" target="_blank"><img class="Avatar" src="${author.avatarUrl}" srcset="${author.avatarUrl}" alt="invalid s" loading="lazy"></a>
- </div>
- <div class="ctz-ci-right">
- <div class="ctz-ci-user">
- <a href="//www.zhihu.com/people/${author.id}" target="_blank">${author.name}</a>
- ${authorTag.map(createUserTagHTML).join("")}
- ${replyToAuthor && replyToAuthor.name ? `<span>‣</span><a href="//www.zhihu.com/people/${replyToAuthor.id}" target="_blank">${replyToAuthor.name}</a>` : ""}
- </div>
- <div class="ctz-ci-content">${contentHTML}</div>
- <div class="ctz-ci-info">
- <div class="ctz-ci-info-left">
- <span>${timeFormatter(+`${createdTime}000`, "YYYY-MM-DD")}</span>
- ${hot ? '<span style="color: rgb(255, 150, 7);font-weight:bold;">热评</span>' : ""}
- </div>
- <div class="ctz-ci-info-right">
- <span class="${CLASS_VOTE} ${item.liked ? CLASS_VOTE_UP2 : ""}" data-id="${id}">❤︎ <span>${likeCount}</span></span>
- </div>
- </div>
- </div>
- </div>
- ${haveChild ? childComments.map((i2) => createCommentHTMLItem(i2, true)).join("") : ""}
- ${haveChild && childCommentCount > childComments.length ? `<button class="ctz-comment-button" name="comment-more" data-next-offset="${childCommentNextOffset}" data-id="${id}">查看全部 ${childCommentCount} 条回复 ➤</button>` : ""}
- </div>`;
- };
- var createUserTagHTML = (item) => {
- const { hasBorder, borderColor, color, text } = item;
- return `<div class="ctz-tag" style="${hasBorder ? `border: 1px solid ${borderColor};` : ""}color: ${color};">${text}</div>`;
- };
- var initOperate = () => {
- const myOperation = {
- [CLASS_INPUT_CLICK]: fnChanger,
- [CLASS_INPUT_CHANGE]: fnChanger,
- "ctz-button": (even) => {
- myButtonOperate[even.name] && myButtonOperate[even.name](even);
- }
- };
- const operation = (even) => {
- const target = even.target;
- const classList = target.classList;
- for (let key in myOperation) {
- classList.contains(key) && myOperation[key](even.target);
- }
- };
- const nodeCTZContent = dom(".ctz-content");
- if (nodeCTZContent) {
- nodeCTZContent.addEventListener("click", operation);
- nodeCTZContent.onchange = operation;
- }
- dom(".ctz-menu").onclick = myMenu.click;
- domA(".ctz-content-top").forEach((i2) => {
- i2.addEventListener("click", myMenu2.click);
- });
- domById("CTZ_OPEN_BUTTON").addEventListener("click", myDialog.open);
- domById("CTZ_CLOSE_DIALOG").addEventListener("click", myDialog.hide);
- myListenComment.initOperate();
- myListenCommentChild.initOperate();
- domById("CTZ_PREVIEW_IMAGE").addEventListener("click", function() {
- myPreview.hide(this);
- });
- document.body.addEventListener("click", function(event) {
- const target = event.target;
- if (target.classList.contains(CLASS_COPY_LINK)) {
- const link = target.getAttribute("data-link");
- copy(link);
- message("链接复制成功");
- }
- });
- dom("#root").addEventListener("click", (event) => {
- eventListenButton(event);
- });
- };
- var Store = class {
- constructor() {
- /** 页面高度 */
- this.pageHeight = 0;
- /** 回答屏蔽的标签 */
- this.hiddenTags = [];
- /** 回答屏蔽的用户 */
- this.hiddenUsers = [];
- this.setPageHeight = this.setPageHeight.bind(this);
- this.getPageHeight = this.getPageHeight.bind(this);
- this.initSetHidden = this.initSetHidden.bind(this);
- this.getHidden = this.getHidden.bind(this);
- }
- setPageHeight(height) {
- this.pageHeight = height;
- }
- getPageHeight() {
- return this.pageHeight;
- }
- async initSetHidden() {
- const config = await myStorage.getConfig();
- const nHiddenTags = Object.keys(HIDDEN_ANSWER_TAG).filter((i2) => !!config[i2]).map((i2) => HIDDEN_ANSWER_TAG[i2]);
- this.hiddenTags = nHiddenTags;
- const nHiddenUsers = Object.keys(HIDDEN_ANSWER_ACCOUNT).filter((i2) => !!config[i2]).map((i2) => HIDDEN_ANSWER_ACCOUNT[i2]);
- config.removeAnonymousAnswer && nHiddenUsers.push("匿名用户");
- this.hiddenUsers = nHiddenUsers;
- }
- getHidden() {
- return {
- hiddenTags: this.hiddenTags,
- hiddenUsers: this.hiddenUsers
- };
- }
- };
- var store = new Store();
- var CLASS_ANSWER_ITEM = "ctz-answer-item";
- var myListenAnswer = {
- isUpdated: false,
- next: "",
- end: false,
- loading: false,
- init: async function() {
- this.isUpdated = /question\/\d+\/answers\/updated/.test(location.pathname);
- const nodeQuestionMain = dom(".Question-main");
- if (!nodeQuestionMain) {
- setTimeout(() => {
- fnLog("未找到 .Question-main, 等待重载...");
- myListenAnswer.init();
- }, 500);
- return;
- }
- const config = await myStorage.getConfig();
- const nodeJsonData = domById("js-initialData");
- if (!nodeJsonData) {
- return;
- }
- const pageJsData = JSON.parse(nodeJsonData.innerText || "{}");
- nodesStopPropagation([".RichContent-inner", ".Question-main figure img", ".Question-main a"], [addListenImage]);
- nodesStopPropagation([".RichContent-inner p"], [], "copy");
- const nodeQuestionAnswerContent = dom(".QuestionAnswer-content");
- if (nodeQuestionAnswerContent) {
- const locArr = location.pathname.split("/");
- const answerId = locArr[4];
- const res = await requestAnswer(answerId);
- if (!res)
- return;
- const nodeQuestionAnswerContent2 = dom(".QuestionAnswer-content");
- nodeQuestionAnswerContent2.innerHTML = createListItemHTML({ target: res, targetType: "answer" }, config);
- if (!dom(".Card.ViewAll")) {
- const questions = pageJsData.initialState.entities.questions;
- const question = questions[Object.keys(questions)[0]];
- const nNode = domC("div", {
- className: "Card ViewAll ViewAll--bottom",
- innerHTML: `<a href="/question/${question.id}" class="QuestionMainAction ViewAll-QuestionMainAction" data-za-detail-view-element_name="ViewAll" style="color: rgb(23, 81, 153);">查看全部 ${question.answerCount || 0} 个回答</a>`
- });
- nNode.setAttribute("data-za-detail-view-path-module", "MessageItem");
- nNode.setAttribute("data-za-extra-module", `{"card":{"content":{"item_num":${question.answerCount || 0}}}}`);
- insertAfter(nNode, nodeQuestionAnswerContent2.parentElement);
- }
- } else {
- const matchArr = location.pathname.match(/question\/(\d+)\/?/);
- const questionId = matchArr && matchArr.length ? matchArr[1] : "";
- const currentQuestion = this.isUpdated ? pageJsData.initialState.question.updatedAnswers[questionId] : pageJsData.initialState.question.answers[questionId];
- if (currentQuestion) {
- const next = currentQuestion.next;
- this.next = next;
- this.end = !next;
- }
- const prevAnswers = pageJsData.initialState.entities.answers;
- const prevDataList = Object.keys(prevAnswers).map((i2) => ({
- target: formatDataToHump(prevAnswers[i2]),
- targetType: "answer"
- }));
- const topCurrentData = prevDataList.pop();
- if (this.isUpdated) {
- const prevListDom = dom(".List div:nth-of-type(2)");
- if (prevListDom) {
- prevListDom.style.display = "none";
- dom(".List").appendChild(domC("div", { className: "List" }));
- }
- }
- const nodeTopList = dom(".List .List");
- if (topCurrentData) {
- if (nodeTopList) {
- nodeTopList.innerHTML = createListItemHTML(topCurrentData, config);
- const nodeLists = domA(".Question-main .List");
- const nodeListContent = nodeLists[nodeLists.length - 1];
- if (prevDataList.length) {
- if (this.isUpdated) {
- nodeListContent.innerHTML += createListHTML(prevDataList, config);
- } else {
- nodeListContent.innerHTML = createListHTML(prevDataList, config);
- }
- }
- } else {
- fnLog("nodeTopList is undefined");
- }
- }
- this.checkListHeight();
- }
- setTimeout(() => {
- const nodeAnswers = domA(".List-item");
- if (nodeAnswers.length && !nodeAnswers[0].classList.contains(CLASS_ANSWER_ITEM)) {
- fnLog("回答内容被覆盖,等待重载...");
- myListenAnswer.init();
- }
- }, 500);
- },
- /** 滚动时回答内容处理 */
- scroll: async function() {
- const nodeAnswers = domA(".ContentItem");
- const windowHeight = window.innerHeight;
- for (let i2 = 0, len = nodeAnswers.length; i2 < len; i2++) {
- const nodeItem = nodeAnswers[i2];
- const nodeClose = nodeItem.querySelector(`.${CLASS_BTN_CLOSE}`);
- if (!nodeClose || nodeClose.style.display === "none")
- continue;
- const bounding2 = nodeItem.getBoundingClientRect();
- const nodeActions = nodeItem.querySelector(".ContentItem-actions");
- if (bounding2.bottom < windowHeight || bounding2.top > windowHeight) {
- if (nodeActions.style.cssText) {
- nodeActions.style.cssText = "";
- }
- continue;
- }
- nodeActions.style.cssText += `position: fixed; bottom: 0; left: 0; width: 100%!important; margin: 0;box-shadow: 0 -1px 3px rgba(25,27,31,0.1);`;
- }
- const nodeLists = domA(".Question-main .List");
- if (!nodeLists.length)
- return;
- const nodeListContent = nodeLists[nodeLists.length - 1];
- const bounding = nodeListContent.getBoundingClientRect();
- if (bounding.bottom - 200 <= window.innerHeight && !this.end && !this.loading) {
- this.requestData(nodeListContent);
- }
- },
- requestData: async function(nodeListContent) {
- if (this.end)
- return;
- this.loading = true;
- openLoading(nodeListContent, "ctz-answer-loading");
- const res = await commonRequest(this.next);
- removeByBox(nodeListContent, "ctz-answer-loading");
- this.loading = false;
- if (!res)
- return;
- fnLog(res);
- const { paging, data } = res;
- if (paging.next === this.next)
- return;
- this.end = paging.isEnd;
- this.next = paging.next;
- const config = await myStorage.getConfig();
- nodeListContent.innerHTML += createListHTML(data, config);
- paging.isEnd && openEnd(nodeListContent, "ctz-answer-end");
- this.checkListHeight();
- },
- /** 检测元素高度 */
- checkListHeight: function() {
- const nodeLists = domA(".Question-main .List");
- if (!nodeLists.length)
- return;
- const nodeListContent = nodeLists[nodeLists.length - 1];
- if (nodeListContent.offsetHeight < window.innerHeight) {
- this.requestData(nodeListContent);
- }
- }
- };
- var createListHTML = (data, config) => data.map((i2) => createListItemHTML(i2, config)).join("");
- var createListItemHTML = (data, config) => {
- const { releaseTimeForAnswer, copyAnswerLink } = config;
- const { targetType, target } = data;
- const { hiddenTags, hiddenUsers } = store.getHidden();
- const answerTopCard = [];
- target.labelInfo && answerTopCard.push(`本回答节选自${target.labelInfo.text}`);
- for (let i2 = 0, len = hiddenTags.length; i2 < len; i2++) {
- if (answerTopCard.join().includes(hiddenTags[i2]))
- return "";
- }
- for (let i2 = 0, len = hiddenUsers.length; i2 < len; i2++) {
- if (target.author.name === hiddenUsers[i2])
- return "";
- }
- let extraHTML = "";
- copyAnswerLink && (extraHTML += createHTMLCopyLink(`https://www.zhihu.com/question/${target.question.id}/answer/${target.id}`));
- return `
- <div class="List-item ${CLASS_ANSWER_ITEM}" tabindex="0">
- <div
- class="ContentItem AnswerItem ctz-self-item"
- data-za-index="0"
- data-zop='{"authorName":"${target.author.name}","itemId":${target.id},"title":"${target.question.title}","type":"${targetType}"}'
- name="${target.id}"
- itemprop="suggestedAnswer"
- itemtype="http://schema.org/Answer"
- itemscope=""
- data-za-detail-view-path-module="AnswerItem"
- data-za-detail-view-path-index="0"
- data-za-extra-module='{"card":{"has_image":false,"has_video":false,"content":{"type":"${targetType}","token":"${target.id}","upvote_num":${target.voteupCount},"comment_num":${target.commentCount},"publish_timestamp":null,"parent_token":"${target.question.id}","author_member_hash_id":"${target.author.id}"}}}'
- >
- ${innerHTMLContentItemMeta(data, {
- haveTime: releaseTimeForAnswer,
- extraHTML,
- config
- })}
- ${answerTopCard.length ? `<div class="KfeCollection-AnswerTopCard-Container">` + answerTopCard.map(
- (i2) => `<div class="KfeCollection-OrdinaryLabel-newStyle-mobile" style="margin-right: 6px;"><div class="KfeCollection-OrdinaryLabel-content">${i2}</div></div>`
- ).join("") + `</div>` : ""}
- ${innerHTMLRichInnerAndAction(data)}
- </div>
- </div>`;
- };
- var fnListenArticle = () => {
- nodesStopPropagation([".RichContent-actions .VoteButton", ".BottomActions-CommentBtn"], [clickCommit]);
- nodesStopPropagation([".Post-content p"], [], "copy");
- };
- var clickCommit = (event) => {
- const target = event.target;
- if (target.classList.contains("BottomActions-CommentBtn")) {
- const id = location.pathname.replace("/p/", "");
- myListenComment.create(id, void 0, void 0, "articles");
- }
- };
- var myListenListRecommend = {
- next: "",
- loading: false,
- init: async function() {
- const nodeTopStoryRecommend = dom(".TopstoryMain") || dom(".NotLoggedInTopstory");
- if (!nodeTopStoryRecommend)
- return;
- const nodeJsonData = domById("js-initialData");
- const config = await myStorage.getConfig();
- if (!nodeJsonData) {
- return;
- }
- const pageJsData = JSON.parse(nodeJsonData.innerText || "{}");
- const next = pageJsData.initialState.topstory.recommend.next;
- this.next = next;
- const currentData = pageJsData.initialState.topstory.recommend.serverPayloadOrigin;
- if (!currentData)
- return;
- const nodeTopstoryMain = dom(".TopstoryMain");
- if (!nodeTopstoryMain)
- return;
- const nodeListContent = nodeTopstoryMain.querySelector('[role="list"]');
- nodeListContent.innerHTML = createListHTML2(formatDataToHump(currentData.data), config);
- },
- scroll: function() {
- const nodeTopstoryMain = dom(".TopstoryMain");
- if (!nodeTopstoryMain)
- return;
- const bounding = nodeTopstoryMain.getBoundingClientRect();
- if (bounding.bottom - 200 <= window.innerHeight && !this.loading) {
- const nodeListContent = nodeTopstoryMain.querySelector('[role="list"]');
- this.requestData(nodeListContent);
- }
- },
- requestData: async function(nodeListContent) {
- this.loading = true;
- openLoading(nodeListContent, "ctz-list-loading");
- const res = await commonRequest(this.next);
- removeByBox(nodeListContent, "ctz-list-loading");
- this.loading = false;
- if (!res)
- return;
- fnLog(res);
- const { paging, data } = res;
- if (paging.next === this.next)
- return;
- this.next = paging.next;
- const config = await myStorage.getConfig();
- nodeListContent.innerHTML += createListHTML2(data, config);
- this.checkListHeight();
- },
- checkListHeight: function() {
- const nodeTopstoryMain = dom(".TopstoryMain");
- if (!nodeTopstoryMain)
- return;
- if (nodeTopstoryMain.offsetHeight < window.innerHeight) {
- const nodeListContent = nodeTopstoryMain.querySelector('[role="list"]');
- this.requestData(nodeListContent);
- }
- }
- };
- var addHistoryItem = async (data) => {
- const { target } = data;
- const type = target.type;
- const { name, bTypeClass, formatData } = CONTENT_TYPE_OBJ[type];
- const pfHistory = await myStorage.getHistory();
- const historyList = pfHistory.list;
- const { itemHref2, itemTitle } = formatData(target);
- let bType = `<b class="${bTypeClass}">「${name}」</b>`;
- const itemA = `<a href="${itemHref2}" target="_blank">${bType + itemTitle}</a>`;
- !historyList.includes(itemA) && historyList.unshift(itemA);
- myStorage.setHistoryItem("list", historyList);
- };
- var createListHTML2 = (data, config) => data.filter((i2) => i2.target).map((i2) => createListItemHTML2(i2, config)).join("");
- var createListItemHTML2 = (data, config) => {
- const { releaseTimeForList, copyAnswerLink, showToAnswer, removeItemAboutVideo, removeItemAboutArticle } = config;
- const { id, target, attachedInfo, brief } = data;
- const type = target.type;
- const { contentItem, nType, formatData } = CONTENT_TYPE_OBJ[type];
- const { itemHref, itemHref2, itemTitle } = formatData(target);
- addHistoryItem(data);
- if (removeItemAboutVideo && type === "zvideo") {
- fnLog("屏蔽视频");
- return "";
- }
- if (removeItemAboutArticle && type === "article") {
- fnLog("屏蔽文章");
- return "";
- }
- let extraHTML = "";
- copyAnswerLink && (extraHTML += createHTMLCopyLink(itemHref2));
- showToAnswer && type === "answer" && (extraHTML += `<a href="${itemHref}" target="_blank" class="ctz-button ctz-button-transparent">直达问题</a>`);
- return `
- <div class="Card TopstoryItem TopstoryItem-isRecommend ctz-recommend-item" tabindex="0">
- <div
- class="Feed"
- data-za-detail-view-path-module="FeedItem"
- data-za-detail-view-path-index="0"
- data-za-extra-module='{"card":{"card_type":"Feed","feed_id":"${id}","has_image":false,"has_video":false,"content":${brief}},"attached_info_bytes":"${attachedInfo}"}'
- >
- <div
- class="ContentItem ${contentItem}"
- data-zop='{"authorName":"${target.author.name}","itemId":${target.id},"title":"${itemTitle}","type":"${type}"}'
- name="${target.id}"
- itemprop="${type}"
- itemtype="http://schema.org/${nType}"
- itemscope=""
- data-za-detail-view-path-module="${contentItem}"
- data-za-detail-view-path-index="4"
- data-za-extra-module='{"card":{"has_image":false,"has_video":false,"content":{"type":"${nType}","token":"${target.id}","upvote_num":${target.voteupCount},"comment_num":${target.commentCount},"publish_timestamp":null,"author_member_hash_id":"${target.author.id}"}}}'
- >
- <h2 class="ContentItem-title">
- <div itemprop="zhihu:${type}" itemtype="http://schema.org/${nType}" itemscope="" style="display:inline;">
- <meta itemprop="url" itemprop="name" content="${itemHref}" />
- <meta content="${itemTitle}"/>
- <a target="_blank" data-za-detail-view-element_name="Title" data-za-detail-view-id="2812" href="${itemHref2}">${itemTitle}</a>
- </div>
- </h2>
- ${innerHTMLContentItemMeta(data, {
- extraHTML,
- haveTime: releaseTimeForList,
- config
- })}
- ${innerHTMLRichInnerAndAction(data, { moreLength: 40, moreMaxHeight: "100px" })}
- </div>
- </div>
- </div>`;
- };
- var addQuestionLogButton = async () => {
- const { showQuestionLog } = await myStorage.getConfig();
- const nodeBtnGroup = dom(".MobileQuestionButtonGroup");
- const className = "ctz-question-log";
- const prevBtn = dom(`.${className}`);
- if (!showQuestionLog || !nodeBtnGroup || prevBtn)
- return;
- const nBtn = domC("button", {
- innerHTML: "查看问题日志",
- className: `ctz-button ctz-button-transparent ${className}`
- });
- nBtn.addEventListener("click", () => {
- const findPath = location.pathname.match(/\/question\/\d+/);
- if (findPath && findPath.length) {
- const nPathname = findPath[0];
- window.open(nPathname + "/log");
- }
- });
- nodeBtnGroup.appendChild(nBtn);
- };
- (function() {
- const { hostname, host, pathname } = location;
- if (!HTML_HOOTS.includes(hostname) || window.frameElement)
- return;
- GM_registerMenuCommand("⚙️ 设置", () => {
- myDialog.open();
- });
- store.initSetHidden();
- async function onDocumentStart() {
- if (!document.head || !document.body) {
- fnLog("not find head and body, waiting for reload...");
- setTimeout(() => {
- fnLog("to reload...");
- onDocumentStart();
- }, 500);
- return;
- }
- fnInitDomStyle("CTZ_STYLE", INNER_CSS);
- addHistoryView();
- onInitStyleExtra();
- EXTRA_CLASS_HTML[host] && dom("html").classList.add(EXTRA_CLASS_HTML[host]);
- initHTML();
- initOperate();
- echoData();
- loadBackground();
- myCustomStyle.init();
- echoHistory();
- setTimeout(() => {
- myListenListRecommend.init();
- }, 0);
- if (host === "zhuanlan.zhihu.com") {
- addTimeForArticle();
- fnListenArticle();
- }
- if (/question/.test(pathname)) {
- addTimeForQuestion();
- addQuestionLogButton();
- setTimeout(() => {
- myListenAnswer.init();
- }, 0);
- }
- const observer = new MutationObserver((MutationRecord) => {
- const addedNode = MutationRecord[0].addedNodes[0];
- const touchClose = (addedNode2) => {
- if (!addedNode2)
- return;
- const domWrapper = addedNode2.querySelector(".MobileModal-wrapper");
- if (!domWrapper)
- return;
- if (domWrapper.innerText.toLowerCase().includes("app")) {
- const buttonClose = domWrapper.querySelector(".Button--secondary.Button--grey");
- if (buttonClose) {
- buttonClose.click();
- setTimeout(() => touchClose(addedNode2), 100);
- }
- }
- };
- touchClose(addedNode);
- });
- observer.observe(document.body, {
- characterData: false,
- attributes: false,
- attributeOldValue: false,
- subtree: false,
- childList: true
- });
- fnLog("function onDocumentStart init");
- }
- onDocumentStart();
- window.addEventListener("load", () => {
- const nodeSignModal = dom(".signFlowModal");
- const nodeSignClose = nodeSignModal && nodeSignModal.querySelector(".Modal-closeButton");
- nodeSignClose && nodeSignClose.click();
- });
- document.addEventListener("copy", function(event) {
- let clipboardData = event.clipboardData || window.clipboardData;
- if (!clipboardData)
- return;
- const selection = window.getSelection();
- let text = selection ? selection.toString() : "";
- if (text) {
- event.preventDefault();
- clipboardData.setData("text/plain", text);
- }
- });
- window.addEventListener(
- "scroll",
- throttle(async () => {
- myListenAnswer.scroll();
- myListenListRecommend.scroll();
- }, 100),
- false
- );
- document.addEventListener("copy", function(event) {
- let clipboardData = event.clipboardData || window.clipboardData;
- if (!clipboardData)
- return;
- const selection = window.getSelection();
- let text = selection ? selection.toString() : "";
- if (text) {
- event.preventDefault();
- clipboardData.setData("text/plain", text);
- }
- });
- })();
- })();