engine-rea-admin 0.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (47) hide show
  1. data/Gemfile +44 -0
  2. data/Gemfile.lock +264 -0
  3. data/MIT-LICENSE +20 -0
  4. data/README.rdoc +3 -0
  5. data/Rakefile +48 -0
  6. data/VERSION +1 -0
  7. data/app/assets/images/engine-rea-admin/.gitkeep +0 -0
  8. data/app/assets/images/zTreeStyle/img/diy/1_close.png +0 -0
  9. data/app/assets/images/zTreeStyle/img/diy/1_open.png +0 -0
  10. data/app/assets/images/zTreeStyle/img/diy/2.png +0 -0
  11. data/app/assets/images/zTreeStyle/img/diy/3.png +0 -0
  12. data/app/assets/images/zTreeStyle/img/diy/4.png +0 -0
  13. data/app/assets/images/zTreeStyle/img/diy/5.png +0 -0
  14. data/app/assets/images/zTreeStyle/img/diy/6.png +0 -0
  15. data/app/assets/images/zTreeStyle/img/diy/7.png +0 -0
  16. data/app/assets/images/zTreeStyle/img/diy/8.png +0 -0
  17. data/app/assets/images/zTreeStyle/img/diy/9.png +0 -0
  18. data/app/assets/images/zTreeStyle/img/line_conn.gif +0 -0
  19. data/app/assets/images/zTreeStyle/img/loading.gif +0 -0
  20. data/app/assets/images/zTreeStyle/img/zTreeStandard.gif +0 -0
  21. data/app/assets/images/zTreeStyle/img/zTreeStandard.png +0 -0
  22. data/app/assets/javascripts/engine-rea-admin/application.js +15 -0
  23. data/app/assets/javascripts/jquery.ztree.all-3.3.js +3392 -0
  24. data/app/assets/stylesheets/engine-rea-admin/application.css +13 -0
  25. data/app/assets/stylesheets/tree.css +2 -0
  26. data/app/assets/stylesheets/zTreeStyle/zTreeStyle.css +97 -0
  27. data/app/controllers/engine-rea-admin/application_controller.rb +4 -0
  28. data/app/helpers/engine-rea-admin/application_helper.rb +4 -0
  29. data/app/views/layouts/engine-rea-admin/application.html.erb +14 -0
  30. data/config/locales/en.yml +6 -0
  31. data/config/locales/zh-CN.yml +32 -0
  32. data/config/routes.rb +2 -0
  33. data/engine-rea-admin.gemspec +264 -0
  34. data/lib/engine-rea-admin/admin/category.rb +4 -0
  35. data/lib/engine-rea-admin/admin/category_type.rb +10 -0
  36. data/lib/engine-rea-admin/admin/entities.rb +5 -0
  37. data/lib/engine-rea-admin/admin/group.rb +76 -0
  38. data/lib/engine-rea-admin/admin/group_type.rb +18 -0
  39. data/lib/engine-rea-admin/admin/identifier.rb +9 -0
  40. data/lib/engine-rea-admin/admin/processes.rb +5 -0
  41. data/lib/engine-rea-admin/engine.rb +16 -0
  42. data/lib/engine-rea-admin/inputs.rb +27 -0
  43. data/lib/engine-rea-admin/version.rb +3 -0
  44. data/lib/engine-rea-admin.rb +5 -0
  45. data/lib/tasks/engine-rea-admin_tasks.rake +4 -0
  46. data/script/rails +8 -0
  47. metadata +1071 -0
data/Gemfile ADDED
@@ -0,0 +1,44 @@
1
+ source "http://ruby.taobao.org"
2
+
3
+ # Declare your gem's dependencies in engine-rea-admin.gemspec.
4
+ # Bundler will treat runtime dependencies like base dependencies, and
5
+ # development dependencies will be added by default to the :development group.
6
+ gemspec
7
+
8
+ # jquery-rails is used by the dummy application
9
+ gem "jquery-rails"
10
+ gem "activeadmin", :github=>"lazing/active_admin", :branch=>'0.4.x-stable'
11
+ gem "engine-rea", :path=>"../rea"
12
+
13
+ # Gems used only for assets and not required
14
+ # in production environments by default.
15
+ group :assets do
16
+ gem 'sass-rails'
17
+ gem 'coffee-rails'
18
+ gem 'execjs', :git=>'https://github.com/sstephenson/execjs.git'
19
+ gem 'uglifier', '>= 1.0.3', :git=>'https://github.com/lautis/uglifier.git'
20
+ end
21
+
22
+ # Declare any dependencies that are still in development here instead of in
23
+ # your gemspec. These might include edge Rails or gems from your path or
24
+ # Git. Remember to move these dependencies to your gemspec before releasing
25
+ # your gem to rubygems.org.
26
+
27
+ # To use debugger
28
+ # gem 'ruby-debug19', :require => 'ruby-debug'
29
+ group :development,:test do
30
+ gem "database_cleaner"
31
+ gem "sqlite3"
32
+ gem 'factory_girl_rails'
33
+ gem 'minitest'
34
+ gem "rspec-rails", ">= 2.8.0"
35
+ gem "sqlite3-ruby"
36
+ gem "with_model", '>= 0.1.5'
37
+ gem "generator_spec"
38
+ gem "rdoc", "~> 3.12"
39
+ gem "bundler", ">= 1.0.0"
40
+ gem "jeweler", ">= 1.8.3"
41
+ gem "simplecov", ">= 0"
42
+ gem 'spork', '~> 1.0rc'
43
+ gem 'watchr'
44
+ end
data/Gemfile.lock ADDED
@@ -0,0 +1,264 @@
1
+ GIT
2
+ remote: git://github.com/lazing/active_admin.git
3
+ revision: c5f13422bc7dc47bbf76543ab20be7c8a39fac96
4
+ branch: 0.4.x-stable
5
+ specs:
6
+ activeadmin (0.4.4)
7
+ bourbon (>= 1.0.0)
8
+ devise (>= 1.1.2)
9
+ fastercsv
10
+ formtastic (~> 2.2.1)
11
+ inherited_resources (>= 1.3.1)
12
+ jquery-rails (>= 1.0.0)
13
+ kaminari (>= 0.13.0)
14
+ meta_search (>= 0.9.2)
15
+ rails (>= 3.0.0)
16
+ sass (>= 3.1.0)
17
+
18
+ GIT
19
+ remote: https://github.com/lautis/uglifier.git
20
+ revision: 8786c0eb2717197fba8fc00385350509eedd9550
21
+ specs:
22
+ uglifier (1.2.6)
23
+ execjs (>= 0.3.0)
24
+ multi_json (~> 1.3)
25
+
26
+ GIT
27
+ remote: https://github.com/sstephenson/execjs.git
28
+ revision: 1e87b3735176c6e656e4b5ba18ed10214b321ba5
29
+ specs:
30
+ execjs (1.4.0)
31
+ multi_json (~> 1.0)
32
+
33
+ PATH
34
+ remote: .
35
+ specs:
36
+ engine-rea-admin (0.0.0)
37
+ activeadmin
38
+ engine-rea
39
+ engine-rea-admin
40
+ jquery-rails
41
+
42
+ PATH
43
+ remote: ../rea
44
+ specs:
45
+ engine-rea (0.2.2)
46
+ capybara (>= 0.4.0)
47
+ rails (>= 3.2.0)
48
+
49
+ GEM
50
+ remote: http://ruby.taobao.org/
51
+ specs:
52
+ actionmailer (3.2.6)
53
+ actionpack (= 3.2.6)
54
+ mail (~> 2.4.4)
55
+ actionpack (3.2.6)
56
+ activemodel (= 3.2.6)
57
+ activesupport (= 3.2.6)
58
+ builder (~> 3.0.0)
59
+ erubis (~> 2.7.0)
60
+ journey (~> 1.0.1)
61
+ rack (~> 1.4.0)
62
+ rack-cache (~> 1.2)
63
+ rack-test (~> 0.6.1)
64
+ sprockets (~> 2.1.3)
65
+ activemodel (3.2.6)
66
+ activesupport (= 3.2.6)
67
+ builder (~> 3.0.0)
68
+ activerecord (3.2.6)
69
+ activemodel (= 3.2.6)
70
+ activesupport (= 3.2.6)
71
+ arel (~> 3.0.2)
72
+ tzinfo (~> 0.3.29)
73
+ activeresource (3.2.6)
74
+ activemodel (= 3.2.6)
75
+ activesupport (= 3.2.6)
76
+ activesupport (3.2.6)
77
+ i18n (~> 0.6)
78
+ multi_json (~> 1.0)
79
+ addressable (2.2.8)
80
+ arel (3.0.2)
81
+ bcrypt-ruby (3.0.1)
82
+ bourbon (2.1.1)
83
+ sass (>= 3.1)
84
+ builder (3.0.0)
85
+ capybara (1.1.2)
86
+ mime-types (>= 1.16)
87
+ nokogiri (>= 1.3.3)
88
+ rack (>= 1.0.0)
89
+ rack-test (>= 0.5.4)
90
+ selenium-webdriver (~> 2.0)
91
+ xpath (~> 0.1.4)
92
+ childprocess (0.3.3)
93
+ ffi (~> 1.0.6)
94
+ coffee-rails (3.2.2)
95
+ coffee-script (>= 2.2.0)
96
+ railties (~> 3.2.0)
97
+ coffee-script (2.2.0)
98
+ coffee-script-source
99
+ execjs
100
+ coffee-script-source (1.3.3)
101
+ database_cleaner (0.8.0)
102
+ devise (2.1.2)
103
+ bcrypt-ruby (~> 3.0)
104
+ orm_adapter (~> 0.1)
105
+ railties (~> 3.1)
106
+ warden (~> 1.2.1)
107
+ diff-lcs (1.1.3)
108
+ erubis (2.7.0)
109
+ factory_girl (3.5.0)
110
+ activesupport (>= 3.0.0)
111
+ factory_girl_rails (3.5.0)
112
+ factory_girl (~> 3.5.0)
113
+ railties (>= 3.0.0)
114
+ fastercsv (1.5.5)
115
+ ffi (1.0.11)
116
+ formtastic (2.2.1)
117
+ actionpack (>= 3.0)
118
+ generator_spec (0.8.5)
119
+ rails (>= 3.0, < 4.0)
120
+ rspec-rails
121
+ git (1.2.5)
122
+ has_scope (0.5.1)
123
+ hike (1.2.1)
124
+ i18n (0.6.0)
125
+ inherited_resources (1.3.1)
126
+ has_scope (~> 0.5.0)
127
+ responders (~> 0.6)
128
+ jeweler (1.8.4)
129
+ bundler (~> 1.0)
130
+ git (>= 1.2.5)
131
+ rake
132
+ rdoc
133
+ journey (1.0.4)
134
+ jquery-rails (2.0.2)
135
+ railties (>= 3.2.0, < 5.0)
136
+ thor (~> 0.14)
137
+ json (1.7.3)
138
+ kaminari (0.13.0)
139
+ actionpack (>= 3.0.0)
140
+ activesupport (>= 3.0.0)
141
+ railties (>= 3.0.0)
142
+ libwebsocket (0.1.3)
143
+ addressable
144
+ mail (2.4.4)
145
+ i18n (>= 0.4.0)
146
+ mime-types (~> 1.16)
147
+ treetop (~> 1.4.8)
148
+ meta_search (1.1.3)
149
+ actionpack (~> 3.1)
150
+ activerecord (~> 3.1)
151
+ activesupport (~> 3.1)
152
+ polyamorous (~> 0.5.0)
153
+ mime-types (1.19)
154
+ minitest (3.2.0)
155
+ multi_json (1.3.6)
156
+ nokogiri (1.5.5)
157
+ orm_adapter (0.3.0)
158
+ polyamorous (0.5.0)
159
+ activerecord (~> 3.0)
160
+ polyglot (0.3.3)
161
+ rack (1.4.1)
162
+ rack-cache (1.2)
163
+ rack (>= 0.4)
164
+ rack-ssl (1.3.2)
165
+ rack
166
+ rack-test (0.6.1)
167
+ rack (>= 1.0)
168
+ rails (3.2.6)
169
+ actionmailer (= 3.2.6)
170
+ actionpack (= 3.2.6)
171
+ activerecord (= 3.2.6)
172
+ activeresource (= 3.2.6)
173
+ activesupport (= 3.2.6)
174
+ bundler (~> 1.0)
175
+ railties (= 3.2.6)
176
+ railties (3.2.6)
177
+ actionpack (= 3.2.6)
178
+ activesupport (= 3.2.6)
179
+ rack-ssl (~> 1.3.2)
180
+ rake (>= 0.8.7)
181
+ rdoc (~> 3.4)
182
+ thor (>= 0.14.6, < 2.0)
183
+ rake (0.9.2.2)
184
+ rdoc (3.12)
185
+ json (~> 1.4)
186
+ responders (0.9.1)
187
+ railties (~> 3.1)
188
+ rspec (2.10.0)
189
+ rspec-core (~> 2.10.0)
190
+ rspec-expectations (~> 2.10.0)
191
+ rspec-mocks (~> 2.10.0)
192
+ rspec-core (2.10.1)
193
+ rspec-expectations (2.10.0)
194
+ diff-lcs (~> 1.1.3)
195
+ rspec-mocks (2.10.1)
196
+ rspec-rails (2.10.1)
197
+ actionpack (>= 3.0)
198
+ activesupport (>= 3.0)
199
+ railties (>= 3.0)
200
+ rspec (~> 2.10.0)
201
+ rubyzip (0.9.9)
202
+ sass (3.1.20)
203
+ sass-rails (3.2.5)
204
+ railties (~> 3.2.0)
205
+ sass (>= 3.1.10)
206
+ tilt (~> 1.3)
207
+ selenium-webdriver (2.24.0)
208
+ childprocess (>= 0.2.5)
209
+ libwebsocket (~> 0.1.3)
210
+ multi_json (~> 1.0)
211
+ rubyzip
212
+ simplecov (0.6.4)
213
+ multi_json (~> 1.0)
214
+ simplecov-html (~> 0.5.3)
215
+ simplecov-html (0.5.3)
216
+ spork (1.0.0rc3)
217
+ sprockets (2.1.3)
218
+ hike (~> 1.2)
219
+ rack (~> 1.0)
220
+ tilt (~> 1.1, != 1.3.0)
221
+ sqlite3 (1.3.6)
222
+ sqlite3-ruby (1.3.3)
223
+ sqlite3 (>= 1.3.3)
224
+ thor (0.15.4)
225
+ tilt (1.3.3)
226
+ treetop (1.4.10)
227
+ polyglot
228
+ polyglot (>= 0.3.1)
229
+ tzinfo (0.3.33)
230
+ warden (1.2.1)
231
+ rack (>= 1.0)
232
+ watchr (0.7)
233
+ with_model (0.2.6)
234
+ activerecord (>= 2.3.5, < 4.0.0)
235
+ rspec (< 3)
236
+ xpath (0.1.4)
237
+ nokogiri (~> 1.3)
238
+
239
+ PLATFORMS
240
+ ruby
241
+
242
+ DEPENDENCIES
243
+ activeadmin!
244
+ bundler (>= 1.0.0)
245
+ coffee-rails
246
+ database_cleaner
247
+ engine-rea!
248
+ engine-rea-admin!
249
+ execjs!
250
+ factory_girl_rails
251
+ generator_spec
252
+ jeweler (>= 1.8.3)
253
+ jquery-rails
254
+ minitest
255
+ rdoc (~> 3.12)
256
+ rspec-rails (>= 2.8.0)
257
+ sass-rails
258
+ simplecov
259
+ spork (~> 1.0rc)
260
+ sqlite3
261
+ sqlite3-ruby
262
+ uglifier (>= 1.0.3)!
263
+ watchr
264
+ with_model (>= 0.1.5)
data/MIT-LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright 2012 YOURNAME
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.rdoc ADDED
@@ -0,0 +1,3 @@
1
+ = EngineReaAdmin
2
+
3
+ This project rocks and uses MIT-LICENSE.
data/Rakefile ADDED
@@ -0,0 +1,48 @@
1
+ # encoding: UTF-8
2
+ require 'rubygems'
3
+ begin
4
+ require 'bundler/setup'
5
+ rescue LoadError
6
+ puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
7
+ end
8
+
9
+ require 'rake'
10
+ require 'rdoc/task'
11
+
12
+ require 'rspec/core'
13
+ require 'rspec/core/rake_task'
14
+
15
+ RSpec::Core::RakeTask.new(:spec)
16
+
17
+ task :default => :spec
18
+
19
+ Rake::RDocTask.new(:rdoc) do |rdoc|
20
+ rdoc.rdoc_dir = 'rdoc'
21
+ rdoc.title = 'REA Active Admin'
22
+ rdoc.options << '--line-numbers' << '--inline-source'
23
+ rdoc.rdoc_files.include('README.md')
24
+ rdoc.rdoc_files.include('lib/**/*.rb')
25
+ end
26
+
27
+ #APP_RAKEFILE = File.expand_path("../spec/dummy/Rakefile", __FILE__)
28
+ #load 'rails/tasks/engine.rake'
29
+
30
+ Bundler::GemHelper.install_tasks
31
+
32
+ task :default => :spec
33
+
34
+ require 'jeweler'
35
+ Jeweler::Tasks.new do |gem|
36
+ # gem is a Gem::Specification... see http://docs.rubygems.org/read/chapter/20 for more options
37
+ gem.name = "engine-rea-admin"
38
+ gem.homepage = "http://github.com/lazing/engine-rea-admin"
39
+ gem.license = "MIT"
40
+ gem.summary = %Q{engine-rea integrate with active_admin}
41
+ gem.description = %Q{
42
+ follow REA model
43
+ }
44
+ gem.email = "lazing@gmail.com"
45
+ gem.authors = ["Ryan Wong"]
46
+ # dependencies defined in Gemfile
47
+ end
48
+ Jeweler::RubygemsDotOrgTasks.new
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.0.0
File without changes
@@ -0,0 +1,15 @@
1
+ // This is a manifest file that'll be compiled into application.js, which will include all the files
2
+ // listed below.
3
+ //
4
+ // Any JavaScript/Coffee file within this directory, lib/assets/javascripts, vendor/assets/javascripts,
5
+ // or vendor/assets/javascripts of plugins, if any, can be referenced here using a relative path.
6
+ //
7
+ // It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the
8
+ // the compiled file.
9
+ //
10
+ // WARNING: THE FIRST BLANK LINE MARKS THE END OF WHAT'S TO BE PROCESSED, ANY BLANK LINE SHOULD
11
+ // GO AFTER THE REQUIRES BELOW.
12
+ //
13
+ //= require jquery
14
+ //= require jquery_ujs
15
+ //= require_tree .
@@ -0,0 +1,3392 @@
1
+
2
+ /*
3
+ * JQuery zTree core 3.3
4
+ * http://zTree.me/
5
+ *
6
+ * Copyright (c) 2010 Hunter.z
7
+ *
8
+ * Licensed same as jquery - MIT License
9
+ * http://www.opensource.org/licenses/mit-license.php
10
+ *
11
+ * email: hunter.z@263.net
12
+ * Date: 2012-07-16
13
+ */
14
+ (function($){
15
+ var settings = {}, roots = {}, caches = {}, zId = 0,
16
+ //default consts of core
17
+ _consts = {
18
+ event: {
19
+ NODECREATED: "ztree_nodeCreated",
20
+ CLICK: "ztree_click",
21
+ EXPAND: "ztree_expand",
22
+ COLLAPSE: "ztree_collapse",
23
+ ASYNC_SUCCESS: "ztree_async_success",
24
+ ASYNC_ERROR: "ztree_async_error"
25
+ },
26
+ id: {
27
+ A: "_a",
28
+ ICON: "_ico",
29
+ SPAN: "_span",
30
+ SWITCH: "_switch",
31
+ UL: "_ul"
32
+ },
33
+ line: {
34
+ ROOT: "root",
35
+ ROOTS: "roots",
36
+ CENTER: "center",
37
+ BOTTOM: "bottom",
38
+ NOLINE: "noline",
39
+ LINE: "line"
40
+ },
41
+ folder: {
42
+ OPEN: "open",
43
+ CLOSE: "close",
44
+ DOCU: "docu"
45
+ },
46
+ node: {
47
+ CURSELECTED: "curSelectedNode"
48
+ }
49
+ },
50
+ //default setting of core
51
+ _setting = {
52
+ treeId: "",
53
+ treeObj: null,
54
+ view: {
55
+ addDiyDom: null,
56
+ autoCancelSelected: true,
57
+ dblClickExpand: true,
58
+ expandSpeed: "fast",
59
+ fontCss: {},
60
+ nameIsHTML: false,
61
+ selectedMulti: true,
62
+ showIcon: true,
63
+ showLine: true,
64
+ showTitle: true
65
+ },
66
+ data: {
67
+ key: {
68
+ children: "children",
69
+ name: "name",
70
+ title: "",
71
+ url: "url"
72
+ },
73
+ simpleData: {
74
+ enable: false,
75
+ idKey: "id",
76
+ pIdKey: "pId",
77
+ rootPId: null
78
+ },
79
+ keep: {
80
+ parent: false,
81
+ leaf: false
82
+ }
83
+ },
84
+ async: {
85
+ enable: false,
86
+ contentType: "application/x-www-form-urlencoded",
87
+ type: "post",
88
+ dataType: "text",
89
+ url: "",
90
+ autoParam: [],
91
+ otherParam: [],
92
+ dataFilter: null
93
+ },
94
+ callback: {
95
+ beforeAsync:null,
96
+ beforeClick:null,
97
+ beforeRightClick:null,
98
+ beforeMouseDown:null,
99
+ beforeMouseUp:null,
100
+ beforeExpand:null,
101
+ beforeCollapse:null,
102
+ beforeRemove:null,
103
+
104
+ onAsyncError:null,
105
+ onAsyncSuccess:null,
106
+ onNodeCreated:null,
107
+ onClick:null,
108
+ onRightClick:null,
109
+ onMouseDown:null,
110
+ onMouseUp:null,
111
+ onExpand:null,
112
+ onCollapse:null,
113
+ onRemove:null
114
+ }
115
+ },
116
+ //default root of core
117
+ //zTree use root to save full data
118
+ _initRoot = function (setting) {
119
+ var r = data.getRoot(setting);
120
+ if (!r) {
121
+ r = {};
122
+ data.setRoot(setting, r);
123
+ }
124
+ r[setting.data.key.children] = [];
125
+ r.expandTriggerFlag = false;
126
+ r.curSelectedList = [];
127
+ r.noSelection = true;
128
+ r.createdNodes = [];
129
+ },
130
+ //default cache of core
131
+ _initCache = function(setting) {
132
+ var c = data.getCache(setting);
133
+ if (!c) {
134
+ c = {};
135
+ data.setCache(setting, c);
136
+ }
137
+ c.nodes = [];
138
+ c.doms = [];
139
+ },
140
+ //default bindEvent of core
141
+ _bindEvent = function(setting) {
142
+ var o = setting.treeObj,
143
+ c = consts.event;
144
+ o.unbind(c.NODECREATED);
145
+ o.bind(c.NODECREATED, function (event, treeId, node) {
146
+ tools.apply(setting.callback.onNodeCreated, [event, treeId, node]);
147
+ });
148
+
149
+ o.unbind(c.CLICK);
150
+ o.bind(c.CLICK, function (event, srcEvent, treeId, node, clickFlag) {
151
+ tools.apply(setting.callback.onClick, [srcEvent, treeId, node, clickFlag]);
152
+ });
153
+
154
+ o.unbind(c.EXPAND);
155
+ o.bind(c.EXPAND, function (event, treeId, node) {
156
+ tools.apply(setting.callback.onExpand, [event, treeId, node]);
157
+ });
158
+
159
+ o.unbind(c.COLLAPSE);
160
+ o.bind(c.COLLAPSE, function (event, treeId, node) {
161
+ tools.apply(setting.callback.onCollapse, [event, treeId, node]);
162
+ });
163
+
164
+ o.unbind(c.ASYNC_SUCCESS);
165
+ o.bind(c.ASYNC_SUCCESS, function (event, treeId, node, msg) {
166
+ tools.apply(setting.callback.onAsyncSuccess, [event, treeId, node, msg]);
167
+ });
168
+
169
+ o.unbind(c.ASYNC_ERROR);
170
+ o.bind(c.ASYNC_ERROR, function (event, treeId, node, XMLHttpRequest, textStatus, errorThrown) {
171
+ tools.apply(setting.callback.onAsyncError, [event, treeId, node, XMLHttpRequest, textStatus, errorThrown]);
172
+ });
173
+ },
174
+ //default event proxy of core
175
+ _eventProxy = function(event) {
176
+ var target = event.target,
177
+ setting = settings[event.data.treeId],
178
+ tId = "", node = null,
179
+ nodeEventType = "", treeEventType = "",
180
+ nodeEventCallback = null, treeEventCallback = null,
181
+ tmp = null;
182
+
183
+ if (tools.eqs(event.type, "mousedown")) {
184
+ treeEventType = "mousedown";
185
+ } else if (tools.eqs(event.type, "mouseup")) {
186
+ treeEventType = "mouseup";
187
+ } else if (tools.eqs(event.type, "contextmenu")) {
188
+ treeEventType = "contextmenu";
189
+ } else if (tools.eqs(event.type, "click")) {
190
+ if (tools.eqs(target.tagName, "span") && target.getAttribute("treeNode"+ consts.id.SWITCH) !== null) {
191
+ tId = target.parentNode.id;
192
+ nodeEventType = "switchNode";
193
+ } else {
194
+ tmp = tools.getMDom(setting, target, [{tagName:"a", attrName:"treeNode"+consts.id.A}]);
195
+ if (tmp) {
196
+ tId = tmp.parentNode.id;
197
+ nodeEventType = "clickNode";
198
+ }
199
+ }
200
+ } else if (tools.eqs(event.type, "dblclick")) {
201
+ treeEventType = "dblclick";
202
+ tmp = tools.getMDom(setting, target, [{tagName:"a", attrName:"treeNode"+consts.id.A}]);
203
+ if (tmp) {
204
+ tId = tmp.parentNode.id;
205
+ nodeEventType = "switchNode";
206
+ }
207
+ }
208
+ if (treeEventType.length > 0 && tId.length == 0) {
209
+ tmp = tools.getMDom(setting, target, [{tagName:"a", attrName:"treeNode"+consts.id.A}]);
210
+ if (tmp) {tId = tmp.parentNode.id;}
211
+ }
212
+ // event to node
213
+ if (tId.length>0) {
214
+ node = data.getNodeCache(setting, tId);
215
+ switch (nodeEventType) {
216
+ case "switchNode" :
217
+ if (!node.isParent) {
218
+ nodeEventType = "";
219
+ } else if (tools.eqs(event.type, "click")
220
+ || (tools.eqs(event.type, "dblclick") && tools.apply(setting.view.dblClickExpand, [setting.treeId, node], setting.view.dblClickExpand))) {
221
+ nodeEventCallback = handler.onSwitchNode;
222
+ } else {
223
+ nodeEventType = "";
224
+ }
225
+ break;
226
+ case "clickNode" :
227
+ nodeEventCallback = handler.onClickNode;
228
+ break;
229
+ }
230
+ }
231
+ // event to zTree
232
+ switch (treeEventType) {
233
+ case "mousedown" :
234
+ treeEventCallback = handler.onZTreeMousedown;
235
+ break;
236
+ case "mouseup" :
237
+ treeEventCallback = handler.onZTreeMouseup;
238
+ break;
239
+ case "dblclick" :
240
+ treeEventCallback = handler.onZTreeDblclick;
241
+ break;
242
+ case "contextmenu" :
243
+ treeEventCallback = handler.onZTreeContextmenu;
244
+ break;
245
+ }
246
+ var proxyResult = {
247
+ stop: false,
248
+ node: node,
249
+ nodeEventType: nodeEventType,
250
+ nodeEventCallback: nodeEventCallback,
251
+ treeEventType: treeEventType,
252
+ treeEventCallback: treeEventCallback
253
+ };
254
+ return proxyResult
255
+ },
256
+ //default init node of core
257
+ _initNode = function(setting, level, n, parentNode, isFirstNode, isLastNode, openFlag) {
258
+ if (!n) return;
259
+ var childKey = setting.data.key.children;
260
+ n.level = level;
261
+ n.tId = setting.treeId + "_" + (++zId);
262
+ n.parentTId = parentNode ? parentNode.tId : null;
263
+ if (n[childKey] && n[childKey].length > 0) {
264
+ if (typeof n.open == "string") n.open = tools.eqs(n.open, "true");
265
+ n.open = !!n.open;
266
+ n.isParent = true;
267
+ n.zAsync = true;
268
+ } else {
269
+ n.open = false;
270
+ if (typeof n.isParent == "string") n.isParent = tools.eqs(n.isParent, "true");
271
+ n.isParent = !!n.isParent;
272
+ n.zAsync = !n.isParent;
273
+ }
274
+ n.isFirstNode = isFirstNode;
275
+ n.isLastNode = isLastNode;
276
+ n.getParentNode = function() {return data.getNodeCache(setting, n.parentTId);};
277
+ n.getPreNode = function() {return data.getPreNode(setting, n);};
278
+ n.getNextNode = function() {return data.getNextNode(setting, n);};
279
+ n.isAjaxing = false;
280
+ data.fixPIdKeyValue(setting, n);
281
+ },
282
+ _init = {
283
+ bind: [_bindEvent],
284
+ caches: [_initCache],
285
+ nodes: [_initNode],
286
+ proxys: [_eventProxy],
287
+ roots: [_initRoot],
288
+ beforeA: [],
289
+ afterA: [],
290
+ innerBeforeA: [],
291
+ innerAfterA: [],
292
+ zTreeTools: []
293
+ },
294
+ //method of operate data
295
+ data = {
296
+ addNodeCache: function(setting, node) {
297
+ data.getCache(setting).nodes[node.tId] = node;
298
+ },
299
+ addAfterA: function(afterA) {
300
+ _init.afterA.push(afterA);
301
+ },
302
+ addBeforeA: function(beforeA) {
303
+ _init.beforeA.push(beforeA);
304
+ },
305
+ addInnerAfterA: function(innerAfterA) {
306
+ _init.innerAfterA.push(innerAfterA);
307
+ },
308
+ addInnerBeforeA: function(innerBeforeA) {
309
+ _init.innerBeforeA.push(innerBeforeA);
310
+ },
311
+ addInitBind: function(bindEvent) {
312
+ _init.bind.push(bindEvent);
313
+ },
314
+ addInitCache: function(initCache) {
315
+ _init.caches.push(initCache);
316
+ },
317
+ addInitNode: function(initNode) {
318
+ _init.nodes.push(initNode);
319
+ },
320
+ addInitProxy: function(initProxy) {
321
+ _init.proxys.push(initProxy);
322
+ },
323
+ addInitRoot: function(initRoot) {
324
+ _init.roots.push(initRoot);
325
+ },
326
+ addNodesData: function(setting, parentNode, nodes) {
327
+ var childKey = setting.data.key.children;
328
+ if (!parentNode[childKey]) parentNode[childKey] = [];
329
+ if (parentNode[childKey].length > 0) {
330
+ parentNode[childKey][parentNode[childKey].length - 1].isLastNode = false;
331
+ view.setNodeLineIcos(setting, parentNode[childKey][parentNode[childKey].length - 1]);
332
+ }
333
+ parentNode.isParent = true;
334
+ parentNode[childKey] = parentNode[childKey].concat(nodes);
335
+ },
336
+ addSelectedNode: function(setting, node) {
337
+ var root = data.getRoot(setting);
338
+ if (!data.isSelectedNode(setting, node)) {
339
+ root.curSelectedList.push(node);
340
+ }
341
+ },
342
+ addCreatedNode: function(setting, node) {
343
+ if (!!setting.callback.onNodeCreated || !!setting.view.addDiyDom) {
344
+ var root = data.getRoot(setting);
345
+ root.createdNodes.push(node);
346
+ }
347
+ },
348
+ addZTreeTools: function(zTreeTools) {
349
+ _init.zTreeTools.push(zTreeTools);
350
+ },
351
+ exSetting: function(s) {
352
+ $.extend(true, _setting, s);
353
+ },
354
+ fixPIdKeyValue: function(setting, node) {
355
+ if (setting.data.simpleData.enable) {
356
+ node[setting.data.simpleData.pIdKey] = node.parentTId ? node.getParentNode()[setting.data.simpleData.idKey] : setting.data.simpleData.rootPId;
357
+ }
358
+ },
359
+ getAfterA: function(setting, node, array) {
360
+ for (var i=0, j=_init.afterA.length; i<j; i++) {
361
+ _init.afterA[i].apply(this, arguments);
362
+ }
363
+ },
364
+ getBeforeA: function(setting, node, array) {
365
+ for (var i=0, j=_init.beforeA.length; i<j; i++) {
366
+ _init.beforeA[i].apply(this, arguments);
367
+ }
368
+ },
369
+ getInnerAfterA: function(setting, node, array) {
370
+ for (var i=0, j=_init.innerAfterA.length; i<j; i++) {
371
+ _init.innerAfterA[i].apply(this, arguments);
372
+ }
373
+ },
374
+ getInnerBeforeA: function(setting, node, array) {
375
+ for (var i=0, j=_init.innerBeforeA.length; i<j; i++) {
376
+ _init.innerBeforeA[i].apply(this, arguments);
377
+ }
378
+ },
379
+ getCache: function(setting) {
380
+ return caches[setting.treeId];
381
+ },
382
+ getNextNode: function(setting, node) {
383
+ if (!node) return null;
384
+ var childKey = setting.data.key.children,
385
+ p = node.parentTId ? node.getParentNode() : data.getRoot(setting);
386
+ for (var i=0, l=p[childKey].length-1; i<=l; i++) {
387
+ if (p[childKey][i] === node) {
388
+ return (i==l ? null : p[childKey][i+1]);
389
+ }
390
+ }
391
+ return null;
392
+ },
393
+ getNodeByParam: function(setting, nodes, key, value) {
394
+ if (!nodes || !key) return null;
395
+ var childKey = setting.data.key.children;
396
+ for (var i = 0, l = nodes.length; i < l; i++) {
397
+ if (nodes[i][key] == value) {
398
+ return nodes[i];
399
+ }
400
+ var tmp = data.getNodeByParam(setting, nodes[i][childKey], key, value);
401
+ if (tmp) return tmp;
402
+ }
403
+ return null;
404
+ },
405
+ getNodeCache: function(setting, tId) {
406
+ if (!tId) return null;
407
+ var n = caches[setting.treeId].nodes[tId];
408
+ return n ? n : null;
409
+ },
410
+ getNodes: function(setting) {
411
+ return data.getRoot(setting)[setting.data.key.children];
412
+ },
413
+ getNodesByParam: function(setting, nodes, key, value) {
414
+ if (!nodes || !key) return [];
415
+ var childKey = setting.data.key.children,
416
+ result = [];
417
+ for (var i = 0, l = nodes.length; i < l; i++) {
418
+ if (nodes[i][key] == value) {
419
+ result.push(nodes[i]);
420
+ }
421
+ result = result.concat(data.getNodesByParam(setting, nodes[i][childKey], key, value));
422
+ }
423
+ return result;
424
+ },
425
+ getNodesByParamFuzzy: function(setting, nodes, key, value) {
426
+ if (!nodes || !key) return [];
427
+ var childKey = setting.data.key.children,
428
+ result = [];
429
+ for (var i = 0, l = nodes.length; i < l; i++) {
430
+ if (typeof nodes[i][key] == "string" && nodes[i][key].indexOf(value)>-1) {
431
+ result.push(nodes[i]);
432
+ }
433
+ result = result.concat(data.getNodesByParamFuzzy(setting, nodes[i][childKey], key, value));
434
+ }
435
+ return result;
436
+ },
437
+ getNodesByFilter: function(setting, nodes, filter, isSingle, invokeParam) {
438
+ if (!nodes) return (isSingle ? null : []);
439
+ var childKey = setting.data.key.children,
440
+ result = isSingle ? null : [];
441
+ for (var i = 0, l = nodes.length; i < l; i++) {
442
+ if (tools.apply(filter, [nodes[i], invokeParam], false)) {
443
+ if (isSingle) {return nodes[i];}
444
+ result.push(nodes[i]);
445
+ }
446
+ var tmpResult = data.getNodesByFilter(setting, nodes[i][childKey], filter, isSingle, invokeParam);
447
+ if (isSingle && !!tmpResult) {return tmpResult;}
448
+ result = isSingle ? tmpResult : result.concat(tmpResult);
449
+ }
450
+ return result;
451
+ },
452
+ getPreNode: function(setting, node) {
453
+ if (!node) return null;
454
+ var childKey = setting.data.key.children,
455
+ p = node.parentTId ? node.getParentNode() : data.getRoot(setting);
456
+ for (var i=0, l=p[childKey].length; i<l; i++) {
457
+ if (p[childKey][i] === node) {
458
+ return (i==0 ? null : p[childKey][i-1]);
459
+ }
460
+ }
461
+ return null;
462
+ },
463
+ getRoot: function(setting) {
464
+ return setting ? roots[setting.treeId] : null;
465
+ },
466
+ getSetting: function(treeId) {
467
+ return settings[treeId];
468
+ },
469
+ getSettings: function() {
470
+ return settings;
471
+ },
472
+ getTitleKey: function(setting) {
473
+ return setting.data.key.title === "" ? setting.data.key.name : setting.data.key.title;
474
+ },
475
+ getZTreeTools: function(treeId) {
476
+ var r = this.getRoot(this.getSetting(treeId));
477
+ return r ? r.treeTools : null;
478
+ },
479
+ initCache: function(setting) {
480
+ for (var i=0, j=_init.caches.length; i<j; i++) {
481
+ _init.caches[i].apply(this, arguments);
482
+ }
483
+ },
484
+ initNode: function(setting, level, node, parentNode, preNode, nextNode) {
485
+ for (var i=0, j=_init.nodes.length; i<j; i++) {
486
+ _init.nodes[i].apply(this, arguments);
487
+ }
488
+ },
489
+ initRoot: function(setting) {
490
+ for (var i=0, j=_init.roots.length; i<j; i++) {
491
+ _init.roots[i].apply(this, arguments);
492
+ }
493
+ },
494
+ isSelectedNode: function(setting, node) {
495
+ var root = data.getRoot(setting);
496
+ for (var i=0, j=root.curSelectedList.length; i<j; i++) {
497
+ if(node === root.curSelectedList[i]) return true;
498
+ }
499
+ return false;
500
+ },
501
+ removeNodeCache: function(setting, node) {
502
+ var childKey = setting.data.key.children;
503
+ if (node[childKey]) {
504
+ for (var i=0, l=node[childKey].length; i<l; i++) {
505
+ arguments.callee(setting, node[childKey][i]);
506
+ }
507
+ }
508
+ delete data.getCache(setting).nodes[node.tId];
509
+ },
510
+ removeSelectedNode: function(setting, node) {
511
+ var root = data.getRoot(setting);
512
+ for (var i=0, j=root.curSelectedList.length; i<j; i++) {
513
+ if(node === root.curSelectedList[i] || !data.getNodeCache(setting, root.curSelectedList[i].tId)) {
514
+ root.curSelectedList.splice(i, 1);
515
+ i--;j--;
516
+ }
517
+ }
518
+ },
519
+ setCache: function(setting, cache) {
520
+ caches[setting.treeId] = cache;
521
+ },
522
+ setRoot: function(setting, root) {
523
+ roots[setting.treeId] = root;
524
+ },
525
+ setZTreeTools: function(setting, zTreeTools) {
526
+ for (var i=0, j=_init.zTreeTools.length; i<j; i++) {
527
+ _init.zTreeTools[i].apply(this, arguments);
528
+ }
529
+ },
530
+ transformToArrayFormat: function (setting, nodes) {
531
+ if (!nodes) return [];
532
+ var childKey = setting.data.key.children,
533
+ r = [];
534
+ if (tools.isArray(nodes)) {
535
+ for (var i=0, l=nodes.length; i<l; i++) {
536
+ r.push(nodes[i]);
537
+ if (nodes[i][childKey])
538
+ r = r.concat(data.transformToArrayFormat(setting, nodes[i][childKey]));
539
+ }
540
+ } else {
541
+ r.push(nodes);
542
+ if (nodes[childKey])
543
+ r = r.concat(data.transformToArrayFormat(setting, nodes[childKey]));
544
+ }
545
+ return r;
546
+ },
547
+ transformTozTreeFormat: function(setting, sNodes) {
548
+ var i,l,
549
+ key = setting.data.simpleData.idKey,
550
+ parentKey = setting.data.simpleData.pIdKey,
551
+ childKey = setting.data.key.children;
552
+ if (!key || key=="" || !sNodes) return [];
553
+
554
+ if (tools.isArray(sNodes)) {
555
+ var r = [];
556
+ var tmpMap = [];
557
+ for (i=0, l=sNodes.length; i<l; i++) {
558
+ tmpMap[sNodes[i][key]] = sNodes[i];
559
+ }
560
+ for (i=0, l=sNodes.length; i<l; i++) {
561
+ if (tmpMap[sNodes[i][parentKey]] && sNodes[i][key] != sNodes[i][parentKey]) {
562
+ if (!tmpMap[sNodes[i][parentKey]][childKey])
563
+ tmpMap[sNodes[i][parentKey]][childKey] = [];
564
+ tmpMap[sNodes[i][parentKey]][childKey].push(sNodes[i]);
565
+ } else {
566
+ r.push(sNodes[i]);
567
+ }
568
+ }
569
+ return r;
570
+ }else {
571
+ return [sNodes];
572
+ }
573
+ }
574
+ },
575
+ //method of event proxy
576
+ event = {
577
+ bindEvent: function(setting) {
578
+ for (var i=0, j=_init.bind.length; i<j; i++) {
579
+ _init.bind[i].apply(this, arguments);
580
+ }
581
+ },
582
+ bindTree: function(setting) {
583
+ var eventParam = {
584
+ treeId: setting.treeId
585
+ },
586
+ o = setting.treeObj;
587
+ o.unbind('click', event.proxy);
588
+ o.bind('click', eventParam, event.proxy);
589
+ o.unbind('dblclick', event.proxy);
590
+ o.bind('dblclick', eventParam, event.proxy);
591
+ o.unbind('mouseover', event.proxy);
592
+ o.bind('mouseover', eventParam, event.proxy);
593
+ o.unbind('mouseout', event.proxy);
594
+ o.bind('mouseout', eventParam, event.proxy);
595
+ o.unbind('mousedown', event.proxy);
596
+ o.bind('mousedown', eventParam, event.proxy);
597
+ o.unbind('mouseup', event.proxy);
598
+ o.bind('mouseup', eventParam, event.proxy);
599
+ o.unbind('contextmenu', event.proxy);
600
+ o.bind('contextmenu', eventParam, event.proxy);
601
+ },
602
+ doProxy: function(e) {
603
+ var results = [];
604
+ for (var i=0, j=_init.proxys.length; i<j; i++) {
605
+ var proxyResult = _init.proxys[i].apply(this, arguments);
606
+ results.push(proxyResult);
607
+ if (proxyResult.stop) {
608
+ break;
609
+ }
610
+ }
611
+ return results;
612
+ },
613
+ proxy: function(e) {
614
+ var setting = data.getSetting(e.data.treeId);
615
+ if (!tools.uCanDo(setting, e)) return true;
616
+ var results = event.doProxy(e),
617
+ r = true, x = false;
618
+ for (var i=0, l=results.length; i<l; i++) {
619
+ var proxyResult = results[i];
620
+ if (proxyResult.nodeEventCallback) {
621
+ x = true;
622
+ r = proxyResult.nodeEventCallback.apply(proxyResult, [e, proxyResult.node]) && r;
623
+ }
624
+ if (proxyResult.treeEventCallback) {
625
+ x = true;
626
+ r = proxyResult.treeEventCallback.apply(proxyResult, [e, proxyResult.node]) && r;
627
+ }
628
+ }
629
+ try{
630
+ if (x && $("input:focus").length == 0) {
631
+ tools.noSel(setting);
632
+ }
633
+ } catch(e) {}
634
+ return r;
635
+ }
636
+ },
637
+ //method of event handler
638
+ handler = {
639
+ onSwitchNode: function (event, node) {
640
+ var setting = settings[event.data.treeId];
641
+ if (node.open) {
642
+ if (tools.apply(setting.callback.beforeCollapse, [setting.treeId, node], true) == false) return true;
643
+ data.getRoot(setting).expandTriggerFlag = true;
644
+ view.switchNode(setting, node);
645
+ } else {
646
+ if (tools.apply(setting.callback.beforeExpand, [setting.treeId, node], true) == false) return true;
647
+ data.getRoot(setting).expandTriggerFlag = true;
648
+ view.switchNode(setting, node);
649
+ }
650
+ return true;
651
+ },
652
+ onClickNode: function (event, node) {
653
+ var setting = settings[event.data.treeId],
654
+ clickFlag = ( (setting.view.autoCancelSelected && event.ctrlKey) && data.isSelectedNode(setting, node)) ? 0 : (setting.view.autoCancelSelected && event.ctrlKey && setting.view.selectedMulti) ? 2 : 1;
655
+ if (tools.apply(setting.callback.beforeClick, [setting.treeId, node, clickFlag], true) == false) return true;
656
+ if (clickFlag === 0) {
657
+ view.cancelPreSelectedNode(setting, node);
658
+ } else {
659
+ view.selectNode(setting, node, clickFlag === 2);
660
+ }
661
+ setting.treeObj.trigger(consts.event.CLICK, [event, setting.treeId, node, clickFlag]);
662
+ return true;
663
+ },
664
+ onZTreeMousedown: function(event, node) {
665
+ var setting = settings[event.data.treeId];
666
+ if (tools.apply(setting.callback.beforeMouseDown, [setting.treeId, node], true)) {
667
+ tools.apply(setting.callback.onMouseDown, [event, setting.treeId, node]);
668
+ }
669
+ return true;
670
+ },
671
+ onZTreeMouseup: function(event, node) {
672
+ var setting = settings[event.data.treeId];
673
+ if (tools.apply(setting.callback.beforeMouseUp, [setting.treeId, node], true)) {
674
+ tools.apply(setting.callback.onMouseUp, [event, setting.treeId, node]);
675
+ }
676
+ return true;
677
+ },
678
+ onZTreeDblclick: function(event, node) {
679
+ var setting = settings[event.data.treeId];
680
+ if (tools.apply(setting.callback.beforeDblClick, [setting.treeId, node], true)) {
681
+ tools.apply(setting.callback.onDblClick, [event, setting.treeId, node]);
682
+ }
683
+ return true;
684
+ },
685
+ onZTreeContextmenu: function(event, node) {
686
+ var setting = settings[event.data.treeId];
687
+ if (tools.apply(setting.callback.beforeRightClick, [setting.treeId, node], true)) {
688
+ tools.apply(setting.callback.onRightClick, [event, setting.treeId, node]);
689
+ }
690
+ return (typeof setting.callback.onRightClick) != "function";
691
+ }
692
+ },
693
+ //method of tools for zTree
694
+ tools = {
695
+ apply: function(fun, param, defaultValue) {
696
+ if ((typeof fun) == "function") {
697
+ return fun.apply(zt, param?param:[]);
698
+ }
699
+ return defaultValue;
700
+ },
701
+ canAsync: function(setting, node) {
702
+ var childKey = setting.data.key.children;
703
+ return (setting.async.enable && node && node.isParent && !(node.zAsync || (node[childKey] && node[childKey].length > 0)));
704
+ },
705
+ clone: function (jsonObj) {
706
+ var buf;
707
+ if (jsonObj instanceof Array) {
708
+ buf = [];
709
+ var i = jsonObj.length;
710
+ while (i--) {
711
+ buf[i] = arguments.callee(jsonObj[i]);
712
+ }
713
+ return buf;
714
+ }else if (typeof jsonObj == "function"){
715
+ return jsonObj;
716
+ }else if (jsonObj instanceof Object){
717
+ buf = {};
718
+ for (var k in jsonObj) {
719
+ buf[k] = arguments.callee(jsonObj[k]);
720
+ }
721
+ return buf;
722
+ }else{
723
+ return jsonObj;
724
+ }
725
+ },
726
+ eqs: function(str1, str2) {
727
+ return str1.toLowerCase() === str2.toLowerCase();
728
+ },
729
+ isArray: function(arr) {
730
+ return Object.prototype.toString.apply(arr) === "[object Array]";
731
+ },
732
+ getMDom: function (setting, curDom, targetExpr) {
733
+ if (!curDom) return null;
734
+ while (curDom && curDom.id !== setting.treeId) {
735
+ for (var i=0, l=targetExpr.length; curDom.tagName && i<l; i++) {
736
+ if (tools.eqs(curDom.tagName, targetExpr[i].tagName) && curDom.getAttribute(targetExpr[i].attrName) !== null) {
737
+ return curDom;
738
+ }
739
+ }
740
+ curDom = curDom.parentNode;
741
+ }
742
+ return null;
743
+ },
744
+ noSel: function(setting) {
745
+ var r = data.getRoot(setting);
746
+ if (r.noSelection) {
747
+ try {
748
+ window.getSelection ? window.getSelection().removeAllRanges() : document.selection.empty();
749
+ } catch(e){}
750
+ }
751
+ },
752
+ uCanDo: function(setting, e) {
753
+ return true;
754
+ }
755
+ },
756
+ //method of operate ztree dom
757
+ view = {
758
+ addNodes: function(setting, parentNode, newNodes, isSilent) {
759
+ if (setting.data.keep.leaf && parentNode && !parentNode.isParent) {
760
+ return;
761
+ }
762
+ if (!tools.isArray(newNodes)) {
763
+ newNodes = [newNodes];
764
+ }
765
+ if (setting.data.simpleData.enable) {
766
+ newNodes = data.transformTozTreeFormat(setting, newNodes);
767
+ }
768
+ if (parentNode) {
769
+ var target_switchObj = $("#" + parentNode.tId + consts.id.SWITCH),
770
+ target_icoObj = $("#" + parentNode.tId + consts.id.ICON),
771
+ target_ulObj = $("#" + parentNode.tId + consts.id.UL);
772
+
773
+ if (!parentNode.open) {
774
+ view.replaceSwitchClass(parentNode, target_switchObj, consts.folder.CLOSE);
775
+ view.replaceIcoClass(parentNode, target_icoObj, consts.folder.CLOSE);
776
+ parentNode.open = false;
777
+ target_ulObj.css({
778
+ "display": "none"
779
+ });
780
+ }
781
+
782
+ data.addNodesData(setting, parentNode, newNodes);
783
+ view.createNodes(setting, parentNode.level + 1, newNodes, parentNode);
784
+ if (!isSilent) {
785
+ view.expandCollapseParentNode(setting, parentNode, true);
786
+ }
787
+ } else {
788
+ data.addNodesData(setting, data.getRoot(setting), newNodes);
789
+ view.createNodes(setting, 0, newNodes, null);
790
+ }
791
+ },
792
+ appendNodes: function(setting, level, nodes, parentNode, initFlag, openFlag) {
793
+ if (!nodes) return [];
794
+ var html = [],
795
+ childKey = setting.data.key.children;
796
+ for (var i = 0, l = nodes.length; i < l; i++) {
797
+ var node = nodes[i];
798
+ if (initFlag) {
799
+ var tmpPNode = (parentNode) ? parentNode: data.getRoot(setting),
800
+ tmpPChild = tmpPNode[childKey],
801
+ isFirstNode = ((tmpPChild.length == nodes.length) && (i == 0)),
802
+ isLastNode = (i == (nodes.length - 1));
803
+ data.initNode(setting, level, node, parentNode, isFirstNode, isLastNode, openFlag);
804
+ data.addNodeCache(setting, node);
805
+ }
806
+
807
+ var childHtml = [];
808
+ if (node[childKey] && node[childKey].length > 0) {
809
+ //make child html first, because checkType
810
+ childHtml = view.appendNodes(setting, level + 1, node[childKey], node, initFlag, openFlag && node.open);
811
+ }
812
+ if (openFlag) {
813
+
814
+ view.makeDOMNodeMainBefore(html, setting, node);
815
+ view.makeDOMNodeLine(html, setting, node);
816
+ data.getBeforeA(setting, node, html);
817
+ view.makeDOMNodeNameBefore(html, setting, node);
818
+ data.getInnerBeforeA(setting, node, html);
819
+ view.makeDOMNodeIcon(html, setting, node);
820
+ data.getInnerAfterA(setting, node, html);
821
+ view.makeDOMNodeNameAfter(html, setting, node);
822
+ data.getAfterA(setting, node, html);
823
+ if (node.isParent && node.open) {
824
+ view.makeUlHtml(setting, node, html, childHtml.join(''));
825
+ }
826
+ view.makeDOMNodeMainAfter(html, setting, node);
827
+ data.addCreatedNode(setting, node);
828
+ }
829
+ }
830
+ return html;
831
+ },
832
+ appendParentULDom: function(setting, node) {
833
+ var html = [],
834
+ nObj = $("#" + node.tId),
835
+ ulObj = $("#" + node.tId + consts.id.UL),
836
+ childKey = setting.data.key.children,
837
+ childHtml = view.appendNodes(setting, node.level+1, node[childKey], node, false, true);
838
+ view.makeUlHtml(setting, node, html, childHtml.join(''));
839
+ if (!nObj.get(0) && !!node.parentTId) {
840
+ view.appendParentULDom(setting, node.getParentNode());
841
+ nObj = $("#" + node.tId);
842
+ }
843
+ if (ulObj.get(0)) {
844
+ ulObj.remove();
845
+ }
846
+ nObj.append(html.join(''));
847
+ },
848
+ asyncNode: function(setting, node, isSilent, callback) {
849
+ var i, l;
850
+ if (node && !node.isParent) {
851
+ tools.apply(callback);
852
+ return false;
853
+ } else if (node && node.isAjaxing) {
854
+ return false;
855
+ } else if (tools.apply(setting.callback.beforeAsync, [setting.treeId, node], true) == false) {
856
+ tools.apply(callback);
857
+ return false;
858
+ }
859
+ if (node) {
860
+ node.isAjaxing = true;
861
+ var icoObj = $("#" + node.tId + consts.id.ICON);
862
+ icoObj.attr({"style":"", "class":"button ico_loading"});
863
+ }
864
+
865
+ var isJson = (setting.async.contentType == "application/json"), tmpParam = isJson ? "{" : "", jTemp="";
866
+ for (i = 0, l = setting.async.autoParam.length; node && i < l; i++) {
867
+ var pKey = setting.async.autoParam[i].split("="), spKey = pKey;
868
+ if (pKey.length>1) {
869
+ spKey = pKey[1];
870
+ pKey = pKey[0];
871
+ }
872
+ if (isJson) {
873
+ jTemp = (typeof node[pKey] == "string") ? '"' : '';
874
+ tmpParam += '"' + spKey + ('":' + jTemp + node[pKey]).replace(/'/g,'\\\'') + jTemp + ',';
875
+ } else {
876
+ tmpParam += spKey + ("=" + node[pKey]).replace(/&/g,'%26') + "&";
877
+ }
878
+ }
879
+ if (tools.isArray(setting.async.otherParam)) {
880
+ for (i = 0, l = setting.async.otherParam.length; i < l; i += 2) {
881
+ if (isJson) {
882
+ jTemp = (typeof setting.async.otherParam[i + 1] == "string") ? '"' : '';
883
+ tmpParam += '"' + setting.async.otherParam[i] + ('":' + jTemp + setting.async.otherParam[i + 1]).replace(/'/g,'\\\'') + jTemp + ",";
884
+ } else {
885
+ tmpParam += setting.async.otherParam[i] + ("=" + setting.async.otherParam[i + 1]).replace(/&/g,'%26') + "&";
886
+ }
887
+ }
888
+ } else {
889
+ for (var p in setting.async.otherParam) {
890
+ if (isJson) {
891
+ jTemp = (typeof setting.async.otherParam[p] == "string") ? '"' : '';
892
+ tmpParam += '"' + p + ('":' + jTemp + setting.async.otherParam[p]).replace(/'/g,'\\\'') + jTemp + ",";
893
+ } else {
894
+ tmpParam += p + ("=" + setting.async.otherParam[p]).replace(/&/g,'%26') + "&";
895
+ }
896
+ }
897
+ }
898
+ if (tmpParam.length > 1) tmpParam = tmpParam.substring(0, tmpParam.length-1);
899
+ if (isJson) tmpParam += "}";
900
+
901
+ $.ajax({
902
+ contentType: setting.async.contentType,
903
+ type: setting.async.type,
904
+ url: tools.apply(setting.async.url, [setting.treeId, node], setting.async.url),
905
+ data: tmpParam,
906
+ dataType: setting.async.dataType,
907
+ success: function(msg) {
908
+ var newNodes = [];
909
+ try {
910
+ if (!msg || msg.length == 0) {
911
+ newNodes = [];
912
+ } else if (typeof msg == "string") {
913
+ newNodes = eval("(" + msg + ")");
914
+ } else {
915
+ newNodes = msg;
916
+ }
917
+ } catch(err) {}
918
+
919
+ if (node) {
920
+ node.isAjaxing = null;
921
+ node.zAsync = true;
922
+ }
923
+ view.setNodeLineIcos(setting, node);
924
+ if (newNodes && newNodes !== "") {
925
+ newNodes = tools.apply(setting.async.dataFilter, [setting.treeId, node, newNodes], newNodes);
926
+ view.addNodes(setting, node, !!newNodes ? tools.clone(newNodes) : [], !!isSilent);
927
+ } else {
928
+ view.addNodes(setting, node, [], !!isSilent);
929
+ }
930
+ setting.treeObj.trigger(consts.event.ASYNC_SUCCESS, [setting.treeId, node, msg]);
931
+ tools.apply(callback);
932
+ },
933
+ error: function(XMLHttpRequest, textStatus, errorThrown) {
934
+ if (node) node.isAjaxing = null;
935
+ view.setNodeLineIcos(setting, node);
936
+ setting.treeObj.trigger(consts.event.ASYNC_ERROR, [setting.treeId, node, XMLHttpRequest, textStatus, errorThrown]);
937
+ }
938
+ });
939
+ return true;
940
+ },
941
+ cancelPreSelectedNode: function (setting, node) {
942
+ var list = data.getRoot(setting).curSelectedList;
943
+ for (var i=0, j=list.length-1; j>=i; j--) {
944
+ if (!node || node === list[j]) {
945
+ $("#" + list[j].tId + consts.id.A).removeClass(consts.node.CURSELECTED);
946
+ view.setNodeName(setting, list[j]);
947
+ if (node) {
948
+ data.removeSelectedNode(setting, node);
949
+ break;
950
+ }
951
+ }
952
+ }
953
+ if (!node) data.getRoot(setting).curSelectedList = [];
954
+ },
955
+ createNodeCallback: function(setting) {
956
+ if (!!setting.callback.onNodeCreated || !!setting.view.addDiyDom) {
957
+ var root = data.getRoot(setting);
958
+ while (root.createdNodes.length>0) {
959
+ var node = root.createdNodes.shift();
960
+ tools.apply(setting.view.addDiyDom, [setting.treeId, node]);
961
+ if (!!setting.callback.onNodeCreated) {
962
+ setting.treeObj.trigger(consts.event.NODECREATED, [setting.treeId, node]);
963
+ }
964
+ }
965
+ }
966
+ },
967
+ createNodes: function(setting, level, nodes, parentNode) {
968
+ if (!nodes || nodes.length == 0) return;
969
+ var root = data.getRoot(setting),
970
+ childKey = setting.data.key.children,
971
+ openFlag = !parentNode || parentNode.open || !!$("#" + parentNode[childKey][0].tId).get(0);
972
+ root.createdNodes = [];
973
+ var zTreeHtml = view.appendNodes(setting, level, nodes, parentNode, true, openFlag);
974
+ if (!parentNode) {
975
+ setting.treeObj.append(zTreeHtml.join(''));
976
+ } else {
977
+ var ulObj = $("#" + parentNode.tId + consts.id.UL);
978
+ if (ulObj.get(0)) {
979
+ ulObj.append(zTreeHtml.join(''));
980
+ }
981
+ }
982
+ view.createNodeCallback(setting);
983
+ },
984
+ expandCollapseNode: function(setting, node, expandFlag, animateFlag, callback) {
985
+ var root = data.getRoot(setting),
986
+ childKey = setting.data.key.children;
987
+ if (!node) {
988
+ tools.apply(callback, []);
989
+ return;
990
+ }
991
+ if (root.expandTriggerFlag) {
992
+ var _callback = callback;
993
+ callback = function(){
994
+ if (_callback) _callback();
995
+ if (node.open) {
996
+ setting.treeObj.trigger(consts.event.EXPAND, [setting.treeId, node]);
997
+ } else {
998
+ setting.treeObj.trigger(consts.event.COLLAPSE, [setting.treeId, node]);
999
+ }
1000
+ };
1001
+ root.expandTriggerFlag = false;
1002
+ }
1003
+ if (node.open == expandFlag) {
1004
+ tools.apply(callback, []);
1005
+ return;
1006
+ }
1007
+ if (!node.open && node.isParent && ((!$("#" + node.tId + consts.id.UL).get(0)) || (node[childKey] && node[childKey].length>0 && !$("#" + node[childKey][0].tId).get(0)))) {
1008
+ view.appendParentULDom(setting, node);
1009
+ view.createNodeCallback(setting);
1010
+ }
1011
+ var ulObj = $("#" + node.tId + consts.id.UL),
1012
+ switchObj = $("#" + node.tId + consts.id.SWITCH),
1013
+ icoObj = $("#" + node.tId + consts.id.ICON);
1014
+
1015
+ if (node.isParent) {
1016
+ node.open = !node.open;
1017
+ if (node.iconOpen && node.iconClose) {
1018
+ icoObj.attr("style", view.makeNodeIcoStyle(setting, node));
1019
+ }
1020
+
1021
+ if (node.open) {
1022
+ view.replaceSwitchClass(node, switchObj, consts.folder.OPEN);
1023
+ view.replaceIcoClass(node, icoObj, consts.folder.OPEN);
1024
+ if (animateFlag == false || setting.view.expandSpeed == "") {
1025
+ ulObj.show();
1026
+ tools.apply(callback, []);
1027
+ } else {
1028
+ if (node[childKey] && node[childKey].length > 0) {
1029
+ ulObj.slideDown(setting.view.expandSpeed, callback);
1030
+ } else {
1031
+ ulObj.show();
1032
+ tools.apply(callback, []);
1033
+ }
1034
+ }
1035
+ } else {
1036
+ view.replaceSwitchClass(node, switchObj, consts.folder.CLOSE);
1037
+ view.replaceIcoClass(node, icoObj, consts.folder.CLOSE);
1038
+ if (animateFlag == false || setting.view.expandSpeed == "" || !(node[childKey] && node[childKey].length > 0)) {
1039
+ ulObj.hide();
1040
+ tools.apply(callback, []);
1041
+ } else {
1042
+ ulObj.slideUp(setting.view.expandSpeed, callback);
1043
+ }
1044
+ }
1045
+ } else {
1046
+ tools.apply(callback, []);
1047
+ }
1048
+ },
1049
+ expandCollapseParentNode: function(setting, node, expandFlag, animateFlag, callback) {
1050
+ if (!node) return;
1051
+ if (!node.parentTId) {
1052
+ view.expandCollapseNode(setting, node, expandFlag, animateFlag, callback);
1053
+ return;
1054
+ } else {
1055
+ view.expandCollapseNode(setting, node, expandFlag, animateFlag);
1056
+ }
1057
+ if (node.parentTId) {
1058
+ view.expandCollapseParentNode(setting, node.getParentNode(), expandFlag, animateFlag, callback);
1059
+ }
1060
+ },
1061
+ expandCollapseSonNode: function(setting, node, expandFlag, animateFlag, callback) {
1062
+ var root = data.getRoot(setting),
1063
+ childKey = setting.data.key.children,
1064
+ treeNodes = (node) ? node[childKey]: root[childKey],
1065
+ selfAnimateSign = (node) ? false : animateFlag,
1066
+ expandTriggerFlag = data.getRoot(setting).expandTriggerFlag;
1067
+ data.getRoot(setting).expandTriggerFlag = false;
1068
+ if (treeNodes) {
1069
+ for (var i = 0, l = treeNodes.length; i < l; i++) {
1070
+ if (treeNodes[i]) view.expandCollapseSonNode(setting, treeNodes[i], expandFlag, selfAnimateSign);
1071
+ }
1072
+ }
1073
+ data.getRoot(setting).expandTriggerFlag = expandTriggerFlag;
1074
+ view.expandCollapseNode(setting, node, expandFlag, animateFlag, callback );
1075
+ },
1076
+ makeDOMNodeIcon: function(html, setting, node) {
1077
+ var nameKey = setting.data.key.name,
1078
+ name = setting.view.nameIsHTML ? node[nameKey] : node[nameKey].replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;');
1079
+ html.push("<span id='", node.tId, consts.id.ICON,
1080
+ "' title='' treeNode", consts.id.ICON," class='", view.makeNodeIcoClass(setting, node),
1081
+ "' style='", view.makeNodeIcoStyle(setting, node), "'></span><span id='", node.tId, consts.id.SPAN,
1082
+ "'>",name,"</span>");
1083
+ },
1084
+ makeDOMNodeLine: function(html, setting, node) {
1085
+ html.push("<span id='", node.tId, consts.id.SWITCH, "' title='' class='", view.makeNodeLineClass(setting, node), "' treeNode", consts.id.SWITCH,"></span>");
1086
+ },
1087
+ makeDOMNodeMainAfter: function(html, setting, node) {
1088
+ html.push("</li>");
1089
+ },
1090
+ makeDOMNodeMainBefore: function(html, setting, node) {
1091
+ html.push("<li id='", node.tId, "' class='level", node.level,"' tabindex='0' hidefocus='true' treenode>");
1092
+ },
1093
+ makeDOMNodeNameAfter: function(html, setting, node) {
1094
+ html.push("</a>");
1095
+ },
1096
+ makeDOMNodeNameBefore: function(html, setting, node) {
1097
+ var titleKey = data.getTitleKey(setting),
1098
+ url = view.makeNodeUrl(setting, node),
1099
+ fontcss = view.makeNodeFontCss(setting, node),
1100
+ fontStyle = [];
1101
+ for (var f in fontcss) {
1102
+ fontStyle.push(f, ":", fontcss[f], ";");
1103
+ }
1104
+ html.push("<a id='", node.tId, consts.id.A, "' class='level", node.level,"' treeNode", consts.id.A," onclick=\"", (node.click || ''),
1105
+ "\" ", ((url != null && url.length > 0) ? "href='" + url + "'" : ""), " target='",view.makeNodeTarget(node),"' style='", fontStyle.join(''),
1106
+ "'");
1107
+ if (tools.apply(setting.view.showTitle, [setting.treeId, node], setting.view.showTitle) && node[titleKey]) {html.push("title='", node[titleKey].replace(/'/g,"&#39;").replace(/</g,'&lt;').replace(/>/g,'&gt;'),"'");}
1108
+ html.push(">");
1109
+ },
1110
+ makeNodeFontCss: function(setting, node) {
1111
+ var fontCss = tools.apply(setting.view.fontCss, [setting.treeId, node], setting.view.fontCss);
1112
+ return (fontCss && ((typeof fontCss) != "function")) ? fontCss : {};
1113
+ },
1114
+ makeNodeIcoClass: function(setting, node) {
1115
+ var icoCss = ["ico"];
1116
+ if (!node.isAjaxing) {
1117
+ icoCss[0] = (node.iconSkin ? node.iconSkin + "_" : "") + icoCss[0];
1118
+ if (node.isParent) {
1119
+ icoCss.push(node.open ? consts.folder.OPEN : consts.folder.CLOSE);
1120
+ } else {
1121
+ icoCss.push(consts.folder.DOCU);
1122
+ }
1123
+ }
1124
+ return "button " + icoCss.join('_');
1125
+ },
1126
+ makeNodeIcoStyle: function(setting, node) {
1127
+ var icoStyle = [];
1128
+ if (!node.isAjaxing) {
1129
+ var icon = (node.isParent && node.iconOpen && node.iconClose) ? (node.open ? node.iconOpen : node.iconClose) : node.icon;
1130
+ if (icon) icoStyle.push("background:url(", icon, ") 0 0 no-repeat;");
1131
+ if (setting.view.showIcon == false || !tools.apply(setting.view.showIcon, [setting.treeId, node], true)) {
1132
+ icoStyle.push("width:0px;height:0px;");
1133
+ }
1134
+ }
1135
+ return icoStyle.join('');
1136
+ },
1137
+ makeNodeLineClass: function(setting, node) {
1138
+ var lineClass = [];
1139
+ if (setting.view.showLine) {
1140
+ if (node.level == 0 && node.isFirstNode && node.isLastNode) {
1141
+ lineClass.push(consts.line.ROOT);
1142
+ } else if (node.level == 0 && node.isFirstNode) {
1143
+ lineClass.push(consts.line.ROOTS);
1144
+ } else if (node.isLastNode) {
1145
+ lineClass.push(consts.line.BOTTOM);
1146
+ } else {
1147
+ lineClass.push(consts.line.CENTER);
1148
+ }
1149
+ } else {
1150
+ lineClass.push(consts.line.NOLINE);
1151
+ }
1152
+ if (node.isParent) {
1153
+ lineClass.push(node.open ? consts.folder.OPEN : consts.folder.CLOSE);
1154
+ } else {
1155
+ lineClass.push(consts.folder.DOCU);
1156
+ }
1157
+ return view.makeNodeLineClassEx(node) + lineClass.join('_');
1158
+ },
1159
+ makeNodeLineClassEx: function(node) {
1160
+ return "button level" + node.level + " switch ";
1161
+ },
1162
+ makeNodeTarget: function(node) {
1163
+ return (node.target || "_blank");
1164
+ },
1165
+ makeNodeUrl: function(setting, node) {
1166
+ var urlKey = setting.data.key.url;
1167
+ return node[urlKey] ? node[urlKey] : null;
1168
+ },
1169
+ makeUlHtml: function(setting, node, html, content) {
1170
+ html.push("<ul id='", node.tId, consts.id.UL, "' class='level", node.level, " ", view.makeUlLineClass(setting, node), "' style='display:", (node.open ? "block": "none"),"'>");
1171
+ html.push(content);
1172
+ html.push("</ul>");
1173
+ },
1174
+ makeUlLineClass: function(setting, node) {
1175
+ return ((setting.view.showLine && !node.isLastNode) ? consts.line.LINE : "");
1176
+ },
1177
+ removeChildNodes: function(setting, node) {
1178
+ if (!node) return;
1179
+ var childKey = setting.data.key.children,
1180
+ nodes = node[childKey];
1181
+ if (!nodes) return;
1182
+
1183
+ for (var i = 0, l = nodes.length; i < l; i++) {
1184
+ data.removeNodeCache(setting, nodes[i]);
1185
+ }
1186
+ data.removeSelectedNode(setting);
1187
+ delete node[childKey];
1188
+
1189
+ if (!setting.data.keep.parent) {
1190
+ node.isParent = false;
1191
+ node.open = false;
1192
+ var tmp_switchObj = $("#" + node.tId + consts.id.SWITCH),
1193
+ tmp_icoObj = $("#" + node.tId + consts.id.ICON);
1194
+ view.replaceSwitchClass(node, tmp_switchObj, consts.folder.DOCU);
1195
+ view.replaceIcoClass(node, tmp_icoObj, consts.folder.DOCU);
1196
+ $("#" + node.tId + consts.id.UL).remove();
1197
+ } else {
1198
+ $("#" + node.tId + consts.id.UL).empty();
1199
+ }
1200
+ },
1201
+ setFirstNode: function(setting, parentNode) {
1202
+ var childKey = setting.data.key.children, childLength = parentNode[childKey].length;
1203
+ if ( childLength > 0) {
1204
+ parentNode[childKey][0].isFirstNode = true;
1205
+ }
1206
+ },
1207
+ setLastNode: function(setting, parentNode) {
1208
+ var childKey = setting.data.key.children, childLength = parentNode[childKey].length;
1209
+ if ( childLength > 0) {
1210
+ parentNode[childKey][childLength - 1].isLastNode = true;
1211
+ }
1212
+ },
1213
+ removeNode: function(setting, node) {
1214
+ var root = data.getRoot(setting),
1215
+ childKey = setting.data.key.children,
1216
+ parentNode = (node.parentTId) ? node.getParentNode() : root;
1217
+
1218
+ node.isFirstNode = false;
1219
+ node.isLastNode = false;
1220
+ node.getPreNode = function() {return null;};
1221
+ node.getNextNode = function() {return null;};
1222
+
1223
+ $("#" + node.tId).remove();
1224
+ data.removeNodeCache(setting, node);
1225
+ data.removeSelectedNode(setting, node);
1226
+
1227
+ for (var i = 0, l = parentNode[childKey].length; i < l; i++) {
1228
+ if (parentNode[childKey][i].tId == node.tId) {
1229
+ parentNode[childKey].splice(i, 1);
1230
+ break;
1231
+ }
1232
+ }
1233
+ view.setFirstNode(setting, parentNode);
1234
+ view.setLastNode(setting, parentNode);
1235
+
1236
+ var tmp_ulObj,tmp_switchObj,tmp_icoObj,
1237
+ childLength = parentNode[childKey].length;
1238
+
1239
+ //repair nodes old parent
1240
+ if (!setting.data.keep.parent && childLength == 0) {
1241
+ //old parentNode has no child nodes
1242
+ parentNode.isParent = false;
1243
+ parentNode.open = false;
1244
+ tmp_ulObj = $("#" + parentNode.tId + consts.id.UL);
1245
+ tmp_switchObj = $("#" + parentNode.tId + consts.id.SWITCH);
1246
+ tmp_icoObj = $("#" + parentNode.tId + consts.id.ICON);
1247
+ view.replaceSwitchClass(parentNode, tmp_switchObj, consts.folder.DOCU);
1248
+ view.replaceIcoClass(parentNode, tmp_icoObj, consts.folder.DOCU);
1249
+ tmp_ulObj.css("display", "none");
1250
+
1251
+ } else if (setting.view.showLine && childLength > 0) {
1252
+ //old parentNode has child nodes
1253
+ var newLast = parentNode[childKey][childLength - 1];
1254
+ tmp_ulObj = $("#" + newLast.tId + consts.id.UL);
1255
+ tmp_switchObj = $("#" + newLast.tId + consts.id.SWITCH);
1256
+ tmp_icoObj = $("#" + newLast.tId + consts.id.ICON);
1257
+ if (parentNode == root) {
1258
+ if (parentNode[childKey].length == 1) {
1259
+ //node was root, and ztree has only one root after move node
1260
+ view.replaceSwitchClass(newLast, tmp_switchObj, consts.line.ROOT);
1261
+ } else {
1262
+ var tmp_first_switchObj = $("#" + parentNode[childKey][0].tId + consts.id.SWITCH);
1263
+ view.replaceSwitchClass(parentNode[childKey][0], tmp_first_switchObj, consts.line.ROOTS);
1264
+ view.replaceSwitchClass(newLast, tmp_switchObj, consts.line.BOTTOM);
1265
+ }
1266
+ } else {
1267
+ view.replaceSwitchClass(newLast, tmp_switchObj, consts.line.BOTTOM);
1268
+ }
1269
+ tmp_ulObj.removeClass(consts.line.LINE);
1270
+ }
1271
+ },
1272
+ replaceIcoClass: function(node, obj, newName) {
1273
+ if (!obj || node.isAjaxing) return;
1274
+ var tmpName = obj.attr("class");
1275
+ if (tmpName == undefined) return;
1276
+ var tmpList = tmpName.split("_");
1277
+ switch (newName) {
1278
+ case consts.folder.OPEN:
1279
+ case consts.folder.CLOSE:
1280
+ case consts.folder.DOCU:
1281
+ tmpList[tmpList.length-1] = newName;
1282
+ break;
1283
+ }
1284
+ obj.attr("class", tmpList.join("_"));
1285
+ },
1286
+ replaceSwitchClass: function(node, obj, newName) {
1287
+ if (!obj) return;
1288
+ var tmpName = obj.attr("class");
1289
+ if (tmpName == undefined) return;
1290
+ var tmpList = tmpName.split("_");
1291
+ switch (newName) {
1292
+ case consts.line.ROOT:
1293
+ case consts.line.ROOTS:
1294
+ case consts.line.CENTER:
1295
+ case consts.line.BOTTOM:
1296
+ case consts.line.NOLINE:
1297
+ tmpList[0] = view.makeNodeLineClassEx(node) + newName;
1298
+ break;
1299
+ case consts.folder.OPEN:
1300
+ case consts.folder.CLOSE:
1301
+ case consts.folder.DOCU:
1302
+ tmpList[1] = newName;
1303
+ break;
1304
+ }
1305
+ obj.attr("class", tmpList.join("_"));
1306
+ if (newName !== consts.folder.DOCU) {
1307
+ obj.removeAttr("disabled");
1308
+ } else {
1309
+ obj.attr("disabled", "disabled");
1310
+ }
1311
+ },
1312
+ selectNode: function(setting, node, addFlag) {
1313
+ if (!addFlag) {
1314
+ view.cancelPreSelectedNode(setting);
1315
+ }
1316
+ $("#" + node.tId + consts.id.A).addClass(consts.node.CURSELECTED);
1317
+ data.addSelectedNode(setting, node);
1318
+ },
1319
+ setNodeFontCss: function(setting, treeNode) {
1320
+ var aObj = $("#" + treeNode.tId + consts.id.A),
1321
+ fontCss = view.makeNodeFontCss(setting, treeNode);
1322
+ if (fontCss) {
1323
+ aObj.css(fontCss);
1324
+ }
1325
+ },
1326
+ setNodeLineIcos: function(setting, node) {
1327
+ if (!node) return;
1328
+ var switchObj = $("#" + node.tId + consts.id.SWITCH),
1329
+ ulObj = $("#" + node.tId + consts.id.UL),
1330
+ icoObj = $("#" + node.tId + consts.id.ICON),
1331
+ ulLine = view.makeUlLineClass(setting, node);
1332
+ if (ulLine.length==0) {
1333
+ ulObj.removeClass(consts.line.LINE);
1334
+ } else {
1335
+ ulObj.addClass(ulLine);
1336
+ }
1337
+ switchObj.attr("class", view.makeNodeLineClass(setting, node));
1338
+ if (node.isParent) {
1339
+ switchObj.removeAttr("disabled");
1340
+ } else {
1341
+ switchObj.attr("disabled", "disabled");
1342
+ }
1343
+ icoObj.removeAttr("style");
1344
+ icoObj.attr("style", view.makeNodeIcoStyle(setting, node));
1345
+ icoObj.attr("class", view.makeNodeIcoClass(setting, node));
1346
+ },
1347
+ setNodeName: function(setting, node) {
1348
+ var nameKey = setting.data.key.name,
1349
+ titleKey = data.getTitleKey(setting),
1350
+ nObj = $("#" + node.tId + consts.id.SPAN);
1351
+ nObj.empty();
1352
+ if (setting.view.nameIsHTML) {
1353
+ nObj.html(node[nameKey]);
1354
+ } else {
1355
+ nObj.text(node[nameKey]);
1356
+ }
1357
+ if (tools.apply(setting.view.showTitle, [setting.treeId, node], setting.view.showTitle)) {
1358
+ var aObj = $("#" + node.tId + consts.id.A);
1359
+ aObj.attr("title", !node[titleKey] ? "" : node[titleKey]);
1360
+ }
1361
+ },
1362
+ setNodeTarget: function(node) {
1363
+ var aObj = $("#" + node.tId + consts.id.A);
1364
+ aObj.attr("target", view.makeNodeTarget(node));
1365
+ },
1366
+ setNodeUrl: function(setting, node) {
1367
+ var aObj = $("#" + node.tId + consts.id.A),
1368
+ url = view.makeNodeUrl(setting, node);
1369
+ if (url == null || url.length == 0) {
1370
+ aObj.removeAttr("href");
1371
+ } else {
1372
+ aObj.attr("href", url);
1373
+ }
1374
+ },
1375
+ switchNode: function(setting, node) {
1376
+ if (node.open || !tools.canAsync(setting, node)) {
1377
+ view.expandCollapseNode(setting, node, !node.open);
1378
+ } else if (setting.async.enable) {
1379
+ if (!view.asyncNode(setting, node)) {
1380
+ view.expandCollapseNode(setting, node, !node.open);
1381
+ return;
1382
+ }
1383
+ } else if (node) {
1384
+ view.expandCollapseNode(setting, node, !node.open);
1385
+ }
1386
+ }
1387
+ };
1388
+ // zTree defind
1389
+ $.fn.zTree = {
1390
+ consts : _consts,
1391
+ _z : {
1392
+ tools: tools,
1393
+ view: view,
1394
+ event: event,
1395
+ data: data
1396
+ },
1397
+ getZTreeObj: function(treeId) {
1398
+ var o = data.getZTreeTools(treeId);
1399
+ return o ? o : null;
1400
+ },
1401
+ init: function(obj, zSetting, zNodes) {
1402
+ var setting = tools.clone(_setting);
1403
+ $.extend(true, setting, zSetting);
1404
+ setting.treeId = obj.attr("id");
1405
+ setting.treeObj = obj;
1406
+ setting.treeObj.empty();
1407
+ settings[setting.treeId] = setting;
1408
+ if ($.browser.msie && parseInt($.browser.version)<7) {
1409
+ setting.view.expandSpeed = "";
1410
+ }
1411
+
1412
+ data.initRoot(setting);
1413
+ var root = data.getRoot(setting),
1414
+ childKey = setting.data.key.children;
1415
+ zNodes = zNodes ? tools.clone(tools.isArray(zNodes)? zNodes : [zNodes]) : [];
1416
+ if (setting.data.simpleData.enable) {
1417
+ root[childKey] = data.transformTozTreeFormat(setting, zNodes);
1418
+ } else {
1419
+ root[childKey] = zNodes;
1420
+ }
1421
+
1422
+ data.initCache(setting);
1423
+ event.bindTree(setting);
1424
+ event.bindEvent(setting);
1425
+
1426
+ var zTreeTools = {
1427
+ setting : setting,
1428
+ addNodes : function(parentNode, newNodes, isSilent) {
1429
+ if (!newNodes) return null;
1430
+ if (!parentNode) parentNode = null;
1431
+ if (parentNode && !parentNode.isParent && setting.data.keep.leaf) return null;
1432
+ var xNewNodes = tools.clone(tools.isArray(newNodes)? newNodes: [newNodes]);
1433
+ function addCallback() {
1434
+ view.addNodes(setting, parentNode, xNewNodes, (isSilent==true));
1435
+ }
1436
+
1437
+ if (tools.canAsync(setting, parentNode)) {
1438
+ view.asyncNode(setting, parentNode, isSilent, addCallback);
1439
+ } else {
1440
+ addCallback();
1441
+ }
1442
+ return xNewNodes;
1443
+ },
1444
+ cancelSelectedNode : function(node) {
1445
+ view.cancelPreSelectedNode(this.setting, node);
1446
+ },
1447
+ expandAll : function(expandFlag) {
1448
+ expandFlag = !!expandFlag;
1449
+ view.expandCollapseSonNode(this.setting, null, expandFlag, true);
1450
+ return expandFlag;
1451
+ },
1452
+ expandNode : function(node, expandFlag, sonSign, focus, callbackFlag) {
1453
+ if (!node || !node.isParent) return null;
1454
+ if (expandFlag !== true && expandFlag !== false) {
1455
+ expandFlag = !node.open;
1456
+ }
1457
+ callbackFlag = !!callbackFlag;
1458
+
1459
+ if (callbackFlag && expandFlag && (tools.apply(setting.callback.beforeExpand, [setting.treeId, node], true) == false)) {
1460
+ return null;
1461
+ } else if (callbackFlag && !expandFlag && (tools.apply(setting.callback.beforeCollapse, [setting.treeId, node], true) == false)) {
1462
+ return null;
1463
+ }
1464
+ if (expandFlag && node.parentTId) {
1465
+ view.expandCollapseParentNode(this.setting, node.getParentNode(), expandFlag, false);
1466
+ }
1467
+ if (expandFlag === node.open && !sonSign) {
1468
+ return null;
1469
+ }
1470
+
1471
+ data.getRoot(setting).expandTriggerFlag = callbackFlag;
1472
+ if (sonSign) {
1473
+ view.expandCollapseSonNode(this.setting, node, expandFlag, true, function() {
1474
+ if (focus !== false) {$("#" + node.tId).focus().blur();}
1475
+ });
1476
+ } else {
1477
+ node.open = !expandFlag;
1478
+ view.switchNode(this.setting, node);
1479
+ if (focus !== false) {$("#" + node.tId).focus().blur();}
1480
+ }
1481
+ return expandFlag;
1482
+ },
1483
+ getNodes : function() {
1484
+ return data.getNodes(this.setting);
1485
+ },
1486
+ getNodeByParam : function(key, value, parentNode) {
1487
+ if (!key) return null;
1488
+ return data.getNodeByParam(this.setting, parentNode?parentNode[this.setting.data.key.children]:data.getNodes(this.setting), key, value);
1489
+ },
1490
+ getNodeByTId : function(tId) {
1491
+ return data.getNodeCache(this.setting, tId);
1492
+ },
1493
+ getNodesByParam : function(key, value, parentNode) {
1494
+ if (!key) return null;
1495
+ return data.getNodesByParam(this.setting, parentNode?parentNode[this.setting.data.key.children]:data.getNodes(this.setting), key, value);
1496
+ },
1497
+ getNodesByParamFuzzy : function(key, value, parentNode) {
1498
+ if (!key) return null;
1499
+ return data.getNodesByParamFuzzy(this.setting, parentNode?parentNode[this.setting.data.key.children]:data.getNodes(this.setting), key, value);
1500
+ },
1501
+ getNodesByFilter: function(filter, isSingle, parentNode, invokeParam) {
1502
+ isSingle = !!isSingle;
1503
+ if (!filter || (typeof filter != "function")) return (isSingle ? null : []);
1504
+ return data.getNodesByFilter(this.setting, parentNode?parentNode[this.setting.data.key.children]:data.getNodes(this.setting), filter, isSingle, invokeParam);
1505
+ },
1506
+ getNodeIndex : function(node) {
1507
+ if (!node) return null;
1508
+ var childKey = setting.data.key.children,
1509
+ parentNode = (node.parentTId) ? node.getParentNode() : data.getRoot(this.setting);
1510
+ for (var i=0, l = parentNode[childKey].length; i < l; i++) {
1511
+ if (parentNode[childKey][i] == node) return i;
1512
+ }
1513
+ return -1;
1514
+ },
1515
+ getSelectedNodes : function() {
1516
+ var r = [], list = data.getRoot(this.setting).curSelectedList;
1517
+ for (var i=0, l=list.length; i<l; i++) {
1518
+ r.push(list[i]);
1519
+ }
1520
+ return r;
1521
+ },
1522
+ isSelectedNode : function(node) {
1523
+ return data.isSelectedNode(this.setting, node);
1524
+ },
1525
+ reAsyncChildNodes : function(parentNode, reloadType, isSilent) {
1526
+ if (!this.setting.async.enable) return;
1527
+ var isRoot = !parentNode;
1528
+ if (isRoot) {
1529
+ parentNode = data.getRoot(this.setting);
1530
+ }
1531
+ if (reloadType=="refresh") {
1532
+ parentNode[this.setting.data.key.children] = [];
1533
+ if (isRoot) {
1534
+ this.setting.treeObj.empty();
1535
+ } else {
1536
+ var ulObj = $("#" + parentNode.tId + consts.id.UL);
1537
+ ulObj.empty();
1538
+ }
1539
+ }
1540
+ view.asyncNode(this.setting, isRoot? null:parentNode, !!isSilent);
1541
+ },
1542
+ refresh : function() {
1543
+ this.setting.treeObj.empty();
1544
+ var root = data.getRoot(this.setting),
1545
+ nodes = root[this.setting.data.key.children]
1546
+ data.initRoot(this.setting);
1547
+ root[this.setting.data.key.children] = nodes
1548
+ data.initCache(this.setting);
1549
+ view.createNodes(this.setting, 0, root[this.setting.data.key.children]);
1550
+ },
1551
+ removeChildNodes : function(node) {
1552
+ if (!node) return null;
1553
+ var childKey = setting.data.key.children,
1554
+ nodes = node[childKey];
1555
+ view.removeChildNodes(setting, node);
1556
+ return nodes ? nodes : null;
1557
+ },
1558
+ removeNode : function(node, callbackFlag) {
1559
+ if (!node) return;
1560
+ callbackFlag = !!callbackFlag;
1561
+ if (callbackFlag && tools.apply(setting.callback.beforeRemove, [setting.treeId, node], true) == false) return;
1562
+ view.removeNode(setting, node);
1563
+ if (callbackFlag) {
1564
+ this.setting.treeObj.trigger(consts.event.REMOVE, [setting.treeId, node]);
1565
+ }
1566
+ },
1567
+ selectNode : function(node, addFlag) {
1568
+ if (!node) return;
1569
+ if (tools.uCanDo(this.setting)) {
1570
+ addFlag = setting.view.selectedMulti && addFlag;
1571
+ if (node.parentTId) {
1572
+ view.expandCollapseParentNode(this.setting, node.getParentNode(), true, false, function() {
1573
+ $("#" + node.tId).focus().blur();
1574
+ });
1575
+ } else {
1576
+ $("#" + node.tId).focus().blur();
1577
+ }
1578
+ view.selectNode(this.setting, node, addFlag);
1579
+ }
1580
+ },
1581
+ transformTozTreeNodes : function(simpleNodes) {
1582
+ return data.transformTozTreeFormat(this.setting, simpleNodes);
1583
+ },
1584
+ transformToArray : function(nodes) {
1585
+ return data.transformToArrayFormat(this.setting, nodes);
1586
+ },
1587
+ updateNode : function(node, checkTypeFlag) {
1588
+ if (!node) return;
1589
+ var nObj = $("#" + node.tId);
1590
+ if (nObj.get(0) && tools.uCanDo(this.setting)) {
1591
+ view.setNodeName(this.setting, node);
1592
+ view.setNodeTarget(node);
1593
+ view.setNodeUrl(this.setting, node);
1594
+ view.setNodeLineIcos(this.setting, node);
1595
+ view.setNodeFontCss(this.setting, node);
1596
+ }
1597
+ }
1598
+ }
1599
+ root.treeTools = zTreeTools;
1600
+ data.setZTreeTools(setting, zTreeTools);
1601
+
1602
+ if (root[childKey] && root[childKey].length > 0) {
1603
+ view.createNodes(setting, 0, root[childKey]);
1604
+ } else if (setting.async.enable && setting.async.url && setting.async.url !== '') {
1605
+ view.asyncNode(setting);
1606
+ }
1607
+ return zTreeTools;
1608
+ }
1609
+ };
1610
+
1611
+ var zt = $.fn.zTree,
1612
+ consts = zt.consts;
1613
+ })(jQuery);
1614
+ /*
1615
+ * JQuery zTree excheck 3.3
1616
+ * http://zTree.me/
1617
+ *
1618
+ * Copyright (c) 2010 Hunter.z
1619
+ *
1620
+ * Licensed same as jquery - MIT License
1621
+ * http://www.opensource.org/licenses/mit-license.php
1622
+ *
1623
+ * email: hunter.z@263.net
1624
+ * Date: 2012-07-16
1625
+ */
1626
+ (function($){
1627
+ //default consts of excheck
1628
+ var _consts = {
1629
+ event: {
1630
+ CHECK: "ztree_check"
1631
+ },
1632
+ id: {
1633
+ CHECK: "_check"
1634
+ },
1635
+ checkbox: {
1636
+ STYLE: "checkbox",
1637
+ DEFAULT: "chk",
1638
+ DISABLED: "disable",
1639
+ FALSE: "false",
1640
+ TRUE: "true",
1641
+ FULL: "full",
1642
+ PART: "part",
1643
+ FOCUS: "focus"
1644
+ },
1645
+ radio: {
1646
+ STYLE: "radio",
1647
+ TYPE_ALL: "all",
1648
+ TYPE_LEVEL: "level"
1649
+ }
1650
+ },
1651
+ //default setting of excheck
1652
+ _setting = {
1653
+ check: {
1654
+ enable: false,
1655
+ autoCheckTrigger: false,
1656
+ chkStyle: _consts.checkbox.STYLE,
1657
+ nocheckInherit: false,
1658
+ radioType: _consts.radio.TYPE_LEVEL,
1659
+ chkboxType: {
1660
+ "Y": "ps",
1661
+ "N": "ps"
1662
+ }
1663
+ },
1664
+ data: {
1665
+ key: {
1666
+ checked: "checked"
1667
+ }
1668
+ },
1669
+ callback: {
1670
+ beforeCheck:null,
1671
+ onCheck:null
1672
+ }
1673
+ },
1674
+ //default root of excheck
1675
+ _initRoot = function (setting) {
1676
+ var r = data.getRoot(setting);
1677
+ r.radioCheckedList = [];
1678
+ },
1679
+ //default cache of excheck
1680
+ _initCache = function(treeId) {},
1681
+ //default bind event of excheck
1682
+ _bindEvent = function(setting) {
1683
+ var o = setting.treeObj,
1684
+ c = consts.event;
1685
+ o.unbind(c.CHECK);
1686
+ o.bind(c.CHECK, function (event, treeId, node) {
1687
+ tools.apply(setting.callback.onCheck, [event, treeId, node]);
1688
+ });
1689
+ },
1690
+ //default event proxy of excheck
1691
+ _eventProxy = function(e) {
1692
+ var target = e.target,
1693
+ setting = data.getSetting(e.data.treeId),
1694
+ tId = "", node = null,
1695
+ nodeEventType = "", treeEventType = "",
1696
+ nodeEventCallback = null, treeEventCallback = null;
1697
+
1698
+ if (tools.eqs(e.type, "mouseover")) {
1699
+ if (setting.check.enable && tools.eqs(target.tagName, "span") && target.getAttribute("treeNode"+ consts.id.CHECK) !== null) {
1700
+ tId = target.parentNode.id;
1701
+ nodeEventType = "mouseoverCheck";
1702
+ }
1703
+ } else if (tools.eqs(e.type, "mouseout")) {
1704
+ if (setting.check.enable && tools.eqs(target.tagName, "span") && target.getAttribute("treeNode"+ consts.id.CHECK) !== null) {
1705
+ tId = target.parentNode.id;
1706
+ nodeEventType = "mouseoutCheck";
1707
+ }
1708
+ } else if (tools.eqs(e.type, "click")) {
1709
+ if (setting.check.enable && tools.eqs(target.tagName, "span") && target.getAttribute("treeNode"+ consts.id.CHECK) !== null) {
1710
+ tId = target.parentNode.id;
1711
+ nodeEventType = "checkNode";
1712
+ }
1713
+ }
1714
+ if (tId.length>0) {
1715
+ node = data.getNodeCache(setting, tId);
1716
+ switch (nodeEventType) {
1717
+ case "checkNode" :
1718
+ nodeEventCallback = _handler.onCheckNode;
1719
+ break;
1720
+ case "mouseoverCheck" :
1721
+ nodeEventCallback = _handler.onMouseoverCheck;
1722
+ break;
1723
+ case "mouseoutCheck" :
1724
+ nodeEventCallback = _handler.onMouseoutCheck;
1725
+ break;
1726
+ }
1727
+ }
1728
+ var proxyResult = {
1729
+ stop: false,
1730
+ node: node,
1731
+ nodeEventType: nodeEventType,
1732
+ nodeEventCallback: nodeEventCallback,
1733
+ treeEventType: treeEventType,
1734
+ treeEventCallback: treeEventCallback
1735
+ };
1736
+ return proxyResult
1737
+ },
1738
+ //default init node of excheck
1739
+ _initNode = function(setting, level, n, parentNode, isFirstNode, isLastNode, openFlag) {
1740
+ if (!n) return;
1741
+ var checkedKey = setting.data.key.checked;
1742
+ if (typeof n[checkedKey] == "string") n[checkedKey] = tools.eqs(n[checkedKey], "true");
1743
+ n[checkedKey] = !!n[checkedKey];
1744
+ n.checkedOld = n[checkedKey];
1745
+ n.nocheck = !!n.nocheck || (setting.check.nocheckInherit && parentNode && !!parentNode.nocheck);
1746
+ n.chkDisabled = !!n.chkDisabled || (parentNode && !!parentNode.chkDisabled);
1747
+ if (typeof n.halfCheck == "string") n.halfCheck = tools.eqs(n.halfCheck, "true");
1748
+ n.halfCheck = !!n.halfCheck;
1749
+ n.check_Child_State = -1;
1750
+ n.check_Focus = false;
1751
+ n.getCheckStatus = function() {return data.getCheckStatus(setting, n);};
1752
+ if (isLastNode) {
1753
+ data.makeChkFlag(setting, parentNode);
1754
+ }
1755
+ },
1756
+ //add dom for check
1757
+ _beforeA = function(setting, node, html) {
1758
+ var checkedKey = setting.data.key.checked;
1759
+ if (setting.check.enable) {
1760
+ data.makeChkFlag(setting, node);
1761
+ if (setting.check.chkStyle == consts.radio.STYLE && setting.check.radioType == consts.radio.TYPE_ALL && node[checkedKey] ) {
1762
+ var r = data.getRoot(setting);
1763
+ r.radioCheckedList.push(node);
1764
+ }
1765
+ html.push("<span ID='", node.tId, consts.id.CHECK, "' class='", view.makeChkClass(setting, node), "' treeNode", consts.id.CHECK, (node.nocheck === true?" style='display:none;'":""),"></span>");
1766
+ }
1767
+ },
1768
+ //update zTreeObj, add method of check
1769
+ _zTreeTools = function(setting, zTreeTools) {
1770
+ zTreeTools.checkNode = function(node, checked, checkTypeFlag, callbackFlag) {
1771
+ var checkedKey = this.setting.data.key.checked;
1772
+ if (node.chkDisabled === true) return;
1773
+ if (checked !== true && checked !== false) {
1774
+ checked = !node[checkedKey];
1775
+ }
1776
+ callbackFlag = !!callbackFlag;
1777
+
1778
+ if (node[checkedKey] === checked && !checkTypeFlag) {
1779
+ return;
1780
+ } else if (callbackFlag && tools.apply(this.setting.callback.beforeCheck, [this.setting.treeId, node], true) == false) {
1781
+ return;
1782
+ }
1783
+ if (tools.uCanDo(this.setting) && this.setting.check.enable && node.nocheck !== true) {
1784
+ node[checkedKey] = checked;
1785
+ var checkObj = $("#" + node.tId + consts.id.CHECK);
1786
+ if (checkTypeFlag || this.setting.check.chkStyle === consts.radio.STYLE) view.checkNodeRelation(this.setting, node);
1787
+ view.setChkClass(this.setting, checkObj, node);
1788
+ view.repairParentChkClassWithSelf(this.setting, node);
1789
+ if (callbackFlag) {
1790
+ setting.treeObj.trigger(consts.event.CHECK, [setting.treeId, node]);
1791
+ }
1792
+ }
1793
+ }
1794
+
1795
+ zTreeTools.checkAllNodes = function(checked) {
1796
+ view.repairAllChk(this.setting, !!checked);
1797
+ }
1798
+
1799
+ zTreeTools.getCheckedNodes = function(checked) {
1800
+ var childKey = this.setting.data.key.children;
1801
+ checked = (checked !== false);
1802
+ return data.getTreeCheckedNodes(this.setting, data.getRoot(setting)[childKey], checked);
1803
+ }
1804
+
1805
+ zTreeTools.getChangeCheckedNodes = function() {
1806
+ var childKey = this.setting.data.key.children;
1807
+ return data.getTreeChangeCheckedNodes(this.setting, data.getRoot(setting)[childKey]);
1808
+ }
1809
+
1810
+ zTreeTools.setChkDisabled = function(node, disabled) {
1811
+ disabled = !!disabled;
1812
+ view.repairSonChkDisabled(this.setting, node, disabled);
1813
+ if (!disabled) view.repairParentChkDisabled(this.setting, node, disabled);
1814
+ }
1815
+
1816
+ var _updateNode = zTreeTools.updateNode;
1817
+ zTreeTools.updateNode = function(node, checkTypeFlag) {
1818
+ if (_updateNode) _updateNode.apply(zTreeTools, arguments);
1819
+ if (!node || !this.setting.check.enable) return;
1820
+ var nObj = $("#" + node.tId);
1821
+ if (nObj.get(0) && tools.uCanDo(this.setting)) {
1822
+ var checkObj = $("#" + node.tId + consts.id.CHECK);
1823
+ if (checkTypeFlag == true || this.setting.check.chkStyle === consts.radio.STYLE) view.checkNodeRelation(this.setting, node);
1824
+ view.setChkClass(this.setting, checkObj, node);
1825
+ view.repairParentChkClassWithSelf(this.setting, node);
1826
+ }
1827
+ }
1828
+ },
1829
+ //method of operate data
1830
+ _data = {
1831
+ getRadioCheckedList: function(setting) {
1832
+ var checkedList = data.getRoot(setting).radioCheckedList;
1833
+ for (var i=0, j=checkedList.length; i<j; i++) {
1834
+ if(!data.getNodeCache(setting, checkedList[i].tId)) {
1835
+ checkedList.splice(i, 1);
1836
+ i--; j--;
1837
+ }
1838
+ }
1839
+ return checkedList;
1840
+ },
1841
+ getCheckStatus: function(setting, node) {
1842
+ if (!setting.check.enable || node.nocheck) return null;
1843
+ var checkedKey = setting.data.key.checked,
1844
+ r = {
1845
+ checked: node[checkedKey],
1846
+ half: node.halfCheck ? node.halfCheck : (setting.check.chkStyle == consts.radio.STYLE ? (node.check_Child_State === 2) : (node[checkedKey] ? (node.check_Child_State > -1 && node.check_Child_State < 2) : (node.check_Child_State > 0)))
1847
+ };
1848
+ return r;
1849
+ },
1850
+ getTreeCheckedNodes: function(setting, nodes, checked, results) {
1851
+ if (!nodes) return [];
1852
+ var childKey = setting.data.key.children,
1853
+ checkedKey = setting.data.key.checked,
1854
+ onlyOne = (checked && setting.check.chkStyle == consts.radio.STYLE && setting.check.radioType == consts.radio.TYPE_ALL);
1855
+ results = !results ? [] : results;
1856
+ for (var i = 0, l = nodes.length; i < l; i++) {
1857
+ if (nodes[i].nocheck !== true && nodes[i][checkedKey] == checked) {
1858
+ results.push(nodes[i]);
1859
+ if(onlyOne) {
1860
+ break;
1861
+ }
1862
+ }
1863
+ data.getTreeCheckedNodes(setting, nodes[i][childKey], checked, results);
1864
+ if(onlyOne && results.length > 0) {
1865
+ break;
1866
+ }
1867
+ }
1868
+ return results;
1869
+ },
1870
+ getTreeChangeCheckedNodes: function(setting, nodes, results) {
1871
+ if (!nodes) return [];
1872
+ var childKey = setting.data.key.children,
1873
+ checkedKey = setting.data.key.checked;
1874
+ results = !results ? [] : results;
1875
+ for (var i = 0, l = nodes.length; i < l; i++) {
1876
+ if (nodes[i].nocheck !== true && nodes[i][checkedKey] != nodes[i].checkedOld) {
1877
+ results.push(nodes[i]);
1878
+ }
1879
+ data.getTreeChangeCheckedNodes(setting, nodes[i][childKey], results);
1880
+ }
1881
+ return results;
1882
+ },
1883
+ makeChkFlag: function(setting, node) {
1884
+ if (!node) return;
1885
+ var childKey = setting.data.key.children,
1886
+ checkedKey = setting.data.key.checked,
1887
+ chkFlag = -1;
1888
+ if (node[childKey]) {
1889
+ var start = false;
1890
+ for (var i = 0, l = node[childKey].length; i < l; i++) {
1891
+ var cNode = node[childKey][i];
1892
+ var tmp = -1;
1893
+ if (setting.check.chkStyle == consts.radio.STYLE) {
1894
+ if (cNode.nocheck === true) {
1895
+ tmp = cNode.check_Child_State;
1896
+ } else if (cNode.halfCheck === true) {
1897
+ tmp = 2;
1898
+ } else if (cNode.nocheck !== true && cNode[checkedKey]) {
1899
+ tmp = 2;
1900
+ } else {
1901
+ tmp = cNode.check_Child_State > 0 ? 2:0;
1902
+ }
1903
+ if (tmp == 2) {
1904
+ chkFlag = 2; break;
1905
+ } else if (tmp == 0){
1906
+ chkFlag = 0;
1907
+ }
1908
+ } else if (setting.check.chkStyle == consts.checkbox.STYLE) {
1909
+ if (cNode.nocheck === true) {
1910
+ tmp = cNode.check_Child_State;
1911
+ } else if (cNode.halfCheck === true) {
1912
+ tmp = 1;
1913
+ } else if (cNode.nocheck !== true && cNode[checkedKey] ) {
1914
+ tmp = (cNode.check_Child_State === -1 || cNode.check_Child_State === 2) ? 2 : 1;
1915
+ } else {
1916
+ tmp = (cNode.check_Child_State > 0) ? 1 : 0;
1917
+ }
1918
+ if (tmp === 1) {
1919
+ chkFlag = 1; break;
1920
+ } else if (tmp === 2 && start && tmp !== chkFlag) {
1921
+ chkFlag = 1; break;
1922
+ } else if (chkFlag === 2 && tmp > -1 && tmp < 2) {
1923
+ chkFlag = 1; break;
1924
+ } else if (tmp > -1) {
1925
+ chkFlag = tmp;
1926
+ }
1927
+ if (!start) start = (cNode.nocheck !== true);
1928
+ }
1929
+ }
1930
+ }
1931
+ node.check_Child_State = chkFlag;
1932
+ }
1933
+ },
1934
+ //method of event proxy
1935
+ _event = {
1936
+
1937
+ },
1938
+ //method of event handler
1939
+ _handler = {
1940
+ onCheckNode: function (event, node) {
1941
+ if (node.chkDisabled === true) return false;
1942
+ var setting = data.getSetting(event.data.treeId),
1943
+ checkedKey = setting.data.key.checked;
1944
+ if (tools.apply(setting.callback.beforeCheck, [setting.treeId, node], true) == false) return true;
1945
+ node[checkedKey] = !node[checkedKey];
1946
+ view.checkNodeRelation(setting, node);
1947
+ var checkObj = $("#" + node.tId + consts.id.CHECK);
1948
+ view.setChkClass(setting, checkObj, node);
1949
+ view.repairParentChkClassWithSelf(setting, node);
1950
+ setting.treeObj.trigger(consts.event.CHECK, [setting.treeId, node]);
1951
+ return true;
1952
+ },
1953
+ onMouseoverCheck: function(event, node) {
1954
+ if (node.chkDisabled === true) return false;
1955
+ var setting = data.getSetting(event.data.treeId),
1956
+ checkObj = $("#" + node.tId + consts.id.CHECK);
1957
+ node.check_Focus = true;
1958
+ view.setChkClass(setting, checkObj, node);
1959
+ return true;
1960
+ },
1961
+ onMouseoutCheck: function(event, node) {
1962
+ if (node.chkDisabled === true) return false;
1963
+ var setting = data.getSetting(event.data.treeId),
1964
+ checkObj = $("#" + node.tId + consts.id.CHECK);
1965
+ node.check_Focus = false;
1966
+ view.setChkClass(setting, checkObj, node);
1967
+ return true;
1968
+ }
1969
+ },
1970
+ //method of tools for zTree
1971
+ _tools = {
1972
+
1973
+ },
1974
+ //method of operate ztree dom
1975
+ _view = {
1976
+ checkNodeRelation: function(setting, node) {
1977
+ var pNode, i, l,
1978
+ childKey = setting.data.key.children,
1979
+ checkedKey = setting.data.key.checked,
1980
+ r = consts.radio;
1981
+ if (setting.check.chkStyle == r.STYLE) {
1982
+ var checkedList = data.getRadioCheckedList(setting);
1983
+ if (node[checkedKey]) {
1984
+ if (setting.check.radioType == r.TYPE_ALL) {
1985
+ for (i = checkedList.length-1; i >= 0; i--) {
1986
+ pNode = checkedList[i];
1987
+ pNode[checkedKey] = false;
1988
+ checkedList.splice(i, 1);
1989
+
1990
+ view.setChkClass(setting, $("#" + pNode.tId + consts.id.CHECK), pNode);
1991
+ if (pNode.parentTId != node.parentTId) {
1992
+ view.repairParentChkClassWithSelf(setting, pNode);
1993
+ }
1994
+ }
1995
+ checkedList.push(node);
1996
+ } else {
1997
+ var parentNode = (node.parentTId) ? node.getParentNode() : data.getRoot(setting);
1998
+ for (i = 0, l = parentNode[childKey].length; i < l; i++) {
1999
+ pNode = parentNode[childKey][i];
2000
+ if (pNode[checkedKey] && pNode != node) {
2001
+ pNode[checkedKey] = false;
2002
+ view.setChkClass(setting, $("#" + pNode.tId + consts.id.CHECK), pNode);
2003
+ }
2004
+ }
2005
+ }
2006
+ } else if (setting.check.radioType == r.TYPE_ALL) {
2007
+ for (i = 0, l = checkedList.length; i < l; i++) {
2008
+ if (node == checkedList[i]) {
2009
+ checkedList.splice(i, 1);
2010
+ break;
2011
+ }
2012
+ }
2013
+ }
2014
+
2015
+ } else {
2016
+ if (node[checkedKey] && (!node[childKey] || node[childKey].length==0 || setting.check.chkboxType.Y.indexOf("s") > -1)) {
2017
+ view.setSonNodeCheckBox(setting, node, true);
2018
+ }
2019
+ if (!node[checkedKey] && (!node[childKey] || node[childKey].length==0 || setting.check.chkboxType.N.indexOf("s") > -1)) {
2020
+ view.setSonNodeCheckBox(setting, node, false);
2021
+ }
2022
+ if (node[checkedKey] && setting.check.chkboxType.Y.indexOf("p") > -1) {
2023
+ view.setParentNodeCheckBox(setting, node, true);
2024
+ }
2025
+ if (!node[checkedKey] && setting.check.chkboxType.N.indexOf("p") > -1) {
2026
+ view.setParentNodeCheckBox(setting, node, false);
2027
+ }
2028
+ }
2029
+ },
2030
+ makeChkClass: function(setting, node) {
2031
+ var checkedKey = setting.data.key.checked,
2032
+ c = consts.checkbox, r = consts.radio,
2033
+ fullStyle = "";
2034
+ if (node.chkDisabled === true) {
2035
+ fullStyle = c.DISABLED;
2036
+ } else if (node.halfCheck) {
2037
+ fullStyle = c.PART;
2038
+ } else if (setting.check.chkStyle == r.STYLE) {
2039
+ fullStyle = (node.check_Child_State < 1)? c.FULL:c.PART;
2040
+ } else {
2041
+ fullStyle = node[checkedKey] ? ((node.check_Child_State === 2 || node.check_Child_State === -1) ? c.FULL:c.PART) : ((node.check_Child_State < 1)? c.FULL:c.PART);
2042
+ }
2043
+ var chkName = setting.check.chkStyle + "_" + (node[checkedKey] ? c.TRUE : c.FALSE) + "_" + fullStyle;
2044
+ chkName = (node.check_Focus && node.chkDisabled !== true) ? chkName + "_" + c.FOCUS : chkName;
2045
+ return "button " + c.DEFAULT + " " + chkName;
2046
+ },
2047
+ repairAllChk: function(setting, checked) {
2048
+ if (setting.check.enable && setting.check.chkStyle === consts.checkbox.STYLE) {
2049
+ var checkedKey = setting.data.key.checked,
2050
+ childKey = setting.data.key.children,
2051
+ root = data.getRoot(setting);
2052
+ for (var i = 0, l = root[childKey].length; i<l ; i++) {
2053
+ var node = root[childKey][i];
2054
+ if (node.nocheck !== true) {
2055
+ node[checkedKey] = checked;
2056
+ }
2057
+ view.setSonNodeCheckBox(setting, node, checked);
2058
+ }
2059
+ }
2060
+ },
2061
+ repairChkClass: function(setting, node) {
2062
+ if (!node) return;
2063
+ data.makeChkFlag(setting, node);
2064
+ var checkObj = $("#" + node.tId + consts.id.CHECK);
2065
+ view.setChkClass(setting, checkObj, node);
2066
+ },
2067
+ repairParentChkClass: function(setting, node) {
2068
+ if (!node || !node.parentTId) return;
2069
+ var pNode = node.getParentNode();
2070
+ view.repairChkClass(setting, pNode);
2071
+ view.repairParentChkClass(setting, pNode);
2072
+ },
2073
+ repairParentChkClassWithSelf: function(setting, node) {
2074
+ if (!node) return;
2075
+ var childKey = setting.data.key.children;
2076
+ if (node[childKey] && node[childKey].length > 0) {
2077
+ view.repairParentChkClass(setting, node[childKey][0]);
2078
+ } else {
2079
+ view.repairParentChkClass(setting, node);
2080
+ }
2081
+ },
2082
+ repairSonChkDisabled: function(setting, node, chkDisabled) {
2083
+ if (!node) return;
2084
+ var childKey = setting.data.key.children;
2085
+ if (node.chkDisabled != chkDisabled) {
2086
+ node.chkDisabled = chkDisabled;
2087
+ if (node.nocheck !== true) view.repairChkClass(setting, node);
2088
+ }
2089
+ if (node[childKey]) {
2090
+ for (var i = 0, l = node[childKey].length; i < l; i++) {
2091
+ var sNode = node[childKey][i];
2092
+ view.repairSonChkDisabled(setting, sNode, chkDisabled);
2093
+ }
2094
+ }
2095
+ },
2096
+ repairParentChkDisabled: function(setting, node, chkDisabled) {
2097
+ if (!node) return;
2098
+ if (node.chkDisabled != chkDisabled) {
2099
+ node.chkDisabled = chkDisabled;
2100
+ if (node.nocheck !== true) view.repairChkClass(setting, node);
2101
+ }
2102
+ view.repairParentChkDisabled(setting, node.getParentNode(), chkDisabled);
2103
+ },
2104
+ setChkClass: function(setting, obj, node) {
2105
+ if (!obj) return;
2106
+ if (node.nocheck === true) {
2107
+ obj.hide();
2108
+ } else {
2109
+ obj.show();
2110
+ }
2111
+ obj.removeClass();
2112
+ obj.addClass(view.makeChkClass(setting, node));
2113
+ },
2114
+ setParentNodeCheckBox: function(setting, node, value, srcNode) {
2115
+ var childKey = setting.data.key.children,
2116
+ checkedKey = setting.data.key.checked,
2117
+ checkObj = $("#" + node.tId + consts.id.CHECK);
2118
+ if (!srcNode) srcNode = node;
2119
+ data.makeChkFlag(setting, node);
2120
+ if (node.nocheck !== true && node.chkDisabled !== true) {
2121
+ node[checkedKey] = value;
2122
+ view.setChkClass(setting, checkObj, node);
2123
+ if (setting.check.autoCheckTrigger && node != srcNode && node.nocheck !== true) {
2124
+ setting.treeObj.trigger(consts.event.CHECK, [setting.treeId, node]);
2125
+ }
2126
+ }
2127
+ if (node.parentTId) {
2128
+ var pSign = true;
2129
+ if (!value) {
2130
+ var pNodes = node.getParentNode()[childKey];
2131
+ for (var i = 0, l = pNodes.length; i < l; i++) {
2132
+ if ((pNodes[i].nocheck !== true && pNodes[i][checkedKey])
2133
+ || (pNodes[i].nocheck === true && pNodes[i].check_Child_State > 0)) {
2134
+ pSign = false;
2135
+ break;
2136
+ }
2137
+ }
2138
+ }
2139
+ if (pSign) {
2140
+ view.setParentNodeCheckBox(setting, node.getParentNode(), value, srcNode);
2141
+ }
2142
+ }
2143
+ },
2144
+ setSonNodeCheckBox: function(setting, node, value, srcNode) {
2145
+ if (!node) return;
2146
+ var childKey = setting.data.key.children,
2147
+ checkedKey = setting.data.key.checked,
2148
+ checkObj = $("#" + node.tId + consts.id.CHECK);
2149
+ if (!srcNode) srcNode = node;
2150
+
2151
+ var hasDisable = false;
2152
+ if (node[childKey]) {
2153
+ for (var i = 0, l = node[childKey].length; i < l && node.chkDisabled !== true; i++) {
2154
+ var sNode = node[childKey][i];
2155
+ view.setSonNodeCheckBox(setting, sNode, value, srcNode);
2156
+ if (sNode.chkDisabled === true) hasDisable = true;
2157
+ }
2158
+ }
2159
+
2160
+ if (node != data.getRoot(setting) && node.chkDisabled !== true) {
2161
+ if (hasDisable && node.nocheck !== true) {
2162
+ data.makeChkFlag(setting, node);
2163
+ }
2164
+ if (node.nocheck !== true) {
2165
+ node[checkedKey] = value;
2166
+ if (!hasDisable) node.check_Child_State = (node[childKey] && node[childKey].length > 0) ? (value ? 2 : 0) : -1;
2167
+ } else {
2168
+ node.check_Child_State = -1;
2169
+ }
2170
+ view.setChkClass(setting, checkObj, node);
2171
+ if (setting.check.autoCheckTrigger && node != srcNode && node.nocheck !== true) {
2172
+ setting.treeObj.trigger(consts.event.CHECK, [setting.treeId, node]);
2173
+ }
2174
+ }
2175
+
2176
+ }
2177
+ },
2178
+
2179
+ _z = {
2180
+ tools: _tools,
2181
+ view: _view,
2182
+ event: _event,
2183
+ data: _data
2184
+ };
2185
+ $.extend(true, $.fn.zTree.consts, _consts);
2186
+ $.extend(true, $.fn.zTree._z, _z);
2187
+
2188
+ var zt = $.fn.zTree,
2189
+ tools = zt._z.tools,
2190
+ consts = zt.consts,
2191
+ view = zt._z.view,
2192
+ data = zt._z.data,
2193
+ event = zt._z.event;
2194
+
2195
+ data.exSetting(_setting);
2196
+ data.addInitBind(_bindEvent);
2197
+ data.addInitCache(_initCache);
2198
+ data.addInitNode(_initNode);
2199
+ data.addInitProxy(_eventProxy);
2200
+ data.addInitRoot(_initRoot);
2201
+ data.addBeforeA(_beforeA);
2202
+ data.addZTreeTools(_zTreeTools);
2203
+
2204
+ var _createNodes = view.createNodes;
2205
+ view.createNodes = function(setting, level, nodes, parentNode) {
2206
+ if (_createNodes) _createNodes.apply(view, arguments);
2207
+ if (!nodes) return;
2208
+ view.repairParentChkClassWithSelf(setting, parentNode);
2209
+ }
2210
+ var _removeNode = view.removeNode;
2211
+ view.removeNode = function(setting, node) {
2212
+ var parentNode = node.getParentNode();
2213
+ if (_removeNode) _removeNode.apply(view, arguments);
2214
+ if (!node || !parentNode) return;
2215
+ view.repairChkClass(setting, parentNode);
2216
+ view.repairParentChkClass(setting, parentNode);
2217
+ }
2218
+ })(jQuery);
2219
+ /*
2220
+ * JQuery zTree exedit 3.3
2221
+ * http://zTree.me/
2222
+ *
2223
+ * Copyright (c) 2010 Hunter.z
2224
+ *
2225
+ * Licensed same as jquery - MIT License
2226
+ * http://www.opensource.org/licenses/mit-license.php
2227
+ *
2228
+ * email: hunter.z@263.net
2229
+ * Date: 2012-07-16
2230
+ */
2231
+ (function($){
2232
+ //default consts of exedit
2233
+ var _consts = {
2234
+ event: {
2235
+ DRAG: "ztree_drag",
2236
+ DROP: "ztree_drop",
2237
+ REMOVE: "ztree_remove",
2238
+ RENAME: "ztree_rename"
2239
+ },
2240
+ id: {
2241
+ EDIT: "_edit",
2242
+ INPUT: "_input",
2243
+ REMOVE: "_remove"
2244
+ },
2245
+ move: {
2246
+ TYPE_INNER: "inner",
2247
+ TYPE_PREV: "prev",
2248
+ TYPE_NEXT: "next"
2249
+ },
2250
+ node: {
2251
+ CURSELECTED_EDIT: "curSelectedNode_Edit",
2252
+ TMPTARGET_TREE: "tmpTargetzTree",
2253
+ TMPTARGET_NODE: "tmpTargetNode"
2254
+ }
2255
+ },
2256
+ //default setting of exedit
2257
+ _setting = {
2258
+ edit: {
2259
+ enable: false,
2260
+ editNameSelectAll: false,
2261
+ showRemoveBtn: true,
2262
+ showRenameBtn: true,
2263
+ removeTitle: "remove",
2264
+ renameTitle: "rename",
2265
+ drag: {
2266
+ autoExpandTrigger: false,
2267
+ isCopy: true,
2268
+ isMove: true,
2269
+ prev: true,
2270
+ next: true,
2271
+ inner: true,
2272
+ minMoveSize: 5,
2273
+ borderMax: 10,
2274
+ borderMin: -5,
2275
+ maxShowNodeNum: 5,
2276
+ autoOpenTime: 500
2277
+ }
2278
+ },
2279
+ view: {
2280
+ addHoverDom: null,
2281
+ removeHoverDom: null
2282
+ },
2283
+ callback: {
2284
+ beforeDrag:null,
2285
+ beforeDragOpen:null,
2286
+ beforeDrop:null,
2287
+ beforeEditName:null,
2288
+ beforeRename:null,
2289
+ onDrag:null,
2290
+ onDrop:null,
2291
+ onRename:null
2292
+ }
2293
+ },
2294
+ //default root of exedit
2295
+ _initRoot = function (setting) {
2296
+ var r = data.getRoot(setting);
2297
+ r.curEditNode = null;
2298
+ r.curEditInput = null;
2299
+ r.curHoverNode = null;
2300
+ r.dragFlag = 0;
2301
+ r.dragNodeShowBefore = [];
2302
+ r.dragMaskList = new Array();
2303
+ r.showHoverDom = true;
2304
+ },
2305
+ //default cache of exedit
2306
+ _initCache = function(treeId) {},
2307
+ //default bind event of exedit
2308
+ _bindEvent = function(setting) {
2309
+ var o = setting.treeObj;
2310
+ var c = consts.event;
2311
+ o.unbind(c.RENAME);
2312
+ o.bind(c.RENAME, function (event, treeId, treeNode) {
2313
+ tools.apply(setting.callback.onRename, [event, treeId, treeNode]);
2314
+ });
2315
+
2316
+ o.unbind(c.REMOVE);
2317
+ o.bind(c.REMOVE, function (event, treeId, treeNode) {
2318
+ tools.apply(setting.callback.onRemove, [event, treeId, treeNode]);
2319
+ });
2320
+
2321
+ o.unbind(c.DRAG);
2322
+ o.bind(c.DRAG, function (event, srcEvent, treeId, treeNodes) {
2323
+ tools.apply(setting.callback.onDrag, [srcEvent, treeId, treeNodes]);
2324
+ });
2325
+
2326
+ o.unbind(c.DROP);
2327
+ o.bind(c.DROP, function (event, srcEvent, treeId, treeNodes, targetNode, moveType, isCopy) {
2328
+ tools.apply(setting.callback.onDrop, [srcEvent, treeId, treeNodes, targetNode, moveType, isCopy]);
2329
+ });
2330
+ },
2331
+ //default event proxy of exedit
2332
+ _eventProxy = function(e) {
2333
+ var target = e.target,
2334
+ setting = data.getSetting(e.data.treeId),
2335
+ relatedTarget = e.relatedTarget,
2336
+ tId = "", node = null,
2337
+ nodeEventType = "", treeEventType = "",
2338
+ nodeEventCallback = null, treeEventCallback = null,
2339
+ tmp = null;
2340
+
2341
+ if (tools.eqs(e.type, "mouseover")) {
2342
+ tmp = tools.getMDom(setting, target, [{tagName:"a", attrName:"treeNode"+consts.id.A}]);
2343
+ if (tmp) {
2344
+ tId = tmp.parentNode.id;
2345
+ nodeEventType = "hoverOverNode";
2346
+ }
2347
+ } else if (tools.eqs(e.type, "mouseout")) {
2348
+ tmp = tools.getMDom(setting, relatedTarget, [{tagName:"a", attrName:"treeNode"+consts.id.A}]);
2349
+ if (!tmp) {
2350
+ tId = "remove";
2351
+ nodeEventType = "hoverOutNode";
2352
+ }
2353
+ } else if (tools.eqs(e.type, "mousedown")) {
2354
+ tmp = tools.getMDom(setting, target, [{tagName:"a", attrName:"treeNode"+consts.id.A}]);
2355
+ if (tmp) {
2356
+ tId = tmp.parentNode.id;
2357
+ nodeEventType = "mousedownNode";
2358
+ }
2359
+ }
2360
+ if (tId.length>0) {
2361
+ node = data.getNodeCache(setting, tId);
2362
+ switch (nodeEventType) {
2363
+ case "mousedownNode" :
2364
+ nodeEventCallback = _handler.onMousedownNode;
2365
+ break;
2366
+ case "hoverOverNode" :
2367
+ nodeEventCallback = _handler.onHoverOverNode;
2368
+ break;
2369
+ case "hoverOutNode" :
2370
+ nodeEventCallback = _handler.onHoverOutNode;
2371
+ break;
2372
+ }
2373
+ }
2374
+ var proxyResult = {
2375
+ stop: false,
2376
+ node: node,
2377
+ nodeEventType: nodeEventType,
2378
+ nodeEventCallback: nodeEventCallback,
2379
+ treeEventType: treeEventType,
2380
+ treeEventCallback: treeEventCallback
2381
+ };
2382
+ return proxyResult
2383
+ },
2384
+ //default init node of exedit
2385
+ _initNode = function(setting, level, n, parentNode, isFirstNode, isLastNode, openFlag) {
2386
+ if (!n) return;
2387
+ n.isHover = false;
2388
+ n.editNameFlag = false;
2389
+ },
2390
+ //update zTreeObj, add method of edit
2391
+ _zTreeTools = function(setting, zTreeTools) {
2392
+ zTreeTools.cancelEditName = function(newName) {
2393
+ var root = data.getRoot(setting),
2394
+ nameKey = setting.data.key.name,
2395
+ node = root.curEditNode;
2396
+ if (!root.curEditNode) return;
2397
+ view.cancelCurEditNode(setting, newName?newName:node[nameKey]);
2398
+ }
2399
+ zTreeTools.copyNode = function(targetNode, node, moveType, isSilent) {
2400
+ if (!node) return null;
2401
+ if (targetNode && !targetNode.isParent && setting.data.keep.leaf && moveType === consts.move.TYPE_INNER) return null;
2402
+ var newNode = tools.clone(node);
2403
+ if (!targetNode) {
2404
+ targetNode = null;
2405
+ moveType = consts.move.TYPE_INNER;
2406
+ }
2407
+ if (moveType == consts.move.TYPE_INNER) {
2408
+ function copyCallback() {
2409
+ view.addNodes(setting, targetNode, [newNode], isSilent);
2410
+ }
2411
+
2412
+ if (tools.canAsync(setting, targetNode)) {
2413
+ view.asyncNode(setting, targetNode, isSilent, copyCallback);
2414
+ } else {
2415
+ copyCallback();
2416
+ }
2417
+ } else {
2418
+ view.addNodes(setting, targetNode.parentNode, [newNode], isSilent);
2419
+ view.moveNode(setting, targetNode, newNode, moveType, false, isSilent);
2420
+ }
2421
+ return newNode;
2422
+ }
2423
+ zTreeTools.editName = function(node) {
2424
+ if (!node || !node.tId || node !== data.getNodeCache(setting, node.tId)) return;
2425
+ if (node.parentTId) view.expandCollapseParentNode(setting, node.getParentNode(), true);
2426
+ view.editNode(setting, node)
2427
+ }
2428
+ zTreeTools.moveNode = function(targetNode, node, moveType, isSilent) {
2429
+ if (!node) return node;
2430
+ if (targetNode && !targetNode.isParent && setting.data.keep.leaf && moveType === consts.move.TYPE_INNER) {
2431
+ return null;
2432
+ } else if (targetNode && ((node.parentTId == targetNode.tId && moveType == consts.move.TYPE_INNER) || $("#" + node.tId).find("#" + targetNode.tId).length > 0)) {
2433
+ return null;
2434
+ } else if (!targetNode) {
2435
+ targetNode = null;
2436
+ }
2437
+ function moveCallback() {
2438
+ view.moveNode(setting, targetNode, node, moveType, false, isSilent);
2439
+ }
2440
+ if (tools.canAsync(setting, targetNode)) {
2441
+ view.asyncNode(setting, targetNode, isSilent, moveCallback);
2442
+ } else {
2443
+ moveCallback();
2444
+ }
2445
+ return node;
2446
+ }
2447
+ zTreeTools.setEditable = function(editable) {
2448
+ setting.edit.enable = editable;
2449
+ return this.refresh();
2450
+ }
2451
+ },
2452
+ //method of operate data
2453
+ _data = {
2454
+ setSonNodeLevel: function(setting, parentNode, node) {
2455
+ if (!node) return;
2456
+ var childKey = setting.data.key.children;
2457
+ node.level = (parentNode)? parentNode.level + 1 : 0;
2458
+ if (!node[childKey]) return;
2459
+ for (var i = 0, l = node[childKey].length; i < l; i++) {
2460
+ if (node[childKey][i]) data.setSonNodeLevel(setting, node, node[childKey][i]);
2461
+ }
2462
+ }
2463
+ },
2464
+ //method of event proxy
2465
+ _event = {
2466
+
2467
+ },
2468
+ //method of event handler
2469
+ _handler = {
2470
+ onHoverOverNode: function(event, node) {
2471
+ var setting = data.getSetting(event.data.treeId),
2472
+ root = data.getRoot(setting);
2473
+ if (root.curHoverNode != node) {
2474
+ _handler.onHoverOutNode(event);
2475
+ }
2476
+ root.curHoverNode = node;
2477
+ view.addHoverDom(setting, node);
2478
+ },
2479
+ onHoverOutNode: function(event, node) {
2480
+ var setting = data.getSetting(event.data.treeId),
2481
+ root = data.getRoot(setting);
2482
+ if (root.curHoverNode && !data.isSelectedNode(setting, root.curHoverNode)) {
2483
+ view.removeTreeDom(setting, root.curHoverNode);
2484
+ root.curHoverNode = null;
2485
+ }
2486
+ },
2487
+ onMousedownNode: function(eventMouseDown, _node) {
2488
+ var i,l,
2489
+ setting = data.getSetting(eventMouseDown.data.treeId),
2490
+ root = data.getRoot(setting);
2491
+ //right click can't drag & drop
2492
+ if (eventMouseDown.button == 2 || !setting.edit.enable || (!setting.edit.drag.isCopy && !setting.edit.drag.isMove)) return true;
2493
+
2494
+ //input of edit node name can't drag & drop
2495
+ var target = eventMouseDown.target,
2496
+ _nodes = data.getRoot(setting).curSelectedList,
2497
+ nodes = [];
2498
+ if (!data.isSelectedNode(setting, _node)) {
2499
+ nodes = [_node];
2500
+ } else {
2501
+ for (i=0, l=_nodes.length; i<l; i++) {
2502
+ if (_nodes[i].editNameFlag && tools.eqs(target.tagName, "input") && target.getAttribute("treeNode"+consts.id.INPUT) !== null) {
2503
+ return true;
2504
+ }
2505
+ nodes.push(_nodes[i]);
2506
+ if (nodes[0].parentTId !== _nodes[i].parentTId) {
2507
+ nodes = [_node];
2508
+ break;
2509
+ }
2510
+ }
2511
+ }
2512
+
2513
+ view.editNodeBlur = true;
2514
+ view.cancelCurEditNode(setting, null, true);
2515
+
2516
+
2517
+ var doc = $(document), curNode, tmpArrow, tmpTarget,
2518
+ isOtherTree = false,
2519
+ targetSetting = setting,
2520
+ preNode, nextNode,
2521
+ preTmpTargetNodeId = null,
2522
+ preTmpMoveType = null,
2523
+ tmpTargetNodeId = null,
2524
+ moveType = consts.move.TYPE_INNER,
2525
+ mouseDownX = eventMouseDown.clientX,
2526
+ mouseDownY = eventMouseDown.clientY,
2527
+ startTime = (new Date()).getTime();
2528
+
2529
+ if (tools.uCanDo(setting)) {
2530
+ doc.bind("mousemove", _docMouseMove);
2531
+ }
2532
+ function _docMouseMove(event) {
2533
+ //avoid start drag after click node
2534
+ if (root.dragFlag == 0 && Math.abs(mouseDownX - event.clientX) < setting.edit.drag.minMoveSize
2535
+ && Math.abs(mouseDownY - event.clientY) < setting.edit.drag.minMoveSize) {
2536
+ return true;
2537
+ }
2538
+ var i, l, tmpNode, tmpDom, tmpNodes,
2539
+ childKey = setting.data.key.children;
2540
+ tools.noSel(setting);
2541
+ $("body").css("cursor", "pointer");
2542
+
2543
+ if (root.dragFlag == 0) {
2544
+ if (tools.apply(setting.callback.beforeDrag, [setting.treeId, nodes], true) == false) {
2545
+ _docMouseUp(event);
2546
+ return true;
2547
+ }
2548
+
2549
+ for (i=0, l=nodes.length; i<l; i++) {
2550
+ if (i==0) {
2551
+ root.dragNodeShowBefore = [];
2552
+ }
2553
+ tmpNode = nodes[i];
2554
+ if (tmpNode.isParent && tmpNode.open) {
2555
+ view.expandCollapseNode(setting, tmpNode, !tmpNode.open);
2556
+ root.dragNodeShowBefore[tmpNode.tId] = true;
2557
+ } else {
2558
+ root.dragNodeShowBefore[tmpNode.tId] = false;
2559
+ }
2560
+ }
2561
+
2562
+ root.dragFlag = 1;
2563
+ root.showHoverDom = false;
2564
+ tools.showIfameMask(setting, true);
2565
+
2566
+ //sort
2567
+ var isOrder = true, lastIndex = -1;
2568
+ if (nodes.length>1) {
2569
+ var pNodes = nodes[0].parentTId ? nodes[0].getParentNode()[childKey] : data.getNodes(setting);
2570
+ tmpNodes = [];
2571
+ for (i=0, l=pNodes.length; i<l; i++) {
2572
+ if (root.dragNodeShowBefore[pNodes[i].tId] !== undefined) {
2573
+ if (isOrder && lastIndex > -1 && (lastIndex+1) !== i) {
2574
+ isOrder = false;
2575
+ }
2576
+ tmpNodes.push(pNodes[i]);
2577
+ lastIndex = i;
2578
+ }
2579
+ if (nodes.length === tmpNodes.length) {
2580
+ nodes = tmpNodes;
2581
+ break;
2582
+ }
2583
+ }
2584
+ }
2585
+ if (isOrder) {
2586
+ preNode = nodes[0].getPreNode();
2587
+ nextNode = nodes[nodes.length-1].getNextNode();
2588
+ }
2589
+
2590
+ //set node in selected
2591
+ curNode = $("<ul class='zTreeDragUL'></ul>");
2592
+ for (i=0, l=nodes.length; i<l; i++) {
2593
+ tmpNode = nodes[i];
2594
+ tmpNode.editNameFlag = false;
2595
+ view.selectNode(setting, tmpNode, i>0);
2596
+ view.removeTreeDom(setting, tmpNode);
2597
+
2598
+ tmpDom = $("<li id='"+ tmpNode.tId +"_tmp'></li>");
2599
+ tmpDom.append($("#" + tmpNode.tId + consts.id.A).clone());
2600
+ tmpDom.css("padding", "0");
2601
+ tmpDom.children("#" + tmpNode.tId + consts.id.A).removeClass(consts.node.CURSELECTED);
2602
+ curNode.append(tmpDom);
2603
+ if (i == setting.edit.drag.maxShowNodeNum-1) {
2604
+ tmpDom = $("<li id='"+ tmpNode.tId +"_moretmp'><a> ... </a></li>");
2605
+ curNode.append(tmpDom);
2606
+ break;
2607
+ }
2608
+ }
2609
+ curNode.attr("id", nodes[0].tId + consts.id.UL + "_tmp");
2610
+ curNode.addClass(setting.treeObj.attr("class"));
2611
+ curNode.appendTo("body");
2612
+
2613
+ tmpArrow = $("<span class='tmpzTreeMove_arrow'></span>");
2614
+ tmpArrow.attr("id", "zTreeMove_arrow_tmp");
2615
+ tmpArrow.appendTo("body");
2616
+
2617
+ setting.treeObj.trigger(consts.event.DRAG, [event, setting.treeId, nodes]);
2618
+ }
2619
+
2620
+ if (root.dragFlag == 1) {
2621
+ if (tmpTarget && tmpArrow.attr("id") == event.target.id && tmpTargetNodeId && (event.clientX + doc.scrollLeft()+2) > ($("#" + tmpTargetNodeId + consts.id.A, tmpTarget).offset().left)) {
2622
+ var xT = $("#" + tmpTargetNodeId + consts.id.A, tmpTarget);
2623
+ event.target = (xT.length > 0) ? xT.get(0) : event.target;
2624
+ } else if (tmpTarget) {
2625
+ tmpTarget.removeClass(consts.node.TMPTARGET_TREE);
2626
+ if (tmpTargetNodeId) $("#" + tmpTargetNodeId + consts.id.A, tmpTarget).removeClass(consts.node.TMPTARGET_NODE + "_" + consts.move.TYPE_PREV)
2627
+ .removeClass(consts.node.TMPTARGET_NODE + "_" + _consts.move.TYPE_NEXT).removeClass(consts.node.TMPTARGET_NODE + "_" + _consts.move.TYPE_INNER);
2628
+ }
2629
+ tmpTarget = null;
2630
+ tmpTargetNodeId = null;
2631
+
2632
+ //judge drag & drop in multi ztree
2633
+ isOtherTree = false;
2634
+ targetSetting = setting;
2635
+ var settings = data.getSettings();
2636
+ for (var s in settings) {
2637
+ if (settings[s].treeId && settings[s].edit.enable && settings[s].treeId != setting.treeId
2638
+ && (event.target.id == settings[s].treeId || $(event.target).parents("#" + settings[s].treeId).length>0)) {
2639
+ isOtherTree = true;
2640
+ targetSetting = settings[s];
2641
+ }
2642
+ }
2643
+
2644
+ var docScrollTop = doc.scrollTop(),
2645
+ docScrollLeft = doc.scrollLeft(),
2646
+ treeOffset = targetSetting.treeObj.offset(),
2647
+ scrollHeight = targetSetting.treeObj.get(0).scrollHeight,
2648
+ scrollWidth = targetSetting.treeObj.get(0).scrollWidth,
2649
+ dTop = (event.clientY + docScrollTop - treeOffset.top),
2650
+ dBottom = (targetSetting.treeObj.height() + treeOffset.top - event.clientY - docScrollTop),
2651
+ dLeft = (event.clientX + docScrollLeft - treeOffset.left),
2652
+ dRight = (targetSetting.treeObj.width() + treeOffset.left - event.clientX - docScrollLeft),
2653
+ isTop = (dTop < setting.edit.drag.borderMax && dTop > setting.edit.drag.borderMin),
2654
+ isBottom = (dBottom < setting.edit.drag.borderMax && dBottom > setting.edit.drag.borderMin),
2655
+ isLeft = (dLeft < setting.edit.drag.borderMax && dLeft > setting.edit.drag.borderMin),
2656
+ isRight = (dRight < setting.edit.drag.borderMax && dRight > setting.edit.drag.borderMin),
2657
+ isTreeInner = dTop > setting.edit.drag.borderMin && dBottom > setting.edit.drag.borderMin && dLeft > setting.edit.drag.borderMin && dRight > setting.edit.drag.borderMin,
2658
+ isTreeTop = (isTop && targetSetting.treeObj.scrollTop() <= 0),
2659
+ isTreeBottom = (isBottom && (targetSetting.treeObj.scrollTop() + targetSetting.treeObj.height()+10) >= scrollHeight),
2660
+ isTreeLeft = (isLeft && targetSetting.treeObj.scrollLeft() <= 0),
2661
+ isTreeRight = (isRight && (targetSetting.treeObj.scrollLeft() + targetSetting.treeObj.width()+10) >= scrollWidth);
2662
+
2663
+ if (event.target.id && targetSetting.treeObj.find("#" + event.target.id).length > 0) {
2664
+ //get node <li> dom
2665
+ var targetObj = event.target;
2666
+ while (targetObj && targetObj.tagName && !tools.eqs(targetObj.tagName, "li") && targetObj.id != targetSetting.treeId) {
2667
+ targetObj = targetObj.parentNode;
2668
+ }
2669
+
2670
+ var canMove = true;
2671
+ //don't move to self or children of self
2672
+ for (i=0, l=nodes.length; i<l; i++) {
2673
+ tmpNode = nodes[i];
2674
+ if (targetObj.id === tmpNode.tId) {
2675
+ canMove = false;
2676
+ break;
2677
+ } else if ($("#" + tmpNode.tId).find("#" + targetObj.id).length > 0) {
2678
+ canMove = false;
2679
+ break;
2680
+ }
2681
+ }
2682
+ if (canMove) {
2683
+ if (event.target.id &&
2684
+ (event.target.id == (targetObj.id + consts.id.A) || $(event.target).parents("#" + targetObj.id + consts.id.A).length > 0)) {
2685
+ tmpTarget = $(targetObj);
2686
+ tmpTargetNodeId = targetObj.id;
2687
+ }
2688
+ }
2689
+ }
2690
+
2691
+ //the mouse must be in zTree
2692
+ tmpNode = nodes[0];
2693
+ if (isTreeInner && (event.target.id == targetSetting.treeId || $(event.target).parents("#" + targetSetting.treeId).length>0)) {
2694
+ //judge mouse move in root of ztree
2695
+ if (!tmpTarget && (event.target.id == targetSetting.treeId || isTreeTop || isTreeBottom || isTreeLeft || isTreeRight) && (isOtherTree || (!isOtherTree && tmpNode.parentTId))) {
2696
+ tmpTarget = targetSetting.treeObj;
2697
+ }
2698
+ //auto scroll top
2699
+ if (isTop) {
2700
+ targetSetting.treeObj.scrollTop(targetSetting.treeObj.scrollTop()-10);
2701
+ } else if (isBottom) {
2702
+ targetSetting.treeObj.scrollTop(targetSetting.treeObj.scrollTop()+10);
2703
+ }
2704
+ if (isLeft) {
2705
+ targetSetting.treeObj.scrollLeft(targetSetting.treeObj.scrollLeft()-10);
2706
+ } else if (isRight) {
2707
+ targetSetting.treeObj.scrollLeft(targetSetting.treeObj.scrollLeft()+10);
2708
+ }
2709
+ //auto scroll left
2710
+ if (tmpTarget && tmpTarget != targetSetting.treeObj && tmpTarget.offset().left < targetSetting.treeObj.offset().left) {
2711
+ targetSetting.treeObj.scrollLeft(targetSetting.treeObj.scrollLeft()+ tmpTarget.offset().left - targetSetting.treeObj.offset().left);
2712
+ }
2713
+ }
2714
+
2715
+ curNode.css({
2716
+ "top": (event.clientY + docScrollTop + 3) + "px",
2717
+ "left": (event.clientX + docScrollLeft + 3) + "px"
2718
+ });
2719
+
2720
+ var dX = 0;
2721
+ var dY = 0;
2722
+ if (tmpTarget && tmpTarget.attr("id")!=targetSetting.treeId) {
2723
+ var tmpTargetNode = tmpTargetNodeId == null ? null: data.getNodeCache(targetSetting, tmpTargetNodeId),
2724
+ isCopy = (event.ctrlKey && setting.edit.drag.isMove && setting.edit.drag.isCopy) || (!setting.edit.drag.isMove && setting.edit.drag.isCopy),
2725
+ isPrev = !!(preNode && tmpTargetNodeId === preNode.tId),
2726
+ isNext = !!(nextNode && tmpTargetNodeId === nextNode.tId),
2727
+ isInner = (tmpNode.parentTId && tmpNode.parentTId == tmpTargetNodeId),
2728
+ canPrev = (isCopy || !isNext) && tools.apply(targetSetting.edit.drag.prev, [targetSetting.treeId, nodes, tmpTargetNode], !!targetSetting.edit.drag.prev),
2729
+ canNext = (isCopy || !isPrev) && tools.apply(targetSetting.edit.drag.next, [targetSetting.treeId, nodes, tmpTargetNode], !!targetSetting.edit.drag.next),
2730
+ canInner = (isCopy || !isInner) && !(targetSetting.data.keep.leaf && !tmpTargetNode.isParent) && tools.apply(targetSetting.edit.drag.inner, [targetSetting.treeId, nodes, tmpTargetNode], !!targetSetting.edit.drag.inner);
2731
+ if (!canPrev && !canNext && !canInner) {
2732
+ tmpTarget = null;
2733
+ tmpTargetNodeId = "";
2734
+ moveType = consts.move.TYPE_INNER;
2735
+ tmpArrow.css({
2736
+ "display":"none"
2737
+ });
2738
+ if (window.zTreeMoveTimer) {
2739
+ clearTimeout(window.zTreeMoveTimer);
2740
+ window.zTreeMoveTargetNodeTId = null
2741
+ }
2742
+ } else {
2743
+ var tmpTargetA = $("#" + tmpTargetNodeId + consts.id.A, tmpTarget),
2744
+ tmpNextA = tmpTargetNode.isLastNode ? null : $("#" + tmpTargetNode.getNextNode().tId + consts.id.A, tmpTarget.next()),
2745
+ tmpTop = tmpTargetA.offset().top,
2746
+ tmpLeft = tmpTargetA.offset().left,
2747
+ prevPercent = canPrev ? (canInner ? 0.25 : (canNext ? 0.5 : 1) ) : -1,
2748
+ nextPercent = canNext ? (canInner ? 0.75 : (canPrev ? 0.5 : 0) ) : -1,
2749
+ dY_percent = (event.clientY + docScrollTop - tmpTop)/tmpTargetA.height();
2750
+ if ((prevPercent==1 ||dY_percent<=prevPercent && dY_percent>=-.2) && canPrev) {
2751
+ dX = 1 - tmpArrow.width();
2752
+ dY = tmpTop - tmpArrow.height()/2;
2753
+ moveType = consts.move.TYPE_PREV;
2754
+ } else if ((nextPercent==0 || dY_percent>=nextPercent && dY_percent<=1.2) && canNext) {
2755
+ dX = 1 - tmpArrow.width();
2756
+ dY = (tmpNextA == null || (tmpTargetNode.isParent && tmpTargetNode.open)) ? (tmpTop + tmpTargetA.height() - tmpArrow.height()/2) : (tmpNextA.offset().top - tmpArrow.height()/2);
2757
+ moveType = consts.move.TYPE_NEXT;
2758
+ }else {
2759
+ dX = 5 - tmpArrow.width();
2760
+ dY = tmpTop;
2761
+ moveType = consts.move.TYPE_INNER;
2762
+ }
2763
+ tmpArrow.css({
2764
+ "display":"block",
2765
+ "top": dY + "px",
2766
+ "left": (tmpLeft + dX) + "px"
2767
+ });
2768
+ tmpTargetA.addClass(consts.node.TMPTARGET_NODE + "_" + moveType);
2769
+
2770
+ if (preTmpTargetNodeId != tmpTargetNodeId || preTmpMoveType != moveType) {
2771
+ startTime = (new Date()).getTime();
2772
+ }
2773
+ if (tmpTargetNode && tmpTargetNode.isParent && moveType == consts.move.TYPE_INNER) {
2774
+ var startTimer = true;
2775
+ if (window.zTreeMoveTimer && window.zTreeMoveTargetNodeTId !== tmpTargetNode.tId) {
2776
+ clearTimeout(window.zTreeMoveTimer);
2777
+ window.zTreeMoveTargetNodeTId = null;
2778
+ } else if (window.zTreeMoveTimer && window.zTreeMoveTargetNodeTId === tmpTargetNode.tId) {
2779
+ startTimer = false;
2780
+ }
2781
+ if (startTimer) {
2782
+ window.zTreeMoveTimer = setTimeout(function() {
2783
+ if (moveType != consts.move.TYPE_INNER) return;
2784
+ if (tmpTargetNode && tmpTargetNode.isParent && !tmpTargetNode.open && (new Date()).getTime() - startTime > targetSetting.edit.drag.autoOpenTime
2785
+ && tools.apply(targetSetting.callback.beforeDragOpen, [targetSetting.treeId, tmpTargetNode], true)) {
2786
+ view.switchNode(targetSetting, tmpTargetNode);
2787
+ if (targetSetting.edit.drag.autoExpandTrigger) {
2788
+ targetSetting.treeObj.trigger(consts.event.EXPAND, [targetSetting.treeId, tmpTargetNode]);
2789
+ }
2790
+ }
2791
+ }, targetSetting.edit.drag.autoOpenTime+50);
2792
+ window.zTreeMoveTargetNodeTId = tmpTargetNode.tId;
2793
+ }
2794
+ }
2795
+ }
2796
+ } else {
2797
+ moveType = consts.move.TYPE_INNER;
2798
+ if (tmpTarget && tools.apply(targetSetting.edit.drag.inner, [targetSetting.treeId, nodes, null], !!targetSetting.edit.drag.inner)) {
2799
+ tmpTarget.addClass(consts.node.TMPTARGET_TREE);
2800
+ } else {
2801
+ tmpTarget = null;
2802
+ }
2803
+ tmpArrow.css({
2804
+ "display":"none"
2805
+ });
2806
+ if (window.zTreeMoveTimer) {
2807
+ clearTimeout(window.zTreeMoveTimer);
2808
+ window.zTreeMoveTargetNodeTId = null;
2809
+ }
2810
+ }
2811
+ preTmpTargetNodeId = tmpTargetNodeId;
2812
+ preTmpMoveType = moveType;
2813
+ }
2814
+ return false;
2815
+ }
2816
+
2817
+ doc.bind("mouseup", _docMouseUp);
2818
+ function _docMouseUp(event) {
2819
+ if (window.zTreeMoveTimer) {
2820
+ clearTimeout(window.zTreeMoveTimer);
2821
+ window.zTreeMoveTargetNodeTId = null;
2822
+ }
2823
+ preTmpTargetNodeId = null;
2824
+ preTmpMoveType = null;
2825
+ doc.unbind("mousemove", _docMouseMove);
2826
+ doc.unbind("mouseup", _docMouseUp);
2827
+ doc.unbind("selectstart", _docSelect);
2828
+ $("body").css("cursor", "auto");
2829
+ if (tmpTarget) {
2830
+ tmpTarget.removeClass(consts.node.TMPTARGET_TREE);
2831
+ if (tmpTargetNodeId) $("#" + tmpTargetNodeId + consts.id.A, tmpTarget).removeClass(consts.node.TMPTARGET_NODE + "_" + consts.move.TYPE_PREV)
2832
+ .removeClass(consts.node.TMPTARGET_NODE + "_" + _consts.move.TYPE_NEXT).removeClass(consts.node.TMPTARGET_NODE + "_" + _consts.move.TYPE_INNER);
2833
+ }
2834
+ tools.showIfameMask(setting, false);
2835
+
2836
+ root.showHoverDom = true;
2837
+ if (root.dragFlag == 0) return;
2838
+ root.dragFlag = 0;
2839
+
2840
+ var i, l, tmpNode;
2841
+ for (i=0, l=nodes.length; i<l; i++) {
2842
+ tmpNode = nodes[i];
2843
+ if (tmpNode.isParent && root.dragNodeShowBefore[tmpNode.tId] && !tmpNode.open) {
2844
+ view.expandCollapseNode(setting, tmpNode, !tmpNode.open);
2845
+ delete root.dragNodeShowBefore[tmpNode.tId];
2846
+ }
2847
+ }
2848
+
2849
+ if (curNode) curNode.remove();
2850
+ if (tmpArrow) tmpArrow.remove();
2851
+
2852
+ var isCopy = (event.ctrlKey && setting.edit.drag.isMove && setting.edit.drag.isCopy) || (!setting.edit.drag.isMove && setting.edit.drag.isCopy);
2853
+ if (!isCopy && tmpTarget && tmpTargetNodeId && nodes[0].parentTId && tmpTargetNodeId==nodes[0].parentTId && moveType == consts.move.TYPE_INNER) {
2854
+ tmpTarget = null;
2855
+ }
2856
+ if (tmpTarget) {
2857
+ var dragTargetNode = tmpTargetNodeId == null ? null: data.getNodeCache(targetSetting, tmpTargetNodeId);
2858
+ if (tools.apply(setting.callback.beforeDrop, [targetSetting.treeId, nodes, dragTargetNode, moveType, isCopy], true) == false) return;
2859
+ var newNodes = isCopy ? tools.clone(nodes) : nodes;
2860
+
2861
+ function dropCallback() {
2862
+ if (isOtherTree) {
2863
+ if (!isCopy) {
2864
+ for(var i=0, l=nodes.length; i<l; i++) {
2865
+ view.removeNode(setting, nodes[i]);
2866
+ }
2867
+ }
2868
+ if (moveType == consts.move.TYPE_INNER) {
2869
+ view.addNodes(targetSetting, dragTargetNode, newNodes);
2870
+ } else {
2871
+ view.addNodes(targetSetting, dragTargetNode.getParentNode(), newNodes);
2872
+ if (moveType == consts.move.TYPE_PREV) {
2873
+ for (i=0, l=newNodes.length; i<l; i++) {
2874
+ view.moveNode(targetSetting, dragTargetNode, newNodes[i], moveType, false);
2875
+ }
2876
+ } else {
2877
+ for (i=-1, l=newNodes.length-1; i<l; l--) {
2878
+ view.moveNode(targetSetting, dragTargetNode, newNodes[l], moveType, false);
2879
+ }
2880
+ }
2881
+ }
2882
+ } else {
2883
+ if (isCopy && moveType == consts.move.TYPE_INNER) {
2884
+ view.addNodes(targetSetting, dragTargetNode, newNodes);
2885
+ } else {
2886
+ if (isCopy) {
2887
+ view.addNodes(targetSetting, dragTargetNode.getParentNode(), newNodes);
2888
+ }
2889
+ if (moveType == consts.move.TYPE_PREV) {
2890
+ for (i=0, l=newNodes.length; i<l; i++) {
2891
+ view.moveNode(targetSetting, dragTargetNode, newNodes[i], moveType, false);
2892
+ }
2893
+ } else {
2894
+ for (i=-1, l=newNodes.length-1; i<l; l--) {
2895
+ view.moveNode(targetSetting, dragTargetNode, newNodes[l], moveType, false);
2896
+ }
2897
+ }
2898
+ }
2899
+ }
2900
+ for (i=0, l=newNodes.length; i<l; i++) {
2901
+ view.selectNode(targetSetting, newNodes[i], i>0);
2902
+ }
2903
+ $("#" + newNodes[0].tId).focus().blur();
2904
+
2905
+ }
2906
+
2907
+ if (moveType == consts.move.TYPE_INNER && tools.canAsync(targetSetting, dragTargetNode)) {
2908
+ view.asyncNode(targetSetting, dragTargetNode, false, dropCallback);
2909
+ } else {
2910
+ dropCallback();
2911
+ }
2912
+
2913
+ setting.treeObj.trigger(consts.event.DROP, [event, targetSetting.treeId, newNodes, dragTargetNode, moveType, isCopy]);
2914
+ } else {
2915
+ for (i=0, l=nodes.length; i<l; i++) {
2916
+ view.selectNode(targetSetting, nodes[i], i>0);
2917
+ }
2918
+ setting.treeObj.trigger(consts.event.DROP, [event, setting.treeId, nodes, null, null, null]);
2919
+ }
2920
+ }
2921
+
2922
+ doc.bind("selectstart", _docSelect);
2923
+ function _docSelect() {
2924
+ return false;
2925
+ }
2926
+
2927
+ //Avoid FireFox's Bug
2928
+ //If zTree Div CSS set 'overflow', so drag node outside of zTree, and event.target is error.
2929
+ if(eventMouseDown.preventDefault) {
2930
+ eventMouseDown.preventDefault();
2931
+ }
2932
+ return true;
2933
+ }
2934
+ },
2935
+ //method of tools for zTree
2936
+ _tools = {
2937
+ getAbs: function (obj) {
2938
+ var oRect = obj.getBoundingClientRect();
2939
+ return [oRect.left,oRect.top]
2940
+ },
2941
+ inputFocus: function(inputObj) {
2942
+ if (inputObj.get(0)) {
2943
+ inputObj.focus();
2944
+ tools.setCursorPosition(inputObj.get(0), inputObj.val().length);
2945
+ }
2946
+ },
2947
+ inputSelect: function(inputObj) {
2948
+ if (inputObj.get(0)) {
2949
+ inputObj.focus();
2950
+ inputObj.select();
2951
+ }
2952
+ },
2953
+ setCursorPosition: function(obj, pos){
2954
+ if(obj.setSelectionRange) {
2955
+ obj.focus();
2956
+ obj.setSelectionRange(pos,pos);
2957
+ } else if (obj.createTextRange) {
2958
+ var range = obj.createTextRange();
2959
+ range.collapse(true);
2960
+ range.moveEnd('character', pos);
2961
+ range.moveStart('character', pos);
2962
+ range.select();
2963
+ }
2964
+ },
2965
+ showIfameMask: function(setting, showSign) {
2966
+ var root = data.getRoot(setting);
2967
+ //clear full mask
2968
+ while (root.dragMaskList.length > 0) {
2969
+ root.dragMaskList[0].remove();
2970
+ root.dragMaskList.shift();
2971
+ }
2972
+ if (showSign) {
2973
+ //show mask
2974
+ var iframeList = $("iframe");
2975
+ for (var i = 0, l = iframeList.length; i < l; i++) {
2976
+ var obj = iframeList.get(i),
2977
+ r = tools.getAbs(obj),
2978
+ 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>");
2979
+ dragMask.appendTo("body");
2980
+ root.dragMaskList.push(dragMask);
2981
+ }
2982
+ }
2983
+ }
2984
+ },
2985
+ //method of operate ztree dom
2986
+ _view = {
2987
+ addEditBtn: function(setting, node) {
2988
+ if (node.editNameFlag || $("#" + node.tId + consts.id.EDIT).length > 0) {
2989
+ return;
2990
+ }
2991
+ if (!tools.apply(setting.edit.showRenameBtn, [setting.treeId, node], setting.edit.showRenameBtn)) {
2992
+ return;
2993
+ }
2994
+ var aObj = $("#" + node.tId + consts.id.A),
2995
+ 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>";
2996
+ aObj.append(editStr);
2997
+
2998
+ $("#" + node.tId + consts.id.EDIT).bind('click',
2999
+ function() {
3000
+ if (!tools.uCanDo(setting) || tools.apply(setting.callback.beforeEditName, [setting.treeId, node], true) == false) return false;
3001
+ view.editNode(setting, node);
3002
+ return false;
3003
+ }
3004
+ ).show();
3005
+ },
3006
+ addRemoveBtn: function(setting, node) {
3007
+ if (node.editNameFlag || $("#" + node.tId + consts.id.REMOVE).length > 0) {
3008
+ return;
3009
+ }
3010
+ if (!tools.apply(setting.edit.showRemoveBtn, [setting.treeId, node], setting.edit.showRemoveBtn)) {
3011
+ return;
3012
+ }
3013
+ var aObj = $("#" + node.tId + consts.id.A),
3014
+ 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>";
3015
+ aObj.append(removeStr);
3016
+
3017
+ $("#" + node.tId + consts.id.REMOVE).bind('click',
3018
+ function() {
3019
+ if (!tools.uCanDo(setting) || tools.apply(setting.callback.beforeRemove, [setting.treeId, node], true) == false) return false;
3020
+ view.removeNode(setting, node);
3021
+ setting.treeObj.trigger(consts.event.REMOVE, [setting.treeId, node]);
3022
+ return false;
3023
+ }
3024
+ ).bind('mousedown',
3025
+ function(eventMouseDown) {
3026
+ return true;
3027
+ }
3028
+ ).show();
3029
+ },
3030
+ addHoverDom: function(setting, node) {
3031
+ if (data.getRoot(setting).showHoverDom) {
3032
+ node.isHover = true;
3033
+ if (setting.edit.enable) {
3034
+ view.addEditBtn(setting, node);
3035
+ view.addRemoveBtn(setting, node);
3036
+ }
3037
+ tools.apply(setting.view.addHoverDom, [setting.treeId, node]);
3038
+ }
3039
+ },
3040
+ cancelCurEditNode: function (setting, forceName) {
3041
+ var root = data.getRoot(setting),
3042
+ nameKey = setting.data.key.name,
3043
+ node = root.curEditNode;
3044
+
3045
+ if (node) {
3046
+ var inputObj = root.curEditInput;
3047
+ var newName = forceName ? forceName:inputObj.val();
3048
+ if (!forceName && tools.apply(setting.callback.beforeRename, [setting.treeId, node, newName], true) === false) {
3049
+ node.editNameFlag = true;
3050
+ return false;
3051
+ } else {
3052
+ node[nameKey] = newName ? newName:inputObj.val();
3053
+ if (!forceName) {
3054
+ setting.treeObj.trigger(consts.event.RENAME, [setting.treeId, node]);
3055
+ }
3056
+ }
3057
+ var aObj = $("#" + node.tId + consts.id.A);
3058
+ aObj.removeClass(consts.node.CURSELECTED_EDIT);
3059
+ inputObj.unbind();
3060
+ view.setNodeName(setting, node);
3061
+ node.editNameFlag = false;
3062
+ root.curEditNode = null;
3063
+ root.curEditInput = null;
3064
+ view.selectNode(setting, node, false);
3065
+ }
3066
+ root.noSelection = true;
3067
+ return true;
3068
+ },
3069
+ editNode: function(setting, node) {
3070
+ var root = data.getRoot(setting);
3071
+ view.editNodeBlur = false;
3072
+ if (data.isSelectedNode(setting, node) && root.curEditNode == node && node.editNameFlag) {
3073
+ setTimeout(function() {tools.inputFocus(root.curEditInput);}, 0);
3074
+ return;
3075
+ }
3076
+ var nameKey = setting.data.key.name;
3077
+ node.editNameFlag = true;
3078
+ view.removeTreeDom(setting, node);
3079
+ view.cancelCurEditNode(setting);
3080
+ view.selectNode(setting, node, false);
3081
+ $("#" + node.tId + consts.id.SPAN).html("<input type=text class='rename' id='" + node.tId + consts.id.INPUT + "' treeNode" + consts.id.INPUT + " >");
3082
+ var inputObj = $("#" + node.tId + consts.id.INPUT);
3083
+ inputObj.attr("value", node[nameKey]);
3084
+ if (setting.edit.editNameSelectAll) {
3085
+ tools.inputSelect(inputObj);
3086
+ } else {
3087
+ tools.inputFocus(inputObj);
3088
+ }
3089
+
3090
+ inputObj.bind('blur', function(event) {
3091
+ if (!view.editNodeBlur) {
3092
+ view.cancelCurEditNode(setting);
3093
+ }
3094
+ }).bind('keydown', function(event) {
3095
+ if (event.keyCode=="13") {
3096
+ view.editNodeBlur = true;
3097
+ view.cancelCurEditNode(setting, null, true);
3098
+ } else if (event.keyCode=="27") {
3099
+ view.cancelCurEditNode(setting, node[nameKey]);
3100
+ }
3101
+ }).bind('click', function(event) {
3102
+ return false;
3103
+ }).bind('dblclick', function(event) {
3104
+ return false;
3105
+ });
3106
+
3107
+ $("#" + node.tId + consts.id.A).addClass(consts.node.CURSELECTED_EDIT);
3108
+ root.curEditInput = inputObj;
3109
+ root.noSelection = false;
3110
+ root.curEditNode = node;
3111
+ },
3112
+ moveNode: function(setting, targetNode, node, moveType, animateFlag, isSilent) {
3113
+ var root = data.getRoot(setting),
3114
+ childKey = setting.data.key.children;
3115
+ if (targetNode == node) return;
3116
+ if (setting.data.keep.leaf && targetNode && !targetNode.isParent && moveType == consts.move.TYPE_INNER) return;
3117
+ var oldParentNode = (node.parentTId ? node.getParentNode(): root),
3118
+ targetNodeIsRoot = (targetNode === null || targetNode == root);
3119
+ if (targetNodeIsRoot && targetNode === null) targetNode = root;
3120
+ if (targetNodeIsRoot) moveType = consts.move.TYPE_INNER;
3121
+ var targetParentNode = (targetNode.parentTId ? targetNode.getParentNode() : root);
3122
+
3123
+ if (moveType != consts.move.TYPE_PREV && moveType != consts.move.TYPE_NEXT) {
3124
+ moveType = consts.move.TYPE_INNER;
3125
+ }
3126
+
3127
+ if (moveType == consts.move.TYPE_INNER) {
3128
+ if (targetNodeIsRoot) {
3129
+ //parentTId of root node is null
3130
+ node.parentTId = null;
3131
+ } else {
3132
+ if (!targetNode.isParent) {
3133
+ targetNode.isParent = true;
3134
+ targetNode.open = !!targetNode.open;
3135
+ view.setNodeLineIcos(setting, targetNode);
3136
+ }
3137
+ node.parentTId = targetNode.tId;
3138
+ }
3139
+ }
3140
+
3141
+ //move node Dom
3142
+ var targetObj, target_ulObj;
3143
+ if (targetNodeIsRoot) {
3144
+ targetObj = setting.treeObj;
3145
+ target_ulObj = targetObj;
3146
+ } else {
3147
+ if (!isSilent && moveType == consts.move.TYPE_INNER) {
3148
+ view.expandCollapseNode(setting, targetNode, true, false);
3149
+ } else if (!isSilent) {
3150
+ view.expandCollapseNode(setting, targetNode.getParentNode(), true, false);
3151
+ }
3152
+ targetObj = $("#" + targetNode.tId);
3153
+ target_ulObj = $("#" + targetNode.tId + consts.id.UL);
3154
+ if (!!targetObj.get(0) && !target_ulObj.get(0)) {
3155
+ var ulstr = [];
3156
+ view.makeUlHtml(setting, targetNode, ulstr, '');
3157
+ targetObj.append(ulstr.join(''));
3158
+ }
3159
+ target_ulObj = $("#" + targetNode.tId + consts.id.UL);
3160
+ }
3161
+ var nodeDom = $("#" + node.tId);
3162
+ if (!nodeDom.get(0)) {
3163
+ nodeDom = view.appendNodes(setting, node.level, [node], null, false, true).join('');
3164
+ } else if (!targetObj.get(0)) {
3165
+ nodeDom.remove();
3166
+ }
3167
+ if (target_ulObj.get(0) && moveType == consts.move.TYPE_INNER) {
3168
+ target_ulObj.append(nodeDom);
3169
+ } else if (targetObj.get(0) && moveType == consts.move.TYPE_PREV) {
3170
+ targetObj.before(nodeDom);
3171
+ } else if (targetObj.get(0) && moveType == consts.move.TYPE_NEXT) {
3172
+ targetObj.after(nodeDom);
3173
+ }
3174
+
3175
+ //repair the data after move
3176
+ var i,l,
3177
+ tmpSrcIndex = -1,
3178
+ tmpTargetIndex = 0,
3179
+ oldNeighbor = null,
3180
+ newNeighbor = null,
3181
+ oldLevel = node.level;
3182
+ if (node.isFirstNode) {
3183
+ tmpSrcIndex = 0;
3184
+ if (oldParentNode[childKey].length > 1 ) {
3185
+ oldNeighbor = oldParentNode[childKey][1];
3186
+ oldNeighbor.isFirstNode = true;
3187
+ }
3188
+ } else if (node.isLastNode) {
3189
+ tmpSrcIndex = oldParentNode[childKey].length -1;
3190
+ oldNeighbor = oldParentNode[childKey][tmpSrcIndex - 1];
3191
+ oldNeighbor.isLastNode = true;
3192
+ } else {
3193
+ for (i = 0, l = oldParentNode[childKey].length; i < l; i++) {
3194
+ if (oldParentNode[childKey][i].tId == node.tId) {
3195
+ tmpSrcIndex = i;
3196
+ break;
3197
+ }
3198
+ }
3199
+ }
3200
+ if (tmpSrcIndex >= 0) {
3201
+ oldParentNode[childKey].splice(tmpSrcIndex, 1);
3202
+ }
3203
+ if (moveType != consts.move.TYPE_INNER) {
3204
+ for (i = 0, l = targetParentNode[childKey].length; i < l; i++) {
3205
+ if (targetParentNode[childKey][i].tId == targetNode.tId) tmpTargetIndex = i;
3206
+ }
3207
+ }
3208
+ if (moveType == consts.move.TYPE_INNER) {
3209
+ if (!targetNode[childKey]) targetNode[childKey] = new Array();
3210
+ if (targetNode[childKey].length > 0) {
3211
+ newNeighbor = targetNode[childKey][targetNode[childKey].length - 1];
3212
+ newNeighbor.isLastNode = false;
3213
+ }
3214
+ targetNode[childKey].splice(targetNode[childKey].length, 0, node);
3215
+ node.isLastNode = true;
3216
+ node.isFirstNode = (targetNode[childKey].length == 1);
3217
+ } else if (targetNode.isFirstNode && moveType == consts.move.TYPE_PREV) {
3218
+ targetParentNode[childKey].splice(tmpTargetIndex, 0, node);
3219
+ newNeighbor = targetNode;
3220
+ newNeighbor.isFirstNode = false;
3221
+ node.parentTId = targetNode.parentTId;
3222
+ node.isFirstNode = true;
3223
+ node.isLastNode = false;
3224
+
3225
+ } else if (targetNode.isLastNode && moveType == consts.move.TYPE_NEXT) {
3226
+ targetParentNode[childKey].splice(tmpTargetIndex + 1, 0, node);
3227
+ newNeighbor = targetNode;
3228
+ newNeighbor.isLastNode = false;
3229
+ node.parentTId = targetNode.parentTId;
3230
+ node.isFirstNode = false;
3231
+ node.isLastNode = true;
3232
+
3233
+ } else {
3234
+ if (moveType == consts.move.TYPE_PREV) {
3235
+ targetParentNode[childKey].splice(tmpTargetIndex, 0, node);
3236
+ } else {
3237
+ targetParentNode[childKey].splice(tmpTargetIndex + 1, 0, node);
3238
+ }
3239
+ node.parentTId = targetNode.parentTId;
3240
+ node.isFirstNode = false;
3241
+ node.isLastNode = false;
3242
+ }
3243
+ data.fixPIdKeyValue(setting, node);
3244
+ data.setSonNodeLevel(setting, node.getParentNode(), node);
3245
+
3246
+ //repair node what been moved
3247
+ view.setNodeLineIcos(setting, node);
3248
+ view.repairNodeLevelClass(setting, node, oldLevel)
3249
+
3250
+ //repair node's old parentNode dom
3251
+ if (!setting.data.keep.parent && oldParentNode[childKey].length < 1) {
3252
+ //old parentNode has no child nodes
3253
+ oldParentNode.isParent = false;
3254
+ oldParentNode.open = false;
3255
+ var tmp_ulObj = $("#" + oldParentNode.tId + consts.id.UL),
3256
+ tmp_switchObj = $("#" + oldParentNode.tId + consts.id.SWITCH),
3257
+ tmp_icoObj = $("#" + oldParentNode.tId + consts.id.ICON);
3258
+ view.replaceSwitchClass(oldParentNode, tmp_switchObj, consts.folder.DOCU);
3259
+ view.replaceIcoClass(oldParentNode, tmp_icoObj, consts.folder.DOCU);
3260
+ tmp_ulObj.css("display", "none");
3261
+
3262
+ } else if (oldNeighbor) {
3263
+ //old neigbor node
3264
+ view.setNodeLineIcos(setting, oldNeighbor);
3265
+ }
3266
+
3267
+ //new neigbor node
3268
+ if (newNeighbor) {
3269
+ view.setNodeLineIcos(setting, newNeighbor);
3270
+ }
3271
+
3272
+ //repair checkbox / radio
3273
+ if (!!setting.check && setting.check.enable && view.repairChkClass) {
3274
+ view.repairChkClass(setting, oldParentNode);
3275
+ view.repairParentChkClassWithSelf(setting, oldParentNode);
3276
+ if (oldParentNode != node.parent)
3277
+ view.repairParentChkClassWithSelf(setting, node);
3278
+ }
3279
+
3280
+ //expand parents after move
3281
+ if (!isSilent) {
3282
+ view.expandCollapseParentNode(setting, node.getParentNode(), true, animateFlag);
3283
+ }
3284
+ },
3285
+ removeEditBtn: function(node) {
3286
+ $("#" + node.tId + consts.id.EDIT).unbind().remove();
3287
+ },
3288
+ removeRemoveBtn: function(node) {
3289
+ $("#" + node.tId + consts.id.REMOVE).unbind().remove();
3290
+ },
3291
+ removeTreeDom: function(setting, node) {
3292
+ node.isHover = false;
3293
+ view.removeEditBtn(node);
3294
+ view.removeRemoveBtn(node);
3295
+ tools.apply(setting.view.removeHoverDom, [setting.treeId, node]);
3296
+ },
3297
+ repairNodeLevelClass: function(setting, node, oldLevel) {
3298
+ if (oldLevel === node.level) return;
3299
+ var liObj = $("#" + node.tId),
3300
+ aObj = $("#" + node.tId + consts.id.A),
3301
+ ulObj = $("#" + node.tId + consts.id.UL),
3302
+ oldClass = "level" + oldLevel,
3303
+ newClass = "level" + node.level;
3304
+ liObj.removeClass(oldClass);
3305
+ liObj.addClass(newClass);
3306
+ aObj.removeClass(oldClass);
3307
+ aObj.addClass(newClass);
3308
+ ulObj.removeClass(oldClass);
3309
+ ulObj.addClass(newClass);
3310
+ }
3311
+ },
3312
+
3313
+ _z = {
3314
+ tools: _tools,
3315
+ view: _view,
3316
+ event: _event,
3317
+ data: _data
3318
+ };
3319
+ $.extend(true, $.fn.zTree.consts, _consts);
3320
+ $.extend(true, $.fn.zTree._z, _z);
3321
+
3322
+ var zt = $.fn.zTree,
3323
+ tools = zt._z.tools,
3324
+ consts = zt.consts,
3325
+ view = zt._z.view,
3326
+ data = zt._z.data,
3327
+ event = zt._z.event;
3328
+
3329
+ data.exSetting(_setting);
3330
+ data.addInitBind(_bindEvent);
3331
+ data.addInitCache(_initCache);
3332
+ data.addInitNode(_initNode);
3333
+ data.addInitProxy(_eventProxy);
3334
+ data.addInitRoot(_initRoot);
3335
+ data.addZTreeTools(_zTreeTools);
3336
+
3337
+ var _cancelPreSelectedNode = view.cancelPreSelectedNode;
3338
+ view.cancelPreSelectedNode = function (setting, node) {
3339
+ var list = data.getRoot(setting).curSelectedList;
3340
+ for (var i=0, j=list.length; i<j; i++) {
3341
+ if (!node || node === list[i]) {
3342
+ view.removeTreeDom(setting, list[i]);
3343
+ if (node) break;
3344
+ }
3345
+ }
3346
+ if (_cancelPreSelectedNode) _cancelPreSelectedNode.apply(view, arguments);
3347
+ }
3348
+
3349
+ var _createNodes = view.createNodes;
3350
+ view.createNodes = function(setting, level, nodes, parentNode) {
3351
+ if (_createNodes) {
3352
+ _createNodes.apply(view, arguments);
3353
+ }
3354
+ if (!nodes) return;
3355
+ if (view.repairParentChkClassWithSelf) {
3356
+ view.repairParentChkClassWithSelf(setting, parentNode);
3357
+ }
3358
+ }
3359
+
3360
+ view.makeNodeUrl = function(setting, node) {
3361
+ return (node.url && !setting.edit.enable) ? node.url : null;
3362
+ }
3363
+
3364
+ var _removeNode = view.removeNode;
3365
+ view.removeNode = function(setting, node) {
3366
+ var root = data.getRoot(setting);
3367
+ if (root.curEditNode === node) root.curEditNode = null;
3368
+ if (_removeNode) {
3369
+ _removeNode.apply(view, arguments);
3370
+ }
3371
+ }
3372
+
3373
+ var _selectNode = view.selectNode;
3374
+ view.selectNode = function(setting, node, addFlag) {
3375
+ var root = data.getRoot(setting);
3376
+ if (data.isSelectedNode(setting, node) && root.curEditNode == node && node.editNameFlag) {
3377
+ return false;
3378
+ }
3379
+ if (_selectNode) _selectNode.apply(view, arguments);
3380
+ view.addHoverDom(setting, node);
3381
+ return true;
3382
+ }
3383
+
3384
+ var _uCanDo = tools.uCanDo;
3385
+ tools.uCanDo = function(setting, e) {
3386
+ var root = data.getRoot(setting);
3387
+ if (e && (tools.eqs(e.type, "mouseover") || tools.eqs(e.type, "mouseout") || tools.eqs(e.type, "mousedown") || tools.eqs(e.type, "mouseup"))) {
3388
+ return true;
3389
+ }
3390
+ return (!root.curEditNode) && (_uCanDo ? _uCanDo.apply(view, arguments) : true);
3391
+ }
3392
+ })(jQuery);