/** * @module SiteMap */ var SiteMap = (function (XE, $, Tree, SearchHead, Menu) { var _this var _$wrap = $('#menuContainer') var _menus = $('#menuContainer').data('menus') var _menusUrl = $('#menuContainer').data('createmenu') var _home = $('#menuContainer').data('home') var _url = $('#menuContainer').data('url') return { /** * SiteMap 초기설정을 한다. * @private * @memberof module:SiteMap * @return {object} * @instance */ init: function () { _this = this // menu 생성 this.appendDefaultTemplate() // Search bar 생성 SearchHead.init(_$wrap.find('.searchWrap'), _menus, _menusUrl) this.runSortable() // Tree.run() this.bindEvents() return this }, /** * sitemap페이지에서 사용되는 기본 dom 템플릿을 리턴한다. * @memberof module:SiteMap * @instance * @return htmlstring */ getTemplate: function () { return [ '
* item: jquery object. move된 NODE
* itemId: node id
* parentId: parent node id
* ordering: node ordering
*
* @description 변경된 Node를 업데이트 한다
* @instance
*/
updateNode: function (obj) {
Tree.setPrevent(true)
XE.ajax({
url: _url + '/moveItem',
context: $('.menu-content'),
type: 'put',
dataType: 'json',
data: {
itemId: obj.itemId,
parent: obj.parentId,
ordering: obj.ordering
},
success: function (data) {
var itemData = obj.item.find('> .item-content').data('item')
var currentMenuId = (obj.item.parents('.item').length > 0) ? obj.item.parents('.item').parents('.item-container:last()').data('parent') : obj.item.parent().data('parent')
itemData.parentId = (obj.parentId) ? obj.parentId : null
itemData.ordering = obj.ordering
obj.item.find('> .item-content').attr('data-item', JSON.stringify(itemData))
if (itemData.menu_id != currentMenuId) {
_this.updateMenuId(obj.item, currentMenuId)
}
XE.toast('success', 'Item moved')
Tree.setPrevent(false)
}
})
},
/**
* UI상의 MenuId를 업데이트한다.
* @memberof module:SiteMap
* @param {element} $item
* @param {string} menuId
* @description
*
* - 하위 노드를 찾아가며 menuId를 변경한다
* - 재귀
*
* @instance
*/
updateMenuId: function ($item, menuId) {
var itemData = $item.find('> .item-content').data('item')
var $link = $item.find('> .item-content .item-info .ellipsis:eq(0) a')
var href = $link.attr('href')
var stdParsing = '/menu/menus/'
var arrLinks = href.split(stdParsing)
var secLinks = arrLinks[1].split('/')
secLinks[0] = menuId
var link = arrLinks[0] + stdParsing + secLinks.join('/')
itemData.menu_id = menuId
$item.find('> .item-content').attr('data-item', JSON.stringify(itemData))
$link.attr('href', link)
if ($item.find('> .item-container > .item').length > 0) {
_this.updateMenuId($item.find('> .item-container > .item'), menuId)
}
}
}.init()
})(window.XE, window.jQuery, window.Tree, window.SearchHead, window.Menu)