Skip to content

Commit ef64b0a

Browse files
authored
IBX-9296: Custom CSS classes not working for "embedimage" (#197)
1 parent 640419c commit ef64b0a

File tree

3 files changed

+30
-12
lines changed

3 files changed

+30
-12
lines changed

src/bundle/Resources/public/js/CKEditor/custom-attributes/custom-attributes-command.js

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -32,20 +32,24 @@ class IbexaCustomAttributesCommand extends Command {
3232
cleanClasses(modelElement, classes) {
3333
Object.keys(classes).forEach((elementName) => {
3434
const configName = findConfigName(modelElement.name);
35-
const selectedCustomClasses = modelElement.getAttribute('custom-classes') ?? '';
35+
const selectedCustomClasses = modelElement.getAttribute('custom-classes')?.split(' ') ?? [];
3636
const elementCustomClassesConfig = classes[configName];
37+
const filteredSelectedCustomClasses = selectedCustomClasses.filter(
38+
(className) => !elementCustomClassesConfig || className !== elementCustomClassesConfig.predefinedClass,
39+
);
40+
3741
const hasOwnCustomClasses =
3842
elementCustomClassesConfig &&
39-
selectedCustomClasses
40-
.split(' ')
41-
.every((selectedCustomClass) => elementCustomClassesConfig.choices.includes(selectedCustomClass));
42-
43-
if (elementName === configName || hasOwnCustomClasses) {
44-
return;
45-
}
43+
filteredSelectedCustomClasses.every((selectedCustomClass) =>
44+
elementCustomClassesConfig.choices.includes(selectedCustomClass),
45+
);
4646

4747
this.editor.model.change((writer) => {
48-
writer.removeAttribute('custom-classes', modelElement);
48+
if (elementName !== configName && !hasOwnCustomClasses) {
49+
writer.removeAttribute('custom-classes', modelElement);
50+
} else if (selectedCustomClasses.length !== filteredSelectedCustomClasses.length) {
51+
writer.setAttribute('custom-classes', filteredSelectedCustomClasses.join(' '), modelElement);
52+
}
4953
});
5054
});
5155
}

src/bundle/Resources/public/js/CKEditor/custom-attributes/helpers/config-helper.js

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,11 +52,20 @@ const getCustomClassesElementConfig = (elementName) => {
5252

5353
return config[configName];
5454
};
55+
const addPredefinedClassToConfig = (elementName, className) => {
56+
const configName = findConfigName(elementName);
57+
const config = window.ibexa.richText.alloyEditor.classes[configName];
58+
59+
if (config) {
60+
config.predefinedClass = className;
61+
}
62+
};
5563

5664
export {
5765
getCustomAttributesConfig,
5866
getCustomClassesConfig,
5967
getCustomAttributesElementConfig,
6068
getCustomClassesElementConfig,
6169
findConfigName,
70+
addPredefinedClassToConfig,
6271
};

src/bundle/Resources/public/js/CKEditor/embed/image/embed-image-editing.js

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,9 @@ import Widget from '@ckeditor/ckeditor5-widget/src/widget';
55
import IbexaEmbedImageCommand from './embed-image-command';
66

77
import { findContent } from '../../services/content-service';
8+
import { addPredefinedClassToConfig } from '../../custom-attributes/helpers/config-helper';
9+
10+
const CONTAINER_CLASS = 'ibexa-embed-type-image';
811

912
class IbexaEmbedImageEditing extends Plugin {
1013
static get requires() {
@@ -17,6 +20,8 @@ class IbexaEmbedImageEditing extends Plugin {
1720
this.loadImagePreview = this.loadImagePreview.bind(this);
1821
this.loadImageVariation = this.loadImageVariation.bind(this);
1922
this.getSetting = this.getSetting.bind(this);
23+
24+
addPredefinedClassToConfig('embedImage', CONTAINER_CLASS);
2025
}
2126

2227
loadImagePreview(modelElement) {
@@ -89,7 +94,7 @@ class IbexaEmbedImageEditing extends Plugin {
8994
const container = downcastWriter.createContainerElement('div', {
9095
'data-ezelement': 'ezembed',
9196
'data-ezview': 'embed',
92-
class: 'ibexa-embed-type-image',
97+
class: CONTAINER_CLASS,
9398
});
9499

95100
this.loadImagePreview(modelElement);
@@ -136,7 +141,7 @@ class IbexaEmbedImageEditing extends Plugin {
136141
'data-href': `ezcontent://${modelElement.getAttribute('contentId')}`,
137142
'data-ezelement': 'ezembed',
138143
'data-ezview': 'embed',
139-
class: 'ibexa-embed-type-image',
144+
class: CONTAINER_CLASS,
140145
});
141146
const config = downcastWriter.createUIElement('span', { 'data-ezelement': 'ezconfig' }, function (domDocument) {
142147
const domElement = this.toDomElement(domDocument);
@@ -177,7 +182,7 @@ class IbexaEmbedImageEditing extends Plugin {
177182
attributes: {
178183
'data-ezelement': 'ezembed',
179184
},
180-
classes: 'ibexa-embed-type-image',
185+
classes: CONTAINER_CLASS,
181186
},
182187
model: (viewElement, { writer: upcastWriter }) => {
183188
const href = viewElement.getAttribute('data-href');

0 commit comments

Comments
 (0)