Merge remote-tracking branch 'origin/support/3.2' into develop

This commit is contained in:
Molkobain
2024-07-24 10:58:05 +02:00
368 changed files with 2676 additions and 12099 deletions

View File

@@ -1,30 +0,0 @@
/**
* @license Copyright (c) 2014-2024, CKSource Holding sp. z o.o. All rights reserved.
* For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
*/
import { ClassicEditor } from '@ckeditor/ckeditor5-editor-classic';
import { Alignment } from '@ckeditor/ckeditor5-alignment';
import { Bold, Italic, Strikethrough, Subscript, Superscript, Underline } from '@ckeditor/ckeditor5-basic-styles';
import { BlockQuote } from '@ckeditor/ckeditor5-block-quote';
import { CodeBlock } from '@ckeditor/ckeditor5-code-block';
import type { EditorConfig } from '@ckeditor/ckeditor5-core';
import { Essentials } from '@ckeditor/ckeditor5-essentials';
import { FontBackgroundColor, FontColor, FontFamily, FontSize } from '@ckeditor/ckeditor5-font';
import { Heading } from '@ckeditor/ckeditor5-heading';
import { Highlight } from '@ckeditor/ckeditor5-highlight';
import { HorizontalLine } from '@ckeditor/ckeditor5-horizontal-line';
import { Image, ImageCaption, ImageResize, ImageStyle, ImageToolbar, ImageUpload, PictureEditing } from '@ckeditor/ckeditor5-image';
import { Indent } from '@ckeditor/ckeditor5-indent';
import { Link, LinkImage } from '@ckeditor/ckeditor5-link';
import { List, ListProperties } from '@ckeditor/ckeditor5-list';
import { Mention } from '@ckeditor/ckeditor5-mention';
import { Table, TableCaption, TableCellProperties, TableColumnResize, TableProperties, TableToolbar } from '@ckeditor/ckeditor5-table';
import { Undo } from '@ckeditor/ckeditor5-undo';
import { RemoveFormat } from '@ckeditor/ckeditor5-remove-format';
import InsertCarriageReturnAfterBlock from "./plugins/insert-carriage-return-after-block/insert-carriage-return-after-block.plugin";
import './resources/styles/default-theme.css';
declare class Editor extends ClassicEditor {
static builtinPlugins: (typeof Alignment | typeof Superscript | typeof Subscript | typeof Bold | typeof Italic | typeof Strikethrough | typeof Underline | typeof BlockQuote | typeof CodeBlock | typeof Undo | typeof Essentials | typeof FontBackgroundColor | typeof FontColor | typeof FontFamily | typeof FontSize | typeof Heading | typeof Highlight | typeof HorizontalLine | typeof Image | typeof ImageCaption | typeof ImageResize | typeof ImageStyle | typeof ImageToolbar | typeof ImageUpload | typeof Indent | typeof Link | typeof LinkImage | typeof List | typeof ListProperties | typeof Mention | typeof Table | typeof TableCaption | typeof TableCellProperties | typeof TableColumnResize | typeof TableProperties | typeof TableToolbar | typeof RemoveFormat | typeof InsertCarriageReturnAfterBlock | typeof PictureEditing)[];
static defaultConfig: EditorConfig;
}
export default Editor;

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -1,4 +0,0 @@
import Plugin from '@ckeditor/ckeditor5-core/src/plugin';
export declare class Maximize extends Plugin {
init(): void;
}

View File

@@ -1,10 +0,0 @@
import Plugin from '@ckeditor/ckeditor5-core/src/plugin';
/**
* AppendITopClasses Plugin.
*
* Appends ibo-is-html-content class
*/
export default class AppendITopClasses extends Plugin {
static get pluginName(): string;
init(): void;
}

View File

@@ -1,10 +0,0 @@
import { Plugin, type Editor } from 'ckeditor5/src/core.js';
/**
* DetectChanges Plugin.
*
*/
export default class DetectChanges extends Plugin {
constructor(editor: Editor);
init(): void;
static get pluginName(): string;
}

View File

