2 * Unwraps an unordered/ordered list
4 * @param {Element} element The list element which should be unwrapped
7 * <!-- Assume the following dom: -->
15 * wysihtml5.dom.resolveList(document.getElementById("list"));
18 * <!-- Will result in: -->
24 function _isBlockElement(node) {
25 return dom.getStyle("display").from(node) === "block";
28 function _isLineBreak(node) {
29 return node.nodeName === "BR";
32 function _appendLineBreak(element) {
33 var lineBreak = element.ownerDocument.createElement("br");
34 element.appendChild(lineBreak);
37 function resolveList(list, useLineBreaks) {
38 if (!list.nodeName.match(/^(MENU|UL|OL)$/)) {
42 var doc = list.ownerDocument,
43 fragment = doc.createDocumentFragment(),
44 previousSibling = wysihtml5.dom.domNode(list).prev({ignoreBlankTexts: true}),
48 shouldAppendLineBreak,
53 // Insert line break if list is after a non-block element
54 if (previousSibling && !_isBlockElement(previousSibling) && !_isLineBreak(previousSibling)) {
55 _appendLineBreak(fragment);
58 while (listItem = (list.firstElementChild || list.firstChild)) {
59 lastChild = listItem.lastChild;
60 while (firstChild = listItem.firstChild) {
61 isLastChild = firstChild === lastChild;
62 // This needs to be done before appending it to the fragment, as it otherwise will lose style information
63 shouldAppendLineBreak = isLastChild && !_isBlockElement(firstChild) && !_isLineBreak(firstChild);
64 fragment.appendChild(firstChild);
65 if (shouldAppendLineBreak) {
66 _appendLineBreak(fragment);
70 listItem.parentNode.removeChild(listItem);
73 while (listItem = (list.firstElementChild || list.firstChild)) {
74 if (listItem.querySelector && listItem.querySelector("div, p, ul, ol, menu, blockquote, h1, h2, h3, h4, h5, h6")) {
75 while (firstChild = listItem.firstChild) {
76 fragment.appendChild(firstChild);
79 paragraph = doc.createElement("p");
80 while (firstChild = listItem.firstChild) {
81 paragraph.appendChild(firstChild);
83 fragment.appendChild(paragraph);
85 listItem.parentNode.removeChild(listItem);
89 list.parentNode.replaceChild(fragment, list);
92 dom.resolveList = resolveList;