/** * @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 list/utils */ import { getFillerOffset } from '@ckeditor/ckeditor5-engine/src/view/containerelement'; import ButtonView from '@ckeditor/ckeditor5-ui/src/button/buttonview'; import TreeWalker from '@ckeditor/ckeditor5-engine/src/model/treewalker'; /** * Creates a list item {@link module:engine/view/containerelement~ContainerElement}. * * @param {module:engine/view/downcastwriter~DowncastWriter} writer The writer instance. * @returns {module:engine/view/containerelement~ContainerElement} */ export function createViewListItemElement( writer ) { const viewItem = writer.createContainerElement( 'li' ); viewItem.getFillerOffset = getListItemFillerOffset; return viewItem; } /** * Helper function that creates a `` or (`
    `) structure out of the given `modelItem` model `listItem` element. * Then, it binds the created view list item (`
  1. `) with the model `listItem` element. * The function then returns the created view list item (`
  2. `). * * @param {module:engine/model/item~Item} modelItem Model list item. * @param {module:engine/conversion/upcastdispatcher~UpcastConversionApi} conversionApi Conversion interface. * @returns {module:engine/view/containerelement~ContainerElement} View list element. */ export function generateLiInUl( modelItem, conversionApi ) { const mapper = conversionApi.mapper; const viewWriter = conversionApi.writer; const listType = modelItem.getAttribute( 'listType' ) == 'numbered' ? 'ol' : 'ul'; const viewItem = createViewListItemElement( viewWriter ); const viewList = viewWriter.createContainerElement( listType, null ); viewWriter.insert( viewWriter.createPositionAt( viewList, 0 ), viewItem ); mapper.bindElements( modelItem, viewItem ); return viewItem; } /** * Helper function that inserts a view list at a correct place and merges it with its siblings. * It takes a model list item element (`modelItem`) and a corresponding view list item element (`injectedItem`). The view list item * should be in a view list element (`