logseq import plugin

This commit is contained in:
th committed 2026-04-11 01:45:36 +02:00
1 parent 3ae84ccdd7
commit 5af49655d6
11 files changed
+301 -193

No files matched your search

+8 -3
View File
@@ -9,17 +9,22 @@
const hyprcrd = window.hyprcrd;
// Cache-bust the test modules so edits to test files are picked up without
// a hard refresh. The browser treats each unique URL as a distinct module,
// so a fresh query string on each page load forces re-import.
const V = '?v=' + Date.now();
// Auto-load if ?test in query string
if (new URLSearchParams(location.search).has('test')) {
import('./tests.js');
import('./tests.js' + V);
}
// Keyboard shortcut: Ctrl+Shift+T → open runner
document.addEventListener('keydown', e => {
if (e.ctrlKey && e.shiftKey && e.key === 'T') {
e.preventDefault();
import('./tests.js').then(() =>
import('./runner.js').then(m => m.open?.())
import('./tests.js' + V).then(() =>
import('./runner.js' + V).then(m => m.open?.())
);
}
});
+1 -2
View File
@@ -13,7 +13,7 @@ describe('App Shell', () => {
});
it('footer buttons', () => {
for (const id of ['settings-btn', 'export-btn', 'import-btn', 'logout-btn', 'export-md-btn', 'import-logseq-btn']) {
for (const id of ['settings-btn', 'export-btn', 'import-btn', 'logout-btn', 'export-md-btn']) {
expect($(`#${id}`)).toExist();
}
});
@@ -38,6 +38,5 @@ describe('App Shell', () => {
it('hidden file inputs', () => {
expect($('#import-file')).toExist();
expect($('#import-logseq-file')).toExist();
});
});
+52 -42
View File
@@ -1,44 +1,54 @@
// ── hyprcrd Test Index ──
// Imports all test suites. Add new test files here.
//
// Loads all test suites via dynamic imports with a shared cache-busting
// query string. This ensures edits to any test file are picked up without
// requiring a hard refresh — each module URL becomes unique per page load.
import './shell.test.js';
import './settings.test.js';
import './board.test.js';
import './toolbar.test.js';
import './buckets.test.js';
import './bucket-context.test.js';
import './context-menu.test.js';
import './card-interactions.test.js';
import './filtering.test.js';
import './sorting.test.js';
import './state-functions.test.js';
import './favorites.test.js';
import './search.test.js';
import './search-logic.test.js';
import './calendar.test.js';
import './calendar-popup.test.js';
import './rrule.test.js';
import './datepicker.test.js';
import './gallery.test.js';
import './help.test.js';
import './multiselect.test.js';
import './detail.test.js';
import './detail-interactions.test.js';
import './editor.test.js';
import './editor-features.test.js';
import './editor-save.test.js';
import './editor-toolbar.test.js';
import './line-numbers.test.js';
import './canvas.test.js';
import './snippets.test.js';
import './image-fullscreen.test.js';
import './markdown.test.js';
import './markdown-edge.test.js';
import './undo.test.js';
import './api.test.js';
import './api-edge.test.js';
import './export.test.js';
import './relay.test.js';
import './notifications.test.js';
import './quick-capture.test.js';
import './theme.test.js';
const V = '?v=' + Date.now();
const FILES = [
'./shell.test.js',
'./settings.test.js',
'./board.test.js',
'./toolbar.test.js',
'./buckets.test.js',
'./bucket-context.test.js',
'./context-menu.test.js',
'./card-interactions.test.js',
'./filtering.test.js',
'./sorting.test.js',
'./state-functions.test.js',
'./favorites.test.js',
'./search.test.js',
'./search-logic.test.js',
'./calendar.test.js',
'./calendar-popup.test.js',
'./rrule.test.js',
'./datepicker.test.js',
'./gallery.test.js',
'./help.test.js',
'./multiselect.test.js',
'./detail.test.js',
'./detail-interactions.test.js',
'./editor.test.js',
'./editor-features.test.js',
'./editor-save.test.js',
'./editor-toolbar.test.js',
'./line-numbers.test.js',
'./canvas.test.js',
'./snippets.test.js',
'./image-fullscreen.test.js',
'./markdown.test.js',
'./markdown-edge.test.js',
'./undo.test.js',
'./api.test.js',
'./api-edge.test.js',
'./export.test.js',
'./relay.test.js',
'./notifications.test.js',
'./quick-capture.test.js',
'./theme.test.js',
];
// Await all imports so the runner can start in a deterministic state.
await Promise.all(FILES.map(f => import(f + V)));