aboutsummaryrefslogtreecommitdiffstats
path: root/web_src/js/webcomponents/polyfills.ts
blob: 9575324b5abf11ab2175623ebe4a5d8b997f1d69 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
try {
  // some browsers like PaleMoon don't have full support for Intl.NumberFormat, so do the minimum polyfill to support "relative-time-element"
  // https://repo.palemoon.org/MoonchildProductions/UXP/issues/2289
  new Intl.NumberFormat('en', {style: 'unit', unit: 'minute'}).format(1);
} catch {
  const intlNumberFormat = Intl.NumberFormat;
  // @ts-expect-error - polyfill is incomplete
  Intl.NumberFormat = function(locales: string | string[], options: Intl.NumberFormatOptions) {
    if (options.style === 'unit') {
      return {
        format(value: number | bigint | string) {
          return ` ${value} ${options.unit}`;
        },
      };
    }
    return intlNumberFormat(locales, options);
  };
}

export function weakRefClass() {
  const weakMap = new WeakMap();
  return class {
    constructor(target: any) {
      weakMap.set(this, target);
    }
    deref() {
      return weakMap.get(this);
    }
  };
}

if (!window.WeakRef) {
  window.WeakRef = weakRefClass() as any;
}