@@ -1,24 +0,0 @@
import { HtmlDataProcessor, type ViewDocument, type ViewDocumentFragment } from 'ckeditor5/src/engine.js';
export default class iTopDataProcessor extends HtmlDataProcessor {
/**
* HTML data processor used to process HTML if we detect changes
* @private
*/
private _htmlDP;
/**
* Initial value of the editor, we'll return it if we don't detect any changes
* @private
*/
private readonly _initialValue;
/**
* Transformed initial value of the editor, we'll use it to detect changes
* @private
*/
private _transformedInitialValue;
/**
* Creates a new instance of the Markdown data processor class.
*/
constructor(document: ViewDocument, initialValue: string, transformedInitialValue: string);
setTransformedInitialValue(transformedInitialValue: string): void;
toData(viewFragment: ViewDocumentFragment): string;
}

View File

@@ -1,12 +0,0 @@
import Plugin from '@ckeditor/ckeditor5-core/src/plugin';
/**
* EditorFeatures Plugin.
*
* - trigger update event when editor is ready
* - dispatch submit event on the closest editor form when Ctrl+Enter pressed
*
*/
export declare class EditorFeatures extends Plugin {
static get pluginName(): string;
init(): void;
}

View File

@@ -1,13 +0,0 @@
import Plugin from '@ckeditor/ckeditor5-core/src/plugin';
/**
* EditorFeatures Plugin.
*
* - trigger update event when editor is ready
* - dispatch submit event on the closest editor form when Ctrl+Enter pressed
* - converter for mentions
* - appends ibo-is-html-content class
*/
export default class EditorFeatures extends Plugin {
static get pluginName(): string;
init(): void;
}

View File

@@ -1,11 +0,0 @@
import Plugin from '@ckeditor/ckeditor5-core/src/plugin';
/**
* IBOCompatibility Plugin.
*
* - exclude ck-reset_all for mention dropdown
* - appends ibo-is-html-content class
*/
export declare class IBOCompatibility extends Plugin {
static get pluginName(): string;
init(): Promise<unknown> | void | undefined | null;
}

View File

@@ -1,8 +0,0 @@
import { Command } from 'ckeditor5/src/core';
/**
* InsertHtmlCommand Command.
*
*/
export default class InsertHtmlCommand extends Command {
execute(sContent: string): void;
}

View File

@@ -1,9 +0,0 @@
import Plugin from '@ckeditor/ckeditor5-core/src/plugin';
/**
* InsertHtml Plugin.
*
*/
export default class InsertHtml extends Plugin {
static get pluginName(): string;
init(): void;
}

View File

@@ -1,5 +0,0 @@
import Plugin from '@ckeditor/ckeditor5-core/src/plugin';
export declare class ITopMention extends Plugin {
init(): Promise<unknown> | void | undefined | null;
static get pluginName(): string;
}

View File

@@ -1,10 +0,0 @@
import Plugin from '@ckeditor/ckeditor5-core/src/plugin';
/**
* KeyboardShortcut Plugin.
*
* - Dispatch submit event on the closest editor form when Ctrl+Enter pressed
*/
export default class KeyboardShortcut extends Plugin {
static get pluginName(): string;
init(): void;
}

View File

@@ -1,5 +0,0 @@
import Plugin from '@ckeditor/ckeditor5-core/src/plugin';
export declare class Maximize extends Plugin {
static get pluginName(): string;
init(): void;
}

View File

@@ -1,5 +0,0 @@
import Plugin from '@ckeditor/ckeditor5-core/src/plugin';
export default class Maximize extends Plugin {
static get pluginName(): string;
init(): void;
}

View File

@@ -1,5 +0,0 @@
import Plugin from '@ckeditor/ckeditor5-core/src/plugin';
export declare class MentionConverter extends Plugin {
static get pluginName(): string;
init(): Promise<unknown> | void | undefined | null;
}

View File

@@ -1,10 +0,0 @@
import Plugin from '@ckeditor/ckeditor5-core/src/plugin';
/**
* MentionsMarkup Plugin.
*
* - Converter for mentions
*/
export default class MentionsMarkup extends Plugin {
static get pluginName(): string;
init(): void;
}

View File

