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
+ //
+ // -
+ // editor
+ //
+ //
+ //
// 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);