Procházet zdrojové kódy

Merge branch 'master' into i/1410

Marek Lewandowski před 6 roky
rodič
revize
bdb862f792

+ 2 - 2
.github/ISSUE_TEMPLATE/5-task.md

@@ -1,13 +1,13 @@
 ---
 name: "\U0001F477 Task"
-about: It's neither a bug nor feature request.
+about: It's neither a bug nor a feature request.
 title: ''
 labels: type:task
 assignees: ''
 
 ---
 
-## Provide description of the task
+## Provide a description of the task
 
 *What steps should be taken to fulfil the task?*
 

+ 2 - 0
.gitignore

@@ -4,3 +4,5 @@ coverage/
 packages/
 docs/api/output.json
 lerna-debug.log
+.idea
+.vscode

+ 72 - 1
CHANGELOG.md

@@ -1,11 +1,82 @@
 Changelog
 =========
 
+## [15.0.0](https://github.com/ckeditor/ckeditor5/compare/v12.4.0...v15.0.0) (2019-10-23)
+
+We are happy to announce the release of CKEditor 5 v15.0.0. This editor version introduces support for inserting [horizontal lines](https://ckeditor.com/docs/ckeditor5/latest/features/horizontal-line.html), [page breaks](https://ckeditor.com/docs/ckeditor5/latest/features/page-break.html) and [SVG images](https://ckeditor.com/docs/ckeditor5/latest/api/module_image_imageupload-ImageUploadConfig.html#member-types) into the WYSIWYG editor. It also allows you to define the [document title section](https://ckeditor.com/docs/ckeditor5/latest/features/title.html) thanks to the new title plugin. The editor toolbar is now responsive which improves the UX, especially for mobile devices.
+
+Regarding the build itself, we added the [indentation](https://ckeditor.com/docs/ckeditor5/latest/features/indent.html) button to the build's default setup. See [ckeditor/ckeditor5#1844](https://github.com/ckeditor/ckeditor5/issues/1844).
+
+From other news, we changed the versioning policy. Now, all packages will have the same major version, hence, we needed to release this one as v15.0.0 (we skipped versions 13.0.0 and 14.0.0). Read more about the [new versioning policy](https://ckeditor.com/docs/ckeditor5/latest/framework/guides/support/versioning-policy.html).
+
+Blog post coming soon...
+
+### Dependencies
+
+New packages:
+
+* [@ckeditor/ckeditor5-horizontal-line](https://www.npmjs.com/package/@ckeditor/ckeditor5-horizontal-line): [v15.0.0](https://github.com/ckeditor/ckeditor5-horizontal-line/releases/tag/v15.0.0)
+* [@ckeditor/ckeditor5-page-break](https://www.npmjs.com/package/@ckeditor/ckeditor5-page-break): [v15.0.0](https://github.com/ckeditor/ckeditor5-page-break/releases/tag/v15.0.0)
+
+Major releases (contain major breaking changes):
+
+* [@ckeditor/ckeditor5-engine](https://www.npmjs.com/package/@ckeditor/ckeditor5-engine): v14.0.0 => [v15.0.0](https://github.com/ckeditor/ckeditor5-engine/releases/tag/v15.0.0)
+* [@ckeditor/ckeditor5-image](https://www.npmjs.com/package/@ckeditor/ckeditor5-image): v14.0.0 => [v15.0.0](https://github.com/ckeditor/ckeditor5-image/releases/tag/v15.0.0)
+* [@ckeditor/ckeditor5-list](https://www.npmjs.com/package/@ckeditor/ckeditor5-list): v12.1.0 => [v15.0.0](https://github.com/ckeditor/ckeditor5-list/releases/tag/v15.0.0)
+* [@ckeditor/ckeditor5-ui](https://www.npmjs.com/package/@ckeditor/ckeditor5-ui): v14.0.0 => [v15.0.0](https://github.com/ckeditor/ckeditor5-ui/releases/tag/v15.0.0)
+* [@ckeditor/ckeditor5-widget](https://www.npmjs.com/package/@ckeditor/ckeditor5-widget): v11.1.0 => [v15.0.0](https://github.com/ckeditor/ckeditor5-widget/releases/tag/v15.0.0)
+
+Major releases (dependencies of those packages have breaking changes):
+
+* [@ckeditor/ckeditor-cloud-services-core](https://www.npmjs.com/package/@ckeditor/ckeditor-cloud-services-core): v3.0.1 => [v15.0.0](https://github.com/ckeditor/ckeditor-cloud-services-core/releases/tag/v15.0.0)
+* [@ckeditor/ckeditor5-adapter-ckfinder](https://www.npmjs.com/package/@ckeditor/ckeditor5-adapter-ckfinder): v11.0.5 => [v15.0.0](https://github.com/ckeditor/ckeditor5-adapter-ckfinder/releases/tag/v15.0.0)
+* [@ckeditor/ckeditor5-alignment](https://www.npmjs.com/package/@ckeditor/ckeditor5-alignment): v11.2.0 => [v15.0.0](https://github.com/ckeditor/ckeditor5-alignment/releases/tag/v15.0.0)
+* [@ckeditor/ckeditor5-autoformat](https://www.npmjs.com/package/@ckeditor/ckeditor5-autoformat): v11.0.5 => [v15.0.0](https://github.com/ckeditor/ckeditor5-autoformat/releases/tag/v15.0.0)
+* [@ckeditor/ckeditor5-autosave](https://www.npmjs.com/package/@ckeditor/ckeditor5-autosave): v11.0.5 => [v15.0.0](https://github.com/ckeditor/ckeditor5-autosave/releases/tag/v15.0.0)
+* [@ckeditor/ckeditor5-basic-styles](https://www.npmjs.com/package/@ckeditor/ckeditor5-basic-styles): v11.1.4 => [v15.0.0](https://github.com/ckeditor/ckeditor5-basic-styles/releases/tag/v15.0.0)
+* [@ckeditor/ckeditor5-block-quote](https://www.npmjs.com/package/@ckeditor/ckeditor5-block-quote): v11.1.3 => [v15.0.0](https://github.com/ckeditor/ckeditor5-block-quote/releases/tag/v15.0.0)
+* [@ckeditor/ckeditor5-build-balloon](https://www.npmjs.com/package/@ckeditor/ckeditor5-build-balloon): v12.4.0 => [v15.0.0](https://github.com/ckeditor/ckeditor5-build-balloon/releases/tag/v15.0.0)
+* [@ckeditor/ckeditor5-build-balloon-block](https://www.npmjs.com/package/@ckeditor/ckeditor5-build-balloon-block): v12.4.0 => [v15.0.0](https://github.com/ckeditor/ckeditor5-build-balloon-block/releases/tag/v15.0.0)
+* [@ckeditor/ckeditor5-build-classic](https://www.npmjs.com/package/@ckeditor/ckeditor5-build-classic): v12.4.0 => [v15.0.0](https://github.com/ckeditor/ckeditor5-build-classic/releases/tag/v15.0.0)
+* [@ckeditor/ckeditor5-build-decoupled-document](https://www.npmjs.com/package/@ckeditor/ckeditor5-build-decoupled-document): v12.4.0 => [v15.0.0](https://github.com/ckeditor/ckeditor5-build-decoupled-document/releases/tag/v15.0.0)
+* [@ckeditor/ckeditor5-build-inline](https://www.npmjs.com/package/@ckeditor/ckeditor5-build-inline): v12.4.0 => [v15.0.0](https://github.com/ckeditor/ckeditor5-build-inline/releases/tag/v15.0.0)
+* [@ckeditor/ckeditor5-ckfinder](https://www.npmjs.com/package/@ckeditor/ckeditor5-ckfinder): v11.0.5 => [v15.0.0](https://github.com/ckeditor/ckeditor5-ckfinder/releases/tag/v15.0.0)
+* [@ckeditor/ckeditor5-clipboard](https://www.npmjs.com/package/@ckeditor/ckeditor5-clipboard): v12.0.2 => [v15.0.0](https://github.com/ckeditor/ckeditor5-clipboard/releases/tag/v15.0.0)
+* [@ckeditor/ckeditor5-cloud-services](https://www.npmjs.com/package/@ckeditor/ckeditor5-cloud-services): v11.0.5 => [v15.0.0](https://github.com/ckeditor/ckeditor5-cloud-services/releases/tag/v15.0.0)
+* [@ckeditor/ckeditor5-core](https://www.npmjs.com/package/@ckeditor/ckeditor5-core): v12.3.0 => [v15.0.0](https://github.com/ckeditor/ckeditor5-core/releases/tag/v15.0.0)
+* [@ckeditor/ckeditor5-easy-image](https://www.npmjs.com/package/@ckeditor/ckeditor5-easy-image): v11.0.5 => [v15.0.0](https://github.com/ckeditor/ckeditor5-easy-image/releases/tag/v15.0.0)
+* [@ckeditor/ckeditor5-editor-balloon](https://www.npmjs.com/package/@ckeditor/ckeditor5-editor-balloon): v12.2.2 => [v15.0.0](https://github.com/ckeditor/ckeditor5-editor-balloon/releases/tag/v15.0.0)
+* [@ckeditor/ckeditor5-editor-classic](https://www.npmjs.com/package/@ckeditor/ckeditor5-editor-classic): v12.1.4 => [v15.0.0](https://github.com/ckeditor/ckeditor5-editor-classic/releases/tag/v15.0.0)
+* [@ckeditor/ckeditor5-editor-decoupled](https://www.npmjs.com/package/@ckeditor/ckeditor5-editor-decoupled): v12.2.2 => [v15.0.0](https://github.com/ckeditor/ckeditor5-editor-decoupled/releases/tag/v15.0.0)
+* [@ckeditor/ckeditor5-editor-inline](https://www.npmjs.com/package/@ckeditor/ckeditor5-editor-inline): v12.3.0 => [v15.0.0](https://github.com/ckeditor/ckeditor5-editor-inline/releases/tag/v15.0.0)
+* [@ckeditor/ckeditor5-enter](https://www.npmjs.com/package/@ckeditor/ckeditor5-enter): v11.1.0 => [v15.0.0](https://github.com/ckeditor/ckeditor5-enter/releases/tag/v15.0.0)
+* [@ckeditor/ckeditor5-essentials](https://www.npmjs.com/package/@ckeditor/ckeditor5-essentials): v11.0.5 => [v15.0.0](https://github.com/ckeditor/ckeditor5-essentials/releases/tag/v15.0.0)
+* [@ckeditor/ckeditor5-font](https://www.npmjs.com/package/@ckeditor/ckeditor5-font): v11.2.2 => [v15.0.0](https://github.com/ckeditor/ckeditor5-font/releases/tag/v15.0.0)
+* [@ckeditor/ckeditor5-heading](https://www.npmjs.com/package/@ckeditor/ckeditor5-heading): v11.0.5 => [v15.0.0](https://github.com/ckeditor/ckeditor5-heading/releases/tag/v15.0.0)
+* [@ckeditor/ckeditor5-highlight](https://www.npmjs.com/package/@ckeditor/ckeditor5-highlight): v11.0.5 => [v15.0.0](https://github.com/ckeditor/ckeditor5-highlight/releases/tag/v15.0.0)
+* [@ckeditor/ckeditor5-indent](https://www.npmjs.com/package/@ckeditor/ckeditor5-indent): v10.1.0 => [v15.0.0](https://github.com/ckeditor/ckeditor5-indent/releases/tag/v15.0.0)
+* [@ckeditor/ckeditor5-link](https://www.npmjs.com/package/@ckeditor/ckeditor5-link): v11.1.2 => [v15.0.0](https://github.com/ckeditor/ckeditor5-link/releases/tag/v15.0.0)
+* [@ckeditor/ckeditor5-markdown-gfm](https://www.npmjs.com/package/@ckeditor/ckeditor5-markdown-gfm): v11.0.5 => [v15.0.0](https://github.com/ckeditor/ckeditor5-markdown-gfm/releases/tag/v15.0.0)
+* [@ckeditor/ckeditor5-media-embed](https://www.npmjs.com/package/@ckeditor/ckeditor5-media-embed): v11.1.4 => [v15.0.0](https://github.com/ckeditor/ckeditor5-media-embed/releases/tag/v15.0.0)
+* [@ckeditor/ckeditor5-mention](https://www.npmjs.com/package/@ckeditor/ckeditor5-mention): v13.0.0 => [v15.0.0](https://github.com/ckeditor/ckeditor5-mention/releases/tag/v15.0.0)
+* [@ckeditor/ckeditor5-paragraph](https://www.npmjs.com/package/@ckeditor/ckeditor5-paragraph): v11.0.5 => [v15.0.0](https://github.com/ckeditor/ckeditor5-paragraph/releases/tag/v15.0.0)
+* [@ckeditor/ckeditor5-paste-from-office](https://www.npmjs.com/package/@ckeditor/ckeditor5-paste-from-office): v11.1.0 => [v15.0.0](https://github.com/ckeditor/ckeditor5-paste-from-office/releases/tag/v15.0.0)
+* [@ckeditor/ckeditor5-remove-format](https://www.npmjs.com/package/@ckeditor/ckeditor5-remove-format): v10.0.4 => [v15.0.0](https://github.com/ckeditor/ckeditor5-remove-format/releases/tag/v15.0.0)
+* [@ckeditor/ckeditor5-table](https://www.npmjs.com/package/@ckeditor/ckeditor5-table): v14.0.0 => [v15.0.0](https://github.com/ckeditor/ckeditor5-table/releases/tag/v15.0.0)
+* [@ckeditor/ckeditor5-theme-lark](https://www.npmjs.com/package/@ckeditor/ckeditor5-theme-lark): v14.2.0 => [v15.0.0](https://github.com/ckeditor/ckeditor5-theme-lark/releases/tag/v15.0.0)
+* [@ckeditor/ckeditor5-typing](https://www.npmjs.com/package/@ckeditor/ckeditor5-typing): v12.2.0 => [v15.0.0](https://github.com/ckeditor/ckeditor5-typing/releases/tag/v15.0.0)
+* [@ckeditor/ckeditor5-undo](https://www.npmjs.com/package/@ckeditor/ckeditor5-undo): v11.0.5 => [v15.0.0](https://github.com/ckeditor/ckeditor5-undo/releases/tag/v15.0.0)
+* [@ckeditor/ckeditor5-upload](https://www.npmjs.com/package/@ckeditor/ckeditor5-upload): v12.0.0 => [v15.0.0](https://github.com/ckeditor/ckeditor5-upload/releases/tag/v15.0.0)
+* [@ckeditor/ckeditor5-utils](https://www.npmjs.com/package/@ckeditor/ckeditor5-utils): v14.0.0 => [v15.0.0](https://github.com/ckeditor/ckeditor5-utils/releases/tag/v15.0.0)
+* [@ckeditor/ckeditor5-watchdog](https://www.npmjs.com/package/@ckeditor/ckeditor5-watchdog): v11.0.0 => [v15.0.0](https://github.com/ckeditor/ckeditor5-watchdog/releases/tag/v15.0.0)
+* [@ckeditor/ckeditor5-word-count](https://www.npmjs.com/package/@ckeditor/ckeditor5-word-count): v10.0.2 => [v15.0.0](https://github.com/ckeditor/ckeditor5-word-count/releases/tag/v15.0.0)
+
+
 ## [12.4.0](https://github.com/ckeditor/ckeditor5/compare/v12.3.1...v12.4.0) (2019-08-26)
 
 This release brings a huge set of new features: [image resizing](https://ckeditor.com/ckeditor5/build/docs/ckeditor5/latest/features/image.html#resizing-images), [to-do lists](https://ckeditor.com/ckeditor5/build/docs/ckeditor5/latest/features/todo-lists.html), [support for RTL languages](https://ckeditor.com/ckeditor5/build/docs/ckeditor5/latest/features/ui-language.html), [simple upload adapter](https://ckeditor.com/ckeditor5/build/docs/ckeditor5/latest/features/image-upload/simple-upload-adapter.html), [support for pasting from Google Docs](https://ckeditor.com/ckeditor5/build/docs/ckeditor5/latest/features/paste-from-office/paste-from-google-docs.html), [mathematic formulas](https://ckeditor.com/ckeditor5/build/docs/ckeditor5/latest/features/mathtype.html), and [spelling and grammar checking](https://ckeditor.com/ckeditor5/build/docs/ckeditor5/latest/features/spell-checker.html). In addition to that, as always, it contains many improvements and bug fixes.
 
-Blog post comming soon...
+Read more in the blog post: https://ckeditor.com/blog/CKEditor-5-v12.4.0-with-image-resizing-to-do-lists-RTL-language-support-and-more/
 
 ### Dependencies
 

+ 5 - 2
docs/_snippets/examples/multi-root-editor.js

@@ -366,13 +366,16 @@ class MultirootEditorUIView extends EditorUIView {
 		}
 
 		// This toolbar may be placed anywhere in the page so things like font size need to be reset in it.
-		// Also because of the above, make sure the toolbar supports rounded corners.
+		// Because of the above, make sure the toolbar supports rounded corners.
+		// Also, make sure the toolbar has the proper dir attribute because its ancestor may not have one
+		// and some toolbar item styles depend on this attribute.
 		Template.extend( this.toolbar.template, {
 			attributes: {
 				class: [
 					'ck-reset_all',
 					'ck-rounded-corners'
-				]
+				],
+				dir: locale.uiLanguageDirection
 			}
 		} );
 	}

+ 39 - 44
docs/builds/guides/integration/content-styles.md

@@ -49,7 +49,7 @@ Below there is a full list of content styles used by the editor features. You ca
 ```css
 /*
  * CKEditor 5 (v12.4.0) content styles.
- * Generated on Thu, 17 Oct 2019 07:18:45 GMT.
+ * Generated on Mon, 21 Oct 2019 11:34:56 GMT.
  * For more information, check out https://ckeditor.com/docs/ckeditor5/latest/builds/guides/integration/content-styles.html
  */
 
@@ -64,26 +64,12 @@ Below there is a full list of content styles used by the editor features. You ca
 	padding: .15em;
 	border-radius: 2px;
 }
-/* ckeditor5-image/theme/imageresize.css */
-.ck-content .image.image_resized {
-	max-width: 100%;
-	display: block;
-	box-sizing: border-box
-}
-/* ckeditor5-image/theme/imageresize.css */
-.ck-content .image.image_resized img {
-	width: 100%;
-}
-/* ckeditor5-image/theme/imageresize.css */
-.ck-content .image.image_resized > figcaption {
-	display: block;
-}
 /* ckeditor5-image/theme/image.css */
 .ck-content .image {
 	display: table;
 	clear: both;
 	text-align: center;
-	margin: 1em auto
+	margin: 1em auto;
 }
 /* ckeditor5-image/theme/image.css */
 .ck-content .image > img {
@@ -103,13 +89,34 @@ Below there is a full list of content styles used by the editor features. You ca
 	font-size: .75em;
 	outline-offset: -1px;
 }
+/* ckeditor5-image/theme/imageresize.css */
+.ck-content .image.image_resized {
+	max-width: 100%;
+	display: block;
+	box-sizing: border-box;
+}
+/* ckeditor5-image/theme/imageresize.css */
+.ck-content .image.image_resized img {
+	width: 100%;
+}
+/* ckeditor5-image/theme/imageresize.css */
+.ck-content .image.image_resized > figcaption {
+	display: block;
+}
+/* ckeditor5-media-embed/theme/mediaembed.css */
+.ck-content .media {
+	clear: both;
+	margin: 1em 0;
+	display: block;
+	min-width: 15em;
+}
 /* ckeditor5-list/theme/todolist.css */
 .ck-content .todo-list {
-	list-style: none
+	list-style: none;
 }
 /* ckeditor5-list/theme/todolist.css */
 .ck-content .todo-list li {
-	margin-bottom: 5px
+	margin-bottom: 5px;
 }
 /* ckeditor5-list/theme/todolist.css */
 .ck-content .todo-list li .todo-list {
@@ -127,7 +134,7 @@ Below there is a full list of content styles used by the editor features. You ca
 	left: -25px;
 	margin-right: -15px;
 	right: 0;
-	margin-left: 0
+	margin-left: 0;
 }
 /* ckeditor5-list/theme/todolist.css */
 .ck-content .todo-list .todo-list__label > input::before {
@@ -173,20 +180,13 @@ Below there is a full list of content styles used by the editor features. You ca
 /* ckeditor5-table/theme/table.css */
 .ck-content .table {
 	margin: 1em auto;
-	display: table
+	display: table;
 }
 /* ckeditor5-table/theme/table.css */
 .ck-content .table table {
 	border-collapse: collapse;
 	border-spacing: 0;
-	border: 1px double hsl(0, 0%, 70%)
-}
-/* ckeditor5-table/theme/table.css */
-.ck-content .table table td,
-.ck-content .table table th {
-	min-width: 2em;
-	padding: .4em;
-	border-color: hsl(0, 0%, 85%);
+	border: 1px double hsl(0, 0%, 70%);
 }
 /* ckeditor5-table/theme/table.css */
 .ck-content .table table td,
@@ -207,7 +207,7 @@ Below there is a full list of content styles used by the editor features. You ca
 	padding: 5px 0;
 	display: flex;
 	align-items: center;
-	justify-content: center
+	justify-content: center;
 }
 /* ckeditor5-page-break/theme/pagebreak.css */
 .ck-content .page-break::after {
@@ -236,14 +236,6 @@ Below there is a full list of content styles used by the editor features. You ca
 	-ms-user-select: none;
 	user-select: none;
 }
-/* ckeditor5-page-break/theme/pagebreak.css */
-.ck-content .page-break {
-	padding: 0
-}
-/* ckeditor5-page-break/theme/pagebreak.css */
-.ck-content .page-break::after {
-	display: none;
-}
 /* ckeditor5-image/theme/imagestyle.css */
 .ck-content .image-style-side,
 .ck-content .image-style-align-left,
@@ -286,13 +278,6 @@ Below there is a full list of content styles used by the editor features. You ca
 	border-left: 0;
 	border-right: solid 5px hsl(0, 0%, 80%);
 }
-/* ckeditor5-media-embed/theme/mediaembed.css */
-.ck-content .media {
-	clear: both;
-	margin: 1em 0;
-	display: block;
-	min-width: 15em;
-}
 /* ckeditor5-horizontal-line/theme/horizontalline.css */
 .ck-content hr {
 	border-width: 1px 0 0;
@@ -300,4 +285,14 @@ Below there is a full list of content styles used by the editor features. You ca
 	border-color: hsl(0, 0%, 37%);
 	margin: 0;
 }
+@media print {
+	/* ckeditor5-page-break/theme/pagebreak.css */
+	.ck-content .page-break {
+		padding: 0;
+	}
+	/* ckeditor5-page-break/theme/pagebreak.css */
+	.ck-content .page-break::after {
+		display: none;
+	}
+}
 ```

+ 1 - 3
docs/builds/guides/support/reporting-issues.md

@@ -22,9 +22,7 @@ Most of the issues are reproducible on the demo. If you have a different case th
 
 ## Reporting issues
 
-All issues should be reported in the [CKEditor 5 repositories](https://github.com/ckeditor?q=ckeditor5) on GitHub.
-
-Issues related to builds are usually caused by issues in the CKEditor 5 Framework components and plugins included in the build. You may report issues directly into the repositories that you think are related to them (like plugins) but, if you are unsure, the [`ckeditor5` issues page](https://github.com/ckeditor/ckeditor5/issues) should be used as the fallback place for any issue. The CKEditor 5 team will then move the issue to the right place or give you further instructions, if necessary.
+All issues should be reported in the [CKEditor 5 repository](https://github.com/ckeditor/ckeditor5/issues) on GitHub.
 
 Things to keep in mind:
 

+ 13 - 5
docs/features/index.md

@@ -11,19 +11,27 @@ feedback-widget: false
 	Use the <span class="navigation-hint_desktop">**navigation tree on the left**</span><span class="navigation-hint_mobile">**main menu button in the upper-left corner**</span> to navigate through selected CKEditor 5 features.
 </info-box>
 
-## Features availability
+## Feature availability
 
-Most of the features are included in CKEditor 5 Builds and are available out of the box, like for example {@link features/autoformat Autoformatting} or {@link features/keyboard-support Keyboard support}. However, some of the presented features need to be manually included in a customized CKEditor build, for example the {@link features/markdown Markdown processor} which outputs Markdown instead of HTML.
+The number of features available for CKEditor 5 is constantly growing. Plenty of them are included by default in CKEditor 5 Builds and are available out-of-the-box, like for example {@link features/autoformat autoformatting} or {@link features/keyboard-support keyboard support}. However, some of the presented features need to be manually included in a customized CKEditor 5 build, for example the {@link features/markdown Markdown processor} which outputs Markdown instead of HTML.
+
+## Feature examples
+
+Each rich-text editor feature is presented on a separate page, with one or more working demos showcasing a feature along with some customization ideas that you can use in your implementation.
+
+<info-box>
+	**In most demos the number of features enabled is limited** to make the currently highlighted piece of functionality stand out more. However, in your CKEditor 5 WYSIWYG editor implementation you are free to choose and combine any features you like from those available.
+</info-box> 
 
 ## Looking for more?
 
-The examples on the left do not present all features included in CKEditor 5. For example some end-user features like bulleted and numbered lists are quite self-explanatory.
+The examples on the left do not present all features included in CKEditor 5. For example, some end-user features like bulleted and numbered lists or undo and redo are quite self-explanatory.
 
-Please bear in mind that the stable version of CKEditor 5 has not been officially released yet and with time more features will be added to CKEditor 5. If you are missing anything particular, feel free to [suggest a new feature](https://github.com/ckeditor/ckeditor5/issues) and share your feedback with us. If it has already been reported by someone else, upvote it to show your support.
+CKEditor 5 is in active development now and new features are added all the time, while the existing ones are being expanded and improved. If you are missing anything in particular, feel free to [suggest a new feature](https://github.com/ckeditor/ckeditor5/issues/new?labels=type%3Afeature&template=2-feature-request.md) and share your feedback with us. If it has already been reported by someone else, upvote it 👍 to show your support.
 
 ## How about creating your own features?
 
 Probably the most exciting features are the ones you can develop on top of CKEditor 5 Framework!
-We are slowly enhancing the {@link framework/index CKEditor 5 Framework documentation} together with {@link api/index API documentation}, hoping to give you a solid base for {@link framework/guides/creating-simple-plugin creating custom features}.
+We are gradually enhancing the {@link framework/index CKEditor 5 Framework documentation} together with {@link api/index API documentation}, hoping to give you a solid base for {@link framework/guides/creating-simple-plugin creating custom features}.
 
 The official add-ons repository for CKEditor 4 reached an impressive number of over 300 add-ons created and published by the community. Now it is time for you to add your contributions to the brand new CKEditor 5!

+ 5 - 2
docs/framework/guides/custom-editor-creator.md

@@ -369,13 +369,16 @@ class MultirootEditorUIView extends EditorUIView {
 		}
 
 		// This toolbar may be placed anywhere in the page so things like font size need to be reset in it.
-		// Also because of the above, make sure the toolbar supports rounded corners.
+		// Because of the above, make sure the toolbar supports rounded corners.
+		// Also, make sure the toolbar has the proper dir attribute because its ancestor may not have one
+		// and some toolbar item styles depend on this attribute.
 		Template.extend( this.toolbar.template, {
 			attributes: {
 				class: [
 					'ck-reset_all',
 					'ck-rounded-corners'
-				]
+				],
+				dir: locale.uiLanguageDirection
 			}
 		} );
 	}

+ 1 - 1
docs/framework/guides/support/error-codes.md

@@ -1,6 +1,6 @@
 ---
 category: framework-support
-order: 50
+order: 60
 ---
 
 # Error codes

+ 37 - 0
docs/framework/guides/support/versioning-policy.md

@@ -0,0 +1,37 @@
+---
+category: framework-support
+order: 50
+---
+
+# Versioning policy
+
+CKEditor 5 consists of multiple npm packages (over 40, at the moment of writing this guide). When releasing them, we use the following rules:
+
+* We use the `MAJOR.MINOR.PATCH` version identifiers.
+* Each package is versioned independently, with one exception &mdash; all packages are always in the same `MAJOR` version.
+* A major release of CKEditor 5 (i.e. of all its packages) is published when at least one of its packages must have a major release. This is to ensure the previous rule.
+* A package must have a major release when it contains a *major breaking change*.
+* If none of the packages contain any *major breaking change*, the following rules are used to determine the new version of each package:
+	* If a package contains a *minor breaking change*, a `MINOR` version is increased.
+	* If a package contains a new feature, a `MINOR` version is increased.
+	* If a package contains only bug fixes, unrelated changes (e.g. updated translations), documentation or other internal changes, a `PATCH` version is increased.
+
+## Major and minor breaking changes
+
+The ecosystem of CKEditor 5 consists of multiple layers. Our approach to breaking changes and their effect depends on which layer is affected.
+
+* **The integration layer.** This is the most commonly used API which is used to integrate and customize existing builds or editors built from source. It also includes their setup (which features are included and their default configuration).
+	* Breaking changes frequency: as rarely as possible. Therefore, changes to this layer are usually done in a backward compatible way.
+	* A breaking change in this layer is understood as a **major breaking change**.
+* **The plugin development API layer.** This is the API exposed by packages such as {@link api/engine `@ckeditor/ckeditor5-engine`} or {@link api/core `@ckeditor/ckeditor5-core`}, which is commonly used by plugin developers.
+	* Breaking changes frequency: rarely. This layer is still frequently used by developers, therefore, we try to limit breaking changes. However, to avoid increasing the technical debt, from time to time we will introduce breaking changes to one or more packages. We also try to "batch" them in order to have as many breaking changes done in one release, to reduce the frequency of major releases.
+	* A breaking change in this layer is understood as a **major breaking change**.
+* **The low-level customizability API layer.** This is the part of package APIs that allows tweaking the behavior of existing features, their UI, etc. and building other features on top of the existing ones or by using their helpers.
+	* Breaking changes frequency: frequent. This layer, while exposed by CKEditor 5 Framework, is often closely connected to the architecture of a certain feature and may expose some implementation details. We want this layer to be public as it increases the ability to reuse the code, however, we cannot guarantee its stability on the same level as in the two previous layers.
+	* A breaking change in this layer is understood as a **minor breaking change**.
+
+## Why not semantic versioning?
+
+Prior to version 15.0.0 each package was versioned independently and followed the [semantic versioning (semver)](https://semver.org/). Following semver as close as possible was useful as it allowed to quickly identify what changed in each release of a certain package. However, it lead to [problems with building old versions of the editor](https://github.com/ckeditor/ckeditor5/issues/1746).
+
+Therefore, we switched to a more commonly used practice for an ecosystem of packages, which is to treat a single breaking change as a major release of all packages. It automatically fixed the aforementioned problem in all projects that use caret ranges in their `package.json` files.

+ 1 - 1
docs/umberto.json

@@ -147,7 +147,7 @@
 								{
 									"name": "Conversion",
 									"id": "framework-deep-dive-conversion",
-									"slug": "ui",
+									"slug": "conversion",
 									"order": 100
 								},
 								{

+ 55 - 55
package.json

@@ -1,6 +1,6 @@
 {
   "name": "ckeditor5",
-  "version": "12.4.0",
+  "version": "15.0.0",
   "description": "The development environment of CKEditor 5 – the best browser-based rich text editor.",
   "private": true,
   "keywords": [
@@ -21,68 +21,68 @@
     "framework"
   ],
   "dependencies": {
-    "@ckeditor/ckeditor-cloud-services-core": "^5.0.0",
-    "@ckeditor/ckeditor5-adapter-ckfinder": "^11.0.5",
-    "@ckeditor/ckeditor5-alignment": "^11.2.0",
-    "@ckeditor/ckeditor5-autoformat": "^11.0.5",
-    "@ckeditor/ckeditor5-autosave": "^11.0.5",
-    "@ckeditor/ckeditor5-basic-styles": "^11.1.4",
-    "@ckeditor/ckeditor5-block-quote": "^11.1.3",
-    "@ckeditor/ckeditor5-build-balloon": "^12.4.0",
-    "@ckeditor/ckeditor5-build-balloon-block": "^12.4.0",
-    "@ckeditor/ckeditor5-build-classic": "^12.4.0",
-    "@ckeditor/ckeditor5-build-decoupled-document": "^12.4.0",
-    "@ckeditor/ckeditor5-build-inline": "^12.4.0",
-    "@ckeditor/ckeditor5-ckfinder": "^11.0.5",
-    "@ckeditor/ckeditor5-clipboard": "^12.0.2",
-    "@ckeditor/ckeditor5-cloud-services": "^11.0.5",
-    "@ckeditor/ckeditor5-core": "^12.3.0",
-    "@ckeditor/ckeditor5-easy-image": "^11.0.5",
-    "@ckeditor/ckeditor5-editor-balloon": "^12.2.2",
-    "@ckeditor/ckeditor5-editor-classic": "^12.1.4",
-    "@ckeditor/ckeditor5-editor-decoupled": "^12.2.2",
-    "@ckeditor/ckeditor5-editor-inline": "^12.3.0",
-    "@ckeditor/ckeditor5-engine": "^14.0.0",
-    "@ckeditor/ckeditor5-enter": "^11.1.0",
-    "@ckeditor/ckeditor5-essentials": "^11.0.5",
-    "@ckeditor/ckeditor5-font": "^11.2.2",
-    "@ckeditor/ckeditor5-heading": "^11.0.5",
-    "@ckeditor/ckeditor5-highlight": "^11.0.5",
-    "@ckeditor/ckeditor5-horizontal-line": "^0.0.1",
-    "@ckeditor/ckeditor5-image": "^14.0.0",
-    "@ckeditor/ckeditor5-indent": "^10.1.0",
-    "@ckeditor/ckeditor5-link": "^11.1.2",
-    "@ckeditor/ckeditor5-list": "^12.1.0",
-    "@ckeditor/ckeditor5-markdown-gfm": "^11.0.5",
-    "@ckeditor/ckeditor5-media-embed": "^11.1.4",
-    "@ckeditor/ckeditor5-mention": "^13.0.0",
-    "@ckeditor/ckeditor5-page-break": "^0.0.1",
-    "@ckeditor/ckeditor5-paragraph": "^11.0.5",
-    "@ckeditor/ckeditor5-paste-from-office": "^11.1.0",
-    "@ckeditor/ckeditor5-remove-format": "^10.0.4",
-    "@ckeditor/ckeditor5-table": "^14.0.0",
-    "@ckeditor/ckeditor5-theme-lark": "^14.2.0",
-    "@ckeditor/ckeditor5-typing": "^12.2.0",
-    "@ckeditor/ckeditor5-ui": "^14.0.0",
-    "@ckeditor/ckeditor5-undo": "^11.0.5",
-    "@ckeditor/ckeditor5-upload": "^12.0.0",
-    "@ckeditor/ckeditor5-utils": "^14.0.0",
-    "@ckeditor/ckeditor5-watchdog": "^11.0.0",
-    "@ckeditor/ckeditor5-widget": "^11.1.0",
-    "@ckeditor/ckeditor5-word-count": "^10.0.2"
+    "@ckeditor/ckeditor-cloud-services-core": "^15.0.0",
+    "@ckeditor/ckeditor5-adapter-ckfinder": "^15.0.0",
+    "@ckeditor/ckeditor5-alignment": "^15.0.0",
+    "@ckeditor/ckeditor5-autoformat": "^15.0.0",
+    "@ckeditor/ckeditor5-autosave": "^15.0.0",
+    "@ckeditor/ckeditor5-basic-styles": "^15.0.0",
+    "@ckeditor/ckeditor5-block-quote": "^15.0.0",
+    "@ckeditor/ckeditor5-build-balloon": "^15.0.0",
+    "@ckeditor/ckeditor5-build-balloon-block": "^15.0.0",
+    "@ckeditor/ckeditor5-build-classic": "^15.0.0",
+    "@ckeditor/ckeditor5-build-decoupled-document": "^15.0.0",
+    "@ckeditor/ckeditor5-build-inline": "^15.0.0",
+    "@ckeditor/ckeditor5-ckfinder": "^15.0.0",
+    "@ckeditor/ckeditor5-clipboard": "^15.0.0",
+    "@ckeditor/ckeditor5-cloud-services": "^15.0.0",
+    "@ckeditor/ckeditor5-core": "^15.0.0",
+    "@ckeditor/ckeditor5-easy-image": "^15.0.0",
+    "@ckeditor/ckeditor5-editor-balloon": "^15.0.0",
+    "@ckeditor/ckeditor5-editor-classic": "^15.0.0",
+    "@ckeditor/ckeditor5-editor-decoupled": "^15.0.0",
+    "@ckeditor/ckeditor5-editor-inline": "^15.0.0",
+    "@ckeditor/ckeditor5-engine": "^15.0.0",
+    "@ckeditor/ckeditor5-enter": "^15.0.0",
+    "@ckeditor/ckeditor5-essentials": "^15.0.0",
+    "@ckeditor/ckeditor5-font": "^15.0.0",
+    "@ckeditor/ckeditor5-heading": "^15.0.0",
+    "@ckeditor/ckeditor5-highlight": "^15.0.0",
+    "@ckeditor/ckeditor5-horizontal-line": "^15.0.0",
+    "@ckeditor/ckeditor5-image": "^15.0.0",
+    "@ckeditor/ckeditor5-indent": "^15.0.0",
+    "@ckeditor/ckeditor5-link": "^15.0.0",
+    "@ckeditor/ckeditor5-list": "^15.0.0",
+    "@ckeditor/ckeditor5-markdown-gfm": "^15.0.0",
+    "@ckeditor/ckeditor5-media-embed": "^15.0.0",
+    "@ckeditor/ckeditor5-mention": "^15.0.0",
+    "@ckeditor/ckeditor5-page-break": "^15.0.0",
+    "@ckeditor/ckeditor5-paragraph": "^15.0.0",
+    "@ckeditor/ckeditor5-paste-from-office": "^15.0.0",
+    "@ckeditor/ckeditor5-remove-format": "^15.0.0",
+    "@ckeditor/ckeditor5-table": "^15.0.0",
+    "@ckeditor/ckeditor5-theme-lark": "^15.0.0",
+    "@ckeditor/ckeditor5-typing": "^15.0.0",
+    "@ckeditor/ckeditor5-ui": "^15.0.0",
+    "@ckeditor/ckeditor5-undo": "^15.0.0",
+    "@ckeditor/ckeditor5-upload": "^15.0.0",
+    "@ckeditor/ckeditor5-utils": "^15.0.0",
+    "@ckeditor/ckeditor5-watchdog": "^15.0.0",
+    "@ckeditor/ckeditor5-widget": "^15.0.0",
+    "@ckeditor/ckeditor5-word-count": "^15.0.0"
   },
   "devDependencies": {
-    "@ckeditor/ckeditor5-comments": "^4.0.0",
+    "@ckeditor/ckeditor5-comments": "^15.0.1",
     "@ckeditor/ckeditor5-dev-docs": "^11.0.9",
-    "@ckeditor/ckeditor5-dev-env": "^16.0.0",
+    "@ckeditor/ckeditor5-dev-env": "^17.0.0",
     "@ckeditor/ckeditor5-dev-tests": "^16.9.0",
     "@ckeditor/ckeditor5-dev-utils": "^12.0.3",
     "@ckeditor/ckeditor5-dev-webpack-plugin": "^8.0.3",
     "@ckeditor/ckeditor5-inspector": "^1.3.0",
     "@ckeditor/ckeditor5-react": "^1.1.3",
-    "@ckeditor/ckeditor5-real-time-collaboration": "^12.4.0",
-    "@ckeditor/ckeditor5-track-changes": "^1.1.0",
-    "@wiris/mathtype-ckeditor5": "^7.16.1",
+    "@ckeditor/ckeditor5-real-time-collaboration": "^15.0.0",
+    "@ckeditor/ckeditor5-track-changes": "^15.0.0",
+    "@wiris/mathtype-ckeditor5": "^7.17.1",
     "babel-standalone": "^6.26.0",
     "css-loader": "^1.0.0",
     "eslint": "^5.5.0",

+ 66 - 30
scripts/docs/build-content-styles.js

@@ -18,7 +18,8 @@ const VARIABLE_USAGE_REGEXP = /var\((--[\w-]+)\)/g;
 
 const contentRules = {
 	selector: [],
-	variables: []
+	variables: [],
+	atRules: {}
 };
 
 const webpackConfig = getWebpackConfig();
@@ -49,35 +50,8 @@ runWebpack( webpackConfig )
 		// CSS variables that are used by the `.ck-content` selector.
 		const usedVariables = new Set();
 
-		const selectorCss = contentRules.selector
-			.map( rule => {
-				// Removes all comments from the rule definition.
-				const cssAsArray = rule.css.replace( /\/\*[^*]+\*\//g, '' ).split( '\n' );
-
-				// We want to fix invalid indentations. We need to find a number of how many indentations we want to remove.
-				// Because the last line ends the block, we can use this value.
-				const lastLineIndent = cssAsArray[ cssAsArray.length - 1 ].length - 1;
-
-				const css = cssAsArray
-					.filter( line => line.trim().length > 0 )
-					.map( ( line, index ) => {
-						// Do not touch the first line. It is always correct.
-						if ( index === 0 ) {
-							return line;
-						}
-
-						return line.slice( lastLineIndent );
-					} )
-					.join( '\n' );
-
-				return `/* ${ rule.file.replace( packagesPath + path.sep, '' ) } */\n${ css }`;
-			} )
-			.filter( rule => {
-				// 1st: path to the CSS file, 2nd: selector definition - start block, 3rd: end block
-				// If the rule contains only 3 lines, it means that it does not define any rules.
-				return rule.split( '\n' ).length > 3;
-			} )
-			.join( '\n' );
+		// `.ck-content` selectors.
+		const selectorCss = transformCssRules( contentRules.selector );
 
 		// Find all CSS variables inside the `.ck-content` selector.
 		let match;
@@ -111,6 +85,18 @@ runWebpack( webpackConfig )
 			}
 		}
 
+		const atRulesDefinitions = [];
+
+		// Additional at-rules.
+		for ( const atRuleName of Object.keys( contentRules.atRules ) ) {
+			const rules = transformCssRules( contentRules.atRules[ atRuleName ] )
+				.split( '\n' )
+				.map( line => `\t${ line }` )
+				.join( '\n' );
+
+			atRulesDefinitions.push( `@${ atRuleName } {\n${ rules }\n}` );
+		}
+
 		// Build the final content of the CSS file.
 		let data = [
 			'/*',
@@ -128,6 +114,8 @@ runWebpack( webpackConfig )
 
 		data += '}\n\n';
 		data += selectorCss;
+		data += '\n';
+		data += atRulesDefinitions.join( '\n' );
 
 		return writeFile( path.join( DESTINATION_DIRECTORY, 'content-styles.css' ), data );
 	} )
@@ -239,3 +227,51 @@ function writeFile( file, data ) {
 		} );
 	} );
 }
+
+/**
+ * @param {Array} rules
+ * @returns {String}
+ */
+function transformCssRules( rules ) {
+	return rules
+		.map( rule => {
+			// Removes all comments from the rule definition.
+			const cssAsArray = rule.css.replace( /\/\*[^*]+\*\//g, '' ).split( '\n' );
+
+			// We want to fix invalid indentations. We need to find a number of how many indentations we want to remove.
+			// Because the last line ends the block, we can use this value.
+			const lastLineIndent = cssAsArray[ cssAsArray.length - 1 ].length - 1;
+
+			const css = cssAsArray
+				.filter( line => line.trim().length > 0 )
+				.map( ( line, index ) => {
+					// Do not touch the first line. It is always correct.
+					if ( index === 0 ) {
+						return line;
+					}
+
+					const newLine = line.slice( lastLineIndent );
+
+					// If a line is not a CSS definition, do not touch it.
+					if ( !newLine.match( /[A-Z-_0-9]+:/i ) ) {
+						return newLine;
+					}
+
+					// The line is a CSS definition – let's check whether it ends with a semicolon.
+					if ( newLine.endsWith( ';' ) ) {
+						return newLine;
+					}
+
+					return newLine + ';';
+				} )
+				.join( '\n' );
+
+			return `/* ${ rule.file.replace( packagesPath + path.sep, '' ) } */\n${ css }`;
+		} )
+		.filter( rule => {
+			// 1st: path to the CSS file, 2nd: selector definition - start block, 3rd: end block
+			// If the rule contains only 3 lines, it means that it does not define any rules.
+			return rule.split( '\n' ).length > 3;
+		} )
+		.join( '\n' );
+}

+ 66 - 10
scripts/docs/content-styles/list-content-styles.js

@@ -15,21 +15,77 @@ module.exports = postcss.plugin( 'list-content-styles', function( options ) {
 
 	return root => {
 		root.walkRules( rule => {
-			rule.selectors.forEach( selector => {
+			for ( const selector of rule.selectors ) {
+				const data = {
+					file: root.source.input.file,
+					css: rule.toString()
+				};
+
 				if ( selector.match( ':root' ) ) {
-					variables.push( {
-						file: root.source.input.file,
-						css: rule.toString()
-					} );
+					addDefinition( variables, data );
 				}
 
 				if ( selector.match( '.ck-content' ) ) {
-					selectorStyles.push( {
-						file: root.source.input.file,
-						css: rule.toString()
-					} );
+					if ( rule.parent.name && rule.parent.params ) {
+						const atRule = getAtRuleArray( options.contentRules.atRules, rule.parent.name, rule.parent.params );
+
+						addDefinition( atRule, data );
+					} else {
+						addDefinition( selectorStyles, data );
+					}
 				}
-			} );
+			}
 		} );
 	};
 } );
+
+/**
+ * @param {Object} collection
+ * @param {String} name Name of an `at-rule`.
+ * @param {String} params Parameters that describes the `at-rule`.
+ * @returns {Array}
+ */
+function getAtRuleArray( collection, name, params ) {
+	const definition = `${ name } ${ params }`;
+
+	if ( !collection[ definition ] ) {
+		collection[ definition ] = [];
+	}
+
+	return collection[ definition ];
+}
+
+/**
+ * Checks whether specified definition is duplicated in the colletion.
+ *
+ * @param {Array.<StyleStructure>} collection
+ * @param {StyleStructure} def
+ * @returns {Boolean}
+ */
+function isDuplicatedDefinition( collection, def ) {
+	for ( const item of collection ) {
+		if ( item.file === def.file && item.css === def.css ) {
+			return true;
+		}
+	}
+
+	return false;
+}
+
+/**
+ * Adds definition to the collection if it does not exist in the collection.
+ *
+ * @param {Array.<StyleStructure>} collection
+ * @param {StyleStructure} def
+ */
+function addDefinition( collection, def ) {
+	if ( !isDuplicatedDefinition( collection, def ) ) {
+		collection.push( def );
+	}
+}
+
+/**
+ * @typedef {Object} StyleStructure
+ * @property {String} file An absolute path to the file where a definition is defined.
+ * @property {String} css Definition.
+ */

Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 288 - 309
yarn.lock


Některé soubory nejsou zobrazeny, neboť je v těchto rozdílových datech změněno mnoho souborů