49 lines
1.5 KiB
JavaScript
49 lines
1.5 KiB
JavaScript
// import {Flag} from './flag.js';
|
|
import {Location} from './location.js';
|
|
|
|
export class Action {
|
|
|
|
// https://github.com/w3c/webextensions/issues/72#issuecomment-1848874359
|
|
// 'prefers-color-scheme' detection in Chrome background service worker
|
|
static dark = false;
|
|
|
|
static set(pref) {
|
|
// --- set action/browserAction
|
|
let title = '';
|
|
let text = '';
|
|
let color = this.dark ? '#444' : '#fff';
|
|
switch (pref.mode) {
|
|
case 'disable':
|
|
title = browser.i18n.getMessage('disable');
|
|
text = '⛔';
|
|
break;
|
|
|
|
case 'direct':
|
|
title = 'DIRECT';
|
|
text = '⮕';
|
|
break;
|
|
|
|
case 'pattern':
|
|
title = browser.i18n.getMessage('proxyByPatterns');
|
|
text = '🌐';
|
|
break;
|
|
|
|
default:
|
|
const item = pref.data.find(i => pref.mode === (i.type === 'pac' ? i.pac : `${i.hostname}:${i.port}`));
|
|
if (item) {
|
|
// Chrome 113-114 started having a bug showing unicode flags
|
|
// const flag = Flag.get(item.cc);
|
|
// const host = flag + ' ' + [item.hostname, item.port].filter(Boolean).join(':');
|
|
const host = [item.hostname, item.port].filter(Boolean).join(':');
|
|
title = [item.title, host, item.city, Location.get(item.cc)].filter(Boolean).join('\n');
|
|
// text = item.cc ? flag : item.hostname;
|
|
text = item.title || item.hostname;
|
|
color = item.color;
|
|
}
|
|
}
|
|
|
|
browser.action.setBadgeBackgroundColor({color});
|
|
browser.action.setTitle({title});
|
|
browser.action.setBadgeText({text});
|
|
}
|
|
} |