chore(ckeditor5/plugins): integrate reference link

This commit is contained in:
Elian Doran 2025-05-03 17:00:24 +03:00
parent a54d8ed811
commit 2dcd37001f
No known key found for this signature in database
7 changed files with 45 additions and 25 deletions

View File

@ -20,5 +20,8 @@
},
"dependencies": {
"ckeditor5": "43.2.0"
},
"devDependencies": {
"@types/jquery": "3.5.32"
}
}

View File

@ -1,14 +1,22 @@
import "ckeditor5";
declare global {
var glob: {
getComponentByEl(el: unknown): {
interface Component {
triggerCommand(command: string): void;
};
}
interface EditorComponent extends Component {
loadReferenceLinkTitle($el: JQuery<HTMLElement>, href: string): Promise<void>;
}
var glob: {
getComponentByEl<T extends Component>(el: unknown): T;
getActiveContextNote(): {
noteId: string;
};
getHeaders(): Promise<Record<string, string>>;
getReferenceLinkTitle(href: string): Promise<string>;
getReferenceLinkTitleSync(href: string): string;
}
}

View File

@ -5,11 +5,13 @@ import UploadimagePlugin from "./plugins/uploadimage.js";
import ItalicAsEmPlugin from "./plugins/italic_as_em.js";
import StrikethroughAsDel from "./plugins/strikethrough_as_del.js";
import InternalLinkPlugin from "./plugins/internallink.js";
import ReferenceLink from "./plugins/referencelink.js";
const TRILIUM_PLUGINS: typeof Plugin[] = [
CutToNotePlugin,
ItalicAsEmPlugin,
StrikethroughAsDel,
ReferenceLink,
UploadimagePlugin,
InternalLinkPlugin
];
@ -71,7 +73,6 @@ export const COMMON_PLUGINS: typeof Plugin[] = [
// MarkdownImportPlugin,
// MentionCustomization,
// IncludeNote,
// ReferenceLink,
// indentBlockShortcutPlugin,
// removeFormatLinksPlugin,
PageBreak,

View File

@ -1,7 +1,13 @@
import { ButtonView, Plugin } from 'ckeditor5';
import internalLinkIcon from '../icons/trilium.svg?raw';
import ReferenceLink from './referencelink';
export default class InternalLinkPlugin extends Plugin {
static get requires() {
return [ ReferenceLink ];
}
init() {
const editor = this.editor;

View File

@ -1,7 +1,4 @@
import Plugin from '@ckeditor/ckeditor5-core/src/plugin';
import { toWidget, viewToModelPositionOutsideModelElement } from '@ckeditor/ckeditor5-widget/src/utils';
import Widget from '@ckeditor/ckeditor5-widget/src/widget';
import Command from '@ckeditor/ckeditor5-core/src/command';
import { Command, Element, Plugin, toWidget, viewToModelPositionOutsideModelElement, Widget } from "ckeditor5";
export default class ReferenceLink extends Plugin {
static get requires() {
@ -10,7 +7,8 @@ export default class ReferenceLink extends Plugin {
}
class ReferenceLinkCommand extends Command {
execute( { href } ) {
execute({ href }: { href: string }) {
if (!href?.trim()) {
return;
}
@ -34,8 +32,7 @@ class ReferenceLinkCommand extends Command {
refresh() {
const model = this.editor.model;
const selection = model.document.selection;
this.isEnabled = model.schema.checkChild(selection.focus.parent, 'reference');
this.isEnabled = selection.focus !== null && model.schema.checkChild(selection.focus.parent as Element, 'reference');
}
}
@ -92,7 +89,7 @@ class ReferenceLinkEditing extends Plugin {
conversion.for( 'editingDowncast' ).elementToElement( {
model: 'reference',
view: ( modelItem, { writer: viewWriter } ) => {
const href = modelItem.getAttribute( 'href' );
const href = modelItem.getAttribute('href') as string;
const referenceLinkView = viewWriter.createContainerElement( 'a', {
href,
@ -106,7 +103,7 @@ class ReferenceLinkEditing extends Plugin {
const domElement = this.toDomElement( domDocument );
const editorEl = editor.editing.view.getDomRoot();
const component = glob.getComponentByEl(editorEl);
const component = glob.getComponentByEl<EditorComponent>(editorEl);
component.loadReferenceLinkTitle($(domElement), href);
@ -123,7 +120,7 @@ class ReferenceLinkEditing extends Plugin {
conversion.for( 'dataDowncast' ).elementToElement( {
model: 'reference',
view: ( modelItem, { writer: viewWriter } ) => {
const href = modelItem.getAttribute( 'href' );
const href = modelItem.getAttribute('href') as string;
const referenceLinkView = viewWriter.createContainerElement( 'a', {
href: href,

View File

@ -11,7 +11,8 @@
"forceConsistentCasingInFileNames": true,
"lib": ["DOM", "ES2015"],
"types": [
"vite/client"
"vite/client",
"jquery"
]
},
"include": [

24
pnpm-lock.yaml generated
View File

@ -374,7 +374,7 @@ importers:
version: 1.0.2
copy-webpack-plugin:
specifier: 13.0.0
version: 13.0.0(webpack@5.99.7(@swc/core@1.5.29(@swc/helpers@0.5.17))(esbuild@0.25.3)(webpack-cli@6.0.1))
version: 13.0.0(webpack@5.99.7(@swc/core@1.5.29(@swc/helpers@0.5.17))(esbuild@0.25.3)(webpack-cli@6.0.1(webpack@5.98.0)))
electron:
specifier: 35.2.2
version: 35.2.2
@ -430,7 +430,7 @@ importers:
version: 11.0.4
copy-webpack-plugin:
specifier: 13.0.0
version: 13.0.0(webpack@5.99.7(@swc/core@1.5.29(@swc/helpers@0.5.17))(esbuild@0.25.3)(webpack-cli@6.0.1))
version: 13.0.0(webpack@5.99.7(@swc/core@1.5.29(@swc/helpers@0.5.17))(esbuild@0.25.3)(webpack-cli@6.0.1(webpack@5.98.0)))
electron:
specifier: 35.2.2
version: 35.2.2
@ -608,7 +608,7 @@ importers:
version: 1.4.7
copy-webpack-plugin:
specifier: 13.0.0
version: 13.0.0(webpack@5.99.7(@swc/core@1.5.29(@swc/helpers@0.5.17))(esbuild@0.25.3)(webpack-cli@6.0.1))
version: 13.0.0(webpack@5.99.7(@swc/core@1.5.29(@swc/helpers@0.5.17))(esbuild@0.25.3)(webpack-cli@6.0.1(webpack@5.98.0)))
csrf-csrf:
specifier: 3.2.2
version: 3.2.2
@ -779,7 +779,7 @@ importers:
version: 1.0.1
webpack:
specifier: 5.99.7
version: 5.99.7(@swc/core@1.5.29(@swc/helpers@0.5.17))(esbuild@0.25.3)(webpack-cli@6.0.1)
version: 5.99.7(@swc/core@1.5.29(@swc/helpers@0.5.17))(esbuild@0.25.3)(webpack-cli@6.0.1(webpack@5.98.0))
ws:
specifier: 8.18.1
version: 8.18.1(bufferutil@4.0.9)(utf-8-validate@6.0.5)
@ -801,6 +801,10 @@ importers:
ckeditor5:
specifier: 43.2.0
version: 43.2.0
devDependencies:
'@types/jquery':
specifier: 3.5.32
version: 3.5.32
packages/commons:
dependencies:
@ -16953,14 +16957,14 @@ snapshots:
serialize-javascript: 6.0.2
webpack: 5.98.0(@swc/core@1.5.29(@swc/helpers@0.5.17))(esbuild@0.25.3)(webpack-cli@6.0.1)
copy-webpack-plugin@13.0.0(webpack@5.99.7(@swc/core@1.5.29(@swc/helpers@0.5.17))(esbuild@0.25.3)(webpack-cli@6.0.1)):
copy-webpack-plugin@13.0.0(webpack@5.99.7(@swc/core@1.5.29(@swc/helpers@0.5.17))(esbuild@0.25.3)(webpack-cli@6.0.1(webpack@5.98.0))):
dependencies:
glob-parent: 6.0.2
normalize-path: 3.0.0
schema-utils: 4.3.2
serialize-javascript: 6.0.2
tinyglobby: 0.2.13
webpack: 5.99.7(@swc/core@1.5.29(@swc/helpers@0.5.17))(esbuild@0.25.3)(webpack-cli@6.0.1)
webpack: 5.99.7(@swc/core@1.5.29(@swc/helpers@0.5.17))(esbuild@0.25.3)(webpack-cli@6.0.1(webpack@5.98.0))
core-js-compat@3.41.0:
dependencies:
@ -22879,14 +22883,14 @@ snapshots:
'@swc/core': 1.5.29(@swc/helpers@0.5.17)
esbuild: 0.25.3
terser-webpack-plugin@5.3.14(@swc/core@1.5.29(@swc/helpers@0.5.17))(esbuild@0.25.3)(webpack@5.99.7(@swc/core@1.5.29(@swc/helpers@0.5.17))(esbuild@0.25.3)(webpack-cli@6.0.1)):
terser-webpack-plugin@5.3.14(@swc/core@1.5.29(@swc/helpers@0.5.17))(esbuild@0.25.3)(webpack@5.99.7(@swc/core@1.5.29(@swc/helpers@0.5.17))(esbuild@0.25.3)(webpack-cli@6.0.1(webpack@5.98.0))):
dependencies:
'@jridgewell/trace-mapping': 0.3.25
jest-worker: 27.5.1
schema-utils: 4.3.2
serialize-javascript: 6.0.2
terser: 5.39.0
webpack: 5.99.7(@swc/core@1.5.29(@swc/helpers@0.5.17))(esbuild@0.25.3)(webpack-cli@6.0.1)
webpack: 5.99.7(@swc/core@1.5.29(@swc/helpers@0.5.17))(esbuild@0.25.3)(webpack-cli@6.0.1(webpack@5.98.0))
optionalDependencies:
'@swc/core': 1.5.29(@swc/helpers@0.5.17)
esbuild: 0.25.3
@ -23668,7 +23672,7 @@ snapshots:
- esbuild
- uglify-js
webpack@5.99.7(@swc/core@1.5.29(@swc/helpers@0.5.17))(esbuild@0.25.3)(webpack-cli@6.0.1):
webpack@5.99.7(@swc/core@1.5.29(@swc/helpers@0.5.17))(esbuild@0.25.3)(webpack-cli@6.0.1(webpack@5.98.0)):
dependencies:
'@types/eslint-scope': 3.7.7
'@types/estree': 1.0.7
@ -23691,7 +23695,7 @@ snapshots:
neo-async: 2.6.2
schema-utils: 4.3.2
tapable: 2.2.1
terser-webpack-plugin: 5.3.14(@swc/core@1.5.29(@swc/helpers@0.5.17))(esbuild@0.25.3)(webpack@5.99.7(@swc/core@1.5.29(@swc/helpers@0.5.17))(esbuild@0.25.3)(webpack-cli@6.0.1))
terser-webpack-plugin: 5.3.14(@swc/core@1.5.29(@swc/helpers@0.5.17))(esbuild@0.25.3)(webpack@5.99.7(@swc/core@1.5.29(@swc/helpers@0.5.17))(esbuild@0.25.3)(webpack-cli@6.0.1(webpack@5.98.0)))
watchpack: 2.4.2
webpack-sources: 3.2.3
optionalDependencies: