tocmd 0.0.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (47) hide show
  1. checksums.yaml +7 -0
  2. data/bin/tocmd +70 -0
  3. data/lib/mdpreview/markdown_render.rb +45 -0
  4. data/lib/mdpreview/translator.rb +237 -0
  5. data/lib/mdpreview/version.rb +3 -0
  6. data/lib/mdpreview.rb +18 -0
  7. data/test/mdptest.rb +100 -0
  8. data/vendor/cur.file +6 -0
  9. data/vendor/meta.js +1 -0
  10. data/vendor/template.html +0 -0
  11. data/vendor/toc/css/demo.css +33 -0
  12. data/vendor/toc/css/zTreeStyle/img/diy/1_close.png +0 -0
  13. data/vendor/toc/css/zTreeStyle/img/diy/1_open.png +0 -0
  14. data/vendor/toc/css/zTreeStyle/img/diy/2.png +0 -0
  15. data/vendor/toc/css/zTreeStyle/img/diy/3.png +0 -0
  16. data/vendor/toc/css/zTreeStyle/img/diy/4.png +0 -0
  17. data/vendor/toc/css/zTreeStyle/img/diy/5.png +0 -0
  18. data/vendor/toc/css/zTreeStyle/img/diy/6.png +0 -0
  19. data/vendor/toc/css/zTreeStyle/img/diy/7.png +0 -0
  20. data/vendor/toc/css/zTreeStyle/img/diy/8.png +0 -0
  21. data/vendor/toc/css/zTreeStyle/img/diy/9.png +0 -0
  22. data/vendor/toc/css/zTreeStyle/img/line_conn.gif +0 -0
  23. data/vendor/toc/css/zTreeStyle/img/loading.gif +0 -0
  24. data/vendor/toc/css/zTreeStyle/img/zTreeStandard.gif +0 -0
  25. data/vendor/toc/css/zTreeStyle/img/zTreeStandard.png +0 -0
  26. data/vendor/toc/css/zTreeStyle/zTreeStyle.css +97 -0
  27. data/vendor/toc/js/jquery-1.4.4.min.js +167 -0
  28. data/vendor/toc/js/jquery.ztree.all-3.5.js +3447 -0
  29. data/vendor/toc/js/jquery.ztree.all-3.5.min.js +157 -0
  30. data/vendor/toc/js/jquery.ztree.core-3.5.js +1644 -0
  31. data/vendor/toc/js/jquery.ztree.core-3.5.min.js +68 -0
  32. data/vendor/toc/js/jquery.ztree.excheck-3.5.js +624 -0
  33. data/vendor/toc/js/jquery.ztree.excheck-3.5.min.js +33 -0
  34. data/vendor/toc/js/jquery.ztree.exedit-3.5.js +1178 -0
  35. data/vendor/toc/js/jquery.ztree.exedit-3.5.min.js +52 -0
  36. data/vendor/toc/js/jquery.ztree.exhide-3.5.js +362 -0
  37. data/vendor/toc/js/jquery.ztree.exhide-3.5.min.js +22 -0
  38. data/vendor/toc/js/jquery.ztree_toc.js +224 -0
  39. data/vendor/toc/js/jquery.ztree_toc.min.js +4 -0
  40. data/vendor/toc/style/Clearness Dark.css +146 -0
  41. data/vendor/toc/style/Clearness.css +147 -0
  42. data/vendor/toc/style/GitHub.css +90 -0
  43. data/vendor/toc/style/GitHub2.css +297 -0
  44. data/vendor/toc/style/github-bf51422f4bb36427d391e4b75a1daa083c2d840e.css +1 -0
  45. data/vendor/toc/style/github2-d731afd4f624c99a4b19ad69f3083cd6d02b81d5.css +1 -0
  46. data/vendor/toc/style/makedownpad.css +285 -0
  47. metadata +90 -0
