@ckeditor/ckeditor5-image
Version:
Image feature for CKEditor 5.
59 lines (58 loc) • 2.32 kB
JavaScript
/**
* @license Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.
* For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
*/
import { LabeledFieldView, createLabeledInputText } from 'ckeditor5/src/ui';
/**
* Creates integrations object that will be passed to the
* {@link module:image/imageinsert/ui/imageinsertpanelview~ImageInsertPanelView}.
*
* @param editor Editor instance.
*
* @returns Integrations object.
*/
export function prepareIntegrations(editor) {
const panelItems = editor.config.get('image.insert.integrations');
const imageInsertUIPlugin = editor.plugins.get('ImageInsertUI');
const PREDEFINED_INTEGRATIONS = {
'insertImageViaUrl': createLabeledInputView(editor.locale)
};
if (!panelItems) {
return PREDEFINED_INTEGRATIONS;
}
// Prepares ckfinder component for the `openCKFinder` integration token.
if (panelItems.find(item => item === 'openCKFinder') && editor.ui.componentFactory.has('ckfinder')) {
const ckFinderButton = editor.ui.componentFactory.create('ckfinder');
ckFinderButton.set({
withText: true,
class: 'ck-image-insert__ck-finder-button'
});
// We want to close the dropdown panel view when user clicks the ckFinderButton.
ckFinderButton.delegate('execute').to(imageInsertUIPlugin, 'cancel');
PREDEFINED_INTEGRATIONS.openCKFinder = ckFinderButton;
}
// Creates integrations object of valid views to pass it to the ImageInsertPanelView.
return panelItems.reduce((object, key) => {
if (PREDEFINED_INTEGRATIONS[key]) {
object[key] = PREDEFINED_INTEGRATIONS[key];
}
else if (editor.ui.componentFactory.has(key)) {
object[key] = editor.ui.componentFactory.create(key);
}
return object;
}, {});
}
/**
* Creates labeled field view.
*
* @param locale The localization services instance.
*/
export function createLabeledInputView(locale) {
const t = locale.t;
const labeledInputView = new LabeledFieldView(locale, createLabeledInputText);
labeledInputView.set({
label: t('Insert image via URL')
});
labeledInputView.fieldView.placeholder = 'https://example.com/image.png';
return labeledInputView;
}