jqtree-rails 0.1.0 → 0.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.gitmodules +3 -0
- data/Gemfile.lock +24 -22
- data/LICENSE +1 -1
- data/README.md +3 -3
- data/Rakefile +9 -1
- data/VERSION +1 -0
- data/jqtree-rails.gemspec +6 -5
- data/lib/generators/jqtree/install/install_generator.rb +1 -1
- data/lib/jqtree/rails/version.rb +5 -2
- data/vendor/assets/images/jqtree-circle.png +0 -0
- data/vendor/assets/javascripts/tree.jquery.js +1184 -745
- data/vendor/assets/stylesheets/jqtree.css +95 -90
- metadata +41 -9
- data/vendor/assets/images/treeDownTriangleBlack.png +0 -0
- data/vendor/assets/images/treeRightTriangleBlack.png +0 -0
data/.gitmodules
ADDED
data/Gemfile.lock
CHANGED
@@ -1,62 +1,64 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
|
4
|
+
jqtree-rails (0.1.2)
|
5
5
|
railties (>= 3.2.0, < 5.0)
|
6
6
|
thor (~> 0.14)
|
7
|
+
version (~> 1.0)
|
7
8
|
|
8
9
|
GEM
|
9
10
|
remote: http://rubygems.org/
|
10
11
|
specs:
|
11
|
-
actionpack (3.2.
|
12
|
-
activemodel (= 3.2.
|
13
|
-
activesupport (= 3.2.
|
12
|
+
actionpack (3.2.8)
|
13
|
+
activemodel (= 3.2.8)
|
14
|
+
activesupport (= 3.2.8)
|
14
15
|
builder (~> 3.0.0)
|
15
16
|
erubis (~> 2.7.0)
|
16
|
-
journey (~> 1.0.
|
17
|
+
journey (~> 1.0.4)
|
17
18
|
rack (~> 1.4.0)
|
18
19
|
rack-cache (~> 1.2)
|
19
20
|
rack-test (~> 0.6.1)
|
20
|
-
sprockets (~> 2.1.
|
21
|
-
activemodel (3.2.
|
22
|
-
activesupport (= 3.2.
|
21
|
+
sprockets (~> 2.1.3)
|
22
|
+
activemodel (3.2.8)
|
23
|
+
activesupport (= 3.2.8)
|
23
24
|
builder (~> 3.0.0)
|
24
|
-
activesupport (3.2.
|
25
|
+
activesupport (3.2.8)
|
25
26
|
i18n (~> 0.6)
|
26
27
|
multi_json (~> 1.0)
|
27
|
-
builder (3.0.
|
28
|
+
builder (3.0.3)
|
28
29
|
erubis (2.7.0)
|
29
30
|
hike (1.2.1)
|
30
|
-
i18n (0.6.
|
31
|
-
journey (1.0.
|
32
|
-
json (1.
|
33
|
-
multi_json (1.
|
31
|
+
i18n (0.6.1)
|
32
|
+
journey (1.0.4)
|
33
|
+
json (1.7.5)
|
34
|
+
multi_json (1.3.6)
|
34
35
|
rack (1.4.1)
|
35
36
|
rack-cache (1.2)
|
36
37
|
rack (>= 0.4)
|
37
38
|
rack-ssl (1.3.2)
|
38
39
|
rack
|
39
|
-
rack-test (0.6.
|
40
|
+
rack-test (0.6.2)
|
40
41
|
rack (>= 1.0)
|
41
|
-
railties (3.2.
|
42
|
-
actionpack (= 3.2.
|
43
|
-
activesupport (= 3.2.
|
42
|
+
railties (3.2.8)
|
43
|
+
actionpack (= 3.2.8)
|
44
|
+
activesupport (= 3.2.8)
|
44
45
|
rack-ssl (~> 1.3.2)
|
45
46
|
rake (>= 0.8.7)
|
46
47
|
rdoc (~> 3.4)
|
47
|
-
thor (
|
48
|
+
thor (>= 0.14.6, < 2.0)
|
48
49
|
rake (0.9.2.2)
|
49
50
|
rdoc (3.12)
|
50
51
|
json (~> 1.4)
|
51
|
-
sprockets (2.1.
|
52
|
+
sprockets (2.1.3)
|
52
53
|
hike (~> 1.2)
|
53
54
|
rack (~> 1.0)
|
54
55
|
tilt (~> 1.1, != 1.3.0)
|
55
|
-
thor (0.
|
56
|
+
thor (0.16.0)
|
56
57
|
tilt (1.3.3)
|
58
|
+
version (1.0.0)
|
57
59
|
|
58
60
|
PLATFORMS
|
59
61
|
ruby
|
60
62
|
|
61
63
|
DEPENDENCIES
|
62
|
-
|
64
|
+
jqtree-rails!
|
data/LICENSE
CHANGED
data/README.md
CHANGED
@@ -4,7 +4,7 @@ Adds [jqTree](https://github.com/mbraak/jqTree) to the Rails 3 asset pipeline.
|
|
4
4
|
|
5
5
|
## Installation
|
6
6
|
|
7
|
-
In your Gemfile, add
|
7
|
+
In your Gemfile, add the following lines:
|
8
8
|
|
9
9
|
```ruby
|
10
10
|
gem :assets do
|
@@ -16,7 +16,7 @@ Now run `bundle install`.
|
|
16
16
|
|
17
17
|
### Rails 3.0
|
18
18
|
|
19
|
-
This gem adds a single generator to Rails 3, `
|
19
|
+
This gem adds a single generator to Rails 3, `jq_tree:install`.
|
20
20
|
|
21
21
|
Running the generator will copy over the assets to your assets to your public directory.
|
22
22
|
|
@@ -31,7 +31,7 @@ Simply the following to `app/assets/javascripts/application.js`:
|
|
31
31
|
And the following to `app/assets/stylesheets/application.css`:
|
32
32
|
|
33
33
|
/*
|
34
|
-
|
34
|
+
*= require jqtree
|
35
35
|
*/
|
36
36
|
|
37
37
|
## saveState
|
data/Rakefile
CHANGED
@@ -1,10 +1,18 @@
|
|
1
|
+
require 'bundler/setup'
|
2
|
+
Bundler.require(:development)
|
3
|
+
|
1
4
|
require 'bundler'
|
2
5
|
Bundler::GemHelper.install_tasks
|
3
6
|
|
7
|
+
require 'rake/version_task'
|
8
|
+
Rake::VersionTask.new do |task|
|
9
|
+
task.with_git_tag = true
|
10
|
+
end
|
11
|
+
|
12
|
+
# TODO: This project needs specs! That means we need a whole Rails test project.
|
4
13
|
# require "spec/rake/spectask"
|
5
14
|
# desc "Run all examples"
|
6
15
|
# Spec::Rake::SpecTask.new(:spec) do |t|
|
7
16
|
# t.ruby_opts = ['-r test/unit']
|
8
17
|
# t.spec_opts = %w[--color]
|
9
18
|
# end
|
10
|
-
task :default => :spec
|
data/VERSION
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
0.1.3
|
data/jqtree-rails.gemspec
CHANGED
@@ -5,8 +5,8 @@ Gem::Specification.new do |s|
|
|
5
5
|
s.name = File.basename(__FILE__, '.gemspec')
|
6
6
|
s.version = JqTree::Rails::VERSION
|
7
7
|
s.platform = Gem::Platform::RUBY
|
8
|
-
s.authors = ["Ryan Scott Lewis"]
|
9
|
-
s.email = ["c00lryguy@gmail.com"]
|
8
|
+
s.authors = ["Ryan Scott Lewis", "Mario Uher"] # TODO:
|
9
|
+
s.email = ["c00lryguy@gmail.com", "uher.mario@gmail.com"] # Pull from Git repo (see f.files)
|
10
10
|
s.homepage = "http://rubygems.org/gems/#{s.name}"
|
11
11
|
s.summary = "Use jqTree with Rails 3"
|
12
12
|
s.description = "This gem provides jqTree assets for your Rails 3 application."
|
@@ -14,9 +14,10 @@ Gem::Specification.new do |s|
|
|
14
14
|
s.required_rubygems_version = ">= 1.3.6"
|
15
15
|
|
16
16
|
s.add_dependency "railties", ">= 3.2.0", "< 5.0"
|
17
|
-
s.add_dependency "thor", "~> 0.14"
|
17
|
+
s.add_dependency "thor", "~> 0.14" # TODO: Find out why this is needed
|
18
|
+
s.add_dependency "version", "~> 1.0"
|
18
19
|
|
19
20
|
s.files = `git ls-files`.split("\n")
|
20
|
-
s.executables = `git ls-files -- bin/*`.split("\n").map { |f| File.basename(f) }
|
21
|
-
s.require_path = 'lib'
|
21
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map { |f| File.basename(f) } # TODO: Remove
|
22
|
+
s.require_path = 'lib' # TODO: Pretty sure this is implied, check gemspec specifications
|
22
23
|
end
|
@@ -30,7 +30,7 @@ else
|
|
30
30
|
say_status("deprecated", "You are using Rails 3.1 or the asset pipeline enabled, so this generator is not needed.")
|
31
31
|
say_status("", "The necessary files are already in your asset pipeline.")
|
32
32
|
say_status("", "Just add `//= require tree.jquery` to your app/assets/javascripts/application.js")
|
33
|
-
say_status("", "and add
|
33
|
+
say_status("", "and add `/*= require jqtree */` to your app/assets/stylesheets/application.css")
|
34
34
|
say_status("", "If you do not want the asset pipeline enabled, you may turn it off in application.rb and re-run this generator.")
|
35
35
|
# ok, nothing
|
36
36
|
end
|
data/lib/jqtree/rails/version.rb
CHANGED
Binary file
|
@@ -1,4 +1,4 @@
|
|
1
|
-
// Generated by CoffeeScript 1.3.
|
1
|
+
// Generated by CoffeeScript 1.3.3
|
2
2
|
|
3
3
|
/*
|
4
4
|
Copyright 2012 Marco Braak
|
@@ -18,23 +18,20 @@ limitations under the License.
|
|
18
18
|
|
19
19
|
|
20
20
|
(function() {
|
21
|
-
var $, BorderDropHint, DragElement, FolderElement, GhostDropHint,
|
21
|
+
var $, BorderDropHint, DragAndDropHandler, DragElement, FolderElement, GhostDropHint, JqTreeWidget, MouseWidget, Node, NodeElement, Position, SaveStateHandler, SelectNodeHandler, SimpleWidget, TRIANGLE_DOWN, TRIANGLE_RIGHT, Tree, html_escape, indexOf, json_escapable, json_meta, json_quote, json_str,
|
22
22
|
__slice = [].slice,
|
23
23
|
__hasProp = {}.hasOwnProperty,
|
24
|
-
__extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor; child.__super__ = parent.prototype; return child; };
|
24
|
+
__extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
|
25
25
|
|
26
26
|
$ = this.jQuery;
|
27
27
|
|
28
28
|
SimpleWidget = (function() {
|
29
29
|
|
30
|
-
SimpleWidget.name = 'SimpleWidget';
|
31
|
-
|
32
30
|
SimpleWidget.prototype.defaults = {};
|
33
31
|
|
34
32
|
function SimpleWidget(el, options) {
|
35
33
|
this.$el = $(el);
|
36
34
|
this.options = $.extend({}, this.defaults, options);
|
37
|
-
this._init();
|
38
35
|
}
|
39
36
|
|
40
37
|
SimpleWidget.prototype.destroy = function() {
|
@@ -49,71 +46,74 @@ limitations under the License.
|
|
49
46
|
return null;
|
50
47
|
};
|
51
48
|
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
if (!$.data(this, data_key)) {
|
68
|
-
return $.data(this, data_key, widget);
|
49
|
+
SimpleWidget.register = function(widget_class, widget_name) {
|
50
|
+
var callFunction, createWidget, destroyWidget, getDataKey;
|
51
|
+
getDataKey = function() {
|
52
|
+
return "simple_widget_" + widget_name;
|
53
|
+
};
|
54
|
+
createWidget = function($el, options) {
|
55
|
+
var data_key, el, widget, _i, _len;
|
56
|
+
data_key = getDataKey();
|
57
|
+
for (_i = 0, _len = $el.length; _i < _len; _i++) {
|
58
|
+
el = $el[_i];
|
59
|
+
widget = new widget_class(el, options);
|
60
|
+
if (!$.data(el, data_key)) {
|
61
|
+
$.data(el, data_key, widget);
|
62
|
+
}
|
63
|
+
widget._init();
|
69
64
|
}
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
65
|
+
return $el;
|
66
|
+
};
|
67
|
+
destroyWidget = function($el) {
|
68
|
+
var data_key, el, widget, _i, _len, _results;
|
69
|
+
data_key = getDataKey();
|
70
|
+
_results = [];
|
71
|
+
for (_i = 0, _len = $el.length; _i < _len; _i++) {
|
72
|
+
el = $el[_i];
|
73
|
+
widget = $.data(el, data_key);
|
74
|
+
if (widget && (widget instanceof SimpleWidget)) {
|
75
|
+
widget.destroy();
|
76
|
+
}
|
77
|
+
_results.push($.removeData(el, data_key));
|
81
78
|
}
|
82
|
-
return
|
83
|
-
}
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
79
|
+
return _results;
|
80
|
+
};
|
81
|
+
callFunction = function($el, function_name, args) {
|
82
|
+
var el, result, widget, widget_function, _i, _len;
|
83
|
+
result = null;
|
84
|
+
for (_i = 0, _len = $el.length; _i < _len; _i++) {
|
85
|
+
el = $el[_i];
|
86
|
+
widget = $.data(el, getDataKey());
|
87
|
+
if (widget && (widget instanceof SimpleWidget)) {
|
88
|
+
widget_function = widget[function_name];
|
89
|
+
if (widget_function && (typeof widget_function === 'function')) {
|
90
|
+
result = widget_function.apply(widget, args);
|
91
|
+
}
|
95
92
|
}
|
96
93
|
}
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
94
|
+
return result;
|
95
|
+
};
|
96
|
+
return $.fn[widget_name] = function() {
|
97
|
+
var $el, args, argument1, function_name, options;
|
98
|
+
argument1 = arguments[0], args = 2 <= arguments.length ? __slice.call(arguments, 1) : [];
|
99
|
+
$el = this;
|
100
|
+
if (argument1 === void 0 || typeof argument1 === 'object') {
|
101
|
+
options = argument1;
|
102
|
+
return createWidget($el, options);
|
103
|
+
} else if (typeof argument1 === 'string' && argument1[0] !== '_') {
|
104
|
+
function_name = argument1;
|
105
|
+
if (function_name === 'destroy') {
|
106
|
+
return destroyWidget($el);
|
107
|
+
} else {
|
108
|
+
return callFunction($el, function_name, args);
|
109
|
+
}
|
113
110
|
}
|
114
|
-
}
|
111
|
+
};
|
115
112
|
};
|
116
|
-
|
113
|
+
|
114
|
+
return SimpleWidget;
|
115
|
+
|
116
|
+
})();
|
117
117
|
|
118
118
|
this.SimpleWidget = SimpleWidget;
|
119
119
|
|
@@ -126,8 +126,6 @@ limitations under the License.
|
|
126
126
|
|
127
127
|
__extends(MouseWidget, _super);
|
128
128
|
|
129
|
-
MouseWidget.name = 'MouseWidget';
|
130
|
-
|
131
129
|
function MouseWidget() {
|
132
130
|
return MouseWidget.__super__.constructor.apply(this, arguments);
|
133
131
|
}
|
@@ -135,16 +133,19 @@ limitations under the License.
|
|
135
133
|
MouseWidget.is_mouse_handled = false;
|
136
134
|
|
137
135
|
MouseWidget.prototype._init = function() {
|
138
|
-
this.$el.bind('mousedown', $.proxy(this._mouseDown, this));
|
139
|
-
|
136
|
+
this.$el.bind('mousedown.mousewidget', $.proxy(this._mouseDown, this));
|
137
|
+
this.is_mouse_started = false;
|
138
|
+
this.mouse_delay = 0;
|
139
|
+
this._mouse_delay_timer = null;
|
140
|
+
return this._is_mouse_delay_met = true;
|
140
141
|
};
|
141
142
|
|
142
143
|
MouseWidget.prototype._deinit = function() {
|
143
144
|
var $document;
|
144
|
-
this.$el.unbind('mousedown');
|
145
|
+
this.$el.unbind('mousedown.mousewidget');
|
145
146
|
$document = $(document);
|
146
|
-
$document.unbind('mousemove');
|
147
|
-
return $document.unbind('mouseup');
|
147
|
+
$document.unbind('mousemove.mousewidget');
|
148
|
+
return $document.unbind('mouseup.mousewidget');
|
148
149
|
};
|
149
150
|
|
150
151
|
MouseWidget.prototype._mouseDown = function(e) {
|
@@ -163,18 +164,35 @@ limitations under the License.
|
|
163
164
|
}
|
164
165
|
this.mouse_down_event = e;
|
165
166
|
$document = $(document);
|
166
|
-
$document.bind('mousemove', $.proxy(this._mouseMove, this));
|
167
|
-
$document.bind('mouseup', $.proxy(this._mouseUp, this));
|
167
|
+
$document.bind('mousemove.mousewidget', $.proxy(this._mouseMove, this));
|
168
|
+
$document.bind('mouseup.mousewidget', $.proxy(this._mouseUp, this));
|
169
|
+
if (this.mouse_delay) {
|
170
|
+
this._startMouseDelayTimer();
|
171
|
+
}
|
168
172
|
e.preventDefault();
|
169
173
|
this.is_mouse_handled = true;
|
170
174
|
return true;
|
171
175
|
};
|
172
176
|
|
177
|
+
MouseWidget.prototype._startMouseDelayTimer = function() {
|
178
|
+
var _this = this;
|
179
|
+
if (this._mouse_delay_timer) {
|
180
|
+
clearTimeout(this._mouse_delay_timer);
|
181
|
+
}
|
182
|
+
this._mouse_delay_timer = setTimeout(function() {
|
183
|
+
return _this._is_mouse_delay_met = true;
|
184
|
+
}, this.mouse_delay);
|
185
|
+
return this._is_mouse_delay_met = false;
|
186
|
+
};
|
187
|
+
|
173
188
|
MouseWidget.prototype._mouseMove = function(e) {
|
174
189
|
if (this.is_mouse_started) {
|
175
190
|
this._mouseDrag(e);
|
176
191
|
return e.preventDefault();
|
177
192
|
}
|
193
|
+
if (this.mouse_delay && !this._is_mouse_delay_met) {
|
194
|
+
return true;
|
195
|
+
}
|
178
196
|
this.is_mouse_started = this._mouseStart(this.mouse_down_event) !== false;
|
179
197
|
if (this.is_mouse_started) {
|
180
198
|
this._mouseDrag(e);
|
@@ -187,8 +205,8 @@ limitations under the License.
|
|
187
205
|
MouseWidget.prototype._mouseUp = function(e) {
|
188
206
|
var $document;
|
189
207
|
$document = $(document);
|
190
|
-
$document.unbind('mousemove');
|
191
|
-
$document.unbind('mouseup');
|
208
|
+
$document.unbind('mousemove.mousewidget');
|
209
|
+
$document.unbind('mouseup.mousewidget');
|
192
210
|
if (this.is_mouse_started) {
|
193
211
|
this.is_mouse_started = false;
|
194
212
|
this._mouseStop(e);
|
@@ -254,94 +272,93 @@ limitations under the License.
|
|
254
272
|
|
255
273
|
this.Tree.indexOf = indexOf;
|
256
274
|
|
257
|
-
|
258
|
-
|
259
|
-
|
260
|
-
|
261
|
-
|
262
|
-
|
263
|
-
|
264
|
-
|
265
|
-
|
266
|
-
|
267
|
-
|
268
|
-
|
269
|
-
|
270
|
-
|
271
|
-
|
272
|
-
|
273
|
-
|
274
|
-
|
275
|
-
|
276
|
-
|
277
|
-
return
|
278
|
-
}
|
279
|
-
}
|
280
|
-
|
281
|
-
|
282
|
-
|
283
|
-
|
284
|
-
|
285
|
-
|
286
|
-
|
287
|
-
|
288
|
-
|
289
|
-
|
290
|
-
|
291
|
-
|
292
|
-
|
293
|
-
|
294
|
-
if (isFinite(value)) {
|
275
|
+
if (!((this.JSON != null) && (this.JSON.stringify != null) && typeof this.JSON.stringify === 'function')) {
|
276
|
+
json_escapable = /[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g;
|
277
|
+
json_meta = {
|
278
|
+
'\b': '\\b',
|
279
|
+
'\t': '\\t',
|
280
|
+
'\n': '\\n',
|
281
|
+
'\f': '\\f',
|
282
|
+
'\r': '\\r',
|
283
|
+
'"': '\\"',
|
284
|
+
'\\': '\\\\'
|
285
|
+
};
|
286
|
+
json_quote = function(string) {
|
287
|
+
json_escapable.lastIndex = 0;
|
288
|
+
if (json_escapable.test(string)) {
|
289
|
+
return '"' + string.replace(json_escapable, function(a) {
|
290
|
+
var c;
|
291
|
+
c = json_meta[a];
|
292
|
+
return (typeof c === 'string' ? c : '\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4));
|
293
|
+
}) + '"';
|
294
|
+
} else {
|
295
|
+
return '"' + string + '"';
|
296
|
+
}
|
297
|
+
};
|
298
|
+
json_str = function(key, holder) {
|
299
|
+
var i, k, partial, v, value, _i, _len;
|
300
|
+
value = holder[key];
|
301
|
+
switch (typeof value) {
|
302
|
+
case 'string':
|
303
|
+
return json_quote(value);
|
304
|
+
case 'number':
|
305
|
+
if (isFinite(value)) {
|
306
|
+
return String(value);
|
307
|
+
} else {
|
308
|
+
return 'null';
|
309
|
+
}
|
310
|
+
case 'boolean':
|
311
|
+
case 'null':
|
295
312
|
return String(value);
|
296
|
-
|
297
|
-
|
298
|
-
|
299
|
-
case 'boolean':
|
300
|
-
case 'null':
|
301
|
-
return String(value);
|
302
|
-
case 'object':
|
303
|
-
if (!value) {
|
304
|
-
return 'null';
|
305
|
-
}
|
306
|
-
partial = [];
|
307
|
-
if (Object.prototype.toString.apply(value) === '[object Array]') {
|
308
|
-
for (i = _i = 0, _len = value.length; _i < _len; i = ++_i) {
|
309
|
-
v = value[i];
|
310
|
-
partial[i] = Json.str(i, value) || 'null';
|
313
|
+
case 'object':
|
314
|
+
if (!value) {
|
315
|
+
return 'null';
|
311
316
|
}
|
312
|
-
|
313
|
-
|
314
|
-
|
315
|
-
|
316
|
-
|
317
|
-
if (v) {
|
318
|
-
partial.push(Json.quote(k) + ':' + v);
|
317
|
+
partial = [];
|
318
|
+
if (Object.prototype.toString.apply(value) === '[object Array]') {
|
319
|
+
for (i = _i = 0, _len = value.length; _i < _len; i = ++_i) {
|
320
|
+
v = value[i];
|
321
|
+
partial[i] = json_str(i, value) || 'null';
|
319
322
|
}
|
323
|
+
return (partial.length === 0 ? '[]' : '[' + partial.join(',') + ']');
|
320
324
|
}
|
321
|
-
|
322
|
-
|
325
|
+
for (k in value) {
|
326
|
+
if (Object.prototype.hasOwnProperty.call(value, k)) {
|
327
|
+
v = json_str(k, value);
|
328
|
+
if (v) {
|
329
|
+
partial.push(json_quote(k) + ':' + v);
|
330
|
+
}
|
331
|
+
}
|
332
|
+
}
|
333
|
+
return (partial.length === 0 ? '{}' : '{' + partial.join(',') + '}');
|
334
|
+
}
|
335
|
+
};
|
336
|
+
if (!(this.JSON != null)) {
|
337
|
+
this.JSON = {};
|
323
338
|
}
|
324
|
-
|
339
|
+
this.JSON.stringify = function(value) {
|
340
|
+
return json_str('', {
|
341
|
+
'': value
|
342
|
+
});
|
343
|
+
};
|
344
|
+
}
|
325
345
|
|
326
|
-
|
327
|
-
return
|
328
|
-
'': value
|
329
|
-
});
|
346
|
+
html_escape = function(string) {
|
347
|
+
return ('' + string).replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>').replace(/"/g, '"').replace(/'/g, ''').replace(/\//g, '/');
|
330
348
|
};
|
331
349
|
|
332
|
-
this.Tree.toJson = toJson;
|
333
|
-
|
334
350
|
Position = {
|
335
351
|
getName: function(position) {
|
336
|
-
|
337
|
-
|
338
|
-
|
339
|
-
|
340
|
-
|
341
|
-
|
342
|
-
|
343
|
-
|
352
|
+
return Position.strings[position - 1];
|
353
|
+
},
|
354
|
+
nameToIndex: function(name) {
|
355
|
+
var i, _i, _ref;
|
356
|
+
for (i = _i = 1, _ref = Position.strings.length; 1 <= _ref ? _i <= _ref : _i >= _ref; i = 1 <= _ref ? ++_i : --_i) {
|
357
|
+
if (Position.strings[i - 1] === name) {
|
358
|
+
return i;
|
359
|
+
}
|
344
360
|
}
|
361
|
+
return 0;
|
345
362
|
}
|
346
363
|
};
|
347
364
|
|
@@ -353,49 +370,57 @@ limitations under the License.
|
|
353
370
|
|
354
371
|
Position.NONE = 4;
|
355
372
|
|
373
|
+
Position.strings = ['before', 'after', 'inside', 'none'];
|
374
|
+
|
356
375
|
this.Tree.Position = Position;
|
357
376
|
|
358
377
|
Node = (function() {
|
359
378
|
|
360
|
-
Node
|
361
|
-
|
362
|
-
|
363
|
-
this.
|
379
|
+
function Node(o) {
|
380
|
+
this.setData(o);
|
381
|
+
this.children = [];
|
382
|
+
this.parent = null;
|
364
383
|
}
|
365
384
|
|
366
|
-
Node.prototype.
|
367
|
-
|
368
|
-
|
369
|
-
|
385
|
+
Node.prototype.setData = function(o) {
|
386
|
+
var key, value, _results;
|
387
|
+
if (typeof o !== 'object') {
|
388
|
+
return this.name = o;
|
389
|
+
} else {
|
390
|
+
_results = [];
|
391
|
+
for (key in o) {
|
392
|
+
value = o[key];
|
393
|
+
if (key === 'label') {
|
394
|
+
_results.push(this.name = value);
|
395
|
+
} else {
|
396
|
+
_results.push(this[key] = value);
|
397
|
+
}
|
398
|
+
}
|
399
|
+
return _results;
|
400
|
+
}
|
370
401
|
};
|
371
402
|
|
372
403
|
Node.prototype.initFromData = function(data) {
|
373
404
|
var addChildren, addNode,
|
374
405
|
_this = this;
|
375
406
|
addNode = function(node_data) {
|
376
|
-
|
377
|
-
|
378
|
-
|
379
|
-
|
380
|
-
_this['name'] = value;
|
381
|
-
} else {
|
382
|
-
_this[key] = value;
|
383
|
-
}
|
384
|
-
return true;
|
385
|
-
});
|
407
|
+
_this.setData(node_data);
|
408
|
+
if (node_data.children) {
|
409
|
+
return addChildren(node_data.children);
|
410
|
+
}
|
386
411
|
};
|
387
412
|
addChildren = function(children_data) {
|
388
|
-
var child, node, _i, _len
|
389
|
-
_results = [];
|
413
|
+
var child, node, _i, _len;
|
390
414
|
for (_i = 0, _len = children_data.length; _i < _len; _i++) {
|
391
415
|
child = children_data[_i];
|
392
|
-
node = new Node();
|
416
|
+
node = new Node('');
|
393
417
|
node.initFromData(child);
|
394
|
-
|
418
|
+
_this.addChild(node);
|
395
419
|
}
|
396
|
-
return
|
420
|
+
return null;
|
397
421
|
};
|
398
|
-
|
422
|
+
addNode(data);
|
423
|
+
return null;
|
399
424
|
};
|
400
425
|
|
401
426
|
/*
|
@@ -418,27 +443,17 @@ limitations under the License.
|
|
418
443
|
|
419
444
|
|
420
445
|
Node.prototype.loadFromData = function(data) {
|
421
|
-
var node, o, _i, _len
|
422
|
-
_this = this;
|
446
|
+
var node, o, _i, _len;
|
423
447
|
this.children = [];
|
424
|
-
_results = [];
|
425
448
|
for (_i = 0, _len = data.length; _i < _len; _i++) {
|
426
449
|
o = data[_i];
|
427
|
-
node = new Node(o
|
428
|
-
$.each(o, function(key, value) {
|
429
|
-
if (key !== 'label') {
|
430
|
-
node[key] = value;
|
431
|
-
}
|
432
|
-
return true;
|
433
|
-
});
|
450
|
+
node = new Node(o);
|
434
451
|
this.addChild(node);
|
435
|
-
if (o.children) {
|
436
|
-
|
437
|
-
} else {
|
438
|
-
_results.push(void 0);
|
452
|
+
if (typeof o === 'object' && o.children) {
|
453
|
+
node.loadFromData(o.children);
|
439
454
|
}
|
440
455
|
}
|
441
|
-
return
|
456
|
+
return null;
|
442
457
|
};
|
443
458
|
|
444
459
|
/*
|
@@ -452,7 +467,7 @@ limitations under the License.
|
|
452
467
|
|
453
468
|
Node.prototype.addChild = function(node) {
|
454
469
|
this.children.push(node);
|
455
|
-
return node.
|
470
|
+
return node._setParent(this);
|
456
471
|
};
|
457
472
|
|
458
473
|
/*
|
@@ -467,18 +482,25 @@ limitations under the License.
|
|
467
482
|
|
468
483
|
Node.prototype.addChildAtPosition = function(node, index) {
|
469
484
|
this.children.splice(index, 0, node);
|
470
|
-
return node.
|
485
|
+
return node._setParent(this);
|
486
|
+
};
|
487
|
+
|
488
|
+
Node.prototype._setParent = function(parent) {
|
489
|
+
this.parent = parent;
|
490
|
+
this.tree = parent.tree;
|
491
|
+
return this.tree.addNodeToIndex(this);
|
471
492
|
};
|
472
493
|
|
473
494
|
/*
|
474
495
|
Remove child.
|
475
496
|
|
476
|
-
tree.
|
497
|
+
tree.removeChild(tree.children[0]);
|
477
498
|
*/
|
478
499
|
|
479
500
|
|
480
501
|
Node.prototype.removeChild = function(node) {
|
481
|
-
|
502
|
+
this.children.splice(this.getChildIndex(node), 1);
|
503
|
+
return this.tree.removeNodeFromIndex(node);
|
482
504
|
};
|
483
505
|
|
484
506
|
/*
|
@@ -505,6 +527,10 @@ limitations under the License.
|
|
505
527
|
return this.children.length !== 0;
|
506
528
|
};
|
507
529
|
|
530
|
+
Node.prototype.isFolder = function() {
|
531
|
+
return this.hasChildren() || this.load_on_demand;
|
532
|
+
};
|
533
|
+
|
508
534
|
/*
|
509
535
|
Iterate over all the nodes in the tree.
|
510
536
|
|
@@ -526,22 +552,22 @@ limitations under the License.
|
|
526
552
|
Node.prototype.iterate = function(callback) {
|
527
553
|
var _iterate,
|
528
554
|
_this = this;
|
529
|
-
_iterate = function(level) {
|
530
|
-
var child, result, _i, _len, _ref
|
531
|
-
|
532
|
-
|
533
|
-
|
534
|
-
|
535
|
-
|
536
|
-
|
537
|
-
|
538
|
-
|
539
|
-
_results.push(void 0);
|
555
|
+
_iterate = function(node, level) {
|
556
|
+
var child, result, _i, _len, _ref;
|
557
|
+
if (node.children) {
|
558
|
+
_ref = node.children;
|
559
|
+
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
|
560
|
+
child = _ref[_i];
|
561
|
+
result = callback(child, level);
|
562
|
+
if (_this.hasChildren() && result) {
|
563
|
+
_iterate(child, level + 1);
|
564
|
+
}
|
540
565
|
}
|
566
|
+
return null;
|
541
567
|
}
|
542
|
-
return _results;
|
543
568
|
};
|
544
|
-
|
569
|
+
_iterate(this, 0);
|
570
|
+
return null;
|
545
571
|
};
|
546
572
|
|
547
573
|
/*
|
@@ -555,6 +581,9 @@ limitations under the License.
|
|
555
581
|
|
556
582
|
|
557
583
|
Node.prototype.moveNode = function(moved_node, target_node, position) {
|
584
|
+
if (moved_node.isParentOf(target_node)) {
|
585
|
+
return;
|
586
|
+
}
|
558
587
|
moved_node.parent.removeChild(moved_node);
|
559
588
|
if (position === Position.AFTER) {
|
560
589
|
return target_node.parent.addChildAtPosition(moved_node, target_node.parent.getChildIndex(target_node) + 1);
|
@@ -581,7 +610,7 @@ limitations under the License.
|
|
581
610
|
tmp_node = {};
|
582
611
|
for (k in node) {
|
583
612
|
v = node[k];
|
584
|
-
if ((k !== 'parent' && k !== 'children' && k !== 'element') && Object.prototype.hasOwnProperty.call(node, k)) {
|
613
|
+
if ((k !== 'parent' && k !== 'children' && k !== 'element' && k !== 'tree') && Object.prototype.hasOwnProperty.call(node, k)) {
|
585
614
|
tmp_node[k] = v;
|
586
615
|
}
|
587
616
|
}
|
@@ -595,23 +624,144 @@ limitations under the License.
|
|
595
624
|
return getDataFromNodes(this.children);
|
596
625
|
};
|
597
626
|
|
627
|
+
Node.prototype.getNodeByName = function(name) {
|
628
|
+
var result;
|
629
|
+
result = null;
|
630
|
+
this.iterate(function(node) {
|
631
|
+
if (node.name === name) {
|
632
|
+
result = node;
|
633
|
+
return false;
|
634
|
+
} else {
|
635
|
+
return true;
|
636
|
+
}
|
637
|
+
});
|
638
|
+
return result;
|
639
|
+
};
|
640
|
+
|
641
|
+
Node.prototype.addAfter = function(node_info) {
|
642
|
+
var child_index, node;
|
643
|
+
if (!this.parent) {
|
644
|
+
return null;
|
645
|
+
} else {
|
646
|
+
node = new Node(node_info);
|
647
|
+
child_index = this.parent.getChildIndex(this);
|
648
|
+
this.parent.addChildAtPosition(node, child_index + 1);
|
649
|
+
return node;
|
650
|
+
}
|
651
|
+
};
|
652
|
+
|
653
|
+
Node.prototype.addBefore = function(node_info) {
|
654
|
+
var child_index, node;
|
655
|
+
if (!this.parent) {
|
656
|
+
return null;
|
657
|
+
} else {
|
658
|
+
node = new Node(node_info);
|
659
|
+
child_index = this.parent.getChildIndex(this);
|
660
|
+
return this.parent.addChildAtPosition(node, child_index);
|
661
|
+
}
|
662
|
+
};
|
663
|
+
|
664
|
+
Node.prototype.addParent = function(node_info) {
|
665
|
+
var child, new_parent, original_parent, _i, _len, _ref;
|
666
|
+
if (!this.parent) {
|
667
|
+
return null;
|
668
|
+
} else {
|
669
|
+
new_parent = new Node(node_info);
|
670
|
+
new_parent._setParent(this.tree);
|
671
|
+
original_parent = this.parent;
|
672
|
+
_ref = original_parent.children;
|
673
|
+
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
|
674
|
+
child = _ref[_i];
|
675
|
+
new_parent.addChild(child);
|
676
|
+
}
|
677
|
+
original_parent.children = [];
|
678
|
+
original_parent.addChild(new_parent);
|
679
|
+
return new_parent;
|
680
|
+
}
|
681
|
+
};
|
682
|
+
|
683
|
+
Node.prototype.remove = function() {
|
684
|
+
if (this.parent) {
|
685
|
+
this.parent.removeChild(this);
|
686
|
+
return this.parent = null;
|
687
|
+
}
|
688
|
+
};
|
689
|
+
|
690
|
+
Node.prototype.append = function(node_info) {
|
691
|
+
var node;
|
692
|
+
node = new Node(node_info);
|
693
|
+
this.addChild(node);
|
694
|
+
return node;
|
695
|
+
};
|
696
|
+
|
697
|
+
Node.prototype.prepend = function(node_info) {
|
698
|
+
var node;
|
699
|
+
node = new Node(node_info);
|
700
|
+
this.addChildAtPosition(node, 0);
|
701
|
+
return node;
|
702
|
+
};
|
703
|
+
|
704
|
+
Node.prototype.isParentOf = function(node) {
|
705
|
+
var parent;
|
706
|
+
parent = node.parent;
|
707
|
+
while (parent) {
|
708
|
+
if (parent === this) {
|
709
|
+
return true;
|
710
|
+
}
|
711
|
+
parent = parent.parent;
|
712
|
+
}
|
713
|
+
return false;
|
714
|
+
};
|
715
|
+
|
598
716
|
return Node;
|
599
717
|
|
600
718
|
})();
|
601
719
|
|
602
|
-
|
720
|
+
Tree = (function(_super) {
|
721
|
+
|
722
|
+
__extends(Tree, _super);
|
723
|
+
|
724
|
+
function Tree(o) {
|
725
|
+
Tree.__super__.constructor.call(this, o, null, true);
|
726
|
+
this.id_mapping = {};
|
727
|
+
this.tree = this;
|
728
|
+
}
|
729
|
+
|
730
|
+
Tree.prototype.getNodeById = function(node_id) {
|
731
|
+
return this.id_mapping[node_id];
|
732
|
+
};
|
733
|
+
|
734
|
+
Tree.prototype.addNodeToIndex = function(node) {
|
735
|
+
if (node.id) {
|
736
|
+
return this.id_mapping[node.id] = node;
|
737
|
+
}
|
738
|
+
};
|
739
|
+
|
740
|
+
Tree.prototype.removeNodeFromIndex = function(node) {
|
741
|
+
if (node.id) {
|
742
|
+
return delete this.id_mapping[node.id];
|
743
|
+
}
|
744
|
+
};
|
745
|
+
|
746
|
+
return Tree;
|
603
747
|
|
604
|
-
|
748
|
+
})(Node);
|
605
749
|
|
606
|
-
|
750
|
+
this.Tree.Tree = Tree;
|
607
751
|
|
608
|
-
|
752
|
+
TRIANGLE_RIGHT = '►';
|
609
753
|
|
610
|
-
|
611
|
-
|
754
|
+
TRIANGLE_DOWN = '▼';
|
755
|
+
|
756
|
+
JqTreeWidget = (function(_super) {
|
757
|
+
|
758
|
+
__extends(JqTreeWidget, _super);
|
759
|
+
|
760
|
+
function JqTreeWidget() {
|
761
|
+
return JqTreeWidget.__super__.constructor.apply(this, arguments);
|
612
762
|
}
|
613
763
|
|
614
|
-
|
764
|
+
JqTreeWidget.prototype.defaults = {
|
615
765
|
autoOpen: false,
|
616
766
|
saveState: false,
|
617
767
|
dragAndDrop: false,
|
@@ -622,141 +772,289 @@ limitations under the License.
|
|
622
772
|
onCreateLi: null,
|
623
773
|
onIsMoveHandle: null,
|
624
774
|
onCanMove: null,
|
625
|
-
onCanMoveTo: null
|
775
|
+
onCanMoveTo: null,
|
776
|
+
autoEscape: true,
|
777
|
+
dataUrl: null
|
626
778
|
};
|
627
779
|
|
628
|
-
|
629
|
-
if (node.
|
630
|
-
|
631
|
-
}
|
632
|
-
|
633
|
-
return this._saveState();
|
780
|
+
JqTreeWidget.prototype.toggle = function(node) {
|
781
|
+
if (node.is_open) {
|
782
|
+
return this.closeNode(node);
|
783
|
+
} else {
|
784
|
+
return this.openNode(node);
|
634
785
|
}
|
635
786
|
};
|
636
787
|
|
637
|
-
|
788
|
+
JqTreeWidget.prototype.getTree = function() {
|
638
789
|
return this.tree;
|
639
790
|
};
|
640
791
|
|
641
|
-
|
642
|
-
|
643
|
-
if (this.options.selectable) {
|
644
|
-
if (this.selected_node) {
|
645
|
-
this._getNodeElementForNode(this.selected_node).deselect();
|
646
|
-
}
|
647
|
-
this._getNodeElementForNode(node).select();
|
648
|
-
this.selected_node = node;
|
649
|
-
if (must_open_parents) {
|
650
|
-
parent = this.selected_node.parent;
|
651
|
-
while (parent) {
|
652
|
-
if (!parent.is_open) {
|
653
|
-
this.openNode(parent, null, true);
|
654
|
-
}
|
655
|
-
parent = parent.parent;
|
656
|
-
}
|
657
|
-
}
|
658
|
-
if (this.options.saveState) {
|
659
|
-
return this._saveState();
|
660
|
-
}
|
661
|
-
}
|
792
|
+
JqTreeWidget.prototype.selectNode = function(node, must_open_parents) {
|
793
|
+
return this.select_node_handler.selectNode(node, must_open_parents);
|
662
794
|
};
|
663
795
|
|
664
|
-
|
796
|
+
JqTreeWidget.prototype.getSelectedNode = function() {
|
665
797
|
return this.selected_node || false;
|
666
798
|
};
|
667
799
|
|
668
|
-
|
669
|
-
return
|
800
|
+
JqTreeWidget.prototype.toJson = function() {
|
801
|
+
return JSON.stringify(this.tree.getData());
|
802
|
+
};
|
803
|
+
|
804
|
+
JqTreeWidget.prototype.loadData = function(data_or_url, parent_node, on_finished) {
|
805
|
+
var data, data_url;
|
806
|
+
if (typeof data_or_url === 'string') {
|
807
|
+
data_url = data_or_url;
|
808
|
+
return this._loadDataFromServer(data_url, parent_node, on_finished);
|
809
|
+
} else {
|
810
|
+
data = data_or_url;
|
811
|
+
this._loadData(data, parent_node);
|
812
|
+
if (on_finished) {
|
813
|
+
return on_finished();
|
814
|
+
}
|
815
|
+
}
|
670
816
|
};
|
671
817
|
|
672
|
-
|
673
|
-
var
|
818
|
+
JqTreeWidget.prototype._loadData = function(data, parent_node) {
|
819
|
+
var child, subtree, _i, _len, _ref;
|
820
|
+
this._triggerEvent('tree.load_data', {
|
821
|
+
tree_data: data
|
822
|
+
});
|
674
823
|
if (!parent_node) {
|
675
|
-
|
824
|
+
this._initTree(data);
|
676
825
|
} else {
|
677
|
-
subtree = new Node();
|
826
|
+
subtree = new Node('');
|
827
|
+
subtree._setParent(parent_node.tree);
|
678
828
|
subtree.loadFromData(data);
|
679
829
|
_ref = subtree.children;
|
680
830
|
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
|
681
831
|
child = _ref[_i];
|
682
832
|
parent_node.addChild(child);
|
683
833
|
}
|
684
|
-
|
685
|
-
|
686
|
-
|
687
|
-
|
688
|
-
if (!$div.find('.toggler').length) {
|
689
|
-
return $div.prepend('<a class="toggler">»</a>');
|
690
|
-
}
|
834
|
+
this._refreshElements(parent_node.parent);
|
835
|
+
}
|
836
|
+
if (this.is_dragging) {
|
837
|
+
return this.dnd_handler.refreshHitAreas();
|
691
838
|
}
|
692
839
|
};
|
693
840
|
|
694
|
-
|
695
|
-
var
|
696
|
-
|
697
|
-
|
698
|
-
|
699
|
-
|
700
|
-
|
841
|
+
JqTreeWidget.prototype._loadDataFromServer = function(data_url, parent_node, on_finished) {
|
842
|
+
var $li, folder_element,
|
843
|
+
_this = this;
|
844
|
+
if (!data_url) {
|
845
|
+
return;
|
846
|
+
}
|
847
|
+
if (parent_node) {
|
848
|
+
folder_element = new FolderElement(parent_node, this);
|
849
|
+
$li = folder_element.getLi();
|
850
|
+
$li.addClass('jqtree-loading');
|
851
|
+
} else {
|
852
|
+
$li = null;
|
853
|
+
}
|
854
|
+
return $.ajax({
|
855
|
+
url: data_url,
|
856
|
+
cache: false,
|
857
|
+
success: function(response) {
|
858
|
+
var data;
|
859
|
+
if ($.isArray(response) || typeof response === 'object') {
|
860
|
+
data = response;
|
861
|
+
} else {
|
862
|
+
data = $.parseJSON(response);
|
863
|
+
}
|
864
|
+
if ($li) {
|
865
|
+
$li.removeClass('loading');
|
866
|
+
}
|
867
|
+
_this._loadData(data, parent_node);
|
868
|
+
if (on_finished) {
|
869
|
+
return on_finished();
|
870
|
+
}
|
871
|
+
}
|
872
|
+
});
|
873
|
+
};
|
874
|
+
|
875
|
+
JqTreeWidget.prototype.getNodeById = function(node_id) {
|
876
|
+
return this.tree.getNodeById(node_id);
|
877
|
+
};
|
878
|
+
|
879
|
+
JqTreeWidget.prototype.getNodeByName = function(name) {
|
880
|
+
return this.tree.getNodeByName(name);
|
881
|
+
};
|
882
|
+
|
883
|
+
JqTreeWidget.prototype.openNode = function(node, skip_slide) {
|
884
|
+
return this._openNode(node, skip_slide);
|
885
|
+
};
|
886
|
+
|
887
|
+
JqTreeWidget.prototype._openNode = function(node, skip_slide, on_finished) {
|
888
|
+
var folder_element;
|
889
|
+
if (node.isFolder()) {
|
890
|
+
if (node.load_on_demand) {
|
891
|
+
return this._loadFolderOnDemand(node, skip_slide, on_finished);
|
701
892
|
} else {
|
702
|
-
|
893
|
+
folder_element = new FolderElement(node, this);
|
894
|
+
folder_element.open(on_finished, skip_slide);
|
895
|
+
return this._saveState();
|
703
896
|
}
|
897
|
+
}
|
898
|
+
};
|
899
|
+
|
900
|
+
JqTreeWidget.prototype._loadFolderOnDemand = function(node, skip_slide, on_finished) {
|
901
|
+
var _this = this;
|
902
|
+
node.load_on_demand = false;
|
903
|
+
return this.loadData(this._getDataUrl(node), node, function() {
|
904
|
+
return _this._openNode(node, skip_slide, on_finished);
|
704
905
|
});
|
705
|
-
return result;
|
706
906
|
};
|
707
907
|
|
708
|
-
|
709
|
-
if (node.
|
710
|
-
|
908
|
+
JqTreeWidget.prototype.closeNode = function(node, skip_slide) {
|
909
|
+
if (node.isFolder()) {
|
910
|
+
new FolderElement(node, this).close(skip_slide);
|
911
|
+
return this._saveState();
|
711
912
|
}
|
712
913
|
};
|
713
914
|
|
714
|
-
|
715
|
-
|
716
|
-
this.element = this.$el;
|
717
|
-
this._initTree(this.options.data);
|
718
|
-
this.element.click($.proxy(this._click, this));
|
719
|
-
this.element.bind('contextmenu', $.proxy(this._contextmenu, this));
|
720
|
-
this.hovered_area = null;
|
721
|
-
this.$ghost = null;
|
722
|
-
return this.hit_areas = [];
|
915
|
+
JqTreeWidget.prototype.isDragging = function() {
|
916
|
+
return this.is_dragging;
|
723
917
|
};
|
724
918
|
|
725
|
-
|
726
|
-
this.
|
727
|
-
this.element.unbind();
|
728
|
-
this.tree = null;
|
729
|
-
return JqueryWidget.__super__._deinit.apply(this, arguments);
|
919
|
+
JqTreeWidget.prototype.refreshHitAreas = function() {
|
920
|
+
return this.dnd_handler.refreshHitAreas();
|
730
921
|
};
|
731
922
|
|
732
|
-
|
733
|
-
var
|
734
|
-
|
735
|
-
this.
|
736
|
-
|
737
|
-
|
738
|
-
|
739
|
-
|
740
|
-
|
741
|
-
|
742
|
-
|
743
|
-
|
923
|
+
JqTreeWidget.prototype.addNodeAfter = function(new_node_info, existing_node) {
|
924
|
+
var new_node;
|
925
|
+
new_node = existing_node.addAfter(new_node_info);
|
926
|
+
this._refreshElements(existing_node.parent);
|
927
|
+
return new_node;
|
928
|
+
};
|
929
|
+
|
930
|
+
JqTreeWidget.prototype.addNodeBefore = function(new_node_info, existing_node) {
|
931
|
+
var new_node;
|
932
|
+
new_node = existing_node.addBefore(new_node_info);
|
933
|
+
this._refreshElements(existing_node.parent);
|
934
|
+
return new_node;
|
935
|
+
};
|
936
|
+
|
937
|
+
JqTreeWidget.prototype.addParentNode = function(new_node_info, existing_node) {
|
938
|
+
var new_node;
|
939
|
+
new_node = existing_node.addParent(new_node_info);
|
940
|
+
this._refreshElements(new_node.parent);
|
941
|
+
return new_node;
|
942
|
+
};
|
943
|
+
|
944
|
+
JqTreeWidget.prototype.removeNode = function(node) {
|
945
|
+
var parent;
|
946
|
+
parent = node.parent;
|
947
|
+
if (parent) {
|
948
|
+
node.remove();
|
949
|
+
return this._refreshElements(parent.parent);
|
744
950
|
}
|
745
951
|
};
|
746
952
|
|
747
|
-
|
748
|
-
var
|
749
|
-
if (
|
750
|
-
|
751
|
-
return;
|
752
|
-
}
|
953
|
+
JqTreeWidget.prototype.appendNode = function(new_node_info, parent_node) {
|
954
|
+
var is_already_root_node, node;
|
955
|
+
if (!parent_node) {
|
956
|
+
parent_node = this.tree;
|
753
957
|
}
|
754
|
-
|
755
|
-
|
756
|
-
|
757
|
-
|
958
|
+
is_already_root_node = parent_node.isFolder();
|
959
|
+
node = parent_node.append(new_node_info);
|
960
|
+
if (is_already_root_node) {
|
961
|
+
this._refreshElements(parent_node);
|
758
962
|
} else {
|
759
|
-
|
963
|
+
this._refreshElements(parent_node.parent);
|
964
|
+
}
|
965
|
+
return node;
|
966
|
+
};
|
967
|
+
|
968
|
+
JqTreeWidget.prototype.prependNode = function(new_node_info, parent_node) {
|
969
|
+
var node;
|
970
|
+
if (!parent_node) {
|
971
|
+
parent_node = this.tree;
|
972
|
+
}
|
973
|
+
node = parent_node.prepend(new_node_info);
|
974
|
+
this._refreshElements(parent_node);
|
975
|
+
return node;
|
976
|
+
};
|
977
|
+
|
978
|
+
JqTreeWidget.prototype.updateNode = function(node, data) {
|
979
|
+
node.setData(data);
|
980
|
+
this._refreshElements(node.parent);
|
981
|
+
return this.select_node_handler.selectCurrentNode();
|
982
|
+
};
|
983
|
+
|
984
|
+
JqTreeWidget.prototype.moveNode = function(node, target_node, position) {
|
985
|
+
var position_index;
|
986
|
+
position_index = Position.nameToIndex(position);
|
987
|
+
this.tree.moveNode(node, target_node, position_index);
|
988
|
+
return this._refreshElements();
|
989
|
+
};
|
990
|
+
|
991
|
+
JqTreeWidget.prototype.getStateFromStorage = function() {
|
992
|
+
return this.save_state_handler.getStateFromStorage();
|
993
|
+
};
|
994
|
+
|
995
|
+
JqTreeWidget.prototype._init = function() {
|
996
|
+
JqTreeWidget.__super__._init.call(this);
|
997
|
+
this.element = this.$el;
|
998
|
+
this.selected_node = null;
|
999
|
+
this.mouse_delay = 300;
|
1000
|
+
this.save_state_handler = new SaveStateHandler(this);
|
1001
|
+
this.select_node_handler = new SelectNodeHandler(this);
|
1002
|
+
this.dnd_handler = new DragAndDropHandler(this);
|
1003
|
+
this._initData();
|
1004
|
+
this.element.click($.proxy(this._click, this));
|
1005
|
+
return this.element.bind('contextmenu', $.proxy(this._contextmenu, this));
|
1006
|
+
};
|
1007
|
+
|
1008
|
+
JqTreeWidget.prototype._deinit = function() {
|
1009
|
+
this.element.empty();
|
1010
|
+
this.element.unbind();
|
1011
|
+
this.tree = null;
|
1012
|
+
return JqTreeWidget.__super__._deinit.call(this);
|
1013
|
+
};
|
1014
|
+
|
1015
|
+
JqTreeWidget.prototype._initData = function() {
|
1016
|
+
if (this.options.data) {
|
1017
|
+
return this.loadData(this.options.data);
|
1018
|
+
} else {
|
1019
|
+
return this.loadData(this._getDataUrl());
|
1020
|
+
}
|
1021
|
+
};
|
1022
|
+
|
1023
|
+
JqTreeWidget.prototype._getDataUrl = function(node) {
|
1024
|
+
var data_url;
|
1025
|
+
data_url = this.options.dataUrl || this.element.data('url');
|
1026
|
+
if ($.isFunction(data_url)) {
|
1027
|
+
return data_url(node);
|
1028
|
+
} else {
|
1029
|
+
if (node) {
|
1030
|
+
data_url += "?node=" + node.id;
|
1031
|
+
}
|
1032
|
+
return data_url;
|
1033
|
+
}
|
1034
|
+
};
|
1035
|
+
|
1036
|
+
JqTreeWidget.prototype._initTree = function(data) {
|
1037
|
+
this.tree = new Tree();
|
1038
|
+
this.tree.loadFromData(data);
|
1039
|
+
this._openNodes();
|
1040
|
+
this._refreshElements();
|
1041
|
+
this.select_node_handler.selectCurrentNode();
|
1042
|
+
return this._triggerEvent('tree.init');
|
1043
|
+
};
|
1044
|
+
|
1045
|
+
JqTreeWidget.prototype._openNodes = function() {
|
1046
|
+
var max_level;
|
1047
|
+
if (this.options.saveState) {
|
1048
|
+
if (this.save_state_handler.restoreState()) {
|
1049
|
+
return;
|
1050
|
+
}
|
1051
|
+
}
|
1052
|
+
if (this.options.autoOpen === false) {
|
1053
|
+
return;
|
1054
|
+
} else if (this.options.autoOpen === true) {
|
1055
|
+
max_level = -1;
|
1056
|
+
} else {
|
1057
|
+
max_level = parseInt(this.options.autoOpen);
|
760
1058
|
}
|
761
1059
|
return this.tree.iterate(function(node, level) {
|
762
1060
|
node.is_open = true;
|
@@ -764,21 +1062,31 @@ limitations under the License.
|
|
764
1062
|
});
|
765
1063
|
};
|
766
1064
|
|
767
|
-
|
768
|
-
var createFolderLi, createLi, createNodeLi, createUl,
|
1065
|
+
JqTreeWidget.prototype._refreshElements = function(from_node) {
|
1066
|
+
var $element, createFolderLi, createLi, createNodeLi, createUl, doCreateDomElements, escapeIfNecessary, is_root_node, node_element,
|
769
1067
|
_this = this;
|
770
|
-
|
1068
|
+
if (from_node == null) {
|
1069
|
+
from_node = null;
|
1070
|
+
}
|
1071
|
+
escapeIfNecessary = function(value) {
|
1072
|
+
if (_this.options.autoEscape) {
|
1073
|
+
return html_escape(value);
|
1074
|
+
} else {
|
1075
|
+
return value;
|
1076
|
+
}
|
1077
|
+
};
|
1078
|
+
createUl = function(is_root_node) {
|
771
1079
|
var class_string;
|
772
|
-
if (
|
773
|
-
class_string = '';
|
1080
|
+
if (is_root_node) {
|
1081
|
+
class_string = ' class="jqtree-tree"';
|
774
1082
|
} else {
|
775
|
-
class_string = '
|
1083
|
+
class_string = '';
|
776
1084
|
}
|
777
1085
|
return $("<ul" + class_string + "></ul>");
|
778
1086
|
};
|
779
1087
|
createLi = function(node) {
|
780
1088
|
var $li;
|
781
|
-
if (node.
|
1089
|
+
if (node.isFolder()) {
|
782
1090
|
$li = createFolderLi(node);
|
783
1091
|
} else {
|
784
1092
|
$li = createNodeLi(node);
|
@@ -789,35 +1097,42 @@ limitations under the License.
|
|
789
1097
|
return $li;
|
790
1098
|
};
|
791
1099
|
createNodeLi = function(node) {
|
792
|
-
|
1100
|
+
var escaped_name;
|
1101
|
+
escaped_name = escapeIfNecessary(node.name);
|
1102
|
+
return $("<li><div><span class=\"jqtree-title\">" + escaped_name + "</span></div></li>");
|
793
1103
|
};
|
794
1104
|
createFolderLi = function(node) {
|
795
|
-
var
|
796
|
-
|
1105
|
+
var button_char, button_classes, escaped_name, folder_classes, getButtonClasses, getFolderClasses;
|
1106
|
+
getButtonClasses = function() {
|
797
1107
|
var classes;
|
798
|
-
classes = ['toggler'];
|
1108
|
+
classes = ['jqtree-toggler'];
|
799
1109
|
if (!node.is_open) {
|
800
|
-
classes.push('closed');
|
1110
|
+
classes.push('jqtree-closed');
|
801
1111
|
}
|
802
1112
|
return classes.join(' ');
|
803
1113
|
};
|
804
|
-
|
1114
|
+
getFolderClasses = function() {
|
805
1115
|
var classes;
|
806
|
-
classes = ['folder'];
|
1116
|
+
classes = ['jqtree-folder'];
|
807
1117
|
if (!node.is_open) {
|
808
|
-
classes.push('closed');
|
1118
|
+
classes.push('jqtree-closed');
|
809
1119
|
}
|
810
1120
|
return classes.join(' ');
|
811
1121
|
};
|
812
|
-
|
813
|
-
|
814
|
-
|
1122
|
+
button_classes = getButtonClasses();
|
1123
|
+
folder_classes = getFolderClasses();
|
1124
|
+
escaped_name = escapeIfNecessary(node.name);
|
1125
|
+
if (node.is_open) {
|
1126
|
+
button_char = TRIANGLE_DOWN;
|
1127
|
+
} else {
|
1128
|
+
button_char = TRIANGLE_RIGHT;
|
1129
|
+
}
|
1130
|
+
return $("<li class=\"" + folder_classes + "\"><div><a class=\"" + button_classes + "\">" + button_char + "</a><span class=\"jqtree-title\">" + escaped_name + "</span></div></li>");
|
815
1131
|
};
|
816
|
-
doCreateDomElements = function($element, children,
|
817
|
-
var $li, $ul, child, _i, _len
|
818
|
-
$ul = createUl(
|
1132
|
+
doCreateDomElements = function($element, children, is_root_node, is_open) {
|
1133
|
+
var $li, $ul, child, _i, _len;
|
1134
|
+
$ul = createUl(is_root_node);
|
819
1135
|
$element.append($ul);
|
820
|
-
_results = [];
|
821
1136
|
for (_i = 0, _len = children.length; _i < _len; _i++) {
|
822
1137
|
child = children[_i];
|
823
1138
|
$li = createLi(child);
|
@@ -825,65 +1140,51 @@ limitations under the License.
|
|
825
1140
|
child.element = $li[0];
|
826
1141
|
$li.data('node', child);
|
827
1142
|
if (child.hasChildren()) {
|
828
|
-
|
829
|
-
} else {
|
830
|
-
_results.push(void 0);
|
1143
|
+
doCreateDomElements($li, child.children, false, child.is_open);
|
831
1144
|
}
|
832
1145
|
}
|
833
|
-
return
|
1146
|
+
return null;
|
834
1147
|
};
|
835
|
-
if (
|
836
|
-
|
1148
|
+
if (from_node && from_node.parent) {
|
1149
|
+
is_root_node = false;
|
1150
|
+
node_element = this._getNodeElementForNode(from_node);
|
1151
|
+
node_element.getUl().remove();
|
1152
|
+
$element = node_element.$element;
|
837
1153
|
} else {
|
1154
|
+
from_node = this.tree;
|
838
1155
|
$element = this.element;
|
839
1156
|
$element.empty();
|
840
|
-
|
1157
|
+
is_root_node = true;
|
841
1158
|
}
|
842
|
-
|
1159
|
+
doCreateDomElements($element, from_node.children, is_root_node, is_root_node);
|
1160
|
+
return this._triggerEvent('tree.refresh');
|
843
1161
|
};
|
844
1162
|
|
845
|
-
|
846
|
-
var $target,
|
847
|
-
_this = this;
|
1163
|
+
JqTreeWidget.prototype._click = function(e) {
|
1164
|
+
var $target, node;
|
848
1165
|
if (e.ctrlKey) {
|
849
1166
|
return;
|
850
1167
|
}
|
851
1168
|
$target = $(e.target);
|
852
|
-
if ($target.is('.toggler')) {
|
853
|
-
|
854
|
-
if (
|
855
|
-
|
856
|
-
var event, event_name, node;
|
857
|
-
node = node_element.node;
|
858
|
-
if (node.is_open) {
|
859
|
-
event_name = 'tree.open';
|
860
|
-
} else {
|
861
|
-
event_name = 'tree.close';
|
862
|
-
}
|
863
|
-
event = $.Event(event_name);
|
864
|
-
event.node = node;
|
865
|
-
return _this.element.trigger(event);
|
866
|
-
});
|
867
|
-
if (this.options.saveState) {
|
868
|
-
this._saveState();
|
869
|
-
}
|
1169
|
+
if ($target.is('.jqtree-toggler')) {
|
1170
|
+
node = this._getNode($target);
|
1171
|
+
if (node) {
|
1172
|
+
this.toggle(node);
|
870
1173
|
e.preventDefault();
|
871
1174
|
return e.stopPropagation();
|
872
1175
|
}
|
873
1176
|
} else if ($target.is('div') || $target.is('span')) {
|
874
1177
|
node = this._getNode($target);
|
875
1178
|
if (node) {
|
876
|
-
|
877
|
-
|
878
|
-
|
879
|
-
|
880
|
-
return this.element.trigger(event);
|
881
|
-
}
|
1179
|
+
this._triggerEvent('tree.click', {
|
1180
|
+
node: node
|
1181
|
+
});
|
1182
|
+
return this.selectNode(node);
|
882
1183
|
}
|
883
1184
|
}
|
884
1185
|
};
|
885
1186
|
|
886
|
-
|
1187
|
+
JqTreeWidget.prototype._getNode = function($element) {
|
887
1188
|
var $li;
|
888
1189
|
$li = $element.closest('li');
|
889
1190
|
if ($li.length === 0) {
|
@@ -893,131 +1194,479 @@ limitations under the License.
|
|
893
1194
|
}
|
894
1195
|
};
|
895
1196
|
|
896
|
-
|
897
|
-
|
898
|
-
|
899
|
-
|
1197
|
+
JqTreeWidget.prototype._getNodeElementForNode = function(node) {
|
1198
|
+
if (node.isFolder()) {
|
1199
|
+
return new FolderElement(node, this);
|
1200
|
+
} else {
|
1201
|
+
return new NodeElement(node, this);
|
1202
|
+
}
|
1203
|
+
};
|
1204
|
+
|
1205
|
+
JqTreeWidget.prototype._getNodeElement = function($element) {
|
1206
|
+
var node;
|
1207
|
+
node = this._getNode($element);
|
1208
|
+
if (node) {
|
1209
|
+
return this._getNodeElementForNode(node);
|
900
1210
|
} else {
|
901
|
-
|
902
|
-
|
903
|
-
|
1211
|
+
return null;
|
1212
|
+
}
|
1213
|
+
};
|
1214
|
+
|
1215
|
+
JqTreeWidget.prototype._contextmenu = function(e) {
|
1216
|
+
var $div, node;
|
1217
|
+
$div = $(e.target).closest('ul.jqtree-tree div');
|
1218
|
+
if ($div.length) {
|
1219
|
+
node = this._getNode($div);
|
1220
|
+
if (node) {
|
1221
|
+
e.preventDefault();
|
1222
|
+
e.stopPropagation();
|
1223
|
+
this._triggerEvent('tree.contextmenu', {
|
1224
|
+
node: node,
|
1225
|
+
click_event: e
|
904
1226
|
});
|
905
|
-
|
906
|
-
state = null;
|
1227
|
+
return false;
|
907
1228
|
}
|
908
1229
|
}
|
909
|
-
|
1230
|
+
};
|
1231
|
+
|
1232
|
+
JqTreeWidget.prototype._saveState = function() {
|
1233
|
+
if (this.options.saveState) {
|
1234
|
+
return this.save_state_handler.saveState();
|
1235
|
+
}
|
1236
|
+
};
|
1237
|
+
|
1238
|
+
JqTreeWidget.prototype._mouseCapture = function(event) {
|
1239
|
+
if (this.options.dragAndDrop) {
|
1240
|
+
return this.dnd_handler.mouseCapture(event);
|
1241
|
+
} else {
|
910
1242
|
return false;
|
1243
|
+
}
|
1244
|
+
};
|
1245
|
+
|
1246
|
+
JqTreeWidget.prototype._mouseStart = function(event) {
|
1247
|
+
if (this.options.dragAndDrop) {
|
1248
|
+
return this.dnd_handler.mouseStart(event);
|
911
1249
|
} else {
|
912
|
-
|
913
|
-
return true;
|
1250
|
+
return false;
|
914
1251
|
}
|
915
1252
|
};
|
916
1253
|
|
917
|
-
|
918
|
-
if (this.options.
|
919
|
-
return this.
|
1254
|
+
JqTreeWidget.prototype._mouseDrag = function(event) {
|
1255
|
+
if (this.options.dragAndDrop) {
|
1256
|
+
return this.dnd_handler.mouseDrag(event);
|
920
1257
|
} else {
|
921
|
-
|
922
|
-
|
923
|
-
|
1258
|
+
return false;
|
1259
|
+
}
|
1260
|
+
};
|
1261
|
+
|
1262
|
+
JqTreeWidget.prototype._mouseStop = function() {
|
1263
|
+
if (this.options.dragAndDrop) {
|
1264
|
+
return this.dnd_handler.mouseStop();
|
1265
|
+
} else {
|
1266
|
+
return false;
|
1267
|
+
}
|
1268
|
+
};
|
1269
|
+
|
1270
|
+
JqTreeWidget.prototype._triggerEvent = function(event_name, values) {
|
1271
|
+
var event;
|
1272
|
+
event = $.Event(event_name);
|
1273
|
+
$.extend(event, values);
|
1274
|
+
this.element.trigger(event);
|
1275
|
+
return event;
|
1276
|
+
};
|
1277
|
+
|
1278
|
+
JqTreeWidget.prototype.testGenerateHitAreas = function(moving_node) {
|
1279
|
+
this.dnd_handler.current_item = this._getNodeElementForNode(moving_node);
|
1280
|
+
this.dnd_handler.generateHitAreas();
|
1281
|
+
return this.dnd_handler.hit_areas;
|
1282
|
+
};
|
1283
|
+
|
1284
|
+
return JqTreeWidget;
|
1285
|
+
|
1286
|
+
})(MouseWidget);
|
1287
|
+
|
1288
|
+
SimpleWidget.register(JqTreeWidget, 'tree');
|
1289
|
+
|
1290
|
+
GhostDropHint = (function() {
|
1291
|
+
|
1292
|
+
function GhostDropHint(node, $element, position) {
|
1293
|
+
this.$element = $element;
|
1294
|
+
this.node = node;
|
1295
|
+
this.$ghost = $('<li class="jqtree-ghost"><span class="jqtree-circle"></span><span class="jqtree-line"></span></li>');
|
1296
|
+
if (position === Position.AFTER) {
|
1297
|
+
this.moveAfter();
|
1298
|
+
} else if (position === Position.BEFORE) {
|
1299
|
+
this.moveBefore();
|
1300
|
+
} else if (position === Position.INSIDE) {
|
1301
|
+
if (node.isFolder() && node.is_open) {
|
1302
|
+
this.moveInsideOpenFolder();
|
1303
|
+
} else {
|
1304
|
+
this.moveInside();
|
1305
|
+
}
|
1306
|
+
}
|
1307
|
+
}
|
1308
|
+
|
1309
|
+
GhostDropHint.prototype.remove = function() {
|
1310
|
+
return this.$ghost.remove();
|
1311
|
+
};
|
1312
|
+
|
1313
|
+
GhostDropHint.prototype.moveAfter = function() {
|
1314
|
+
return this.$element.after(this.$ghost);
|
1315
|
+
};
|
1316
|
+
|
1317
|
+
GhostDropHint.prototype.moveBefore = function() {
|
1318
|
+
return this.$element.before(this.$ghost);
|
1319
|
+
};
|
1320
|
+
|
1321
|
+
GhostDropHint.prototype.moveInsideOpenFolder = function() {
|
1322
|
+
return $(this.node.children[0].element).before(this.$ghost);
|
1323
|
+
};
|
1324
|
+
|
1325
|
+
GhostDropHint.prototype.moveInside = function() {
|
1326
|
+
this.$element.after(this.$ghost);
|
1327
|
+
return this.$ghost.addClass('jqtree-inside');
|
1328
|
+
};
|
1329
|
+
|
1330
|
+
return GhostDropHint;
|
1331
|
+
|
1332
|
+
})();
|
1333
|
+
|
1334
|
+
BorderDropHint = (function() {
|
1335
|
+
|
1336
|
+
function BorderDropHint($element) {
|
1337
|
+
var $div, width;
|
1338
|
+
$div = $element.children('div');
|
1339
|
+
width = $element.width() - 4;
|
1340
|
+
this.$hint = $('<span class="jqtree-border"></span>');
|
1341
|
+
$div.append(this.$hint);
|
1342
|
+
this.$hint.css({
|
1343
|
+
width: width,
|
1344
|
+
height: $div.height() - 4
|
1345
|
+
});
|
1346
|
+
}
|
1347
|
+
|
1348
|
+
BorderDropHint.prototype.remove = function() {
|
1349
|
+
return this.$hint.remove();
|
1350
|
+
};
|
1351
|
+
|
1352
|
+
return BorderDropHint;
|
1353
|
+
|
1354
|
+
})();
|
1355
|
+
|
1356
|
+
NodeElement = (function() {
|
1357
|
+
|
1358
|
+
function NodeElement(node, tree_widget) {
|
1359
|
+
this.init(node, tree_widget);
|
1360
|
+
}
|
1361
|
+
|
1362
|
+
NodeElement.prototype.init = function(node, tree_widget) {
|
1363
|
+
this.node = node;
|
1364
|
+
this.tree_widget = tree_widget;
|
1365
|
+
return this.$element = $(node.element);
|
1366
|
+
};
|
1367
|
+
|
1368
|
+
NodeElement.prototype.getUl = function() {
|
1369
|
+
return this.$element.children('ul:first');
|
1370
|
+
};
|
1371
|
+
|
1372
|
+
NodeElement.prototype.getSpan = function() {
|
1373
|
+
return this.$element.children('div').find('span.jqtree-title');
|
1374
|
+
};
|
1375
|
+
|
1376
|
+
NodeElement.prototype.getLi = function() {
|
1377
|
+
return this.$element;
|
1378
|
+
};
|
1379
|
+
|
1380
|
+
NodeElement.prototype.addDropHint = function(position) {
|
1381
|
+
if (position === Position.INSIDE) {
|
1382
|
+
return new BorderDropHint(this.$element);
|
1383
|
+
} else {
|
1384
|
+
return new GhostDropHint(this.node, this.$element, position);
|
1385
|
+
}
|
1386
|
+
};
|
1387
|
+
|
1388
|
+
NodeElement.prototype.select = function() {
|
1389
|
+
return this.getLi().addClass('jqtree-selected');
|
1390
|
+
};
|
1391
|
+
|
1392
|
+
NodeElement.prototype.deselect = function() {
|
1393
|
+
return this.getLi().removeClass('jqtree-selected');
|
1394
|
+
};
|
1395
|
+
|
1396
|
+
return NodeElement;
|
1397
|
+
|
1398
|
+
})();
|
1399
|
+
|
1400
|
+
FolderElement = (function(_super) {
|
1401
|
+
|
1402
|
+
__extends(FolderElement, _super);
|
1403
|
+
|
1404
|
+
function FolderElement() {
|
1405
|
+
return FolderElement.__super__.constructor.apply(this, arguments);
|
1406
|
+
}
|
1407
|
+
|
1408
|
+
FolderElement.prototype.open = function(on_finished, skip_slide) {
|
1409
|
+
var $button, doOpen,
|
1410
|
+
_this = this;
|
1411
|
+
if (!this.node.is_open) {
|
1412
|
+
this.node.is_open = true;
|
1413
|
+
$button = this.getButton();
|
1414
|
+
$button.removeClass('jqtree-closed');
|
1415
|
+
$button.html(TRIANGLE_DOWN);
|
1416
|
+
doOpen = function() {
|
1417
|
+
_this.getLi().removeClass('jqtree-closed');
|
1418
|
+
if (on_finished) {
|
1419
|
+
on_finished();
|
1420
|
+
}
|
1421
|
+
return _this.tree_widget._triggerEvent('tree.open', {
|
1422
|
+
node: _this.node
|
1423
|
+
});
|
1424
|
+
};
|
1425
|
+
if (skip_slide) {
|
1426
|
+
this.getUl().show();
|
1427
|
+
return doOpen();
|
1428
|
+
} else {
|
1429
|
+
return this.getUl().slideDown('fast', doOpen);
|
1430
|
+
}
|
1431
|
+
}
|
1432
|
+
};
|
1433
|
+
|
1434
|
+
FolderElement.prototype.close = function(skip_slide) {
|
1435
|
+
var $button, doClose,
|
1436
|
+
_this = this;
|
1437
|
+
if (this.node.is_open) {
|
1438
|
+
this.node.is_open = false;
|
1439
|
+
$button = this.getButton();
|
1440
|
+
$button.addClass('jqtree-closed');
|
1441
|
+
$button.html(TRIANGLE_RIGHT);
|
1442
|
+
doClose = function() {
|
1443
|
+
_this.getLi().addClass('jqtree-closed');
|
1444
|
+
return _this.tree_widget._triggerEvent('tree.close', {
|
1445
|
+
node: _this.node
|
924
1446
|
});
|
1447
|
+
};
|
1448
|
+
if (skip_slide) {
|
1449
|
+
this.getUl().hide();
|
1450
|
+
return doClose();
|
1451
|
+
} else {
|
1452
|
+
return this.getUl().slideUp('fast', doClose);
|
925
1453
|
}
|
926
1454
|
}
|
927
1455
|
};
|
928
1456
|
|
929
|
-
|
1457
|
+
FolderElement.prototype.getButton = function() {
|
1458
|
+
return this.$element.children('div').find('a.jqtree-toggler');
|
1459
|
+
};
|
1460
|
+
|
1461
|
+
FolderElement.prototype.addDropHint = function(position) {
|
1462
|
+
if (!this.node.is_open && position === Position.INSIDE) {
|
1463
|
+
return new BorderDropHint(this.$element);
|
1464
|
+
} else {
|
1465
|
+
return new GhostDropHint(this.node, this.$element, position);
|
1466
|
+
}
|
1467
|
+
};
|
1468
|
+
|
1469
|
+
return FolderElement;
|
1470
|
+
|
1471
|
+
})(NodeElement);
|
1472
|
+
|
1473
|
+
DragElement = (function() {
|
1474
|
+
|
1475
|
+
function DragElement(node, offset_x, offset_y, $tree) {
|
1476
|
+
this.offset_x = offset_x;
|
1477
|
+
this.offset_y = offset_y;
|
1478
|
+
this.$element = $("<span class=\"jqtree-title jqtree-dragging\">" + node.name + "</span>");
|
1479
|
+
this.$element.css("position", "absolute");
|
1480
|
+
$tree.append(this.$element);
|
1481
|
+
}
|
1482
|
+
|
1483
|
+
DragElement.prototype.move = function(page_x, page_y) {
|
1484
|
+
return this.$element.offset({
|
1485
|
+
left: page_x - this.offset_x,
|
1486
|
+
top: page_y - this.offset_y
|
1487
|
+
});
|
1488
|
+
};
|
1489
|
+
|
1490
|
+
DragElement.prototype.remove = function() {
|
1491
|
+
return this.$element.remove();
|
1492
|
+
};
|
1493
|
+
|
1494
|
+
return DragElement;
|
1495
|
+
|
1496
|
+
})();
|
1497
|
+
|
1498
|
+
SaveStateHandler = (function() {
|
1499
|
+
|
1500
|
+
function SaveStateHandler(tree_widget) {
|
1501
|
+
this.tree_widget = tree_widget;
|
1502
|
+
}
|
1503
|
+
|
1504
|
+
SaveStateHandler.prototype.saveState = function() {
|
1505
|
+
if (this.tree_widget.options.onSetStateFromStorage) {
|
1506
|
+
return this.tree_widget.options.onSetStateFromStorage(this.getState());
|
1507
|
+
} else if (typeof localStorage !== "undefined" && localStorage !== null) {
|
1508
|
+
return localStorage.setItem(this.getCookieName(), this.getState());
|
1509
|
+
} else if ($.cookie) {
|
1510
|
+
return $.cookie(this.getCookieName(), this.getState(), {
|
1511
|
+
path: '/'
|
1512
|
+
});
|
1513
|
+
}
|
1514
|
+
};
|
1515
|
+
|
1516
|
+
SaveStateHandler.prototype.restoreState = function() {
|
1517
|
+
var state;
|
1518
|
+
state = this.getStateFromStorage();
|
1519
|
+
if (state) {
|
1520
|
+
this.setState(state);
|
1521
|
+
return true;
|
1522
|
+
} else {
|
1523
|
+
return false;
|
1524
|
+
}
|
1525
|
+
};
|
1526
|
+
|
1527
|
+
SaveStateHandler.prototype.getStateFromStorage = function() {
|
1528
|
+
if (this.tree_widget.options.onGetStateFromStorage) {
|
1529
|
+
return this.tree_widget.options.onGetStateFromStorage();
|
1530
|
+
} else if (typeof localStorage !== "undefined" && localStorage !== null) {
|
1531
|
+
return localStorage.getItem(this.getCookieName());
|
1532
|
+
} else if ($.cookie) {
|
1533
|
+
return $.cookie(this.getCookieName(), {
|
1534
|
+
path: '/'
|
1535
|
+
});
|
1536
|
+
} else {
|
1537
|
+
return null;
|
1538
|
+
}
|
1539
|
+
};
|
1540
|
+
|
1541
|
+
SaveStateHandler.prototype.getState = function() {
|
930
1542
|
var open_nodes, selected_node,
|
931
1543
|
_this = this;
|
932
1544
|
open_nodes = [];
|
933
|
-
this.tree.iterate(function(node) {
|
1545
|
+
this.tree_widget.tree.iterate(function(node) {
|
934
1546
|
if (node.is_open && node.id && node.hasChildren()) {
|
935
1547
|
open_nodes.push(node.id);
|
936
1548
|
}
|
937
1549
|
return true;
|
938
1550
|
});
|
939
1551
|
selected_node = '';
|
940
|
-
if (this.selected_node) {
|
941
|
-
selected_node = this.selected_node.id;
|
1552
|
+
if (this.tree_widget.selected_node) {
|
1553
|
+
selected_node = this.tree_widget.selected_node.id;
|
942
1554
|
}
|
943
|
-
return
|
1555
|
+
return JSON.stringify({
|
944
1556
|
open_nodes: open_nodes,
|
945
1557
|
selected_node: selected_node
|
946
1558
|
});
|
947
1559
|
};
|
948
1560
|
|
949
|
-
|
1561
|
+
SaveStateHandler.prototype.setState = function(state) {
|
950
1562
|
var data, open_nodes, selected_node_id,
|
951
1563
|
_this = this;
|
952
1564
|
data = $.parseJSON(state);
|
953
|
-
|
954
|
-
|
955
|
-
|
956
|
-
|
957
|
-
node.
|
958
|
-
|
959
|
-
|
960
|
-
|
961
|
-
|
962
|
-
|
963
|
-
|
1565
|
+
if (data) {
|
1566
|
+
open_nodes = data.open_nodes;
|
1567
|
+
selected_node_id = data.selected_node;
|
1568
|
+
return this.tree_widget.tree.iterate(function(node) {
|
1569
|
+
if (node.id && node.hasChildren() && (indexOf(open_nodes, node.id) >= 0)) {
|
1570
|
+
node.is_open = true;
|
1571
|
+
}
|
1572
|
+
if (selected_node_id && (node.id === selected_node_id)) {
|
1573
|
+
_this.tree_widget.selected_node = node;
|
1574
|
+
}
|
1575
|
+
return true;
|
1576
|
+
});
|
1577
|
+
}
|
964
1578
|
};
|
965
1579
|
|
966
|
-
|
967
|
-
if (typeof this.options.saveState === 'string') {
|
968
|
-
return this.options.saveState;
|
1580
|
+
SaveStateHandler.prototype.getCookieName = function() {
|
1581
|
+
if (typeof this.tree_widget.options.saveState === 'string') {
|
1582
|
+
return this.tree_widget.options.saveState;
|
969
1583
|
} else {
|
970
1584
|
return 'tree';
|
971
1585
|
}
|
972
1586
|
};
|
973
1587
|
|
974
|
-
|
975
|
-
|
976
|
-
|
977
|
-
|
978
|
-
|
1588
|
+
return SaveStateHandler;
|
1589
|
+
|
1590
|
+
})();
|
1591
|
+
|
1592
|
+
SelectNodeHandler = (function() {
|
1593
|
+
|
1594
|
+
function SelectNodeHandler(tree_widget) {
|
1595
|
+
this.tree_widget = tree_widget;
|
1596
|
+
}
|
1597
|
+
|
1598
|
+
SelectNodeHandler.prototype.selectNode = function(node, must_open_parents) {
|
1599
|
+
var canSelect, parent,
|
1600
|
+
_this = this;
|
1601
|
+
canSelect = function() {
|
1602
|
+
if (!_this.tree_widget.options.selectable) {
|
1603
|
+
return false;
|
1604
|
+
}
|
1605
|
+
if (!_this.tree_widget.options.onCanSelectNode) {
|
1606
|
+
return true;
|
1607
|
+
}
|
1608
|
+
return _this.tree_widget.options.onCanSelectNode(node);
|
1609
|
+
};
|
1610
|
+
if (canSelect()) {
|
1611
|
+
if (this.tree_widget.selected_node) {
|
1612
|
+
this.tree_widget._getNodeElementForNode(this.tree_widget.selected_node).deselect();
|
1613
|
+
this.tree_widget.selected_node = null;
|
1614
|
+
}
|
1615
|
+
if (node) {
|
1616
|
+
this.tree_widget._getNodeElementForNode(node).select();
|
1617
|
+
this.tree_widget.selected_node = node;
|
1618
|
+
this.tree_widget._triggerEvent('tree.select', {
|
1619
|
+
node: node
|
1620
|
+
});
|
1621
|
+
if (must_open_parents) {
|
1622
|
+
parent = this.tree_widget.selected_node.parent;
|
1623
|
+
while (parent) {
|
1624
|
+
if (!parent.is_open) {
|
1625
|
+
this.tree_widget.openNode(parent, true);
|
1626
|
+
}
|
1627
|
+
parent = parent.parent;
|
1628
|
+
}
|
1629
|
+
}
|
1630
|
+
}
|
1631
|
+
if (this.tree_widget.options.saveState) {
|
1632
|
+
return this.tree_widget.save_state_handler.saveState();
|
1633
|
+
}
|
1634
|
+
}
|
1635
|
+
};
|
1636
|
+
|
1637
|
+
SelectNodeHandler.prototype.selectCurrentNode = function() {
|
1638
|
+
var node_element;
|
1639
|
+
if (this.tree_widget.selected_node) {
|
1640
|
+
node_element = this.tree_widget._getNodeElementForNode(this.tree_widget.selected_node);
|
1641
|
+
if (node_element) {
|
1642
|
+
return node_element.select();
|
1643
|
+
}
|
979
1644
|
}
|
980
1645
|
};
|
981
1646
|
|
982
|
-
|
983
|
-
var node;
|
984
|
-
node = this._getNode($element);
|
985
|
-
if (node) {
|
986
|
-
return this._getNodeElementForNode(node);
|
987
|
-
} else {
|
988
|
-
return null;
|
989
|
-
}
|
990
|
-
};
|
1647
|
+
return SelectNodeHandler;
|
991
1648
|
|
992
|
-
|
993
|
-
var $div, event, node;
|
994
|
-
$div = $(e.target).closest('ul.tree div');
|
995
|
-
if ($div.length) {
|
996
|
-
node = this._getNode($div);
|
997
|
-
if (node) {
|
998
|
-
e.preventDefault();
|
999
|
-
e.stopPropagation();
|
1000
|
-
event = $.Event('tree.contextmenu');
|
1001
|
-
event.node = node;
|
1002
|
-
event.click_event = e;
|
1003
|
-
this.element.trigger(event);
|
1004
|
-
return false;
|
1005
|
-
}
|
1006
|
-
}
|
1007
|
-
};
|
1649
|
+
})();
|
1008
1650
|
|
1009
|
-
|
1651
|
+
DragAndDropHandler = (function() {
|
1652
|
+
|
1653
|
+
function DragAndDropHandler(tree_widget) {
|
1654
|
+
this.tree_widget = tree_widget;
|
1655
|
+
this.hovered_area = null;
|
1656
|
+
this.$ghost = null;
|
1657
|
+
this.hit_areas = [];
|
1658
|
+
this.is_dragging = false;
|
1659
|
+
}
|
1660
|
+
|
1661
|
+
DragAndDropHandler.prototype.mouseCapture = function(event) {
|
1010
1662
|
var $element, node_element;
|
1011
|
-
if (!this.options.dragAndDrop) {
|
1012
|
-
return;
|
1013
|
-
}
|
1014
1663
|
$element = $(event.target);
|
1015
|
-
if (this.options.onIsMoveHandle && !this.options.onIsMoveHandle($element)) {
|
1664
|
+
if (this.tree_widget.options.onIsMoveHandle && !this.tree_widget.options.onIsMoveHandle($element)) {
|
1016
1665
|
return null;
|
1017
1666
|
}
|
1018
|
-
node_element = this._getNodeElement($
|
1019
|
-
if (node_element && this.options.onCanMove) {
|
1020
|
-
if (!this.options.onCanMove(node_element.node)) {
|
1667
|
+
node_element = this.tree_widget._getNodeElement($element);
|
1668
|
+
if (node_element && this.tree_widget.options.onCanMove) {
|
1669
|
+
if (!this.tree_widget.options.onCanMove(node_element.node)) {
|
1021
1670
|
node_element = null;
|
1022
1671
|
}
|
1023
1672
|
}
|
@@ -1025,63 +1674,81 @@ limitations under the License.
|
|
1025
1674
|
return this.current_item !== null;
|
1026
1675
|
};
|
1027
1676
|
|
1028
|
-
|
1677
|
+
DragAndDropHandler.prototype.mouseStart = function(event) {
|
1029
1678
|
var offsetX, offsetY, _ref;
|
1030
|
-
|
1031
|
-
|
1032
|
-
|
1033
|
-
this.
|
1034
|
-
|
1035
|
-
this.drag_element = new DragElement(this.current_item.node, offsetX, offsetY, this.element);
|
1036
|
-
this.current_item.$element.addClass('moving');
|
1679
|
+
this.refreshHitAreas();
|
1680
|
+
_ref = this.getOffsetFromEvent(event), offsetX = _ref[0], offsetY = _ref[1];
|
1681
|
+
this.drag_element = new DragElement(this.current_item.node, offsetX, offsetY, this.tree_widget.element);
|
1682
|
+
this.is_dragging = true;
|
1683
|
+
this.current_item.$element.addClass('jqtree-moving');
|
1037
1684
|
return true;
|
1038
1685
|
};
|
1039
1686
|
|
1040
|
-
|
1687
|
+
DragAndDropHandler.prototype.mouseDrag = function(event) {
|
1041
1688
|
var area, position_name;
|
1042
|
-
if (!this.options.dragAndDrop) {
|
1043
|
-
return;
|
1044
|
-
}
|
1045
1689
|
this.drag_element.move(event.pageX, event.pageY);
|
1046
|
-
area = this.
|
1047
|
-
if (area && this.options.onCanMoveTo) {
|
1690
|
+
area = this.findHoveredArea(event.pageX, event.pageY);
|
1691
|
+
if (area && this.tree_widget.options.onCanMoveTo) {
|
1048
1692
|
position_name = Position.getName(area.position);
|
1049
|
-
if (!this.options.onCanMoveTo(this.current_item.node, area.node, position_name)) {
|
1693
|
+
if (!this.tree_widget.options.onCanMoveTo(this.current_item.node, area.node, position_name)) {
|
1050
1694
|
area = null;
|
1051
1695
|
}
|
1052
1696
|
}
|
1053
1697
|
if (!area) {
|
1054
|
-
this.
|
1055
|
-
this.
|
1056
|
-
this.
|
1698
|
+
this.removeDropHint();
|
1699
|
+
this.removeHover();
|
1700
|
+
this.stopOpenFolderTimer();
|
1057
1701
|
} else {
|
1058
1702
|
if (this.hovered_area !== area) {
|
1059
1703
|
this.hovered_area = area;
|
1060
|
-
this.
|
1704
|
+
this.updateDropHint();
|
1061
1705
|
}
|
1062
1706
|
}
|
1063
1707
|
return true;
|
1064
1708
|
};
|
1065
1709
|
|
1066
|
-
|
1067
|
-
|
1068
|
-
|
1069
|
-
|
1070
|
-
this.
|
1071
|
-
this.
|
1072
|
-
this.
|
1073
|
-
this.
|
1074
|
-
this._removeHitAreas();
|
1075
|
-
this.current_item.$element.removeClass('moving');
|
1710
|
+
DragAndDropHandler.prototype.mouseStop = function() {
|
1711
|
+
this.moveItem();
|
1712
|
+
this.clear();
|
1713
|
+
this.removeHover();
|
1714
|
+
this.removeDropHint();
|
1715
|
+
this.removeHitAreas();
|
1716
|
+
this.current_item.$element.removeClass('jqtree-moving');
|
1717
|
+
this.is_dragging = false;
|
1076
1718
|
return false;
|
1077
1719
|
};
|
1078
1720
|
|
1079
|
-
|
1080
|
-
|
1081
|
-
|
1721
|
+
DragAndDropHandler.prototype.getOffsetFromEvent = function(event) {
|
1722
|
+
var element_offset;
|
1723
|
+
element_offset = $(event.target).offset();
|
1724
|
+
return [event.pageX - element_offset.left, event.pageY - element_offset.top];
|
1725
|
+
};
|
1726
|
+
|
1727
|
+
DragAndDropHandler.prototype.refreshHitAreas = function() {
|
1728
|
+
this.removeHitAreas();
|
1729
|
+
return this.generateHitAreas();
|
1730
|
+
};
|
1731
|
+
|
1732
|
+
DragAndDropHandler.prototype.removeHitAreas = function() {
|
1733
|
+
return this.hit_areas = [];
|
1734
|
+
};
|
1735
|
+
|
1736
|
+
DragAndDropHandler.prototype.clear = function() {
|
1737
|
+
this.drag_element.remove();
|
1738
|
+
return this.drag_element = null;
|
1739
|
+
};
|
1740
|
+
|
1741
|
+
DragAndDropHandler.prototype.removeDropHint = function() {
|
1742
|
+
if (this.previous_ghost) {
|
1743
|
+
return this.previous_ghost.remove();
|
1744
|
+
}
|
1745
|
+
};
|
1746
|
+
|
1747
|
+
DragAndDropHandler.prototype.removeHover = function() {
|
1748
|
+
return this.hovered_area = null;
|
1082
1749
|
};
|
1083
1750
|
|
1084
|
-
|
1751
|
+
DragAndDropHandler.prototype.generateHitAreas = function() {
|
1085
1752
|
var addPosition, getTop, groupPositions, handleAfterOpenFolder, handleClosedFolder, handleFirstNode, handleNode, handleOpenFolder, hit_areas, last_top, positions,
|
1086
1753
|
_this = this;
|
1087
1754
|
positions = [];
|
@@ -1112,7 +1779,7 @@ limitations under the License.
|
|
1112
1779
|
}
|
1113
1780
|
group.push(position);
|
1114
1781
|
}
|
1115
|
-
return handle_group(group, previous_top, _this.element.offset().top + _this.element.height());
|
1782
|
+
return handle_group(group, previous_top, _this.tree_widget.element.offset().top + _this.tree_widget.element.height());
|
1116
1783
|
};
|
1117
1784
|
handleNode = function(node, next_node, $element) {
|
1118
1785
|
var top;
|
@@ -1161,13 +1828,12 @@ limitations under the License.
|
|
1161
1828
|
return addPosition(node, Position.BEFORE, getTop($(node.element)));
|
1162
1829
|
}
|
1163
1830
|
};
|
1164
|
-
this.
|
1831
|
+
this.iterateVisibleNodes(handleNode, handleOpenFolder, handleClosedFolder, handleAfterOpenFolder, handleFirstNode);
|
1165
1832
|
hit_areas = [];
|
1166
1833
|
groupPositions(function(positions_in_group, top, bottom) {
|
1167
|
-
var area_height, area_top, position, _i, _len
|
1834
|
+
var area_height, area_top, position, _i, _len;
|
1168
1835
|
area_height = (bottom - top) / positions_in_group.length;
|
1169
1836
|
area_top = top;
|
1170
|
-
_results = [];
|
1171
1837
|
for (_i = 0, _len = positions_in_group.length; _i < _len; _i++) {
|
1172
1838
|
position = positions_in_group[_i];
|
1173
1839
|
hit_areas.push({
|
@@ -1176,18 +1842,14 @@ limitations under the License.
|
|
1176
1842
|
node: position.node,
|
1177
1843
|
position: position.position
|
1178
1844
|
});
|
1179
|
-
|
1845
|
+
area_top += area_height;
|
1180
1846
|
}
|
1181
|
-
return
|
1847
|
+
return null;
|
1182
1848
|
});
|
1183
1849
|
return this.hit_areas = hit_areas;
|
1184
1850
|
};
|
1185
1851
|
|
1186
|
-
|
1187
|
-
return this.hit_areas = [];
|
1188
|
-
};
|
1189
|
-
|
1190
|
-
JqueryWidget.prototype._iterateVisibleNodes = function(handle_node, handle_open_folder, handle_closed_folder, handle_after_open_folder, handle_first_node) {
|
1852
|
+
DragAndDropHandler.prototype.iterateVisibleNodes = function(handle_node, handle_open_folder, handle_closed_folder, handle_after_open_folder, handle_first_node) {
|
1191
1853
|
var is_first_node, iterate,
|
1192
1854
|
_this = this;
|
1193
1855
|
is_first_node = true;
|
@@ -1229,19 +1891,13 @@ limitations under the License.
|
|
1229
1891
|
}
|
1230
1892
|
}
|
1231
1893
|
};
|
1232
|
-
return iterate(this.tree);
|
1233
|
-
};
|
1234
|
-
|
1235
|
-
JqueryWidget.prototype._getOffsetFromEvent = function(event) {
|
1236
|
-
var element_offset;
|
1237
|
-
element_offset = $(event.target).offset();
|
1238
|
-
return [event.pageX - element_offset.left, event.pageY - element_offset.top];
|
1894
|
+
return iterate(this.tree_widget.tree);
|
1239
1895
|
};
|
1240
1896
|
|
1241
|
-
|
1897
|
+
DragAndDropHandler.prototype.findHoveredArea = function(x, y) {
|
1242
1898
|
var area, high, low, mid, tree_offset;
|
1243
|
-
tree_offset = this.element.offset();
|
1244
|
-
if (x < tree_offset.left || y < tree_offset.top || x > (tree_offset.left + this.element.width()) || y > (tree_offset.top + this.element.height())) {
|
1899
|
+
tree_offset = this.tree_widget.element.offset();
|
1900
|
+
if (x < tree_offset.left || y < tree_offset.top || x > (tree_offset.left + this.tree_widget.element.width()) || y > (tree_offset.top + this.tree_widget.element.height())) {
|
1245
1901
|
return null;
|
1246
1902
|
}
|
1247
1903
|
low = 0;
|
@@ -1260,292 +1916,75 @@ limitations under the License.
|
|
1260
1916
|
return null;
|
1261
1917
|
};
|
1262
1918
|
|
1263
|
-
|
1919
|
+
DragAndDropHandler.prototype.updateDropHint = function() {
|
1264
1920
|
var node, node_element;
|
1265
|
-
this.
|
1921
|
+
this.stopOpenFolderTimer();
|
1266
1922
|
if (!this.hovered_area) {
|
1267
1923
|
return;
|
1268
1924
|
}
|
1269
1925
|
node = this.hovered_area.node;
|
1270
|
-
if (node.
|
1271
|
-
this.
|
1926
|
+
if (node.isFolder() && !node.is_open && this.hovered_area.position === Position.INSIDE) {
|
1927
|
+
this.startOpenFolderTimer(node);
|
1272
1928
|
}
|
1273
|
-
this.
|
1274
|
-
node_element = this._getNodeElementForNode(this.hovered_area.node);
|
1929
|
+
this.removeDropHint();
|
1930
|
+
node_element = this.tree_widget._getNodeElementForNode(this.hovered_area.node);
|
1275
1931
|
return this.previous_ghost = node_element.addDropHint(this.hovered_area.position);
|
1276
1932
|
};
|
1277
1933
|
|
1278
|
-
|
1934
|
+
DragAndDropHandler.prototype.startOpenFolderTimer = function(folder) {
|
1279
1935
|
var openFolder,
|
1280
1936
|
_this = this;
|
1281
1937
|
openFolder = function() {
|
1282
|
-
return _this.
|
1283
|
-
_this.
|
1284
|
-
return _this.
|
1938
|
+
return _this.tree_widget._openNode(folder, false, function() {
|
1939
|
+
_this.refreshHitAreas();
|
1940
|
+
return _this.updateDropHint();
|
1285
1941
|
});
|
1286
1942
|
};
|
1287
1943
|
return this.open_folder_timer = setTimeout(openFolder, 500);
|
1288
1944
|
};
|
1289
1945
|
|
1290
|
-
|
1946
|
+
DragAndDropHandler.prototype.stopOpenFolderTimer = function() {
|
1291
1947
|
if (this.open_folder_timer) {
|
1292
1948
|
clearTimeout(this.open_folder_timer);
|
1293
1949
|
return this.open_folder_timer = null;
|
1294
1950
|
}
|
1295
1951
|
};
|
1296
1952
|
|
1297
|
-
|
1298
|
-
|
1299
|
-
|
1300
|
-
}
|
1301
|
-
};
|
1302
|
-
|
1303
|
-
JqueryWidget.prototype._removeHover = function() {
|
1304
|
-
return this.hovered_area = null;
|
1305
|
-
};
|
1306
|
-
|
1307
|
-
JqueryWidget.prototype._moveItem = function() {
|
1308
|
-
var event, moved_node, position, previous_parent, target_node;
|
1953
|
+
DragAndDropHandler.prototype.moveItem = function() {
|
1954
|
+
var doMove, event, moved_node, position, previous_parent, target_node,
|
1955
|
+
_this = this;
|
1309
1956
|
if (this.hovered_area && this.hovered_area.position !== Position.NONE) {
|
1310
1957
|
moved_node = this.current_item.node;
|
1311
1958
|
target_node = this.hovered_area.node;
|
1312
1959
|
position = this.hovered_area.position;
|
1313
1960
|
previous_parent = moved_node.parent;
|
1314
|
-
this.tree.moveNode(moved_node, target_node, position);
|
1315
1961
|
if (position === Position.INSIDE) {
|
1316
1962
|
this.hovered_area.node.is_open = true;
|
1317
1963
|
}
|
1318
|
-
|
1319
|
-
|
1320
|
-
|
1321
|
-
|
1322
|
-
position: Position.getName(position),
|
1323
|
-
previous_parent: previous_parent
|
1964
|
+
doMove = function() {
|
1965
|
+
_this.tree_widget.tree.moveNode(moved_node, target_node, position);
|
1966
|
+
_this.tree_widget.element.empty();
|
1967
|
+
return _this.tree_widget._refreshElements();
|
1324
1968
|
};
|
1325
|
-
this.
|
1326
|
-
|
1327
|
-
|
1328
|
-
|
1329
|
-
|
1330
|
-
|
1331
|
-
|
1332
|
-
|
1333
|
-
|
1334
|
-
|
1335
|
-
|
1336
|
-
return JqueryWidget;
|
1337
|
-
|
1338
|
-
})(MouseWidget);
|
1339
|
-
|
1340
|
-
SimpleWidget.register(JqueryWidget, 'tree');
|
1341
|
-
|
1342
|
-
GhostDropHint = (function() {
|
1343
|
-
|
1344
|
-
GhostDropHint.name = 'GhostDropHint';
|
1345
|
-
|
1346
|
-
function GhostDropHint(node, $element, position) {
|
1347
|
-
this.$element = $element;
|
1348
|
-
this.node = node;
|
1349
|
-
this.$ghost = $('<li class="ghost"><span class="circle"></span><span class="line"></span></li>');
|
1350
|
-
if (position === Position.AFTER) {
|
1351
|
-
this.moveAfter();
|
1352
|
-
} else if (position === Position.BEFORE) {
|
1353
|
-
this.moveBefore();
|
1354
|
-
} else if (position === Position.INSIDE) {
|
1355
|
-
if (node.hasChildren() && node.is_open) {
|
1356
|
-
this.moveInsideOpenFolder();
|
1357
|
-
} else {
|
1358
|
-
this.moveInside();
|
1359
|
-
}
|
1360
|
-
}
|
1361
|
-
}
|
1362
|
-
|
1363
|
-
GhostDropHint.prototype.remove = function() {
|
1364
|
-
return this.$ghost.remove();
|
1365
|
-
};
|
1366
|
-
|
1367
|
-
GhostDropHint.prototype.moveAfter = function() {
|
1368
|
-
return this.$element.after(this.$ghost);
|
1369
|
-
};
|
1370
|
-
|
1371
|
-
GhostDropHint.prototype.moveBefore = function() {
|
1372
|
-
return this.$element.before(this.$ghost);
|
1373
|
-
};
|
1374
|
-
|
1375
|
-
GhostDropHint.prototype.moveInsideOpenFolder = function() {
|
1376
|
-
return $(this.node.children[0].element).before(this.$ghost);
|
1377
|
-
};
|
1378
|
-
|
1379
|
-
GhostDropHint.prototype.moveInside = function() {
|
1380
|
-
this.$element.after(this.$ghost);
|
1381
|
-
return this.$ghost.addClass('inside');
|
1382
|
-
};
|
1383
|
-
|
1384
|
-
return GhostDropHint;
|
1385
|
-
|
1386
|
-
})();
|
1387
|
-
|
1388
|
-
BorderDropHint = (function() {
|
1389
|
-
|
1390
|
-
BorderDropHint.name = 'BorderDropHint';
|
1391
|
-
|
1392
|
-
function BorderDropHint($element) {
|
1393
|
-
var $div, width;
|
1394
|
-
$div = $element.children('div');
|
1395
|
-
width = $element.width() - 4;
|
1396
|
-
this.$hint = $('<span class="border"></span>');
|
1397
|
-
$div.append(this.$hint);
|
1398
|
-
this.$hint.css({
|
1399
|
-
width: width,
|
1400
|
-
height: $div.height() - 4
|
1401
|
-
});
|
1402
|
-
}
|
1403
|
-
|
1404
|
-
BorderDropHint.prototype.remove = function() {
|
1405
|
-
return this.$hint.remove();
|
1406
|
-
};
|
1407
|
-
|
1408
|
-
return BorderDropHint;
|
1409
|
-
|
1410
|
-
})();
|
1411
|
-
|
1412
|
-
NodeElement = (function() {
|
1413
|
-
|
1414
|
-
NodeElement.name = 'NodeElement';
|
1415
|
-
|
1416
|
-
function NodeElement(node) {
|
1417
|
-
this.init(node);
|
1418
|
-
}
|
1419
|
-
|
1420
|
-
NodeElement.prototype.init = function(node) {
|
1421
|
-
this.node = node;
|
1422
|
-
return this.$element = $(node.element);
|
1423
|
-
};
|
1424
|
-
|
1425
|
-
NodeElement.prototype.getUl = function() {
|
1426
|
-
return this.$element.children('ul:first');
|
1427
|
-
};
|
1428
|
-
|
1429
|
-
NodeElement.prototype.getSpan = function() {
|
1430
|
-
return this.$element.children('div').find('span.title');
|
1431
|
-
};
|
1432
|
-
|
1433
|
-
NodeElement.prototype.getLi = function() {
|
1434
|
-
return this.$element;
|
1435
|
-
};
|
1436
|
-
|
1437
|
-
NodeElement.prototype.addDropHint = function(position) {
|
1438
|
-
if (position === Position.INSIDE) {
|
1439
|
-
return new BorderDropHint(this.$element);
|
1440
|
-
} else {
|
1441
|
-
return new GhostDropHint(this.node, this.$element, position);
|
1442
|
-
}
|
1443
|
-
};
|
1444
|
-
|
1445
|
-
NodeElement.prototype.select = function() {
|
1446
|
-
return this.getLi().addClass('selected');
|
1447
|
-
};
|
1448
|
-
|
1449
|
-
NodeElement.prototype.deselect = function() {
|
1450
|
-
return this.getLi().removeClass('selected');
|
1451
|
-
};
|
1452
|
-
|
1453
|
-
return NodeElement;
|
1454
|
-
|
1455
|
-
})();
|
1456
|
-
|
1457
|
-
FolderElement = (function(_super) {
|
1458
|
-
|
1459
|
-
__extends(FolderElement, _super);
|
1460
|
-
|
1461
|
-
FolderElement.name = 'FolderElement';
|
1462
|
-
|
1463
|
-
function FolderElement() {
|
1464
|
-
return FolderElement.__super__.constructor.apply(this, arguments);
|
1465
|
-
}
|
1466
|
-
|
1467
|
-
FolderElement.prototype.toggle = function(on_finished) {
|
1468
|
-
if (this.node.is_open) {
|
1469
|
-
return this.close(on_finished);
|
1470
|
-
} else {
|
1471
|
-
return this.open(on_finished);
|
1472
|
-
}
|
1473
|
-
};
|
1474
|
-
|
1475
|
-
FolderElement.prototype.open = function(on_finished, skip_slide) {
|
1476
|
-
var doOpen,
|
1477
|
-
_this = this;
|
1478
|
-
this.node.is_open = true;
|
1479
|
-
this.getButton().removeClass('closed');
|
1480
|
-
doOpen = function() {
|
1481
|
-
_this.getLi().removeClass('closed');
|
1482
|
-
if (on_finished) {
|
1483
|
-
return on_finished();
|
1484
|
-
}
|
1485
|
-
};
|
1486
|
-
if (skip_slide) {
|
1487
|
-
this.getUl().show();
|
1488
|
-
return doOpen();
|
1489
|
-
} else {
|
1490
|
-
return this.getUl().slideDown('fast', doOpen);
|
1491
|
-
}
|
1492
|
-
};
|
1493
|
-
|
1494
|
-
FolderElement.prototype.close = function(on_finished) {
|
1495
|
-
var _this = this;
|
1496
|
-
this.node.is_open = false;
|
1497
|
-
this.getButton().addClass('closed');
|
1498
|
-
return this.getUl().slideUp('fast', function() {
|
1499
|
-
_this.getLi().addClass('closed');
|
1500
|
-
if (on_finished) {
|
1501
|
-
return on_finished();
|
1969
|
+
event = this.tree_widget._triggerEvent('tree.move', {
|
1970
|
+
move_info: {
|
1971
|
+
moved_node: moved_node,
|
1972
|
+
target_node: target_node,
|
1973
|
+
position: Position.getName(position),
|
1974
|
+
previous_parent: previous_parent,
|
1975
|
+
do_move: doMove
|
1976
|
+
}
|
1977
|
+
});
|
1978
|
+
if (!event.isDefaultPrevented()) {
|
1979
|
+
return doMove();
|
1502
1980
|
}
|
1503
|
-
});
|
1504
|
-
};
|
1505
|
-
|
1506
|
-
FolderElement.prototype.getButton = function() {
|
1507
|
-
return this.$element.children('div').find('a.toggler');
|
1508
|
-
};
|
1509
|
-
|
1510
|
-
FolderElement.prototype.addDropHint = function(position) {
|
1511
|
-
if (!this.node.is_open && position === Position.INSIDE) {
|
1512
|
-
return new BorderDropHint(this.$element);
|
1513
|
-
} else {
|
1514
|
-
return new GhostDropHint(this.node, this.$element, position);
|
1515
1981
|
}
|
1516
1982
|
};
|
1517
1983
|
|
1518
|
-
return
|
1519
|
-
|
1520
|
-
})(NodeElement);
|
1521
|
-
|
1522
|
-
DragElement = (function() {
|
1523
|
-
|
1524
|
-
DragElement.name = 'DragElement';
|
1525
|
-
|
1526
|
-
function DragElement(node, offset_x, offset_y, $tree) {
|
1527
|
-
this.offset_x = offset_x;
|
1528
|
-
this.offset_y = offset_y;
|
1529
|
-
this.$element = $("<span class=\"title tree-dragging\">" + node.name + "</span>");
|
1530
|
-
this.$element.css("position", "absolute");
|
1531
|
-
$tree.append(this.$element);
|
1532
|
-
}
|
1533
|
-
|
1534
|
-
DragElement.prototype.move = function(page_x, page_y) {
|
1535
|
-
return this.$element.offset({
|
1536
|
-
left: page_x - this.offset_x,
|
1537
|
-
top: page_y - this.offset_y
|
1538
|
-
});
|
1539
|
-
};
|
1540
|
-
|
1541
|
-
DragElement.prototype.remove = function() {
|
1542
|
-
return this.$element.remove();
|
1543
|
-
};
|
1544
|
-
|
1545
|
-
return DragElement;
|
1984
|
+
return DragAndDropHandler;
|
1546
1985
|
|
1547
1986
|
})();
|
1548
1987
|
|
1549
1988
|
this.Tree.Node = Node;
|
1550
1989
|
|
1551
|
-
}).call(this);
|
1990
|
+
}).call(this);
|