Skip to content

Commit 91d2fa4

Browse files
committed
refactor: update regional selection
1 parent 391da41 commit 91d2fa4

5 files changed

Lines changed: 119 additions & 95 deletions

File tree

views/assets/js/common-1735118314.js

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ const searchEngines = Object.freeze({
6969
Bing: 'bing.com/search?q=',
7070
DuckDuckGo: 'duckduckgo.com/?q=',
7171
Startpage: 'startpage.com/sp/search?query=',
72-
Brave: 'https://search.brave.com/search?q='
72+
Brave: 'search.brave.com/search?q=',
7373
}),
7474
defaultSearch = 'Google';
7575

@@ -373,7 +373,7 @@ addEventListener('DOMContentLoaded', async () => {
373373
uvConfig = self['{{__uv$config}}'];
374374
delete self['{{__uv$config}}'];
375375
sjConfig = self['$scramjet'];
376-
if(sjConfig !== undefined) {
376+
if (sjConfig !== undefined) {
377377
const waitForScramjetInit = () =>
378378
new Promise((resolve) => {
379379
const interval = setInterval(() => {
@@ -386,7 +386,6 @@ addEventListener('DOMContentLoaded', async () => {
386386
await waitForScramjetInit();
387387
sjCodec = sjConfig.codec;
388388
sjConfig = sjConfig.config;
389-
console.log(sjConfig);
390389
}
391390

392391
// Object.freeze prevents goProx from accidentally being edited.
@@ -464,10 +463,10 @@ addEventListener('DOMContentLoaded', async () => {
464463
},
465464
// Ultraviolet and Scramjet are currently incompatible with window mode.
466465
defaultModes = {
467-
'globalDefault': 'window',
468-
'ultraviolet': 'stealth',
469-
'scramjet': 'stealth',
470-
'rammerhead': 'window',
466+
globalDefault: 'window',
467+
ultraviolet: 'stealth',
468+
scramjet: 'stealth',
469+
rammerhead: 'window',
471470
},
472471
searchMode = defaultModes[type] || defaultModes['globalDefault'];
473472

views/assets/js/csel.js

Lines changed: 94 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -80,12 +80,18 @@ const storageId = 'hu-lts-storage',
8080
},
8181
offStateKeywords = ['off', 'disabled', 'false', '0'],
8282
onStateKeywords = ['on', 'enabled', 'true', '1'],
83-
checkBooleanState = (element) =>
84-
onStateKeywords.includes(
85-
`${(element.querySelector('input:checked,option:checked') || []).value || element.checked}`.toLowerCase()
86-
),
83+
checkBooleanState = (element) => {
84+
const state =
85+
`${(element.querySelector('input:checked,option:checked') || []).value || element.checked}`.toLowerCase();
86+
return (
87+
onStateKeywords.includes(state) ||
88+
(!offStateKeywords.includes(state) && state)
89+
);
90+
},
91+
classEvent = (targetElementList, eventTrigger, eventConstructor = Event) =>
92+
new eventConstructor(eventTrigger, { target: targetElementList[0] }),
8793
classUpdateHandler =
88-
(targetElementList, stateFunction, ...params) =>
94+
(targetElementList, stateFunction, manualEvent = false, ...params) =>
8995
() => {
9096
const state =
9197
'function' === typeof stateFunction
@@ -108,9 +114,10 @@ const storageId = 'hu-lts-storage',
108114
if ('number' === typeof updateTarget.selectedIndex)
109115
updateTarget.selectedIndex = mappedIndex;
110116
else children[mappedIndex].checked = true;
111-
} else
112-
updateTarget.checked = onStateKeywords.includes(state);
117+
} else updateTarget.checked = onStateKeywords.includes(state);
113118
});
119+
if (manualEvent instanceof Event && targetElementList.length > 0)
120+
targetElementList[0].dispatchEvent(manualEvent);
114121
},
115122
// These titles and icons are used as autofill templates by settings.html.
116123
// The icon URLs and tab titles may need to be updated over time.
@@ -130,46 +137,10 @@ const storageId = 'hu-lts-storage',
130137
: 'libcurl',
131138
defaultSearch = 'Google';
132139

133-
// Load a custom page title and favicon if it was previously stored.
134-
useStorageArgs('Title', (s) => {
135-
s != undefined && pageTitle(s);
136-
});
137-
useStorageArgs('Icon', (s) => {
138-
s != undefined && pageIcon(s);
139-
});
140+
// All code in this block is used by menu items that adjust website settings.
140141

141-
useStorageArgs('SearchEngine', (s) => {
142-
classUpdateHandler(
143-
document.getElementsByClassName('search-engine-list'),
144-
s || defaultSearch
145-
)();
146-
});
142+
/* BEGIN WEBSITE SETTINGS */
147143

148-
// Load the Wisp transport mode that was last used, or use the default.
149-
useStorageArgs('Transport', (s) => {
150-
classUpdateHandler(
151-
document.getElementsByClassName('wisp-transport-list'),
152-
s || defaultMode
153-
)();
154-
});
155-
156-
// Ads are disabled by default. Load ads if ads were enabled previously.
157-
// Change !== to === here if ads should be enabled by default.
158-
useStorageArgs('HideAds', (s) => {
159-
if (s !== false) pageHideAds();
160-
else {
161-
pageShowAds();
162-
classUpdateHandler(document.getElementsByClassName('hideads'), 'off')();
163-
}
164-
});
165-
166-
// Tor is disabled by default. Enable Tor if it was enabled previously.
167-
useStorageArgs('UseOnion', (s) => {
168-
if (s === true)
169-
classUpdateHandler(document.getElementsByClassName('useonion'), 'on')();
170-
});
171-
172-
// All code below is used by menu items that adjust website settings.
173144
if (document.getElementById('csel')) {
174145
const attachEventListener = (selector, ...args) =>
175146
(
@@ -281,13 +252,17 @@ if (document.getElementById('csel')) {
281252
: setStorage('Transport', e.target.value);
282253

283254
// Only the libcurl transport mode supports Tor at the moment.
284-
let torCheck = document.getElementsByClassName('useonion')[0];
285-
if (e.target.value !== 'libcurl' && torCheck.checked) torCheck.click();
255+
let torCheck = document.getElementsByClassName('useonion');
256+
if (
257+
e.target.value !== 'libcurl' &&
258+
checkBooleanState(torCheck[0]) === false
259+
)
260+
classUpdateHandler(torCheck, 'off')();
286261
});
287262

288263
// Allow users to toggle ads with the UI.
289264
attachClassEventListener('hideads', 'change', (e) => {
290-
if (checkBooleanState(e.target)) {
265+
if (checkBooleanState(e.target) === true) {
291266
pageHideAds();
292267
setStorage('HideAds', true);
293268
} else {
@@ -302,26 +277,89 @@ if (document.getElementById('csel')) {
302277
*/
303278
attachClassEventListener('useonion', 'change', (e) => {
304279
let unselectedModes = document.querySelectorAll(
305-
'.wisp-transport-list input:not([value=libcurl])'
280+
'.wisp-transport-list input:not([value=libcurl]),.region-list'
306281
);
307-
if (checkBooleanState(e.target)) {
308-
let selectedMode = document.querySelector(
309-
'.wisp-transport-list input[value=libcurl]'
310-
);
282+
const wispTransportList = document.getElementsByClassName(
283+
'wisp-transport-list'
284+
),
285+
regionList = document.getElementsByClassName('region-list');
286+
if (checkBooleanState(e.target) === true) {
287+
classUpdateHandler(
288+
wispTransportList,
289+
'libcurl',
290+
classEvent(wispTransportList, 'change')
291+
)();
292+
classUpdateHandler(regionList, 'off', classEvent(regionList, 'change'))();
311293
unselectedModes.forEach((e) => {
312294
e.setAttribute('disabled', 'true');
313295
});
314-
selectedMode.click();
315-
setStorage('UseOnion', true);
296+
setStorage('UseSocks5', 'tor');
316297
} else {
317298
unselectedModes.forEach((e) => {
318299
e.removeAttribute('disabled');
319300
});
320301

321302
// Tor will likely never be enabled by default, so removing the cookie
322303
// here may be better than setting it to false.
323-
removeStorage('UseOnion');
304+
removeStorage('UseSocks5');
324305
}
325306
});
307+
308+
attachClassEventListener('region-list', 'change', (e) => {
309+
const isOff = checkBooleanState(e.target) === false;
310+
isOff
311+
? removeStorage('UseSocks5')
312+
: setStorage('UseSocks5', e.target.value);
313+
314+
// Only the libcurl transport mode supports Tor at the moment.
315+
let torCheck = document.getElementsByClassName('useonion');
316+
if (isOff && checkBooleanState(torCheck[0]) === false)
317+
classUpdateHandler(torCheck, 'off', classEvent(torCheck, 'change'))();
318+
});
326319
}
320+
321+
/* END WEBSITE SETTINGS */
322+
323+
/* LOAD USER-SAVED SETTINGS */
324+
325+
// Load a custom page title and favicon if it was previously stored.
326+
useStorageArgs('Title', (s) => {
327+
s != undefined && pageTitle(s);
328+
});
329+
useStorageArgs('Icon', (s) => {
330+
s != undefined && pageIcon(s);
331+
});
332+
333+
useStorageArgs('SearchEngine', (s) => {
334+
classUpdateHandler(
335+
document.getElementsByClassName('search-engine-list'),
336+
s || defaultSearch
337+
)();
338+
});
339+
340+
// Load the Wisp transport mode that was last used, or use the default.
341+
useStorageArgs('Transport', (s) => {
342+
classUpdateHandler(
343+
document.getElementsByClassName('wisp-transport-list'),
344+
s || defaultMode
345+
)();
346+
});
347+
348+
// Ads are disabled by default. Load ads if ads were enabled previously.
349+
// Change !== to === here if ads should be enabled by default.
350+
useStorageArgs('HideAds', (s) => {
351+
if (s !== false) pageHideAds();
352+
else {
353+
pageShowAds();
354+
classUpdateHandler(document.getElementsByClassName('hideads'), 'off')();
355+
}
356+
});
357+
358+
// Tor is disabled by default. Enable Tor if it was enabled previously.
359+
useStorageArgs('UseSocks5', (s) => {
360+
const tor = document.getElementsByClassName('useonion'),
361+
regionList = document.getElementsByClassName('region-list');
362+
if (s === 'tor') classUpdateHandler(tor, 'on', classEvent(tor, 'change'))();
363+
else if ('string' === typeof s) classUpdateHandler(regionList, s)();
364+
});
327365
})();

views/assets/js/register-sw.js

Lines changed: 13 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
eu: 'socks5h://localhost:7000',
1313
usWest: 'socks5h://localhost:7001',
1414
usEast: 'socks5h://localhost:7002',
15-
japan: 'socks5h://localhost:7003',
15+
jp: 'socks5h://localhost:7003',
1616
},
1717
transports = {
1818
epoxy: '/epoxy/index.mjs',
@@ -38,7 +38,7 @@
3838
resolve();
3939
}
4040
}, 50);
41-
});
41+
});
4242

4343
const registerSW = async () => {
4444
if (!navigator.serviceWorker) {
@@ -54,8 +54,8 @@
5454
// Fix for Firefox
5555
if (navigator.userAgent.includes('Firefox')) {
5656
Object.defineProperty(globalThis, 'crossOriginIsolated', {
57-
value: true,
58-
writable: false,
57+
value: true,
58+
writable: false,
5959
});
6060
}
6161

@@ -64,31 +64,18 @@
6464
transports[readStorage('Transport')] || transports.default;
6565
let transportOptions = { wisp: wispUrl };
6666

67-
// Socks5 Proxy Options
68-
const proxysets = {
69-
UseOnion: 'tor',
70-
UseEU: 'eu',
71-
UseUSWest: 'usWest',
72-
UseUSEast: 'usEast',
73-
UseJapan: 'japan',
74-
};
75-
76-
for (const [storeage, proxyoption] of Object.entries(proxysets)) {
77-
if (readStorage(storeage) === true) {
78-
transportOptions.proxy = proxyUrl[proxyoption];
79-
console.log('Using Proxy:', proxyUrl[proxyoption]);
80-
break;
81-
}
82-
}
67+
// Socks5 proxy options
68+
if ('string' === typeof readStorage('UseSocks5'))
69+
transportOptions.proxy = proxyUrl[readStorage('UseSocks5')];
8370

71+
console.log('Using proxy:', transportOptions.proxy);
8472
console.log('Transport mode:', transportMode);
8573

8674
const connection = new BareMux.BareMuxConnection('/baremux/worker.js');
8775
await connection.setTransport(transportMode, [transportOptions]);
8876

8977
const registrations = await navigator.serviceWorker.getRegistrations(),
90-
usedSW =
91-
readStorage('HideAds') !== false ? blacklistSW : stockSW;
78+
usedSW = readStorage('HideAds') !== false ? blacklistSW : stockSW;
9279

9380
console.log('Service Worker being registered:', usedSW);
9481

@@ -107,7 +94,7 @@
10794
const initializeScramjet = async () => {
10895
try {
10996
await waitForScramjetController();
110-
97+
11198
const scramjet = new ScramjetController({
11299
prefix: '/scram/network/',
113100
files: {
@@ -123,15 +110,15 @@
123110
scramitize: false,
124111
},
125112
siteFlags: {
126-
"https://www.google.com/(search|sorry).*": {
113+
'https://www.google.com/(search|sorry).*': {
127114
naiiveRewriter: true,
128115
},
129116
},
130117
});
131-
118+
132119
console.log('Initializing ScramjetController');
133120
scramjet.init();
134-
navigator.serviceWorker.register("/scram/scramjet.sw.js");
121+
navigator.serviceWorker.register('/scram/scramjet.sw.js');
135122
} catch (err) {
136123
console.error('Scramjet initialization failed:', err);
137124
}

views/pages/proxnav/scramjet.html

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -155,11 +155,11 @@ <h3>Advanced Settings ▼</h3>
155155
</label>
156156
<label>
157157
Region Selection <span class="pr-tippy" data-tippy-content="Enable or select regional proxies.">(?) </span>
158-
<select>
158+
<select class="region-list">
159159
<option value="off">Off</option>
160160
<option value="eu">Europe</option>
161-
<option value="uswest">US-West</option>
162-
<option value="useast">US-East</option>
161+
<option value="usWest">US-West</option>
162+
<option value="usEast">US-East</option>
163163
<option value="jp">Japan</option>
164164
</select>
165165
</label>

views/pages/proxnav/ultraviolet.html

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -95,11 +95,11 @@ <h3>Advanced Settings ▼</h3>
9595
</label>
9696
<label>
9797
Region Selection <span class="pr-tippy" data-tippy-content="Enable or select regional proxies.">(?) </span>
98-
<select>
98+
<select class="region-list">
9999
<option value="off">Off</option>
100100
<option value="eu">Europe</option>
101-
<option value="uswest">US-West</option>
102-
<option value="useast">US-East</option>
101+
<option value="usWest">US-West</option>
102+
<option value="usEast">US-East</option>
103103
<option value="jp">Japan</option>
104104
</select>
105105
</label>

0 commit comments

Comments
 (0)