mirror of
https://github.com/ksyasuda/SubMiner.git
synced 2026-09-23 05:16:23 -07:00
fix(dictionary): keep Hachidori lookup highlight on in SubMiner builds
Hachidori's overlay-mode first-install options turn off "Highlight the word on the page" because GSM-style hosts screenshot the see-through viewport. SubMiner captures media from mpv, and without the highlight the subtitle sidebar gave no sign of which word was looked up or where the match ended. The staged copy now seeds the highlight on; the fork source is unchanged.
This commit is contained in:
+24
-10
@@ -31,17 +31,31 @@ fs.rmSync(output, { recursive: true, force: true });
|
||||
fs.mkdirSync(output, { recursive: true });
|
||||
fs.cpSync(extension, output, { recursive: true });
|
||||
// Host configuration belongs in the staged copy, leaving the fork usable in Chrome.
|
||||
const overlayPath = path.join(output, 'overlay-mode.js');
|
||||
let overlay = fs.readFileSync(overlayPath, 'utf8');
|
||||
for (const [original, replacement] of [
|
||||
['export const OVERLAY_MODE = false;', 'export const OVERLAY_MODE = true;'],
|
||||
['customJavaScript: !IS_FIREFOX,', 'customJavaScript: false,'],
|
||||
]) {
|
||||
if (!overlay.includes(original))
|
||||
throw new Error(`Hachidori host configuration changed upstream: ${original}`);
|
||||
overlay = overlay.replace(original, replacement);
|
||||
const hostConfiguration = {
|
||||
'overlay-mode.js': [
|
||||
['export const OVERLAY_MODE = false;', 'export const OVERLAY_MODE = true;'],
|
||||
['customJavaScript: !IS_FIREFOX,', 'customJavaScript: false,'],
|
||||
],
|
||||
// Overlay hosts seed the lookup highlight off because their Anki screenshot is
|
||||
// the see-through viewport. SubMiner captures media from mpv, and without the
|
||||
// highlight the sidebar shows nothing for the word being looked up.
|
||||
'setup-state.js': [
|
||||
[
|
||||
'lookupMode: "hover",\n sourceHighlightEnabled: false,',
|
||||
'lookupMode: "hover",\n sourceHighlightEnabled: true,',
|
||||
],
|
||||
],
|
||||
};
|
||||
for (const [file, replacements] of Object.entries(hostConfiguration)) {
|
||||
const filePath = path.join(output, file);
|
||||
let text = fs.readFileSync(filePath, 'utf8');
|
||||
for (const [original, replacement] of replacements) {
|
||||
if (!text.includes(original))
|
||||
throw new Error(`Hachidori host configuration changed upstream: ${original}`);
|
||||
text = text.replace(original, replacement);
|
||||
}
|
||||
fs.writeFileSync(filePath, text);
|
||||
}
|
||||
fs.writeFileSync(overlayPath, overlay);
|
||||
manifest.permissions = manifest.permissions.filter((permission) => permission !== 'userScripts');
|
||||
fs.writeFileSync(path.join(output, 'manifest.json'), JSON.stringify(manifest, null, 2) + '\n');
|
||||
for (const file of ['LICENSE', 'SOURCE.json', 'README.md']) {
|
||||
|
||||
@@ -5,7 +5,7 @@ import { fileURLToPath } from 'node:url';
|
||||
import test from 'node:test';
|
||||
|
||||
test('Hachidori staging configures Electron without changing the fork source', async () => {
|
||||
const files = ['overlay-mode.js', 'manifest.json'];
|
||||
const files = ['overlay-mode.js', 'setup-state.js', 'manifest.json'];
|
||||
const source = (file: string) =>
|
||||
new URL(`../vendor/hachidori/extension/${file}`, import.meta.url);
|
||||
const before = files.map((file) => readFileSync(source(file), 'utf8'));
|
||||
@@ -24,6 +24,14 @@ test('Hachidori staging configures Electron without changing the fork source', a
|
||||
const original = await import(source('overlay-mode.js').href);
|
||||
assert.equal(original.OVERLAY_MODE, false);
|
||||
assert.equal(original.HOST_CAPABILITIES.customJavaScript, true);
|
||||
// SubMiner mines media from mpv, not the overlay viewport, so the lookup
|
||||
// highlight stays on for a first install.
|
||||
const stagedSetup = await import(
|
||||
new URL('../build/hachidori/setup-state.js', import.meta.url).href
|
||||
);
|
||||
assert.equal(stagedSetup.OVERLAY_MODE_OPTIONS.sourceHighlightEnabled, true);
|
||||
const originalSetup = await import(source('setup-state.js').href);
|
||||
assert.equal(originalSetup.OVERLAY_MODE_OPTIONS.sourceHighlightEnabled, false);
|
||||
const manifest = JSON.parse(
|
||||
readFileSync(new URL('../build/hachidori/manifest.json', import.meta.url), 'utf8'),
|
||||
);
|
||||
|
||||
Reference in New Issue
Block a user