UNPKG

ckeditor5-image-upload-base64

Version:

The development environment of CKEditor 5 – the best browser-based rich text editor.

111 lines (96 loc) 2.73 kB
/** * @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 ui/dropdown/dropdownpanelview */ import View from '../view'; /** * The dropdown panel view class. * * See {@link module:ui/dropdown/dropdownview~DropdownView} to learn about the common usage. * * @extends module:ui/view~View */ export default class DropdownPanelView extends View { /** * @inheritDoc */ constructor( locale ) { super( locale ); const bind = this.bindTemplate; /** * Controls whether the panel is visible. * * @observable * @member {Boolean} #isVisible */ this.set( 'isVisible', false ); /** * The position of the panel, relative to the parent. * * This property is reflected in the CSS class set to {@link #element} that controls * the position of the panel. * * @observable * @default 'se' * @member {'se'|'sw'|'ne'|'nw'} #position */ this.set( 'position', 'se' ); /** * Collection of the child views in this panel. * * A common child type is the {@link module:ui/list/listview~ListView} and {@link module:ui/toolbar/toolbarview~ToolbarView}. * See {@link module:ui/dropdown/utils~addListToDropdown} and * {@link module:ui/dropdown/utils~addToolbarToDropdown} to learn more about child views of dropdowns. * * @readonly * @member {module:ui/viewcollection~ViewCollection} */ this.children = this.createCollection(); this.setTemplate( { tag: 'div', attributes: { class: [ 'ck', 'ck-reset', 'ck-dropdown__panel', bind.to( 'position', value => `ck-dropdown__panel_${ value }` ), bind.if( 'isVisible', 'ck-dropdown__panel-visible' ) ] }, children: this.children, on: { // Drag and drop in the panel should not break the selection in the editor. // https://github.com/ckeditor/ckeditor5-ui/issues/228 selectstart: bind.to( evt => evt.preventDefault() ) } } ); } /** * Focuses the view element or first item in view collection on opening dropdown's panel. * * See also {@link module:ui/dropdown/dropdownpanelfocusable~DropdownPanelFocusable}. */ focus() { if ( this.children.length ) { this.children.first.focus(); } } /** * Focuses the view element or last item in view collection on opening dropdown's panel. * * See also {@link module:ui/dropdown/dropdownpanelfocusable~DropdownPanelFocusable}. */ focusLast() { if ( this.children.length ) { const lastChild = this.children.last; if ( typeof lastChild.focusLast === 'function' ) { lastChild.focusLast(); } else { lastChild.focus(); } } } }