@swnat/ckeditor-custom-build
Version:
The development environment of CKEditor 5 – the best browser-based rich text editor.
78 lines (64 loc) • 2.67 kB
JavaScript
/**
* @license Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved.
* For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
*/
/**
* @module image/imageinsert/utils
*/
import LabeledFieldView from '@ckeditor/ckeditor5-ui/src/labeledfield/labeledfieldview';
import { createLabeledInputText } from '@ckeditor/ckeditor5-ui/src/labeledfield/utils';
/**
* Creates integrations object that will be passed to the
* {@link module:image/imageinsert/ui/imageinsertpanelview~ImageInsertPanelView}.
*
* @param {module:core/editor/editor~Editor} editor Editor instance.
*
* @returns {Object.<String, module:ui/view~View>} 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 {module:utils/locale~Locale} locale The localization services instance.
*
* @returns {module:ui/labeledfield/labeledfieldview~LabeledFieldView}
*/
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/src/image.png';
labeledInputView.infoText = t( 'Paste the image source URL.' );
return labeledInputView;
}