Last active
January 10, 2025 08:32
-
-
Save lisonge/78f22feb58ec44a3711b373413fa4649 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// ==UserScript== | |
// @name fix-iqiyi-chatgpt | |
// @namespace npm/vite-plugin-monkey | |
// @version 0.0.0 | |
// @author monkey | |
// @icon https://vitejs.dev/logo.svg | |
// @match http://chat.qiyi.domain/* | |
// @run-at document-end | |
// @noframes | |
// ==/UserScript== | |
(async function () { | |
'use strict'; | |
var freeGlobal = typeof global == "object" && global && global.Object === Object && global; | |
var freeSelf = typeof self == "object" && self && self.Object === Object && self; | |
var root = freeGlobal || freeSelf || Function("return this")(); | |
var Symbol$1 = root.Symbol; | |
var objectProto$1 = Object.prototype; | |
var hasOwnProperty = objectProto$1.hasOwnProperty; | |
var nativeObjectToString$1 = objectProto$1.toString; | |
var symToStringTag$1 = Symbol$1 ? Symbol$1.toStringTag : void 0; | |
function getRawTag(value) { | |
var isOwn = hasOwnProperty.call(value, symToStringTag$1), tag = value[symToStringTag$1]; | |
try { | |
value[symToStringTag$1] = void 0; | |
var unmasked = true; | |
} catch (e) { | |
} | |
var result = nativeObjectToString$1.call(value); | |
if (unmasked) { | |
if (isOwn) { | |
value[symToStringTag$1] = tag; | |
} else { | |
delete value[symToStringTag$1]; | |
} | |
} | |
return result; | |
} | |
var objectProto = Object.prototype; | |
var nativeObjectToString = objectProto.toString; | |
function objectToString(value) { | |
return nativeObjectToString.call(value); | |
} | |
var nullTag = "[object Null]", undefinedTag = "[object Undefined]"; | |
var symToStringTag = Symbol$1 ? Symbol$1.toStringTag : void 0; | |
function baseGetTag(value) { | |
if (value == null) { | |
return value === void 0 ? undefinedTag : nullTag; | |
} | |
return symToStringTag && symToStringTag in Object(value) ? getRawTag(value) : objectToString(value); | |
} | |
function isObjectLike(value) { | |
return value != null && typeof value == "object"; | |
} | |
var symbolTag = "[object Symbol]"; | |
function isSymbol(value) { | |
return typeof value == "symbol" || isObjectLike(value) && baseGetTag(value) == symbolTag; | |
} | |
var reWhitespace = /\s/; | |
function trimmedEndIndex(string) { | |
var index = string.length; | |
while (index-- && reWhitespace.test(string.charAt(index))) { | |
} | |
return index; | |
} | |
var reTrimStart = /^\s+/; | |
function baseTrim(string) { | |
return string ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, "") : string; | |
} | |
function isObject(value) { | |
var type = typeof value; | |
return value != null && (type == "object" || type == "function"); | |
} | |
var NAN = 0 / 0; | |
var reIsBadHex = /^[-+]0x[0-9a-f]+$/i; | |
var reIsBinary = /^0b[01]+$/i; | |
var reIsOctal = /^0o[0-7]+$/i; | |
var freeParseInt = parseInt; | |
function toNumber(value) { | |
if (typeof value == "number") { | |
return value; | |
} | |
if (isSymbol(value)) { | |
return NAN; | |
} | |
if (isObject(value)) { | |
var other = typeof value.valueOf == "function" ? value.valueOf() : value; | |
value = isObject(other) ? other + "" : other; | |
} | |
if (typeof value != "string") { | |
return value === 0 ? value : +value; | |
} | |
value = baseTrim(value); | |
var isBinary = reIsBinary.test(value); | |
return isBinary || reIsOctal.test(value) ? freeParseInt(value.slice(2), isBinary ? 2 : 8) : reIsBadHex.test(value) ? NAN : +value; | |
} | |
var now = function() { | |
return root.Date.now(); | |
}; | |
var FUNC_ERROR_TEXT = "Expected a function"; | |
var nativeMax = Math.max, nativeMin = Math.min; | |
function debounce(func, wait, options) { | |
var lastArgs, lastThis, maxWait, result, timerId, lastCallTime, lastInvokeTime = 0, leading = false, maxing = false, trailing = true; | |
if (typeof func != "function") { | |
throw new TypeError(FUNC_ERROR_TEXT); | |
} | |
wait = toNumber(wait) || 0; | |
if (isObject(options)) { | |
leading = !!options.leading; | |
maxing = "maxWait" in options; | |
maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait; | |
trailing = "trailing" in options ? !!options.trailing : trailing; | |
} | |
function invokeFunc(time) { | |
var args = lastArgs, thisArg = lastThis; | |
lastArgs = lastThis = void 0; | |
lastInvokeTime = time; | |
result = func.apply(thisArg, args); | |
return result; | |
} | |
function leadingEdge(time) { | |
lastInvokeTime = time; | |
timerId = setTimeout(timerExpired, wait); | |
return leading ? invokeFunc(time) : result; | |
} | |
function remainingWait(time) { | |
var timeSinceLastCall = time - lastCallTime, timeSinceLastInvoke = time - lastInvokeTime, timeWaiting = wait - timeSinceLastCall; | |
return maxing ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke) : timeWaiting; | |
} | |
function shouldInvoke(time) { | |
var timeSinceLastCall = time - lastCallTime, timeSinceLastInvoke = time - lastInvokeTime; | |
return lastCallTime === void 0 || timeSinceLastCall >= wait || timeSinceLastCall < 0 || maxing && timeSinceLastInvoke >= maxWait; | |
} | |
function timerExpired() { | |
var time = now(); | |
if (shouldInvoke(time)) { | |
return trailingEdge(time); | |
} | |
timerId = setTimeout(timerExpired, remainingWait(time)); | |
} | |
function trailingEdge(time) { | |
timerId = void 0; | |
if (trailing && lastArgs) { | |
return invokeFunc(time); | |
} | |
lastArgs = lastThis = void 0; | |
return result; | |
} | |
function cancel() { | |
if (timerId !== void 0) { | |
clearTimeout(timerId); | |
} | |
lastInvokeTime = 0; | |
lastArgs = lastCallTime = lastThis = timerId = void 0; | |
} | |
function flush() { | |
return timerId === void 0 ? result : trailingEdge(now()); | |
} | |
function debounced() { | |
var time = now(), isInvoking = shouldInvoke(time); | |
lastArgs = arguments; | |
lastThis = this; | |
lastCallTime = time; | |
if (isInvoking) { | |
if (timerId === void 0) { | |
return leadingEdge(lastCallTime); | |
} | |
if (maxing) { | |
clearTimeout(timerId); | |
timerId = setTimeout(timerExpired, wait); | |
return invokeFunc(lastCallTime); | |
} | |
} | |
if (timerId === void 0) { | |
timerId = setTimeout(timerExpired, wait); | |
} | |
return result; | |
} | |
debounced.cancel = cancel; | |
debounced.flush = flush; | |
return debounced; | |
} | |
const delay = (ms = 0) => new Promise((res) => setTimeout(res, ms)); | |
function* traversalElement(node) { | |
if (!node) return; | |
const nodes = Array.from(node.children).reverse(); | |
const tempArray = []; | |
do { | |
const subNode = nodes.pop(); | |
yield subNode; | |
const children = subNode.children; | |
for (let i = children.length - 1; i >= 0; i--) { | |
tempArray.push(children[i]); | |
} | |
nodes.push(...tempArray); | |
while (tempArray.length > 0) { | |
tempArray.pop(); | |
} | |
} while (nodes.length > 0); | |
} | |
const getTargetElement = () => { | |
return document.querySelector(".borderless-input"); | |
}; | |
const fn = debounce(() => { | |
for (const node of traversalElement(getTargetElement())) { | |
if (node instanceof HTMLElement) { | |
const whiteSpace = node.style.whiteSpace; | |
node.removeAttribute("class"); | |
node.removeAttribute("style"); | |
if (whiteSpace) { | |
if (whiteSpace === "pre") { | |
node.style.whiteSpace = "pre-wrap"; | |
} else { | |
node.style.whiteSpace = whiteSpace; | |
} | |
} | |
} | |
} | |
}, 16); | |
let prevElement = null; | |
while (true) { | |
const element = getTargetElement(); | |
if (prevElement !== element) { | |
prevElement = element; | |
if (element) { | |
element.addEventListener("paste", () => { | |
fn(); | |
}); | |
} | |
} | |
await( new Promise((r) => { | |
requestAnimationFrame(r); | |
})); | |
await( delay(1e3)); | |
} | |
})(); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment