summaryrefslogtreecommitdiff
path: root/qutebrowser
diff options
context:
space:
mode:
authorFlorian Bruhin <me@the-compiler.org>2021-01-22 10:50:36 +0100
committerFlorian Bruhin <me@the-compiler.org>2021-01-22 10:50:36 +0100
commit28a694e17c9b41e9b5585926091f5b70fedf558c (patch)
treec877c8961303fdd87184017791630bfd730ac205 /qutebrowser
parent222f1f19a1d43691e3d99ce544cff8c9730ae4b9 (diff)
downloadqutebrowser-28a694e17c9b41e9b5585926091f5b70fedf558c.tar.gz
qutebrowser-28a694e17c9b41e9b5585926091f5b70fedf558c.zip
Add String.replaceAll polyfill
See #6047
Diffstat (limited to 'qutebrowser')
-rw-r--r--qutebrowser/browser/webengine/webenginetab.py7
-rw-r--r--qutebrowser/javascript/quirks/string_replaceall.user.js23
2 files changed, 30 insertions, 0 deletions
diff --git a/qutebrowser/browser/webengine/webenginetab.py b/qutebrowser/browser/webengine/webenginetab.py
index e6efe223b..c497f9b3b 100644
--- a/qutebrowser/browser/webengine/webenginetab.py
+++ b/qutebrowser/browser/webengine/webenginetab.py
@@ -1144,6 +1144,13 @@ class _WebEngineScripts(QObject):
QWebEngineScript.DocumentReady,
QWebEngineScript.ApplicationWorld,
),
+ # FIXME not needed with 5.15.3 most likely, but how do we check for
+ # that?
+ (
+ 'string_replaceall',
+ QWebEngineScript.DocumentCreation,
+ QWebEngineScript.MainWorld,
+ ),
]
if not qtutils.version_check('5.13'):
quirks.append(('globalthis',
diff --git a/qutebrowser/javascript/quirks/string_replaceall.user.js b/qutebrowser/javascript/quirks/string_replaceall.user.js
new file mode 100644
index 000000000..e2fd20be2
--- /dev/null
+++ b/qutebrowser/javascript/quirks/string_replaceall.user.js
@@ -0,0 +1,23 @@
+// Based on: https://vanillajstoolkit.com/polyfills/stringreplaceall/
+/* eslint-disable no-extend-native */
+
+/**
+ * String.prototype.replaceAll() polyfill
+ * https://gomakethings.com/how-to-replace-a-section-of-a-string-with-another-one-with-vanilla-js/
+ * @author Chris Ferdinandi
+ * @license MIT
+ */
+
+"use strict";
+
+if (!String.prototype.replaceAll) {
+ String.prototype.replaceAll = function(str, newStr) {
+ // If a regex pattern
+ if (Object.prototype.toString.call(str).toLowerCase() === "[object regexp]") {
+ return this.replace(str, newStr);
+ }
+
+ // If a string
+ return this.replace(new RegExp(str, "g"), newStr);
+ };
+}