From c6e99f849054d8b9f4a5556384319c3db45706e2 Mon Sep 17 00:00:00 2001 From: Raymond Hill Date: Tue, 2 Apr 2024 11:04:27 -0400 Subject: [PATCH] Improve `trusted-replace-outbound-text` scriptlet Add vararg `condition, [pattern]`. --- assets/resources/scriptlets.js | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/assets/resources/scriptlets.js b/assets/resources/scriptlets.js index 91ee1b96f..d13e69df9 100644 --- a/assets/resources/scriptlets.js +++ b/assets/resources/scriptlets.js @@ -4717,22 +4717,28 @@ builtinScriptlets.push({ function trustedReplaceOutboundText( propChain = '', pattern = '', - replacement = '' + replacement = '', + ...args ) { if ( propChain === '' ) { return; } const safe = safeSelf(); - const logPrefix = safe.makeLogPrefix('trusted-replace-outbound-text', propChain, pattern, replacement); + const logPrefix = safe.makeLogPrefix('trusted-replace-outbound-text', propChain, pattern, replacement, ...args); const rePattern = safe.patternToRegex(pattern); + const extraArgs = safe.getExtraArgs(args); + const reCondition = safe.patternToRegex(extraArgs.condition || ''); const reflector = proxyApplyFn(propChain, function(...args) { const textBefore = reflector(...args); - const textAfter = pattern !== '' - ? textBefore.replace(rePattern, replacement) - : textBefore; - if ( textAfter !== textBefore ) { - safe.uboLog(logPrefix, 'Matched and replaced'); + if ( pattern === '' ) { + safe.uboLog(logPrefix, 'Outbound text:\n', textBefore); + return textBefore; } - if ( safe.logLevel > 1 || pattern === '' ) { - safe.uboLog(logPrefix, 'Outbound text:\n', textAfter); + reCondition.lastIndex = 0; + if ( reCondition.test(textBefore) === false ) { return textBefore; } + const textAfter = textBefore.replace(rePattern, replacement); + if ( textAfter === textBefore ) { return textBefore; } + safe.uboLog(logPrefix, 'Matched and replaced'); + if ( safe.logLevel > 1 ) { + safe.uboLog(logPrefix, 'Modified outbound text:\n', textAfter); } return textAfter; });