mirror of
https://github.com/TriliumNext/Notes.git
synced 2025-07-27 18:12:29 +08:00
chore(ckeditor5/plugins): integrate reference link
This commit is contained in:
parent
a54d8ed811
commit
2dcd37001f
@ -20,5 +20,8 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"ckeditor5": "43.2.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/jquery": "3.5.32"
|
||||
}
|
||||
}
|
||||
|
@ -1,14 +1,22 @@
|
||||
import "ckeditor5";
|
||||
|
||||
declare global {
|
||||
interface Component {
|
||||
triggerCommand(command: string): void;
|
||||
}
|
||||
|
||||
interface EditorComponent extends Component {
|
||||
loadReferenceLinkTitle($el: JQuery<HTMLElement>, href: string): Promise<void>;
|
||||
}
|
||||
|
||||
var glob: {
|
||||
getComponentByEl(el: unknown): {
|
||||
triggerCommand(command: string): void;
|
||||
};
|
||||
getComponentByEl<T extends Component>(el: unknown): T;
|
||||
getActiveContextNote(): {
|
||||
noteId: string;
|
||||
};
|
||||
getHeaders(): Promise<Record<string, string>>;
|
||||
getReferenceLinkTitle(href: string): Promise<string>;
|
||||
getReferenceLinkTitleSync(href: string): string;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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,
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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,
|
@ -11,7 +11,8 @@
|
||||
"forceConsistentCasingInFileNames": true,
|
||||
"lib": ["DOM", "ES2015"],
|
||||
"types": [
|
||||
"vite/client"
|
||||
"vite/client",
|
||||
"jquery"
|
||||
]
|
||||
},
|
||||
"include": [
|
||||
|
24
pnpm-lock.yaml
generated
24
pnpm-lock.yaml
generated
@ -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:
|
||||
|
Loading…
x
Reference in New Issue
Block a user