all files / packages/list/ renderListNode.js

94.12% Statements 16/17
100% Branches 4/4
100% Functions 1/1
94.12% Lines 16/17
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29      53× 53× 53× 97× 97×   93×       97× 97×       53×      
import { last } from '../../util'
import getListTagName from './getListTagName'
 
export default function renderListNode(node, rootEl, createElement) {
  let items = node.getItems()
  let stack = [rootEl]
  for (let i = 0; i < items.length; i++) {
    let item = items[i]
    if (item.level<stack.length) {
      for (let j = stack.length; j > item.level; j--) {
        stack.pop()
      }
    } else if (item.level>stack.length) {
      for (let j = stack.length; j < item.level; j++) {
        // Note: ATM all sublists have the same order type
        let sublist = createElement(getListTagName(node))
        last(stack).append(sublist)
        stack.push(sublist)
      }
    }
    console.assert(item.level === stack.length, 'item.level should now be the same as stack.length')
    last(stack).append(
      createElement(item)
    )
  }
  for(let j=stack.length; j>1;j--) {
    stack.pop()
  }
}