Remove copyright watermark appended to the end of copied content
当前为
// ==UserScript== // @namespace https://github.com/jeffreytse // @name Remove Copy Watermark // @description Remove copyright watermark appended to the end of copied content // @version 0.1.0 // @author Jeffrey Tse <[email protected]> // @license MIT // @copyright 2022, MIT // @match *://*/* // @grant none // @run-at document-start // ==/UserScript== /******/ (function() { // webpackBootstrap /******/ "use strict"; /******/ var __webpack_modules__ = ({ /***/ "./dist/plugins/tampermonkey/remove-copy-watermark.user.js": /*!*****************************************************************!*\ !*** ./dist/plugins/tampermonkey/remove-copy-watermark.user.js ***! \*****************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { var __importDefault = this && this.__importDefault || function (mod) { return mod && mod.__esModule ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", ({ value: true })); const src_1 = __importDefault(__webpack_require__(/*! ../../src */ "./dist/src/index.js")); const package_json_1 = __importDefault(__webpack_require__(/*! ../../package.json */ "./dist/package.json")); (function () { 'use strict'; console.log(`=== Tamper Monkey Plugin === Name: ${package_json_1.default.name} Version: ${package_json_1.default.version} Homepage: ${package_json_1.default.homepage}`.replace(/^\s+/gm, '')); src_1.default.hijack(); })(); /***/ }), /***/ "./dist/src/hijack.js": /*!****************************!*\ !*** ./dist/src/hijack.js ***! \****************************/ /***/ (function(__unused_webpack_module, exports) { Object.defineProperty(exports, "__esModule", ({ value: true })); const checkWatermark = (keywords, event, callback) => { var _a, _b, _c; let data; if ((((_a = event.clipboardData) === null || _a === void 0 ? void 0 : _a.types) || []).indexOf('text/plain') < 0) { data = ((_b = window.getSelection()) === null || _b === void 0 ? void 0 : _b.toString()) || ''; } else { data = ((_c = event.clipboardData) === null || _c === void 0 ? void 0 : _c.getData('text/plain')) || ''; } setTimeout(() => { var _a; const oriData = ((_a = window.getSelection()) === null || _a === void 0 ? void 0 : _a.toString()) || ''; const extData = data.substring(oriData.length || data.length); if (extData.length === 0) { return; } const tmpData = extData.toLowerCase(); const hasWatermark = keywords.some(keyword => tmpData.search(keyword)); callback && callback(hasWatermark ? extData : undefined); }); }; const removeWatermark = event => { const target = event.target; const injectCopy = event => { event.stopPropagation(); target === null || target === void 0 ? void 0 : target.removeEventListener('copy', injectCopy); }; target === null || target === void 0 ? void 0 : target.addEventListener('copy', injectCopy); document.execCommand('copy', true); }; const copyHandler = keywords => { const handler = event => { checkWatermark(keywords, event, watermark => { if (!watermark) { return; } console.log('Remove Copy From Watermark!\n' + watermark); removeWatermark(event); }); }; return handler; }; const hijack = keywords => { console.log('Hijack Remove Copy Watermark...'); const handler = copyHandler(keywords || ['copyright', '版权', '著作権', '版權', '저작권', 'Авторские права', window.location.href]); const addEventListener = window.addEventListener; addEventListener('copy', handler); }; exports["default"] = hijack; /***/ }), /***/ "./dist/src/index.js": /*!***************************!*\ !*** ./dist/src/index.js ***! \***************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { var __importDefault = this && this.__importDefault || function (mod) { return mod && mod.__esModule ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", ({ value: true })); const hijack_1 = __importDefault(__webpack_require__(/*! ./hijack */ "./dist/src/hijack.js")); exports["default"] = { hijack: hijack_1.default }; /***/ }), /***/ "./dist/package.json": /*!***************************!*\ !*** ./dist/package.json ***! \***************************/ /***/ (function(module) { module.exports = JSON.parse('{"name":"remove-copy-watermark","version":"0.1.0","description":"Remove copyright watermark appended to the end of copied content","main":"index.js","scripts":{"build":"rimraf dist && tsc && npm run bundle","bundle":"webpack --config dist/webpack.config.js","test":"echo \\"Error: no test specified\\" && exit 1","lint":"gts lint","clean":"gts clean","compile":"tsc","fix":"gts fix","prepare":"npm run compile","pretest":"npm run compile","posttest":"npm run lint"},"repository":{"type":"git","url":"git+https://github.com/jeffreytse/remove-copy-watermark.git"},"author":"Jeffrey Tse <[email protected]>","homepage":"https://github.com/jeffreytse/remove-copy-watermark#readme","bugs":{"url":"https://github.com/jeffreytse/remove-copy-watermark/issues"},"license":"MIT","engines":{"node":">=14"},"devDependencies":{"@babel/core":"^7.20.12","@babel/preset-env":"^7.20.2","@types/node":"^14.18.36","@types/webpack":"^5.28.0","babel-loader":"^9.1.2","gts":"^3.1.1","rimraf":"^4.0.5","typescript":"^4.9.4","webpack":"^5.75.0","webpack-cli":"^5.0.1"}}'); /***/ }) /******/ }); /************************************************************************/ /******/ // The module cache /******/ var __webpack_module_cache__ = {}; /******/ /******/ // The require function /******/ function __webpack_require__(moduleId) { /******/ // Check if module is in cache /******/ var cachedModule = __webpack_module_cache__[moduleId]; /******/ if (cachedModule !== undefined) { /******/ return cachedModule.exports; /******/ } /******/ // Create a new module (and put it into the cache) /******/ var module = __webpack_module_cache__[moduleId] = { /******/ // no module.id needed /******/ // no module.loaded needed /******/ exports: {} /******/ }; /******/ /******/ // Execute the module function /******/ __webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__); /******/ /******/ // Return the exports of the module /******/ return module.exports; /******/ } /******/ /************************************************************************/ /******/ /******/ // startup /******/ // Load entry module and return exports /******/ // This entry module is referenced by other modules so it can't be inlined /******/ var __webpack_exports__ = __webpack_require__("./dist/plugins/tampermonkey/remove-copy-watermark.user.js"); /******/ /******/ })() ; //# sourceMappingURL=data:application/json;charset=utf-8;base64,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Q0MsR0FBRyxDQUFDLGlDQUFpQyxDQUFDO0VBQzlDLE1BQU0yQyxPQUFPLEdBQUdELFdBQVcsQ0FBQ2xDLFFBQVEsSUFBSSxDQUNwQyxXQUFXLEVBQ1gsSUFBSSxFQUNKLEtBQUssRUFDTCxJQUFJLEVBQ0osS0FBSyxFQUNMLGlCQUFpQixFQUNqQlUsTUFBTSxDQUFDMkIsUUFBUSxDQUFDQyxJQUFJLENBQ3ZCLENBQUM7RUFDRixNQUFNUCxnQkFBZ0IsR0FBR3JCLE1BQU0sQ0FBQ3FCLGdCQUFnQjtFQUNoREEsZ0JBQWdCLENBQUMsTUFBTSxFQUFFSSxPQUFPLENBQUM7QUFDckMsQ0FBQztBQUNEakQsa0JBQWUsR0FBR1ksTUFBTTs7Ozs7Ozs7OztBQzFEWDs7QUFDYixJQUFJakIsZUFBZSxHQUFJLElBQUksSUFBSSxJQUFJLENBQUNBLGVBQWUsSUFBSyxVQUFVQyxHQUFHLEVBQUU7RUFDbkUsT0FBUUEsR0FBRyxJQUFJQSxHQUFHLENBQUNDLFVBQVUsR0FBSUQsR0FBRyxHQUFHO0lBQUUsU0FBUyxFQUFFQTtFQUFJLENBQUM7QUFDN0QsQ0FBQztBQUNERSw4Q0FBNkM7RUFBRUcsS0FBSyxFQUFFO0FBQUssQ0FBQyxFQUFDO0FBQzdELE1BQU1vRCxRQUFRLEdBQUcxRCxlQUFlLENBQUNRLG1CQUFPLENBQUMsc0NBQVUsQ0FBQyxDQUFDO0FBQ3JESCxrQkFBZSxHQUFHO0VBQ2RZLE1BQU0sRUFBRXlDLFFBQVEsQ0FBQzlDO0FBQ3JCLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7VUNSRDtVQUNBOztVQUVBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBOztVQUVBO1VBQ0E7O1VBRUE7VUFDQTtVQUNBOzs7O1VFdEJBO1VBQ0E7VUFDQTtVQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vZGlzdC9wbHVnaW5zL3RhbXBlcm1vbmtleS9yZW1vdmUtY29weS13YXRlcm1hcmsudXNlci5qcyIsIndlYnBhY2s6Ly8vLi9kaXN0L3NyYy9oaWphY2suanMiLCJ3ZWJwYWNrOi8vLy4vZGlzdC9zcmMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vL3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovLy93ZWJwYWNrL2JlZm9yZS1zdGFydHVwIiwid2VicGFjazovLy93ZWJwYWNrL3N0YXJ0dXAiLCJ3ZWJwYWNrOi8vL3dlYnBhY2svYWZ0ZXItc3RhcnR1cCJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2ltcG9ydERlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0RGVmYXVsdCkgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIHJldHVybiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSA/IG1vZCA6IHsgXCJkZWZhdWx0XCI6IG1vZCB9O1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IHNyY18xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCIuLi8uLi9zcmNcIikpO1xuY29uc3QgcGFja2FnZV9qc29uXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIi4uLy4uL3BhY2thZ2UuanNvblwiKSk7XG4oZnVuY3Rpb24gKCkge1xuICAgICd1c2Ugc3RyaWN0JztcbiAgICBjb25zb2xlLmxvZyhgPT09IFRhbXBlciBNb25rZXkgUGx1Z2luID09PVxuICAgIE5hbWU6ICR7cGFja2FnZV9qc29uXzEuZGVmYXVsdC5uYW1lfVxuICAgIFZlcnNpb246ICR7cGFja2FnZV9qc29uXzEuZGVmYXVsdC52ZXJzaW9ufVxuICAgIEhvbWVwYWdlOiAke3BhY2thZ2VfanNvbl8xLmRlZmF1bHQuaG9tZXBhZ2V9YC5yZXBsYWNlKC9eXFxzKy9nbSwgJycpKTtcbiAgICBzcmNfMS5kZWZhdWx0LmhpamFjaygpO1xufSkoKTtcbiIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgY2hlY2tXYXRlcm1hcmsgPSAoa2V5d29yZHMsIGV2ZW50LCBjYWxsYmFjaykgPT4ge1xuICAgIHZhciBfYSwgX2IsIF9jO1xuICAgIGxldCBkYXRhO1xuICAgIGlmICgoKChfYSA9IGV2ZW50LmNsaXBib2FyZERhdGEpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS50eXBlcykgfHwgW10pLmluZGV4T2YoJ3RleHQvcGxhaW4nKSA8IDApIHtcbiAgICAgICAgZGF0YSA9ICgoX2IgPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCkpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi50b1N0cmluZygpKSB8fCAnJztcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGRhdGEgPSAoKF9jID0gZXZlbnQuY2xpcGJvYXJkRGF0YSkgPT09IG51bGwgfHwgX2MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jLmdldERhdGEoJ3RleHQvcGxhaW4nKSkgfHwgJyc7XG4gICAgfVxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGNvbnN0IG9yaURhdGEgPSAoKF9hID0gd2luZG93LmdldFNlbGVjdGlvbigpKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudG9TdHJpbmcoKSkgfHwgJyc7XG4gICAgICAgIGNvbnN0IGV4dERhdGEgPSBkYXRhLnN1YnN0cmluZyhvcmlEYXRhLmxlbmd0aCB8fCBkYXRhLmxlbmd0aCk7XG4gICAgICAgIGlmIChleHREYXRhLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHRtcERhdGEgPSBleHREYXRhLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGNvbnN0IGhhc1dhdGVybWFyayA9IGtleXdvcmRzLnNvbWUoa2V5d29yZCA9PiB0bXBEYXRhLnNlYXJjaChrZXl3b3JkKSk7XG4gICAgICAgIGNhbGxiYWNrICYmIGNhbGxiYWNrKGhhc1dhdGVybWFyayA/IGV4dERhdGEgOiB1bmRlZmluZWQpO1xuICAgIH0pO1xufTtcbmNvbnN0IHJlbW92ZVdhdGVybWFyayA9IChldmVudCkgPT4ge1xuICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldDtcbiAgICBjb25zdCBpbmplY3RDb3B5ID0gKGV2ZW50KSA9PiB7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICB0YXJnZXQgPT09IG51bGwgfHwgdGFyZ2V0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiB0YXJnZXQucmVtb3ZlRXZlbnRMaXN0ZW5lcignY29weScsIGluamVjdENvcHkpO1xuICAgIH07XG4gICAgdGFyZ2V0ID09PSBudWxsIHx8IHRhcmdldCA9PT0gdm9pZCAwID8gdm9pZCAwIDogdGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIoJ2NvcHknLCBpbmplY3RDb3B5KTtcbiAgICBkb2N1bWVudC5leGVjQ29tbWFuZCgnY29weScsIHRydWUpO1xufTtcbmNvbnN0IGNvcHlIYW5kbGVyID0gKGtleXdvcmRzKSA9PiB7XG4gICAgY29uc3QgaGFuZGxlciA9IChldmVudCkgPT4ge1xuICAgICAgICBjaGVja1dhdGVybWFyayhrZXl3b3JkcywgZXZlbnQsIHdhdGVybWFyayA9PiB7XG4gICAgICAgICAgICBpZiAoIXdhdGVybWFyaykge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdSZW1vdmUgQ29weSBGcm9tIFdhdGVybWFyayFcXG4nICsgd2F0ZXJtYXJrKTtcbiAgICAgICAgICAgIHJlbW92ZVdhdGVybWFyayhldmVudCk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgcmV0dXJuIGhhbmRsZXI7XG59O1xuY29uc3QgaGlqYWNrID0gKGtleXdvcmRzKSA9PiB7XG4gICAgY29uc29sZS5sb2coJ0hpamFjayBSZW1vdmUgQ29weSBXYXRlcm1hcmsuLi4nKTtcbiAgICBjb25zdCBoYW5kbGVyID0gY29weUhhbmRsZXIoa2V5d29yZHMgfHwgW1xuICAgICAgICAnY29weXJpZ2h0JyxcbiAgICAgICAgJ+eJiOadgycsXG4gICAgICAgICfokZfkvZzmqKknLFxuICAgICAgICAn54mI5qyKJyxcbiAgICAgICAgJ+yggOyekeq2jCcsXG4gICAgICAgICfQkNCy0YLQvtGA0YHQutC40LUg0L/RgNCw0LLQsCcsXG4gICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmLFxuICAgIF0pO1xuICAgIGNvbnN0IGFkZEV2ZW50TGlzdGVuZXIgPSB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcjtcbiAgICBhZGRFdmVudExpc3RlbmVyKCdjb3B5JywgaGFuZGxlcik7XG59O1xuZXhwb3J0cy5kZWZhdWx0ID0gaGlqYWNrO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19pbXBvcnREZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydERlZmF1bHQpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IFwiZGVmYXVsdFwiOiBtb2QgfTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCBoaWphY2tfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiLi9oaWphY2tcIikpO1xuZXhwb3J0cy5kZWZhdWx0ID0ge1xuICAgIGhpamFjazogaGlqYWNrXzEuZGVmYXVsdCxcbn07XG4iLCIvLyBUaGUgbW9kdWxlIGNhY2hlXG52YXIgX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fID0ge307XG5cbi8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG5mdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuXHR2YXIgY2FjaGVkTW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXTtcblx0aWYgKGNhY2hlZE1vZHVsZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuIGNhY2hlZE1vZHVsZS5leHBvcnRzO1xuXHR9XG5cdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG5cdHZhciBtb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdID0ge1xuXHRcdC8vIG5vIG1vZHVsZS5pZCBuZWVkZWRcblx0XHQvLyBubyBtb2R1bGUubG9hZGVkIG5lZWRlZFxuXHRcdGV4cG9ydHM6IHt9XG5cdH07XG5cblx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG5cdF9fd2VicGFja19tb2R1bGVzX19bbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG5cdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG5cdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbn1cblxuIiwiIiwiLy8gc3RhcnR1cFxuLy8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4vLyBUaGlzIGVudHJ5IG1vZHVsZSBpcyByZWZlcmVuY2VkIGJ5IG90aGVyIG1vZHVsZXMgc28gaXQgY2FuJ3QgYmUgaW5saW5lZFxudmFyIF9fd2VicGFja19leHBvcnRzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiLi9kaXN0L3BsdWdpbnMvdGFtcGVybW9ua2V5L3JlbW92ZS1jb3B5LXdhdGVybWFyay51c2VyLmpzXCIpO1xuIiwiIl0sIm5hbWVzIjpbIl9faW1wb3J0RGVmYXVsdCIsIm1vZCIsIl9fZXNNb2R1bGUiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImV4cG9ydHMiLCJ2YWx1ZSIsInNyY18xIiwicmVxdWlyZSIsInBhY2thZ2VfanNvbl8xIiwiY29uc29sZSIsImxvZyIsImRlZmF1bHQiLCJuYW1lIiwidmVyc2lvbiIsImhvbWVwYWdlIiwicmVwbGFjZSIsImhpamFjayIsImNoZWNrV2F0ZXJtYXJrIiwia2V5d29yZHMiLCJldmVudCIsImNhbGxiYWNrIiwiX2EiLCJfYiIsIl9jIiwiZGF0YSIsImNsaXBib2FyZERhdGEiLCJ0eXBlcyIsImluZGV4T2YiLCJ3aW5kb3ciLCJnZXRTZWxlY3Rpb24iLCJ0b1N0cmluZyIsImdldERhdGEiLCJzZXRUaW1lb3V0Iiwib3JpRGF0YSIsImV4dERhdGEiLCJzdWJzdHJpbmciLCJsZW5ndGgiLCJ0bXBEYXRhIiwidG9Mb3dlckNhc2UiLCJoYXNXYXRlcm1hcmsiLCJzb21lIiwia2V5d29yZCIsInNlYXJjaCIsInVuZGVmaW5lZCIsInJlbW92ZVdhdGVybWFyayIsInRhcmdldCIsImluamVjdENvcHkiLCJzdG9wUHJvcGFnYXRpb24iLCJyZW1vdmVFdmVudExpc3RlbmVyIiwiYWRkRXZlbnRMaXN0ZW5lciIsImRvY3VtZW50IiwiZXhlY0NvbW1hbmQiLCJjb3B5SGFuZGxlciIsImhhbmRsZXIiLCJ3YXRlcm1hcmsiLCJsb2NhdGlvbiIsImhyZWYiLCJoaWphY2tfMSJdLCJzb3VyY2VSb290IjoiIn0=