about summary refs log tree commit diff
path: root/app/javascript/flavours/glitch/base_polyfills.js
diff options
context:
space:
mode:
authorClaire <claire.github-309c@sitedethib.com>2022-10-11 19:22:48 +0200
committerGitHub <noreply@github.com>2022-10-11 19:22:48 +0200
commitb01faa7375493ee91f7e9dfa32b0af3058c8d16f (patch)
tree42ef2359b2f85e5210172240b73ce735f1e92293 /app/javascript/flavours/glitch/base_polyfills.js
parent94713940c7f28e9aff50071cf63d897c8e355ee6 (diff)
parente1db6cf320d5a1b3f7c87f4bd9e6f2f1a0c0585f (diff)
Merge pull request #1862 from ClearlyClaire/glitch-soc/refactor/upstream-discrepancies
Refactor glitch-soc front-end to limit discrepancies with upstream
Diffstat (limited to 'app/javascript/flavours/glitch/base_polyfills.js')
-rw-r--r--app/javascript/flavours/glitch/base_polyfills.js47
1 files changed, 47 insertions, 0 deletions
diff --git a/app/javascript/flavours/glitch/base_polyfills.js b/app/javascript/flavours/glitch/base_polyfills.js
new file mode 100644
index 000000000..12096d902
--- /dev/null
+++ b/app/javascript/flavours/glitch/base_polyfills.js
@@ -0,0 +1,47 @@
+import 'intl';
+import 'intl/locale-data/jsonp/en';
+import 'es6-symbol/implement';
+import includes from 'array-includes';
+import assign from 'object-assign';
+import values from 'object.values';
+import isNaN from 'is-nan';
+import { decode as decodeBase64 } from './utils/base64';
+import promiseFinally from 'promise.prototype.finally';
+
+if (!Array.prototype.includes) {
+  includes.shim();
+}
+
+if (!Object.assign) {
+  Object.assign = assign;
+}
+
+if (!Object.values) {
+  values.shim();
+}
+
+if (!Number.isNaN) {
+  Number.isNaN = isNaN;
+}
+
+promiseFinally.shim();
+
+if (!HTMLCanvasElement.prototype.toBlob) {
+  const BASE64_MARKER = ';base64,';
+
+  Object.defineProperty(HTMLCanvasElement.prototype, 'toBlob', {
+    value(callback, type = 'image/png', quality) {
+      const dataURL = this.toDataURL(type, quality);
+      let data;
+
+      if (dataURL.indexOf(BASE64_MARKER) >= 0) {
+        const [, base64] = dataURL.split(BASE64_MARKER);
+        data = decodeBase64(base64);
+      } else {
+        [, data] = dataURL.split(',');
+      }
+
+      callback(new Blob([data], { type }));
+    },
+  });
+}