about summary refs log tree commit diff
path: root/app/javascript/flavours/glitch/util/base_polyfills.js
diff options
context:
space:
mode:
Diffstat (limited to 'app/javascript/flavours/glitch/util/base_polyfills.js')
-rw-r--r--app/javascript/flavours/glitch/util/base_polyfills.js47
1 files changed, 47 insertions, 0 deletions
diff --git a/app/javascript/flavours/glitch/util/base_polyfills.js b/app/javascript/flavours/glitch/util/base_polyfills.js
new file mode 100644
index 000000000..4b8123dba
--- /dev/null
+++ b/app/javascript/flavours/glitch/util/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 './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 }));
+    },
+  });
+}