chore(ckeditor5-admonition): integrate code structure

This commit is contained in:
Elian Doran 2025-05-04 18:53:18 +03:00
parent 19168934bf
commit b0169d58ae
No known key found for this signature in database
27 changed files with 56 additions and 287 deletions

View File

@ -1,4 +0,0 @@
Changelog
=========
All changes in the package are documented in https://github.com/ckeditor/ckeditor5/blob/master/CHANGELOG.md.

View File

@ -1,4 +0,0 @@
Contributing
========================================
See the [official contributors' guide to CKEditor 5](https://ckeditor.com/docs/ckeditor5/latest/framework/contributing/contributing.html) to learn more.

View File

@ -1,17 +0,0 @@
Software License Agreement
==========================
**CKEditor&nbsp;5 block quote feature** https://github.com/ckeditor/ckeditor5-block-quote <br>
Copyright (c) 20032024, [CKSource Holding sp. z o.o.](https://cksource.com) All rights reserved.
Licensed under the terms of [GNU General Public License Version 2 or later](http://www.gnu.org/licenses/gpl.html).
Sources of Intellectual Property Included in CKEditor
-----------------------------------------------------
Where not otherwise indicated, all CKEditor content is authored by CKSource engineers and consists of CKSource-owned intellectual property. In some specific instances, CKEditor will incorporate work done by developers outside of CKSource with their express permission.
Trademarks
----------
**CKEditor** is a trademark of [CKSource Holding sp. z o.o.](https://cksource.com) All other brand and product names are trademarks, registered trademarks, or service marks of their respective holders.

View File

@ -1,26 +0,0 @@
CKEditor&nbsp;5 block quote feature
========================================
[![npm version](https://badge.fury.io/js/%40ckeditor%2Fckeditor5-block-quote.svg)](https://www.npmjs.com/package/@ckeditor/ckeditor5-block-quote)
[![Coverage Status](https://coveralls.io/repos/github/ckeditor/ckeditor5/badge.svg?branch=master)](https://coveralls.io/github/ckeditor/ckeditor5?branch=master)
[![Build Status](https://travis-ci.com/ckeditor/ckeditor5.svg?branch=master)](https://app.travis-ci.com/github/ckeditor/ckeditor5)
This package implements block quote support for CKEditor&nbsp;5.
## Demo
Check out the [demo in the block quote feature guide](https://ckeditor.com/docs/ckeditor5/latest/features/block-quote.html#demo).
## Documentation
See the [`@ckeditor/ckeditor5-block-quote` package](https://ckeditor.com/docs/ckeditor5/latest/api/block-quote.html) page in [CKEditor&nbsp;5 documentation](https://ckeditor.com/docs/ckeditor5/latest/).
## Installation
```bash
npm install ckeditor5
```
## License
Licensed under the terms of [GNU General Public License Version 2 or later](http://www.gnu.org/licenses/gpl.html). For full details about the license, please check the `LICENSE.md` file or [https://ckeditor.com/legal/ckeditor-oss-license](https://ckeditor.com/legal/ckeditor-oss-license).

View File

@ -1,23 +0,0 @@
{
"plugins": [
{
"name": "Admonitions",
"className": "Admonition",
"description": "Implements admonitions (warning, info boxes) in a similar fashion to blockquotes",
"docs": "features/block-quote.html",
"path": "src/admonition.js",
"uiComponents": [
{
"type": "Button",
"name": "admonition",
"iconPath": "theme/icons/admonition.svg"
}
],
"htmlOutput": [
{
"elements": "aside"
}
]
}
]
}

View File

@ -1,3 +0,0 @@
{
"Admonition": "Toolbar button tooltip for the Admonition feature."
}

View File

@ -1,62 +0,0 @@
{
"name": "@ckeditor/ckeditor5-admonition",
"version": "43.2.0",
"description": "Admonition (info box, warning box) feature for CKEditor 5.",
"keywords": [
"ckeditor",
"ckeditor5",
"ckeditor 5",
"ckeditor5-feature",
"ckeditor5-plugin",
"ckeditor5-dll"
],
"type": "module",
"main": "src/index.ts",
"dependencies": {
"@ckeditor/ckeditor5-core": "43.2.0",
"@ckeditor/ckeditor5-enter": "43.2.0",
"@ckeditor/ckeditor5-typing": "43.2.0",
"@ckeditor/ckeditor5-ui": "43.2.0",
"@ckeditor/ckeditor5-utils": "43.2.0",
"ckeditor5": "43.2.0"
},
"devDependencies": {
"@ckeditor/ckeditor5-basic-styles": "43.2.0",
"@ckeditor/ckeditor5-dev-utils": "^43.0.0",
"@ckeditor/ckeditor5-editor-classic": "43.2.0",
"@ckeditor/ckeditor5-engine": "43.2.0",
"@ckeditor/ckeditor5-heading": "43.2.0",
"@ckeditor/ckeditor5-image": "43.2.0",
"@ckeditor/ckeditor5-list": "43.2.0",
"@ckeditor/ckeditor5-paragraph": "43.2.0",
"@ckeditor/ckeditor5-table": "43.2.0",
"@ckeditor/ckeditor5-theme-lark": "43.2.0",
"typescript": "5.0.4",
"webpack": "^5.94.0",
"webpack-cli": "^5.1.4"
},
"author": "CKSource (http://cksource.com/)",
"license": "GPL-2.0-or-later",
"homepage": "https://ckeditor.com/ckeditor-5",
"bugs": "https://github.com/ckeditor/ckeditor5/issues",
"repository": {
"type": "git",
"url": "https://github.com/ckeditor/ckeditor5.git",
"directory": "packages/ckeditor5-admonition"
},
"files": [
"dist",
"lang",
"src/**/*.js",
"src/**/*.d.ts",
"theme",
"build",
"ckeditor5-metadata.json",
"CHANGELOG.md"
],
"scripts": {
"dll:build": "webpack",
"build": "tsc -p ./tsconfig.json",
"build:dist": "node ../../scripts/build-package.mjs"
}
}

View File

@ -1,40 +0,0 @@
/**
* @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
* For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
*/
/**
* @module admonition/admonition
*/
import { Plugin } from 'ckeditor5/src/core.js';
import AdmonitionEditing from './admonitionediting.js';
import AdmonitionUI from './admonitionui.js';
import AdmonitionAutoformat from './admonitionautoformat.js';
/**
* The block quote plugin.
*
* For more information about this feature check the {@glink api/block-quote package page}.
*
* This is a "glue" plugin which loads the {@link module:block-quote/blockquoteediting~BlockQuoteEditing block quote editing feature}
* and {@link module:block-quote/blockquoteui~BlockQuoteUI block quote UI feature}.
*
* @extends module:core/plugin~Plugin
*/
export default class Admonition extends Plugin {
/**
* @inheritDoc
*/
public static get requires() {
return [ AdmonitionEditing, AdmonitionUI, AdmonitionAutoformat ] as const;
}
/**
* @inheritDoc
*/
public static get pluginName() {
return 'Admonition' as const;
}
}

View File

@ -1,23 +0,0 @@
/**
* @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
* For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
*/
import type {
Admonition,
AdmonitionCommand,
AdmonitionEditing,
AdmonitionUI
} from './index.js';
declare module '@ckeditor/ckeditor5-core' {
interface PluginsMap {
[ Admonition.pluginName ]: Admonition;
[ AdmonitionEditing.pluginName ]: AdmonitionEditing;
[ AdmonitionUI.pluginName ]: AdmonitionUI;
}
interface CommandsMap {
admonition: AdmonitionCommand;
}
}

View File

@ -1,16 +0,0 @@
/**
* @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
* For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
*/
/**
* @module admonition
*/
export { default as Admonition } from './admonition.js';
export { default as AdmonitionEditing } from './admonitionediting.js';
export { default as AdmonitionUI } from './admonitionui.js';
export { default as AdmonitionAutoformat } from './admonitionautoformat.js';
export type { default as AdmonitionCommand } from './admonitioncommand.js';
import './augmentation.js';

View File

@ -1,12 +0,0 @@
{
"extends": "../../tsconfig.dist.json",
"compilerOptions": {
"rootDir": "src",
"types": [
"../../typings/types"
]
},
"include": [
"src"
]
}

View File

@ -1,10 +0,0 @@
{
"extends": "../../tsconfig.release.json",
"include": [
"src",
"../../typings"
],
"exclude": [
"tests"
]
}

View File

@ -1,19 +0,0 @@
/**
* @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
* For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
*/
'use strict';
/* eslint-env node */
const { builds } = require( '@ckeditor/ckeditor5-dev-utils' );
const webpack = require( 'webpack' );
module.exports = builds.getDllPluginWebpackConfig( webpack, {
themePath: require.resolve( '@ckeditor/ckeditor5-theme-lark' ),
packagePath: __dirname,
manifestPath: require.resolve( 'ckeditor5/build/ckeditor5-dll.manifest.json' ),
isDevelopmentMode: process.argv.includes( '--mode=development' ),
tsconfigPath: require.resolve( 'ckeditor5/tsconfig.dll.json' )
} );

View File

@ -3,7 +3,7 @@
{ {
"name": "Admonition", "name": "Admonition",
"className": "Admonition", "className": "Admonition",
"description": "Adds text to the editor.", "description": "Implements admonitions (warning, info boxes) in a similar fashion to blockquotes",
"path": "src/admonition.ts", "path": "src/admonition.ts",
"uiComponents": [ "uiComponents": [
{ {
@ -11,7 +11,12 @@
"type": "Button", "type": "Button",
"iconPath": "theme/icons/ckeditor.svg" "iconPath": "theme/icons/ckeditor.svg"
} }
] ],
"htmlOutput": [
{
"elements": "aside"
}
]
} }
] ]
} }

View File

@ -1,3 +1,3 @@
{ {
"Admonition": "Content for a tooltip is displayed when a user hovers the CKEditor 5 icon." "Admonition": "Toolbar button tooltip for the Admonition feature."
} }

View File

@ -1,7 +1,7 @@
{ {
"name": "@triliumnext/ckeditor5-admonition", "name": "@triliumnext/ckeditor5-admonition",
"version": "0.0.1", "version": "1.0.0",
"description": "A plugin for CKEditor 5.", "description": "Admonition (info box, warning box) feature for CKEditor 5.",
"keywords": [ "keywords": [
"ckeditor", "ckeditor",
"ckeditor5", "ckeditor5",
@ -23,7 +23,6 @@
"./browser/*": null, "./browser/*": null,
"./package.json": "./package.json" "./package.json": "./package.json"
}, },
"license": "MIT",
"engines": { "engines": {
"node": ">=18.0.0", "node": ">=18.0.0",
"npm": ">=5.7.1" "npm": ">=5.7.1"
@ -59,6 +58,8 @@
"peerDependencies": { "peerDependencies": {
"ckeditor5": "43.2.0" "ckeditor5": "43.2.0"
}, },
"author": "Elian Doran <contact@eliandoran.me>",
"license": "GPL-2.0-or-later",
"scripts": { "scripts": {
"build:dist": "node ./scripts/build-dist.mjs", "build:dist": "node ./scripts/build-dist.mjs",
"ts:build": "tsc -p ./tsconfig.release.json", "ts:build": "tsc -p ./tsconfig.release.json",

View File

@ -1,8 +1,16 @@
import { Plugin, ButtonView } from 'ckeditor5'; import { Plugin, ButtonView } from 'ckeditor5';
import ckeditor5Icon from '../theme/icons/ckeditor.svg'; import admonitionIcon from '../theme/icons/admonition.svg';
import AdmonitionEditing from './admonitionediting.js';
import AdmonitionUI from './admonitionui.js';
import AdmonitionAutoformat from './admonitionautoformat.js';
export default class Admonition extends Plugin { export default class Admonition extends Plugin {
public static get requires() {
return [ AdmonitionEditing, AdmonitionUI, AdmonitionAutoformat ] as const;
}
public static get pluginName() { public static get pluginName() {
return 'Admonition' as const; return 'Admonition' as const;
} }
@ -18,7 +26,7 @@ export default class Admonition extends Plugin {
view.set( { view.set( {
label: t( 'Admonition' ), label: t( 'Admonition' ),
icon: ckeditor5Icon, icon: admonitionIcon,
tooltip: true tooltip: true
} ); } );

View File

@ -1,7 +1,5 @@
import Plugin from "@ckeditor/ckeditor5-core/src/plugin"; import { Autoformat, blockAutoformatEditing, Plugin } from "ckeditor5";
import Autoformat from "@ckeditor/ckeditor5-autoformat/src/autoformat"; import { AdmonitionType, ADMONITION_TYPES } from "./admonitioncommand.js";
import blockAutoformatEditing from "@ckeditor/ckeditor5-autoformat/src/blockautoformatediting";
import { AdmonitionType, ADMONITION_TYPES } from "./admonitioncommand";
function tryParseAdmonitionType(match: RegExpMatchArray) { function tryParseAdmonitionType(match: RegExpMatchArray) {
if (match.length !== 2) { if (match.length !== 2) {
@ -14,6 +12,7 @@ function tryParseAdmonitionType(match: RegExpMatchArray) {
} }
export default class AdmonitionAutoformat extends Plugin { export default class AdmonitionAutoformat extends Plugin {
static get requires() { static get requires() {
return [ Autoformat ]; return [ Autoformat ];
} }

View File

@ -7,9 +7,8 @@
* @module admonition/admonitioncommand * @module admonition/admonitioncommand
*/ */
import { Command } from 'ckeditor5/src/core.js'; import { Command, first } from 'ckeditor5';
import { first } from 'ckeditor5/src/utils.js'; import type { DocumentFragment, Element, Position, Range, Schema, Writer } from 'ckeditor5';
import type { DocumentFragment, Element, Position, Range, Schema, Writer } from 'ckeditor5/src/engine.js';
/** /**
* The block quote command plugin. * The block quote command plugin.

View File

@ -7,10 +7,7 @@
* @module admonition/admonitionediting * @module admonition/admonitionediting
*/ */
import { Plugin } from 'ckeditor5/src/core.js'; import { Delete, Enter, Plugin, ViewDocumentDeleteEvent, ViewDocumentEnterEvent } from 'ckeditor5';
import { Enter, type ViewDocumentEnterEvent } from 'ckeditor5/src/enter.js';
import { Delete, type ViewDocumentDeleteEvent } from 'ckeditor5/src/typing.js';
import AdmonitionCommand, { AdmonitionType, ADMONITION_TYPES, DEFAULT_ADMONITION_TYPE, ADMONITION_TYPE_ATTRIBUTE } from './admonitioncommand.js'; import AdmonitionCommand, { AdmonitionType, ADMONITION_TYPES, DEFAULT_ADMONITION_TYPE, ADMONITION_TYPE_ATTRIBUTE } from './admonitioncommand.js';
/** /**
@ -136,7 +133,10 @@ export default class AdmonitionEditing extends Plugin {
const viewDocument = this.editor.editing.view.document; const viewDocument = this.editor.editing.view.document;
const selection = editor.model.document.selection; const selection = editor.model.document.selection;
const admonitionCommand: AdmonitionCommand = editor.commands.get( 'admonition' )!; const admonitionCommand = editor.commands.get( 'admonition' );
if (!admonitionCommand) {
return;
}
// Overwrite default Enter key behavior. // Overwrite default Enter key behavior.
// If Enter key is pressed with selection collapsed in empty block inside a quote, break the quote. // If Enter key is pressed with selection collapsed in empty block inside a quote, break the quote.

View File

@ -7,13 +7,12 @@
* @module admonition/admonitionui * @module admonition/admonitionui
*/ */
import { Plugin, } from 'ckeditor5/src/core.js'; import { Plugin, addListToDropdown, createDropdown, ListDropdownItemDefinition, SplitButtonView, ViewModel } from 'ckeditor5';
import { addListToDropdown, createDropdown, ListDropdownButtonDefinition, SplitButtonView, ViewModel } from 'ckeditor5/src/ui.js';
import '../theme/blockquote.css'; import '../theme/blockquote.css';
import admonitionIcon from '../theme/icons/admonition.svg'; import admonitionIcon from '../theme/icons/admonition.svg';
import { Collection } from '@ckeditor/ckeditor5-utils'; import { AdmonitionType } from './admonitioncommand.js';
import AdmonitionCommand, { AdmonitionType } from './admonitioncommand'; import { Collection } from 'ckeditor5';
interface AdmonitionDefinition { interface AdmonitionDefinition {
title: string; title: string;
@ -102,11 +101,14 @@ export default class AdmonitionUI extends Plugin {
} }
private _getDropdownItems() { private _getDropdownItems() {
const itemDefinitions = new Collection<ListDropdownButtonDefinition>(); const itemDefinitions = new Collection<ListDropdownItemDefinition>();
const command = this.editor.commands.get("admonition") as AdmonitionCommand const command = this.editor.commands.get("admonition");
if (!command) {
return itemDefinitions;
}
for (const [ type, admonition ] of Object.entries(ADMONITION_TYPES)) { for (const [ type, admonition ] of Object.entries(ADMONITION_TYPES)) {
const definition: ListDropdownButtonDefinition = { const definition: ListDropdownItemDefinition = {
type: "button", type: "button",
model: new ViewModel({ model: new ViewModel({
commandParam: type, commandParam: type,

View File

@ -1,7 +1,17 @@
import AdmonitionCommand from './admonitioncommand.js';
import AdmonitionEditing from './admonitionediting.js';
import AdmonitionUI from './admonitionui.js';
import type { Admonition } from './index.js'; import type { Admonition } from './index.js';
declare module 'ckeditor5' { declare module 'ckeditor5' {
interface PluginsMap { interface PluginsMap {
[ Admonition.pluginName ]: Admonition; [ Admonition.pluginName ]: Admonition;
[ AdmonitionEditing.pluginName ]: AdmonitionEditing;
[ AdmonitionUI.pluginName ]: AdmonitionUI;
} }
interface CommandsMap {
admonition: AdmonitionCommand;
}
} }

View File

@ -1,7 +1,12 @@
import ckeditor from './../theme/icons/ckeditor.svg'; import ckeditor from './../theme/icons/ckeditor.svg';
import './augmentation.js'; import './augmentation.js';
import "../theme/blockquote.css";
export { default as Admonition } from './admonition.js'; export { default as Admonition } from './admonition.js';
export { default as AdmonitionEditing } from './admonitionediting.js';
export { default as AdmonitionUI } from './admonitionui.js';
export { default as AdmonitionAutoformat } from './admonitionautoformat.js';
export type { default as AdmonitionCommand } from './admonitioncommand.js';
export const icons = { export const icons = {
ckeditor ckeditor

View File

@ -1 +0,0 @@
<svg width='68' height='64' viewBox='0 0 68 64' xmlns='http://www.w3.org/2000/svg'><g fill='none' fill-rule='evenodd'><path d='M43.71 11.025a11.508 11.508 0 0 0-1.213 5.159c0 6.42 5.244 11.625 11.713 11.625.083 0 .167 0 .25-.002v16.282a5.464 5.464 0 0 1-2.756 4.739L30.986 60.7a5.548 5.548 0 0 1-5.512 0L4.756 48.828A5.464 5.464 0 0 1 2 44.089V20.344c0-1.955 1.05-3.76 2.756-4.738L25.474 3.733a5.548 5.548 0 0 1 5.512 0l12.724 7.292z' fill='#FFF'/><path d='M45.684 8.79a12.604 12.604 0 0 0-1.329 5.65c0 7.032 5.744 12.733 12.829 12.733.091 0 .183-.001.274-.003v17.834a5.987 5.987 0 0 1-3.019 5.19L31.747 63.196a6.076 6.076 0 0 1-6.037 0L3.02 50.193A5.984 5.984 0 0 1 0 45.003V18.997c0-2.14 1.15-4.119 3.019-5.19L25.71.804a6.076 6.076 0 0 1 6.037 0L45.684 8.79zm-29.44 11.89c-.834 0-1.51.671-1.51 1.498v.715c0 .828.676 1.498 1.51 1.498h25.489c.833 0 1.51-.67 1.51-1.498v-.715c0-.827-.677-1.498-1.51-1.498h-25.49.001zm0 9.227c-.834 0-1.51.671-1.51 1.498v.715c0 .828.676 1.498 1.51 1.498h18.479c.833 0 1.509-.67 1.509-1.498v-.715c0-.827-.676-1.498-1.51-1.498H16.244zm0 9.227c-.834 0-1.51.671-1.51 1.498v.715c0 .828.676 1.498 1.51 1.498h25.489c.833 0 1.51-.67 1.51-1.498v-.715c0-.827-.677-1.498-1.51-1.498h-25.49.001zm41.191-14.459c-5.835 0-10.565-4.695-10.565-10.486 0-5.792 4.73-10.487 10.565-10.487C63.27 3.703 68 8.398 68 14.19c0 5.791-4.73 10.486-10.565 10.486v-.001z' fill='#1EBC61' fill-rule='nonzero'/><path d='M60.857 15.995c0-.467-.084-.875-.251-1.225a2.547 2.547 0 0 0-.686-.88 2.888 2.888 0 0 0-1.026-.531 4.418 4.418 0 0 0-1.259-.175c-.134 0-.283.006-.447.018-.15.01-.3.034-.446.07l.075-1.4h3.587v-1.8h-5.462l-.214 5.06c.319-.116.682-.21 1.089-.28.406-.071.77-.107 1.088-.107.218 0 .437.021.655.063.218.041.413.114.585.218s.313.244.422.419c.109.175.163.391.163.65 0 .424-.132.745-.396.961a1.434 1.434 0 0 1-.938.325c-.352 0-.656-.1-.912-.3-.256-.2-.43-.453-.523-.762l-1.925.588c.1.35.258.664.472.943.214.279.47.514.767.706.298.191.63.339.995.443.365.104.749.156 1.151.156.437 0 .86-.064 1.272-.193.41-.13.778-.323 1.1-.581a2.8 2.8 0 0 0 .775-.981c.193-.396.29-.864.29-1.405h-.001z' fill='#FFF' fill-rule='nonzero'/></g></svg>

Before

Width:  |  Height:  |  Size: 2.1 KiB