@ckeditor/ckeditor5-list 47.1.0-alpha.2 → 47.2.0-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -2251,6 +2251,9 @@ import { DomEventObserver, Matcher, ModelTreeWalker, getViewFillerOffset } from
2251
2251
  if (!viewElement) {
2252
2252
  return false;
2253
2253
  }
2254
+ if (isItemBlockInsideStructureSlot(viewElement)) {
2255
+ return true;
2256
+ }
2254
2257
  const needsRefresh = listEditing.fire('checkElement', {
2255
2258
  modelElement: item,
2256
2259
  viewElement
@@ -2269,6 +2272,22 @@ import { DomEventObserver, Matcher, ModelTreeWalker, getViewFillerOffset } from
2269
2272
  }
2270
2273
  return false;
2271
2274
  }
2275
+ function isItemBlockInsideStructureSlot(viewElement) {
2276
+ viewElement = viewElement.parent;
2277
+ while(viewElement.is('attributeElement') && [
2278
+ 'ol',
2279
+ 'ul',
2280
+ 'li'
2281
+ ].includes(viewElement.name)){
2282
+ viewElement = viewElement.parent;
2283
+ }
2284
+ // List item inside elementToStructure slot parent without mapping then it requires refresh for correct positions
2285
+ // as structure child elements does not have mapping from model and position would land in wrong place.
2286
+ if (viewElement.getCustomProperty('$structureSlotParent') && !editing.mapper.toModelElement(viewElement)) {
2287
+ return true;
2288
+ }
2289
+ return false;
2290
+ }
2272
2291
  function doesItemWrappingRequiresRefresh(item, stack, changedItems) {
2273
2292
  // Items directly affected by some "change" don't need a refresh, they will be converted by their own changes.
2274
2293
  if (changedItems.has(item)) {
@@ -2328,7 +2347,7 @@ import { DomEventObserver, Matcher, ModelTreeWalker, getViewFillerOffset } from
2328
2347
  };
2329
2348
  // Use positions mapping instead of mapper.toViewElement( listItem ) to find outermost view element.
2330
2349
  // This is for cases when mapping is using inner view element like in the code blocks (pre > code).
2331
- const viewElement = findMappedViewElement(listItem, mapper, model);
2350
+ const viewElement = findMappedViewElement(listItem, mapper, model, writer);
2332
2351
  // Remove custom item marker.
2333
2352
  removeCustomMarkerElements(viewElement, writer, mapper);
2334
2353
  // Unwrap element from current list wrappers.
@@ -2400,10 +2419,18 @@ import { DomEventObserver, Matcher, ModelTreeWalker, getViewFillerOffset } from
2400
2419
  * @param element The model element.
2401
2420
  * @param mapper The mapper instance.
2402
2421
  * @param model The model.
2403
- */ function findMappedViewElement(element, mapper, model) {
2422
+ * @param writer The view downcast writer.
2423
+ */ function findMappedViewElement(element, mapper, model, writer) {
2404
2424
  const modelRange = model.createRangeOn(element);
2405
2425
  const viewRange = mapper.toViewRange(modelRange).getTrimmed();
2406
- return viewRange.end.nodeBefore;
2426
+ const viewWalker = viewRange.getWalker();
2427
+ for (const { item } of viewWalker){
2428
+ if (item.is('element') && item.getCustomProperty('listItemMarker')) {
2429
+ viewWalker.jumpTo(writer.createPositionAfter(item));
2430
+ } else if (item.is('element') && !item.getCustomProperty('listItemWrapper')) {
2431
+ return item;
2432
+ }
2433
+ }
2407
2434
  }
2408
2435
  /**
2409
2436
  * The model to view custom position mapping for cases when marker is injected at the beginning of a block.