diff --git a/package.json b/package.json index 80e73cbf..688a7576 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@editorjs/nested-list", - "version": "1.4.2", + "version": "1.5.0", "keywords": [ "codex editor", "nested-list", diff --git a/src/index.js b/src/index.js index aba7b72c..cd94bd8d 100644 --- a/src/index.js +++ b/src/index.js @@ -227,25 +227,61 @@ export default class NestedList { items: [], }; + // Pasted Case 1. + // + // Pasted Case 2 + // // get pasted items from the html. const getPastedItems = (parent) => { + let responseData = []; // get first level li elements. - const children = Array.from(parent.querySelectorAll(`:scope > li`)); + const children = Array.from(parent.querySelectorAll(`:scope > li, :scope > ${tagToSearch}`)); + + children.map((child) => { + if (child.tagName === tag) { + const nestedListGroup = getNestedListGroup(parent); + const previousListItem = responseData.pop(); + previousListItem.items = nestedListGroup; + responseData = responseData.concat(previousListItem); + } else { + const listItem = getListItem(child); + responseData = responseData.concat(listItem); + } + }); - return children.map((child) => { - // get subitems if they exist. - const subItemsWrapper = child.querySelector(`:scope > ${tagToSearch}`); - // get subitems. - const subItems = subItemsWrapper ? getPastedItems(subItemsWrapper) : []; - // get text content of the li element. - const content = child?.firstChild?.textContent || ''; + return responseData; + }; - return { - content, - items: subItems, - }; + const getListItem = (list) => { + const nestedItems = getNestedListGroup(list); + return { + content: list?.firstChild?.textContent || '', + items: nestedItems + }; + } + + const getNestedListGroup = (parent) => { + let responseData = []; + const nestedListGroups = Array.from(parent.querySelectorAll(`:scope > ${tagToSearch}`)) + + nestedListGroups.map((nestedListGroup) => { + responseData = responseData.concat(getPastedItems(nestedListGroup)); }); - }; + + return responseData; + } // get pasted items. data.items = getPastedItems(element);