@@ -1,18 +0,0 @@
/**
* @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
* For licensing, see LICENSE.md.
*/
import { View, LabeledFieldView, ButtonView } from '@ckeditor/ckeditor5-ui';
import { Locale } from '@ckeditor/ckeditor5-utils';
export default class FormView extends View {
abbrInputView: LabeledFieldView;
titleInputView: LabeledFieldView;
saveButtonView: ButtonView;
cancelButtonView: ButtonView;
childViews: any;
constructor(locale: Locale);
render(): void;
focus(): void;
_createInput(label: string): LabeledFieldView<import("@ckeditor/ckeditor5-ui").InputTextView>;
_createButton(label: string, icon: string, className: string): ButtonView;
}

View File

@@ -1,12 +0,0 @@
import Plugin from '@ckeditor/ckeditor5-core/src/plugin';
import { Dialog } from '@ckeditor/ckeditor5-ui';
/**
* ObjectShortcut Plugin.
*
*
*/
export declare class ObjectShortcut extends Plugin {
static get pluginName(): string;
get requires(): (typeof Dialog)[];
init(): void;
}

View File

@@ -1,6 +0,0 @@
import { Plugin } from '@ckeditor/ckeditor5-core';
export default class ObjectShortcutEditing extends Plugin {
init(): void;
_defineSchema(): void;
_defineConverters(): void;
}

View File

@@ -1,19 +0,0 @@
/**
* @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
* For licensing, see LICENSE.md.
*/
import { View, LabeledFieldView, ButtonView } from '@ckeditor/ckeditor5-ui';
import { Locale } from '@ckeditor/ckeditor5-utils';
export default class FormView extends View {
oLabelInputView: LabeledFieldView;
oClassInputView: LabeledFieldView;
oReferenceInputView: LabeledFieldView;
oSaveButtonView: ButtonView;
oCancelButtonView: ButtonView;
oChildViews: any;
constructor(oLocale: Locale);
render(): void;
focus(): void;
_createInput(sLabel: string): LabeledFieldView<import("@ckeditor/ckeditor5-ui").InputTextView>;
_createButton(sLabel: string, sIcon: string, sClassName: string): ButtonView;
}

View File

@@ -1,5 +0,0 @@
import { Plugin } from '@ckeditor/ckeditor5-core';
import ObjectShortcutUI from './object-shortcut.ui';
export default class ObjectShortcut extends Plugin {
static get requires(): (typeof ObjectShortcutUI)[];
}

View File

@@ -1,16 +0,0 @@
import { Plugin } from '@ckeditor/ckeditor5-core';
import { ContextualBalloon } from '@ckeditor/ckeditor5-ui';
import FormView from './object-shortcut.form-view';
import './styles.css';
export default class ObjectShortcutUI extends Plugin {
static get requires(): (typeof ContextualBalloon)[];
oBalloon: ContextualBalloon | undefined;
oFormView: FormView | undefined;
init(): void;
_createFormView(): FormView;
_showUI(): void;
_hideUI(): void;
_getBalloonPositionData(): {
oTarget: (() => Range) | null;
};
}

View File

@@ -1,10 +0,0 @@
import Plugin from '@ckeditor/ckeditor5-core/src/plugin';
/**
* TriggerUpdateOnReady Plugin.
*
* - Trigger update event when editor is ready
*/
export default class TriggerUpdateOnReady extends Plugin {
static get pluginName(): string;
init(): void;
}

View File

@@ -1,51 +0,0 @@
/* mention list ui customization */
:root {
--ck-color-list-button-on-background: #EFF0EF;
--ck-color-list-button-on-background-focus: #EFF0EF;
--ck-color-list-button-hover-background: #EFF0EF;
--ck-color-list-button-on-text: black;
--ck-z-default: 9999;
/* Custom variables overloaded by backoffice or portals */
--ck-text-tiny-font-size: 0.7rem;
--ck-text-small-font-size: 0.85rem;
--ck-text-big-font-size: 1.4rem;
--ck-text-huge-font-size: 1.8rem;
}
/** text size classes */
.text-tiny {
font-size: var(--ck-text-tiny-font-size);
}
.text-small {
font-size: var(--ck-text-small-font-size);
}
.text-big {
font-size: var(--ck-text-big-font-size);
}
.text-huge {
font-size: var(--ck-text-huge-font-size);
}
/** marker classes */
.marker-yellow {
background-color: var(--ck-highlight-marker-yellow);
}
.marker-green {
background-color: var(--ck-highlight-marker-green);
}
.marker-pink {
background-color: var(--ck-highlight-marker-pink);
}
.marker-blue {
background-color: var(--ck-highlight-marker-blue);
}