@@ -0,0 +1,1178 @@
1
+ /*
2
+ * JQuery zTree exedit 3.5.02
3
+ * http://zTree.me/
4
+ *
5
+ * Copyright (c) 2010 Hunter.z
6
+ *
7
+ * Licensed same as jquery - MIT License
8
+ * http://www.opensource.org/licenses/mit-license.php
9
+ *
10
+ * email: hunter.z@263.net
11
+ * Date: 2013-01-28
12
+ */
13
+ (function($){
14
+ //default consts of exedit
15
+ var _consts = {
16
+ event: {
17
+ DRAG: "ztree_drag",
18
+ DROP: "ztree_drop",
19
+ REMOVE: "ztree_remove",
20
+ RENAME: "ztree_rename"
21
+ },
22
+ id: {
23
+ EDIT: "_edit",
24
+ INPUT: "_input",
25
+ REMOVE: "_remove"
26
+ },
27
+ move: {
28
+ TYPE_INNER: "inner",
29
+ TYPE_PREV: "prev",
30
+ TYPE_NEXT: "next"
31
+ },
32
+ node: {
33
+ CURSELECTED_EDIT: "curSelectedNode_Edit",
34
+ TMPTARGET_TREE: "tmpTargetzTree",
35
+ TMPTARGET_NODE: "tmpTargetNode"
36
+ }
37
+ },
38
+ //default setting of exedit
39
+ _setting = {
40
+ edit: {
41
+ enable: false,
42
+ editNameSelectAll: false,
43
+ showRemoveBtn: true,
44
+ showRenameBtn: true,
45
+ removeTitle: "remove",
46
+ renameTitle: "rename",
47
+ drag: {
48
+ autoExpandTrigger: false,
49
+ isCopy: true,
50
+ isMove: true,
51
+ prev: true,
52
+ next: true,
53
+ inner: true,
54
+ minMoveSize: 5,
55
+ borderMax: 10,
56
+ borderMin: -5,
57
+ maxShowNodeNum: 5,
58
+ autoOpenTime: 500
59
+ }
60
+ },
61
+ view: {
62
+ addHoverDom: null,
63
+ removeHoverDom: null
64
+ },
65
+ callback: {
66
+ beforeDrag:null,
67
+ beforeDragOpen:null,
68
+ beforeDrop:null,
69
+ beforeEditName:null,
70
+ beforeRename:null,
71
+ onDrag:null,
72
+ onDrop:null,
73
+ onRename:null
74
+ }
75
+ },
76
+ //default root of exedit
77
+ _initRoot = function (setting) {
78
+ var r = data.getRoot(setting);
79
+ r.curEditNode = null;
80
+ r.curEditInput = null;
81
+ r.curHoverNode = null;
82
+ r.dragFlag = 0;
83
+ r.dragNodeShowBefore = [];
84
+ r.dragMaskList = new Array();
85
+ r.showHoverDom = true;
86
+ },
87
+ //default cache of exedit
88
+ _initCache = function(treeId) {},
89
+ //default bind event of exedit
90
+ _bindEvent = function(setting) {
91
+ var o = setting.treeObj;
92
+ var c = consts.event;
93
+ o.bind(c.RENAME, function (event, treeId, treeNode) {
94
+ tools.apply(setting.callback.onRename, [event, treeId, treeNode]);
95
+ });
96
+
97
+ o.bind(c.REMOVE, function (event, treeId, treeNode) {
98
+ tools.apply(setting.callback.onRemove, [event, treeId, treeNode]);
99
+ });
100
+
101
+ o.bind(c.DRAG, function (event, srcEvent, treeId, treeNodes) {
102
+ tools.apply(setting.callback.onDrag, [srcEvent, treeId, treeNodes]);
103
+ });
104
+
105
+ o.bind(c.DROP, function (event, srcEvent, treeId, treeNodes, targetNode, moveType, isCopy) {
106
+ tools.apply(setting.callback.onDrop, [srcEvent, treeId, treeNodes, targetNode, moveType, isCopy]);
107
+ });
108
+ },
109
+ _unbindEvent = function(setting) {
110
+ var o = setting.treeObj;
111
+ var c = consts.event;
112
+ o.unbind(c.RENAME);
113
+ o.unbind(c.REMOVE);
114
+ o.unbind(c.DRAG);
115
+ o.unbind(c.DROP);
116
+ },
117
+ //default event proxy of exedit
118
+ _eventProxy = function(e) {
119
+ var target = e.target,
120
+ setting = data.getSetting(e.data.treeId),
121
+ relatedTarget = e.relatedTarget,
122
+ tId = "", node = null,
123
+ nodeEventType = "", treeEventType = "",
124
+ nodeEventCallback = null, treeEventCallback = null,
125
+ tmp = null;
126
+
127
+ if (tools.eqs(e.type, "mouseover")) {
128
+ tmp = tools.getMDom(setting, target, [{tagName:"a", attrName:"treeNode"+consts.id.A}]);
129
+ if (tmp) {
130
+ tId = tmp.parentNode.id;
131
+ nodeEventType = "hoverOverNode";
132
+ }
133
+ } else if (tools.eqs(e.type, "mouseout")) {
134
+ tmp = tools.getMDom(setting, relatedTarget, [{tagName:"a", attrName:"treeNode"+consts.id.A}]);
135
+ if (!tmp) {
136
+ tId = "remove";
137
+ nodeEventType = "hoverOutNode";
138
+ }
139
+ } else if (tools.eqs(e.type, "mousedown")) {
140
+ tmp = tools.getMDom(setting, target, [{tagName:"a", attrName:"treeNode"+consts.id.A}]);
141
+ if (tmp) {
142
+ tId = tmp.parentNode.id;
143
+ nodeEventType = "mousedownNode";
144
+ }
145
+ }
146
+ if (tId.length>0) {
147
+ node = data.getNodeCache(setting, tId);
148
+ switch (nodeEventType) {
149
+ case "mousedownNode" :
150
+ nodeEventCallback = _handler.onMousedownNode;
151
+ break;
152
+ case "hoverOverNode" :
153
+ nodeEventCallback = _handler.onHoverOverNode;
154
+ break;
155
+ case "hoverOutNode" :
156
+ nodeEventCallback = _handler.onHoverOutNode;
157
+ break;
158
+ }
159
+ }
160
+ var proxyResult = {
161
+ stop: false,
162
+ node: node,
163
+ nodeEventType: nodeEventType,
164
+ nodeEventCallback: nodeEventCallback,
165
+ treeEventType: treeEventType,
166
+ treeEventCallback: treeEventCallback
167
+ };
168
+ return proxyResult
169
+ },
170
+ //default init node of exedit
171
+ _initNode = function(setting, level, n, parentNode, isFirstNode, isLastNode, openFlag) {
172
+ if (!n) return;
173
+ n.isHover = false;
174
+ n.editNameFlag = false;
175
+ },
176
+ //update zTreeObj, add method of edit
177
+ _zTreeTools = function(setting, zTreeTools) {
178
+ zTreeTools.cancelEditName = function(newName) {
179
+ var root = data.getRoot(setting),
180
+ nameKey = setting.data.key.name,
181
+ node = root.curEditNode;
182
+ if (!root.curEditNode) return;
183
+ view.cancelCurEditNode(setting, newName?newName:node[nameKey]);
184
+ }
185
+ zTreeTools.copyNode = function(targetNode, node, moveType, isSilent) {
186
+ if (!node) return null;
187
+ if (targetNode && !targetNode.isParent && setting.data.keep.leaf && moveType === consts.move.TYPE_INNER) return null;
188
+ var newNode = tools.clone(node);
189
+ if (!targetNode) {
190
+ targetNode = null;
191
+ moveType = consts.move.TYPE_INNER;
192
+ }
193
+ if (moveType == consts.move.TYPE_INNER) {
194
+ function copyCallback() {
195
+ view.addNodes(setting, targetNode, [newNode], isSilent);
196
+ }
197
+
198
+ if (tools.canAsync(setting, targetNode)) {
199
+ view.asyncNode(setting, targetNode, isSilent, copyCallback);
200
+ } else {
201
+ copyCallback();
202
+ }
203
+ } else {
204
+ view.addNodes(setting, targetNode.parentNode, [newNode], isSilent);
205
+ view.moveNode(setting, targetNode, newNode, moveType, false, isSilent);
206
+ }
207
+ return newNode;
208
+ }
209
+ zTreeTools.editName = function(node) {
210
+ if (!node || !node.tId || node !== data.getNodeCache(setting, node.tId)) return;
211
+ if (node.parentTId) view.expandCollapseParentNode(setting, node.getParentNode(), true);
212
+ view.editNode(setting, node)
213
+ }
214
+ zTreeTools.moveNode = function(targetNode, node, moveType, isSilent) {
215
+ if (!node) return node;
216
+ if (targetNode && !targetNode.isParent && setting.data.keep.leaf && moveType === consts.move.TYPE_INNER) {
217
+ return null;
218
+ } else if (targetNode && ((node.parentTId == targetNode.tId && moveType == consts.move.TYPE_INNER) || $("#" + node.tId).find("#" + targetNode.tId).length > 0)) {
219
+ return null;
220
+ } else if (!targetNode) {
221
+ targetNode = null;
222
+ }
223
+ function moveCallback() {
224
+ view.moveNode(setting, targetNode, node, moveType, false, isSilent);
225
+ }
226
+ if (tools.canAsync(setting, targetNode)) {
227
+ view.asyncNode(setting, targetNode, isSilent, moveCallback);
228
+ } else {
229
+ moveCallback();
230
+ }
231
+ return node;
232
+ }
233
+ zTreeTools.setEditable = function(editable) {
234
+ setting.edit.enable = editable;
235
+ return this.refresh();
236
+ }
237
+ },
238
+ //method of operate data
239
+ _data = {
240
+ setSonNodeLevel: function(setting, parentNode, node) {
241
+ if (!node) return;
242
+ var childKey = setting.data.key.children;
243
+ node.level = (parentNode)? parentNode.level + 1 : 0;
244
+ if (!node[childKey]) return;
245
+ for (var i = 0, l = node[childKey].length; i < l; i++) {
246
+ if (node[childKey][i]) data.setSonNodeLevel(setting, node, node[childKey][i]);
247
+ }
248
+ }
249
+ },
250
+ //method of event proxy
251
+ _event = {
252
+
253
+ },
254
+ //method of event handler
255
+ _handler = {
256
+ onHoverOverNode: function(event, node) {
257
+ var setting = data.getSetting(event.data.treeId),
258
+ root = data.getRoot(setting);
259
+ if (root.curHoverNode != node) {
260
+ _handler.onHoverOutNode(event);
261
+ }
262
+ root.curHoverNode = node;
263
+ view.addHoverDom(setting, node);
264
+ },
265
+ onHoverOutNode: function(event, node) {
266
+ var setting = data.getSetting(event.data.treeId),
267
+ root = data.getRoot(setting);
268
+ if (root.curHoverNode && !data.isSelectedNode(setting, root.curHoverNode)) {
269
+ view.removeTreeDom(setting, root.curHoverNode);
270
+ root.curHoverNode = null;
271
+ }
272
+ },
273
+ onMousedownNode: function(eventMouseDown, _node) {
274
+ var i,l,
275
+ setting = data.getSetting(eventMouseDown.data.treeId),
276
+ root = data.getRoot(setting);
277
+ //right click can't drag & drop
278
+ if (eventMouseDown.button == 2 || !setting.edit.enable || (!setting.edit.drag.isCopy && !setting.edit.drag.isMove)) return true;
279
+
280
+ //input of edit node name can't drag & drop
281
+ var target = eventMouseDown.target,
282
+ _nodes = data.getRoot(setting).curSelectedList,
283
+ nodes = [];
284
+ if (!data.isSelectedNode(setting, _node)) {
285
+ nodes = [_node];
286
+ } else {
287
+ for (i=0, l=_nodes.length; i<l; i++) {
288
+ if (_nodes[i].editNameFlag && tools.eqs(target.tagName, "input") && target.getAttribute("treeNode"+consts.id.INPUT) !== null) {
289
+ return true;
290
+ }
291
+ nodes.push(_nodes[i]);
292
+ if (nodes[0].parentTId !== _nodes[i].parentTId) {
293
+ nodes = [_node];
294
+ break;
295
+ }
296
+ }
297
+ }
298
+
299
+ view.editNodeBlur = true;
300
+ view.cancelCurEditNode(setting, null, true);
301
+
302
+
303
+ var doc = $(document), curNode, tmpArrow, tmpTarget,
304
+ isOtherTree = false,
305
+ targetSetting = setting,
306
+ preNode, nextNode,
307
+ preTmpTargetNodeId = null,
308
+ preTmpMoveType = null,
309
+ tmpTargetNodeId = null,
310
+ moveType = consts.move.TYPE_INNER,
311
+ mouseDownX = eventMouseDown.clientX,
312
+ mouseDownY = eventMouseDown.clientY,
313
+ startTime = (new Date()).getTime();
314
+
315
+ if (tools.uCanDo(setting)) {
316
+ doc.bind("mousemove", _docMouseMove);
317
+ }
318
+ function _docMouseMove(event) {
319
+ //avoid start drag after click node
320
+ if (root.dragFlag == 0 && Math.abs(mouseDownX - event.clientX) < setting.edit.drag.minMoveSize
321
+ && Math.abs(mouseDownY - event.clientY) < setting.edit.drag.minMoveSize) {
322
+ return true;
323
+ }
324
+ var i, l, tmpNode, tmpDom, tmpNodes,
325
+ childKey = setting.data.key.children;
326
+ $("body").css("cursor", "pointer");
327
+
328
+ if (root.dragFlag == 0) {
329
+ if (tools.apply(setting.callback.beforeDrag, [setting.treeId, nodes], true) == false) {
330
+ _docMouseUp(event);
331
+ return true;
332
+ }
333
+
334
+ for (i=0, l=nodes.length; i<l; i++) {
335
+ if (i==0) {
336
+ root.dragNodeShowBefore = [];
337
+ }
338
+ tmpNode = nodes[i];
339
+ if (tmpNode.isParent && tmpNode.open) {
340
+ view.expandCollapseNode(setting, tmpNode, !tmpNode.open);
341
+ root.dragNodeShowBefore[tmpNode.tId] = true;
342
+ } else {
343
+ root.dragNodeShowBefore[tmpNode.tId] = false;
344
+ }
345
+ }
346
+
347
+ root.dragFlag = 1;
348
+ root.showHoverDom = false;
349
+ tools.showIfameMask(setting, true);
350
+
351
+ //sort
352
+ var isOrder = true, lastIndex = -1;
353
+ if (nodes.length>1) {
354
+ var pNodes = nodes[0].parentTId ? nodes[0].getParentNode()[childKey] : data.getNodes(setting);
355
+ tmpNodes = [];
356
+ for (i=0, l=pNodes.length; i<l; i++) {
357
+ if (root.dragNodeShowBefore[pNodes[i].tId] !== undefined) {
358
+ if (isOrder && lastIndex > -1 && (lastIndex+1) !== i) {
359
+ isOrder = false;
360
+ }
361
+ tmpNodes.push(pNodes[i]);
362
+ lastIndex = i;
363
+ }
364
+ if (nodes.length === tmpNodes.length) {
365
+ nodes = tmpNodes;
366
+ break;
367
+ }
368
+ }
369
+ }
370
+ if (isOrder) {
371
+ preNode = nodes[0].getPreNode();
372
+ nextNode = nodes[nodes.length-1].getNextNode();
373
+ }
374
+
375
+ //set node in selected
376
+ curNode = $("<ul class='zTreeDragUL'></ul>");
377
+ for (i=0, l=nodes.length; i<l; i++) {
378
+ tmpNode = nodes[i];
379
+ tmpNode.editNameFlag = false;
380
+ view.selectNode(setting, tmpNode, i>0);
381
+ view.removeTreeDom(setting, tmpNode);
382
+
383
+ tmpDom = $("<li id='"+ tmpNode.tId +"_tmp'></li>");
384
+ tmpDom.append($("#" + tmpNode.tId + consts.id.A).clone());
385
+ tmpDom.css("padding", "0");
386
+ tmpDom.children("#" + tmpNode.tId + consts.id.A).removeClass(consts.node.CURSELECTED);
387
+ curNode.append(tmpDom);
388
+ if (i == setting.edit.drag.maxShowNodeNum-1) {
389
+ tmpDom = $("<li id='"+ tmpNode.tId +"_moretmp'><a> ... </a></li>");
390
+ curNode.append(tmpDom);
391
+ break;
392
+ }
393
+ }
394
+ curNode.attr("id", nodes[0].tId + consts.id.UL + "_tmp");
395
+ curNode.addClass(setting.treeObj.attr("class"));
396
+ curNode.appendTo("body");
397
+
398
+ tmpArrow = $("<span class='tmpzTreeMove_arrow'></span>");
399
+ tmpArrow.attr("id", "zTreeMove_arrow_tmp");
400
+ tmpArrow.appendTo("body");
401
+
402
+ setting.treeObj.trigger(consts.event.DRAG, [event, setting.treeId, nodes]);
403
+ }
404
+
405
+ if (root.dragFlag == 1) {
406
+ if (tmpTarget && tmpArrow.attr("id") == event.target.id && tmpTargetNodeId && (event.clientX + doc.scrollLeft()+2) > ($("#" + tmpTargetNodeId + consts.id.A, tmpTarget).offset().left)) {
407
+ var xT = $("#" + tmpTargetNodeId + consts.id.A, tmpTarget);
408
+ event.target = (xT.length > 0) ? xT.get(0) : event.target;
409
+ } else if (tmpTarget) {
410
+ tmpTarget.removeClass(consts.node.TMPTARGET_TREE);
411
+ if (tmpTargetNodeId) $("#" + tmpTargetNodeId + consts.id.A, tmpTarget).removeClass(consts.node.TMPTARGET_NODE + "_" + consts.move.TYPE_PREV)
412
+ .removeClass(consts.node.TMPTARGET_NODE + "_" + _consts.move.TYPE_NEXT).removeClass(consts.node.TMPTARGET_NODE + "_" + _consts.move.TYPE_INNER);
413
+ }
414
+ tmpTarget = null;
415
+ tmpTargetNodeId = null;
416
+
417
+ //judge drag & drop in multi ztree
418
+ isOtherTree = false;
419
+ targetSetting = setting;
420
+ var settings = data.getSettings();
421
+ for (var s in settings) {
422
+ if (settings[s].treeId && settings[s].edit.enable && settings[s].treeId != setting.treeId
423
+ && (event.target.id == settings[s].treeId || $(event.target).parents("#" + settings[s].treeId).length>0)) {
424
+ isOtherTree = true;
425
+ targetSetting = settings[s];
426
+ }
427
+ }
428
+
429
+ var docScrollTop = doc.scrollTop(),
430
+ docScrollLeft = doc.scrollLeft(),
431
+ treeOffset = targetSetting.treeObj.offset(),
432
+ scrollHeight = targetSetting.treeObj.get(0).scrollHeight,
433
+ scrollWidth = targetSetting.treeObj.get(0).scrollWidth,
434
+ dTop = (event.clientY + docScrollTop - treeOffset.top),
435
+ dBottom = (targetSetting.treeObj.height() + treeOffset.top - event.clientY - docScrollTop),
436
+ dLeft = (event.clientX + docScrollLeft - treeOffset.left),
437
+ dRight = (targetSetting.treeObj.width() + treeOffset.left - event.clientX - docScrollLeft),
438
+ isTop = (dTop < setting.edit.drag.borderMax && dTop > setting.edit.drag.borderMin),
439
+ isBottom = (dBottom < setting.edit.drag.borderMax && dBottom > setting.edit.drag.borderMin),
440
+ isLeft = (dLeft < setting.edit.drag.borderMax && dLeft > setting.edit.drag.borderMin),
441
+ isRight = (dRight < setting.edit.drag.borderMax && dRight > setting.edit.drag.borderMin),
442
+ isTreeInner = dTop > setting.edit.drag.borderMin && dBottom > setting.edit.drag.borderMin && dLeft > setting.edit.drag.borderMin && dRight > setting.edit.drag.borderMin,
443
+ isTreeTop = (isTop && targetSetting.treeObj.scrollTop() <= 0),
444
+ isTreeBottom = (isBottom && (targetSetting.treeObj.scrollTop() + targetSetting.treeObj.height()+10) >= scrollHeight),
445
+ isTreeLeft = (isLeft && targetSetting.treeObj.scrollLeft() <= 0),
446
+ isTreeRight = (isRight && (targetSetting.treeObj.scrollLeft() + targetSetting.treeObj.width()+10) >= scrollWidth);
447
+
448
+ if (event.target.id && targetSetting.treeObj.find("#" + event.target.id).length > 0) {
449
+ //get node <li> dom
450
+ var targetObj = event.target;
451
+ while (targetObj && targetObj.tagName && !tools.eqs(targetObj.tagName, "li") && targetObj.id != targetSetting.treeId) {
452
+ targetObj = targetObj.parentNode;
453
+ }
454
+
455
+ var canMove = true;
456
+ //don't move to self or children of self
457
+ for (i=0, l=nodes.length; i<l; i++) {
458
+ tmpNode = nodes[i];
459
+ if (targetObj.id === tmpNode.tId) {
460
+ canMove = false;
461
+ break;
462
+ } else if ($("#" + tmpNode.tId).find("#" + targetObj.id).length > 0) {
463
+ canMove = false;
464
+ break;
465
+ }
466
+ }
467
+ if (canMove) {
468
+ if (event.target.id &&
469
+ (event.target.id == (targetObj.id + consts.id.A) || $(event.target).parents("#" + targetObj.id + consts.id.A).length > 0)) {
470
+ tmpTarget = $(targetObj);
471
+ tmpTargetNodeId = targetObj.id;
472
+ }
473
+ }
474
+ }
475
+
476
+ //the mouse must be in zTree
477
+ tmpNode = nodes[0];
478
+ if (isTreeInner && (event.target.id == targetSetting.treeId || $(event.target).parents("#" + targetSetting.treeId).length>0)) {
479
+ //judge mouse move in root of ztree
480
+ if (!tmpTarget && (event.target.id == targetSetting.treeId || isTreeTop || isTreeBottom || isTreeLeft || isTreeRight) && (isOtherTree || (!isOtherTree && tmpNode.parentTId))) {
481
+ tmpTarget = targetSetting.treeObj;
482
+ }
483
+ //auto scroll top
484
+ if (isTop) {
485
+ targetSetting.treeObj.scrollTop(targetSetting.treeObj.scrollTop()-10);
486
+ } else if (isBottom) {
487
+ targetSetting.treeObj.scrollTop(targetSetting.treeObj.scrollTop()+10);
488
+ }
489
+ if (isLeft) {
490
+ targetSetting.treeObj.scrollLeft(targetSetting.treeObj.scrollLeft()-10);
491
+ } else if (isRight) {
492
+ targetSetting.treeObj.scrollLeft(targetSetting.treeObj.scrollLeft()+10);
493
+ }
494
+ //auto scroll left
495
+ if (tmpTarget && tmpTarget != targetSetting.treeObj && tmpTarget.offset().left < targetSetting.treeObj.offset().left) {
496
+ targetSetting.treeObj.scrollLeft(targetSetting.treeObj.scrollLeft()+ tmpTarget.offset().left - targetSetting.treeObj.offset().left);
497
+ }
498
+ }
499
+
500
+ curNode.css({
501
+ "top": (event.clientY + docScrollTop + 3) + "px",
502
+ "left": (event.clientX + docScrollLeft + 3) + "px"
503
+ });
504
+
505
+ var dX = 0;
506
+ var dY = 0;
507
+ if (tmpTarget && tmpTarget.attr("id")!=targetSetting.treeId) {
508
+ var tmpTargetNode = tmpTargetNodeId == null ? null: data.getNodeCache(targetSetting, tmpTargetNodeId),
509
+ isCopy = (event.ctrlKey && setting.edit.drag.isMove && setting.edit.drag.isCopy) || (!setting.edit.drag.isMove && setting.edit.drag.isCopy),
510
+ isPrev = !!(preNode && tmpTargetNodeId === preNode.tId),
511
+ isNext = !!(nextNode && tmpTargetNodeId === nextNode.tId),
512
+ isInner = (tmpNode.parentTId && tmpNode.parentTId == tmpTargetNodeId),
513
+ canPrev = (isCopy || !isNext) && tools.apply(targetSetting.edit.drag.prev, [targetSetting.treeId, nodes, tmpTargetNode], !!targetSetting.edit.drag.prev),
514
+ canNext = (isCopy || !isPrev) && tools.apply(targetSetting.edit.drag.next, [targetSetting.treeId, nodes, tmpTargetNode], !!targetSetting.edit.drag.next),
515
+ canInner = (isCopy || !isInner) && !(targetSetting.data.keep.leaf && !tmpTargetNode.isParent) && tools.apply(targetSetting.edit.drag.inner, [targetSetting.treeId, nodes, tmpTargetNode], !!targetSetting.edit.drag.inner);
516
+ if (!canPrev && !canNext && !canInner) {
517
+ tmpTarget = null;
518
+ tmpTargetNodeId = "";
519
+ moveType = consts.move.TYPE_INNER;
520
+ tmpArrow.css({
521
+ "display":"none"
522
+ });
523
+ if (window.zTreeMoveTimer) {
524
+ clearTimeout(window.zTreeMoveTimer);
525
+ window.zTreeMoveTargetNodeTId = null
526
+ }
527
+ } else {
528
+ var tmpTargetA = $("#" + tmpTargetNodeId + consts.id.A, tmpTarget),
529
+ tmpNextA = tmpTargetNode.isLastNode ? null : $("#" + tmpTargetNode.getNextNode().tId + consts.id.A, tmpTarget.next()),
530
+ tmpTop = tmpTargetA.offset().top,
531
+ tmpLeft = tmpTargetA.offset().left,
532
+ prevPercent = canPrev ? (canInner ? 0.25 : (canNext ? 0.5 : 1) ) : -1,
533
+ nextPercent = canNext ? (canInner ? 0.75 : (canPrev ? 0.5 : 0) ) : -1,
534
+ dY_percent = (event.clientY + docScrollTop - tmpTop)/tmpTargetA.height();
535
+ if ((prevPercent==1 ||dY_percent<=prevPercent && dY_percent>=-.2) && canPrev) {
536
+ dX = 1 - tmpArrow.width();
537
+ dY = tmpTop - tmpArrow.height()/2;
538
+ moveType = consts.move.TYPE_PREV;
539
+ } else if ((nextPercent==0 || dY_percent>=nextPercent && dY_percent<=1.2) && canNext) {
540
+ dX = 1 - tmpArrow.width();
541
+ dY = (tmpNextA == null || (tmpTargetNode.isParent && tmpTargetNode.open)) ? (tmpTop + tmpTargetA.height() - tmpArrow.height()/2) : (tmpNextA.offset().top - tmpArrow.height()/2);
542
+ moveType = consts.move.TYPE_NEXT;
543
+ }else {
544
+ dX = 5 - tmpArrow.width();
545
+ dY = tmpTop;
546
+ moveType = consts.move.TYPE_INNER;
547
+ }
548
+ tmpArrow.css({
549
+ "display":"block",
550
+ "top": dY + "px",
551
+ "left": (tmpLeft + dX) + "px"
552
+ });
553
+ tmpTargetA.addClass(consts.node.TMPTARGET_NODE + "_" + moveType);
554
+
555
+ if (preTmpTargetNodeId != tmpTargetNodeId || preTmpMoveType != moveType) {
556
+ startTime = (new Date()).getTime();
557
+ }
558
+ if (tmpTargetNode && tmpTargetNode.isParent && moveType == consts.move.TYPE_INNER) {
559
+ var startTimer = true;
560
+ if (window.zTreeMoveTimer && window.zTreeMoveTargetNodeTId !== tmpTargetNode.tId) {
561
+ clearTimeout(window.zTreeMoveTimer);
562
+ window.zTreeMoveTargetNodeTId = null;
563
+ } else if (window.zTreeMoveTimer && window.zTreeMoveTargetNodeTId === tmpTargetNode.tId) {
564
+ startTimer = false;
565
+ }
566
+ if (startTimer) {
567
+ window.zTreeMoveTimer = setTimeout(function() {
568
+ if (moveType != consts.move.TYPE_INNER) return;
569
+ if (tmpTargetNode && tmpTargetNode.isParent && !tmpTargetNode.open && (new Date()).getTime() - startTime > targetSetting.edit.drag.autoOpenTime
570
+ && tools.apply(targetSetting.callback.beforeDragOpen, [targetSetting.treeId, tmpTargetNode], true)) {
571
+ view.switchNode(targetSetting, tmpTargetNode);
572
+ if (targetSetting.edit.drag.autoExpandTrigger) {
573
+ targetSetting.treeObj.trigger(consts.event.EXPAND, [targetSetting.treeId, tmpTargetNode]);
574
+ }
575
+ }
576
+ }, targetSetting.edit.drag.autoOpenTime+50);
577
+ window.zTreeMoveTargetNodeTId = tmpTargetNode.tId;
578
+ }
579
+ }
580
+ }
581
+ } else {
582
+ moveType = consts.move.TYPE_INNER;
583
+ if (tmpTarget && tools.apply(targetSetting.edit.drag.inner, [targetSetting.treeId, nodes, null], !!targetSetting.edit.drag.inner)) {
584
+ tmpTarget.addClass(consts.node.TMPTARGET_TREE);
585
+ } else {
586
+ tmpTarget = null;
587
+ }
588
+ tmpArrow.css({
589
+ "display":"none"
590
+ });
591
+ if (window.zTreeMoveTimer) {
592
+ clearTimeout(window.zTreeMoveTimer);
593
+ window.zTreeMoveTargetNodeTId = null;
594
+ }
595
+ }
596
+ preTmpTargetNodeId = tmpTargetNodeId;
597
+ preTmpMoveType = moveType;
598
+ }
599
+ return false;
600
+ }
601
+
602
+ doc.bind("mouseup", _docMouseUp);
603
+ function _docMouseUp(event) {
604
+ if (window.zTreeMoveTimer) {
605
+ clearTimeout(window.zTreeMoveTimer);
606
+ window.zTreeMoveTargetNodeTId = null;
607
+ }
608
+ preTmpTargetNodeId = null;
609
+ preTmpMoveType = null;
610
+ doc.unbind("mousemove", _docMouseMove);
611
+ doc.unbind("mouseup", _docMouseUp);
612
+ doc.unbind("selectstart", _docSelect);
613
+ $("body").css("cursor", "auto");
614
+ if (tmpTarget) {
615
+ tmpTarget.removeClass(consts.node.TMPTARGET_TREE);
616
+ if (tmpTargetNodeId) $("#" + tmpTargetNodeId + consts.id.A, tmpTarget).removeClass(consts.node.TMPTARGET_NODE + "_" + consts.move.TYPE_PREV)
617
+ .removeClass(consts.node.TMPTARGET_NODE + "_" + _consts.move.TYPE_NEXT).removeClass(consts.node.TMPTARGET_NODE + "_" + _consts.move.TYPE_INNER);
618
+ }
619
+ tools.showIfameMask(setting, false);
620
+
621
+ root.showHoverDom = true;
622
+ if (root.dragFlag == 0) return;
623
+ root.dragFlag = 0;
624
+
625
+ var i, l, tmpNode;
626
+ for (i=0, l=nodes.length; i<l; i++) {
627
+ tmpNode = nodes[i];
628
+ if (tmpNode.isParent && root.dragNodeShowBefore[tmpNode.tId] && !tmpNode.open) {
629
+ view.expandCollapseNode(setting, tmpNode, !tmpNode.open);
630
+ delete root.dragNodeShowBefore[tmpNode.tId];
631
+ }
632
+ }
633
+
634
+ if (curNode) curNode.remove();
635
+ if (tmpArrow) tmpArrow.remove();
636
+
637
+ var isCopy = (event.ctrlKey && setting.edit.drag.isMove && setting.edit.drag.isCopy) || (!setting.edit.drag.isMove && setting.edit.drag.isCopy);
638
+ if (!isCopy && tmpTarget && tmpTargetNodeId && nodes[0].parentTId && tmpTargetNodeId==nodes[0].parentTId && moveType == consts.move.TYPE_INNER) {
639
+ tmpTarget = null;
640
+ }
641
+ if (tmpTarget) {
642
+ var dragTargetNode = tmpTargetNodeId == null ? null: data.getNodeCache(targetSetting, tmpTargetNodeId);
643
+ if (tools.apply(setting.callback.beforeDrop, [targetSetting.treeId, nodes, dragTargetNode, moveType, isCopy], true) == false) return;
644
+ var newNodes = isCopy ? tools.clone(nodes) : nodes;
645
+
646
+ function dropCallback() {
647
+ if (isOtherTree) {
648
+ if (!isCopy) {
649
+ for(var i=0, l=nodes.length; i<l; i++) {
650
+ view.removeNode(setting, nodes[i]);
651
+ }
652
+ }
653
+ if (moveType == consts.move.TYPE_INNER) {
654
+ view.addNodes(targetSetting, dragTargetNode, newNodes);
655
+ } else {
656
+ view.addNodes(targetSetting, dragTargetNode.getParentNode(), newNodes);
657
+ if (moveType == consts.move.TYPE_PREV) {
658
+ for (i=0, l=newNodes.length; i<l; i++) {
659
+ view.moveNode(targetSetting, dragTargetNode, newNodes[i], moveType, false);
660
+ }
661
+ } else {
662
+ for (i=-1, l=newNodes.length-1; i<l; l--) {
663
+ view.moveNode(targetSetting, dragTargetNode, newNodes[l], moveType, false);
664
+ }
665
+ }
666
+ }
667
+ } else {
668
+ if (isCopy && moveType == consts.move.TYPE_INNER) {
669
+ view.addNodes(targetSetting, dragTargetNode, newNodes);
670
+ } else {
671
+ if (isCopy) {
672
+ view.addNodes(targetSetting, dragTargetNode.getParentNode(), newNodes);
673
+ }
674
+ if (moveType != consts.move.TYPE_NEXT) {
675
+ for (i=0, l=newNodes.length; i<l; i++) {
676
+ view.moveNode(targetSetting, dragTargetNode, newNodes[i], moveType, false);
677
+ }
678
+ } else {
679
+ for (i=-1, l=newNodes.length-1; i<l; l--) {
680
+ view.moveNode(targetSetting, dragTargetNode, newNodes[l], moveType, false);
681
+ }
682
+ }
683
+ }
684
+ }
685
+ for (i=0, l=newNodes.length; i<l; i++) {
686
+ view.selectNode(targetSetting, newNodes[i], i>0);
687
+ }
688
+ $("#" + newNodes[0].tId).focus().blur();
689
+
690
+ setting.treeObj.trigger(consts.event.DROP, [event, targetSetting.treeId, newNodes, dragTargetNode, moveType, isCopy]);
691
+ }
692
+
693
+ if (moveType == consts.move.TYPE_INNER && tools.canAsync(targetSetting, dragTargetNode)) {
694
+ view.asyncNode(targetSetting, dragTargetNode, false, dropCallback);
695
+ } else {
696
+ dropCallback();
697
+ }
698
+
699
+ } else {
700
+ for (i=0, l=nodes.length; i<l; i++) {
701
+ view.selectNode(targetSetting, nodes[i], i>0);
702
+ }
703
+ setting.treeObj.trigger(consts.event.DROP, [event, setting.treeId, nodes, null, null, null]);
704
+ }
705
+ }
706
+
707
+ doc.bind("selectstart", _docSelect);
708
+ function _docSelect() {
709
+ return false;
710
+ }
711
+
712
+ //Avoid FireFox's Bug
713
+ //If zTree Div CSS set 'overflow', so drag node outside of zTree, and event.target is error.
714
+ if(eventMouseDown.preventDefault) {
715
+ eventMouseDown.preventDefault();
716
+ }
717
+ return true;
718
+ }
719
+ },
720
+ //method of tools for zTree
721
+ _tools = {
722
+ getAbs: function (obj) {
723
+ var oRect = obj.getBoundingClientRect();
724
+ return [oRect.left,oRect.top]
725
+ },
726
+ inputFocus: function(inputObj) {
727
+ if (inputObj.get(0)) {
728
+ inputObj.focus();
729
+ tools.setCursorPosition(inputObj.get(0), inputObj.val().length);
730
+ }
731
+ },
732
+ inputSelect: function(inputObj) {
733
+ if (inputObj.get(0)) {
734
+ inputObj.focus();
735
+ inputObj.select();
736
+ }
737
+ },
738
+ setCursorPosition: function(obj, pos){
739
+ if(obj.setSelectionRange) {
740
+ obj.focus();
741
+ obj.setSelectionRange(pos,pos);
742
+ } else if (obj.createTextRange) {
743
+ var range = obj.createTextRange();
744
+ range.collapse(true);
745
+ range.moveEnd('character', pos);
746
+ range.moveStart('character', pos);
747
+ range.select();
748
+ }
749
+ },
750
+ showIfameMask: function(setting, showSign) {
751
+ var root = data.getRoot(setting);
752
+ //clear full mask
753
+ while (root.dragMaskList.length > 0) {
754
+ root.dragMaskList[0].remove();
755
+ root.dragMaskList.shift();
756
+ }
757
+ if (showSign) {
758
+ //show mask
759
+ var iframeList = $("iframe");
760
+ for (var i = 0, l = iframeList.length; i < l; i++) {
761
+ var obj = iframeList.get(i),
762
+ r = tools.getAbs(obj),
763
+ dragMask = $("<div id='zTreeMask_" + i + "' class='zTreeMask' style='top:" + r[1] + "px; left:" + r[0] + "px; width:" + obj.offsetWidth + "px; height:" + obj.offsetHeight + "px;'></div>");
764
+ dragMask.appendTo("body");
765
+ root.dragMaskList.push(dragMask);
766
+ }
767
+ }
768
+ }
769
+ },
770
+ //method of operate ztree dom
771
+ _view = {
772
+ addEditBtn: function(setting, node) {
773
+ if (node.editNameFlag || $("#" + node.tId + consts.id.EDIT).length > 0) {
774
+ return;
775
+ }
776
+ if (!tools.apply(setting.edit.showRenameBtn, [setting.treeId, node], setting.edit.showRenameBtn)) {
777
+ return;
778
+ }
779
+ var aObj = $("#" + node.tId + consts.id.A),
780
+ editStr = "<span class='button edit' id='" + node.tId + consts.id.EDIT + "' title='"+tools.apply(setting.edit.renameTitle, [setting.treeId, node], setting.edit.renameTitle)+"' treeNode"+consts.id.EDIT+" style='display:none;'></span>";
781
+ aObj.append(editStr);
782
+
783
+ $("#" + node.tId + consts.id.EDIT).bind('click',
784
+ function() {
785
+ if (!tools.uCanDo(setting) || tools.apply(setting.callback.beforeEditName, [setting.treeId, node], true) == false) return false;
786
+ view.editNode(setting, node);
787
+ return false;
788
+ }
789
+ ).show();
790
+ },
791
+ addRemoveBtn: function(setting, node) {
792
+ if (node.editNameFlag || $("#" + node.tId + consts.id.REMOVE).length > 0) {
793
+ return;
794
+ }
795
+ if (!tools.apply(setting.edit.showRemoveBtn, [setting.treeId, node], setting.edit.showRemoveBtn)) {
796
+ return;
797
+ }
798
+ var aObj = $("#" + node.tId + consts.id.A),
799
+ removeStr = "<span class='button remove' id='" + node.tId + consts.id.REMOVE + "' title='"+tools.apply(setting.edit.removeTitle, [setting.treeId, node], setting.edit.removeTitle)+"' treeNode"+consts.id.REMOVE+" style='display:none;'></span>";
800
+ aObj.append(removeStr);
801
+
802
+ $("#" + node.tId + consts.id.REMOVE).bind('click',
803
+ function() {
804
+ if (!tools.uCanDo(setting) || tools.apply(setting.callback.beforeRemove, [setting.treeId, node], true) == false) return false;
805
+ view.removeNode(setting, node);
806
+ setting.treeObj.trigger(consts.event.REMOVE, [setting.treeId, node]);
807
+ return false;
808
+ }
809
+ ).bind('mousedown',
810
+ function(eventMouseDown) {
811
+ return true;
812
+ }
813
+ ).show();
814
+ },
815
+ addHoverDom: function(setting, node) {
816
+ if (data.getRoot(setting).showHoverDom) {
817
+ node.isHover = true;
818
+ if (setting.edit.enable) {
819
+ view.addEditBtn(setting, node);
820
+ view.addRemoveBtn(setting, node);
821
+ }
822
+ tools.apply(setting.view.addHoverDom, [setting.treeId, node]);
823
+ }
824
+ },
825
+ cancelCurEditNode: function (setting, forceName) {
826
+ var root = data.getRoot(setting),
827
+ nameKey = setting.data.key.name,
828
+ node = root.curEditNode;
829
+
830
+ if (node) {
831
+ var inputObj = root.curEditInput;
832
+ var newName = forceName ? forceName:inputObj.val();
833
+ if (!forceName && tools.apply(setting.callback.beforeRename, [setting.treeId, node, newName], true) === false) {
834
+ return false;
835
+ } else {
836
+ node[nameKey] = newName ? newName:inputObj.val();
837
+ if (!forceName) {
838
+ setting.treeObj.trigger(consts.event.RENAME, [setting.treeId, node]);
839
+ }
840
+ }
841
+ var aObj = $("#" + node.tId + consts.id.A);
842
+ aObj.removeClass(consts.node.CURSELECTED_EDIT);
843
+ inputObj.unbind();
844
+ view.setNodeName(setting, node);
845
+ node.editNameFlag = false;
846
+ root.curEditNode = null;
847
+ root.curEditInput = null;
848
+ view.selectNode(setting, node, false);
849
+ }
850
+ root.noSelection = true;
851
+ return true;
852
+ },
853
+ editNode: function(setting, node) {
854
+ var root = data.getRoot(setting);
855
+ view.editNodeBlur = false;
856
+ if (data.isSelectedNode(setting, node) && root.curEditNode == node && node.editNameFlag) {
857
+ setTimeout(function() {tools.inputFocus(root.curEditInput);}, 0);
858
+ return;
859
+ }
860
+ var nameKey = setting.data.key.name;
861
+ node.editNameFlag = true;
862
+ view.removeTreeDom(setting, node);
863
+ view.cancelCurEditNode(setting);
864
+ view.selectNode(setting, node, false);
865
+ $("#" + node.tId + consts.id.SPAN).html("<input type=text class='rename' id='" + node.tId + consts.id.INPUT + "' treeNode" + consts.id.INPUT + " >");
866
+ var inputObj = $("#" + node.tId + consts.id.INPUT);
867
+ inputObj.attr("value", node[nameKey]);
868
+ if (setting.edit.editNameSelectAll) {
869
+ tools.inputSelect(inputObj);
870
+ } else {
871
+ tools.inputFocus(inputObj);
872
+ }
873
+
874
+ inputObj.bind('blur', function(event) {
875
+ if (!view.editNodeBlur) {
876
+ view.cancelCurEditNode(setting);
877
+ }
878
+ }).bind('keydown', function(event) {
879
+ if (event.keyCode=="13") {
880
+ view.editNodeBlur = true;
881
+ view.cancelCurEditNode(setting, null, true);
882
+ } else if (event.keyCode=="27") {
883
+ view.cancelCurEditNode(setting, node[nameKey]);
884
+ }
885
+ }).bind('click', function(event) {
886
+ return false;
887
+ }).bind('dblclick', function(event) {
888
+ return false;
889
+ });
890
+
891
+ $("#" + node.tId + consts.id.A).addClass(consts.node.CURSELECTED_EDIT);
892
+ root.curEditInput = inputObj;
893
+ root.noSelection = false;
894
+ root.curEditNode = node;
895
+ },
896
+ moveNode: function(setting, targetNode, node, moveType, animateFlag, isSilent) {
897
+ var root = data.getRoot(setting),
898
+ childKey = setting.data.key.children;
899
+ if (targetNode == node) return;
900
+ if (setting.data.keep.leaf && targetNode && !targetNode.isParent && moveType == consts.move.TYPE_INNER) return;
901
+ var oldParentNode = (node.parentTId ? node.getParentNode(): root),
902
+ targetNodeIsRoot = (targetNode === null || targetNode == root);
903
+ if (targetNodeIsRoot && targetNode === null) targetNode = root;
904
+ if (targetNodeIsRoot) moveType = consts.move.TYPE_INNER;
905
+ var targetParentNode = (targetNode.parentTId ? targetNode.getParentNode() : root);
906
+
907
+ if (moveType != consts.move.TYPE_PREV && moveType != consts.move.TYPE_NEXT) {
908
+ moveType = consts.move.TYPE_INNER;
909
+ }
910
+
911
+ if (moveType == consts.move.TYPE_INNER) {
912
+ if (targetNodeIsRoot) {
913
+ //parentTId of root node is null
914
+ node.parentTId = null;
915
+ } else {
916
+ if (!targetNode.isParent) {
917
+ targetNode.isParent = true;
918
+ targetNode.open = !!targetNode.open;
919
+ view.setNodeLineIcos(setting, targetNode);
920
+ }
921
+ node.parentTId = targetNode.tId;
922
+ }
923
+ }
924
+
925
+ //move node Dom
926
+ var targetObj, target_ulObj;
927
+ if (targetNodeIsRoot) {
928
+ targetObj = setting.treeObj;
929
+ target_ulObj = targetObj;
930
+ } else {
931
+ if (!isSilent && moveType == consts.move.TYPE_INNER) {
932
+ view.expandCollapseNode(setting, targetNode, true, false);
933
+ } else if (!isSilent) {
934
+ view.expandCollapseNode(setting, targetNode.getParentNode(), true, false);
935
+ }
936
+ targetObj = $("#" + targetNode.tId);
937
+ target_ulObj = $("#" + targetNode.tId + consts.id.UL);
938
+ if (!!targetObj.get(0) && !target_ulObj.get(0)) {
939
+ var ulstr = [];
940
+ view.makeUlHtml(setting, targetNode, ulstr, '');
941
+ targetObj.append(ulstr.join(''));
942
+ }
943
+ target_ulObj = $("#" + targetNode.tId + consts.id.UL);
944
+ }
945
+ var nodeDom = $("#" + node.tId);
946
+ if (!nodeDom.get(0)) {
947
+ nodeDom = view.appendNodes(setting, node.level, [node], null, false, true).join('');
948
+ } else if (!targetObj.get(0)) {
949
+ nodeDom.remove();
950
+ }
951
+ if (target_ulObj.get(0) && moveType == consts.move.TYPE_INNER) {
952
+ target_ulObj.append(nodeDom);
953
+ } else if (targetObj.get(0) && moveType == consts.move.TYPE_PREV) {
954
+ targetObj.before(nodeDom);
955
+ } else if (targetObj.get(0) && moveType == consts.move.TYPE_NEXT) {
956
+ targetObj.after(nodeDom);
957
+ }
958
+
959
+ //repair the data after move
960
+ var i,l,
961
+ tmpSrcIndex = -1,
962
+ tmpTargetIndex = 0,
963
+ oldNeighbor = null,
964
+ newNeighbor = null,
965
+ oldLevel = node.level;
966
+ if (node.isFirstNode) {
967
+ tmpSrcIndex = 0;
968
+ if (oldParentNode[childKey].length > 1 ) {
969
+ oldNeighbor = oldParentNode[childKey][1];
970
+ oldNeighbor.isFirstNode = true;
971
+ }
972
+ } else if (node.isLastNode) {
973
+ tmpSrcIndex = oldParentNode[childKey].length -1;
974
+ oldNeighbor = oldParentNode[childKey][tmpSrcIndex - 1];
975
+ oldNeighbor.isLastNode = true;
976
+ } else {
977
+ for (i = 0, l = oldParentNode[childKey].length; i < l; i++) {
978
+ if (oldParentNode[childKey][i].tId == node.tId) {
979
+ tmpSrcIndex = i;
980
+ break;
981
+ }
982
+ }
983
+ }
984
+ if (tmpSrcIndex >= 0) {
985
+ oldParentNode[childKey].splice(tmpSrcIndex, 1);
986
+ }
987
+ if (moveType != consts.move.TYPE_INNER) {
988
+ for (i = 0, l = targetParentNode[childKey].length; i < l; i++) {
989
+ if (targetParentNode[childKey][i].tId == targetNode.tId) tmpTargetIndex = i;
990
+ }
991
+ }
992
+ if (moveType == consts.move.TYPE_INNER) {
993
+ if (!targetNode[childKey]) targetNode[childKey] = new Array();
994
+ if (targetNode[childKey].length > 0) {
995
+ newNeighbor = targetNode[childKey][targetNode[childKey].length - 1];
996
+ newNeighbor.isLastNode = false;
997
+ }
998
+ targetNode[childKey].splice(targetNode[childKey].length, 0, node);
999
+ node.isLastNode = true;
1000
+ node.isFirstNode = (targetNode[childKey].length == 1);
1001
+ } else if (targetNode.isFirstNode && moveType == consts.move.TYPE_PREV) {
1002
+ targetParentNode[childKey].splice(tmpTargetIndex, 0, node);
1003
+ newNeighbor = targetNode;
1004
+ newNeighbor.isFirstNode = false;
1005
+ node.parentTId = targetNode.parentTId;
1006
+ node.isFirstNode = true;
1007
+ node.isLastNode = false;
1008
+
1009
+ } else if (targetNode.isLastNode && moveType == consts.move.TYPE_NEXT) {
1010
+ targetParentNode[childKey].splice(tmpTargetIndex + 1, 0, node);
1011
+ newNeighbor = targetNode;
1012
+ newNeighbor.isLastNode = false;
1013
+ node.parentTId = targetNode.parentTId;
1014
+ node.isFirstNode = false;
1015
+ node.isLastNode = true;
1016
+
1017
+ } else {
1018
+ if (moveType == consts.move.TYPE_PREV) {
1019
+ targetParentNode[childKey].splice(tmpTargetIndex, 0, node);
1020
+ } else {
1021
+ targetParentNode[childKey].splice(tmpTargetIndex + 1, 0, node);
1022
+ }
1023
+ node.parentTId = targetNode.parentTId;
1024
+ node.isFirstNode = false;
1025
+ node.isLastNode = false;
1026
+ }
1027
+ data.fixPIdKeyValue(setting, node);
1028
+ data.setSonNodeLevel(setting, node.getParentNode(), node);
1029
+
1030
+ //repair node what been moved
1031
+ view.setNodeLineIcos(setting, node);
1032
+ view.repairNodeLevelClass(setting, node, oldLevel)
1033
+
1034
+ //repair node's old parentNode dom
1035
+ if (!setting.data.keep.parent && oldParentNode[childKey].length < 1) {
1036
+ //old parentNode has no child nodes
1037
+ oldParentNode.isParent = false;
1038
+ oldParentNode.open = false;
1039
+ var tmp_ulObj = $("#" + oldParentNode.tId + consts.id.UL),
1040
+ tmp_switchObj = $("#" + oldParentNode.tId + consts.id.SWITCH),
1041
+ tmp_icoObj = $("#" + oldParentNode.tId + consts.id.ICON);
1042
+ view.replaceSwitchClass(oldParentNode, tmp_switchObj, consts.folder.DOCU);
1043
+ view.replaceIcoClass(oldParentNode, tmp_icoObj, consts.folder.DOCU);
1044
+ tmp_ulObj.css("display", "none");
1045
+
1046
+ } else if (oldNeighbor) {
1047
+ //old neigbor node
1048
+ view.setNodeLineIcos(setting, oldNeighbor);
1049
+ }
1050
+
1051
+ //new neigbor node
1052
+ if (newNeighbor) {
1053
+ view.setNodeLineIcos(setting, newNeighbor);
1054
+ }
1055
+
1056
+ //repair checkbox / radio
1057
+ if (!!setting.check && setting.check.enable && view.repairChkClass) {
1058
+ view.repairChkClass(setting, oldParentNode);
1059
+ view.repairParentChkClassWithSelf(setting, oldParentNode);
1060
+ if (oldParentNode != node.parent)
1061
+ view.repairParentChkClassWithSelf(setting, node);
1062
+ }
1063
+
1064
+ //expand parents after move
1065
+ if (!isSilent) {
1066
+ view.expandCollapseParentNode(setting, node.getParentNode(), true, animateFlag);
1067
+ }
1068
+ },
1069
+ removeEditBtn: function(node) {
1070
+ $("#" + node.tId + consts.id.EDIT).unbind().remove();
1071
+ },
1072
+ removeRemoveBtn: function(node) {
1073
+ $("#" + node.tId + consts.id.REMOVE).unbind().remove();
1074
+ },
1075
+ removeTreeDom: function(setting, node) {
1076
+ node.isHover = false;
1077
+ view.removeEditBtn(node);
1078
+ view.removeRemoveBtn(node);
1079
+ tools.apply(setting.view.removeHoverDom, [setting.treeId, node]);
1080
+ },
1081
+ repairNodeLevelClass: function(setting, node, oldLevel) {
1082
+ if (oldLevel === node.level) return;
1083
+ var liObj = $("#" + node.tId),
1084
+ aObj = $("#" + node.tId + consts.id.A),
1085
+ ulObj = $("#" + node.tId + consts.id.UL),
1086
+ oldClass = "level" + oldLevel,
1087
+ newClass = "level" + node.level;
1088
+ liObj.removeClass(oldClass);
1089
+ liObj.addClass(newClass);
1090
+ aObj.removeClass(oldClass);
1091
+ aObj.addClass(newClass);
1092
+ ulObj.removeClass(oldClass);
1093
+ ulObj.addClass(newClass);
1094
+ }
1095
+ },
1096
+
1097
+ _z = {
1098
+ tools: _tools,
1099
+ view: _view,
1100
+ event: _event,
1101
+ data: _data
1102
+ };
1103
+ $.extend(true, $.fn.zTree.consts, _consts);
1104
+ $.extend(true, $.fn.zTree._z, _z);
1105
+
1106
+ var zt = $.fn.zTree,
1107
+ tools = zt._z.tools,
1108
+ consts = zt.consts,
1109
+ view = zt._z.view,
1110
+ data = zt._z.data,
1111
+ event = zt._z.event;
1112
+
1113
+ data.exSetting(_setting);
1114
+ data.addInitBind(_bindEvent);
1115
+ data.addInitUnBind(_unbindEvent);
1116
+ data.addInitCache(_initCache);
1117
+ data.addInitNode(_initNode);
1118
+ data.addInitProxy(_eventProxy);
1119
+ data.addInitRoot(_initRoot);
1120
+ data.addZTreeTools(_zTreeTools);
1121
+
1122
+ var _cancelPreSelectedNode = view.cancelPreSelectedNode;
1123
+ view.cancelPreSelectedNode = function (setting, node) {
1124
+ var list = data.getRoot(setting).curSelectedList;
1125
+ for (var i=0, j=list.length; i<j; i++) {
1126
+ if (!node || node === list[i]) {
1127
+ view.removeTreeDom(setting, list[i]);
1128
+ if (node) break;
1129
+ }
1130
+ }
1131
+ if (_cancelPreSelectedNode) _cancelPreSelectedNode.apply(view, arguments);
1132
+ }
1133
+
1134
+ var _createNodes = view.createNodes;
1135
+ view.createNodes = function(setting, level, nodes, parentNode) {
1136
+ if (_createNodes) {
1137
+ _createNodes.apply(view, arguments);
1138
+ }
1139
+ if (!nodes) return;
1140
+ if (view.repairParentChkClassWithSelf) {
1141
+ view.repairParentChkClassWithSelf(setting, parentNode);
1142
+ }
1143
+ }
1144
+
1145
+ var _makeNodeUrl = view.makeNodeUrl;
1146
+ view.makeNodeUrl = function(setting, node) {
1147
+ return setting.edit.enable ? null : (_makeNodeUrl.apply(view, arguments));
1148
+ }
1149
+
1150
+ var _removeNode = view.removeNode;
1151
+ view.removeNode = function(setting, node) {
1152
+ var root = data.getRoot(setting);
1153
+ if (root.curEditNode === node) root.curEditNode = null;
1154
+ if (_removeNode) {
1155
+ _removeNode.apply(view, arguments);
1156
+ }
1157
+ }
1158
+
1159
+ var _selectNode = view.selectNode;
1160
+ view.selectNode = function(setting, node, addFlag) {
1161
+ var root = data.getRoot(setting);
1162
+ if (data.isSelectedNode(setting, node) && root.curEditNode == node && node.editNameFlag) {
1163
+ return false;
1164
+ }
1165
+ if (_selectNode) _selectNode.apply(view, arguments);
1166
+ view.addHoverDom(setting, node);
1167
+ return true;
1168
+ }
1169
+
1170
+ var _uCanDo = tools.uCanDo;
1171
+ tools.uCanDo = function(setting, e) {
1172
+ var root = data.getRoot(setting);
1173
+ if (e && (tools.eqs(e.type, "mouseover") || tools.eqs(e.type, "mouseout") || tools.eqs(e.type, "mousedown") || tools.eqs(e.type, "mouseup"))) {
1174
+ return true;
1175
+ }
1176
+ return (!root.curEditNode) && (_uCanDo ? _uCanDo.apply(view, arguments) : true);
1177
+ }
1178
+ })(jQuery);