webworld888/resources/assets/core/tree/Item.js
2021-10-26 19:14:12 +09:00

80 lines
1.8 KiB
JavaScript
Vendored

/** @private */
let _nodeTemplate
class Item {
/**
* item 템플릿을 리턴한다.
* @memberof Item
* @param {object} obj
**/
getTemplate (obj) {
_nodeTemplate = obj.nodeTemplate
return this.getItemsTemplate(obj.items, obj.rootId, true)
}
/**
* item 템플릿을 리턴한다.
* @memberof Item
* @param {object} items
* @param {string} rootId
* @param {boolean} isRoot
* @return {string}
**/
getItemsTemplate (items, rootId, isRoot) {
let temp = ''
if (items && items.length != 0 || isRoot) {
if (isRoot && rootId) {
temp += '<ul class="item-container" data-parent="' + rootId + '">'
} else {
temp += '<ul class="item-container">'
}
}
temp += this.makeItem(items, _nodeTemplate)
if (items && items.length != 0 || isRoot) {
temp += '</ul>'
}
return temp
}
/**
* item 템플릿을 만든다.
* @memberof Item
* @param {object} obj
* <pre>
* items
* nodeTemplate
* </pre>
* @param {function} nodeTemplate
* @return {string}
**/
makeItem (items, nodeTemplate) {
let itemNode = ''
for (const prop in items) {
const item = items[prop]
const move = (item.items && item.items.length) ? 'move' : ''
itemNode += "<li class='item " + move + "' id='item_" + item.id + "'>"
itemNode += "<div class='item-content' data-item='" + JSON.stringify(item) + "'>"
itemNode += "<button class='btn handler'><i class='xi-drag-vertical'></i></button>"
itemNode += nodeTemplate(item)
itemNode += '</div>'
if (item.items && item.items instanceof Object) {
itemNode += this.getItemsTemplate(item.items)
}
itemNode += '</li>'
}
return itemNode
}
}
export default new Item()