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": {
|
"dependencies": {
|
||||||
"ckeditor5": "43.2.0"
|
"ckeditor5": "43.2.0"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"@types/jquery": "3.5.32"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,14 +1,22 @@
|
|||||||
import "ckeditor5";
|
import "ckeditor5";
|
||||||
|
|
||||||
declare global {
|
declare global {
|
||||||
|
interface Component {
|
||||||
|
triggerCommand(command: string): void;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface EditorComponent extends Component {
|
||||||
|
loadReferenceLinkTitle($el: JQuery<HTMLElement>, href: string): Promise<void>;
|
||||||
|
}
|
||||||
|
|
||||||
var glob: {
|
var glob: {
|
||||||
getComponentByEl(el: unknown): {
|
getComponentByEl<T extends Component>(el: unknown): T;
|
||||||
triggerCommand(command: string): void;
|
|
||||||
};
|
|
||||||
getActiveContextNote(): {
|
getActiveContextNote(): {
|
||||||
noteId: string;
|
noteId: string;
|
||||||
};
|
};
|
||||||
getHeaders(): Promise<Record<string, 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 ItalicAsEmPlugin from "./plugins/italic_as_em.js";
|
||||||
import StrikethroughAsDel from "./plugins/strikethrough_as_del.js";
|
import StrikethroughAsDel from "./plugins/strikethrough_as_del.js";
|
||||||
import InternalLinkPlugin from "./plugins/internallink.js";
|
import InternalLinkPlugin from "./plugins/internallink.js";
|
||||||
|
import ReferenceLink from "./plugins/referencelink.js";
|
||||||
|
|
||||||
const TRILIUM_PLUGINS: typeof Plugin[] = [
|
const TRILIUM_PLUGINS: typeof Plugin[] = [
|
||||||
CutToNotePlugin,
|
CutToNotePlugin,
|
||||||
ItalicAsEmPlugin,
|
ItalicAsEmPlugin,
|
||||||
StrikethroughAsDel,
|
StrikethroughAsDel,
|
||||||
|
ReferenceLink,
|
||||||
UploadimagePlugin,
|
UploadimagePlugin,
|
||||||
InternalLinkPlugin
|
InternalLinkPlugin
|
||||||
];
|
];
|
||||||
@ -71,7 +73,6 @@ export const COMMON_PLUGINS: typeof Plugin[] = [
|
|||||||
// MarkdownImportPlugin,
|
// MarkdownImportPlugin,
|
||||||
// MentionCustomization,
|
// MentionCustomization,
|
||||||
// IncludeNote,
|
// IncludeNote,
|
||||||
// ReferenceLink,
|
|
||||||
// indentBlockShortcutPlugin,
|
// indentBlockShortcutPlugin,
|
||||||
// removeFormatLinksPlugin,
|
// removeFormatLinksPlugin,
|
||||||
PageBreak,
|
PageBreak,
|
||||||
|
@ -1,7 +1,13 @@
|
|||||||
import { ButtonView, Plugin } from 'ckeditor5';
|
import { ButtonView, Plugin } from 'ckeditor5';
|
||||||
import internalLinkIcon from '../icons/trilium.svg?raw';
|
import internalLinkIcon from '../icons/trilium.svg?raw';
|
||||||
|
import ReferenceLink from './referencelink';
|
||||||
|
|
||||||
export default class InternalLinkPlugin extends Plugin {
|
export default class InternalLinkPlugin extends Plugin {
|
||||||
|
|
||||||
|
static get requires() {
|
||||||
|
return [ ReferenceLink ];
|
||||||
|
}
|
||||||
|
|
||||||
init() {
|
init() {
|
||||||
const editor = this.editor;
|
const editor = this.editor;
|
||||||
|
|
||||||
|
@ -1,7 +1,4 @@
|
|||||||
import Plugin from '@ckeditor/ckeditor5-core/src/plugin';
|
import { Command, Element, Plugin, toWidget, viewToModelPositionOutsideModelElement, Widget } from "ckeditor5";
|
||||||
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';
|
|
||||||
|
|
||||||
export default class ReferenceLink extends Plugin {
|
export default class ReferenceLink extends Plugin {
|
||||||
static get requires() {
|
static get requires() {
|
||||||
@ -10,7 +7,8 @@ export default class ReferenceLink extends Plugin {
|
|||||||
}
|
}
|
||||||
|
|
||||||
class ReferenceLinkCommand extends Command {
|
class ReferenceLinkCommand extends Command {
|
||||||
execute( { href } ) {
|
|
||||||
|
execute({ href }: { href: string }) {
|
||||||
if (!href?.trim()) {
|
if (!href?.trim()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -34,8 +32,7 @@ class ReferenceLinkCommand extends Command {
|
|||||||
refresh() {
|
refresh() {
|
||||||
const model = this.editor.model;
|
const model = this.editor.model;
|
||||||
const selection = model.document.selection;
|
const selection = model.document.selection;
|
||||||
|
this.isEnabled = selection.focus !== null && model.schema.checkChild(selection.focus.parent as Element, 'reference');
|
||||||
this.isEnabled = model.schema.checkChild(selection.focus.parent, 'reference');
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -92,7 +89,7 @@ class ReferenceLinkEditing extends Plugin {
|
|||||||
conversion.for( 'editingDowncast' ).elementToElement( {
|
conversion.for( 'editingDowncast' ).elementToElement( {
|
||||||
model: 'reference',
|
model: 'reference',
|
||||||
view: ( modelItem, { writer: viewWriter } ) => {
|
view: ( modelItem, { writer: viewWriter } ) => {
|
||||||
const href = modelItem.getAttribute( 'href' );
|
const href = modelItem.getAttribute('href') as string;
|
||||||
|
|
||||||
const referenceLinkView = viewWriter.createContainerElement( 'a', {
|
const referenceLinkView = viewWriter.createContainerElement( 'a', {
|
||||||
href,
|
href,
|
||||||
@ -106,7 +103,7 @@ class ReferenceLinkEditing extends Plugin {
|
|||||||
const domElement = this.toDomElement( domDocument );
|
const domElement = this.toDomElement( domDocument );
|
||||||
|
|
||||||
const editorEl = editor.editing.view.getDomRoot();
|
const editorEl = editor.editing.view.getDomRoot();
|
||||||
const component = glob.getComponentByEl(editorEl);
|
const component = glob.getComponentByEl<EditorComponent>(editorEl);
|
||||||
|
|
||||||
component.loadReferenceLinkTitle($(domElement), href);
|
component.loadReferenceLinkTitle($(domElement), href);
|
||||||
|
|
||||||
@ -123,7 +120,7 @@ class ReferenceLinkEditing extends Plugin {
|
|||||||
conversion.for( 'dataDowncast' ).elementToElement( {
|
conversion.for( 'dataDowncast' ).elementToElement( {
|
||||||
model: 'reference',
|
model: 'reference',
|
||||||
view: ( modelItem, { writer: viewWriter } ) => {
|
view: ( modelItem, { writer: viewWriter } ) => {
|
||||||
const href = modelItem.getAttribute( 'href' );
|
const href = modelItem.getAttribute('href') as string;
|
||||||
|
|
||||||
const referenceLinkView = viewWriter.createContainerElement( 'a', {
|
const referenceLinkView = viewWriter.createContainerElement( 'a', {
|
||||||
href: href,
|
href: href,
|
@ -11,7 +11,8 @@
|
|||||||
"forceConsistentCasingInFileNames": true,
|
"forceConsistentCasingInFileNames": true,
|
||||||
"lib": ["DOM", "ES2015"],
|
"lib": ["DOM", "ES2015"],
|
||||||
"types": [
|
"types": [
|
||||||
"vite/client"
|
"vite/client",
|
||||||
|
"jquery"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"include": [
|
"include": [
|
||||||
|
24
pnpm-lock.yaml
generated
24
pnpm-lock.yaml
generated
@ -374,7 +374,7 @@ importers:
|
|||||||
version: 1.0.2
|
version: 1.0.2
|
||||||
copy-webpack-plugin:
|
copy-webpack-plugin:
|
||||||
specifier: 13.0.0
|
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:
|
electron:
|
||||||
specifier: 35.2.2
|
specifier: 35.2.2
|
||||||
version: 35.2.2
|
version: 35.2.2
|
||||||
@ -430,7 +430,7 @@ importers:
|
|||||||
version: 11.0.4
|
version: 11.0.4
|
||||||
copy-webpack-plugin:
|
copy-webpack-plugin:
|
||||||
specifier: 13.0.0
|
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:
|
electron:
|
||||||
specifier: 35.2.2
|
specifier: 35.2.2
|
||||||
version: 35.2.2
|
version: 35.2.2
|
||||||
@ -608,7 +608,7 @@ importers:
|
|||||||
version: 1.4.7
|
version: 1.4.7
|
||||||
copy-webpack-plugin:
|
copy-webpack-plugin:
|
||||||
specifier: 13.0.0
|
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:
|
csrf-csrf:
|
||||||
specifier: 3.2.2
|
specifier: 3.2.2
|
||||||
version: 3.2.2
|
version: 3.2.2
|
||||||
@ -779,7 +779,7 @@ importers:
|
|||||||
version: 1.0.1
|
version: 1.0.1
|
||||||
webpack:
|
webpack:
|
||||||
specifier: 5.99.7
|
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:
|
ws:
|
||||||
specifier: 8.18.1
|
specifier: 8.18.1
|
||||||
version: 8.18.1(bufferutil@4.0.9)(utf-8-validate@6.0.5)
|
version: 8.18.1(bufferutil@4.0.9)(utf-8-validate@6.0.5)
|
||||||
@ -801,6 +801,10 @@ importers:
|
|||||||
ckeditor5:
|
ckeditor5:
|
||||||
specifier: 43.2.0
|
specifier: 43.2.0
|
||||||
version: 43.2.0
|
version: 43.2.0
|
||||||
|
devDependencies:
|
||||||
|
'@types/jquery':
|
||||||
|
specifier: 3.5.32
|
||||||
|
version: 3.5.32
|
||||||
|
|
||||||
packages/commons:
|
packages/commons:
|
||||||
dependencies:
|
dependencies:
|
||||||
@ -16953,14 +16957,14 @@ snapshots:
|
|||||||
serialize-javascript: 6.0.2
|
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)
|
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:
|
dependencies:
|
||||||
glob-parent: 6.0.2
|
glob-parent: 6.0.2
|
||||||
normalize-path: 3.0.0
|
normalize-path: 3.0.0
|
||||||
schema-utils: 4.3.2
|
schema-utils: 4.3.2
|
||||||
serialize-javascript: 6.0.2
|
serialize-javascript: 6.0.2
|
||||||
tinyglobby: 0.2.13
|
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:
|
core-js-compat@3.41.0:
|
||||||
dependencies:
|
dependencies:
|
||||||
@ -22879,14 +22883,14 @@ snapshots:
|
|||||||
'@swc/core': 1.5.29(@swc/helpers@0.5.17)
|
'@swc/core': 1.5.29(@swc/helpers@0.5.17)
|
||||||
esbuild: 0.25.3
|
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:
|
dependencies:
|
||||||
'@jridgewell/trace-mapping': 0.3.25
|
'@jridgewell/trace-mapping': 0.3.25
|
||||||
jest-worker: 27.5.1
|
jest-worker: 27.5.1
|
||||||
schema-utils: 4.3.2
|
schema-utils: 4.3.2
|
||||||
serialize-javascript: 6.0.2
|
serialize-javascript: 6.0.2
|
||||||
terser: 5.39.0
|
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:
|
optionalDependencies:
|
||||||
'@swc/core': 1.5.29(@swc/helpers@0.5.17)
|
'@swc/core': 1.5.29(@swc/helpers@0.5.17)
|
||||||
esbuild: 0.25.3
|
esbuild: 0.25.3
|
||||||
@ -23668,7 +23672,7 @@ snapshots:
|
|||||||
- esbuild
|
- esbuild
|
||||||
- uglify-js
|
- 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:
|
dependencies:
|
||||||
'@types/eslint-scope': 3.7.7
|
'@types/eslint-scope': 3.7.7
|
||||||
'@types/estree': 1.0.7
|
'@types/estree': 1.0.7
|
||||||
@ -23691,7 +23695,7 @@ snapshots:
|
|||||||
neo-async: 2.6.2
|
neo-async: 2.6.2
|
||||||
schema-utils: 4.3.2
|
schema-utils: 4.3.2
|
||||||
tapable: 2.2.1
|
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
|
watchpack: 2.4.2
|
||||||
webpack-sources: 3.2.3
|
webpack-sources: 3.2.3
|
||||||
optionalDependencies:
|
optionalDependencies:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user