-
Notifications
You must be signed in to change notification settings - Fork 19
/
Copy pathfolder2tree.js
111 lines (103 loc) · 3.1 KB
/
folder2tree.js
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
/**
*
* @fileoverview Show your folder structure with tree nodes. 用树形节点展示文件夹结构
* @version 1.1
* @author HJava, litten
* @lastUpdate 2014-08-14 09:35
* @function: 1. init(ctn ,data)
*/
(function(root, factory) {
if(typeof define === 'function' && define.amd) {
define([], factory);
} else {
root['folder2tree'] = factory();
}
}(this, function() {
var arr2obj = function(arr) {
var obj = {};
for(var i = 0, len = arr.length; i < len; i++) {
var em = arr[i];
if(typeof(em) === "string" || typeof(em) === "number") {
obj[em] = em;
} else if(typeof(em) === "object") {
for(var key in em) {
obj[key] = arr2obj(em[key]);
}
}
}
return obj;
}
function getObjLen(obj) {
var count = 0;
for(var em in obj) {
count++;
}
return count;
}
function getTree(data) {
var result = createDiv();
var all = show(data, '');
for(var i = 0; i < all.length; i++) {
result.appendChild(all[i]);
}
return result;
}
function show(data, content) {
var all = [];
var len = getObjLen(data);
var count = 1;
for(var i in data) {
var front = content;
var isLast = (count === len) ? true : false;
front += isLast ? '  ' : '│ ';
if(typeof data[i] === 'string' || typeof data[i] === 'number') {
all.push(createDiv(i, data[i], content, isLast));
} else if(typeof data[i] === "object") {
all.push(createDiv(i, i, content, isLast));
var arr = arguments.callee(data[i], front);
var parent = createDiv(i, '', content, isLast);
for(var j in arr) {
parent.appendChild(arr[j]);
}
all = all.concat(parent);
} else {
continue;
}
count++;
}
return all;
}
function createDiv(key, value, front, isLast) {
var key = key || '';
var value = value || '';
var div = document.createElement('div');
if(key !== '') {
div.setAttribute('data-key', key);
}
if(value !== '') {
var content = isLast ? '└─' : '├─';
div.innerHTML = front + content + value;
}
return div;
}
return {
/**
* 初始化方法
*
* @param {Dom} ctn 父级dom节点
* @param {Object} data 描述文件夹层级关系对象
*/
init: function(ctn, data) {
ctn = ctn || document.getElementsByTagName("body")[0];
if(data) {
if(data instanceof Array) {
data = arr2obj(data);
}
console.log(data);
ctn.appendChild(getTree(data));
} else {
console.log("data is null");
}
}
}
}));