mirror of
https://github.com/zadam/trilium.git
synced 2025-11-12 08:15:52 +01:00
chore(admonitions): start off with a fresh copy of blockquote plugin
This commit is contained in:
4
packages/ckeditor5-admonition/CHANGELOG.md
Normal file
4
packages/ckeditor5-admonition/CHANGELOG.md
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
Changelog
|
||||||
|
=========
|
||||||
|
|
||||||
|
All changes in the package are documented in https://github.com/ckeditor/ckeditor5/blob/master/CHANGELOG.md.
|
||||||
4
packages/ckeditor5-admonition/CONTRIBUTING.md
Normal file
4
packages/ckeditor5-admonition/CONTRIBUTING.md
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
Contributing
|
||||||
|
========================================
|
||||||
|
|
||||||
|
See the [official contributors' guide to CKEditor 5](https://ckeditor.com/docs/ckeditor5/latest/framework/contributing/contributing.html) to learn more.
|
||||||
17
packages/ckeditor5-admonition/LICENSE.md
Normal file
17
packages/ckeditor5-admonition/LICENSE.md
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
Software License Agreement
|
||||||
|
==========================
|
||||||
|
|
||||||
|
**CKEditor 5 block quote feature** – https://github.com/ckeditor/ckeditor5-block-quote <br>
|
||||||
|
Copyright (c) 2003–2024, [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.
|
||||||
26
packages/ckeditor5-admonition/README.md
Normal file
26
packages/ckeditor5-admonition/README.md
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
CKEditor 5 block quote feature
|
||||||
|
========================================
|
||||||
|
|
||||||
|
[](https://www.npmjs.com/package/@ckeditor/ckeditor5-block-quote)
|
||||||
|
[](https://coveralls.io/github/ckeditor/ckeditor5?branch=master)
|
||||||
|
[](https://app.travis-ci.com/github/ckeditor/ckeditor5)
|
||||||
|
|
||||||
|
This package implements block quote support for CKEditor 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 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).
|
||||||
23
packages/ckeditor5-admonition/ckeditor5-metadata.json
Normal file
23
packages/ckeditor5-admonition/ckeditor5-metadata.json
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
{
|
||||||
|
"plugins": [
|
||||||
|
{
|
||||||
|
"name": "Block quote",
|
||||||
|
"className": "BlockQuote",
|
||||||
|
"description": "Implements the block quote support to easily include quotations and passages in the rich-text content.",
|
||||||
|
"docs": "features/block-quote.html",
|
||||||
|
"path": "src/blockquote.js",
|
||||||
|
"uiComponents": [
|
||||||
|
{
|
||||||
|
"type": "Button",
|
||||||
|
"name": "blockQuote",
|
||||||
|
"iconPath": "@ckeditor/ckeditor5-core/theme/icons/quote.svg"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"htmlOutput": [
|
||||||
|
{
|
||||||
|
"elements": "blockquote"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
<script src="https://cdn.ckbox.io/ckbox/latest/ckbox.js"></script>
|
||||||
@@ -0,0 +1,51 @@
|
|||||||
|
/**
|
||||||
|
* @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
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* globals window */
|
||||||
|
|
||||||
|
import { CKBox, CKBoxImageEdit } from '@ckeditor/ckeditor5-ckbox';
|
||||||
|
import { PictureEditing, ImageInsert, ImageResize, AutoImage } from '@ckeditor/ckeditor5-image';
|
||||||
|
import { LinkImage } from '@ckeditor/ckeditor5-link';
|
||||||
|
import { CS_CONFIG } from '@ckeditor/ckeditor5-cloud-services/tests/_utils/cloud-services-config.js';
|
||||||
|
import { TOKEN_URL } from '@ckeditor/ckeditor5-ckbox/tests/_utils/ckbox-config.js';
|
||||||
|
|
||||||
|
// Umberto combines all `packages/*/docs` into the `docs/` directory. The import path must be valid after merging all directories.
|
||||||
|
import ClassicEditor from '../build-classic.js';
|
||||||
|
|
||||||
|
ClassicEditor.defaultConfig = {
|
||||||
|
plugins: ClassicEditor.builtinPlugins.concat( [
|
||||||
|
PictureEditing,
|
||||||
|
ImageResize,
|
||||||
|
ImageInsert,
|
||||||
|
AutoImage,
|
||||||
|
LinkImage,
|
||||||
|
CKBox,
|
||||||
|
CKBoxImageEdit
|
||||||
|
] ),
|
||||||
|
cloudServices: CS_CONFIG,
|
||||||
|
toolbar: {
|
||||||
|
items: [
|
||||||
|
'undo', 'redo', '|', 'heading',
|
||||||
|
'|', 'bold', 'italic',
|
||||||
|
'|', 'link', 'insertImage', 'insertTable', 'blockQuote', 'mediaEmbed',
|
||||||
|
'|', 'bulletedList', 'numberedList', 'outdent', 'indent'
|
||||||
|
]
|
||||||
|
},
|
||||||
|
ui: {
|
||||||
|
viewportOffset: {
|
||||||
|
top: window.getViewportTopOffsetConfig()
|
||||||
|
}
|
||||||
|
},
|
||||||
|
ckbox: {
|
||||||
|
tokenUrl: TOKEN_URL,
|
||||||
|
allowExternalImagesEditing: [ /^data:/, 'origin', /ckbox/ ],
|
||||||
|
forceDemoLabel: true
|
||||||
|
},
|
||||||
|
image: {
|
||||||
|
toolbar: [ 'toggleImageCaption', 'imageTextAlternative', 'ckboxImageEdit' ]
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
window.ClassicEditor = ClassicEditor;
|
||||||
@@ -0,0 +1,27 @@
|
|||||||
|
<div class="ck ck-content" id="snippet-block-quote">
|
||||||
|
<h3>The Famous Einstein Quote that never was</h3>
|
||||||
|
|
||||||
|
<p>You might have come across the following quote in the past few years:</p>
|
||||||
|
|
||||||
|
<blockquote>
|
||||||
|
<p>Everybody is a genius. But if you judge a fish by its ability to climb a tree, it will live its whole life believing that it is stupid.</p>
|
||||||
|
|
||||||
|
<p>Albert Einstein</p>
|
||||||
|
</blockquote>
|
||||||
|
|
||||||
|
<p>It has been most popular on Facebook and other social networks, where people share it aplenty. No wonder: it is neat, it sounds smart, and, let’s be frank, Albert is one hell of a figure!</p>
|
||||||
|
|
||||||
|
<p>The truth is not as neat, though. And mindlessly forwarding the quote isn’t exactly smart. That’s because Einstein never said that. The quote comes from the 2004 book <em>The Rhythm of Life: Living Every Day with Passion and Purpose</em> by Mathew Kelly, published almost 50 years after Albert’s death in 1955.</p>
|
||||||
|
|
||||||
|
<p>Kelly was most likely inspired by an essay by Amos E. Dolbear of Tufts titled “An Educational Allegory,” describing animals educated to work on their weakest features instead of their strongest ones. So an eagle was made to run, a penguin was forced to fly, and so on. There is also the 1903 “Jungle School Boards” fable from an Illinois newspaper. It tells a story of a monkey, a kangaroo, and an elephant who cannot agree on the curriculum for their animal school — should all the little animals be taught tree-climbing, jumping, or looking wise? </p>
|
||||||
|
|
||||||
|
<p>In the late 1940s, something that appears to be an amalgam of the two was published and later reprinted with various changes in the 1960s. The idea evolved for decades and got mixed up with a few other quotes about being a genius originating back in the 1970s. Finally, Kelly wrote in his 2004 book:</p>
|
||||||
|
|
||||||
|
<blockquote>
|
||||||
|
<p>Albert Einstein wrote, “Everybody is a genius. But if you judge a fish by its ability to climb a tree, it will live its whole life believing that it is stupid.” The question I have for you at this point of our journey together is, “What is your genius?”</p>
|
||||||
|
</blockquote>
|
||||||
|
|
||||||
|
<p>Why he attributed this to Albert Einstein remains unclear. The fact is, the quote got popular. But, apparently, not everyone is a genius when it comes to fact-checking and sources.</p>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
/**
|
||||||
|
* @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
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* globals ClassicEditor, window, document, console */
|
||||||
|
|
||||||
|
ClassicEditor
|
||||||
|
.create( document.querySelector( '#snippet-block-quote' ) )
|
||||||
|
.then( editor => {
|
||||||
|
window.editor = editor;
|
||||||
|
window.attachTourBalloon( {
|
||||||
|
target: window.findToolbarItem( editor.ui.view.toolbar, item => item.label && item.label === 'Block quote' ),
|
||||||
|
text: 'Click to insert a block quote.',
|
||||||
|
editor
|
||||||
|
} );
|
||||||
|
} )
|
||||||
|
.catch( err => {
|
||||||
|
console.error( err.stack );
|
||||||
|
} );
|
||||||
@@ -0,0 +1,26 @@
|
|||||||
|
<div class="ck ck-content" id="snippet-nested-block-quote">
|
||||||
|
<p>Re: Material usage information</p>
|
||||||
|
|
||||||
|
<blockquote>
|
||||||
|
<blockquote>
|
||||||
|
<p>Tom,</p>
|
||||||
|
|
||||||
|
<p>This is just a reminder that we need the data for our Friday meeting with the external subcontractors. Can you please let me know if all the reports are ready?</p>
|
||||||
|
|
||||||
|
<p>Zoe</p>
|
||||||
|
</blockquote>
|
||||||
|
|
||||||
|
<p>Hi Zoe,</p>
|
||||||
|
|
||||||
|
<p>The reports are coming in, but the Q3 data is still missing. As far as I can tell, Shizuoka is behind the schedule with the final summary, and the Expansion Department has not released its numbers yet. I will reach out to both and will keep you informed on that topic by noon tomorrow.</p>
|
||||||
|
|
||||||
|
<p>Tom</p>
|
||||||
|
</blockquote>
|
||||||
|
|
||||||
|
<p>Please do so, this is getting urgent. Contact Haleema from ED directly. Also, check with Shizuoka. This is very much unlike him to leave such an important matter for the last moment.</p>
|
||||||
|
|
||||||
|
<p>Hope to have this ready for review at the 2 p.m. board meeting provided you can manage to prepare a summary and have the full data by Thursday morning at the latest.</p>
|
||||||
|
|
||||||
|
<p>Zoe</p>
|
||||||
|
|
||||||
|
</div>
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
/**
|
||||||
|
* @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
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* globals ClassicEditor, window, document, console */
|
||||||
|
|
||||||
|
ClassicEditor
|
||||||
|
.create( document.querySelector( '#snippet-nested-block-quote' ) )
|
||||||
|
.then( editor => {
|
||||||
|
window.editor2 = editor;
|
||||||
|
} )
|
||||||
|
.catch( err => {
|
||||||
|
console.error( err.stack );
|
||||||
|
} );
|
||||||
36
packages/ckeditor5-admonition/docs/api/block-quote.md
Normal file
36
packages/ckeditor5-admonition/docs/api/block-quote.md
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
---
|
||||||
|
category: api-reference
|
||||||
|
---
|
||||||
|
|
||||||
|
# CKEditor 5 block quote feature
|
||||||
|
|
||||||
|
[](https://www.npmjs.com/package/@ckeditor/ckeditor5-block-quote)
|
||||||
|
|
||||||
|
This package implements block quote support for CKEditor 5.
|
||||||
|
|
||||||
|
## Demo
|
||||||
|
|
||||||
|
Check out the {@link features/block-quote#demo demo in the block quote feature guide}.
|
||||||
|
|
||||||
|
## Documentation
|
||||||
|
|
||||||
|
See the {@link features/block-quote block quote feature guide} and the {@link module:block-quote/blockquote~BlockQuote} plugin documentation.
|
||||||
|
|
||||||
|
## Installation
|
||||||
|
|
||||||
|
This package is part of our open-source aggregate package.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
npm install ckeditor5
|
||||||
|
```
|
||||||
|
|
||||||
|
## Contribute
|
||||||
|
|
||||||
|
The source code of this package is available on GitHub in [https://github.com/ckeditor/ckeditor5/tree/master/packages/ckeditor5-block-quote](https://github.com/ckeditor/ckeditor5/tree/master/packages/ckeditor5-block-quote).
|
||||||
|
|
||||||
|
## External links
|
||||||
|
|
||||||
|
* [`@ckeditor/ckeditor5-block-quote` on npm](https://www.npmjs.com/package/@ckeditor/ckeditor5-block-quote)
|
||||||
|
* [`ckeditor/ckeditor5-block-quote` on GitHub](https://github.com/ckeditor/ckeditor5/tree/master/packages/ckeditor5-block-quote)
|
||||||
|
* [Issue tracker](https://github.com/ckeditor/ckeditor5/issues)
|
||||||
|
* [Changelog](https://github.com/ckeditor/ckeditor5/blob/master/CHANGELOG.md)
|
||||||
119
packages/ckeditor5-admonition/docs/features/block-quote.md
Normal file
119
packages/ckeditor5-admonition/docs/features/block-quote.md
Normal file
@@ -0,0 +1,119 @@
|
|||||||
|
---
|
||||||
|
category: features
|
||||||
|
menu-title: Block quote
|
||||||
|
meta-title: Block quote | CKEditor 5 Documentation
|
||||||
|
---
|
||||||
|
{@snippet features/block-quote-source}
|
||||||
|
|
||||||
|
# Block quote
|
||||||
|
|
||||||
|
The block quote feature lets you easily include block quotations or pull quotes in your content. It is also an attractive way to draw the readers' attention to selected parts of the text.
|
||||||
|
|
||||||
|
## Demo
|
||||||
|
|
||||||
|
Use the block quote toolbar button {@icon @ckeditor/ckeditor5-core/theme/icons/quote.svg Insert block quote} in the editor below to see the feature in action. You can also type `>` followed by a space before the quotation to format it on the go thanks to the {@link features/autoformat autoformatting} feature.
|
||||||
|
|
||||||
|
{@snippet features/block-quote}
|
||||||
|
|
||||||
|
<info-box info>
|
||||||
|
This demo presents a limited set of features. Visit the {@link examples/builds/full-featured-editor feature-rich editor example} to see more in action.
|
||||||
|
</info-box>
|
||||||
|
|
||||||
|
## Nested block quotes
|
||||||
|
|
||||||
|
Starting from version 27.1.0, CKEditor 5 will properly display a block quote nested in another block quote. This sort of structure is indispensable in email editors or discussion forums. The ability to cite previous messages and preserve a correct quotation structure is often crucial to maintain the flow of communication. Nested block quotes may also prove useful for scientific or academic papers, but articles citing sources and referring to previous writing would often use it, too.
|
||||||
|
|
||||||
|
Support for nested block quotes is provided as backward compatibility for loading pre-existing content, for example created in CKEditor 4. Additionally, pasting content with nested block quotes is supported. You can also nest a block quote in another block quote using the {@link features/drag-drop drag and drop} mechanism – just select an existing block quote and drag it into another.
|
||||||
|
|
||||||
|
{@snippet features/nested-block-quote}
|
||||||
|
|
||||||
|
<info-box>
|
||||||
|
If you would want to block the possibility to nest block quotes in your editor, refer to the {@link features/block-quote#disallow-nesting-block-quotes Disallow nesting block quotes} section to learn how to disable this functionality.
|
||||||
|
</info-box>
|
||||||
|
|
||||||
|
## Installation
|
||||||
|
|
||||||
|
<info-box info>
|
||||||
|
⚠️ **New import paths**
|
||||||
|
|
||||||
|
Starting with {@link updating/update-to-42 version 42.0.0}, we changed the format of import paths. This guide uses the new, shorter format. Refer to the {@link getting-started/legacy-getting-started/legacy-imports Packages in the legacy setup} guide if you use an older version of CKEditor 5.
|
||||||
|
</info-box>
|
||||||
|
|
||||||
|
After {@link getting-started/quick-start installing the editor}, add the feature to your plugin list and toolbar configuration:
|
||||||
|
|
||||||
|
```js
|
||||||
|
import { ClassicEditor, BlockQuote } from 'ckeditor5';
|
||||||
|
|
||||||
|
ClassicEditor
|
||||||
|
.create( document.querySelector( '#editor' ), {
|
||||||
|
plugins: [ BlockQuote, /* ... */ ],
|
||||||
|
toolbar: [ 'blockQuote', /* ... */ ]
|
||||||
|
} )
|
||||||
|
.then( /* ... */ )
|
||||||
|
.catch( /* ... */ );
|
||||||
|
```
|
||||||
|
|
||||||
|
## Configuration
|
||||||
|
|
||||||
|
### Disallow nesting block quotes
|
||||||
|
|
||||||
|
By default, the editor supports inserting a block quote into another block quote.
|
||||||
|
|
||||||
|
To disallow nesting block quotes, you need to register an additional schema rule. It needs to be added before the data is loaded into the editor, hence it is best to implement it as a plugin:
|
||||||
|
|
||||||
|
```js
|
||||||
|
function DisallowNestingBlockQuotes( editor ) {
|
||||||
|
editor.model.schema.addChildCheck( ( context, childDefinition ) => {
|
||||||
|
if ( context.endsWith( 'blockQuote' ) && childDefinition.name == 'blockQuote' ) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
} );
|
||||||
|
}
|
||||||
|
|
||||||
|
// Pass it via config.extraPlugins or config.plugins:
|
||||||
|
|
||||||
|
ClassicEditor
|
||||||
|
.create( document.querySelector( '#editor' ), {
|
||||||
|
extraPlugins: [ DisallowNestingBlockQuotes ],
|
||||||
|
|
||||||
|
// The rest of the configuration.
|
||||||
|
// ...
|
||||||
|
} )
|
||||||
|
.then( /* ... */ )
|
||||||
|
.catch( /* ... */ );
|
||||||
|
```
|
||||||
|
|
||||||
|
<info-box>
|
||||||
|
Check the {@link tutorials/crash-course/editor step-by-step tutorial} if you need more information about the technical side of this solution.
|
||||||
|
</info-box>
|
||||||
|
|
||||||
|
## Related features
|
||||||
|
|
||||||
|
Here are some other CKEditor 5 features that you can use similarly to the block quote plugin to structure your text better:
|
||||||
|
|
||||||
|
* {@link features/indent Block indentation} – Set indentation for text blocks such as paragraphs or lists.
|
||||||
|
* {@link features/code-blocks Code block} – Insert longer, multiline code listings.
|
||||||
|
* {@link features/text-alignment Text alignment} – Align your content left, right, center it, or justify.
|
||||||
|
* {@link features/autoformat Autoformatting} – Add formatting elements (such as block quotes) as you type with Markdown code.
|
||||||
|
|
||||||
|
## Common API
|
||||||
|
|
||||||
|
The {@link module:block-quote/blockquote~BlockQuote} plugin registers:
|
||||||
|
|
||||||
|
* the `'blockQuote'` UI button component implemented by the {@link module:block-quote/blockquoteui~BlockQuoteUI block quote UI feature},
|
||||||
|
* the `'blockQuote'` command implemented by the {@link module:block-quote/blockquoteediting~BlockQuoteEditing block quote editing feature}.
|
||||||
|
|
||||||
|
You can execute the command using the {@link module:core/editor/editor~Editor#execute `editor.execute()`} method:
|
||||||
|
|
||||||
|
```js
|
||||||
|
// Applies block quote to the selected content.
|
||||||
|
editor.execute( 'blockQuote' );
|
||||||
|
```
|
||||||
|
|
||||||
|
<info-box>
|
||||||
|
We recommend using the official {@link framework/development-tools/inspector CKEditor 5 inspector} for development and debugging. It will give you tons of useful information about the state of the editor such as internal data structures, selection, commands, and many more.
|
||||||
|
</info-box>
|
||||||
|
|
||||||
|
## Contribute
|
||||||
|
|
||||||
|
The source code of the feature is available on GitHub at [https://github.com/ckeditor/ckeditor5/tree/master/packages/ckeditor5-block-quote](https://github.com/ckeditor/ckeditor5/tree/master/packages/ckeditor5-block-quote).
|
||||||
3
packages/ckeditor5-admonition/lang/contexts.json
Normal file
3
packages/ckeditor5-admonition/lang/contexts.json
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
{
|
||||||
|
"Block quote": "Toolbar button tooltip for the Block quote feature."
|
||||||
|
}
|
||||||
22
packages/ckeditor5-admonition/lang/translations/af.po
Normal file
22
packages/ckeditor5-admonition/lang/translations/af.po
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
# Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
|
||||||
|
#
|
||||||
|
# !!! IMPORTANT !!!
|
||||||
|
#
|
||||||
|
# Before you edit this file, please keep in mind that contributing to the project
|
||||||
|
# translations is possible ONLY via the Transifex online service.
|
||||||
|
#
|
||||||
|
# To submit your translations, visit https://www.transifex.com/ckeditor/ckeditor5.
|
||||||
|
#
|
||||||
|
# To learn more, check out the official contributor's guide:
|
||||||
|
# https://ckeditor.com/docs/ckeditor5/latest/framework/guides/contributing/contributing.html
|
||||||
|
#
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Language-Team: Afrikaans (https://app.transifex.com/ckeditor/teams/11143/af/)\n"
|
||||||
|
"Language: af\n"
|
||||||
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
|
||||||
|
msgctxt "Toolbar button tooltip for the Block quote feature."
|
||||||
|
msgid "Block quote"
|
||||||
|
msgstr "Verwysingsaanhaling"
|
||||||
22
packages/ckeditor5-admonition/lang/translations/ar.po
Normal file
22
packages/ckeditor5-admonition/lang/translations/ar.po
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
# Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
|
||||||
|
#
|
||||||
|
# !!! IMPORTANT !!!
|
||||||
|
#
|
||||||
|
# Before you edit this file, please keep in mind that contributing to the project
|
||||||
|
# translations is possible ONLY via the Transifex online service.
|
||||||
|
#
|
||||||
|
# To submit your translations, visit https://www.transifex.com/ckeditor/ckeditor5.
|
||||||
|
#
|
||||||
|
# To learn more, check out the official contributor's guide:
|
||||||
|
# https://ckeditor.com/docs/ckeditor5/latest/framework/guides/contributing/contributing.html
|
||||||
|
#
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Language-Team: Arabic (https://app.transifex.com/ckeditor/teams/11143/ar/)\n"
|
||||||
|
"Language: ar\n"
|
||||||
|
"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
|
||||||
|
msgctxt "Toolbar button tooltip for the Block quote feature."
|
||||||
|
msgid "Block quote"
|
||||||
|
msgstr "اقتباس"
|
||||||
22
packages/ckeditor5-admonition/lang/translations/az.po
Normal file
22
packages/ckeditor5-admonition/lang/translations/az.po
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
# Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
|
||||||
|
#
|
||||||
|
# !!! IMPORTANT !!!
|
||||||
|
#
|
||||||
|
# Before you edit this file, please keep in mind that contributing to the project
|
||||||
|
# translations is possible ONLY via the Transifex online service.
|
||||||
|
#
|
||||||
|
# To submit your translations, visit https://www.transifex.com/ckeditor/ckeditor5.
|
||||||
|
#
|
||||||
|
# To learn more, check out the official contributor's guide:
|
||||||
|
# https://ckeditor.com/docs/ckeditor5/latest/framework/guides/contributing/contributing.html
|
||||||
|
#
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Language-Team: Azerbaijani (https://app.transifex.com/ckeditor/teams/11143/az/)\n"
|
||||||
|
"Language: az\n"
|
||||||
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
|
||||||
|
msgctxt "Toolbar button tooltip for the Block quote feature."
|
||||||
|
msgid "Block quote"
|
||||||
|
msgstr "Sitat bloku"
|
||||||
22
packages/ckeditor5-admonition/lang/translations/bg.po
Normal file
22
packages/ckeditor5-admonition/lang/translations/bg.po
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
# Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
|
||||||
|
#
|
||||||
|
# !!! IMPORTANT !!!
|
||||||
|
#
|
||||||
|
# Before you edit this file, please keep in mind that contributing to the project
|
||||||
|
# translations is possible ONLY via the Transifex online service.
|
||||||
|
#
|
||||||
|
# To submit your translations, visit https://www.transifex.com/ckeditor/ckeditor5.
|
||||||
|
#
|
||||||
|
# To learn more, check out the official contributor's guide:
|
||||||
|
# https://ckeditor.com/docs/ckeditor5/latest/framework/guides/contributing/contributing.html
|
||||||
|
#
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Language-Team: Bulgarian (https://app.transifex.com/ckeditor/teams/11143/bg/)\n"
|
||||||
|
"Language: bg\n"
|
||||||
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
|
||||||
|
msgctxt "Toolbar button tooltip for the Block quote feature."
|
||||||
|
msgid "Block quote"
|
||||||
|
msgstr "Цитат"
|
||||||
22
packages/ckeditor5-admonition/lang/translations/bn.po
Normal file
22
packages/ckeditor5-admonition/lang/translations/bn.po
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
# Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
|
||||||
|
#
|
||||||
|
# !!! IMPORTANT !!!
|
||||||
|
#
|
||||||
|
# Before you edit this file, please keep in mind that contributing to the project
|
||||||
|
# translations is possible ONLY via the Transifex online service.
|
||||||
|
#
|
||||||
|
# To submit your translations, visit https://www.transifex.com/ckeditor/ckeditor5.
|
||||||
|
#
|
||||||
|
# To learn more, check out the official contributor's guide:
|
||||||
|
# https://ckeditor.com/docs/ckeditor5/latest/framework/guides/contributing/contributing.html
|
||||||
|
#
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Language-Team: Bengali (https://app.transifex.com/ckeditor/teams/11143/bn/)\n"
|
||||||
|
"Language: bn\n"
|
||||||
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
|
||||||
|
msgctxt "Toolbar button tooltip for the Block quote feature."
|
||||||
|
msgid "Block quote"
|
||||||
|
msgstr "ব্লক কোট"
|
||||||
22
packages/ckeditor5-admonition/lang/translations/bs.po
Normal file
22
packages/ckeditor5-admonition/lang/translations/bs.po
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
# Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
|
||||||
|
#
|
||||||
|
# !!! IMPORTANT !!!
|
||||||
|
#
|
||||||
|
# Before you edit this file, please keep in mind that contributing to the project
|
||||||
|
# translations is possible ONLY via the Transifex online service.
|
||||||
|
#
|
||||||
|
# To submit your translations, visit https://www.transifex.com/ckeditor/ckeditor5.
|
||||||
|
#
|
||||||
|
# To learn more, check out the official contributor's guide:
|
||||||
|
# https://ckeditor.com/docs/ckeditor5/latest/framework/guides/contributing/contributing.html
|
||||||
|
#
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Language-Team: Bosnian (https://app.transifex.com/ckeditor/teams/11143/bs/)\n"
|
||||||
|
"Language: bs\n"
|
||||||
|
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
|
||||||
|
msgctxt "Toolbar button tooltip for the Block quote feature."
|
||||||
|
msgid "Block quote"
|
||||||
|
msgstr "Citat"
|
||||||
22
packages/ckeditor5-admonition/lang/translations/ca.po
Normal file
22
packages/ckeditor5-admonition/lang/translations/ca.po
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
# Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
|
||||||
|
#
|
||||||
|
# !!! IMPORTANT !!!
|
||||||
|
#
|
||||||
|
# Before you edit this file, please keep in mind that contributing to the project
|
||||||
|
# translations is possible ONLY via the Transifex online service.
|
||||||
|
#
|
||||||
|
# To submit your translations, visit https://www.transifex.com/ckeditor/ckeditor5.
|
||||||
|
#
|
||||||
|
# To learn more, check out the official contributor's guide:
|
||||||
|
# https://ckeditor.com/docs/ckeditor5/latest/framework/guides/contributing/contributing.html
|
||||||
|
#
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Language-Team: Catalan (https://app.transifex.com/ckeditor/teams/11143/ca/)\n"
|
||||||
|
"Language: ca\n"
|
||||||
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
|
||||||
|
msgctxt "Toolbar button tooltip for the Block quote feature."
|
||||||
|
msgid "Block quote"
|
||||||
|
msgstr "Cita de bloc"
|
||||||
22
packages/ckeditor5-admonition/lang/translations/cs.po
Normal file
22
packages/ckeditor5-admonition/lang/translations/cs.po
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
# Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
|
||||||
|
#
|
||||||
|
# !!! IMPORTANT !!!
|
||||||
|
#
|
||||||
|
# Before you edit this file, please keep in mind that contributing to the project
|
||||||
|
# translations is possible ONLY via the Transifex online service.
|
||||||
|
#
|
||||||
|
# To submit your translations, visit https://www.transifex.com/ckeditor/ckeditor5.
|
||||||
|
#
|
||||||
|
# To learn more, check out the official contributor's guide:
|
||||||
|
# https://ckeditor.com/docs/ckeditor5/latest/framework/guides/contributing/contributing.html
|
||||||
|
#
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Language-Team: Czech (https://app.transifex.com/ckeditor/teams/11143/cs/)\n"
|
||||||
|
"Language: cs\n"
|
||||||
|
"Plural-Forms: nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n <= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
|
||||||
|
msgctxt "Toolbar button tooltip for the Block quote feature."
|
||||||
|
msgid "Block quote"
|
||||||
|
msgstr "Citace"
|
||||||
22
packages/ckeditor5-admonition/lang/translations/da.po
Normal file
22
packages/ckeditor5-admonition/lang/translations/da.po
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
# Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
|
||||||
|
#
|
||||||
|
# !!! IMPORTANT !!!
|
||||||
|
#
|
||||||
|
# Before you edit this file, please keep in mind that contributing to the project
|
||||||
|
# translations is possible ONLY via the Transifex online service.
|
||||||
|
#
|
||||||
|
# To submit your translations, visit https://www.transifex.com/ckeditor/ckeditor5.
|
||||||
|
#
|
||||||
|
# To learn more, check out the official contributor's guide:
|
||||||
|
# https://ckeditor.com/docs/ckeditor5/latest/framework/guides/contributing/contributing.html
|
||||||
|
#
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Language-Team: Danish (https://app.transifex.com/ckeditor/teams/11143/da/)\n"
|
||||||
|
"Language: da\n"
|
||||||
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
|
||||||
|
msgctxt "Toolbar button tooltip for the Block quote feature."
|
||||||
|
msgid "Block quote"
|
||||||
|
msgstr "Blot citat"
|
||||||
22
packages/ckeditor5-admonition/lang/translations/de-ch.po
Normal file
22
packages/ckeditor5-admonition/lang/translations/de-ch.po
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
# Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
|
||||||
|
#
|
||||||
|
# !!! IMPORTANT !!!
|
||||||
|
#
|
||||||
|
# Before you edit this file, please keep in mind that contributing to the project
|
||||||
|
# translations is possible ONLY via the Transifex online service.
|
||||||
|
#
|
||||||
|
# To submit your translations, visit https://www.transifex.com/ckeditor/ckeditor5.
|
||||||
|
#
|
||||||
|
# To learn more, check out the official contributor's guide:
|
||||||
|
# https://ckeditor.com/docs/ckeditor5/latest/framework/guides/contributing/contributing.html
|
||||||
|
#
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Language-Team: German (Switzerland) (https://app.transifex.com/ckeditor/teams/11143/de_CH/)\n"
|
||||||
|
"Language: de_CH\n"
|
||||||
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
|
||||||
|
msgctxt "Toolbar button tooltip for the Block quote feature."
|
||||||
|
msgid "Block quote"
|
||||||
|
msgstr "Blockzitat"
|
||||||
22
packages/ckeditor5-admonition/lang/translations/de.po
Normal file
22
packages/ckeditor5-admonition/lang/translations/de.po
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
# Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
|
||||||
|
#
|
||||||
|
# !!! IMPORTANT !!!
|
||||||
|
#
|
||||||
|
# Before you edit this file, please keep in mind that contributing to the project
|
||||||
|
# translations is possible ONLY via the Transifex online service.
|
||||||
|
#
|
||||||
|
# To submit your translations, visit https://www.transifex.com/ckeditor/ckeditor5.
|
||||||
|
#
|
||||||
|
# To learn more, check out the official contributor's guide:
|
||||||
|
# https://ckeditor.com/docs/ckeditor5/latest/framework/guides/contributing/contributing.html
|
||||||
|
#
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Language-Team: German (https://app.transifex.com/ckeditor/teams/11143/de/)\n"
|
||||||
|
"Language: de\n"
|
||||||
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
|
||||||
|
msgctxt "Toolbar button tooltip for the Block quote feature."
|
||||||
|
msgid "Block quote"
|
||||||
|
msgstr "Blockzitat"
|
||||||
22
packages/ckeditor5-admonition/lang/translations/el.po
Normal file
22
packages/ckeditor5-admonition/lang/translations/el.po
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
# Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
|
||||||
|
#
|
||||||
|
# !!! IMPORTANT !!!
|
||||||
|
#
|
||||||
|
# Before you edit this file, please keep in mind that contributing to the project
|
||||||
|
# translations is possible ONLY via the Transifex online service.
|
||||||
|
#
|
||||||
|
# To submit your translations, visit https://www.transifex.com/ckeditor/ckeditor5.
|
||||||
|
#
|
||||||
|
# To learn more, check out the official contributor's guide:
|
||||||
|
# https://ckeditor.com/docs/ckeditor5/latest/framework/guides/contributing/contributing.html
|
||||||
|
#
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Language-Team: Greek (https://app.transifex.com/ckeditor/teams/11143/el/)\n"
|
||||||
|
"Language: el\n"
|
||||||
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
|
||||||
|
msgctxt "Toolbar button tooltip for the Block quote feature."
|
||||||
|
msgid "Block quote"
|
||||||
|
msgstr "Περιοχή παράθεσης"
|
||||||
22
packages/ckeditor5-admonition/lang/translations/en-au.po
Normal file
22
packages/ckeditor5-admonition/lang/translations/en-au.po
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
# Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
|
||||||
|
#
|
||||||
|
# !!! IMPORTANT !!!
|
||||||
|
#
|
||||||
|
# Before you edit this file, please keep in mind that contributing to the project
|
||||||
|
# translations is possible ONLY via the Transifex online service.
|
||||||
|
#
|
||||||
|
# To submit your translations, visit https://www.transifex.com/ckeditor/ckeditor5.
|
||||||
|
#
|
||||||
|
# To learn more, check out the official contributor's guide:
|
||||||
|
# https://ckeditor.com/docs/ckeditor5/latest/framework/guides/contributing/contributing.html
|
||||||
|
#
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Language-Team: English (Australia) (https://app.transifex.com/ckeditor/teams/11143/en_AU/)\n"
|
||||||
|
"Language: en_AU\n"
|
||||||
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
|
||||||
|
msgctxt "Toolbar button tooltip for the Block quote feature."
|
||||||
|
msgid "Block quote"
|
||||||
|
msgstr "Block quote"
|
||||||
22
packages/ckeditor5-admonition/lang/translations/en-gb.po
Normal file
22
packages/ckeditor5-admonition/lang/translations/en-gb.po
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
# Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
|
||||||
|
#
|
||||||
|
# !!! IMPORTANT !!!
|
||||||
|
#
|
||||||
|
# Before you edit this file, please keep in mind that contributing to the project
|
||||||
|
# translations is possible ONLY via the Transifex online service.
|
||||||
|
#
|
||||||
|
# To submit your translations, visit https://www.transifex.com/ckeditor/ckeditor5.
|
||||||
|
#
|
||||||
|
# To learn more, check out the official contributor's guide:
|
||||||
|
# https://ckeditor.com/docs/ckeditor5/latest/framework/guides/contributing/contributing.html
|
||||||
|
#
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Language-Team: English (United Kingdom) (https://app.transifex.com/ckeditor/teams/11143/en_GB/)\n"
|
||||||
|
"Language: en_GB\n"
|
||||||
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
|
||||||
|
msgctxt "Toolbar button tooltip for the Block quote feature."
|
||||||
|
msgid "Block quote"
|
||||||
|
msgstr "Block quote"
|
||||||
22
packages/ckeditor5-admonition/lang/translations/en.po
Normal file
22
packages/ckeditor5-admonition/lang/translations/en.po
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
# Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
|
||||||
|
#
|
||||||
|
# !!! IMPORTANT !!!
|
||||||
|
#
|
||||||
|
# Before you edit this file, please keep in mind that contributing to the project
|
||||||
|
# translations is possible ONLY via the Transifex online service.
|
||||||
|
#
|
||||||
|
# To submit your translations, visit https://www.transifex.com/ckeditor/ckeditor5.
|
||||||
|
#
|
||||||
|
# To learn more, check out the official contributor's guide:
|
||||||
|
# https://ckeditor.com/docs/ckeditor5/latest/framework/guides/contributing/contributing.html
|
||||||
|
#
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Language: \n"
|
||||||
|
"Language-Team: \n"
|
||||||
|
"Plural-Forms: \n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
|
||||||
|
msgctxt "Toolbar button tooltip for the Block quote feature."
|
||||||
|
msgid "Block quote"
|
||||||
|
msgstr "Block quote"
|
||||||
22
packages/ckeditor5-admonition/lang/translations/es-co.po
Normal file
22
packages/ckeditor5-admonition/lang/translations/es-co.po
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
# Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
|
||||||
|
#
|
||||||
|
# !!! IMPORTANT !!!
|
||||||
|
#
|
||||||
|
# Before you edit this file, please keep in mind that contributing to the project
|
||||||
|
# translations is possible ONLY via the Transifex online service.
|
||||||
|
#
|
||||||
|
# To submit your translations, visit https://www.transifex.com/ckeditor/ckeditor5.
|
||||||
|
#
|
||||||
|
# To learn more, check out the official contributor's guide:
|
||||||
|
# https://ckeditor.com/docs/ckeditor5/latest/framework/guides/contributing/contributing.html
|
||||||
|
#
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Language-Team: Spanish (Colombia) (https://app.transifex.com/ckeditor/teams/11143/es_CO/)\n"
|
||||||
|
"Language: es_CO\n"
|
||||||
|
"Plural-Forms: nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
|
||||||
|
msgctxt "Toolbar button tooltip for the Block quote feature."
|
||||||
|
msgid "Block quote"
|
||||||
|
msgstr "Cita de bloque"
|
||||||
22
packages/ckeditor5-admonition/lang/translations/es.po
Normal file
22
packages/ckeditor5-admonition/lang/translations/es.po
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
# Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
|
||||||
|
#
|
||||||
|
# !!! IMPORTANT !!!
|
||||||
|
#
|
||||||
|
# Before you edit this file, please keep in mind that contributing to the project
|
||||||
|
# translations is possible ONLY via the Transifex online service.
|
||||||
|
#
|
||||||
|
# To submit your translations, visit https://www.transifex.com/ckeditor/ckeditor5.
|
||||||
|
#
|
||||||
|
# To learn more, check out the official contributor's guide:
|
||||||
|
# https://ckeditor.com/docs/ckeditor5/latest/framework/guides/contributing/contributing.html
|
||||||
|
#
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Language-Team: Spanish (https://app.transifex.com/ckeditor/teams/11143/es/)\n"
|
||||||
|
"Language: es\n"
|
||||||
|
"Plural-Forms: nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
|
||||||
|
msgctxt "Toolbar button tooltip for the Block quote feature."
|
||||||
|
msgid "Block quote"
|
||||||
|
msgstr "Bloque de cita"
|
||||||
22
packages/ckeditor5-admonition/lang/translations/et.po
Normal file
22
packages/ckeditor5-admonition/lang/translations/et.po
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
# Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
|
||||||
|
#
|
||||||
|
# !!! IMPORTANT !!!
|
||||||
|
#
|
||||||
|
# Before you edit this file, please keep in mind that contributing to the project
|
||||||
|
# translations is possible ONLY via the Transifex online service.
|
||||||
|
#
|
||||||
|
# To submit your translations, visit https://www.transifex.com/ckeditor/ckeditor5.
|
||||||
|
#
|
||||||
|
# To learn more, check out the official contributor's guide:
|
||||||
|
# https://ckeditor.com/docs/ckeditor5/latest/framework/guides/contributing/contributing.html
|
||||||
|
#
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Language-Team: Estonian (https://app.transifex.com/ckeditor/teams/11143/et/)\n"
|
||||||
|
"Language: et\n"
|
||||||
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
|
||||||
|
msgctxt "Toolbar button tooltip for the Block quote feature."
|
||||||
|
msgid "Block quote"
|
||||||
|
msgstr "Tsitaat"
|
||||||
22
packages/ckeditor5-admonition/lang/translations/eu.po
Normal file
22
packages/ckeditor5-admonition/lang/translations/eu.po
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
# Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
|
||||||
|
#
|
||||||
|
# !!! IMPORTANT !!!
|
||||||
|
#
|
||||||
|
# Before you edit this file, please keep in mind that contributing to the project
|
||||||
|
# translations is possible ONLY via the Transifex online service.
|
||||||
|
#
|
||||||
|
# To submit your translations, visit https://www.transifex.com/ckeditor/ckeditor5.
|
||||||
|
#
|
||||||
|
# To learn more, check out the official contributor's guide:
|
||||||
|
# https://ckeditor.com/docs/ckeditor5/latest/framework/guides/contributing/contributing.html
|
||||||
|
#
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Language-Team: Basque (https://app.transifex.com/ckeditor/teams/11143/eu/)\n"
|
||||||
|
"Language: eu\n"
|
||||||
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
|
||||||
|
msgctxt "Toolbar button tooltip for the Block quote feature."
|
||||||
|
msgid "Block quote"
|
||||||
|
msgstr "Aipua"
|
||||||
22
packages/ckeditor5-admonition/lang/translations/fa.po
Normal file
22
packages/ckeditor5-admonition/lang/translations/fa.po
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
# Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
|
||||||
|
#
|
||||||
|
# !!! IMPORTANT !!!
|
||||||
|
#
|
||||||
|
# Before you edit this file, please keep in mind that contributing to the project
|
||||||
|
# translations is possible ONLY via the Transifex online service.
|
||||||
|
#
|
||||||
|
# To submit your translations, visit https://www.transifex.com/ckeditor/ckeditor5.
|
||||||
|
#
|
||||||
|
# To learn more, check out the official contributor's guide:
|
||||||
|
# https://ckeditor.com/docs/ckeditor5/latest/framework/guides/contributing/contributing.html
|
||||||
|
#
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Language-Team: Persian (https://app.transifex.com/ckeditor/teams/11143/fa/)\n"
|
||||||
|
"Language: fa\n"
|
||||||
|
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
|
||||||
|
msgctxt "Toolbar button tooltip for the Block quote feature."
|
||||||
|
msgid "Block quote"
|
||||||
|
msgstr " بلوک نقل قول"
|
||||||
22
packages/ckeditor5-admonition/lang/translations/fi.po
Normal file
22
packages/ckeditor5-admonition/lang/translations/fi.po
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
# Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
|
||||||
|
#
|
||||||
|
# !!! IMPORTANT !!!
|
||||||
|
#
|
||||||
|
# Before you edit this file, please keep in mind that contributing to the project
|
||||||
|
# translations is possible ONLY via the Transifex online service.
|
||||||
|
#
|
||||||
|
# To submit your translations, visit https://www.transifex.com/ckeditor/ckeditor5.
|
||||||
|
#
|
||||||
|
# To learn more, check out the official contributor's guide:
|
||||||
|
# https://ckeditor.com/docs/ckeditor5/latest/framework/guides/contributing/contributing.html
|
||||||
|
#
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Language-Team: Finnish (https://app.transifex.com/ckeditor/teams/11143/fi/)\n"
|
||||||
|
"Language: fi\n"
|
||||||
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
|
||||||
|
msgctxt "Toolbar button tooltip for the Block quote feature."
|
||||||
|
msgid "Block quote"
|
||||||
|
msgstr "Lainaus"
|
||||||
22
packages/ckeditor5-admonition/lang/translations/fr.po
Normal file
22
packages/ckeditor5-admonition/lang/translations/fr.po
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
# Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
|
||||||
|
#
|
||||||
|
# !!! IMPORTANT !!!
|
||||||
|
#
|
||||||
|
# Before you edit this file, please keep in mind that contributing to the project
|
||||||
|
# translations is possible ONLY via the Transifex online service.
|
||||||
|
#
|
||||||
|
# To submit your translations, visit https://www.transifex.com/ckeditor/ckeditor5.
|
||||||
|
#
|
||||||
|
# To learn more, check out the official contributor's guide:
|
||||||
|
# https://ckeditor.com/docs/ckeditor5/latest/framework/guides/contributing/contributing.html
|
||||||
|
#
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Language-Team: French (https://app.transifex.com/ckeditor/teams/11143/fr/)\n"
|
||||||
|
"Language: fr\n"
|
||||||
|
"Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
|
||||||
|
msgctxt "Toolbar button tooltip for the Block quote feature."
|
||||||
|
msgid "Block quote"
|
||||||
|
msgstr "Citation"
|
||||||
22
packages/ckeditor5-admonition/lang/translations/gl.po
Normal file
22
packages/ckeditor5-admonition/lang/translations/gl.po
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
# Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
|
||||||
|
#
|
||||||
|
# !!! IMPORTANT !!!
|
||||||
|
#
|
||||||
|
# Before you edit this file, please keep in mind that contributing to the project
|
||||||
|
# translations is possible ONLY via the Transifex online service.
|
||||||
|
#
|
||||||
|
# To submit your translations, visit https://www.transifex.com/ckeditor/ckeditor5.
|
||||||
|
#
|
||||||
|
# To learn more, check out the official contributor's guide:
|
||||||
|
# https://ckeditor.com/docs/ckeditor5/latest/framework/guides/contributing/contributing.html
|
||||||
|
#
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Language-Team: Galician (https://app.transifex.com/ckeditor/teams/11143/gl/)\n"
|
||||||
|
"Language: gl\n"
|
||||||
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
|
||||||
|
msgctxt "Toolbar button tooltip for the Block quote feature."
|
||||||
|
msgid "Block quote"
|
||||||
|
msgstr "Cita de bloque"
|
||||||
22
packages/ckeditor5-admonition/lang/translations/gu.po
Normal file
22
packages/ckeditor5-admonition/lang/translations/gu.po
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
# Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
|
||||||
|
#
|
||||||
|
# !!! IMPORTANT !!!
|
||||||
|
#
|
||||||
|
# Before you edit this file, please keep in mind that contributing to the project
|
||||||
|
# translations is possible ONLY via the Transifex online service.
|
||||||
|
#
|
||||||
|
# To submit your translations, visit https://www.transifex.com/ckeditor/ckeditor5.
|
||||||
|
#
|
||||||
|
# To learn more, check out the official contributor's guide:
|
||||||
|
# https://ckeditor.com/docs/ckeditor5/latest/framework/guides/contributing/contributing.html
|
||||||
|
#
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Language-Team: Gujarati (https://app.transifex.com/ckeditor/teams/11143/gu/)\n"
|
||||||
|
"Language: gu\n"
|
||||||
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
|
||||||
|
msgctxt "Toolbar button tooltip for the Block quote feature."
|
||||||
|
msgid "Block quote"
|
||||||
|
msgstr " વિચાર ટાંકો"
|
||||||
22
packages/ckeditor5-admonition/lang/translations/he.po
Normal file
22
packages/ckeditor5-admonition/lang/translations/he.po
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
# Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
|
||||||
|
#
|
||||||
|
# !!! IMPORTANT !!!
|
||||||
|
#
|
||||||
|
# Before you edit this file, please keep in mind that contributing to the project
|
||||||
|
# translations is possible ONLY via the Transifex online service.
|
||||||
|
#
|
||||||
|
# To submit your translations, visit https://www.transifex.com/ckeditor/ckeditor5.
|
||||||
|
#
|
||||||
|
# To learn more, check out the official contributor's guide:
|
||||||
|
# https://ckeditor.com/docs/ckeditor5/latest/framework/guides/contributing/contributing.html
|
||||||
|
#
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Language-Team: Hebrew (https://app.transifex.com/ckeditor/teams/11143/he/)\n"
|
||||||
|
"Language: he\n"
|
||||||
|
"Plural-Forms: nplurals=3; plural=(n == 1 && n % 1 == 0) ? 0 : (n == 2 && n % 1 == 0) ? 1: 2;\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
|
||||||
|
msgctxt "Toolbar button tooltip for the Block quote feature."
|
||||||
|
msgid "Block quote"
|
||||||
|
msgstr "בלוק ציטוט"
|
||||||
22
packages/ckeditor5-admonition/lang/translations/hi.po
Normal file
22
packages/ckeditor5-admonition/lang/translations/hi.po
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
# Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
|
||||||
|
#
|
||||||
|
# !!! IMPORTANT !!!
|
||||||
|
#
|
||||||
|
# Before you edit this file, please keep in mind that contributing to the project
|
||||||
|
# translations is possible ONLY via the Transifex online service.
|
||||||
|
#
|
||||||
|
# To submit your translations, visit https://www.transifex.com/ckeditor/ckeditor5.
|
||||||
|
#
|
||||||
|
# To learn more, check out the official contributor's guide:
|
||||||
|
# https://ckeditor.com/docs/ckeditor5/latest/framework/guides/contributing/contributing.html
|
||||||
|
#
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Language-Team: Hindi (https://app.transifex.com/ckeditor/teams/11143/hi/)\n"
|
||||||
|
"Language: hi\n"
|
||||||
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
|
||||||
|
msgctxt "Toolbar button tooltip for the Block quote feature."
|
||||||
|
msgid "Block quote"
|
||||||
|
msgstr "Block quote"
|
||||||
22
packages/ckeditor5-admonition/lang/translations/hr.po
Normal file
22
packages/ckeditor5-admonition/lang/translations/hr.po
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
# Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
|
||||||
|
#
|
||||||
|
# !!! IMPORTANT !!!
|
||||||
|
#
|
||||||
|
# Before you edit this file, please keep in mind that contributing to the project
|
||||||
|
# translations is possible ONLY via the Transifex online service.
|
||||||
|
#
|
||||||
|
# To submit your translations, visit https://www.transifex.com/ckeditor/ckeditor5.
|
||||||
|
#
|
||||||
|
# To learn more, check out the official contributor's guide:
|
||||||
|
# https://ckeditor.com/docs/ckeditor5/latest/framework/guides/contributing/contributing.html
|
||||||
|
#
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Language-Team: Croatian (https://app.transifex.com/ckeditor/teams/11143/hr/)\n"
|
||||||
|
"Language: hr\n"
|
||||||
|
"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
|
||||||
|
msgctxt "Toolbar button tooltip for the Block quote feature."
|
||||||
|
msgid "Block quote"
|
||||||
|
msgstr "Blok citat"
|
||||||
22
packages/ckeditor5-admonition/lang/translations/hu.po
Normal file
22
packages/ckeditor5-admonition/lang/translations/hu.po
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
# Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
|
||||||
|
#
|
||||||
|
# !!! IMPORTANT !!!
|
||||||
|
#
|
||||||
|
# Before you edit this file, please keep in mind that contributing to the project
|
||||||
|
# translations is possible ONLY via the Transifex online service.
|
||||||
|
#
|
||||||
|
# To submit your translations, visit https://www.transifex.com/ckeditor/ckeditor5.
|
||||||
|
#
|
||||||
|
# To learn more, check out the official contributor's guide:
|
||||||
|
# https://ckeditor.com/docs/ckeditor5/latest/framework/guides/contributing/contributing.html
|
||||||
|
#
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Language-Team: Hungarian (https://app.transifex.com/ckeditor/teams/11143/hu/)\n"
|
||||||
|
"Language: hu\n"
|
||||||
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
|
||||||
|
msgctxt "Toolbar button tooltip for the Block quote feature."
|
||||||
|
msgid "Block quote"
|
||||||
|
msgstr "Idézet"
|
||||||
22
packages/ckeditor5-admonition/lang/translations/id.po
Normal file
22
packages/ckeditor5-admonition/lang/translations/id.po
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
# Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
|
||||||
|
#
|
||||||
|
# !!! IMPORTANT !!!
|
||||||
|
#
|
||||||
|
# Before you edit this file, please keep in mind that contributing to the project
|
||||||
|
# translations is possible ONLY via the Transifex online service.
|
||||||
|
#
|
||||||
|
# To submit your translations, visit https://www.transifex.com/ckeditor/ckeditor5.
|
||||||
|
#
|
||||||
|
# To learn more, check out the official contributor's guide:
|
||||||
|
# https://ckeditor.com/docs/ckeditor5/latest/framework/guides/contributing/contributing.html
|
||||||
|
#
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Language-Team: Indonesian (https://app.transifex.com/ckeditor/teams/11143/id/)\n"
|
||||||
|
"Language: id\n"
|
||||||
|
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
|
||||||
|
msgctxt "Toolbar button tooltip for the Block quote feature."
|
||||||
|
msgid "Block quote"
|
||||||
|
msgstr "Kutipan"
|
||||||
22
packages/ckeditor5-admonition/lang/translations/it.po
Normal file
22
packages/ckeditor5-admonition/lang/translations/it.po
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
# Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
|
||||||
|
#
|
||||||
|
# !!! IMPORTANT !!!
|
||||||
|
#
|
||||||
|
# Before you edit this file, please keep in mind that contributing to the project
|
||||||
|
# translations is possible ONLY via the Transifex online service.
|
||||||
|
#
|
||||||
|
# To submit your translations, visit https://www.transifex.com/ckeditor/ckeditor5.
|
||||||
|
#
|
||||||
|
# To learn more, check out the official contributor's guide:
|
||||||
|
# https://ckeditor.com/docs/ckeditor5/latest/framework/guides/contributing/contributing.html
|
||||||
|
#
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Language-Team: Italian (https://app.transifex.com/ckeditor/teams/11143/it/)\n"
|
||||||
|
"Language: it\n"
|
||||||
|
"Plural-Forms: nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
|
||||||
|
msgctxt "Toolbar button tooltip for the Block quote feature."
|
||||||
|
msgid "Block quote"
|
||||||
|
msgstr "Blocco citazione"
|
||||||
22
packages/ckeditor5-admonition/lang/translations/ja.po
Normal file
22
packages/ckeditor5-admonition/lang/translations/ja.po
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
# Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
|
||||||
|
#
|
||||||
|
# !!! IMPORTANT !!!
|
||||||
|
#
|
||||||
|
# Before you edit this file, please keep in mind that contributing to the project
|
||||||
|
# translations is possible ONLY via the Transifex online service.
|
||||||
|
#
|
||||||
|
# To submit your translations, visit https://www.transifex.com/ckeditor/ckeditor5.
|
||||||
|
#
|
||||||
|
# To learn more, check out the official contributor's guide:
|
||||||
|
# https://ckeditor.com/docs/ckeditor5/latest/framework/guides/contributing/contributing.html
|
||||||
|
#
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Language-Team: Japanese (https://app.transifex.com/ckeditor/teams/11143/ja/)\n"
|
||||||
|
"Language: ja\n"
|
||||||
|
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
|
||||||
|
msgctxt "Toolbar button tooltip for the Block quote feature."
|
||||||
|
msgid "Block quote"
|
||||||
|
msgstr "ブロッククオート(引用)"
|
||||||
22
packages/ckeditor5-admonition/lang/translations/km.po
Normal file
22
packages/ckeditor5-admonition/lang/translations/km.po
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
# Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
|
||||||
|
#
|
||||||
|
# !!! IMPORTANT !!!
|
||||||
|
#
|
||||||
|
# Before you edit this file, please keep in mind that contributing to the project
|
||||||
|
# translations is possible ONLY via the Transifex online service.
|
||||||
|
#
|
||||||
|
# To submit your translations, visit https://www.transifex.com/ckeditor/ckeditor5.
|
||||||
|
#
|
||||||
|
# To learn more, check out the official contributor's guide:
|
||||||
|
# https://ckeditor.com/docs/ckeditor5/latest/framework/guides/contributing/contributing.html
|
||||||
|
#
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Language-Team: Khmer (https://app.transifex.com/ckeditor/teams/11143/km/)\n"
|
||||||
|
"Language: km\n"
|
||||||
|
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
|
||||||
|
msgctxt "Toolbar button tooltip for the Block quote feature."
|
||||||
|
msgid "Block quote"
|
||||||
|
msgstr "ប្លុកពាក្យសម្រង់"
|
||||||
22
packages/ckeditor5-admonition/lang/translations/kn.po
Normal file
22
packages/ckeditor5-admonition/lang/translations/kn.po
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
# Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
|
||||||
|
#
|
||||||
|
# !!! IMPORTANT !!!
|
||||||
|
#
|
||||||
|
# Before you edit this file, please keep in mind that contributing to the project
|
||||||
|
# translations is possible ONLY via the Transifex online service.
|
||||||
|
#
|
||||||
|
# To submit your translations, visit https://www.transifex.com/ckeditor/ckeditor5.
|
||||||
|
#
|
||||||
|
# To learn more, check out the official contributor's guide:
|
||||||
|
# https://ckeditor.com/docs/ckeditor5/latest/framework/guides/contributing/contributing.html
|
||||||
|
#
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Language-Team: Kannada (https://app.transifex.com/ckeditor/teams/11143/kn/)\n"
|
||||||
|
"Language: kn\n"
|
||||||
|
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
|
||||||
|
msgctxt "Toolbar button tooltip for the Block quote feature."
|
||||||
|
msgid "Block quote"
|
||||||
|
msgstr "ಗುರುತಿಸಲಾದ ಉಲ್ಲೇಖ"
|
||||||
22
packages/ckeditor5-admonition/lang/translations/ko.po
Normal file
22
packages/ckeditor5-admonition/lang/translations/ko.po
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
# Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
|
||||||
|
#
|
||||||
|
# !!! IMPORTANT !!!
|
||||||
|
#
|
||||||
|
# Before you edit this file, please keep in mind that contributing to the project
|
||||||
|
# translations is possible ONLY via the Transifex online service.
|
||||||
|
#
|
||||||
|
# To submit your translations, visit https://www.transifex.com/ckeditor/ckeditor5.
|
||||||
|
#
|
||||||
|
# To learn more, check out the official contributor's guide:
|
||||||
|
# https://ckeditor.com/docs/ckeditor5/latest/framework/guides/contributing/contributing.html
|
||||||
|
#
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Language-Team: Korean (https://app.transifex.com/ckeditor/teams/11143/ko/)\n"
|
||||||
|
"Language: ko\n"
|
||||||
|
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
|
||||||
|
msgctxt "Toolbar button tooltip for the Block quote feature."
|
||||||
|
msgid "Block quote"
|
||||||
|
msgstr "인용 단락"
|
||||||
22
packages/ckeditor5-admonition/lang/translations/ku.po
Normal file
22
packages/ckeditor5-admonition/lang/translations/ku.po
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
# Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
|
||||||
|
#
|
||||||
|
# !!! IMPORTANT !!!
|
||||||
|
#
|
||||||
|
# Before you edit this file, please keep in mind that contributing to the project
|
||||||
|
# translations is possible ONLY via the Transifex online service.
|
||||||
|
#
|
||||||
|
# To submit your translations, visit https://www.transifex.com/ckeditor/ckeditor5.
|
||||||
|
#
|
||||||
|
# To learn more, check out the official contributor's guide:
|
||||||
|
# https://ckeditor.com/docs/ckeditor5/latest/framework/guides/contributing/contributing.html
|
||||||
|
#
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Language-Team: Kurdish (https://app.transifex.com/ckeditor/teams/11143/ku/)\n"
|
||||||
|
"Language: ku\n"
|
||||||
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
|
||||||
|
msgctxt "Toolbar button tooltip for the Block quote feature."
|
||||||
|
msgid "Block quote"
|
||||||
|
msgstr "وتەی وەرگیراو"
|
||||||
22
packages/ckeditor5-admonition/lang/translations/lt.po
Normal file
22
packages/ckeditor5-admonition/lang/translations/lt.po
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
# Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
|
||||||
|
#
|
||||||
|
# !!! IMPORTANT !!!
|
||||||
|
#
|
||||||
|
# Before you edit this file, please keep in mind that contributing to the project
|
||||||
|
# translations is possible ONLY via the Transifex online service.
|
||||||
|
#
|
||||||
|
# To submit your translations, visit https://www.transifex.com/ckeditor/ckeditor5.
|
||||||
|
#
|
||||||
|
# To learn more, check out the official contributor's guide:
|
||||||
|
# https://ckeditor.com/docs/ckeditor5/latest/framework/guides/contributing/contributing.html
|
||||||
|
#
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Language-Team: Lithuanian (https://app.transifex.com/ckeditor/teams/11143/lt/)\n"
|
||||||
|
"Language: lt\n"
|
||||||
|
"Plural-Forms: nplurals=4; plural=(n % 10 == 1 && (n % 100 > 19 || n % 100 < 11) ? 0 : (n % 10 >= 2 && n % 10 <=9) && (n % 100 > 19 || n % 100 < 11) ? 1 : n % 1 != 0 ? 2: 3);\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
|
||||||
|
msgctxt "Toolbar button tooltip for the Block quote feature."
|
||||||
|
msgid "Block quote"
|
||||||
|
msgstr "Citata"
|
||||||
22
packages/ckeditor5-admonition/lang/translations/lv.po
Normal file
22
packages/ckeditor5-admonition/lang/translations/lv.po
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
# Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
|
||||||
|
#
|
||||||
|
# !!! IMPORTANT !!!
|
||||||
|
#
|
||||||
|
# Before you edit this file, please keep in mind that contributing to the project
|
||||||
|
# translations is possible ONLY via the Transifex online service.
|
||||||
|
#
|
||||||
|
# To submit your translations, visit https://www.transifex.com/ckeditor/ckeditor5.
|
||||||
|
#
|
||||||
|
# To learn more, check out the official contributor's guide:
|
||||||
|
# https://ckeditor.com/docs/ckeditor5/latest/framework/guides/contributing/contributing.html
|
||||||
|
#
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Language-Team: Latvian (https://app.transifex.com/ckeditor/teams/11143/lv/)\n"
|
||||||
|
"Language: lv\n"
|
||||||
|
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2);\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
|
||||||
|
msgctxt "Toolbar button tooltip for the Block quote feature."
|
||||||
|
msgid "Block quote"
|
||||||
|
msgstr "Citāts"
|
||||||
22
packages/ckeditor5-admonition/lang/translations/ms.po
Normal file
22
packages/ckeditor5-admonition/lang/translations/ms.po
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
# Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
|
||||||
|
#
|
||||||
|
# !!! IMPORTANT !!!
|
||||||
|
#
|
||||||
|
# Before you edit this file, please keep in mind that contributing to the project
|
||||||
|
# translations is possible ONLY via the Transifex online service.
|
||||||
|
#
|
||||||
|
# To submit your translations, visit https://www.transifex.com/ckeditor/ckeditor5.
|
||||||
|
#
|
||||||
|
# To learn more, check out the official contributor's guide:
|
||||||
|
# https://ckeditor.com/docs/ckeditor5/latest/framework/guides/contributing/contributing.html
|
||||||
|
#
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Language-Team: Malay (https://app.transifex.com/ckeditor/teams/11143/ms/)\n"
|
||||||
|
"Language: ms\n"
|
||||||
|
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
|
||||||
|
msgctxt "Toolbar button tooltip for the Block quote feature."
|
||||||
|
msgid "Block quote"
|
||||||
|
msgstr "Blok petikan"
|
||||||
22
packages/ckeditor5-admonition/lang/translations/nb.po
Normal file
22
packages/ckeditor5-admonition/lang/translations/nb.po
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
# Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
|
||||||
|
#
|
||||||
|
# !!! IMPORTANT !!!
|
||||||
|
#
|
||||||
|
# Before you edit this file, please keep in mind that contributing to the project
|
||||||
|
# translations is possible ONLY via the Transifex online service.
|
||||||
|
#
|
||||||
|
# To submit your translations, visit https://www.transifex.com/ckeditor/ckeditor5.
|
||||||
|
#
|
||||||
|
# To learn more, check out the official contributor's guide:
|
||||||
|
# https://ckeditor.com/docs/ckeditor5/latest/framework/guides/contributing/contributing.html
|
||||||
|
#
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Language-Team: Norwegian Bokmål (https://app.transifex.com/ckeditor/teams/11143/nb/)\n"
|
||||||
|
"Language: nb\n"
|
||||||
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
|
||||||
|
msgctxt "Toolbar button tooltip for the Block quote feature."
|
||||||
|
msgid "Block quote"
|
||||||
|
msgstr "Blokksitat"
|
||||||
22
packages/ckeditor5-admonition/lang/translations/ne.po
Normal file
22
packages/ckeditor5-admonition/lang/translations/ne.po
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
# Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
|
||||||
|
#
|
||||||
|
# !!! IMPORTANT !!!
|
||||||
|
#
|
||||||
|
# Before you edit this file, please keep in mind that contributing to the project
|
||||||
|
# translations is possible ONLY via the Transifex online service.
|
||||||
|
#
|
||||||
|
# To submit your translations, visit https://www.transifex.com/ckeditor/ckeditor5.
|
||||||
|
#
|
||||||
|
# To learn more, check out the official contributor's guide:
|
||||||
|
# https://ckeditor.com/docs/ckeditor5/latest/framework/guides/contributing/contributing.html
|
||||||
|
#
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Language-Team: Nepali (Nepal) (https://app.transifex.com/ckeditor/teams/11143/ne_NP/)\n"
|
||||||
|
"Language: ne_NP\n"
|
||||||
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
|
||||||
|
msgctxt "Toolbar button tooltip for the Block quote feature."
|
||||||
|
msgid "Block quote"
|
||||||
|
msgstr "ब्लक उद्धरण"
|
||||||
22
packages/ckeditor5-admonition/lang/translations/nl.po
Normal file
22
packages/ckeditor5-admonition/lang/translations/nl.po
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
# Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
|
||||||
|
#
|
||||||
|
# !!! IMPORTANT !!!
|
||||||
|
#
|
||||||
|
# Before you edit this file, please keep in mind that contributing to the project
|
||||||
|
# translations is possible ONLY via the Transifex online service.
|
||||||
|
#
|
||||||
|
# To submit your translations, visit https://www.transifex.com/ckeditor/ckeditor5.
|
||||||
|
#
|
||||||
|
# To learn more, check out the official contributor's guide:
|
||||||
|
# https://ckeditor.com/docs/ckeditor5/latest/framework/guides/contributing/contributing.html
|
||||||
|
#
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Language-Team: Dutch (https://app.transifex.com/ckeditor/teams/11143/nl/)\n"
|
||||||
|
"Language: nl\n"
|
||||||
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
|
||||||
|
msgctxt "Toolbar button tooltip for the Block quote feature."
|
||||||
|
msgid "Block quote"
|
||||||
|
msgstr "Blok citaat"
|
||||||
22
packages/ckeditor5-admonition/lang/translations/no.po
Normal file
22
packages/ckeditor5-admonition/lang/translations/no.po
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
# Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
|
||||||
|
#
|
||||||
|
# !!! IMPORTANT !!!
|
||||||
|
#
|
||||||
|
# Before you edit this file, please keep in mind that contributing to the project
|
||||||
|
# translations is possible ONLY via the Transifex online service.
|
||||||
|
#
|
||||||
|
# To submit your translations, visit https://www.transifex.com/ckeditor/ckeditor5.
|
||||||
|
#
|
||||||
|
# To learn more, check out the official contributor's guide:
|
||||||
|
# https://ckeditor.com/docs/ckeditor5/latest/framework/guides/contributing/contributing.html
|
||||||
|
#
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Language-Team: Norwegian (https://app.transifex.com/ckeditor/teams/11143/no/)\n"
|
||||||
|
"Language: no\n"
|
||||||
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
|
||||||
|
msgctxt "Toolbar button tooltip for the Block quote feature."
|
||||||
|
msgid "Block quote"
|
||||||
|
msgstr "Blokksitat"
|
||||||
22
packages/ckeditor5-admonition/lang/translations/pl.po
Normal file
22
packages/ckeditor5-admonition/lang/translations/pl.po
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
# Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
|
||||||
|
#
|
||||||
|
# !!! IMPORTANT !!!
|
||||||
|
#
|
||||||
|
# Before you edit this file, please keep in mind that contributing to the project
|
||||||
|
# translations is possible ONLY via the Transifex online service.
|
||||||
|
#
|
||||||
|
# To submit your translations, visit https://www.transifex.com/ckeditor/ckeditor5.
|
||||||
|
#
|
||||||
|
# To learn more, check out the official contributor's guide:
|
||||||
|
# https://ckeditor.com/docs/ckeditor5/latest/framework/guides/contributing/contributing.html
|
||||||
|
#
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Language-Team: Polish (https://app.transifex.com/ckeditor/teams/11143/pl/)\n"
|
||||||
|
"Language: pl\n"
|
||||||
|
"Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
|
||||||
|
msgctxt "Toolbar button tooltip for the Block quote feature."
|
||||||
|
msgid "Block quote"
|
||||||
|
msgstr "Cytat blokowy"
|
||||||
22
packages/ckeditor5-admonition/lang/translations/pt-br.po
Normal file
22
packages/ckeditor5-admonition/lang/translations/pt-br.po
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
# Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
|
||||||
|
#
|
||||||
|
# !!! IMPORTANT !!!
|
||||||
|
#
|
||||||
|
# Before you edit this file, please keep in mind that contributing to the project
|
||||||
|
# translations is possible ONLY via the Transifex online service.
|
||||||
|
#
|
||||||
|
# To submit your translations, visit https://www.transifex.com/ckeditor/ckeditor5.
|
||||||
|
#
|
||||||
|
# To learn more, check out the official contributor's guide:
|
||||||
|
# https://ckeditor.com/docs/ckeditor5/latest/framework/guides/contributing/contributing.html
|
||||||
|
#
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Language-Team: Portuguese (Brazil) (https://app.transifex.com/ckeditor/teams/11143/pt_BR/)\n"
|
||||||
|
"Language: pt_BR\n"
|
||||||
|
"Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
|
||||||
|
msgctxt "Toolbar button tooltip for the Block quote feature."
|
||||||
|
msgid "Block quote"
|
||||||
|
msgstr "Bloco de citação"
|
||||||
22
packages/ckeditor5-admonition/lang/translations/pt.po
Normal file
22
packages/ckeditor5-admonition/lang/translations/pt.po
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
# Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
|
||||||
|
#
|
||||||
|
# !!! IMPORTANT !!!
|
||||||
|
#
|
||||||
|
# Before you edit this file, please keep in mind that contributing to the project
|
||||||
|
# translations is possible ONLY via the Transifex online service.
|
||||||
|
#
|
||||||
|
# To submit your translations, visit https://www.transifex.com/ckeditor/ckeditor5.
|
||||||
|
#
|
||||||
|
# To learn more, check out the official contributor's guide:
|
||||||
|
# https://ckeditor.com/docs/ckeditor5/latest/framework/guides/contributing/contributing.html
|
||||||
|
#
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Language-Team: Portuguese (https://app.transifex.com/ckeditor/teams/11143/pt/)\n"
|
||||||
|
"Language: pt\n"
|
||||||
|
"Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
|
||||||
|
msgctxt "Toolbar button tooltip for the Block quote feature."
|
||||||
|
msgid "Block quote"
|
||||||
|
msgstr "Bloco de citação"
|
||||||
22
packages/ckeditor5-admonition/lang/translations/ro.po
Normal file
22
packages/ckeditor5-admonition/lang/translations/ro.po
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
# Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
|
||||||
|
#
|
||||||
|
# !!! IMPORTANT !!!
|
||||||
|
#
|
||||||
|
# Before you edit this file, please keep in mind that contributing to the project
|
||||||
|
# translations is possible ONLY via the Transifex online service.
|
||||||
|
#
|
||||||
|
# To submit your translations, visit https://www.transifex.com/ckeditor/ckeditor5.
|
||||||
|
#
|
||||||
|
# To learn more, check out the official contributor's guide:
|
||||||
|
# https://ckeditor.com/docs/ckeditor5/latest/framework/guides/contributing/contributing.html
|
||||||
|
#
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Language-Team: Romanian (https://app.transifex.com/ckeditor/teams/11143/ro/)\n"
|
||||||
|
"Language: ro\n"
|
||||||
|
"Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1));\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
|
||||||
|
msgctxt "Toolbar button tooltip for the Block quote feature."
|
||||||
|
msgid "Block quote"
|
||||||
|
msgstr "Bloc citat"
|
||||||
22
packages/ckeditor5-admonition/lang/translations/ru.po
Normal file
22
packages/ckeditor5-admonition/lang/translations/ru.po
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
# Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
|
||||||
|
#
|
||||||
|
# !!! IMPORTANT !!!
|
||||||
|
#
|
||||||
|
# Before you edit this file, please keep in mind that contributing to the project
|
||||||
|
# translations is possible ONLY via the Transifex online service.
|
||||||
|
#
|
||||||
|
# To submit your translations, visit https://www.transifex.com/ckeditor/ckeditor5.
|
||||||
|
#
|
||||||
|
# To learn more, check out the official contributor's guide:
|
||||||
|
# https://ckeditor.com/docs/ckeditor5/latest/framework/guides/contributing/contributing.html
|
||||||
|
#
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Language-Team: Russian (https://app.transifex.com/ckeditor/teams/11143/ru/)\n"
|
||||||
|
"Language: ru\n"
|
||||||
|
"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
|
||||||
|
msgctxt "Toolbar button tooltip for the Block quote feature."
|
||||||
|
msgid "Block quote"
|
||||||
|
msgstr "Цитата"
|
||||||
22
packages/ckeditor5-admonition/lang/translations/sk.po
Normal file
22
packages/ckeditor5-admonition/lang/translations/sk.po
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
# Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
|
||||||
|
#
|
||||||
|
# !!! IMPORTANT !!!
|
||||||
|
#
|
||||||
|
# Before you edit this file, please keep in mind that contributing to the project
|
||||||
|
# translations is possible ONLY via the Transifex online service.
|
||||||
|
#
|
||||||
|
# To submit your translations, visit https://www.transifex.com/ckeditor/ckeditor5.
|
||||||
|
#
|
||||||
|
# To learn more, check out the official contributor's guide:
|
||||||
|
# https://ckeditor.com/docs/ckeditor5/latest/framework/guides/contributing/contributing.html
|
||||||
|
#
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Language-Team: Slovak (https://app.transifex.com/ckeditor/teams/11143/sk/)\n"
|
||||||
|
"Language: sk\n"
|
||||||
|
"Plural-Forms: nplurals=4; plural=(n % 1 == 0 && n == 1 ? 0 : n % 1 == 0 && n >= 2 && n <= 4 ? 1 : n % 1 != 0 ? 2: 3);\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
|
||||||
|
msgctxt "Toolbar button tooltip for the Block quote feature."
|
||||||
|
msgid "Block quote"
|
||||||
|
msgstr "Citát"
|
||||||
22
packages/ckeditor5-admonition/lang/translations/sl.po
Normal file
22
packages/ckeditor5-admonition/lang/translations/sl.po
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
# Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
|
||||||
|
#
|
||||||
|
# !!! IMPORTANT !!!
|
||||||
|
#
|
||||||
|
# Before you edit this file, please keep in mind that contributing to the project
|
||||||
|
# translations is possible ONLY via the Transifex online service.
|
||||||
|
#
|
||||||
|
# To submit your translations, visit https://www.transifex.com/ckeditor/ckeditor5.
|
||||||
|
#
|
||||||
|
# To learn more, check out the official contributor's guide:
|
||||||
|
# https://ckeditor.com/docs/ckeditor5/latest/framework/guides/contributing/contributing.html
|
||||||
|
#
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Language-Team: Slovenian (https://app.transifex.com/ckeditor/teams/11143/sl/)\n"
|
||||||
|
"Language: sl\n"
|
||||||
|
"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
|
||||||
|
msgctxt "Toolbar button tooltip for the Block quote feature."
|
||||||
|
msgid "Block quote"
|
||||||
|
msgstr "Blokiraj citat"
|
||||||
22
packages/ckeditor5-admonition/lang/translations/sq.po
Normal file
22
packages/ckeditor5-admonition/lang/translations/sq.po
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
# Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
|
||||||
|
#
|
||||||
|
# !!! IMPORTANT !!!
|
||||||
|
#
|
||||||
|
# Before you edit this file, please keep in mind that contributing to the project
|
||||||
|
# translations is possible ONLY via the Transifex online service.
|
||||||
|
#
|
||||||
|
# To submit your translations, visit https://www.transifex.com/ckeditor/ckeditor5.
|
||||||
|
#
|
||||||
|
# To learn more, check out the official contributor's guide:
|
||||||
|
# https://ckeditor.com/docs/ckeditor5/latest/framework/guides/contributing/contributing.html
|
||||||
|
#
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Language-Team: Albanian (https://app.transifex.com/ckeditor/teams/11143/sq/)\n"
|
||||||
|
"Language: sq\n"
|
||||||
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
|
||||||
|
msgctxt "Toolbar button tooltip for the Block quote feature."
|
||||||
|
msgid "Block quote"
|
||||||
|
msgstr "Thonjëzat"
|
||||||
22
packages/ckeditor5-admonition/lang/translations/sr-latn.po
Normal file
22
packages/ckeditor5-admonition/lang/translations/sr-latn.po
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
# Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
|
||||||
|
#
|
||||||
|
# !!! IMPORTANT !!!
|
||||||
|
#
|
||||||
|
# Before you edit this file, please keep in mind that contributing to the project
|
||||||
|
# translations is possible ONLY via the Transifex online service.
|
||||||
|
#
|
||||||
|
# To submit your translations, visit https://www.transifex.com/ckeditor/ckeditor5.
|
||||||
|
#
|
||||||
|
# To learn more, check out the official contributor's guide:
|
||||||
|
# https://ckeditor.com/docs/ckeditor5/latest/framework/guides/contributing/contributing.html
|
||||||
|
#
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Language-Team: Serbian (Latin) (https://app.transifex.com/ckeditor/teams/11143/sr@latin/)\n"
|
||||||
|
"Language: sr@latin\n"
|
||||||
|
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
|
||||||
|
msgctxt "Toolbar button tooltip for the Block quote feature."
|
||||||
|
msgid "Block quote"
|
||||||
|
msgstr "Citat"
|
||||||
22
packages/ckeditor5-admonition/lang/translations/sr.po
Normal file
22
packages/ckeditor5-admonition/lang/translations/sr.po
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
# Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
|
||||||
|
#
|
||||||
|
# !!! IMPORTANT !!!
|
||||||
|
#
|
||||||
|
# Before you edit this file, please keep in mind that contributing to the project
|
||||||
|
# translations is possible ONLY via the Transifex online service.
|
||||||
|
#
|
||||||
|
# To submit your translations, visit https://www.transifex.com/ckeditor/ckeditor5.
|
||||||
|
#
|
||||||
|
# To learn more, check out the official contributor's guide:
|
||||||
|
# https://ckeditor.com/docs/ckeditor5/latest/framework/guides/contributing/contributing.html
|
||||||
|
#
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Language-Team: Serbian (https://app.transifex.com/ckeditor/teams/11143/sr/)\n"
|
||||||
|
"Language: sr\n"
|
||||||
|
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
|
||||||
|
msgctxt "Toolbar button tooltip for the Block quote feature."
|
||||||
|
msgid "Block quote"
|
||||||
|
msgstr "Цитат"
|
||||||
22
packages/ckeditor5-admonition/lang/translations/sv.po
Normal file
22
packages/ckeditor5-admonition/lang/translations/sv.po
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
# Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
|
||||||
|
#
|
||||||
|
# !!! IMPORTANT !!!
|
||||||
|
#
|
||||||
|
# Before you edit this file, please keep in mind that contributing to the project
|
||||||
|
# translations is possible ONLY via the Transifex online service.
|
||||||
|
#
|
||||||
|
# To submit your translations, visit https://www.transifex.com/ckeditor/ckeditor5.
|
||||||
|
#
|
||||||
|
# To learn more, check out the official contributor's guide:
|
||||||
|
# https://ckeditor.com/docs/ckeditor5/latest/framework/guides/contributing/contributing.html
|
||||||
|
#
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Language-Team: Swedish (https://app.transifex.com/ckeditor/teams/11143/sv/)\n"
|
||||||
|
"Language: sv\n"
|
||||||
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
|
||||||
|
msgctxt "Toolbar button tooltip for the Block quote feature."
|
||||||
|
msgid "Block quote"
|
||||||
|
msgstr "Blockcitat"
|
||||||
22
packages/ckeditor5-admonition/lang/translations/th.po
Normal file
22
packages/ckeditor5-admonition/lang/translations/th.po
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
# Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
|
||||||
|
#
|
||||||
|
# !!! IMPORTANT !!!
|
||||||
|
#
|
||||||
|
# Before you edit this file, please keep in mind that contributing to the project
|
||||||
|
# translations is possible ONLY via the Transifex online service.
|
||||||
|
#
|
||||||
|
# To submit your translations, visit https://www.transifex.com/ckeditor/ckeditor5.
|
||||||
|
#
|
||||||
|
# To learn more, check out the official contributor's guide:
|
||||||
|
# https://ckeditor.com/docs/ckeditor5/latest/framework/guides/contributing/contributing.html
|
||||||
|
#
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Language-Team: Thai (https://app.transifex.com/ckeditor/teams/11143/th/)\n"
|
||||||
|
"Language: th\n"
|
||||||
|
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
|
||||||
|
msgctxt "Toolbar button tooltip for the Block quote feature."
|
||||||
|
msgid "Block quote"
|
||||||
|
msgstr "คำพูดบล็อก"
|
||||||
22
packages/ckeditor5-admonition/lang/translations/tk.po
Normal file
22
packages/ckeditor5-admonition/lang/translations/tk.po
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
# Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
|
||||||
|
#
|
||||||
|
# !!! IMPORTANT !!!
|
||||||
|
#
|
||||||
|
# Before you edit this file, please keep in mind that contributing to the project
|
||||||
|
# translations is possible ONLY via the Transifex online service.
|
||||||
|
#
|
||||||
|
# To submit your translations, visit https://www.transifex.com/ckeditor/ckeditor5.
|
||||||
|
#
|
||||||
|
# To learn more, check out the official contributor's guide:
|
||||||
|
# https://ckeditor.com/docs/ckeditor5/latest/framework/guides/contributing/contributing.html
|
||||||
|
#
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Language-Team: Turkmen (https://app.transifex.com/ckeditor/teams/11143/tk/)\n"
|
||||||
|
"Language: tk\n"
|
||||||
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
|
||||||
|
msgctxt "Toolbar button tooltip for the Block quote feature."
|
||||||
|
msgid "Block quote"
|
||||||
|
msgstr "Sitata blokirläň"
|
||||||
22
packages/ckeditor5-admonition/lang/translations/tr.po
Normal file
22
packages/ckeditor5-admonition/lang/translations/tr.po
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
# Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
|
||||||
|
#
|
||||||
|
# !!! IMPORTANT !!!
|
||||||
|
#
|
||||||
|
# Before you edit this file, please keep in mind that contributing to the project
|
||||||
|
# translations is possible ONLY via the Transifex online service.
|
||||||
|
#
|
||||||
|
# To submit your translations, visit https://www.transifex.com/ckeditor/ckeditor5.
|
||||||
|
#
|
||||||
|
# To learn more, check out the official contributor's guide:
|
||||||
|
# https://ckeditor.com/docs/ckeditor5/latest/framework/guides/contributing/contributing.html
|
||||||
|
#
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Language-Team: Turkish (https://app.transifex.com/ckeditor/teams/11143/tr/)\n"
|
||||||
|
"Language: tr\n"
|
||||||
|
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
|
||||||
|
msgctxt "Toolbar button tooltip for the Block quote feature."
|
||||||
|
msgid "Block quote"
|
||||||
|
msgstr "Alıntı"
|
||||||
22
packages/ckeditor5-admonition/lang/translations/ug.po
Normal file
22
packages/ckeditor5-admonition/lang/translations/ug.po
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
# Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
|
||||||
|
#
|
||||||
|
# !!! IMPORTANT !!!
|
||||||
|
#
|
||||||
|
# Before you edit this file, please keep in mind that contributing to the project
|
||||||
|
# translations is possible ONLY via the Transifex online service.
|
||||||
|
#
|
||||||
|
# To submit your translations, visit https://www.transifex.com/ckeditor/ckeditor5.
|
||||||
|
#
|
||||||
|
# To learn more, check out the official contributor's guide:
|
||||||
|
# https://ckeditor.com/docs/ckeditor5/latest/framework/guides/contributing/contributing.html
|
||||||
|
#
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Language-Team: Uyghur (https://app.transifex.com/ckeditor/teams/11143/ug/)\n"
|
||||||
|
"Language: ug\n"
|
||||||
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
|
||||||
|
msgctxt "Toolbar button tooltip for the Block quote feature."
|
||||||
|
msgid "Block quote"
|
||||||
|
msgstr "نەقىل"
|
||||||
22
packages/ckeditor5-admonition/lang/translations/uk.po
Normal file
22
packages/ckeditor5-admonition/lang/translations/uk.po
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
# Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
|
||||||
|
#
|
||||||
|
# !!! IMPORTANT !!!
|
||||||
|
#
|
||||||
|
# Before you edit this file, please keep in mind that contributing to the project
|
||||||
|
# translations is possible ONLY via the Transifex online service.
|
||||||
|
#
|
||||||
|
# To submit your translations, visit https://www.transifex.com/ckeditor/ckeditor5.
|
||||||
|
#
|
||||||
|
# To learn more, check out the official contributor's guide:
|
||||||
|
# https://ckeditor.com/docs/ckeditor5/latest/framework/guides/contributing/contributing.html
|
||||||
|
#
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Language-Team: Ukrainian (https://app.transifex.com/ckeditor/teams/11143/uk/)\n"
|
||||||
|
"Language: uk\n"
|
||||||
|
"Plural-Forms: nplurals=4; plural=(n % 1 == 0 && n % 10 == 1 && n % 100 != 11 ? 0 : n % 1 == 0 && n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14) ? 1 : n % 1 == 0 && (n % 10 ==0 || (n % 10 >=5 && n % 10 <=9) || (n % 100 >=11 && n % 100 <=14 )) ? 2: 3);\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
|
||||||
|
msgctxt "Toolbar button tooltip for the Block quote feature."
|
||||||
|
msgid "Block quote"
|
||||||
|
msgstr "Цитата"
|
||||||
22
packages/ckeditor5-admonition/lang/translations/ur.po
Normal file
22
packages/ckeditor5-admonition/lang/translations/ur.po
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
# Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
|
||||||
|
#
|
||||||
|
# !!! IMPORTANT !!!
|
||||||
|
#
|
||||||
|
# Before you edit this file, please keep in mind that contributing to the project
|
||||||
|
# translations is possible ONLY via the Transifex online service.
|
||||||
|
#
|
||||||
|
# To submit your translations, visit https://www.transifex.com/ckeditor/ckeditor5.
|
||||||
|
#
|
||||||
|
# To learn more, check out the official contributor's guide:
|
||||||
|
# https://ckeditor.com/docs/ckeditor5/latest/framework/guides/contributing/contributing.html
|
||||||
|
#
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Language-Team: Urdu (https://app.transifex.com/ckeditor/teams/11143/ur/)\n"
|
||||||
|
"Language: ur\n"
|
||||||
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
|
||||||
|
msgctxt "Toolbar button tooltip for the Block quote feature."
|
||||||
|
msgid "Block quote"
|
||||||
|
msgstr "خانہ اقتباس"
|
||||||
22
packages/ckeditor5-admonition/lang/translations/uz.po
Normal file
22
packages/ckeditor5-admonition/lang/translations/uz.po
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
# Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
|
||||||
|
#
|
||||||
|
# !!! IMPORTANT !!!
|
||||||
|
#
|
||||||
|
# Before you edit this file, please keep in mind that contributing to the project
|
||||||
|
# translations is possible ONLY via the Transifex online service.
|
||||||
|
#
|
||||||
|
# To submit your translations, visit https://www.transifex.com/ckeditor/ckeditor5.
|
||||||
|
#
|
||||||
|
# To learn more, check out the official contributor's guide:
|
||||||
|
# https://ckeditor.com/docs/ckeditor5/latest/framework/guides/contributing/contributing.html
|
||||||
|
#
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Language-Team: Uzbek (https://app.transifex.com/ckeditor/teams/11143/uz/)\n"
|
||||||
|
"Language: uz\n"
|
||||||
|
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
|
||||||
|
msgctxt "Toolbar button tooltip for the Block quote feature."
|
||||||
|
msgid "Block quote"
|
||||||
|
msgstr "Iqtibos"
|
||||||
22
packages/ckeditor5-admonition/lang/translations/vi.po
Normal file
22
packages/ckeditor5-admonition/lang/translations/vi.po
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
# Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
|
||||||
|
#
|
||||||
|
# !!! IMPORTANT !!!
|
||||||
|
#
|
||||||
|
# Before you edit this file, please keep in mind that contributing to the project
|
||||||
|
# translations is possible ONLY via the Transifex online service.
|
||||||
|
#
|
||||||
|
# To submit your translations, visit https://www.transifex.com/ckeditor/ckeditor5.
|
||||||
|
#
|
||||||
|
# To learn more, check out the official contributor's guide:
|
||||||
|
# https://ckeditor.com/docs/ckeditor5/latest/framework/guides/contributing/contributing.html
|
||||||
|
#
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Language-Team: Vietnamese (https://app.transifex.com/ckeditor/teams/11143/vi/)\n"
|
||||||
|
"Language: vi\n"
|
||||||
|
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
|
||||||
|
msgctxt "Toolbar button tooltip for the Block quote feature."
|
||||||
|
msgid "Block quote"
|
||||||
|
msgstr "Trích dẫn"
|
||||||
22
packages/ckeditor5-admonition/lang/translations/zh-cn.po
Normal file
22
packages/ckeditor5-admonition/lang/translations/zh-cn.po
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
# Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
|
||||||
|
#
|
||||||
|
# !!! IMPORTANT !!!
|
||||||
|
#
|
||||||
|
# Before you edit this file, please keep in mind that contributing to the project
|
||||||
|
# translations is possible ONLY via the Transifex online service.
|
||||||
|
#
|
||||||
|
# To submit your translations, visit https://www.transifex.com/ckeditor/ckeditor5.
|
||||||
|
#
|
||||||
|
# To learn more, check out the official contributor's guide:
|
||||||
|
# https://ckeditor.com/docs/ckeditor5/latest/framework/guides/contributing/contributing.html
|
||||||
|
#
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Language-Team: Chinese (China) (https://app.transifex.com/ckeditor/teams/11143/zh_CN/)\n"
|
||||||
|
"Language: zh_CN\n"
|
||||||
|
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
|
||||||
|
msgctxt "Toolbar button tooltip for the Block quote feature."
|
||||||
|
msgid "Block quote"
|
||||||
|
msgstr "块引用"
|
||||||
22
packages/ckeditor5-admonition/lang/translations/zh.po
Normal file
22
packages/ckeditor5-admonition/lang/translations/zh.po
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
# Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
|
||||||
|
#
|
||||||
|
# !!! IMPORTANT !!!
|
||||||
|
#
|
||||||
|
# Before you edit this file, please keep in mind that contributing to the project
|
||||||
|
# translations is possible ONLY via the Transifex online service.
|
||||||
|
#
|
||||||
|
# To submit your translations, visit https://www.transifex.com/ckeditor/ckeditor5.
|
||||||
|
#
|
||||||
|
# To learn more, check out the official contributor's guide:
|
||||||
|
# https://ckeditor.com/docs/ckeditor5/latest/framework/guides/contributing/contributing.html
|
||||||
|
#
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Language-Team: Chinese (Taiwan) (https://app.transifex.com/ckeditor/teams/11143/zh_TW/)\n"
|
||||||
|
"Language: zh_TW\n"
|
||||||
|
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
|
||||||
|
msgctxt "Toolbar button tooltip for the Block quote feature."
|
||||||
|
msgid "Block quote"
|
||||||
|
msgstr "段落引用"
|
||||||
62
packages/ckeditor5-admonition/package.json
Normal file
62
packages/ckeditor5-admonition/package.json
Normal file
@@ -0,0 +1,62 @@
|
|||||||
|
{
|
||||||
|
"name": "@ckeditor/ckeditor5-block-quote",
|
||||||
|
"version": "43.2.0",
|
||||||
|
"description": "Block quote 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-block-quote"
|
||||||
|
},
|
||||||
|
"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"
|
||||||
|
}
|
||||||
|
}
|
||||||
23
packages/ckeditor5-admonition/src/augmentation.ts
Normal file
23
packages/ckeditor5-admonition/src/augmentation.ts
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
/**
|
||||||
|
* @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 {
|
||||||
|
BlockQuote,
|
||||||
|
BlockQuoteCommand,
|
||||||
|
BlockQuoteEditing,
|
||||||
|
BlockQuoteUI
|
||||||
|
} from './index.js';
|
||||||
|
|
||||||
|
declare module '@ckeditor/ckeditor5-core' {
|
||||||
|
interface PluginsMap {
|
||||||
|
[ BlockQuote.pluginName ]: BlockQuote;
|
||||||
|
[ BlockQuoteEditing.pluginName ]: BlockQuoteEditing;
|
||||||
|
[ BlockQuoteUI.pluginName ]: BlockQuoteUI;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface CommandsMap {
|
||||||
|
blockQuote: BlockQuoteCommand;
|
||||||
|
}
|
||||||
|
}
|
||||||
39
packages/ckeditor5-admonition/src/blockquote.ts
Normal file
39
packages/ckeditor5-admonition/src/blockquote.ts
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
/**
|
||||||
|
* @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 block-quote/blockquote
|
||||||
|
*/
|
||||||
|
|
||||||
|
import { Plugin } from 'ckeditor5/src/core.js';
|
||||||
|
|
||||||
|
import BlockQuoteEditing from './blockquoteediting.js';
|
||||||
|
import BlockQuoteUI from './blockquoteui.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 BlockQuote extends Plugin {
|
||||||
|
/**
|
||||||
|
* @inheritDoc
|
||||||
|
*/
|
||||||
|
public static get requires() {
|
||||||
|
return [ BlockQuoteEditing, BlockQuoteUI ] as const;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @inheritDoc
|
||||||
|
*/
|
||||||
|
public static get pluginName() {
|
||||||
|
return 'BlockQuote' as const;
|
||||||
|
}
|
||||||
|
}
|
||||||
222
packages/ckeditor5-admonition/src/blockquotecommand.ts
Normal file
222
packages/ckeditor5-admonition/src/blockquotecommand.ts
Normal file
@@ -0,0 +1,222 @@
|
|||||||
|
/**
|
||||||
|
* @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 block-quote/blockquotecommand
|
||||||
|
*/
|
||||||
|
|
||||||
|
import { Command } from 'ckeditor5/src/core.js';
|
||||||
|
import { first } from 'ckeditor5/src/utils.js';
|
||||||
|
import type { DocumentFragment, Element, Position, Range, Schema, Writer } from 'ckeditor5/src/engine.js';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The block quote command plugin.
|
||||||
|
*
|
||||||
|
* @extends module:core/command~Command
|
||||||
|
*/
|
||||||
|
export default class BlockQuoteCommand extends Command {
|
||||||
|
/**
|
||||||
|
* Whether the selection starts in a block quote.
|
||||||
|
*
|
||||||
|
* @observable
|
||||||
|
* @readonly
|
||||||
|
*/
|
||||||
|
declare public value: boolean;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @inheritDoc
|
||||||
|
*/
|
||||||
|
public override refresh(): void {
|
||||||
|
this.value = this._getValue();
|
||||||
|
this.isEnabled = this._checkEnabled();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Executes the command. When the command {@link #value is on}, all top-most block quotes within
|
||||||
|
* the selection will be removed. If it is off, all selected blocks will be wrapped with
|
||||||
|
* a block quote.
|
||||||
|
*
|
||||||
|
* @fires execute
|
||||||
|
* @param options Command options.
|
||||||
|
* @param options.forceValue If set, it will force the command behavior. If `true`, the command will apply a block quote,
|
||||||
|
* otherwise the command will remove the block quote. If not set, the command will act basing on its current value.
|
||||||
|
*/
|
||||||
|
public override execute( options: { forceValue?: boolean } = {} ): void {
|
||||||
|
const model = this.editor.model;
|
||||||
|
const schema = model.schema;
|
||||||
|
const selection = model.document.selection;
|
||||||
|
|
||||||
|
const blocks = Array.from( selection.getSelectedBlocks() );
|
||||||
|
|
||||||
|
const value = ( options.forceValue === undefined ) ? !this.value : options.forceValue;
|
||||||
|
|
||||||
|
model.change( writer => {
|
||||||
|
if ( !value ) {
|
||||||
|
this._removeQuote( writer, blocks.filter( findQuote ) );
|
||||||
|
} else {
|
||||||
|
const blocksToQuote = blocks.filter( block => {
|
||||||
|
// Already quoted blocks needs to be considered while quoting too
|
||||||
|
// in order to reuse their <bQ> elements.
|
||||||
|
return findQuote( block ) || checkCanBeQuoted( schema, block );
|
||||||
|
} );
|
||||||
|
|
||||||
|
this._applyQuote( writer, blocksToQuote );
|
||||||
|
}
|
||||||
|
} );
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Checks the command's {@link #value}.
|
||||||
|
*/
|
||||||
|
private _getValue(): boolean {
|
||||||
|
const selection = this.editor.model.document.selection;
|
||||||
|
|
||||||
|
const firstBlock = first( selection.getSelectedBlocks() );
|
||||||
|
|
||||||
|
// In the current implementation, the block quote must be an immediate parent of a block element.
|
||||||
|
return !!( firstBlock && findQuote( firstBlock ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Checks whether the command can be enabled in the current context.
|
||||||
|
*
|
||||||
|
* @returns Whether the command should be enabled.
|
||||||
|
*/
|
||||||
|
private _checkEnabled(): boolean {
|
||||||
|
if ( this.value ) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
const selection = this.editor.model.document.selection;
|
||||||
|
const schema = this.editor.model.schema;
|
||||||
|
|
||||||
|
const firstBlock = first( selection.getSelectedBlocks() );
|
||||||
|
|
||||||
|
if ( !firstBlock ) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return checkCanBeQuoted( schema, firstBlock );
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Removes the quote from given blocks.
|
||||||
|
*
|
||||||
|
* If blocks which are supposed to be "unquoted" are in the middle of a quote,
|
||||||
|
* start it or end it, then the quote will be split (if needed) and the blocks
|
||||||
|
* will be moved out of it, so other quoted blocks remained quoted.
|
||||||
|
*/
|
||||||
|
private _removeQuote( writer: Writer, blocks: Array<Element> ): void {
|
||||||
|
// Unquote all groups of block. Iterate in the reverse order to not break following ranges.
|
||||||
|
getRangesOfBlockGroups( writer, blocks ).reverse().forEach( groupRange => {
|
||||||
|
if ( groupRange.start.isAtStart && groupRange.end.isAtEnd ) {
|
||||||
|
writer.unwrap( groupRange.start.parent as Element );
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// The group of blocks are at the beginning of an <bQ> so let's move them left (out of the <bQ>).
|
||||||
|
if ( groupRange.start.isAtStart ) {
|
||||||
|
const positionBefore = writer.createPositionBefore( groupRange.start.parent as Element );
|
||||||
|
|
||||||
|
writer.move( groupRange, positionBefore );
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// The blocks are in the middle of an <bQ> so we need to split the <bQ> after the last block
|
||||||
|
// so we move the items there.
|
||||||
|
if ( !groupRange.end.isAtEnd ) {
|
||||||
|
writer.split( groupRange.end );
|
||||||
|
}
|
||||||
|
|
||||||
|
// Now we are sure that groupRange.end.isAtEnd is true, so let's move the blocks right.
|
||||||
|
|
||||||
|
const positionAfter = writer.createPositionAfter( groupRange.end.parent as Element );
|
||||||
|
|
||||||
|
writer.move( groupRange, positionAfter );
|
||||||
|
} );
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Applies the quote to given blocks.
|
||||||
|
*/
|
||||||
|
private _applyQuote( writer: Writer, blocks: Array<Element> ): void {
|
||||||
|
const quotesToMerge: Array<Element | DocumentFragment> = [];
|
||||||
|
|
||||||
|
// Quote all groups of block. Iterate in the reverse order to not break following ranges.
|
||||||
|
getRangesOfBlockGroups( writer, blocks ).reverse().forEach( groupRange => {
|
||||||
|
let quote = findQuote( groupRange.start );
|
||||||
|
|
||||||
|
if ( !quote ) {
|
||||||
|
quote = writer.createElement( 'blockQuote' );
|
||||||
|
|
||||||
|
writer.wrap( groupRange, quote );
|
||||||
|
}
|
||||||
|
|
||||||
|
quotesToMerge.push( quote );
|
||||||
|
} );
|
||||||
|
|
||||||
|
// Merge subsequent <bQ> elements. Reverse the order again because this time we want to go through
|
||||||
|
// the <bQ> elements in the source order (due to how merge works – it moves the right element's content
|
||||||
|
// to the first element and removes the right one. Since we may need to merge a couple of subsequent `<bQ>` elements
|
||||||
|
// we want to keep the reference to the first (furthest left) one.
|
||||||
|
quotesToMerge.reverse().reduce( ( currentQuote, nextQuote ) => {
|
||||||
|
if ( currentQuote.nextSibling == nextQuote ) {
|
||||||
|
writer.merge( writer.createPositionAfter( currentQuote ) );
|
||||||
|
|
||||||
|
return currentQuote;
|
||||||
|
}
|
||||||
|
|
||||||
|
return nextQuote;
|
||||||
|
} );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function findQuote( elementOrPosition: Element | Position ): Element | DocumentFragment | null {
|
||||||
|
return elementOrPosition.parent!.name == 'blockQuote' ? elementOrPosition.parent : null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns a minimal array of ranges containing groups of subsequent blocks.
|
||||||
|
*
|
||||||
|
* content: abcdefgh
|
||||||
|
* blocks: [ a, b, d, f, g, h ]
|
||||||
|
* output ranges: [ab]c[d]e[fgh]
|
||||||
|
*/
|
||||||
|
function getRangesOfBlockGroups( writer: Writer, blocks: Array<Element> ): Array<Range> {
|
||||||
|
let startPosition;
|
||||||
|
let i = 0;
|
||||||
|
const ranges = [];
|
||||||
|
|
||||||
|
while ( i < blocks.length ) {
|
||||||
|
const block = blocks[ i ];
|
||||||
|
const nextBlock = blocks[ i + 1 ];
|
||||||
|
|
||||||
|
if ( !startPosition ) {
|
||||||
|
startPosition = writer.createPositionBefore( block );
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( !nextBlock || block.nextSibling != nextBlock ) {
|
||||||
|
ranges.push( writer.createRange( startPosition, writer.createPositionAfter( block ) ) );
|
||||||
|
startPosition = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
|
||||||
|
return ranges;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Checks whether <bQ> can wrap the block.
|
||||||
|
*/
|
||||||
|
function checkCanBeQuoted( schema: Schema, block: Element ): boolean {
|
||||||
|
// TMP will be replaced with schema.checkWrap().
|
||||||
|
const isBQAllowed = schema.checkChild( block.parent as Element, 'blockQuote' );
|
||||||
|
const isBlockAllowedInBQ = schema.checkChild( [ '$root', 'blockQuote' ], block );
|
||||||
|
|
||||||
|
return isBQAllowed && isBlockAllowedInBQ;
|
||||||
|
}
|
||||||
146
packages/ckeditor5-admonition/src/blockquoteediting.ts
Normal file
146
packages/ckeditor5-admonition/src/blockquoteediting.ts
Normal file
@@ -0,0 +1,146 @@
|
|||||||
|
/**
|
||||||
|
* @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 block-quote/blockquoteediting
|
||||||
|
*/
|
||||||
|
|
||||||
|
import { Plugin } from 'ckeditor5/src/core.js';
|
||||||
|
import { Enter, type ViewDocumentEnterEvent } from 'ckeditor5/src/enter.js';
|
||||||
|
import { Delete, type ViewDocumentDeleteEvent } from 'ckeditor5/src/typing.js';
|
||||||
|
|
||||||
|
import BlockQuoteCommand from './blockquotecommand.js';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The block quote editing.
|
||||||
|
*
|
||||||
|
* Introduces the `'blockQuote'` command and the `'blockQuote'` model element.
|
||||||
|
*
|
||||||
|
* @extends module:core/plugin~Plugin
|
||||||
|
*/
|
||||||
|
export default class BlockQuoteEditing extends Plugin {
|
||||||
|
/**
|
||||||
|
* @inheritDoc
|
||||||
|
*/
|
||||||
|
public static get pluginName() {
|
||||||
|
return 'BlockQuoteEditing' as const;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @inheritDoc
|
||||||
|
*/
|
||||||
|
public static get requires() {
|
||||||
|
return [ Enter, Delete ] as const;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @inheritDoc
|
||||||
|
*/
|
||||||
|
public init(): void {
|
||||||
|
const editor = this.editor;
|
||||||
|
const schema = editor.model.schema;
|
||||||
|
|
||||||
|
editor.commands.add( 'blockQuote', new BlockQuoteCommand( editor ) );
|
||||||
|
|
||||||
|
schema.register( 'blockQuote', {
|
||||||
|
inheritAllFrom: '$container'
|
||||||
|
} );
|
||||||
|
|
||||||
|
editor.conversion.elementToElement( { model: 'blockQuote', view: 'blockquote' } );
|
||||||
|
|
||||||
|
// Postfixer which cleans incorrect model states connected with block quotes.
|
||||||
|
editor.model.document.registerPostFixer( writer => {
|
||||||
|
const changes = editor.model.document.differ.getChanges();
|
||||||
|
|
||||||
|
for ( const entry of changes ) {
|
||||||
|
if ( entry.type == 'insert' ) {
|
||||||
|
const element = entry.position.nodeAfter;
|
||||||
|
|
||||||
|
if ( !element ) {
|
||||||
|
// We are inside a text node.
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( element.is( 'element', 'blockQuote' ) && element.isEmpty ) {
|
||||||
|
// Added an empty blockQuote - remove it.
|
||||||
|
writer.remove( element );
|
||||||
|
|
||||||
|
return true;
|
||||||
|
} else if ( element.is( 'element', 'blockQuote' ) && !schema.checkChild( entry.position, element ) ) {
|
||||||
|
// Added a blockQuote in incorrect place. Unwrap it so the content inside is not lost.
|
||||||
|
writer.unwrap( element );
|
||||||
|
|
||||||
|
return true;
|
||||||
|
} else if ( element.is( 'element' ) ) {
|
||||||
|
// Just added an element. Check that all children meet the scheme rules.
|
||||||
|
const range = writer.createRangeIn( element );
|
||||||
|
|
||||||
|
for ( const child of range.getItems() ) {
|
||||||
|
if (
|
||||||
|
child.is( 'element', 'blockQuote' ) &&
|
||||||
|
!schema.checkChild( writer.createPositionBefore( child ), child )
|
||||||
|
) {
|
||||||
|
writer.unwrap( child );
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else if ( entry.type == 'remove' ) {
|
||||||
|
const parent = entry.position.parent;
|
||||||
|
|
||||||
|
if ( parent.is( 'element', 'blockQuote' ) && parent.isEmpty ) {
|
||||||
|
// Something got removed and now blockQuote is empty. Remove the blockQuote as well.
|
||||||
|
writer.remove( parent );
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
} );
|
||||||
|
|
||||||
|
const viewDocument = this.editor.editing.view.document;
|
||||||
|
const selection = editor.model.document.selection;
|
||||||
|
const blockQuoteCommand: BlockQuoteCommand = editor.commands.get( 'blockQuote' )!;
|
||||||
|
|
||||||
|
// Overwrite default Enter key behavior.
|
||||||
|
// If Enter key is pressed with selection collapsed in empty block inside a quote, break the quote.
|
||||||
|
this.listenTo<ViewDocumentEnterEvent>( viewDocument, 'enter', ( evt, data ) => {
|
||||||
|
if ( !selection.isCollapsed || !blockQuoteCommand.value ) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const positionParent = selection.getLastPosition()!.parent;
|
||||||
|
|
||||||
|
if ( positionParent.isEmpty ) {
|
||||||
|
editor.execute( 'blockQuote' );
|
||||||
|
editor.editing.view.scrollToTheSelection();
|
||||||
|
|
||||||
|
data.preventDefault();
|
||||||
|
evt.stop();
|
||||||
|
}
|
||||||
|
}, { context: 'blockquote' } );
|
||||||
|
|
||||||
|
// Overwrite default Backspace key behavior.
|
||||||
|
// If Backspace key is pressed with selection collapsed in first empty block inside a quote, break the quote.
|
||||||
|
this.listenTo<ViewDocumentDeleteEvent>( viewDocument, 'delete', ( evt, data ) => {
|
||||||
|
if ( data.direction != 'backward' || !selection.isCollapsed || !blockQuoteCommand!.value ) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const positionParent = selection.getLastPosition()!.parent;
|
||||||
|
|
||||||
|
if ( positionParent.isEmpty && !positionParent.previousSibling ) {
|
||||||
|
editor.execute( 'blockQuote' );
|
||||||
|
editor.editing.view.scrollToTheSelection();
|
||||||
|
|
||||||
|
data.preventDefault();
|
||||||
|
evt.stop();
|
||||||
|
}
|
||||||
|
}, { context: 'blockquote' } );
|
||||||
|
}
|
||||||
|
}
|
||||||
84
packages/ckeditor5-admonition/src/blockquoteui.ts
Normal file
84
packages/ckeditor5-admonition/src/blockquoteui.ts
Normal file
@@ -0,0 +1,84 @@
|
|||||||
|
/**
|
||||||
|
* @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 block-quote/blockquoteui
|
||||||
|
*/
|
||||||
|
|
||||||
|
import { Plugin, icons } from 'ckeditor5/src/core.js';
|
||||||
|
import { ButtonView, MenuBarMenuListItemButtonView } from 'ckeditor5/src/ui.js';
|
||||||
|
|
||||||
|
import '../theme/blockquote.css';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The block quote UI plugin.
|
||||||
|
*
|
||||||
|
* It introduces the `'blockQuote'` button.
|
||||||
|
*
|
||||||
|
* @extends module:core/plugin~Plugin
|
||||||
|
*/
|
||||||
|
export default class BlockQuoteUI extends Plugin {
|
||||||
|
/**
|
||||||
|
* @inheritDoc
|
||||||
|
*/
|
||||||
|
public static get pluginName() {
|
||||||
|
return 'BlockQuoteUI' as const;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @inheritDoc
|
||||||
|
*/
|
||||||
|
public init(): void {
|
||||||
|
const editor = this.editor;
|
||||||
|
|
||||||
|
editor.ui.componentFactory.add( 'blockQuote', () => {
|
||||||
|
const buttonView = this._createButton( ButtonView );
|
||||||
|
|
||||||
|
buttonView.set( {
|
||||||
|
tooltip: true
|
||||||
|
} );
|
||||||
|
|
||||||
|
return buttonView;
|
||||||
|
} );
|
||||||
|
|
||||||
|
editor.ui.componentFactory.add( 'menuBar:blockQuote', () => {
|
||||||
|
const buttonView = this._createButton( MenuBarMenuListItemButtonView );
|
||||||
|
|
||||||
|
buttonView.set( {
|
||||||
|
role: 'menuitemcheckbox'
|
||||||
|
} );
|
||||||
|
|
||||||
|
return buttonView;
|
||||||
|
} );
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a button for block quote command to use either in toolbar or in menu bar.
|
||||||
|
*/
|
||||||
|
private _createButton<T extends typeof ButtonView | typeof MenuBarMenuListItemButtonView>( ButtonClass: T ): InstanceType<T> {
|
||||||
|
const editor = this.editor;
|
||||||
|
const locale = editor.locale;
|
||||||
|
const command = editor.commands.get( 'blockQuote' )!;
|
||||||
|
const view = new ButtonClass( editor.locale ) as InstanceType<T>;
|
||||||
|
const t = locale.t;
|
||||||
|
|
||||||
|
view.set( {
|
||||||
|
label: t( 'Block quote' ),
|
||||||
|
icon: icons.quote,
|
||||||
|
isToggleable: true
|
||||||
|
} );
|
||||||
|
|
||||||
|
view.bind( 'isEnabled' ).to( command, 'isEnabled' );
|
||||||
|
view.bind( 'isOn' ).to( command, 'value' );
|
||||||
|
|
||||||
|
// Execute the command.
|
||||||
|
this.listenTo( view, 'execute', () => {
|
||||||
|
editor.execute( 'blockQuote' );
|
||||||
|
editor.editing.view.focus();
|
||||||
|
} );
|
||||||
|
|
||||||
|
return view;
|
||||||
|
}
|
||||||
|
}
|
||||||
15
packages/ckeditor5-admonition/src/index.ts
Normal file
15
packages/ckeditor5-admonition/src/index.ts
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
/**
|
||||||
|
* @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 block-quote
|
||||||
|
*/
|
||||||
|
|
||||||
|
export { default as BlockQuote } from './blockquote.js';
|
||||||
|
export { default as BlockQuoteEditing } from './blockquoteediting.js';
|
||||||
|
export { default as BlockQuoteUI } from './blockquoteui.js';
|
||||||
|
export type { default as BlockQuoteCommand } from './blockquotecommand.js';
|
||||||
|
|
||||||
|
import './augmentation.js';
|
||||||
14
packages/ckeditor5-admonition/tests/blockquote.js
Normal file
14
packages/ckeditor5-admonition/tests/blockquote.js
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
/**
|
||||||
|
* @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 BlockQuote from '../src/blockquote.js';
|
||||||
|
import BlockQuoteEditing from '../src/blockquoteediting.js';
|
||||||
|
import BlockQuoteUI from '../src/blockquoteui.js';
|
||||||
|
|
||||||
|
describe( 'BlockQuote', () => {
|
||||||
|
it( 'requires BlockQuoteEditing and BlockQuoteUI', () => {
|
||||||
|
expect( BlockQuote.requires ).to.deep.equal( [ BlockQuoteEditing, BlockQuoteUI ] );
|
||||||
|
} );
|
||||||
|
} );
|
||||||
648
packages/ckeditor5-admonition/tests/blockquotecommand.js
Normal file
648
packages/ckeditor5-admonition/tests/blockquotecommand.js
Normal file
@@ -0,0 +1,648 @@
|
|||||||
|
/**
|
||||||
|
* @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 BlockQuoteEditing from '../src/blockquoteediting.js';
|
||||||
|
import BlockQuoteCommand from '../src/blockquotecommand.js';
|
||||||
|
|
||||||
|
import VirtualTestEditor from '@ckeditor/ckeditor5-core/tests/_utils/virtualtesteditor.js';
|
||||||
|
import { getData as getModelData, setData as setModelData } from '@ckeditor/ckeditor5-engine/src/dev-utils/model.js';
|
||||||
|
import { getData as getViewData } from '@ckeditor/ckeditor5-engine/src/dev-utils/view.js';
|
||||||
|
|
||||||
|
import Command from '@ckeditor/ckeditor5-core/src/command.js';
|
||||||
|
|
||||||
|
describe( 'BlockQuoteCommand', () => {
|
||||||
|
let editor, model, command;
|
||||||
|
|
||||||
|
beforeEach( () => {
|
||||||
|
return VirtualTestEditor
|
||||||
|
.create( {
|
||||||
|
plugins: [ BlockQuoteEditing ]
|
||||||
|
} )
|
||||||
|
.then( newEditor => {
|
||||||
|
editor = newEditor;
|
||||||
|
|
||||||
|
model = editor.model;
|
||||||
|
|
||||||
|
model.schema.register( 'paragraph', { inheritAllFrom: '$block' } );
|
||||||
|
model.schema.register( 'heading', { inheritAllFrom: '$block' } );
|
||||||
|
model.schema.register( 'widget' );
|
||||||
|
|
||||||
|
model.schema.extend( 'widget', {
|
||||||
|
allowIn: '$root',
|
||||||
|
allowChildren: '$text',
|
||||||
|
isLimit: true,
|
||||||
|
isObject: true
|
||||||
|
} );
|
||||||
|
|
||||||
|
editor.conversion.for( 'downcast' ).elementToElement( { model: 'paragraph', view: 'p' } );
|
||||||
|
editor.conversion.for( 'downcast' ).elementToElement( { model: 'heading', view: 'h' } );
|
||||||
|
editor.conversion.for( 'downcast' ).elementToElement( { model: 'widget', view: 'widget' } );
|
||||||
|
|
||||||
|
command = editor.commands.get( 'blockQuote' );
|
||||||
|
} );
|
||||||
|
} );
|
||||||
|
|
||||||
|
afterEach( async () => {
|
||||||
|
await editor.destroy();
|
||||||
|
} );
|
||||||
|
|
||||||
|
it( 'is a command', () => {
|
||||||
|
expect( BlockQuoteCommand.prototype ).to.be.instanceOf( Command );
|
||||||
|
expect( command ).to.be.instanceOf( Command );
|
||||||
|
} );
|
||||||
|
|
||||||
|
describe( 'value', () => {
|
||||||
|
it( 'is false when selection is not in a block quote', () => {
|
||||||
|
setModelData( model, '<paragraph>x[]x</paragraph>' );
|
||||||
|
|
||||||
|
expect( command ).to.have.property( 'value', false );
|
||||||
|
} );
|
||||||
|
|
||||||
|
it( 'is false when start of the selection is not in a block quote', () => {
|
||||||
|
setModelData( model, '<paragraph>x[x</paragraph><blockQuote><paragraph>y]y</paragraph></blockQuote>' );
|
||||||
|
|
||||||
|
expect( command ).to.have.property( 'value', false );
|
||||||
|
} );
|
||||||
|
|
||||||
|
it( 'is false when selection starts in a blockless space', () => {
|
||||||
|
model.schema.extend( '$text', { allowIn: '$root' } );
|
||||||
|
|
||||||
|
setModelData( model, 'x[]x' );
|
||||||
|
|
||||||
|
expect( command ).to.have.property( 'value', false );
|
||||||
|
} );
|
||||||
|
|
||||||
|
it( 'is true when selection is in a block quote', () => {
|
||||||
|
setModelData( model, '<blockQuote><paragraph>x[]x</paragraph></blockQuote>' );
|
||||||
|
|
||||||
|
expect( command ).to.have.property( 'value', true );
|
||||||
|
} );
|
||||||
|
|
||||||
|
it( 'is true when selection starts in a block quote', () => {
|
||||||
|
setModelData( model, '<blockQuote><paragraph>x[x</paragraph></blockQuote><paragraph>y]y</paragraph>' );
|
||||||
|
|
||||||
|
expect( command ).to.have.property( 'value', true );
|
||||||
|
} );
|
||||||
|
} );
|
||||||
|
|
||||||
|
describe( 'isEnabled', () => {
|
||||||
|
it( 'is true when selection is in a block which can be wrapped with blockQuote', () => {
|
||||||
|
setModelData( model, '<paragraph>x[]x</paragraph>' );
|
||||||
|
|
||||||
|
expect( command ).to.have.property( 'isEnabled', true );
|
||||||
|
} );
|
||||||
|
|
||||||
|
it( 'is true when selection is in a block which is already in blockQuote', () => {
|
||||||
|
setModelData( model, '<blockQuote><paragraph>x[]x</paragraph></blockQuote>' );
|
||||||
|
|
||||||
|
expect( command ).to.have.property( 'isEnabled', true );
|
||||||
|
} );
|
||||||
|
|
||||||
|
it( 'is true when selection starts in a block which can be wrapped with blockQuote', () => {
|
||||||
|
setModelData( model, '<paragraph>x[x</paragraph><widget>y]y</widget>' );
|
||||||
|
|
||||||
|
expect( command ).to.have.property( 'isEnabled', true );
|
||||||
|
} );
|
||||||
|
|
||||||
|
it( 'is false when selection is in an element which cannot be wrapped with blockQuote (because it cannot be its child)', () => {
|
||||||
|
setModelData( model, '<widget>x[]x</widget>' );
|
||||||
|
|
||||||
|
expect( command ).to.have.property( 'isEnabled', false );
|
||||||
|
} );
|
||||||
|
|
||||||
|
it(
|
||||||
|
'is false when selection is in an element which cannot be wrapped with blockQuote' +
|
||||||
|
'(because mQ is not allowed in its parent)',
|
||||||
|
() => {
|
||||||
|
model.schema.addChildCheck( ( ctx, childDef ) => {
|
||||||
|
if ( childDef.name == 'blockQuote' ) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
} );
|
||||||
|
|
||||||
|
setModelData( model, '<paragraph>x[]x</paragraph>' );
|
||||||
|
|
||||||
|
expect( command ).to.have.property( 'isEnabled', false );
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
// https://github.com/ckeditor/ckeditor5-engine/issues/826
|
||||||
|
// it( 'is false when selection starts in an element which cannot be wrapped with blockQuote', () => {
|
||||||
|
// setModelData( model, '<widget>x[x</widget><paragraph>y]y</paragraph>' );
|
||||||
|
|
||||||
|
// expect( command ).to.have.property( 'isEnabled', false );
|
||||||
|
// } );
|
||||||
|
} );
|
||||||
|
|
||||||
|
describe( 'execute()', () => {
|
||||||
|
describe( 'applying quote', () => {
|
||||||
|
it( 'should wrap a single block', () => {
|
||||||
|
setModelData(
|
||||||
|
model,
|
||||||
|
'<paragraph>abc</paragraph>' +
|
||||||
|
'<paragraph>x[]x</paragraph>' +
|
||||||
|
'<paragraph>def</paragraph>'
|
||||||
|
);
|
||||||
|
|
||||||
|
editor.execute( 'blockQuote' );
|
||||||
|
|
||||||
|
expect( getModelData( model ) ).to.equal(
|
||||||
|
'<paragraph>abc</paragraph>' +
|
||||||
|
'<blockQuote><paragraph>x[]x</paragraph></blockQuote>' +
|
||||||
|
'<paragraph>def</paragraph>'
|
||||||
|
);
|
||||||
|
|
||||||
|
expect( getViewData( editor.editing.view ) ).to.equal(
|
||||||
|
'<p>abc</p><blockquote><p>x{}x</p></blockquote><p>def</p>'
|
||||||
|
);
|
||||||
|
} );
|
||||||
|
|
||||||
|
it( 'should wrap multiple blocks', () => {
|
||||||
|
setModelData(
|
||||||
|
model,
|
||||||
|
'<heading>a[bc</heading>' +
|
||||||
|
'<paragraph>xx</paragraph>' +
|
||||||
|
'<paragraph>de]f</paragraph>'
|
||||||
|
);
|
||||||
|
|
||||||
|
editor.execute( 'blockQuote' );
|
||||||
|
|
||||||
|
expect( getModelData( model ) ).to.equal(
|
||||||
|
'<blockQuote>' +
|
||||||
|
'<heading>a[bc</heading>' +
|
||||||
|
'<paragraph>xx</paragraph>' +
|
||||||
|
'<paragraph>de]f</paragraph>' +
|
||||||
|
'</blockQuote>'
|
||||||
|
);
|
||||||
|
|
||||||
|
expect( getViewData( editor.editing.view ) ).to.equal(
|
||||||
|
'<blockquote><h>a{bc</h><p>xx</p><p>de}f</p></blockquote>'
|
||||||
|
);
|
||||||
|
} );
|
||||||
|
|
||||||
|
it( 'should merge with an existing quote', () => {
|
||||||
|
setModelData(
|
||||||
|
model,
|
||||||
|
'<heading>a[bc</heading>' +
|
||||||
|
'<blockQuote><paragraph>x]x</paragraph><paragraph>yy</paragraph></blockQuote>' +
|
||||||
|
'<paragraph>def</paragraph>'
|
||||||
|
);
|
||||||
|
|
||||||
|
editor.execute( 'blockQuote' );
|
||||||
|
|
||||||
|
// Selection incorrectly trimmed.
|
||||||
|
expect( getModelData( model ) ).to.equal(
|
||||||
|
'<blockQuote>' +
|
||||||
|
'<heading>abc</heading>' +
|
||||||
|
'<paragraph>[x]x</paragraph>' +
|
||||||
|
'<paragraph>yy</paragraph>' +
|
||||||
|
'</blockQuote>' +
|
||||||
|
'<paragraph>def</paragraph>'
|
||||||
|
);
|
||||||
|
|
||||||
|
// Selection incorrectly trimmed.
|
||||||
|
expect( getViewData( editor.editing.view ) ).to.equal(
|
||||||
|
'<blockquote><h>abc</h><p>{x}x</p><p>yy</p></blockquote><p>def</p>'
|
||||||
|
);
|
||||||
|
} );
|
||||||
|
|
||||||
|
it( 'should not merge with a quote preceding the current block', () => {
|
||||||
|
setModelData(
|
||||||
|
model,
|
||||||
|
'<blockQuote><paragraph>abc</paragraph></blockQuote>' +
|
||||||
|
'<paragraph>x[]x</paragraph>'
|
||||||
|
);
|
||||||
|
|
||||||
|
editor.execute( 'blockQuote' );
|
||||||
|
|
||||||
|
expect( getModelData( model ) ).to.equal(
|
||||||
|
'<blockQuote><paragraph>abc</paragraph></blockQuote>' +
|
||||||
|
'<blockQuote><paragraph>x[]x</paragraph></blockQuote>'
|
||||||
|
);
|
||||||
|
|
||||||
|
expect( getViewData( editor.editing.view ) ).to.equal(
|
||||||
|
'<blockquote><p>abc</p></blockquote>' +
|
||||||
|
'<blockquote><p>x{}x</p></blockquote>'
|
||||||
|
);
|
||||||
|
} );
|
||||||
|
|
||||||
|
it( 'should not merge with a quote following the current block', () => {
|
||||||
|
setModelData(
|
||||||
|
model,
|
||||||
|
'<paragraph>x[]x</paragraph>' +
|
||||||
|
'<blockQuote><paragraph>abc</paragraph></blockQuote>'
|
||||||
|
);
|
||||||
|
|
||||||
|
editor.execute( 'blockQuote' );
|
||||||
|
|
||||||
|
expect( getModelData( model ) ).to.equal(
|
||||||
|
'<blockQuote><paragraph>x[]x</paragraph></blockQuote>' +
|
||||||
|
'<blockQuote><paragraph>abc</paragraph></blockQuote>'
|
||||||
|
);
|
||||||
|
|
||||||
|
expect( getViewData( editor.editing.view ) ).to.equal(
|
||||||
|
'<blockquote><p>x{}x</p></blockquote>' +
|
||||||
|
'<blockquote><p>abc</p></blockquote>'
|
||||||
|
);
|
||||||
|
} );
|
||||||
|
|
||||||
|
it( 'should merge with an existing quote (more blocks)', () => {
|
||||||
|
setModelData(
|
||||||
|
model,
|
||||||
|
'<heading>a[bc</heading>' +
|
||||||
|
'<paragraph>def</paragraph>' +
|
||||||
|
'<blockQuote><paragraph>x]x</paragraph></blockQuote>' +
|
||||||
|
'<paragraph>ghi</paragraph>'
|
||||||
|
);
|
||||||
|
|
||||||
|
editor.execute( 'blockQuote' );
|
||||||
|
|
||||||
|
// Selection incorrectly trimmed.
|
||||||
|
expect( getModelData( model ) ).to.equal(
|
||||||
|
'<blockQuote>' +
|
||||||
|
'<heading>abc</heading>' +
|
||||||
|
'<paragraph>def</paragraph>' +
|
||||||
|
'<paragraph>[x]x</paragraph>' +
|
||||||
|
'</blockQuote>' +
|
||||||
|
'<paragraph>ghi</paragraph>'
|
||||||
|
);
|
||||||
|
|
||||||
|
// Selection incorrectly trimmed.
|
||||||
|
expect( getViewData( editor.editing.view ) ).to.equal(
|
||||||
|
'<blockquote><h>abc</h><p>def</p><p>{x}x</p></blockquote><p>ghi</p>'
|
||||||
|
);
|
||||||
|
} );
|
||||||
|
|
||||||
|
it( 'should not wrap non-block content', () => {
|
||||||
|
setModelData(
|
||||||
|
model,
|
||||||
|
'<paragraph>a[bc</paragraph>' +
|
||||||
|
'<widget>xx</widget>' +
|
||||||
|
'<paragraph>de]f</paragraph>'
|
||||||
|
);
|
||||||
|
|
||||||
|
editor.execute( 'blockQuote' );
|
||||||
|
|
||||||
|
// Selection incorrectly trimmed.
|
||||||
|
expect( getModelData( model ) ).to.equal(
|
||||||
|
'<blockQuote>' +
|
||||||
|
'<paragraph>abc</paragraph>' +
|
||||||
|
'</blockQuote>' +
|
||||||
|
'[<widget>xx</widget>' +
|
||||||
|
'<blockQuote>' +
|
||||||
|
'<paragraph>de]f</paragraph>' +
|
||||||
|
'</blockQuote>'
|
||||||
|
);
|
||||||
|
|
||||||
|
// Selection incorrectly trimmed.
|
||||||
|
expect( getViewData( editor.editing.view ) ).to.equal(
|
||||||
|
'<blockquote><p>abc</p></blockquote>[<widget>xx</widget><blockquote><p>de}f</p></blockquote>'
|
||||||
|
);
|
||||||
|
} );
|
||||||
|
|
||||||
|
it( 'should correctly wrap and merge groups of blocks', () => {
|
||||||
|
setModelData(
|
||||||
|
model,
|
||||||
|
'<paragraph>a[bc</paragraph>' +
|
||||||
|
'<widget>xx</widget>' +
|
||||||
|
'<paragraph>def</paragraph>' +
|
||||||
|
'<blockQuote><paragraph>ghi</paragraph></blockQuote>' +
|
||||||
|
'<widget>yy</widget>' +
|
||||||
|
'<paragraph>jk]l</paragraph>'
|
||||||
|
);
|
||||||
|
|
||||||
|
editor.execute( 'blockQuote' );
|
||||||
|
|
||||||
|
// Selection incorrectly trimmed.
|
||||||
|
expect( getModelData( model ) ).to.equal(
|
||||||
|
'<blockQuote><paragraph>abc</paragraph></blockQuote>' +
|
||||||
|
'[<widget>xx</widget>' +
|
||||||
|
'<blockQuote><paragraph>def</paragraph><paragraph>ghi</paragraph></blockQuote>' +
|
||||||
|
'<widget>yy</widget>' +
|
||||||
|
'<blockQuote><paragraph>jk]l</paragraph></blockQuote>'
|
||||||
|
);
|
||||||
|
|
||||||
|
// Selection incorrectly trimmed.
|
||||||
|
expect( getViewData( editor.editing.view ) ).to.equal(
|
||||||
|
'<blockquote><p>abc</p></blockquote>' +
|
||||||
|
'[<widget>xx</widget>' +
|
||||||
|
'<blockquote><p>def</p><p>ghi</p></blockquote>' +
|
||||||
|
'<widget>yy</widget>' +
|
||||||
|
'<blockquote><p>jk}l</p></blockquote>'
|
||||||
|
);
|
||||||
|
} );
|
||||||
|
|
||||||
|
it( 'should correctly merge a couple of subsequent quotes', () => {
|
||||||
|
setModelData(
|
||||||
|
model,
|
||||||
|
'<paragraph>x</paragraph>' +
|
||||||
|
'<paragraph>a[bc</paragraph>' +
|
||||||
|
'<blockQuote><paragraph>def</paragraph></blockQuote>' +
|
||||||
|
'<paragraph>ghi</paragraph>' +
|
||||||
|
'<blockQuote><paragraph>jkl</paragraph></blockQuote>' +
|
||||||
|
'<paragraph>mn]o</paragraph>' +
|
||||||
|
'<paragraph>y</paragraph>'
|
||||||
|
);
|
||||||
|
|
||||||
|
editor.execute( 'blockQuote' );
|
||||||
|
|
||||||
|
// Selection incorrectly trimmed.
|
||||||
|
expect( getModelData( model ) ).to.equal(
|
||||||
|
'<paragraph>x</paragraph>' +
|
||||||
|
'<blockQuote>' +
|
||||||
|
'<paragraph>abc</paragraph>' +
|
||||||
|
'<paragraph>def</paragraph>' +
|
||||||
|
'<paragraph>ghi</paragraph>' +
|
||||||
|
'<paragraph>jkl</paragraph>' +
|
||||||
|
'<paragraph>[mn]o</paragraph>' +
|
||||||
|
'</blockQuote>' +
|
||||||
|
'<paragraph>y</paragraph>'
|
||||||
|
);
|
||||||
|
|
||||||
|
// Selection incorrectly trimmed.
|
||||||
|
expect( getViewData( editor.editing.view ) ).to.equal(
|
||||||
|
'<p>x</p>' +
|
||||||
|
'<blockquote>' +
|
||||||
|
'<p>abc</p>' +
|
||||||
|
'<p>def</p>' +
|
||||||
|
'<p>ghi</p>' +
|
||||||
|
'<p>jkl</p>' +
|
||||||
|
'<p>{mn}o</p>' +
|
||||||
|
'</blockquote>' +
|
||||||
|
'<p>y</p>'
|
||||||
|
);
|
||||||
|
} );
|
||||||
|
|
||||||
|
it( 'should not wrap a block which can not be in a quote', () => {
|
||||||
|
// blockQuote is allowed in root, but fooBlock can not be inside blockQuote.
|
||||||
|
model.schema.register( 'fooBlock', { inheritAllFrom: '$block' } );
|
||||||
|
model.schema.addChildCheck( ( ctx, childDef ) => {
|
||||||
|
if ( ctx.endsWith( 'blockQuote' ) && childDef.name == 'fooBlock' ) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
} );
|
||||||
|
|
||||||
|
editor.conversion.for( 'downcast' ).elementToElement( { model: 'fooBlock', view: 'fooblock' } );
|
||||||
|
|
||||||
|
setModelData(
|
||||||
|
model,
|
||||||
|
'<paragraph>a[bc</paragraph>' +
|
||||||
|
'<fooBlock>xx</fooBlock>' +
|
||||||
|
'<paragraph>de]f</paragraph>'
|
||||||
|
);
|
||||||
|
|
||||||
|
editor.execute( 'blockQuote' );
|
||||||
|
|
||||||
|
// Selection incorrectly trimmed.
|
||||||
|
expect( getModelData( model ) ).to.equal(
|
||||||
|
'<blockQuote>' +
|
||||||
|
'<paragraph>abc</paragraph>' +
|
||||||
|
'</blockQuote>' +
|
||||||
|
'<fooBlock>[xx</fooBlock>' +
|
||||||
|
'<blockQuote>' +
|
||||||
|
'<paragraph>de]f</paragraph>' +
|
||||||
|
'</blockQuote>'
|
||||||
|
);
|
||||||
|
} );
|
||||||
|
|
||||||
|
it( 'should not wrap a block which parent does not allow quote inside itself', () => {
|
||||||
|
// blockQuote is not be allowed in fooWrapper, but fooBlock can be inside blockQuote.
|
||||||
|
model.schema.register( 'fooWrapper' );
|
||||||
|
model.schema.register( 'fooBlock', { inheritAllFrom: '$block' } );
|
||||||
|
|
||||||
|
model.schema.extend( 'fooWrapper', { allowIn: '$root' } );
|
||||||
|
model.schema.extend( 'fooBlock', { allowIn: 'fooWrapper' } );
|
||||||
|
|
||||||
|
editor.conversion.for( 'downcast' ).elementToElement( { model: 'fooWrapper', view: 'foowrapper' } );
|
||||||
|
editor.conversion.for( 'downcast' ).elementToElement( { model: 'fooBlock', view: 'fooblock' } );
|
||||||
|
|
||||||
|
setModelData(
|
||||||
|
model,
|
||||||
|
'<paragraph>a[bc</paragraph>' +
|
||||||
|
'<fooWrapper><fooBlock>xx</fooBlock></fooWrapper>' +
|
||||||
|
'<paragraph>de]f</paragraph>'
|
||||||
|
);
|
||||||
|
|
||||||
|
editor.execute( 'blockQuote' );
|
||||||
|
|
||||||
|
// Selection incorrectly trimmed.
|
||||||
|
expect( getModelData( model ) ).to.equal(
|
||||||
|
'<blockQuote>' +
|
||||||
|
'<paragraph>abc</paragraph>' +
|
||||||
|
'</blockQuote>' +
|
||||||
|
'<fooWrapper><fooBlock>[xx</fooBlock></fooWrapper>' +
|
||||||
|
'<blockQuote>' +
|
||||||
|
'<paragraph>de]f</paragraph>' +
|
||||||
|
'</blockQuote>'
|
||||||
|
);
|
||||||
|
} );
|
||||||
|
|
||||||
|
it( 'should handle forceValue = true param', () => {
|
||||||
|
setModelData(
|
||||||
|
model,
|
||||||
|
'<blockQuote>' +
|
||||||
|
'<paragraph>x[x</paragraph>' +
|
||||||
|
'</blockQuote>' +
|
||||||
|
'<paragraph>d]ef</paragraph>'
|
||||||
|
);
|
||||||
|
|
||||||
|
editor.execute( 'blockQuote', { forceValue: true } );
|
||||||
|
|
||||||
|
expect( getModelData( model ) ).to.equal(
|
||||||
|
'<blockQuote>' +
|
||||||
|
'<paragraph>x[x</paragraph>' +
|
||||||
|
'<paragraph>d]ef</paragraph>' +
|
||||||
|
'</blockQuote>'
|
||||||
|
);
|
||||||
|
|
||||||
|
expect( getViewData( editor.editing.view ) ).to.equal(
|
||||||
|
'<blockquote><p>x{x</p><p>d}ef</p></blockquote>'
|
||||||
|
);
|
||||||
|
} );
|
||||||
|
} );
|
||||||
|
|
||||||
|
describe( 'removing quote', () => {
|
||||||
|
it( 'should unwrap a single block', () => {
|
||||||
|
setModelData(
|
||||||
|
model,
|
||||||
|
'<paragraph>abc</paragraph>' +
|
||||||
|
'<blockQuote><paragraph>x[]x</paragraph></blockQuote>' +
|
||||||
|
'<paragraph>def</paragraph>'
|
||||||
|
);
|
||||||
|
|
||||||
|
editor.execute( 'blockQuote' );
|
||||||
|
|
||||||
|
expect( getModelData( model ) ).to.equal(
|
||||||
|
'<paragraph>abc</paragraph>' +
|
||||||
|
'<paragraph>x[]x</paragraph>' +
|
||||||
|
'<paragraph>def</paragraph>'
|
||||||
|
);
|
||||||
|
|
||||||
|
expect( getViewData( editor.editing.view ) ).to.equal(
|
||||||
|
'<p>abc</p><p>x{}x</p><p>def</p>'
|
||||||
|
);
|
||||||
|
} );
|
||||||
|
|
||||||
|
it( 'should unwrap multiple blocks', () => {
|
||||||
|
setModelData(
|
||||||
|
model,
|
||||||
|
'<blockQuote>' +
|
||||||
|
'<paragraph>a[bc</paragraph>' +
|
||||||
|
'<paragraph>xx</paragraph>' +
|
||||||
|
'<paragraph>de]f</paragraph>' +
|
||||||
|
'</blockQuote>'
|
||||||
|
);
|
||||||
|
|
||||||
|
editor.execute( 'blockQuote' );
|
||||||
|
|
||||||
|
expect( getModelData( model ) ).to.equal(
|
||||||
|
'<paragraph>a[bc</paragraph>' +
|
||||||
|
'<paragraph>xx</paragraph>' +
|
||||||
|
'<paragraph>de]f</paragraph>'
|
||||||
|
);
|
||||||
|
|
||||||
|
expect( getViewData( editor.editing.view ) ).to.equal(
|
||||||
|
'<p>a{bc</p><p>xx</p><p>de}f</p>'
|
||||||
|
);
|
||||||
|
} );
|
||||||
|
|
||||||
|
it( 'should unwrap only the selected blocks - at the beginning', () => {
|
||||||
|
setModelData(
|
||||||
|
model,
|
||||||
|
'<paragraph>xx</paragraph>' +
|
||||||
|
'<blockQuote>' +
|
||||||
|
'<paragraph>a[b]c</paragraph>' +
|
||||||
|
'<paragraph>xx</paragraph>' +
|
||||||
|
'</blockQuote>' +
|
||||||
|
'<paragraph>yy</paragraph>'
|
||||||
|
);
|
||||||
|
|
||||||
|
editor.execute( 'blockQuote' );
|
||||||
|
|
||||||
|
expect( getModelData( model ) ).to.equal(
|
||||||
|
'<paragraph>xx</paragraph>' +
|
||||||
|
'<paragraph>a[b]c</paragraph>' +
|
||||||
|
'<blockQuote>' +
|
||||||
|
'<paragraph>xx</paragraph>' +
|
||||||
|
'</blockQuote>' +
|
||||||
|
'<paragraph>yy</paragraph>'
|
||||||
|
);
|
||||||
|
|
||||||
|
expect( getViewData( editor.editing.view ) ).to.equal(
|
||||||
|
'<p>xx</p><p>a{b}c</p><blockquote><p>xx</p></blockquote><p>yy</p>'
|
||||||
|
);
|
||||||
|
} );
|
||||||
|
|
||||||
|
it( 'should unwrap only the selected blocks - at the end', () => {
|
||||||
|
setModelData(
|
||||||
|
model,
|
||||||
|
'<blockQuote>' +
|
||||||
|
'<paragraph>abc</paragraph>' +
|
||||||
|
'<paragraph>x[x</paragraph>' +
|
||||||
|
'</blockQuote>' +
|
||||||
|
'<paragraph>de]f</paragraph>'
|
||||||
|
);
|
||||||
|
|
||||||
|
editor.execute( 'blockQuote' );
|
||||||
|
|
||||||
|
expect( getModelData( model ) ).to.equal(
|
||||||
|
'<blockQuote>' +
|
||||||
|
'<paragraph>abc</paragraph>' +
|
||||||
|
'</blockQuote>' +
|
||||||
|
'<paragraph>x[x</paragraph>' +
|
||||||
|
'<paragraph>de]f</paragraph>'
|
||||||
|
);
|
||||||
|
|
||||||
|
expect( getViewData( editor.editing.view ) ).to.equal(
|
||||||
|
'<blockquote><p>abc</p></blockquote><p>x{x</p><p>de}f</p>'
|
||||||
|
);
|
||||||
|
} );
|
||||||
|
|
||||||
|
it( 'should unwrap only the selected blocks - in the middle', () => {
|
||||||
|
setModelData(
|
||||||
|
model,
|
||||||
|
'<paragraph>xx</paragraph>' +
|
||||||
|
'<blockQuote>' +
|
||||||
|
'<paragraph>abc</paragraph>' +
|
||||||
|
'<paragraph>c[]de</paragraph>' +
|
||||||
|
'<paragraph>fgh</paragraph>' +
|
||||||
|
'</blockQuote>' +
|
||||||
|
'<paragraph>xx</paragraph>'
|
||||||
|
);
|
||||||
|
|
||||||
|
editor.execute( 'blockQuote' );
|
||||||
|
|
||||||
|
expect( getModelData( model ) ).to.equal(
|
||||||
|
'<paragraph>xx</paragraph>' +
|
||||||
|
'<blockQuote><paragraph>abc</paragraph></blockQuote>' +
|
||||||
|
'<paragraph>c[]de</paragraph>' +
|
||||||
|
'<blockQuote><paragraph>fgh</paragraph></blockQuote>' +
|
||||||
|
'<paragraph>xx</paragraph>'
|
||||||
|
);
|
||||||
|
|
||||||
|
expect( getViewData( editor.editing.view ) ).to.equal(
|
||||||
|
'<p>xx</p>' +
|
||||||
|
'<blockquote><p>abc</p></blockquote>' +
|
||||||
|
'<p>c{}de</p>' +
|
||||||
|
'<blockquote><p>fgh</p></blockquote>' +
|
||||||
|
'<p>xx</p>'
|
||||||
|
);
|
||||||
|
} );
|
||||||
|
|
||||||
|
it( 'should remove multiple quotes', () => {
|
||||||
|
setModelData(
|
||||||
|
model,
|
||||||
|
'<blockQuote><paragraph>a[bc</paragraph></blockQuote>' +
|
||||||
|
'<paragraph>xx</paragraph>' +
|
||||||
|
'<blockQuote><paragraph>def</paragraph><paragraph>ghi</paragraph></blockQuote>' +
|
||||||
|
'<paragraph>yy</paragraph>' +
|
||||||
|
'<blockQuote><paragraph>de]f</paragraph><paragraph>ghi</paragraph></blockQuote>'
|
||||||
|
);
|
||||||
|
|
||||||
|
editor.execute( 'blockQuote' );
|
||||||
|
|
||||||
|
expect( getModelData( model ) ).to.equal(
|
||||||
|
'<paragraph>a[bc</paragraph>' +
|
||||||
|
'<paragraph>xx</paragraph>' +
|
||||||
|
'<paragraph>def</paragraph><paragraph>ghi</paragraph>' +
|
||||||
|
'<paragraph>yy</paragraph>' +
|
||||||
|
'<paragraph>de]f</paragraph>' +
|
||||||
|
'<blockQuote><paragraph>ghi</paragraph></blockQuote>'
|
||||||
|
);
|
||||||
|
|
||||||
|
expect( getViewData( editor.editing.view ) ).to.equal(
|
||||||
|
'<p>a{bc</p>' +
|
||||||
|
'<p>xx</p>' +
|
||||||
|
'<p>def</p><p>ghi</p>' +
|
||||||
|
'<p>yy</p>' +
|
||||||
|
'<p>de}f</p>' +
|
||||||
|
'<blockquote><p>ghi</p></blockquote>'
|
||||||
|
);
|
||||||
|
} );
|
||||||
|
|
||||||
|
it( 'should handle forceValue = false param', () => {
|
||||||
|
setModelData(
|
||||||
|
model,
|
||||||
|
'<paragraph>a[bc</paragraph>' +
|
||||||
|
'<blockQuote>' +
|
||||||
|
'<paragraph>x]x</paragraph>' +
|
||||||
|
'</blockQuote>'
|
||||||
|
);
|
||||||
|
|
||||||
|
editor.execute( 'blockQuote', { forceValue: false } );
|
||||||
|
|
||||||
|
// Incorrect selection.
|
||||||
|
expect( getModelData( model ) ).to.equal(
|
||||||
|
'<paragraph>a[bc]</paragraph>' +
|
||||||
|
'<paragraph>xx</paragraph>'
|
||||||
|
);
|
||||||
|
|
||||||
|
expect( getViewData( editor.editing.view ) ).to.equal(
|
||||||
|
'<p>a{bc}</p><p>xx</p>'
|
||||||
|
);
|
||||||
|
} );
|
||||||
|
} );
|
||||||
|
} );
|
||||||
|
} );
|
||||||
196
packages/ckeditor5-admonition/tests/blockquoteediting.js
Normal file
196
packages/ckeditor5-admonition/tests/blockquoteediting.js
Normal file
@@ -0,0 +1,196 @@
|
|||||||
|
/**
|
||||||
|
* @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 BlockQuoteEditing from '../src/blockquoteediting.js';
|
||||||
|
import Paragraph from '@ckeditor/ckeditor5-paragraph/src/paragraph.js';
|
||||||
|
import ListEditing from '@ckeditor/ckeditor5-list/src/list/listediting.js';
|
||||||
|
import BoldEditing from '@ckeditor/ckeditor5-basic-styles/src/bold/boldediting.js';
|
||||||
|
|
||||||
|
import VirtualTestEditor from '@ckeditor/ckeditor5-core/tests/_utils/virtualtesteditor.js';
|
||||||
|
import { getData as getModelData, setData as setModelData } from '@ckeditor/ckeditor5-engine/src/dev-utils/model.js';
|
||||||
|
|
||||||
|
import BlockQuoteCommand from '../src/blockquotecommand.js';
|
||||||
|
|
||||||
|
describe( 'BlockQuoteEditing', () => {
|
||||||
|
let editor, model;
|
||||||
|
|
||||||
|
beforeEach( () => {
|
||||||
|
return VirtualTestEditor
|
||||||
|
.create( {
|
||||||
|
plugins: [ BlockQuoteEditing, Paragraph, BoldEditing ]
|
||||||
|
} )
|
||||||
|
.then( newEditor => {
|
||||||
|
editor = newEditor;
|
||||||
|
model = editor.model;
|
||||||
|
} );
|
||||||
|
} );
|
||||||
|
|
||||||
|
afterEach( () => {
|
||||||
|
return editor.destroy();
|
||||||
|
} );
|
||||||
|
|
||||||
|
it( 'should have pluginName', () => {
|
||||||
|
expect( BlockQuoteEditing.pluginName ).to.equal( 'BlockQuoteEditing' );
|
||||||
|
} );
|
||||||
|
|
||||||
|
it( 'adds a blockQuote command', () => {
|
||||||
|
expect( editor.commands.get( 'blockQuote' ) ).to.be.instanceOf( BlockQuoteCommand );
|
||||||
|
} );
|
||||||
|
|
||||||
|
it( 'allows for blockQuote in the $root', () => {
|
||||||
|
expect( model.schema.checkChild( [ '$root' ], 'blockQuote' ) ).to.be.true;
|
||||||
|
} );
|
||||||
|
|
||||||
|
it( 'allows for $block in blockQuote', () => {
|
||||||
|
expect( model.schema.checkChild( [ '$root', 'blockQuote' ], '$block' ) ).to.be.true;
|
||||||
|
expect( model.schema.checkChild( [ '$root', 'blockQuote' ], 'paragraph' ) ).to.be.true;
|
||||||
|
} );
|
||||||
|
|
||||||
|
it( 'allows for blockQuote in blockQuote', () => {
|
||||||
|
expect( model.schema.checkChild( [ '$root', 'blockQuote' ], 'blockQuote' ) ).to.be.true;
|
||||||
|
} );
|
||||||
|
|
||||||
|
it( 'does not break when checking an unregisterd item', () => {
|
||||||
|
expect( model.schema.checkChild( [ '$root', 'blockQuote' ], 'foo' ) ).to.be.false;
|
||||||
|
} );
|
||||||
|
|
||||||
|
it( 'inherits attributes from $container', () => {
|
||||||
|
model.schema.extend( '$container', {
|
||||||
|
allowAttributes: 'foo'
|
||||||
|
} );
|
||||||
|
|
||||||
|
expect( model.schema.checkAttribute( 'blockQuote', 'foo' ) ).to.be.true;
|
||||||
|
} );
|
||||||
|
|
||||||
|
it( 'adds converters to the data pipeline', () => {
|
||||||
|
const data = '<blockquote><p>x</p></blockquote>';
|
||||||
|
|
||||||
|
editor.setData( data );
|
||||||
|
|
||||||
|
expect( getModelData( model ) ).to.equal( '<blockQuote><paragraph>[]x</paragraph></blockQuote>' );
|
||||||
|
expect( editor.getData() ).to.equal( data );
|
||||||
|
} );
|
||||||
|
|
||||||
|
it( 'adds a converter to the view pipeline', () => {
|
||||||
|
setModelData( model, '<blockQuote><paragraph>x</paragraph></blockQuote>' );
|
||||||
|
|
||||||
|
expect( editor.getData() ).to.equal( '<blockquote><p>x</p></blockquote>' );
|
||||||
|
} );
|
||||||
|
|
||||||
|
it( 'allows list items inside blockQuote', () => {
|
||||||
|
return VirtualTestEditor
|
||||||
|
.create( {
|
||||||
|
plugins: [ BlockQuoteEditing, Paragraph, ListEditing ]
|
||||||
|
} )
|
||||||
|
.then( editor => {
|
||||||
|
editor.setData( '<blockquote><ul><li>xx</li></ul></blockquote>' );
|
||||||
|
|
||||||
|
expect( editor.getData() ).to.equal( '<blockquote><ul><li>xx</li></ul></blockquote>' );
|
||||||
|
|
||||||
|
return editor.destroy();
|
||||||
|
} );
|
||||||
|
} );
|
||||||
|
|
||||||
|
it( 'should remove empty blockQuote elements', () => {
|
||||||
|
setModelData( model, '<blockQuote></blockQuote><paragraph>Foo</paragraph>' );
|
||||||
|
|
||||||
|
expect( editor.getData() ).to.equal( '<p>Foo</p>' );
|
||||||
|
} );
|
||||||
|
|
||||||
|
it( 'should remove blockQuotes which became empty', () => {
|
||||||
|
setModelData( model, '<blockQuote><paragraph>Foo</paragraph></blockQuote>' );
|
||||||
|
|
||||||
|
model.change( writer => {
|
||||||
|
const root = model.document.getRoot();
|
||||||
|
const bq = root.getChild( 0 );
|
||||||
|
|
||||||
|
writer.remove( writer.createRangeIn( bq ) );
|
||||||
|
} );
|
||||||
|
|
||||||
|
expect( editor.getData( { trim: 'none' } ) ).to.equal( '<p> </p>' ); // Autoparagraphed.
|
||||||
|
} );
|
||||||
|
|
||||||
|
it( 'should not unwrap a blockQuote if it was inserted into another blockQuote', () => {
|
||||||
|
setModelData( model, '<blockQuote><paragraph>Foo</paragraph></blockQuote>' );
|
||||||
|
|
||||||
|
model.change( writer => {
|
||||||
|
const root = model.document.getRoot();
|
||||||
|
const bq = writer.createElement( 'blockQuote' );
|
||||||
|
const p = writer.createElement( 'paragraph' );
|
||||||
|
|
||||||
|
writer.insertText( 'Bar', p, 0 ); // <p>Bar</p>.
|
||||||
|
writer.insert( p, bq, 0 ); // <blockquote><p>Bar</p></blockquote>.
|
||||||
|
writer.insert( bq, root.getChild( 0 ), 1 ); // Insert after <p>Foo</p>.
|
||||||
|
} );
|
||||||
|
|
||||||
|
expect( editor.getData() ).to.equal( '<blockquote><p>Foo</p><blockquote><p>Bar</p></blockquote></blockquote>' );
|
||||||
|
} );
|
||||||
|
|
||||||
|
it( 'should not unwrap nested blockQuote if it was wrapped into another blockQuote', () => {
|
||||||
|
setModelData( model, '<blockQuote><paragraph>Foo</paragraph></blockQuote><paragraph>Bar</paragraph>' );
|
||||||
|
|
||||||
|
model.change( writer => {
|
||||||
|
const root = model.document.getRoot();
|
||||||
|
|
||||||
|
writer.wrap( writer.createRangeIn( root ), 'blockQuote' );
|
||||||
|
} );
|
||||||
|
|
||||||
|
expect( editor.getData() ).to.equal( '<blockquote><blockquote><p>Foo</p></blockquote><p>Bar</p></blockquote>' );
|
||||||
|
} );
|
||||||
|
|
||||||
|
it( 'postfixer should do nothing on attribute change', () => {
|
||||||
|
// This is strictly a 100% CC test.
|
||||||
|
setModelData( model, '<blockQuote><paragraph>Foo</paragraph></blockQuote>' );
|
||||||
|
|
||||||
|
model.change( writer => {
|
||||||
|
const root = model.document.getRoot();
|
||||||
|
const p = root.getChild( 0 ).getChild( 0 );
|
||||||
|
|
||||||
|
writer.setAttribute( 'bold', true, writer.createRangeIn( p ) );
|
||||||
|
} );
|
||||||
|
|
||||||
|
expect( editor.getData() ).to.equal( '<blockquote><p><strong>Foo</strong></p></blockquote>' );
|
||||||
|
} );
|
||||||
|
|
||||||
|
describe( 'nested blockQuote forbidden by custom rule', () => {
|
||||||
|
// Nested block quotes are supported since https://github.com/ckeditor/ckeditor5/issues/9210, so let's check
|
||||||
|
// if the editor will not blow up in case nested block quotes are forbidden by custom scheme rule.
|
||||||
|
beforeEach( () => {
|
||||||
|
model.schema.addChildCheck( ( ctx, childDef ) => {
|
||||||
|
if ( ctx.endsWith( 'blockQuote' ) && childDef.name == 'blockQuote' ) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
} );
|
||||||
|
} );
|
||||||
|
|
||||||
|
it( 'should unwrap a blockQuote if it was inserted into another blockQuote', () => {
|
||||||
|
setModelData( model, '<blockQuote><paragraph>Foo</paragraph></blockQuote>' );
|
||||||
|
|
||||||
|
model.change( writer => {
|
||||||
|
const root = model.document.getRoot();
|
||||||
|
const bq = writer.createElement( 'blockQuote' );
|
||||||
|
const p = writer.createElement( 'paragraph' );
|
||||||
|
|
||||||
|
writer.insertText( 'Bar', p, 0 ); // <p>Bar</p>.
|
||||||
|
writer.insert( p, bq, 0 ); // <blockquote><p>Bar</p></blockquote>.
|
||||||
|
writer.insert( bq, root.getChild( 0 ), 1 ); // Insert after <p>Foo</p>.
|
||||||
|
} );
|
||||||
|
|
||||||
|
expect( editor.getData() ).to.equal( '<blockquote><p>Foo</p><p>Bar</p></blockquote>' );
|
||||||
|
} );
|
||||||
|
|
||||||
|
it( 'should unwrap nested blockQuote if it was wrapped into another blockQuote', () => {
|
||||||
|
setModelData( model, '<blockQuote><paragraph>Foo</paragraph></blockQuote><paragraph>Bar</paragraph>' );
|
||||||
|
|
||||||
|
model.change( writer => {
|
||||||
|
const root = model.document.getRoot();
|
||||||
|
|
||||||
|
writer.wrap( writer.createRangeIn( root ), 'blockQuote' );
|
||||||
|
} );
|
||||||
|
|
||||||
|
expect( editor.getData() ).to.equal( '<blockquote><p>Foo</p><p>Bar</p></blockquote>' );
|
||||||
|
} );
|
||||||
|
} );
|
||||||
|
} );
|
||||||
91
packages/ckeditor5-admonition/tests/blockquoteui.js
Normal file
91
packages/ckeditor5-admonition/tests/blockquoteui.js
Normal file
@@ -0,0 +1,91 @@
|
|||||||
|
/**
|
||||||
|
* @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
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* global document */
|
||||||
|
|
||||||
|
import BlockQuoteEditing from '../src/blockquoteediting.js';
|
||||||
|
import BlockQuoteUI from '../src/blockquoteui.js';
|
||||||
|
|
||||||
|
import ClassicTestEditor from '@ckeditor/ckeditor5-core/tests/_utils/classictesteditor.js';
|
||||||
|
|
||||||
|
describe( 'BlockQuoteUI', () => {
|
||||||
|
let editor, command, element, button;
|
||||||
|
|
||||||
|
beforeEach( () => {
|
||||||
|
element = document.createElement( 'div' );
|
||||||
|
document.body.appendChild( element );
|
||||||
|
|
||||||
|
return ClassicTestEditor
|
||||||
|
.create( element, {
|
||||||
|
plugins: [ BlockQuoteEditing, BlockQuoteUI ]
|
||||||
|
} )
|
||||||
|
.then( newEditor => {
|
||||||
|
editor = newEditor;
|
||||||
|
command = editor.commands.get( 'blockQuote' );
|
||||||
|
} );
|
||||||
|
} );
|
||||||
|
|
||||||
|
afterEach( () => {
|
||||||
|
element.remove();
|
||||||
|
|
||||||
|
return editor.destroy();
|
||||||
|
} );
|
||||||
|
|
||||||
|
describe( 'toolbar block quote button', () => {
|
||||||
|
beforeEach( () => {
|
||||||
|
button = editor.ui.componentFactory.create( 'blockQuote' );
|
||||||
|
} );
|
||||||
|
|
||||||
|
it( 'has the base properties', () => {
|
||||||
|
expect( button ).to.have.property( 'label', 'Block quote' );
|
||||||
|
expect( button ).to.have.property( 'icon' );
|
||||||
|
expect( button ).to.have.property( 'tooltip', true );
|
||||||
|
expect( button ).to.have.property( 'isToggleable', true );
|
||||||
|
} );
|
||||||
|
|
||||||
|
it( 'has isOn bound to command\'s value', () => {
|
||||||
|
command.value = false;
|
||||||
|
expect( button ).to.have.property( 'isOn', false );
|
||||||
|
|
||||||
|
command.value = true;
|
||||||
|
expect( button ).to.have.property( 'isOn', true );
|
||||||
|
} );
|
||||||
|
|
||||||
|
testButton();
|
||||||
|
} );
|
||||||
|
|
||||||
|
describe( 'menu bar block quote button', () => {
|
||||||
|
beforeEach( () => {
|
||||||
|
button = editor.ui.componentFactory.create( 'menuBar:blockQuote' );
|
||||||
|
} );
|
||||||
|
|
||||||
|
it( 'has the base properties', () => {
|
||||||
|
expect( button ).to.have.property( 'label', 'Block quote' );
|
||||||
|
expect( button ).to.have.property( 'icon' );
|
||||||
|
expect( button ).to.have.property( 'isToggleable', true );
|
||||||
|
} );
|
||||||
|
|
||||||
|
testButton();
|
||||||
|
} );
|
||||||
|
|
||||||
|
function testButton() {
|
||||||
|
it( 'has isEnabled bound to command\'s isEnabled', () => {
|
||||||
|
command.isEnabled = true;
|
||||||
|
expect( button ).to.have.property( 'isEnabled', true );
|
||||||
|
|
||||||
|
command.isEnabled = false;
|
||||||
|
expect( button ).to.have.property( 'isEnabled', false );
|
||||||
|
} );
|
||||||
|
|
||||||
|
it( 'executes command when it\'s executed', () => {
|
||||||
|
const spy = sinon.stub( editor, 'execute' );
|
||||||
|
|
||||||
|
button.fire( 'execute' );
|
||||||
|
|
||||||
|
expect( spy.calledOnce ).to.be.true;
|
||||||
|
expect( spy.args[ 0 ][ 0 ] ).to.equal( 'blockQuote' );
|
||||||
|
} );
|
||||||
|
}
|
||||||
|
} );
|
||||||
830
packages/ckeditor5-admonition/tests/integration.js
Normal file
830
packages/ckeditor5-admonition/tests/integration.js
Normal file
@@ -0,0 +1,830 @@
|
|||||||
|
/**
|
||||||
|
* @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
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* global document */
|
||||||
|
|
||||||
|
import BlockQuote from '../src/blockquote.js';
|
||||||
|
import Paragraph from '@ckeditor/ckeditor5-paragraph/src/paragraph.js';
|
||||||
|
import Image from '@ckeditor/ckeditor5-image/src/image.js';
|
||||||
|
import ImageCaption from '@ckeditor/ckeditor5-image/src/imagecaption.js';
|
||||||
|
import LegacyList from '@ckeditor/ckeditor5-list/src/legacylist.js';
|
||||||
|
import Enter from '@ckeditor/ckeditor5-enter/src/enter.js';
|
||||||
|
import Delete from '@ckeditor/ckeditor5-typing/src/delete.js';
|
||||||
|
import Heading from '@ckeditor/ckeditor5-heading/src/heading.js';
|
||||||
|
import Bold from '@ckeditor/ckeditor5-basic-styles/src/bold.js';
|
||||||
|
import Table from '@ckeditor/ckeditor5-table/src/table.js';
|
||||||
|
|
||||||
|
import ClassicTestEditor from '@ckeditor/ckeditor5-core/tests/_utils/classictesteditor.js';
|
||||||
|
import {
|
||||||
|
parse as parseModel,
|
||||||
|
getData as getModelData,
|
||||||
|
setData as setModelData
|
||||||
|
} from '@ckeditor/ckeditor5-engine/src/dev-utils/model.js';
|
||||||
|
|
||||||
|
describe( 'BlockQuote integration', () => {
|
||||||
|
let editor, model, element, viewDocument;
|
||||||
|
|
||||||
|
beforeEach( () => {
|
||||||
|
element = document.createElement( 'div' );
|
||||||
|
document.body.appendChild( element );
|
||||||
|
|
||||||
|
return ClassicTestEditor
|
||||||
|
.create( element, {
|
||||||
|
plugins: [ BlockQuote, Paragraph, Bold, Image, ImageCaption, LegacyList, Enter, Delete, Heading, Table ]
|
||||||
|
} )
|
||||||
|
.then( newEditor => {
|
||||||
|
editor = newEditor;
|
||||||
|
model = editor.model;
|
||||||
|
viewDocument = editor.editing.view.document;
|
||||||
|
} );
|
||||||
|
} );
|
||||||
|
|
||||||
|
afterEach( () => {
|
||||||
|
element.remove();
|
||||||
|
|
||||||
|
return editor.destroy();
|
||||||
|
} );
|
||||||
|
|
||||||
|
describe( 'enter key support', () => {
|
||||||
|
function fakeEventData() {
|
||||||
|
return {
|
||||||
|
preventDefault: sinon.spy()
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
it( 'does nothing if selection is in an empty block but not in a block quote', () => {
|
||||||
|
const data = fakeEventData();
|
||||||
|
const execSpy = sinon.spy( editor, 'execute' );
|
||||||
|
|
||||||
|
setModelData( model, '<paragraph>x</paragraph><paragraph>[]</paragraph><paragraph>x</paragraph>' );
|
||||||
|
|
||||||
|
viewDocument.fire( 'enter', data );
|
||||||
|
|
||||||
|
// Only enter command should be executed.
|
||||||
|
expect( data.preventDefault.called ).to.be.true;
|
||||||
|
expect( execSpy.calledOnce ).to.be.true;
|
||||||
|
expect( execSpy.args[ 0 ][ 0 ] ).to.equal( 'enter' );
|
||||||
|
} );
|
||||||
|
|
||||||
|
it( 'does nothing if selection is in a non-empty block (at the end) in a block quote', () => {
|
||||||
|
const data = fakeEventData();
|
||||||
|
const execSpy = sinon.spy( editor, 'execute' );
|
||||||
|
|
||||||
|
setModelData( model, '<blockQuote><paragraph>xx[]</paragraph></blockQuote>' );
|
||||||
|
|
||||||
|
viewDocument.fire( 'enter', data );
|
||||||
|
|
||||||
|
// Only enter command should be executed.
|
||||||
|
expect( data.preventDefault.called ).to.be.true;
|
||||||
|
expect( execSpy.calledOnce ).to.be.true;
|
||||||
|
expect( execSpy.args[ 0 ][ 0 ] ).to.equal( 'enter' );
|
||||||
|
} );
|
||||||
|
|
||||||
|
it( 'does nothing if selection is in a non-empty block (at the beginning) in a block quote', () => {
|
||||||
|
const data = fakeEventData();
|
||||||
|
const execSpy = sinon.spy( editor, 'execute' );
|
||||||
|
|
||||||
|
setModelData( model, '<blockQuote><paragraph>[]xx</paragraph></blockQuote>' );
|
||||||
|
|
||||||
|
viewDocument.fire( 'enter', data );
|
||||||
|
|
||||||
|
// Only enter command should be executed.
|
||||||
|
expect( data.preventDefault.called ).to.be.true;
|
||||||
|
expect( execSpy.calledOnce ).to.be.true;
|
||||||
|
expect( execSpy.args[ 0 ][ 0 ] ).to.equal( 'enter' );
|
||||||
|
} );
|
||||||
|
|
||||||
|
it( 'does nothing if selection is not collapsed', () => {
|
||||||
|
const data = fakeEventData();
|
||||||
|
const execSpy = sinon.spy( editor, 'execute' );
|
||||||
|
|
||||||
|
setModelData( model, '<blockQuote><paragraph>[</paragraph><paragraph>]</paragraph></blockQuote>' );
|
||||||
|
|
||||||
|
viewDocument.fire( 'enter', data );
|
||||||
|
|
||||||
|
// Only enter command should be executed.
|
||||||
|
expect( data.preventDefault.called ).to.be.true;
|
||||||
|
expect( execSpy.calledOnce ).to.be.true;
|
||||||
|
expect( execSpy.args[ 0 ][ 0 ] ).to.equal( 'enter' );
|
||||||
|
} );
|
||||||
|
|
||||||
|
it( 'does not interfere with a similar handler in the list feature', () => {
|
||||||
|
const data = fakeEventData();
|
||||||
|
|
||||||
|
setModelData( model,
|
||||||
|
'<paragraph>x</paragraph>' +
|
||||||
|
'<blockQuote>' +
|
||||||
|
'<listItem listIndent="0" listType="bulleted">a</listItem>' +
|
||||||
|
'<listItem listIndent="0" listType="bulleted">[]</listItem>' +
|
||||||
|
'</blockQuote>' +
|
||||||
|
'<paragraph>x</paragraph>'
|
||||||
|
);
|
||||||
|
|
||||||
|
viewDocument.fire( 'enter', data );
|
||||||
|
|
||||||
|
expect( data.preventDefault.called ).to.be.true;
|
||||||
|
|
||||||
|
expect( getModelData( model ) ).to.equal(
|
||||||
|
'<paragraph>x</paragraph>' +
|
||||||
|
'<blockQuote>' +
|
||||||
|
'<listItem listIndent="0" listType="bulleted">a</listItem>' +
|
||||||
|
'<paragraph>[]</paragraph>' +
|
||||||
|
'</blockQuote>' +
|
||||||
|
'<paragraph>x</paragraph>'
|
||||||
|
);
|
||||||
|
} );
|
||||||
|
|
||||||
|
it( 'escapes block quote if selection is in an empty block in an empty block quote', () => {
|
||||||
|
const data = fakeEventData();
|
||||||
|
const execSpy = sinon.spy( editor, 'execute' );
|
||||||
|
|
||||||
|
setModelData( model, '<paragraph>x</paragraph><blockQuote><paragraph>[]</paragraph></blockQuote><paragraph>x</paragraph>' );
|
||||||
|
|
||||||
|
viewDocument.fire( 'enter', data );
|
||||||
|
|
||||||
|
expect( data.preventDefault.called ).to.be.true;
|
||||||
|
expect( execSpy.calledOnce ).to.be.true;
|
||||||
|
expect( execSpy.args[ 0 ][ 0 ] ).to.equal( 'blockQuote' );
|
||||||
|
|
||||||
|
expect( getModelData( model ) ).to.equal( '<paragraph>x</paragraph><paragraph>[]</paragraph><paragraph>x</paragraph>' );
|
||||||
|
} );
|
||||||
|
|
||||||
|
it( 'escapes block quote if selection is in an empty block in the middle of a block quote', () => {
|
||||||
|
const data = fakeEventData();
|
||||||
|
const execSpy = sinon.spy( editor, 'execute' );
|
||||||
|
|
||||||
|
setModelData( model,
|
||||||
|
'<paragraph>x</paragraph>' +
|
||||||
|
'<blockQuote><paragraph>a</paragraph><paragraph>[]</paragraph><paragraph>b</paragraph></blockQuote>' +
|
||||||
|
'<paragraph>x</paragraph>'
|
||||||
|
);
|
||||||
|
|
||||||
|
viewDocument.fire( 'enter', data );
|
||||||
|
|
||||||
|
expect( data.preventDefault.called ).to.be.true;
|
||||||
|
expect( execSpy.calledOnce ).to.be.true;
|
||||||
|
expect( execSpy.args[ 0 ][ 0 ] ).to.equal( 'blockQuote' );
|
||||||
|
|
||||||
|
expect( getModelData( model ) ).to.equal(
|
||||||
|
'<paragraph>x</paragraph>' +
|
||||||
|
'<blockQuote><paragraph>a</paragraph></blockQuote>' +
|
||||||
|
'<paragraph>[]</paragraph>' +
|
||||||
|
'<blockQuote><paragraph>b</paragraph></blockQuote>' +
|
||||||
|
'<paragraph>x</paragraph>'
|
||||||
|
);
|
||||||
|
} );
|
||||||
|
|
||||||
|
it( 'escapes block quote if selection is in an empty block at the end of a block quote', () => {
|
||||||
|
const data = fakeEventData();
|
||||||
|
const execSpy = sinon.spy( editor, 'execute' );
|
||||||
|
|
||||||
|
setModelData( model,
|
||||||
|
'<paragraph>x</paragraph>' +
|
||||||
|
'<blockQuote><paragraph>a</paragraph><paragraph>[]</paragraph></blockQuote>' +
|
||||||
|
'<paragraph>x</paragraph>'
|
||||||
|
);
|
||||||
|
|
||||||
|
viewDocument.fire( 'enter', data );
|
||||||
|
|
||||||
|
expect( data.preventDefault.called ).to.be.true;
|
||||||
|
expect( execSpy.calledOnce ).to.be.true;
|
||||||
|
expect( execSpy.args[ 0 ][ 0 ] ).to.equal( 'blockQuote' );
|
||||||
|
|
||||||
|
expect( getModelData( model ) ).to.equal(
|
||||||
|
'<paragraph>x</paragraph>' +
|
||||||
|
'<blockQuote><paragraph>a</paragraph></blockQuote>' +
|
||||||
|
'<paragraph>[]</paragraph>' +
|
||||||
|
'<paragraph>x</paragraph>'
|
||||||
|
);
|
||||||
|
} );
|
||||||
|
|
||||||
|
it( 'scrolls the view document to the selection after the command is executed', () => {
|
||||||
|
const data = fakeEventData();
|
||||||
|
const execSpy = sinon.spy( editor, 'execute' );
|
||||||
|
const scrollSpy = sinon.stub( editor.editing.view, 'scrollToTheSelection' );
|
||||||
|
|
||||||
|
setModelData( model,
|
||||||
|
'<paragraph>x</paragraph>' +
|
||||||
|
'<blockQuote><paragraph>a</paragraph><paragraph>[]</paragraph></blockQuote>' +
|
||||||
|
'<paragraph>x</paragraph>'
|
||||||
|
);
|
||||||
|
|
||||||
|
viewDocument.fire( 'enter', data );
|
||||||
|
|
||||||
|
sinon.assert.calledOnce( scrollSpy );
|
||||||
|
sinon.assert.callOrder( execSpy, scrollSpy );
|
||||||
|
} );
|
||||||
|
} );
|
||||||
|
|
||||||
|
describe( 'backspace key support', () => {
|
||||||
|
function fakeEventData() {
|
||||||
|
return {
|
||||||
|
preventDefault: sinon.spy(),
|
||||||
|
direction: 'backward',
|
||||||
|
inputType: 'deleteContentBackward',
|
||||||
|
unit: 'character'
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
it( 'merges paragraph into paragraph in the quote', () => {
|
||||||
|
const data = fakeEventData();
|
||||||
|
|
||||||
|
setModelData( model,
|
||||||
|
'<blockQuote><paragraph>a</paragraph><paragraph>b</paragraph></blockQuote>' +
|
||||||
|
'<paragraph>[]c</paragraph>' +
|
||||||
|
'<paragraph>d</paragraph>'
|
||||||
|
);
|
||||||
|
|
||||||
|
viewDocument.fire( 'delete', data );
|
||||||
|
|
||||||
|
expect( getModelData( model ) ).to.equal(
|
||||||
|
'<blockQuote><paragraph>a</paragraph><paragraph>b[]c</paragraph></blockQuote>' +
|
||||||
|
'<paragraph>d</paragraph>'
|
||||||
|
);
|
||||||
|
} );
|
||||||
|
|
||||||
|
it( 'merges paragraph from a quote into a paragraph before quote', () => {
|
||||||
|
const data = fakeEventData();
|
||||||
|
|
||||||
|
setModelData( model,
|
||||||
|
'<paragraph>x</paragraph>' +
|
||||||
|
'<blockQuote><paragraph>[]a</paragraph><paragraph>b</paragraph></blockQuote>' +
|
||||||
|
'<paragraph>y</paragraph>'
|
||||||
|
);
|
||||||
|
|
||||||
|
viewDocument.fire( 'delete', data );
|
||||||
|
|
||||||
|
expect( getModelData( model ) ).to.equal(
|
||||||
|
'<paragraph>x[]a</paragraph>' +
|
||||||
|
'<blockQuote><paragraph>b</paragraph></blockQuote>' +
|
||||||
|
'<paragraph>y</paragraph>'
|
||||||
|
);
|
||||||
|
} );
|
||||||
|
|
||||||
|
it( 'merges two quotes', () => {
|
||||||
|
const data = fakeEventData();
|
||||||
|
|
||||||
|
setModelData( model,
|
||||||
|
'<paragraph>x</paragraph>' +
|
||||||
|
'<blockQuote><paragraph>a</paragraph><paragraph>b</paragraph></blockQuote>' +
|
||||||
|
'<blockQuote><paragraph>[]c</paragraph><paragraph>d</paragraph></blockQuote>' +
|
||||||
|
'<paragraph>y</paragraph>'
|
||||||
|
);
|
||||||
|
|
||||||
|
viewDocument.fire( 'delete', data );
|
||||||
|
|
||||||
|
expect( getModelData( model ) ).to.equal(
|
||||||
|
'<paragraph>x</paragraph>' +
|
||||||
|
'<blockQuote><paragraph>a</paragraph><paragraph>b[]c</paragraph><paragraph>d</paragraph></blockQuote>' +
|
||||||
|
'<paragraph>y</paragraph>'
|
||||||
|
);
|
||||||
|
} );
|
||||||
|
|
||||||
|
it( 'unwraps empty quote when the backspace key pressed in the first empty paragraph in a quote', () => {
|
||||||
|
const data = fakeEventData();
|
||||||
|
|
||||||
|
setModelData( model,
|
||||||
|
'<paragraph>x</paragraph>' +
|
||||||
|
'<blockQuote><paragraph>a</paragraph></blockQuote>' +
|
||||||
|
'<blockQuote><paragraph>[]</paragraph></blockQuote>' +
|
||||||
|
'<paragraph>y</paragraph>'
|
||||||
|
);
|
||||||
|
|
||||||
|
viewDocument.fire( 'delete', data );
|
||||||
|
|
||||||
|
expect( getModelData( model ) ).to.equal(
|
||||||
|
'<paragraph>x</paragraph>' +
|
||||||
|
'<blockQuote><paragraph>a</paragraph></blockQuote>' +
|
||||||
|
'<paragraph>[]</paragraph>' +
|
||||||
|
'<paragraph>y</paragraph>'
|
||||||
|
);
|
||||||
|
} );
|
||||||
|
|
||||||
|
it( 'unwraps empty quote when the backspace key pressed in the empty paragraph that is the only content of quote', () => {
|
||||||
|
const data = fakeEventData();
|
||||||
|
|
||||||
|
setModelData( model,
|
||||||
|
'<paragraph>x</paragraph>' +
|
||||||
|
'<blockQuote><paragraph>[]</paragraph></blockQuote>' +
|
||||||
|
'<paragraph>y</paragraph>'
|
||||||
|
);
|
||||||
|
|
||||||
|
viewDocument.fire( 'delete', data );
|
||||||
|
|
||||||
|
expect( getModelData( model ) ).to.equal(
|
||||||
|
'<paragraph>x</paragraph>' +
|
||||||
|
'<paragraph>[]</paragraph>' +
|
||||||
|
'<paragraph>y</paragraph>'
|
||||||
|
);
|
||||||
|
} );
|
||||||
|
|
||||||
|
it( 'unwraps quote from the first paragraph when the backspace key pressed', () => {
|
||||||
|
const data = fakeEventData();
|
||||||
|
|
||||||
|
setModelData( model,
|
||||||
|
'<paragraph>x</paragraph>' +
|
||||||
|
'<blockQuote><paragraph>[]</paragraph><paragraph>foo</paragraph></blockQuote>' +
|
||||||
|
'<paragraph>y</paragraph>'
|
||||||
|
);
|
||||||
|
|
||||||
|
viewDocument.fire( 'delete', data );
|
||||||
|
|
||||||
|
expect( getModelData( model ) ).to.equal(
|
||||||
|
'<paragraph>x</paragraph>' +
|
||||||
|
'<paragraph>[]</paragraph>' +
|
||||||
|
'<blockQuote><paragraph>foo</paragraph></blockQuote>' +
|
||||||
|
'<paragraph>y</paragraph>'
|
||||||
|
);
|
||||||
|
} );
|
||||||
|
|
||||||
|
it( 'merges paragraphs in a quote when the backspace key pressed not in the first paragraph', () => {
|
||||||
|
const data = fakeEventData();
|
||||||
|
|
||||||
|
setModelData( model,
|
||||||
|
'<paragraph>x</paragraph>' +
|
||||||
|
'<blockQuote><paragraph></paragraph><paragraph>[]</paragraph></blockQuote>' +
|
||||||
|
'<paragraph>y</paragraph>'
|
||||||
|
);
|
||||||
|
|
||||||
|
viewDocument.fire( 'delete', data );
|
||||||
|
|
||||||
|
expect( getModelData( model ) ).to.equal(
|
||||||
|
'<paragraph>x</paragraph>' +
|
||||||
|
'<blockQuote><paragraph>[]</paragraph></blockQuote>' +
|
||||||
|
'<paragraph>y</paragraph>'
|
||||||
|
);
|
||||||
|
} );
|
||||||
|
|
||||||
|
it( 'does nothing if selection is in an empty block but not in a block quote', () => {
|
||||||
|
const data = fakeEventData();
|
||||||
|
const execSpy = sinon.spy( editor, 'execute' );
|
||||||
|
|
||||||
|
setModelData( model, '<paragraph>x</paragraph><paragraph>[]</paragraph><paragraph>x</paragraph>' );
|
||||||
|
|
||||||
|
viewDocument.fire( 'delete', data );
|
||||||
|
|
||||||
|
// Only delete command should be executed.
|
||||||
|
expect( data.preventDefault.called ).to.be.true;
|
||||||
|
expect( execSpy.calledOnce ).to.be.true;
|
||||||
|
expect( execSpy.args[ 0 ][ 0 ] ).to.equal( 'delete' );
|
||||||
|
} );
|
||||||
|
|
||||||
|
it( 'does nothing if selection is in a non-empty block (at the end) in a block quote', () => {
|
||||||
|
const data = fakeEventData();
|
||||||
|
const execSpy = sinon.spy( editor, 'execute' );
|
||||||
|
|
||||||
|
setModelData( model, '<blockQuote><paragraph>xx[]</paragraph></blockQuote>' );
|
||||||
|
|
||||||
|
viewDocument.fire( 'delete', data );
|
||||||
|
|
||||||
|
// Only delete command should be executed.
|
||||||
|
expect( data.preventDefault.called ).to.be.true;
|
||||||
|
expect( execSpy.calledOnce ).to.be.true;
|
||||||
|
expect( execSpy.args[ 0 ][ 0 ] ).to.equal( 'delete' );
|
||||||
|
} );
|
||||||
|
|
||||||
|
it( 'does nothing if selection is in a non-empty block (at the beginning) in a block quote', () => {
|
||||||
|
const data = fakeEventData();
|
||||||
|
const execSpy = sinon.spy( editor, 'execute' );
|
||||||
|
|
||||||
|
setModelData( model, '<blockQuote><paragraph>[]xx</paragraph></blockQuote>' );
|
||||||
|
|
||||||
|
viewDocument.fire( 'delete', data );
|
||||||
|
|
||||||
|
// Only delete command should be executed.
|
||||||
|
expect( data.preventDefault.called ).to.be.true;
|
||||||
|
expect( execSpy.calledOnce ).to.be.true;
|
||||||
|
expect( execSpy.args[ 0 ][ 0 ] ).to.equal( 'delete' );
|
||||||
|
} );
|
||||||
|
|
||||||
|
it( 'does nothing if selection is not collapsed', () => {
|
||||||
|
const data = fakeEventData();
|
||||||
|
const execSpy = sinon.spy( editor, 'execute' );
|
||||||
|
|
||||||
|
setModelData( model, '<blockQuote><paragraph>[</paragraph><paragraph>]</paragraph></blockQuote>' );
|
||||||
|
|
||||||
|
viewDocument.fire( 'delete', data );
|
||||||
|
|
||||||
|
// Only delete command should be executed.
|
||||||
|
expect( data.preventDefault.called ).to.be.true;
|
||||||
|
expect( execSpy.calledOnce ).to.be.true;
|
||||||
|
expect( execSpy.args[ 0 ][ 0 ] ).to.equal( 'delete' );
|
||||||
|
} );
|
||||||
|
} );
|
||||||
|
|
||||||
|
// Historically, due to problems with schema, images were not quotable.
|
||||||
|
// These tests were left here to confirm that after schema was fixed, images are properly quotable.
|
||||||
|
describe( 'compatibility with images', () => {
|
||||||
|
it( 'quotes a simple image', () => {
|
||||||
|
const element = document.createElement( 'div' );
|
||||||
|
document.body.appendChild( element );
|
||||||
|
|
||||||
|
// We can't load ImageCaption in this test because it adds <caption> to all images automatically.
|
||||||
|
return ClassicTestEditor
|
||||||
|
.create( element, {
|
||||||
|
plugins: [ BlockQuote, Paragraph, Image ]
|
||||||
|
} )
|
||||||
|
.then( editor => {
|
||||||
|
setModelData( editor.model,
|
||||||
|
'<paragraph>fo[o</paragraph>' +
|
||||||
|
'<imageBlock src="/assets/sample.png"></imageBlock>' +
|
||||||
|
'<paragraph>b]ar</paragraph>'
|
||||||
|
);
|
||||||
|
|
||||||
|
editor.execute( 'blockQuote' );
|
||||||
|
|
||||||
|
expect( getModelData( editor.model ) ).to.equal(
|
||||||
|
'<blockQuote>' +
|
||||||
|
'<paragraph>fo[o</paragraph>' +
|
||||||
|
'<imageBlock src="/assets/sample.png"></imageBlock>' +
|
||||||
|
'<paragraph>b]ar</paragraph>' +
|
||||||
|
'</blockQuote>'
|
||||||
|
);
|
||||||
|
|
||||||
|
element.remove();
|
||||||
|
return editor.destroy();
|
||||||
|
} );
|
||||||
|
} );
|
||||||
|
|
||||||
|
it( 'quotes an image with caption', () => {
|
||||||
|
setModelData( model,
|
||||||
|
'<paragraph>fo[o</paragraph>' +
|
||||||
|
'<imageBlock src="/assets/sample.png">' +
|
||||||
|
'<caption>xxx</caption>' +
|
||||||
|
'</imageBlock>' +
|
||||||
|
'<paragraph>b]ar</paragraph>'
|
||||||
|
);
|
||||||
|
|
||||||
|
editor.execute( 'blockQuote' );
|
||||||
|
|
||||||
|
expect( getModelData( model ) ).to.equal(
|
||||||
|
'<blockQuote>' +
|
||||||
|
'<paragraph>fo[o</paragraph>' +
|
||||||
|
'<imageBlock src="/assets/sample.png">' +
|
||||||
|
'<caption>xxx</caption>' +
|
||||||
|
'</imageBlock>' +
|
||||||
|
'<paragraph>b]ar</paragraph>' +
|
||||||
|
'</blockQuote>'
|
||||||
|
);
|
||||||
|
} );
|
||||||
|
|
||||||
|
it( 'adds an image to an existing quote', () => {
|
||||||
|
setModelData( model,
|
||||||
|
'<paragraph>fo[o</paragraph>' +
|
||||||
|
'<imageBlock src="/assets/sample.png">' +
|
||||||
|
'<caption>xxx</caption>' +
|
||||||
|
'</imageBlock>' +
|
||||||
|
'<blockQuote><paragraph>b]ar</paragraph></blockQuote>'
|
||||||
|
);
|
||||||
|
|
||||||
|
editor.execute( 'blockQuote' );
|
||||||
|
|
||||||
|
// Selection incorrectly trimmed.
|
||||||
|
expect( getModelData( model ) ).to.equal(
|
||||||
|
'<blockQuote>' +
|
||||||
|
'<paragraph>foo</paragraph>' +
|
||||||
|
'<imageBlock src="/assets/sample.png">' +
|
||||||
|
'<caption>xxx</caption>' +
|
||||||
|
'</imageBlock>' +
|
||||||
|
'<paragraph>[b]ar</paragraph>' +
|
||||||
|
'</blockQuote>'
|
||||||
|
);
|
||||||
|
} );
|
||||||
|
|
||||||
|
it( 'wraps paragraph+image', () => {
|
||||||
|
setModelData( model,
|
||||||
|
'<paragraph>[foo</paragraph><imageBlock><caption>foo</caption></imageBlock>]'
|
||||||
|
);
|
||||||
|
|
||||||
|
editor.execute( 'blockQuote' );
|
||||||
|
|
||||||
|
expect( getModelData( model ) ).to.equal(
|
||||||
|
'<blockQuote><paragraph>[foo</paragraph><imageBlock><caption>foo</caption></imageBlock>]</blockQuote>'
|
||||||
|
);
|
||||||
|
} );
|
||||||
|
|
||||||
|
it( 'unwraps paragraph+image', () => {
|
||||||
|
setModelData( model,
|
||||||
|
'<blockQuote><paragraph>[foo</paragraph><imageBlock><caption>foo</caption></imageBlock>]</blockQuote>'
|
||||||
|
);
|
||||||
|
|
||||||
|
editor.execute( 'blockQuote' );
|
||||||
|
|
||||||
|
expect( getModelData( model ) ).to.equal(
|
||||||
|
'<paragraph>[foo</paragraph><imageBlock><caption>foo</caption></imageBlock>]'
|
||||||
|
);
|
||||||
|
} );
|
||||||
|
|
||||||
|
it( 'wraps image+paragraph', () => {
|
||||||
|
setModelData( model,
|
||||||
|
'[<imageBlock><caption>foo</caption></imageBlock><paragraph>foo]</paragraph>'
|
||||||
|
);
|
||||||
|
|
||||||
|
editor.execute( 'blockQuote' );
|
||||||
|
|
||||||
|
expect( getModelData( model ) ).to.equal(
|
||||||
|
'<blockQuote>[<imageBlock><caption>foo</caption></imageBlock><paragraph>foo]</paragraph></blockQuote>'
|
||||||
|
);
|
||||||
|
} );
|
||||||
|
|
||||||
|
it( 'unwraps image+paragraph', () => {
|
||||||
|
setModelData( model,
|
||||||
|
'[<imageBlock><caption>foo</caption></imageBlock><paragraph>foo]</paragraph>'
|
||||||
|
);
|
||||||
|
|
||||||
|
editor.execute( 'blockQuote' );
|
||||||
|
|
||||||
|
expect( getModelData( model ) ).to.equal(
|
||||||
|
'<blockQuote>[<imageBlock><caption>foo</caption></imageBlock><paragraph>foo]</paragraph></blockQuote>'
|
||||||
|
);
|
||||||
|
} );
|
||||||
|
} );
|
||||||
|
|
||||||
|
// When blockQuote with a paragraph was pasted into a list item, the item contained the paragraph. It was invalid.
|
||||||
|
// There is a test which checks whether blockQuote will split the list items instead of merging with.
|
||||||
|
describe( 'compatibility with lists', () => {
|
||||||
|
it( 'does not merge the paragraph with list item', () => {
|
||||||
|
setModelData( model, '<listItem listIndent="0" listType="bulleted">fo[]o</listItem>' );
|
||||||
|
|
||||||
|
const df = parseModel(
|
||||||
|
'<blockQuote><paragraph>xxx</paragraph></blockQuote><heading1>yyy</heading1>',
|
||||||
|
model.schema
|
||||||
|
);
|
||||||
|
|
||||||
|
model.insertContent( df, model.document.selection );
|
||||||
|
|
||||||
|
expect( getModelData( model ) ).to.equal(
|
||||||
|
'<listItem listIndent="0" listType="bulleted">fo</listItem>' +
|
||||||
|
'<blockQuote>' +
|
||||||
|
'<paragraph>xxx</paragraph>' +
|
||||||
|
'</blockQuote>' +
|
||||||
|
'<heading1>yyy[]o</heading1>'
|
||||||
|
);
|
||||||
|
} );
|
||||||
|
} );
|
||||||
|
|
||||||
|
describe( 'compatibility with tables', () => {
|
||||||
|
it( 'wraps whole table', () => {
|
||||||
|
setModelData( model, '[<table><tableRow><tableCell><paragraph>foo</paragraph></tableCell></tableRow></table>]' );
|
||||||
|
|
||||||
|
editor.execute( 'blockQuote' );
|
||||||
|
|
||||||
|
expect( getModelData( model ) ).to.equal(
|
||||||
|
'<blockQuote>[<table><tableRow><tableCell><paragraph>foo</paragraph></tableCell></tableRow></table>]</blockQuote>'
|
||||||
|
);
|
||||||
|
} );
|
||||||
|
|
||||||
|
it( 'unwraps whole table', () => {
|
||||||
|
setModelData(
|
||||||
|
model,
|
||||||
|
'<blockQuote>[<table><tableRow><tableCell><paragraph>foo</paragraph></tableCell></tableRow></table>]</blockQuote>'
|
||||||
|
);
|
||||||
|
|
||||||
|
editor.execute( 'blockQuote' );
|
||||||
|
|
||||||
|
expect( getModelData( model ) ).to.equal(
|
||||||
|
'[<table><tableRow><tableCell><paragraph>foo</paragraph></tableCell></tableRow></table>]'
|
||||||
|
);
|
||||||
|
} );
|
||||||
|
|
||||||
|
it( 'wraps paragraph in table cell', () => {
|
||||||
|
setModelData( model, '<table><tableRow><tableCell><paragraph>[]foo</paragraph></tableCell></tableRow></table>' );
|
||||||
|
|
||||||
|
editor.execute( 'blockQuote' );
|
||||||
|
|
||||||
|
expect( getModelData( model ) ).to.equal(
|
||||||
|
'<table><tableRow><tableCell><blockQuote><paragraph>[]foo</paragraph></blockQuote></tableCell></tableRow></table>'
|
||||||
|
);
|
||||||
|
} );
|
||||||
|
|
||||||
|
it( 'unwraps paragraph in table cell', () => {
|
||||||
|
setModelData(
|
||||||
|
model,
|
||||||
|
'<table><tableRow><tableCell><blockQuote><paragraph>[]foo</paragraph></blockQuote></tableCell></tableRow></table>'
|
||||||
|
);
|
||||||
|
|
||||||
|
editor.execute( 'blockQuote' );
|
||||||
|
|
||||||
|
expect( getModelData( model ) ).to.equal(
|
||||||
|
'<table><tableRow><tableCell><paragraph>[]foo</paragraph></tableCell></tableRow></table>'
|
||||||
|
);
|
||||||
|
} );
|
||||||
|
|
||||||
|
it( 'wraps image in table cell', () => {
|
||||||
|
setModelData( model,
|
||||||
|
'<table>' +
|
||||||
|
'<tableRow>' +
|
||||||
|
'<tableCell>[<imageBlock><caption>foo</caption></imageBlock>]</tableCell>' +
|
||||||
|
' </tableRow>' +
|
||||||
|
'</table>'
|
||||||
|
);
|
||||||
|
|
||||||
|
editor.execute( 'blockQuote' );
|
||||||
|
|
||||||
|
expect( getModelData( model ) ).to.equal(
|
||||||
|
'<table>' +
|
||||||
|
'<tableRow>' +
|
||||||
|
'<tableCell><blockQuote>[<imageBlock><caption>foo</caption></imageBlock>]</blockQuote></tableCell>' +
|
||||||
|
'</tableRow>' +
|
||||||
|
'</table>'
|
||||||
|
);
|
||||||
|
} );
|
||||||
|
|
||||||
|
it( 'unwraps image in table cell', () => {
|
||||||
|
setModelData( model,
|
||||||
|
'<table>' +
|
||||||
|
'<tableRow>' +
|
||||||
|
'<tableCell><blockQuote>[<imageBlock><caption>foo</caption></imageBlock>]</blockQuote></tableCell>' +
|
||||||
|
'</tableRow>' +
|
||||||
|
'</table>'
|
||||||
|
);
|
||||||
|
|
||||||
|
editor.execute( 'blockQuote' );
|
||||||
|
|
||||||
|
expect( getModelData( model ) ).to.equal(
|
||||||
|
'<table>' +
|
||||||
|
'<tableRow>' +
|
||||||
|
'<tableCell>[<imageBlock><caption>foo</caption></imageBlock>]</tableCell>' +
|
||||||
|
'</tableRow>' +
|
||||||
|
'</table>'
|
||||||
|
);
|
||||||
|
} );
|
||||||
|
|
||||||
|
it( 'wraps paragraph+image in table cell', () => {
|
||||||
|
setModelData( model,
|
||||||
|
'<table>' +
|
||||||
|
'<tableRow>' +
|
||||||
|
'<tableCell><paragraph>[foo</paragraph><imageBlock><caption>foo</caption></imageBlock>]</tableCell>' +
|
||||||
|
'</tableRow>' +
|
||||||
|
'</table>'
|
||||||
|
);
|
||||||
|
|
||||||
|
editor.execute( 'blockQuote' );
|
||||||
|
|
||||||
|
expect( getModelData( model ) ).to.equal(
|
||||||
|
'<table>' +
|
||||||
|
'<tableRow>' +
|
||||||
|
'<tableCell>' +
|
||||||
|
'<blockQuote><paragraph>[foo</paragraph><imageBlock><caption>foo</caption></imageBlock>]</blockQuote>' +
|
||||||
|
'</tableCell>' +
|
||||||
|
'</tableRow>' +
|
||||||
|
'</table>'
|
||||||
|
);
|
||||||
|
} );
|
||||||
|
|
||||||
|
it( 'unwraps paragraph+image in table cell', () => {
|
||||||
|
setModelData( model,
|
||||||
|
'<table>' +
|
||||||
|
'<tableRow>' +
|
||||||
|
'<tableCell>' +
|
||||||
|
'<blockQuote><paragraph>[foo</paragraph><imageBlock><caption>foo</caption></imageBlock>]</blockQuote>' +
|
||||||
|
'</tableCell>' +
|
||||||
|
'</tableRow>' +
|
||||||
|
'</table>'
|
||||||
|
);
|
||||||
|
|
||||||
|
editor.execute( 'blockQuote' );
|
||||||
|
|
||||||
|
expect( getModelData( model ) ).to.equal(
|
||||||
|
'<table>' +
|
||||||
|
'<tableRow>' +
|
||||||
|
'<tableCell><paragraph>[foo</paragraph><imageBlock><caption>foo</caption></imageBlock>]</tableCell>' +
|
||||||
|
'</tableRow>' +
|
||||||
|
'</table>'
|
||||||
|
);
|
||||||
|
} );
|
||||||
|
|
||||||
|
it( 'wraps image+paragraph in table cell', () => {
|
||||||
|
setModelData( model,
|
||||||
|
'<table>' +
|
||||||
|
'<tableRow>' +
|
||||||
|
'<tableCell>[<imageBlock><caption>foo</caption></imageBlock><paragraph>foo]</paragraph></tableCell>' +
|
||||||
|
'</tableRow>' +
|
||||||
|
'</table>'
|
||||||
|
);
|
||||||
|
|
||||||
|
editor.execute( 'blockQuote' );
|
||||||
|
|
||||||
|
expect( getModelData( model ) ).to.equal(
|
||||||
|
'<table>' +
|
||||||
|
'<tableRow>' +
|
||||||
|
'<tableCell>' +
|
||||||
|
'<blockQuote>[<imageBlock><caption>foo</caption></imageBlock><paragraph>foo]</paragraph></blockQuote>' +
|
||||||
|
'</tableCell>' +
|
||||||
|
'</tableRow>' +
|
||||||
|
'</table>'
|
||||||
|
);
|
||||||
|
} );
|
||||||
|
|
||||||
|
it( 'unwraps image+paragraph in table cell', () => {
|
||||||
|
setModelData( model,
|
||||||
|
'<table>' +
|
||||||
|
'<tableRow>' +
|
||||||
|
'<tableCell>[<imageBlock><caption>foo</caption></imageBlock><paragraph>foo]</paragraph></tableCell>' +
|
||||||
|
'</tableRow>' +
|
||||||
|
'</table>'
|
||||||
|
);
|
||||||
|
|
||||||
|
editor.execute( 'blockQuote' );
|
||||||
|
|
||||||
|
expect( getModelData( model ) ).to.equal(
|
||||||
|
'<table>' +
|
||||||
|
'<tableRow>' +
|
||||||
|
'<tableCell>' +
|
||||||
|
'<blockQuote>[<imageBlock><caption>foo</caption></imageBlock><paragraph>foo]</paragraph></blockQuote>' +
|
||||||
|
'</tableCell>' +
|
||||||
|
'</tableRow>' +
|
||||||
|
'</table>'
|
||||||
|
);
|
||||||
|
} );
|
||||||
|
} );
|
||||||
|
|
||||||
|
describe( 'autoparagraphing', () => {
|
||||||
|
it( 'text in block quote in div', () => {
|
||||||
|
const data =
|
||||||
|
'<blockquote>' +
|
||||||
|
'<div>foo<strong>bar</strong></div>' +
|
||||||
|
'</blockquote>' +
|
||||||
|
'xyz';
|
||||||
|
|
||||||
|
editor.setData( data );
|
||||||
|
|
||||||
|
expect( editor.getData() ).to.equal(
|
||||||
|
'<blockquote>' +
|
||||||
|
'<p>foo<strong>bar</strong></p>' +
|
||||||
|
'</blockquote>' +
|
||||||
|
'<p>xyz</p>'
|
||||||
|
);
|
||||||
|
} );
|
||||||
|
|
||||||
|
it( 'text directly in block quote', () => {
|
||||||
|
const data =
|
||||||
|
'<blockquote>' +
|
||||||
|
'foo<strong>bar</strong>' +
|
||||||
|
'</blockquote>' +
|
||||||
|
'xyz';
|
||||||
|
|
||||||
|
editor.setData( data );
|
||||||
|
|
||||||
|
expect( editor.getData() ).to.equal(
|
||||||
|
'<blockquote>' +
|
||||||
|
'<p>foo<strong>bar</strong></p>' +
|
||||||
|
'</blockquote>' +
|
||||||
|
'<p>xyz</p>'
|
||||||
|
);
|
||||||
|
} );
|
||||||
|
|
||||||
|
it( 'text after block quote in div', () => {
|
||||||
|
const data =
|
||||||
|
'<blockquote>' +
|
||||||
|
'foo<strong>bar</strong>' +
|
||||||
|
'</blockquote>' +
|
||||||
|
'<div>xyz</div>';
|
||||||
|
|
||||||
|
editor.setData( data );
|
||||||
|
|
||||||
|
expect( editor.getData() ).to.equal(
|
||||||
|
'<blockquote>' +
|
||||||
|
'<p>foo<strong>bar</strong></p>' +
|
||||||
|
'</blockquote>' +
|
||||||
|
'<p>xyz</p>'
|
||||||
|
);
|
||||||
|
} );
|
||||||
|
|
||||||
|
it( 'text inside block quote in and after div', () => {
|
||||||
|
const data =
|
||||||
|
'<blockquote>' +
|
||||||
|
'<div>foo</div><strong>bar</strong>' +
|
||||||
|
'</blockquote>' +
|
||||||
|
'xyz';
|
||||||
|
|
||||||
|
editor.setData( data );
|
||||||
|
|
||||||
|
expect( editor.getData() ).to.equal(
|
||||||
|
'<blockquote>' +
|
||||||
|
'<p>foo</p><p><strong>bar</strong></p>' +
|
||||||
|
'</blockquote>' +
|
||||||
|
'<p>xyz</p>'
|
||||||
|
);
|
||||||
|
} );
|
||||||
|
|
||||||
|
it( 'text inside block quote in div split by heading', () => {
|
||||||
|
const data =
|
||||||
|
'<blockquote>' +
|
||||||
|
'<div>foo<h2>bar</h2><strong>baz</strong></div>' +
|
||||||
|
'</blockquote>' +
|
||||||
|
'xyz';
|
||||||
|
|
||||||
|
editor.setData( data );
|
||||||
|
|
||||||
|
expect( editor.getData() ).to.equal(
|
||||||
|
'<blockquote>' +
|
||||||
|
'<p>foo</p><h2>bar</h2><p><strong>baz</strong></p>' +
|
||||||
|
'</blockquote>' +
|
||||||
|
'<p>xyz</p>'
|
||||||
|
);
|
||||||
|
} );
|
||||||
|
} );
|
||||||
|
} );
|
||||||
25
packages/ckeditor5-admonition/tests/manual/blockquote.html
Normal file
25
packages/ckeditor5-admonition/tests/manual/blockquote.html
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
<div id="editor">
|
||||||
|
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla finibus consequat placerat. Vestibulum id tellus et mauris sagittis tincidunt quis id mauris. Curabitur consectetur lectus sit amet tellus mattis, non lobortis leo interdum.</p>
|
||||||
|
<blockquote>
|
||||||
|
<p>Nulla finibus consequat placerat. Vestibulum id tellus et mauris sagittis tincidunt quis id mauris. Curabitur consectetur lectus sit amet tellus mattis, non lobortis leo interdum.</p>
|
||||||
|
</blockquote>
|
||||||
|
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla finibus consequat placerat.</p>
|
||||||
|
<figure class="image">
|
||||||
|
<img src="logo.png" alt="CKEditor logo" />
|
||||||
|
</figure>
|
||||||
|
<p>Vestibulum id tellus et mauris sagittis tincidunt quis id mauris. Curabitur consectetur lectus sit amet tellus mattis, non lobortis leo interdum.</p>
|
||||||
|
<blockquote>
|
||||||
|
<p>Nulla finibus consequat placerat. Vestibulum id tellus et mauris sagittis tincidunt quis id mauris.</p>
|
||||||
|
<ul>
|
||||||
|
<li>Curabitur consectetur lectus sit amet tellus mattis, non lobortis leo interdum.</li>
|
||||||
|
</ul>
|
||||||
|
</blockquote>
|
||||||
|
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla finibus consequat placerat. Vestibulum id tellus et mauris sagittis tincidunt quis id mauris. Curabitur consectetur lectus sit amet tellus mattis, non lobortis leo interdum.</p>
|
||||||
|
<blockquote>
|
||||||
|
<p>Nulla finibus consequat placerat. Vestibulum id tellus et mauris sagittis tincidunt quis id mauris.</p>
|
||||||
|
<blockquote>
|
||||||
|
<p>Curabitur consectetur lectus sit amet tellus mattis, non lobortis leo interdum.</p>
|
||||||
|
</blockquote>
|
||||||
|
</blockquote>
|
||||||
|
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla finibus consequat placerat. Vestibulum id tellus et mauris sagittis tincidunt quis id mauris. Curabitur consectetur lectus sit amet tellus mattis, non lobortis leo interdum.</p>
|
||||||
|
</div>
|
||||||
24
packages/ckeditor5-admonition/tests/manual/blockquote.js
Normal file
24
packages/ckeditor5-admonition/tests/manual/blockquote.js
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
/**
|
||||||
|
* @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
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* global document, console, window */
|
||||||
|
|
||||||
|
import ClassicEditor from '@ckeditor/ckeditor5-editor-classic/src/classiceditor.js';
|
||||||
|
import ArticlePluginSet from '@ckeditor/ckeditor5-core/tests/_utils/articlepluginset.js';
|
||||||
|
|
||||||
|
ClassicEditor
|
||||||
|
.create( document.querySelector( '#editor' ), {
|
||||||
|
image: { toolbar: [ 'toggleImageCaption', 'imageTextAlternative' ] },
|
||||||
|
plugins: [
|
||||||
|
ArticlePluginSet
|
||||||
|
],
|
||||||
|
toolbar: [ 'heading', '|', 'bold', 'italic', 'link', 'bulletedList', 'numberedList', 'blockQuote', 'undo', 'redo' ]
|
||||||
|
} )
|
||||||
|
.then( editor => {
|
||||||
|
window.editor = editor;
|
||||||
|
} )
|
||||||
|
.catch( err => {
|
||||||
|
console.error( err.stack );
|
||||||
|
} );
|
||||||
12
packages/ckeditor5-admonition/tests/manual/blockquote.md
Normal file
12
packages/ckeditor5-admonition/tests/manual/blockquote.md
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
## Block quote feature
|
||||||
|
|
||||||
|
Check block quote related behaviors:
|
||||||
|
|
||||||
|
* applying quotes to multiple blocks,
|
||||||
|
* removing quotes,
|
||||||
|
* <kbd>Enter</kbd> (should leave quote when pressed in an empty block),
|
||||||
|
* <kbd>Backspace</kbd>,
|
||||||
|
* undo/redo,
|
||||||
|
* applying headings and lists,
|
||||||
|
* stability when used with nested lists,
|
||||||
|
* stability when used with nested block quotes.
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
<style>
|
||||||
|
body {
|
||||||
|
font-family: Helvetica, Arial, sans-serif;
|
||||||
|
font-size: 14px;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<div id="editor">
|
||||||
|
<p>Nested block quotes (in the data):</p>
|
||||||
|
|
||||||
|
<blockquote>
|
||||||
|
<p>Nulla finibus consequat placerat. Vestibulum id tellus et mauris sagittis tincidunt quis id mauris.</p>
|
||||||
|
<blockquote>
|
||||||
|
<p>Curabitur consectetur lectus sit amet tellus mattis, non lobortis leo interdum.</p>
|
||||||
|
<blockquote>
|
||||||
|
<p>Vestibulum id tellus et mauris sagittis tincidunt quis id mauris. Curabitur consectetur lectus sit amet tellus mattis, non lobortis leo interdum.</p>
|
||||||
|
</blockquote>
|
||||||
|
</blockquote>
|
||||||
|
</blockquote>
|
||||||
|
</div>
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
/**
|
||||||
|
* @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
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* globals console, window, document */
|
||||||
|
|
||||||
|
import ClassicEditor from '@ckeditor/ckeditor5-editor-classic/src/classiceditor.js';
|
||||||
|
import ArticlePluginSet from '@ckeditor/ckeditor5-core/tests/_utils/articlepluginset.js';
|
||||||
|
|
||||||
|
function DisallowNestingBlockQuotes( editor ) {
|
||||||
|
editor.model.schema.addChildCheck( ( context, childDefinition ) => {
|
||||||
|
if ( context.endsWith( 'blockQuote' ) && childDefinition.name == 'blockQuote' ) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
} );
|
||||||
|
}
|
||||||
|
|
||||||
|
ClassicEditor
|
||||||
|
.create( document.querySelector( '#editor' ), {
|
||||||
|
image: { toolbar: [ 'toggleImageCaption', 'imageTextAlternative' ] },
|
||||||
|
plugins: [ ArticlePluginSet, DisallowNestingBlockQuotes ],
|
||||||
|
toolbar: [
|
||||||
|
'heading', '|', 'insertTable', '|', 'bold', 'italic', 'bulletedList', 'numberedList', 'blockQuote', 'undo', 'redo'
|
||||||
|
],
|
||||||
|
table: {
|
||||||
|
contentToolbar: [ 'tableColumn', 'tableRow', 'mergeTableCells' ],
|
||||||
|
tableToolbar: [ 'bold', 'italic' ]
|
||||||
|
}
|
||||||
|
} )
|
||||||
|
.then( editor => {
|
||||||
|
window.editor = editor;
|
||||||
|
} )
|
||||||
|
.catch( err => {
|
||||||
|
console.error( err.stack );
|
||||||
|
} );
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
* The nested block quote present in the data should be "unnested" ("unwrapped") on data load. All block quotes (the top level block quote and all nested ones) should be converted to siblings in editor's root.
|
||||||
|
* It should not be possible to insert a block quote into another block quote as a direct child in any way (UI, paste, d&d, etc.). It is allowed to have nested block quotes indirectly, i.e. a block quote inside a table, which is inside another block quote.
|
||||||
BIN
packages/ckeditor5-admonition/tests/manual/logo.png
Normal file
BIN
packages/ckeditor5-admonition/tests/manual/logo.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 23 KiB |
23
packages/ckeditor5-admonition/theme/blockquote.css
Normal file
23
packages/ckeditor5-admonition/theme/blockquote.css
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
/*
|
||||||
|
* 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
|
||||||
|
*/
|
||||||
|
|
||||||
|
.ck-content blockquote {
|
||||||
|
/* See #12 */
|
||||||
|
overflow: hidden;
|
||||||
|
|
||||||
|
/* https://github.com/ckeditor/ckeditor5-block-quote/issues/15 */
|
||||||
|
padding-right: 1.5em;
|
||||||
|
padding-left: 1.5em;
|
||||||
|
|
||||||
|
margin-left: 0;
|
||||||
|
margin-right: 0;
|
||||||
|
font-style: italic;
|
||||||
|
border-left: solid 5px hsl(0, 0%, 80%);
|
||||||
|
}
|
||||||
|
|
||||||
|
.ck-content[dir="rtl"] blockquote {
|
||||||
|
border-left: 0;
|
||||||
|
border-right: solid 5px hsl(0, 0%, 80%);
|
||||||
|
}
|
||||||
12
packages/ckeditor5-admonition/tsconfig.dist.json
Normal file
12
packages/ckeditor5-admonition/tsconfig.dist.json
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
{
|
||||||
|
"extends": "../../tsconfig.dist.json",
|
||||||
|
"compilerOptions": {
|
||||||
|
"rootDir": "src",
|
||||||
|
"types": [
|
||||||
|
"../../typings/types"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"include": [
|
||||||
|
"src"
|
||||||
|
]
|
||||||
|
}
|
||||||
10
packages/ckeditor5-admonition/tsconfig.json
Normal file
10
packages/ckeditor5-admonition/tsconfig.json
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
{
|
||||||
|
"extends": "../../tsconfig.release.json",
|
||||||
|
"include": [
|
||||||
|
"src",
|
||||||
|
"../../typings"
|
||||||
|
],
|
||||||
|
"exclude": [
|
||||||
|
"tests"
|
||||||
|
]
|
||||||
|
}
|
||||||
19
packages/ckeditor5-admonition/webpack.config.cjs
Normal file
19
packages/ckeditor5-admonition/webpack.config.cjs
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
/**
|
||||||
|
* @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' )
|
||||||
|
} );
|
||||||
Reference in New Issue
Block a user