about summary refs log tree commit diff stats
path: root/assets/remove-twitter-sw.js
blob: d1b3063761603d4009e0b804705ae774e3ba3f21 (plain) (blame)
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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
'use strict';

const nitterDefault = 'https://nitter.net';

let disableNitter;
let nitterInstance;
let redirectBypassFlag;
let whitelist;

window.browser = window.browser || window.chrome;

function isNotWhitelisted(url) {
  return !whitelist.some(regex => (regex.test(url.href)));
}

function shouldRedirect(url) {
  return !redirectBypassFlag &&
    isNotWhitelisted(url) &&
    !disableNitter &&
    url.host !== nitterInstance &&
    !url.pathname.includes('/home');
}

function redirectTwitter(url) {
  if (url.host.split('.')[0] === 'pbs') {
    return `${nitterInstance}/pic/${encodeURIComponent(url.href)}`;
  } else if (url.host.split('.')[0] === 'video') {
    return `${nitterInstance}/gif/${encodeURIComponent(url.href)}`;
  } else {
    return `${nitterInstance}${url.pathname}${url.search}`;
  };
}

browser.storage.sync.get(
  ['nitterInstance', 'disableNitter', 'removeTwitterSW', 'redirectBypassFlag'],
  (result) => {
    redirectBypassFlag = result.redirectBypassFlag;
    browser.storage.sync.set({
      redirectBypassFlag: false
    });
    if (!result.removeTwitterSW) {
      disableNitter = result.disableNitter;
      nitterInstance = result.nitterInstance || nitterDefault;
      whitelist = result.whitelist ? result.whitelist.map(e => {
        return new RegExp(e.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&'));
      }) : [];
      navigator.serviceWorker.getRegistrations().then(registrations => {
        for (let registration of registrations) {
          if (registration.scope === 'https://twitter.com/') {
            registration.unregister();
            console.log('Unregistered Twitter SW', registration);
          }
        }
      });
      const url = new URL(window.location);
      if (shouldRedirect()) {
        const redirect = redirectTwitter(url);
        console.info(
          'Redirecting', `"${url.href}"`, '=>', `"${redirect}"`
        );
        window.location = redirect;
      }
    }
  }
);