feat(dictionary): add Hachidori backend support (#266)

This commit is contained in:
sudacode authored and GitHub committed 2026-10-24 21:08:18 -07:00
1 parent e690ffba07
commit cbaa4626e1
143 files changed
+5564 -305

No files matched your search

+2 -2
View File
@@ -403,7 +403,7 @@ function buildFixedOverlaySections(): SessionHelpSection[] {
{ shortcut: 'Y then S', action: 'Start overlay' },
{ shortcut: 'Y then Shift + S', action: 'Stop overlay' },
{ shortcut: 'Y then T', action: 'Toggle visible overlay' },
{ shortcut: 'Y then O', action: 'Open Yomitan settings' },
{ shortcut: 'Y then O', action: 'Open dictionary settings' },
{ shortcut: 'Y then R', action: 'Restart overlay' },
{ shortcut: 'Y then C', action: 'Check overlay status' },
{ shortcut: 'Y then H/K', action: 'Open session help' },
@@ -412,7 +412,7 @@ function buildFixedOverlaySections(): SessionHelpSection[] {
},
{
title: 'Global shortcuts',
rows: [{ shortcut: 'Alt + Shift + Y', action: 'Open Yomitan settings' }],
rows: [{ shortcut: 'Alt + Shift + Y', action: 'Open dictionary settings' }],
},
];
}
+11 -6
View File
@@ -12,8 +12,7 @@ import {
hasSubtitleSidebarSelection,
} from './subtitle-sidebar-selection.js';
import {
YOMITAN_POPUP_HIDDEN_EVENT,
YOMITAN_POPUP_SHOWN_EVENT,
registerDictionaryPopupVisibilityListener,
isYomitanPopupVisible,
} from '../yomitan-popup.js';
@@ -850,12 +849,18 @@ export function createSubtitleSidebarModal(
syncEmbeddedSidebarLayout();
};
window.addEventListener('resize', resizeHandler);
window.addEventListener(YOMITAN_POPUP_SHOWN_EVENT, handleYomitanPopupShown);
window.addEventListener(YOMITAN_POPUP_HIDDEN_EVENT, handleYomitanPopupHidden);
const disposeShown = registerDictionaryPopupVisibilityListener(
'shown',
handleYomitanPopupShown,
);
const disposeHidden = registerDictionaryPopupVisibilityListener(
'hidden',
handleYomitanPopupHidden,
);
disposeDomEvents = () => {
window.removeEventListener('resize', resizeHandler);
window.removeEventListener(YOMITAN_POPUP_SHOWN_EVENT, handleYomitanPopupShown);
window.removeEventListener(YOMITAN_POPUP_HIDDEN_EVENT, handleYomitanPopupHidden);
disposeShown();
disposeHidden();
disposeDomEvents = null;
};
}
@@ -224,7 +224,7 @@ test('youtube track picker close restores focus and mouse-ignore state', () => {
assert.equal(state.youtubePickerModalOpen, false);
assert.deepEqual(notifications, ['youtube-track-picker']);
assert.deepEqual(frontendCommands, [{ type: 'refreshOptions' }]);
assert.deepEqual(frontendCommands, []);
assert.equal(overlay.classList.contains('interactive'), false);
assert.equal(overlayFocused, true);
assert.deepEqual(ignoreCalls, [{ ignore: true, forward: true }]);
@@ -1,6 +1,5 @@
import type { YoutubePickerOpenPayload } from '../../types';
import type { ModalStateReader, RendererContext } from '../context';
import { YOMITAN_POPUP_COMMAND_EVENT } from '../yomitan-popup.js';
function createOption(value: string, label: string): HTMLOptionElement {
const option = document.createElement('option');
@@ -191,13 +190,6 @@ export function createYoutubeTrackPickerModal(
ctx.dom.youtubePickerModal.classList.add('hidden');
ctx.dom.youtubePickerModal.setAttribute('aria-hidden', 'true');
window.electronAPI.notifyOverlayModalClosed('youtube-track-picker');
window.dispatchEvent(
new CustomEvent(YOMITAN_POPUP_COMMAND_EVENT, {
detail: {
type: 'refreshOptions',
},
}),
);
if (!options.modalStateReader.isAnyModalOpen()) {
ctx.dom.overlay.classList.remove('interactive');
}