// ==UserScript== // @name 🔥🔥🔥文本选中复制🔥🔥🔥 // @description 解除网站不允许复制的限制,文本选中后点击复制按钮即可复制,主要用于 百度文库 道客巴巴 腾讯文档 豆丁网 无忧考网 学习啦 蓬勃范文 思否社区 力扣 知乎 语雀 等 // @namespace https://github.com/WindrunnerMax/TKScript // @version 6.2.2 // @author Czy // @match *://wenku.baidu.com/view/* // @match *://wenku.baidu.com/share/* // @match *://wenku.baidu.com/link* // @match *://wenku.baidu.com/aggs/* // @match *://wenku.baidu.com/ndPureView/* // @match *://www.51test.net/show/* // @match *://www.xuexi.la/* // @match *://www.xuexila.com/* // @match *://www.cspengbo.com/* // @match *://*.doc88.com/* // @match *://segmentfault.com/* // @match *://wk.baidu.com/view/* // @match *://leetcode-cn.com/problems/* // @match *://*.zhihu.com/* // @match *://z.30edu.com.cn/* // @match *://docs.qq.com/doc/* // @match *://docs.qq.com/sheet/* // @match *://boke112.com/post/* // @match *://*.yuque.com/* // @match *://www.commandlinux.com/* // @match *://*.diyifanwen.com/* // @match *://*.mbalib.com/* // @match *://*.cnitpm.com/* // @match *://bbs.mihoyo.com/ys/* // @match *://*.ruiwen.com/* // @match *://www.uemeds.cn/* // @match *://www.oh100.com/* // @match *://www.aiyuke.com/news/* // @match *://www.fwsir.com/* // @match *://www.wenxm.cn/* // @match *://www.unjs.com/* // @match *://www.ahsrst.cn/* // @match *://*.yjbys.com/* // @match *://*.qidian.com/* // @match *://*.zongheng.com/* // @match *://*.17k.com/* // @match *://*.ciweimao.com/* // @match *://book.qq.com/* // @match *://*.360doc.com/content/* // @match *://*.850500.com/news/* // @match *://utaten.com/lyric/* // @match *://*.jianbiaoku.com/* // @match *://*.kt250.com/* // @match *://www.kejudati.com/* // @match *://*.xiaohongshu.com/discovery/* // @match *://*.baibeike.com/* // @match *://*.blog.csdn.net/* // @match *://*.bilibili.com/read/* // @match *://*.cnki.net/KXReader/* // @match *://*.cnrencai.com/* // @match *://*.kodiplayer.cn/* // @match *://tongxiehui.net/* // @match *://*.jianshu.com/p/* // @match *://*.linovelib.com/novel/* // @match *://*.wjx.cn/* // @match *://*.wjx.top/* // @match *://*.chazidian.com/* // @match *://*.juejin.cn/post/* // @match *://*.zgbk.com/ecph/* // @match *://*.wenmi.com/article/* // @match *://yuedu.baidu.com/* // @match *://www.inrrp.com.cn/* // @match *://fanyi.baidu.com/mtpe/* // @match *://www.shubaoc.com/* // @match *://blog.51cto.com/* // @match *://www.ximalaya.com/* // @match *://*.tianqi.com/* // @match *://*.xiexiebang.com/* // @match *://*.docin.com/* // @match *://*.ddwk8.cn/* // @match *://*.php.cn/* // @match *://cooco.net.cn/* // @match *://fanqienovel.com/* // @match *://*.mobiletrain.org/* // @match *://*.examcoo.com/* // @match *://*.rrdynb.com/* // @match *://*.fuwu7.com/* // @match *://*.xiangqiqipu.com/* // @match *://note.youdao.com/* // @match *://*.163.com/* // @match *://*.aipiaxi.com/* // @match *://wenku.csdn.net/* // @match *://www.kdocs.cn/* // @match *://www.xiaoyuzhoufm.com/* // @match *://*.mcmod.cn/* // @supportURL https://github.com/WindrunnerMax/TKScript/issues // @license GPL License // @installURL https://github.com/WindrunnerMax/TKScript // @run-at document-start // @connect res3.doc88.com // @grant unsafeWindow // @grant GM_xmlhttpRequest // ==/UserScript== (function () { 'use strict'; var css_248z$1 = ".__copy-button{align-items:center;background:#4c98f7;border-radius:3px;color:#fff;cursor:pointer;display:flex;font-size:13px;height:30px;justify-content:center;opacity:0;position:absolute;transition:opacity .3s;width:60px;z-index:-1000}"; var css_248z = "#select-tooltip,#sfModal,.modal-backdrop,div[id^=reader-helper]{display:none!important}.modal-open{overflow:auto!important}._sf_adjust_body{padding-right:0!important}"; const DOM_STAGE = { START: "document-start", END: "document-end" }; const DOM_READY = "DOMContentLoaded"; const PAGE_LOADED = "load"; const MOUSE_UP = "mouseup"; const MOUSE_DOWN = "mousedown"; const MOUSE_MOVE = "mousemove"; const COPY = "copy"; const SELECT_START = "selectstart"; const CONTEXT_MENU = "contextmenu"; const KEY_DOWN = "keydown"; const opt = Object.prototype.toString; function isString(value) { return opt.call(value) === "[object String]"; } const dom$1 = { query: function(selector) { return document.querySelector(selector); }, attr: function(selector, attr, value) { const dom2 = document.querySelector(selector); dom2 && dom2.setAttribute(attr, value); }, append: function(selector, content) { const container = document.createElement("div"); if (isString(content)) { container.innerHTML = content; } else { container.appendChild(content); } const targetDOM = document.querySelector(selector); targetDOM && targetDOM.append(container); return container; }, remove: function(selector) { const targetDOM = document.querySelector(selector); targetDOM && targetDOM.remove(); } }; const initBaseEvent = (websiteConfig) => { window.addEventListener(DOM_READY, () => { if (websiteConfig.initCopyEvent) { document.oncopy = (e) => e.stopPropagation(); document.body.oncopy = (e) => e.stopPropagation(); document.addEventListener(COPY, (e) => e.stopPropagation()); document.body.addEventListener(COPY, (e) => e.stopPropagation()); } }); }; const initBaseStyle = () => { window.addEventListener(DOM_READY, () => { dom$1.append("head", ``); dom$1.append("head", ``); }); }; /*! * 外部引用`static.doc88.com`声明 * 此部分是在处理`doc88.com`才会加载的资源文件,此资源文件由该网站加载时提供 */ let path = ""; const website$t = { regexp: /.*doc88\.com\/.+/, init: () => { dom$1.append( "body", `` ); GM_xmlhttpRequest({ method: "GET", url: "https://res3.doc88.com/resources/js/modules/main-v2.min.js?v=2.56", onload: function(response) { const result = /\("#cp_textarea"\).val\(([\S]*?)\);/.exec(response.responseText); if (result) path = result[1]; } }); window.addEventListener("load", () => { const cpFn = unsafeWindow.copyText.toString(); const fnResult = /'\+([\S]*?)\+"<\/textarea>/.exec(cpFn); if (fnResult) path = fnResult[1]; }); }, getSelectedText: () => { let select = unsafeWindow; path.split(".").forEach((v) => { select = select[v]; }); if (!select) { unsafeWindow.Config.vip = 1; unsafeWindow.Config.logined = 1; dom$1.remove("#copy-element-hide"); } return select; } }; const website$s = { regexp: /.*segmentfault\.com\/.+/, init: function() { const body = dom$1.query("body"); if (body) { body.classList.add("_sf_adjust_body"); body.onclick = () => { body.style.paddingRight = "0"; }; } } }; const TEXT_PLAIN = "text/plain"; const TEXT_HTML = "text/html"; const downgradeCopy = (data) => { const textarea = document.createElement("textarea"); textarea.addEventListener( COPY, (event) => { for (const [key, value] of Object.entries(data)) { event.clipboardData && event.clipboardData.setData(key, value); } event.stopPropagation(); event.preventDefault(); }, true ); textarea.style.position = "fixed"; textarea.style.left = "-999px"; textarea.style.top = "-999px"; textarea.value = data[TEXT_PLAIN]; document.body.appendChild(textarea); textarea.select(); document.execCommand("copy"); document.body.removeChild(textarea); }; const isEmptyContent = (data) => { if (!data) return true; return isString(data) ? !data : !data[TEXT_PLAIN]; }; const copy = (data) => { const params = isString(data) ? { [TEXT_PLAIN]: data } : data; const plainText = params[TEXT_PLAIN]; if (!plainText) return false; if (navigator.clipboard && window.ClipboardItem) { const dataItems = {}; for (const [key, value] of Object.entries(params)) { const blob = new Blob([value], { type: key }); dataItems[key] = blob; } navigator.clipboard.write([new ClipboardItem(dataItems)]).catch(() => { downgradeCopy(params); }); } else { downgradeCopy(params); } return true; }; let dom = null; let isReadyToHidden = false; const instance = { id: "__copy", className: "__copy-button", init: function(name) { const container = document.createElement("div"); container.id = this.id; container.className = this.className; container.innerText = name || "复制"; container.addEventListener("mouseup", (e) => e.stopPropagation(), true); container.addEventListener("mousedown", (e) => e.stopPropagation(), true); dom = container; document.body.appendChild(dom); }, getInstance: function() { if (dom === null) { this.init(); } return dom; }, show: function(event) { if (isReadyToHidden) return void 0; const dom2 = this.getInstance(); dom2.style.left = `${event.pageX + 30}px`; dom2.style.top = `${event.pageY}px`; dom2.style.opacity = "1"; dom2.style.zIndex = "1000"; }, hide: function(keep = 350) { const dom2 = this.getInstance(); dom2.style.opacity = "0"; if (keep) { isReadyToHidden = true; setTimeout(() => { dom2.style.zIndex = "-10000"; isReadyToHidden = false; }, keep); } }, onCopy: function(content, event) { const dom2 = this.getInstance(); this.show(event); dom2.onclick = () => { copy(content); this.hide(); }; }, enable: function() { const dom2 = this.getInstance(); dom2.style.display = "flex"; }, disable: function() { const dom2 = this.getInstance(); dom2.style.display = "none"; }, destroy: function() { const el = this.getInstance(); el.remove(); dom = null; } }; const stopNativePropagation = (event) => { event.stopPropagation(); }; var utils = { hideButton: () => { instance.disable(); }, showButton: () => { instance.enable(); }, removeAttributes: (selector, attr = []) => { const dom = isString(selector) ? document.querySelector(selector) : selector; dom && attr.forEach((item) => dom.removeAttribute(item)); }, enableUserSelectByCSS: () => { const css = "*{user-select: auto !important;-webkit-user-select: auto !important;}"; const style = document.createElement("style"); style.innerText = css; const head = document.getElementsByTagName("head")[0]; if (head) { head.appendChild(style); } else { window.addEventListener( PAGE_LOADED, () => document.getElementsByTagName("head")[0].appendChild(style) ); } }, enableOnSelectStart: (selector) => { const dom = document.querySelector(selector); dom && dom.addEventListener(SELECT_START, stopNativePropagation); }, enableOnContextMenu: (selector) => { const dom = document.querySelector(selector); dom && dom.addEventListener(CONTEXT_MENU, stopNativePropagation); }, enableOnCopy: (selector) => { const dom = document.querySelector(selector); dom && dom.addEventListener(COPY, stopNativePropagation); }, enableOnKeyDown: (selector) => { const dom = document.querySelector(selector); dom && dom.addEventListener(KEY_DOWN, (e) => { if (e.key === "c" && e.ctrlKey) return e.stopPropagation(); }); }, enableOnSelectStartByCapture: () => { window.addEventListener(SELECT_START, stopNativePropagation, true); document.addEventListener(SELECT_START, stopNativePropagation, true); }, enableOnContextMenuByCapture: () => { window.addEventListener(CONTEXT_MENU, stopNativePropagation, true); document.addEventListener(CONTEXT_MENU, stopNativePropagation, true); }, enableOnCopyByCapture: () => { window.addEventListener(COPY, stopNativePropagation, true); document.addEventListener(COPY, stopNativePropagation, true); }, enableOnKeyDownByCapture: () => { document.addEventListener( KEY_DOWN, (e) => e.ctrlKey && e.key.toLocaleUpperCase() === "C" && e.stopPropagation(), true ); } }; const website$r = { regexp: /.*wk\.baidu\.com\/view\/.+/, init: function() { utils.hideButton(); utils.enableOnSelectStartByCapture(); window.onload = () => { dom$1.attr(".sf-edu-wenku-vw-container", "style", ""); }; } }; const website$q = { regexp: /.*zhihu\.com\/.*/, init: function() { utils.hideButton(); utils.enableUserSelectByCSS(); utils.enableOnCopyByCapture(); if (location.hostname === "zhuanlan.zhihu.com") { const removeFocalPointModal = (mutationsList) => { for (const mutation of mutationsList) { const addedNodes = mutation.addedNodes; for (let i = 0; i < addedNodes.length; i++) { const target = addedNodes[i]; if (target.nodeType != 1) return void 0; if (target instanceof HTMLDivElement && target.querySelector("[data-focus-scope-start]")) { const element = target.querySelector("[data-focus-scope-start]"); element && element.parentElement && element.parentElement.textContent && element.parentElement.textContent.indexOf("立即登录/注册") > -1 && element.parentElement.parentElement && element.parentElement.parentElement.removeChild(element.parentElement); } } } }; const observer = new MutationObserver(removeFocalPointModal); observer.observe(document, { childList: true, subtree: true }); } } }; const website$p = { regexp: /.*30edu\.com\.cn\/.+/, init: function() { window.onload = () => { var _a; const iframes = document.getElementsByTagName("iframe"); if (iframes.length === 2) { const body = (_a = iframes[1].contentWindow) == null ? void 0 : _a.document.querySelector("body"); body && utils.removeAttributes(body, ["oncopy", "oncontextmenu", "onselectstart"]); } }; } }; const website$o = { regexp: /.*docs\.qq\.com\/.+/, config: { initCopyEvent: false, captureInstance: true, delay: 100 }, init: function() { window.onload = () => { utils.hideButton(); }; }, getSelectedText: function() { var _a; if (unsafeWindow.pad && unsafeWindow.pad.editor && !unsafeWindow.pad.editor.isCopyable()) { utils.showButton(); const editor = unsafeWindow.pad.editor; if (editor.getCopyContent) { const content = editor.getCopyContent() || {}; const plainText = content.plain || ""; const htmlText = content.html || ""; return { [TEXT_PLAIN]: plainText, [TEXT_HTML]: htmlText }; } else { editor._docEnv.copyable = true; editor.clipboardManager.copy(); const plainText = editor.clipboardManager.customClipboard.plain || ""; const htmlText = editor.clipboardManager.customClipboard.html || ""; editor._docEnv.copyable = false; return { [TEXT_PLAIN]: plainText, [TEXT_HTML]: htmlText }; } } else if (unsafeWindow.SpreadsheetApp && unsafeWindow.SpreadsheetApp.permissions && unsafeWindow.SpreadsheetApp.permissions.sheetStatus && unsafeWindow.SpreadsheetApp.permissions.sheetStatus.canCopy === false && unsafeWindow.SpreadsheetApp.permissions.sheetStatus.canEdit && unsafeWindow.SpreadsheetApp.permissions.sheetStatus.canEdit() === false) { utils.showButton(); const SpreadsheetApp = unsafeWindow.SpreadsheetApp; const [selection] = SpreadsheetApp.view.getSelectionRanges(); if (selection) { const text = []; const { startColIndex, startRowIndex, endColIndex, endRowIndex } = selection; for (let i = startRowIndex; i <= endRowIndex; i++) { for (let k = startColIndex; k <= endColIndex; k++) { const cell = SpreadsheetApp.workbook.activeSheet.getCellDataAtPosition(i, k); if (!cell) continue; text.push(" ", ((_a = cell.formattedValue) == null ? void 0 : _a.value) || cell.value || ""); } i !== endRowIndex && text.push("\n"); } const str = text.join(""); return /^\s*$/.test(str) ? "" : str; } return ""; } return ""; } }; const website$n = { regexp: new RegExp(".+://boke112.com/post/.+"), init: function() { utils.enableOnCopyByCapture(); const template = ` `; dom$1.append("head", template); } }; const website$m = { regexp: /diyifanwen/, init: function() { utils.hideButton(); utils.enableOnCopyByCapture(); utils.enableOnKeyDownByCapture(); } }; const website$l = { regexp: /mbalib/, init: function() { window.onload = () => { utils.removeAttributes("fullScreenContainer", ["oncopy", "oncontextmenu", "onselectstart"]); }; } }; const website$k = { regexp: /cnitpm/, init: function() { utils.hideButton(); window.onload = () => { utils.removeAttributes("body", ["oncopy", "oncontextmenu", "onselectstart"]); }; } }; const website$j = { regexp: new RegExp(".+bbs.mihoyo.com/.+"), init: function() { utils.hideButton(); utils.enableOnCopyByCapture(); utils.enableOnSelectStartByCapture(); utils.enableUserSelectByCSS(); } }; const website$i = { regexp: new RegExp(".+www.uemeds.cn/.+"), init: function() { utils.hideButton(); utils.enableUserSelectByCSS(); } }; const website$h = { regexp: new RegExp(".+aiyuke.com/news/.+"), init: function() { utils.hideButton(); utils.enableUserSelectByCSS(); } }; const website$g = { regexp: new RegExp("qidian"), init: function() { utils.hideButton(); utils.enableUserSelectByCSS(); utils.enableOnCopy(".main-read-container"); utils.enableOnContextMenu(".main-read-container"); } }; const website$f = { regexp: new RegExp("zongheng"), init: function() { utils.removeAttributes(".reader_box", ["style", "unselectable", "onselectstart"]); utils.removeAttributes(".reader_main", ["style", "unselectable", "onselectstart"]); utils.hideButton(); utils.enableOnKeyDown("body"); utils.enableUserSelectByCSS(); utils.enableOnCopy(".content"); utils.enableOnContextMenu("body"); utils.enableOnSelectStart(".content"); } }; const website$e = { regexp: new RegExp("17k"), init: () => { utils.hideButton(); utils.enableOnCopy(".readAreaBox .p"); } }; const website$d = { regexp: new RegExp("ciweimao"), init: function() { utils.hideButton(); utils.enableUserSelectByCSS(); utils.enableOnCopy("#J_BookCnt"); utils.enableOnContextMenu("body"); utils.enableOnSelectStart("#J_BookCnt"); } }; const website$c = { regexp: new RegExp("book\\.qq"), init: function() { utils.hideButton(); utils.enableOnCopy("body"); utils.enableUserSelectByCSS(); utils.enableOnContextMenu("body"); utils.enableOnSelectStart("body"); } }; const website$b = { regexp: new RegExp("utaten"), init: function() { utils.hideButton(); utils.enableUserSelectByCSS(); utils.enableOnSelectStartByCapture(); } }; const website$a = { config: { runAt: "document-start" }, regexp: new RegExp("wenku.baidu.com/(view|link|aggs).*"), init: function() { dom$1.append("head", ``); let canvasDataGroup = []; const originObject = { context2DPrototype: unsafeWindow.document.createElement("canvas").getContext("2d").__proto__ }; document.createElement = new Proxy(document.createElement, { apply: function(target, thisArg, argumentsList) { const element = Reflect.apply(target, thisArg, argumentsList); if (argumentsList[0] === "canvas") { const tmpData = { canvas: element, data: [] }; element.getContext("2d").fillText = function(...args) { tmpData.data.push(args); originObject.context2DPrototype.fillText.apply(this, args); }; canvasDataGroup.push(tmpData); } return element; } }); let pageData = {}; Object.defineProperty(unsafeWindow, "pageData", { set: (v) => pageData = v, get: function() { if (!pageData.vipInfo) return pageData.vipInfo = {}; pageData.vipInfo.global_svip_status = 1; pageData.vipInfo.global_vip_status = 1; pageData.vipInfo.isVip = 1; pageData.vipInfo.isWenkuVip = 1; return pageData; } }); const templateCSS = [ "" ].join(""); const render = () => { canvasDataGroup = canvasDataGroup.filter((item) => item.canvas.id); const templateText = canvasDataGroup.map((canvasData, index) => { const computedTop = index * Number(canvasData.canvas.clientHeight); const textItem = canvasData.data.map( (item) => `
${item[0]}
` ); return textItem.join(""); }); const templateHTML = [ "
", "
", "
", "
请自行复制
", "
关闭
", "
", "
", templateText.join(""), "
", "
", "
" ].join(""); dom$1.append("body", templateHTML); dom$1.append("body", templateCSS); const closeButton = document.querySelector("#copy-template-html #template-close"); const close = () => { dom$1.remove("#copy-template-html"); dom$1.remove("#copy-template-css"); closeButton && closeButton.removeEventListener("click", close); }; closeButton && closeButton.addEventListener("click", close); }; document.addEventListener("DOMContentLoaded", () => { dom$1.append( "head", `` ); dom$1.append("body", "
复制
"); const btn = dom$1.query("#copy-btn-wk"); btn && (btn.onclick = render); }); }, getSelectedText: () => { if (window.getSelection && (window.getSelection() || "").toString()) { return (window.getSelection() || "").toString(); } const result = /查看全部包含“([\s\S]*?)”的文档/.exec(document.body.innerHTML); if (result) return result[1]; return ""; } }; const website$9 = { regexp: new RegExp("xiaohongshu"), init: function() { utils.hideButton(); utils.enableUserSelectByCSS(); utils.enableOnKeyDownByCapture(); } }; const website$8 = { regexp: new RegExp("leetcode"), init: function() { utils.hideButton(); utils.enableOnCopy("#lc-home"); } }; const website$7 = { regexp: /csdn/, init: function() { utils.hideButton(); utils.enableOnCopyByCapture(); utils.enableUserSelectByCSS(); } }; const website$6 = { regexp: new RegExp("bilibili"), init: function() { utils.hideButton(); utils.enableOnCopyByCapture(); } }; const website$5 = { regexp: new RegExp("cnki"), init: function() { utils.hideButton(); utils.enableOnContextMenuByCapture(); utils.enableOnKeyDownByCapture(); utils.enableOnCopyByCapture(); } }; const website$4 = { regexp: new RegExp("docin.com/.*"), config: { initCopyEvent: false, captureInstance: true, delay: 100 }, init: function() { window.addEventListener(PAGE_LOADED, () => { var _a; return (_a = dom$1.query("#j_select")) == null ? void 0 : _a.click(); }); dom$1.append("head", ""); }, getSelectedText: function() { if (unsafeWindow.docinReader && unsafeWindow.docinReader.st) { return unsafeWindow.docinReader.st; } return ""; } }; const website$3 = { config: { initCopyEvent: false }, regexp: /note\.youdao\.com\/newEditorV1\/bulb\.html.*/, init: function() { utils.hideButton(); if (window.parent && window.parent.location.href.indexOf("ynoteshare") > -1) { utils.enableUserSelectByCSS(); document.addEventListener(MOUSE_DOWN, stopNativePropagation, true); document.addEventListener(MOUSE_MOVE, stopNativePropagation, true); } } }; const website$2 = { regexp: new RegExp( [ "commandlinux", "cnki", "ruiwen", "oh100", "fwsir", "wenxm", "unjs", "ahsrst", "yjbys", "360doc", "850500", "jianbiaoku", "kt250", "kejudati", "baibeike", "yuque", "cnrencai", "kodiplayer", "tongxiehui", "ndPureView", "jianshu", "linovelib", "chazidian", "juejin", "zgbk", "wenmi", "yuedu\\.baidu", "inrrp", "shubaoc", "51cto", "ximalaya", "xiexiebang", "ddwk8", "php\\.cn", "fanqienovel\\.com/reader", "cooco\\.net\\.cn", "mobiletrain", "xiangqiqipu", "m\\.163\\.com", "aipiaxi", "wenku\\.csdn\\.net", "xiaoyuzhoufm\\.com", "mcmod\\.cn" ].join("|") ), init: function() { utils.hideButton(); utils.enableUserSelectByCSS(); utils.enableOnCopyByCapture(); } }; const website$1 = { regexp: new RegExp(["wjx", "fanyi\\.baidu", "tianqi", "rrdynb", "fuwu7"].join("|")), init: function() { utils.hideButton(); utils.enableUserSelectByCSS(); utils.enableOnCopyByCapture(); utils.enableOnKeyDownByCapture(); utils.enableOnSelectStartByCapture(); utils.enableOnContextMenuByCapture(); } }; const website = { config: { runAt: DOM_STAGE.START }, regexp: new RegExp(["examcoo"].join("|")), init: function() { utils.hideButton(); utils.enableUserSelectByCSS(); utils.enableOnCopyByCapture(); utils.enableOnKeyDownByCapture(); utils.enableOnSelectStartByCapture(); utils.enableOnContextMenuByCapture(); } }; const kdoc = { config: { runAt: DOM_STAGE.START }, regexp: new RegExp("kdocs"), init: function() { const patch = () => { unsafeWindow.APP && (unsafeWindow.APP.canCopy = () => true); }; if (unsafeWindow.APP) { patch(); } else { let APP = void 0; Object.defineProperty(unsafeWindow, "APP", { configurable: false, set: (value) => { APP = value; value && patch(); }, get: () => APP }); } } }; const websites = [ website$s, website$r, website$q, website$p, website$o, website$n, website$m, website$l, website$k, website$j, website$i, website$h, website$g, website$f, website$e, website$d, website$c, website$b, website$a, website$9, website$t, website$8, website$7, website$6, website$5, website$4, website$3, kdoc, website$2, website$1, website ]; let siteGetSelectedText = null; const initWebsite = () => { let websiteConfig = { initCopyEvent: true, runAt: DOM_STAGE.END, captureInstance: false, delay: 0 }; const mather = (regex, website) => { if (regex.test(window.location.href)) { if (website.config) websiteConfig = Object.assign(websiteConfig, website.config); if (websiteConfig.runAt === DOM_STAGE.END) { window.addEventListener(DOM_READY, () => website.init()); } else { website.init(); } if (website.getSelectedText) siteGetSelectedText = website.getSelectedText; return true; } return false; }; websites.some((website) => mather(website.regexp, website)); return websiteConfig; }; const getSelectedText = () => { if (siteGetSelectedText) return siteGetSelectedText(); if (window.getSelection) return (window.getSelection() || "").toString(); if (document.getSelection) return (document.getSelection() || "").toString(); if (document.selection) return document.selection.createRange().text; return ""; }; (function() { const websiteConfig = initWebsite(); initBaseEvent(websiteConfig); initBaseStyle(); window.addEventListener( MOUSE_UP, (e) => { const handler = () => { const content = getSelectedText(); if (isEmptyContent(content)) { instance.hide(); return ""; } instance.onCopy(content, e); }; websiteConfig.delay ? setTimeout(handler, websiteConfig.delay) : handler(); }, websiteConfig.captureInstance ); })(); })();