File diff suppressed because one or more lines are too long

View File

@@ -42,6 +42,7 @@
"@ckeditor/ckeditor5-dev-utils": "~32.1",
"@ckeditor/ckeditor5-theme-lark": "~41.4",
"css-loader": "~5.2",
"mini-css-extract-plugin": "^2.9.0",
"postcss": "~8.4",
"postcss-loader": "~4.3",
"raw-loader": "~4.0",
@@ -1547,6 +1548,45 @@
"url": "https://github.com/sponsors/epoberezkin"
}
},
"node_modules/ajv-formats": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz",
"integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==",
"dev": true,
"dependencies": {
"ajv": "^8.0.0"
},
"peerDependencies": {
"ajv": "^8.0.0"
},
"peerDependenciesMeta": {
"ajv": {
"optional": true
}
}
},
"node_modules/ajv-formats/node_modules/ajv": {
"version": "8.17.1",
"resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz",
"integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==",
"dev": true,
"dependencies": {
"fast-deep-equal": "^3.1.3",
"fast-uri": "^3.0.1",
"json-schema-traverse": "^1.0.0",
"require-from-string": "^2.0.2"
},
"funding": {
"type": "github",
"url": "https://github.com/sponsors/epoberezkin"
}
},
"node_modules/ajv-formats/node_modules/json-schema-traverse": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
"integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
"dev": true
},
"node_modules/ajv-keywords": {
"version": "3.5.2",
"resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz",
@@ -2570,6 +2610,12 @@
"integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
"dev": true
},
"node_modules/fast-uri": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.1.tgz",
"integrity": "sha512-MWipKbbYiYI0UC7cl8m/i/IWTqfC8YXsqjzybjddLsFjStroQzsHXkc73JutMvBiXmOvapk+axIl79ig5t55Bw==",
"dev": true
},
"node_modules/fastest-levenshtein": {
"version": "1.0.16",
"resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz",
@@ -3382,6 +3428,79 @@
"node": ">=6"
}
},
"node_modules/mini-css-extract-plugin": {
"version": "2.9.0",
"resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.9.0.tgz",
"integrity": "sha512-Zs1YsZVfemekSZG+44vBsYTLQORkPMwnlv+aehcxK/NLKC+EGhDB39/YePYYqx/sTk6NnYpuqikhSn7+JIevTA==",
"dev": true,
"dependencies": {
"schema-utils": "^4.0.0",
"tapable": "^2.2.1"
},
"engines": {
"node": ">= 12.13.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/webpack"
},
"peerDependencies": {
"webpack": "^5.0.0"
}
},
"node_modules/mini-css-extract-plugin/node_modules/ajv": {
"version": "8.17.1",
"resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz",
"integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==",
"dev": true,
"dependencies": {
"fast-deep-equal": "^3.1.3",
"fast-uri": "^3.0.1",
"json-schema-traverse": "^1.0.0",
"require-from-string": "^2.0.2"
},
"funding": {
"type": "github",
"url": "https://github.com/sponsors/epoberezkin"
}
},
"node_modules/mini-css-extract-plugin/node_modules/ajv-keywords": {
"version": "5.1.0",
"resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz",
"integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==",
"dev": true,
"dependencies": {
"fast-deep-equal": "^3.1.3"
},
"peerDependencies": {
"ajv": "^8.8.2"
}
},
"node_modules/mini-css-extract-plugin/node_modules/json-schema-traverse": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
"integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
"dev": true
},
"node_modules/mini-css-extract-plugin/node_modules/schema-utils": {
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz",
"integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==",
"dev": true,
"dependencies": {
"@types/json-schema": "^7.0.9",
"ajv": "^8.9.0",
"ajv-formats": "^2.1.1",
"ajv-keywords": "^5.1.0"
},
"engines": {
"node": ">= 12.13.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/webpack"
}
},
"node_modules/minimatch": {
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
@@ -4477,6 +4596,15 @@
"node": ">= 0.10"
}
},
"node_modules/require-from-string": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz",
"integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==",
"dev": true,
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/requires-port": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz",

