Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions ui/js/widget-toolbox.js
Original file line number Diff line number Diff line change
Expand Up @@ -120,6 +120,9 @@ export function openUrl(href) {
a.href = href;
a.target = '_blank';
a.rel = 'noopener noreferrer';
/* Keep this. Without it, a click handler on the body opens the link
again, in a loop, and the browser blocks every tab. */
a.addEventListener('click', e => e.stopPropagation());
document.body.appendChild(a);
a.click();
a.remove();
Expand Down
12 changes: 9 additions & 3 deletions ui/test/system-summary-link-press.test.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -14,15 +14,17 @@ const pressOpensLink = new Function(
)();
const holdToShow = lift('holdToShow', 'target, show');

function node(classes = [], parent = null) {
function node(classes = [], parent = null, id = '') {
const el = {
parent,
id,
classes: new Set(classes),
classList: { add: c => el.classes.add(c) },
addEventListener() {},
closest(sel) {
const wanted = sel.split(',').map(s => s.trim().slice(1));
for (let n = el; n; n = n.parent) if (wanted.some(c => n.classes.has(c))) return n;
const wanted = sel.split(',').map(s => s.trim());
const hit = n => wanted.some(w => (w[0] === '#' ? n.id === w.slice(1) : n.classes.has(w.slice(1))));
for (let n = el; n; n = n.parent) if (hit(n)) return n;
return null;
},
};
Expand Down Expand Up @@ -51,3 +53,7 @@ test('a press anywhere else opens the link', () => {
test('the body click handler opens the link only through that check', () => {
assert.match(src, /if \(target && pressOpensLink\(e\.target\)\) openUrl\(target\);/);
});

test('a press on the link element is left to the link, so it opens once', () => {
assert.equal(pressOpensLink(node([], node(), 'ss-link')), false);
});
30 changes: 24 additions & 6 deletions ui/test/widget-toolbox-link.test.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -8,13 +8,21 @@ globalThis.location = { search: '?id=test' };
const { linkTo } = await import('../js/widget-toolbox.js');

let opened = [];
let bubbled = 0;
globalThis.document = {
createElement: () => ({
click() {
opened.push(this.href);
},
remove() {},
}),
createElement: () => {
const listeners = [];
return {
addEventListener: (type, fn) => type === 'click' && listeners.push(fn),
click() {
opened.push(this.href);
let stopped = false;
for (const fn of listeners) fn({ stopPropagation: () => (stopped = true) });
if (!stopped) bubbled++;
},
remove() {},
};
},
body: { appendChild() {} },
};

Expand Down Expand Up @@ -146,3 +154,13 @@ test('the contributions summary uses the yearly total', () => {
/const total = formatNumber\(Math\.max\(0, Number\(data\.totalContributions\) \|\| 0\)\);/,
);
});

test('the click that opens a link never bubbles to a widget handler', () => {
opened = [];
bubbled = 0;
const el = fakeEl();
linkTo(el, 'https://example.test/');
el.fire('click', { target: el });
assert.deepEqual(opened, ['https://example.test/']);
assert.equal(bubbled, 0);
});
2 changes: 1 addition & 1 deletion ui/widgets/backup/backup.html
Original file line number Diff line number Diff line change
Expand Up @@ -122,7 +122,7 @@
<body>
<div class="widget" id="widget" role="group" aria-label="Backup status"></div>
<script type="module">
import { poll, fetchData, openUrl, linkTo, html, setHtml, loadStrings, wt, errorState, errorLine, formatList, relativeTime, cssZoom } from '/js/widget-toolbox.js?v=2ef4de23';
import { poll, fetchData, openUrl, linkTo, html, setHtml, loadStrings, wt, errorState, errorLine, formatList, relativeTime, cssZoom } from '/js/widget-toolbox.js?v=2c521043';
await loadStrings();
document.getElementById('widget').setAttribute('aria-label', wt('ui.backupStatus', 'Backup status'));
const id = new URLSearchParams(location.search).get('id') || '';
Expand Down
2 changes: 1 addition & 1 deletion ui/widgets/books/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -101,7 +101,7 @@
<span class="sr" id="sr" aria-live="polite"></span>
</div>
<script type="module">
import { poll, linkTo, loadStrings, wt, formatNumber, errorState, placeholder } from '/js/widget-toolbox.js?v=2ef4de23';
import { poll, linkTo, loadStrings, wt, formatNumber, errorState, placeholder } from '/js/widget-toolbox.js?v=2c521043';
await loadStrings();
document.getElementById('card').setAttribute('aria-label', wt('widget.label', 'Books'));
const API='/api';
Expand Down
2 changes: 1 addition & 1 deletion ui/widgets/clock/analog.html
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,7 @@
async function showZoneError(){
const w=document.getElementById('widget');
w.className='widget mode-'+_mode;
const { errorState, loadStrings, wt } = await import('/js/widget-toolbox.js?v=2ef4de23');
const { errorState, loadStrings, wt } = await import('/js/widget-toolbox.js?v=2c521043');
await loadStrings();
const line=wt('ui.unknownZone','Unknown timezone');
errorState({ root: w, place: 'center' }).empty(line);
Expand Down
2 changes: 1 addition & 1 deletion ui/widgets/clock/digital.html
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,7 @@
}
async function showZoneError() {
const w = document.getElementById('widget');
const { errorState, loadStrings, wt } = await import('/js/widget-toolbox.js?v=2ef4de23');
const { errorState, loadStrings, wt } = await import('/js/widget-toolbox.js?v=2c521043');
await loadStrings();
const line = wt('ui.unknownZone', 'Unknown timezone');
errorState({ root: w, place: 'center' }).empty(line);
Expand Down
2 changes: 1 addition & 1 deletion ui/widgets/connections/connections-map.html
Original file line number Diff line number Diff line change
Expand Up @@ -182,7 +182,7 @@
})(window.__DOTS);
</script>
<script type="module">
import { poll, fetchData, openUrl, html, setHtml, colorOrFallback, loadStrings, wt, errorState, theme, formatNumber, formatList, cssZoom, linkTo } from '/js/widget-toolbox.js?v=2ef4de23';
import { poll, fetchData, openUrl, html, setHtml, colorOrFallback, loadStrings, wt, errorState, theme, formatNumber, formatList, cssZoom, linkTo } from '/js/widget-toolbox.js?v=2c521043';
await loadStrings();
document.getElementById('c').setAttribute('aria-label', wt('ui.worldMap', 'World map of connections'));
(function(){
Expand Down
2 changes: 1 addition & 1 deletion ui/widgets/connections/connections-vpn.html
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@
<div class="wrap" id="wrap" role="img" aria-label="VPN status"></div>
<script>window.__DOTS={"cols":100,"rows":39,"minLat":-58.0,"maxLat":84.0,"countries":["CA","GL","NO","RU","US","SE","FI","IS","GB","DK","LV","IE","NL","DE","PL","BY","KZ","CN","FR","CZ","UA","MN","IT","HR","RS","RO","ES","AL","BG","GE","TM","UZ","KG","PT","GR","TR","IR","AZ","TJ","KP","MA","DZ","TN","SY","IQ","AF","PK","IN","KR","JP","MX","LY","EG","SA","NP","BT","EH","MR","ML","AE","OM","MM","CN-TW","NE","TD","SD","LA","VN","ER","YE","TH","PH","NI","SN","BF","NG","ET","KH","CO","VE","SL","GN","CI","GH","BJ","CF","SS","-99","GY","SR","LR","CM","SO","MY","BR","GA","CG","CD","UG","KE","ID","EC","PE","RW","TZ","PG","AO","ZM","BO","MW","MZ","AU","ZW","MG","VU","PY","NA","BW","CL","AR","ZA","UY","NZ"],"dots":[26,0,0,27,0,0,28,0,0,29,0,0,30,0,0,31,0,0,32,0,0,34,0,1,37,0,1,38,0,1,39,0,1,40,0,1,21,1,0,24,1,0,26,1,0,27,1,0,28,1,0,30,1,1,31,1,1,32,1,1,33,1,1,34,1,1,35,1,1,36,1,1,37,1,1,38,1,1,39,1,1,40,1,1,41,1,1,42,1,1,43,1,1,44,1,1,53,1,2,54,1,2,78,1,3,19,2,0,23,2,0,24,2,0,25,2,0,26,2,0,27,2,0,34,2,1,35,2,1,36,2,1,37,2,1,38,2,1,39,2,1,40,2,1,41,2,1,42,2,1,43,2,1,65,2,3,66,2,3,74,2,3,75,2,3,76,2,3,77,2,3,78,2,3,79,2,3,80,2,3,88,2,3,89,2,3,91,2,3,0,3,3,6,3,4,18,3,0,19,3,0,20,3,0,23,3,0,25,3,0,26,3,0,27,3,0,28,3,0,29,3,0,35,3,1,36,3,1,37,3,1,38,3,1,39,3,1,40,3,1,41,3,1,42,3,1,43,3,1,65,3,3,69,3,3,70,3,3,71,3,3,72,3,3,73,3,3,74,3,3,75,3,3,76,3,3,77,3,3,78,3,3,79,3,3,80,3,3,81,3,3,82,3,3,83,3,3,84,3,3,85,3,3,87,3,3,88,3,3,89,3,3,90,3,3,91,3,3,0,4,3,4,4,4,5,4,4,6,4,4,7,4,4,8,4,4,9,4,4,10,4,4,11,4,0,12,4,0,13,4,0,14,4,0,15,4,0,16,4,0,17,4,0,18,4,0,19,4,0,20,4,0,21,4,0,22,4,0,23,4,0,24,4,0,25,4,0,26,4,0,30,4,0,31,4,0,35,4,1,36,4,1,37,4,1,38,4,1,39,4,1,40,4,1,54,4,2,55,4,5,56,4,5,57,4,6,58,4,3,59,4,3,60,4,3,62,4,3,63,4,3,64,4,3,65,4,3,66,4,3,67,4,3,68,4,3,69,4,3,71,4,3,72,4,3,73,4,3,74,4,3,75,4,3,76,4,3,77,4,3,78,4,3,79,4,3,80,4,3,81,4,3,82,4,3,83,4,3,84,4,3,85,4,3,86,4,3,87,4,3,88,4,3,89,4,3,90,4,3,91,4,3,92,4,3,93,4,3,94,4,3,95,4,3,96,4,3,97,4,3,98,4,3,99,4,3,5,5,4,6,5,4,7,5,4,8,5,4,9,5,4,10,5,4,11,5,0,12,5,0,13,5,0,14,5,0,15,5,0,16,5,0,17,5,0,18,5,0,19,5,0,20,5,0,21,5,0,22,5,0,23,5,0,24,5,0,26,5,0,27,5,0,30,5,0,31,5,0,36,5,1,37,5,1,38,5,1,44,5,7,53,5,5,54,5,5,55,5,5,56,5,6,57,5,6,58,5,3,59,5,3,60,5,3,61,5,3,62,5,3,63,5,3,64,5,3,65,5,3,66,5,3,67,5,3,68,5,3,69,5,3,70,5,3,71,5,3,72,5,3,73,5,3,74,5,3,75,5,3,76,5,3,77,5,3,78,5,3,79,5,3,80,5,3,81,5,3,82,5,3,83,5,3,84,5,3,85,5,3,86,5,3,87,5,3,88,5,3,89,5,3,90,5,3,91,5,3,92,5,3,93,5,3,94,5,3,95,5,3,96,5,3,97,5,3,98,5,3,99,5,3,4,6,4,5,6,4,6,6,4,7,6,4,8,6,4,10,6,4,11,6,0,12,6,0,13,6,0,14,6,0,15,6,0,16,6,0,17,6,0,18,6,0,19,6,0,20,6,0,21,6,0,22,6,0,23,6,0,28,6,0,29,6,0,30,6,0,37,6,1,51,6,2,52,6,2,53,6,5,54,6,5,56,6,6,58,6,3,59,6,3,60,6,3,61,6,3,62,6,3,63,6,3,64,6,3,65,6,3,66,6,3,67,6,3,68,6,3,69,6,3,70,6,3,71,6,3,72,6,3,73,6,3,74,6,3,75,6,3,76,6,3,77,6,3,78,6,3,79,6,3,80,6,3,81,6,3,82,6,3,83,6,3,84,6,3,85,6,3,86,6,3,87,6,3,88,6,3,89,6,3,90,6,3,91,6,3,92,6,3,95,6,3,96,6,3,13,7,0,14,7,0,15,7,0,16,7,0,17,7,0,18,7,0,19,7,0,20,7,0,21,7,0,22,7,0,23,7,0,24,7,0,29,7,0,30,7,0,31,7,0,32,7,0,48,7,8,52,7,9,53,7,5,54,7,5,56,7,10,57,7,10,58,7,3,59,7,3,60,7,3,61,7,3,62,7,3,63,7,3,64,7,3,65,7,3,66,7,3,67,7,3,68,7,3,69,7,3,70,7,3,71,7,3,72,7,3,73,7,3,74,7,3,75,7,3,76,7,3,77,7,3,78,7,3,79,7,3,80,7,3,81,7,3,82,7,3,83,7,3,84,7,3,85,7,3,86,7,3,87,7,3,93,7,3,94,7,3,14,8,0,15,8,0,16,8,0,17,8,0,18,8,0,19,8,0,20,8,0,21,8,0,22,8,0,23,8,0,24,8,0,25,8,0,26,8,0,28,8,0,29,8,0,30,8,0,31,8,0,32,8,0,33,8,0,34,8,0,47,8,11,49,8,8,51,8,12,52,8,13,53,8,13,54,8,14,55,8,14,56,8,14,57,8,15,58,8,15,59,8,3,60,8,3,61,8,3,62,8,3,63,8,3,64,8,3,65,8,3,66,8,3,67,8,16,68,8,16,69,8,16,70,8,16,71,8,16,72,8,3,73,8,3,74,8,3,75,8,3,76,8,3,77,8,3,78,8,3,79,8,3,80,8,3,81,8,3,82,8,3,83,8,3,84,8,17,85,8,3,86,8,3,87,8,3,88,8,3,89,8,3,93,8,3,16,9,0,17,9,0,18,9,0,19,9,0,20,9,0,21,9,0,22,9,0,23,9,0,24,9,0,25,9,0,26,9,0,27,9,0,28,9,0,29,9,0,30,9,0,32,9,0,34,9,0,49,9,18,50,9,18,51,9,18,52,9,13,53,9,13,54,9,19,55,9,14,56,9,20,57,9,20,58,9,20,59,9,20,60,9,20,61,9,3,62,9,3,63,9,16,64,9,16,65,9,16,66,9,16,67,9,16,68,9,16,69,9,16,70,9,16,71,9,16,72,9,16,73,9,16,74,9,3,75,9,21,76,9,21,77,9,21,78,9,21,79,9,21,80,9,3,81,9,21,82,9,17,83,9,17,84,9,17,85,9,17,86,9,3,87,9,3,88,9,3,89,9,3,16,10,4,17,10,4,18,10,4,19,10,4,20,10,4,21,10,4,22,10,4,23,10,4,24,10,4,25,10,4,26,10,4,27,10,0,28,10,0,29,10,0,30,10,4,31,10,0,50,10,18,51,10,18,52,10,22,53,10,22,54,10,23,55,10,24,56,10,25,57,10,25,59,10,3,60,10,3,61,10,3,62,10,3,65,10,16,66,10,16,67,10,16,68,10,16,69,10,16,70,10,16,71,10,16,72,10,16,73,10,17,74,10,17,75,10,21,76,10,21,77,10,21,78,10,21,79,10,21,80,10,21,81,10,21,82,10,17,83,10,17,84,10,17,85,10,17,86,10,17,87,10,3,15,11,4,16,11,4,17,11,4,18,11,4,19,11,4,20,11,4,21,11,4,22,11,4,23,11,4,24,11,4,25,11,4,26,11,4,27,11,4,28,11,4,29,11,4,47,11,26,48,11,26,49,11,26,50,11,26,52,11,18,53,11,22,55,11,27,56,11,28,57,11,28,62,11,29,65,11,16,66,11,30,67,11,31,68,11,16,69,11,16,70,11,32,71,11,32,72,11,17,73,11,17,74,11,17,75,11,17,76,11,17,77,11,17,78,11,17,79,11,17,80,11,17,81,11,17,82,11,17,83,11,17,84,11,17,85,11,17,16,12,4,17,12,4,18,12,4,19,12,4,20,12,4,21,12,4,22,12,4,23,12,4,24,12,4,25,12,4,26,12,4,27,12,4,28,12,4,47,12,33,48,12,26,49,12,26,54,12,22,56,12,34,57,12,35,58,12,35,59,12,35,60,12,35,61,12,35,62,12,36,63,12,37,65,12,30,66,12,30,67,12,30,68,12,31,69,12,38,70,12,38,71,12,17,72,12,17,73,12,17,74,12,17,75,12,17,76,12,17,77,12,17,78,12,17,79,12,17,80,12,17,81,12,17,82,12,17,85,12,39,16,13,4,17,13,4,18,13,4,19,13,4,20,13,4,21,13,4,22,13,4,23,13,4,24,13,4,25,13,4,26,13,4,27,13,4,28,13,4,48,13,40,49,13,41,50,13,41,51,13,41,52,13,42,60,13,43,61,13,44,62,13,44,63,13,36,64,13,36,65,13,36,66,13,36,67,13,45,68,13,45,69,13,45,70,13,46,71,13,47,72,13,17,73,13,17,74,13,17,75,13,17,76,13,17,77,13,17,78,13,17,79,13,17,80,13,17,81,13,17,82,13,17,85,13,48,87,13,49,88,13,49,19,14,50,20,14,50,21,14,4,22,14,4,23,14,4,24,14,4,25,14,4,26,14,4,47,14,40,48,14,40,49,14,41,50,14,41,51,14,41,52,14,41,53,14,51,54,14,51,56,14,51,57,14,52,58,14,52,60,14,53,61,14,53,62,14,44,63,14,36,64,14,36,65,14,36,66,14,36,67,14,45,68,14,45,69,14,46,70,14,46,71,14,47,72,14,17,73,14,17,74,14,17,75,14,17,76,14,17,77,14,17,78,14,17,79,14,17,80,14,17,81,14,17,82,14,17,83,14,17,18,15,50,19,15,50,20,15,50,21,15,50,22,15,4,27,15,4,46,15,40,47,15,40,48,15,41,49,15,41,50,15,41,51,15,41,52,15,41,53,15,51,54,15,51,55,15,51,56,15,51,57,15,52,58,15,52,60,15,53,61,15,53,62,15,53,63,15,53,65,15,36,66,15,36,67,15,46,68,15,46,69,15,47,70,15,47,71,15,47,72,15,47,73,15,54,74,15,47,75,15,55,76,15,47,77,15,17,78,15,17,79,15,17,80,15,17,81,15,17,82,15,17,83,15,17,20,16,50,21,16,50,22,16,50,46,16,56,47,16,57,48,16,58,49,16,41,50,16,41,51,16,41,52,16,41,53,16,51,54,16,51,55,16,51,56,16,51,57,16,52,58,16,52,59,16,52,61,16,53,62,16,53,63,16,53,64,16,59,65,16,60,69,16,47,70,16,47,71,16,47,72,16,47,73,16,47,74,16,47,75,16,47,76,16,61,77,16,17,78,16,17,79,16,17,80,16,17,81,16,17,82,16,17,83,16,62,21,17,50,22,17,50,25,17,50,45,17,57,46,17,57,47,17,57,48,17,58,49,17,58,50,17,58,51,17,41,52,17,63,53,17,63,54,17,64,55,17,64,56,17,51,57,17,65,58,17,65,59,17,65,61,17,53,62,17,53,63,17,53,64,17,53,65,17,60,70,17,47,71,17,47,72,17,47,73,17,47,76,17,61,77,17,61,78,17,66,79,17,67,22,18,50,23,18,50,24,18,50,45,18,57,46,18,57,47,18,57,48,18,58,49,18,58,50,18,58,51,18,63,52,18,63,53,18,63,54,18,64,55,18,64,56,18,64,57,18,65,58,18,65,59,18,65,60,18,68,62,18,69,63,18,69,64,18,69,70,18,47,71,18,47,72,18,47,76,18,61,77,18,70,78,18,70,79,18,66,83,18,71,26,19,72,45,19,73,46,19,73,47,19,58,48,19,58,49,19,74,50,19,63,51,19,75,52,19,63,53,19,75,54,19,64,55,19,64,56,19,65,57,19,65,58,19,65,59,19,65,60,19,76,61,19,76,62,19,69,71,19,47,77,19,61,78,19,77,79,19,77,29,20,78,30,20,79,31,20,79,32,20,79,46,20,80,47,20,81,48,20,82,49,20,83,50,20,84,51,20,75,52,20,75,53,20,75,54,20,64,55,20,64,56,20,85,57,20,86,58,20,86,59,20,76,60,20,76,61,20,76,62,20,87,63,20,87,71,20,47,77,20,70,28,21,78,29,21,78,30,21,78,31,21,79,32,21,79,33,21,88,34,21,89,47,21,90,48,21,82,49,21,83,51,21,75,52,21,91,53,21,91,54,21,85,55,21,85,56,21,85,57,21,86,58,21,86,59,21,86,60,21,76,61,21,76,62,21,76,63,21,92,78,21,93,82,21,93,28,22,78,29,22,78,30,22,78,31,22,79,32,22,94,33,22,88,34,22,94,35,22,94,53,22,95,54,22,96,55,22,97,56,22,97,57,22,97,58,22,97,59,22,98,60,22,99,61,22,92,62,22,92,77,22,100,78,22,93,81,22,93,82,22,100,28,23,101,29,23,102,30,23,78,31,23,94,32,23,94,33,23,94,34,23,94,35,23,94,36,23,94,37,23,94,53,23,95,54,23,96,55,23,97,56,23,97,57,23,97,58,23,103,59,23,104,60,23,99,61,23,99,78,23,100,81,23,100,83,23,100,27,24,102,28,24,102,29,24,102,30,24,94,31,24,94,32,24,94,33,24,94,34,24,94,35,24,94,36,24,94,37,24,94,38,24,94,39,24,94,53,24,97,54,24,97,55,24,97,56,24,97,57,24,97,58,24,104,59,24,104,60,24,104,88,24,100,89,24,105,90,24,105,28,25,102,29,25,102,30,25,94,31,25,94,32,25,94,33,25,94,34,25,94,35,25,94,36,25,94,37,25,94,38,25,94,39,25,94,54,25,106,55,25,106,56,25,97,57,25,97,58,25,107,59,25,104,60,25,104,82,25,100,83,25,100,89,25,105,29,26,102,30,26,102,31,26,108,32,26,94,33,26,94,34,26,94,35,26,94,36,26,94,37,26,94,38,26,94,54,26,106,55,26,106,56,26,106,57,26,107,58,26,107,59,26,109,60,26,110,86,26,111,87,26,111,89,26,111,29,27,102,30,27,102,31,27,108,32,27,108,33,27,94,34,27,94,35,27,94,36,27,94,37,27,94,38,27,94,53,27,106,54,27,106,55,27,106,56,27,107,57,27,107,58,27,112,59,27,110,60,27,110,63,27,113,85,27,111,86,27,111,87,27,111,89,27,111,96,27,114,31,28,108,32,28,108,33,28,115,34,28,94,35,28,94,36,28,94,37,28,94,38,28,94,54,28,116,55,28,116,56,28,117,57,28,112,58,28,112,59,28,110,62,28,113,63,28,113,83,28,111,84,28,111,85,28,111,86,28,111,87,28,111,88,28,111,89,28,111,90,28,111,30,29,118,31,29,119,32,29,119,33,29,115,34,29,115,35,29,94,36,29,94,37,29,94,54,29,116,55,29,116,56,29,117,57,29,117,58,29,120,59,29,110,62,29,113,82,29,111,83,29,111,84,29,111,85,29,111,86,29,111,87,29,111,88,29,111,89,29,111,90,29,111,91,29,111,30,30,118,31,30,119,32,30,119,33,30,119,34,30,115,35,30,94,36,30,94,54,30,116,55,30,116,56,30,120,57,30,120,58,30,120,82,30,111,83,30,111,84,30,111,85,30,111,86,30,111,87,30,111,88,30,111,89,30,111,90,30,111,91,30,111,92,30,111,30,31,118,31,31,119,32,31,119,33,31,119,34,31,94,35,31,94,55,31,120,56,31,120,57,31,120,82,31,111,83,31,111,84,31,111,85,31,111,86,31,111,87,31,111,88,31,111,89,31,111,90,31,111,91,31,111,92,31,111,30,32,118,31,32,119,32,32,119,33,32,119,34,32,121,55,32,120,82,32,111,88,32,111,89,32,111,90,32,111,91,32,111,30,33,119,31,33,119,32,33,119,33,33,119,89,33,111,90,33,111,99,33,122,29,34,118,30,34,119,31,34,119,90,34,111,29,35,118,30,35,119,96,35,122,29,36,118,30,36,119,29,37,118,30,37,118]};</script>
<script type="module">
import { readableInk, poll, fetchData, linkTo, esc, loadStrings, wt, wtCount, formatNumber, errorLine, placeholder } from '/js/widget-toolbox.js?v=2ef4de23';
import { readableInk, poll, fetchData, linkTo, esc, loadStrings, wt, wtCount, formatNumber, errorLine, placeholder } from '/js/widget-toolbox.js?v=2c521043';
await loadStrings();
document.getElementById('wrap').setAttribute('aria-label', wt('ui.vpnStatus', 'VPN status'));
(function(){
Expand Down
2 changes: 1 addition & 1 deletion ui/widgets/dashboard-switch/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@
<body>
<div id="root"></div>
<script type="module">
import { widgetId, getConfig, loadStrings, wt } from '/js/widget-toolbox.js?v=2ef4de23';
import { widgetId, getConfig, loadStrings, wt } from '/js/widget-toolbox.js?v=2c521043';
await loadStrings();
import { buildModel } from '/js/dashboard-switch-model.js?v=757fa7ec';

Expand Down
2 changes: 1 addition & 1 deletion ui/widgets/disk-health/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -167,7 +167,7 @@
</div>

<script type="module">
import { poll, fetchData, openUrl, loadStrings, wt, wtCount, formatNumber, formatList, errorState, cssZoom } from '/js/widget-toolbox.js?v=2ef4de23';
import { poll, fetchData, openUrl, loadStrings, wt, wtCount, formatNumber, formatList, errorState, cssZoom } from '/js/widget-toolbox.js?v=2c521043';
await loadStrings();
document.getElementById('root').setAttribute('aria-label', wt('ui.diskHealth','Disk health'));
const params = new URLSearchParams(location.search);
Expand Down
2 changes: 1 addition & 1 deletion ui/widgets/dns/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@
</div>

<script type="module">
import { poll, fetchData, linkTo, loadStrings, wt, formatNumber, errorState, readableInk, placeholder } from '/js/widget-toolbox.js?v=2ef4de23';
import { poll, fetchData, linkTo, loadStrings, wt, formatNumber, errorState, readableInk, placeholder } from '/js/widget-toolbox.js?v=2c521043';
await loadStrings();
/* These two are in the markup, so the widget still reads correctly in English
if the catalog fetch fails. */
Expand Down
2 changes: 1 addition & 1 deletion ui/widgets/github/contributions.html
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@
<div class="tip" id="tip" hidden aria-hidden="true"></div>
<div class="cap" id="cap"></div>
<script type="module">
import { poll, fetchData, linkTo, loadStrings, wt, formatNumber, errorState, fitText, cssZoom } from '/js/widget-toolbox.js?v=2ef4de23';
import { poll, fetchData, linkTo, loadStrings, wt, formatNumber, errorState, fitText, cssZoom } from '/js/widget-toolbox.js?v=2c521043';
await loadStrings();

const TICK_MS = 300000;
Expand Down
2 changes: 1 addition & 1 deletion ui/widgets/github/pullrequests.html
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@
<div class="widget" id="widget" role="group" aria-label="GitHub pull requests"></div>
<div class="cap" id="cap"></div>
<script type="module">
import { poll, fetchData, linkTo, loadStrings, wt, errorState, formatNumber, fitText, placeholder, formatList } from '/js/widget-toolbox.js?v=2ef4de23';
import { poll, fetchData, linkTo, loadStrings, wt, errorState, formatNumber, fitText, placeholder, formatList } from '/js/widget-toolbox.js?v=2c521043';
await loadStrings();

const TICK_MS = 60000;
Expand Down
2 changes: 1 addition & 1 deletion ui/widgets/nowplaying/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -129,7 +129,7 @@
<span class="sr" id="sr" aria-live="polite"></span>
</div>
<script type="module">
import { poll, fetchData, linkTo, loadStrings, wt, errorState, localiseDigits, placeholder } from '/js/widget-toolbox.js?v=2ef4de23';
import { poll, fetchData, linkTo, loadStrings, wt, errorState, localiseDigits, placeholder } from '/js/widget-toolbox.js?v=2c521043';
await loadStrings();
document.getElementById('w').setAttribute('aria-label', wt('widget.label', 'Now Playing'));
document.getElementById('prev').setAttribute('aria-label', wt('ui.previous', 'Previous item'));
Expand Down
4 changes: 2 additions & 2 deletions ui/widgets/system-summary/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,7 @@
<div id="cap"></div>
<div id="ss-link" aria-labelledby="sr-sum"></div>
<script type="module">
import { contrastInk, cardContrast, colorOrFallback, columns, barFill, poll, fetchData, html, setHtml, loadStrings, wt, formatNumber, errorState, cssZoom, linkTo, openUrl, formatList } from '/js/widget-toolbox.js?v=2ef4de23';
import { contrastInk, cardContrast, colorOrFallback, columns, barFill, poll, fetchData, html, setHtml, loadStrings, wt, formatNumber, errorState, cssZoom, linkTo, openUrl, formatList } from '/js/widget-toolbox.js?v=2c521043';
await loadStrings();
const REFRESH_SECONDS = ['5', '10', '30', '60'];
const SPEED_MS = 60000;
Expand Down Expand Up @@ -276,7 +276,7 @@
}
}

function pressOpensLink(el) { return !el.closest('.plot, .hold'); }
function pressOpensLink(el) { return !el.closest('.plot, .hold, #ss-link'); }

function holdToShow(target, show) {
target.classList.add('hold');
Expand Down
Loading
Loading