JsTree로 Context메뉴(오른쪽 클릭)를 활용한 예제입니다.
JsTree Api 활용이나, Disable 처리는
https://nhj2021.tistory.com/12 참고 바랍니다.
var Editable = true;
var Flag = {
CreateFolder: true,
RenameFolder: true,
DeleteFolder:true
};
// dnd(Drag&Drop)도 있지만 쓰지는 않음
var Plugins = ['wholerow', 'unique','contextmenu','dnd'],;
$('#jsTreeElement')
.jstree({
'core': {
// 새 폴더를 만들 경우 사용
'strings': {
'New node': '새 폴더'
},
// API 정보 입력
'data': {
type: 'get',
'url': 'sample.com/api/TestJstree',
'data': function (node) {
// 첫 루트인 경우
if (node.id == '#') return {
'test1': '1',
'test2': '2'
};
// Disable
if (node.original != null && node.original.isDisable == true)
return null;
if (node.original != null && node.original.id)
return {
'test1': node.original.id
};
return {
'test1': node.id
};
}
},
'force_text': true,
'check_callback': function (operation, node, parentNode, renameNodeText, more) {
// operation can be 'create_node', 'rename_node', 'delete_node', 'move_node' or 'copy_node'
// in case of 'rename_node' node_position is filled with the new node name
var validation = false;
if (Editable == false)
return false;
switch (operation) {
case 'create_node':
// 생성이 안되는 곳이면 이곳에서 체크
if (Flag.CreateFolder) {
Flag.CreateFolder = false;
return true;
}
// 직접 구현 필요!!
// 직접 구현 필요!!
CreateFolder(parentNode.id, node.text);
break;
case 'rename_node':
if (Flag.RenameFolder) {
Flag.RenameFolder = false;
return true;
}
if (node.text == renameNodeText)
return false;
// 직접 구현 필요!!
// 직접 구현 필요!!
RenameFolder(node.original.folder_id, renameNodeText);
break;
case 'delete_node':
if (Flag.DeleteFolder) {
Flag.DeleteFolder = false;
return true;
}
validation = false;
confirm(String.format('선택하신 \"{0}\" 폴더와 하위폴더까지 전부 삭제됩니다. 정말 삭제하시겠습니까?', node.text), null, null, function (yes) {
if (yes) {
// 직접 구현 필요!!
// 직접 구현 필요!!
DeleteFolder(node.original.folder_id);
}
});
break;
}
return validation;
},
},
"contextmenu": {
"items": function ($node) {
//var tree = $("#tree").jstree(true);
return {
"create": {
"separator_before": false,
"separator_after": true,
"_disabled": false,
"label": "Create",
"action": function (data) {
var inst = $.jstree.reference(data.reference),
obj = inst.get_node(data.reference);
inst.create_node(obj, {}, "last", function (new_node) {
setTimeout(function () { inst.edit(new_node); }, 0);
});
}
},
"rename": {
"separator_before": false,
"separator_after": false,
"_disabled": false,
"label": "Rename",
"action": function (data) {
var inst = $.jstree.reference(data.reference),
obj = inst.get_node(data.reference);
inst.edit(obj);
}
},
"remove": {
"separator_before": false,
"icon": false,
"separator_after": false,
"_disabled": false,
"label": "Delete",
"action": function (data) {
var inst = $.jstree.reference(data.reference),
obj = inst.get_node(data.reference);
if (inst.is_selected(obj)) {
inst.delete_node(inst.get_selected());
}
else {
inst.delete_node(obj);
}
}
},
};
}
},
'plugins': Plugins
})
});
반응형
'개발 > Javascript' 카테고리의 다른 글
Javascript Html 인코딩, 디코딩 (0) | 2022.01.07 |
---|---|
c# API 로 JsTree 랜더링 (0) | 2021.12.26 |
Javascript Filesize Format (0) | 2021.12.18 |
Javascript 콤마 찍기 (0) | 2021.12.18 |
jQuery data() vs attr() (0) | 2021.11.20 |
댓글