View File

@@ -41,6 +41,7 @@
"@ckeditor/ckeditor5-dev-utils": "~32.1",
"@ckeditor/ckeditor5-theme-lark": "~41.4",
"css-loader": "~5.2",
"mini-css-extract-plugin": "^2.9.0",
"postcss": "~8.4",
"postcss-loader": "~4.3",
"raw-loader": "~4.0",

View File

@@ -74,6 +74,70 @@ const transformationsConfig = {
remove: [ 'ellipsis' ]
}
// Colors to be used in the different palettes (font color, table cell background color, table cell border color, ...)
const colorsPalette = [
{
color: '#000000',
label: 'Black'
},
{
color: '#4D4D4D',
label: 'Dim grey'
},
{
color: '#999999',
label: 'Grey'
},
{
color: '#E6E6E6',
label: 'Light grey'
},
{
color: '#FFFFFF',
label: 'White'
},
{
color: '#E64D4D',
label: 'Red'
},
{
color: '#E6994D',
label: 'Orange'
},
{
color: '#E6E64D',
label: 'Yellow'
},
{
color: '#99E64D',
label: 'Light green'
},
{
color: '#4DE64D',
label: 'Green'
},
{
color: '#4DE699',
label: 'Aquamarine'
},
{
color: '#4DE6E6',
label: 'Turquoise'
},
{
color: '#4D99E6',
label: 'Light blue'
},
{
color: '#4D4DE6',
label: 'Blue'
},
{
color: '#994DE6',
label: 'Purple'
},
];
class Editor extends ClassicEditor {
public static override builtinPlugins = [
Alignment,
@@ -100,16 +164,11 @@ class Editor extends ClassicEditor {
IndentBlock,
Italic,
Link,
LinkImage,
List,
ListProperties,
Mention,
Paragraph,
PasteFromOffice,
PictureEditing,
Strikethrough,
Subscript,
Superscript,
Table,
TableCaption,
TableCellProperties,
@@ -176,6 +235,10 @@ class Editor extends ClassicEditor {
shouldNotGroupWhenFull: true
},
language: 'en',
fontColor: {
// Colors are redefined to be in HEX instead of RGB in order to be supported by mail clients
colors: colorsPalette,
},
image: {
toolbar: [
'resizeImage:25',
@@ -212,7 +275,11 @@ class Editor extends ClassicEditor {
'tableProperties',
'|',
'toggleTableCaption'
]
],
tableCellProperties: {
borderColors: colorsPalette,
backgroundColors: colorsPalette,
},
},
htmlSupport: {
allow: [
@@ -229,10 +296,10 @@ class Editor extends ClassicEditor {
},
highlight: {
options: [
{ model: 'yellowMarker', class: 'marker-yellow', title: 'Yellow Marker', color: 'var(--ck-highlight-marker-yellow)', type: 'marker' },
{ model: 'greenMarker', class: 'marker-green', title: 'Green marker', color: 'var(--ck-highlight-marker-green)', type: 'marker' },
{ model: 'pinkMarker', class: 'marker-pink', title: 'Pink marker', color: 'var(--ck-highlight-marker-pink)', type: 'marker' },
{ model: 'blueMarker', class: 'marker-blue', title: 'Blue marker', color: 'var(--ck-highlight-marker-blue)', type: 'marker' },
{ model: 'yellowMarker', class: 'marker-yellow', title: 'Yellow marker', color: '#FDFD77', type: 'marker' },
{ model: 'greenMarker', class: 'marker-green', title: 'Green marker', color: '#62f962', type: 'marker' },
{ model: 'pinkMarker', class: 'marker-pink', title: 'Pink marker', color: '#FC7899', type: 'marker' },
{ model: 'blueMarker', class: 'marker-blue', title: 'Blue marker', color: '#72CCFD', type: 'marker' },
]
},
codeBlock: {

View File

@@ -3,7 +3,7 @@ import Plugin from '@ckeditor/ckeditor5-core/src/plugin';
/**
* AppendITopClasses Plugin.
*
* Appends ibo-is-html-content class
* Appends ibo-is-html-content (backoffice) & ipb-is-html-content (portal) classes
*/
export default class AppendITopClasses extends Plugin {
@@ -16,11 +16,17 @@ export default class AppendITopClasses extends Plugin {
// retrieve editor instance
const oEditor = this.editor;
// appends ibo-is-html-content class
// appends ibo-is-html-content (backoffice) & ipb-is-html-content (portal) classes
oEditor.editing.view.change( oWriter => {
const oRootElement = oEditor.editing.view.document.getRoot();
if(oRootElement !== null){
oWriter.addClass( 'ibo-is-html-content', oRootElement);
// Add the proper class depending on the GUI we are in
const sGUIType = document.body.getAttribute('data-gui-type');
if (sGUIType === 'backoffice') {
oWriter.addClass( 'ibo-is-html-content', oRootElement);
} else if (sGUIType === 'portal') {
oWriter.addClass('ipb-is-html-content', oRootElement);
}
}
});
}

View File

@@ -1,12 +1,14 @@
import { Plugin, type Editor } from 'ckeditor5/src/core.js';
import iTopDataProcessor from "./itop-data-processor";
import InsertCarriageReturnAfterBlock from "../insert-carriage-return-after-block/insert-carriage-return-after-block.plugin";
/**
* DetectChanges Plugin.
*
*/
export default class DetectChanges extends Plugin {
private readonly _processor: iTopDataProcessor | undefined;
constructor( editor: Editor ) {
super( editor );
const sInitialValue:string = editor.config.get('detectChanges.initialValue') as string;
@@ -17,15 +19,23 @@ export default class DetectChanges extends Plugin {
// Initialize our own data processor
const oProcessor = new iTopDataProcessor( editor.data.viewDocument, sInitialValue, editor.getData() ) as iTopDataProcessor;
editor.data.processor = oProcessor;
// Listen for the dataReady event only once
editor.model.document.once('change:data', () => {
oProcessor.setTransformedInitialValue( editor.getData());
});
this._processor = oProcessor;
}
init() {
const editor = this.editor;// Listen for the dataReady event only once
editor.model.document.once('change:data', () => {
if(this._processor ) {
this._processor.setTransformedInitialValue(editor.getData());
}
});
}
static get pluginName() {
return 'DetectChanges';
}
// Needed as InsertCarriageReturnAfterBlock will possibly change data on initialization if there's a block in the content, so we need to make sure it's loaded first
static get requires() {
return [ InsertCarriageReturnAfterBlock ];
}
}

View File

@@ -1,12 +1,6 @@
import { Plugin } from '@ckeditor/ckeditor5-core';
import {ClassicEditor} from "@ckeditor/ckeditor5-editor-classic";
interface BlockFieldInterface{
(element:HTMLElement, isBlocked: boolean):any;
}
declare var BlockFieldElement: BlockFieldInterface;
export default class Disabler extends Plugin {
static get pluginName() {
@@ -42,7 +36,11 @@ export default class Disabler extends Plugin {
// @ts-ignore
const oElement = $(oEditor.ui.element);
if(typeof oElement.block === 'function') {
BlockFieldElement(oElement, oInputElement.disabled);
if (oInputElement.disabled) {
oElement.block({message: '', blockMsgClass: '', enableValidation : true, baseZ: 9999, overlayCSS: { backgroundColor: '#ccd6e066'}});
} else {
oElement.unblock();
}
}
// handle ckeditor read only mode

View File

@@ -32,56 +32,56 @@ export default class Maximize extends Plugin {
if (oEditor.ui.element !== null) {
if (oButton.isOn) {
// remove classes
document.documentElement.classList.remove('html_editor_full_screen')
document.body.classList.remove('body_editor_full_screen')
document.documentElement.classList.remove('ck-maximize_html_editor')
document.body.classList.remove('ck-maximize_body_editor')
let oParentElement: HTMLElement = oEditor.ui.element;
while (oParentElement.parentElement !== null) {
oParentElement = oParentElement.parentElement;
oParentElement.classList.remove('parent_editor_screen');
oParentElement.classList.remove('ck-maximize_parent_editor');
}
oEditor.ui.element.classList.remove('editor_full_screen');
oEditor.ui.element.children[2].classList.remove('editor__main_full_screen');
oEditor.ui.element.classList.remove('ck-maximize_editor');
oEditor.ui.element.children[2].classList.remove('ck-maximize_editor_main');
oButton.icon = sMaximizeIconSVG;
} else {
// add classes to make editor full screen
document.documentElement.classList.add('html_editor_full_screen')
document.body.classList.add('body_editor_full_screen')
document.documentElement.classList.add('ck-maximize_html_editor')
document.body.classList.add('ck-maximize_body_editor')
let oParentElement: HTMLElement = oEditor.ui.element;
while (oParentElement.parentElement !== null) {
oParentElement = oParentElement.parentElement;
oParentElement.classList.add('parent_editor_screen');
oParentElement.classList.add('ck-maximize_parent_editor');
}
oEditor.ui.element.classList.add('editor_full_screen');
oEditor.ui.element.children[2].classList.add('editor__main_full_screen');
oEditor.ui.element.classList.add('ck-maximize_editor');
oEditor.ui.element.children[2].classList.add('ck-maximize_editor_main');
let oStyle = document.createElement('style');
// CSS rules definitions for each classes
oStyle.innerHTML = `
.editor__main_full_screen > * {
.ck-maximize_editor_main > * {
height: 100% !important;
width: 100% !important;
}
.editor__main_full_screen {
.ck-maximize_editor_main {
flex-grow: 1;
display: flex;
flex-direction: column;
}
.parent_editor_screen {
.ck-maximize_parent_editor {
position: fixed !important;
overflow: visible !important;
z-index: 1050 !important;
margin: 0 !important;
}
.body_editor_full_screen {
.ck-maximize_body_editor {
width: 0 !important;
height: 0 !important;
overflow: hidden !important;
}
.html_editor_full_screen {
.ck-maximize_html_editor {
position: fixed !important;
width: 0 !important;
height: 0 !important;
}
.editor_full_screen {
.ck-maximize_editor {
position: fixed !important;
top: 0 !important;
left: 0 !important;

View File

@@ -46,34 +46,17 @@
font-size: var(--ck-text-huge-font-size);
}
/* Marker classes */
.marker-yellow {
background-color: var(--ck-highlight-marker-yellow);
}
.marker-green {
background-color: var(--ck-highlight-marker-green);
}
.marker-pink {
background-color: var(--ck-highlight-marker-pink);
}
.marker-blue {
background-color: var(--ck-highlight-marker-blue);
}
/* Editor base style */
/* - Fix editor base z-index to avoid its children (images, drop down buttons, ...) passing on top of other elements */
.ck-editor {
z-index: 0;
}
/* Figures / images */
/* - Avoid text being typed next to the image, only below */
.ck-content .image img {
min-width: inherit;
min-width: inherit; /* Avoid text being typed next to the image, only below */
margin-left: 0; /* Avoid image to be centered */
margin-right: 0; /* Avoid image to be centered */
}
.ck-content .image-style-align-left,
.ck-content .image-style-align-right {
@@ -87,4 +70,41 @@
.ck-content .image-style-align-right {
text-align: right;
margin-left: 0;
}
/* - Avoid figures to be centered */
.ck-content figure {
margin-left: 0;
margin-right: 0;
}
/* - Avoid tables in figure being align centered */
.ck-content figure table {
text-align: initial;
}
/* Tables */
/* - Avoid tables to be centered */
.ck-content .table {
margin-left: 0;
margin-right: 0;
}
/* - Force header background to an HEX color so it works with emails */
.ck-content .table table th {
background-color: #F4F4F4;
}
/* Marker classes */
.ck-content .marker-yellow {
background-color: #FDFD77;
}
.ck-content .marker-green {
background-color: #62F962;
}
.ck-content .marker-pink {
background-color: #FC7899;
}
.ck-content .marker-blue {
background-color: #72CCFD;
}

View File

@@ -12,6 +12,7 @@ const webpack = require( 'webpack' );
const { bundler, styles } = require( '@ckeditor/ckeditor5-dev-utils' );
const { CKEditorTranslationsPlugin } = require( '@ckeditor/ckeditor5-dev-translations' );
const TerserWebpackPlugin = require( 'terser-webpack-plugin' );
const MiniCssExtractPlugin = require("mini-css-extract-plugin");
module.exports = {
devtool: 'source-map',
@@ -51,6 +52,10 @@ module.exports = {
language: 'en',
additionalLanguages: 'all'
} ),
new MiniCssExtractPlugin({
filename: 'compiled-theme.scss', // Compiled as SCSS so we can import it in other SCSS files, but it's already compiled in CSS
chunkFilename: 'compiled-theme-id.css', // We don't know what this is for
}),
new webpack.BannerPlugin( {
banner: bundler.getLicenseBanner(),
raw: true
@@ -70,15 +75,8 @@ module.exports = {
use: 'ts-loader'
}, {
test: /\.css$/,
use: [ {
loader: 'style-loader',
options: {
injectType: 'singletonStyleTag',
attributes: {
'data-cke': true
}
}
}, {
use: [ MiniCssExtractPlugin.loader,
{
loader: 'css-loader'
}, {
loader: 'postcss-loader',

View File

@@ -239,15 +239,13 @@ $(function()
},
_buildMultipleShowAllMessagesItem: function(aUnreadMessagesByProvider)
{
var sNewMessageIndicator = '<div class="ibo-navigation-menu--notifications--item--new-message-indicator"></div>';
var sUnreadMessages = ''
for(k in this.options.providers) {
var sExtraMessages = '';
if (aUnreadMessagesByProvider[k] > 0) {
sExtraMessages = ' <span class="ibo-navigation-menu--notifications-show-all-multiple--counter">(' + aUnreadMessagesByProvider[k] + ')</span>'
}
sUnreadMessages += '<a class="ibo-popover-menu--item" data-provider-id="' + k + '" href="' + this.options.providers[k].view_all_url + '" target="' + this.options.providers[k].target + '">' + sNewMessageIndicator + this.options.providers[k].label + sExtraMessages + '</a>';
sUnreadMessages += '<a class="ibo-popover-menu--item" data-provider-id="' + k + '" href="' + this.options.providers[k].view_all_url + '" target="' + this.options.providers[k].target + '">' + this.options.providers[k].label + sExtraMessages + '</a>';
}
return '<a class="ibo-popover-menu--item ibo-navigation-menu--notifications-show-all-multiple" data-role="ibo-navigation-menu--notifications-show-all-multiple" href="#">'+Dict.S(this.options.labels.view_all)+'<i class="fas fas-caret-down"></i></a>' +
'<div class="ibo-popover-menu" data-role="ibo-popover-menu"><div class="ibo-popover-menu--section" data-role="ibo-popover-menu--section">'+sUnreadMessages+'</div></div>';

View File

@@ -368,7 +368,7 @@ CombodoModal.OpenConfirmationModal = function(oOptions, aData) {
}
// Merge external options with confirmation modal default options
oOptions = $.extend(true, {
title: Dict.S('UI:Modal:DefaultConfirmationTitle'),
title: Dict.S('UI:Modal:Confirmation:DefaultTitle'),
content: '',
do_not_show_again_pref_key: null,
callback_on_confirm: null,

View File

@@ -314,14 +314,6 @@ function BlockField(field_id, bBlocked) {
}
}
function BlockFieldElement(element, bBlocked) {
if (bBlocked) {
element.block({message: '', enableValidation : true, baseZ: 9999, overlayCSS: { backgroundColor: '#ccd6e066'}});
} else {
element.unblock();
}
}
/**
* Updates (enables/disables) a "duration" field
*/