fancytree-rails 2.0.0.pre.11.pre.1 → 2.1.0.pre.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/3th-party/jquery-ui.License.txt +2 -0
- data/README.md +7 -1
- data/Rakefile +21 -5
- data/{vendor → app}/assets/images/fancytree/icons.gif +0 -0
- data/{vendor → app}/assets/images/fancytree/loading.gif +0 -0
- data/app/assets/images/fancytree/skin-lion/icons.gif +0 -0
- data/{vendor → app}/assets/images/fancytree/skin-lion/loading.gif +0 -0
- data/app/assets/images/fancytree/skin-themeroller/icons.gif +0 -0
- data/{vendor → app}/assets/images/fancytree/skin-themeroller/loading.gif +0 -0
- data/app/assets/images/fancytree/skin-vista/icons.gif +0 -0
- data/{vendor → app}/assets/images/fancytree/skin-vista/loading.gif +0 -0
- data/app/assets/images/fancytree/skin-win7/icons.gif +0 -0
- data/{vendor → app}/assets/images/fancytree/skin-win7/loading.gif +0 -0
- data/{vendor → app}/assets/images/fancytree/skin-win8-xxl/icons.gif +0 -0
- data/{vendor → app}/assets/images/fancytree/skin-win8-xxl/loading.gif +0 -0
- data/app/assets/images/fancytree/skin-win8/icons.gif +0 -0
- data/{vendor → app}/assets/images/fancytree/skin-win8/loading.gif +0 -0
- data/{vendor → app}/assets/images/fancytree/skin-xp/icons-rtl.gif +0 -0
- data/{vendor → app}/assets/images/fancytree/skin-xp/icons.gif +0 -0
- data/{vendor → app}/assets/images/fancytree/skin-xp/loading.gif +0 -0
- data/{vendor → app}/assets/images/fancytree/skin-xp/vline-rtl.gif +0 -0
- data/{vendor → app}/assets/images/fancytree/skin-xp/vline.gif +0 -0
- data/{vendor → app}/assets/javascripts/fancytree.js +0 -0
- data/{vendor → app}/assets/javascripts/fancytree/MIT-LICENSE.txt +0 -0
- data/{vendor → app}/assets/javascripts/fancytree/jquery.fancytree-all.js +346 -333
- data/app/assets/javascripts/fancytree/jquery.fancytree-custom.min.js +41 -0
- data/{vendor → app}/assets/javascripts/fancytree/jquery.fancytree.js +109 -66
- data/app/assets/javascripts/fancytree/jquery.fancytree.min.js +14 -0
- data/{vendor → app}/assets/javascripts/fancytree/src/jquery.fancytree.childcounter.js +3 -3
- data/{vendor → app}/assets/javascripts/fancytree/src/jquery.fancytree.clones.js +36 -6
- data/{vendor → app}/assets/javascripts/fancytree/src/jquery.fancytree.columnview.js +2 -2
- data/{vendor → app}/assets/javascripts/fancytree/src/jquery.fancytree.debug.js +2 -2
- data/{vendor → app}/assets/javascripts/fancytree/src/jquery.fancytree.dnd.js +35 -51
- data/{vendor → app}/assets/javascripts/fancytree/src/jquery.fancytree.edit.js +5 -9
- data/{vendor → app}/assets/javascripts/fancytree/src/jquery.fancytree.filter.js +54 -66
- data/{vendor → app}/assets/javascripts/fancytree/src/jquery.fancytree.glyph.js +6 -9
- data/{vendor → app}/assets/javascripts/fancytree/src/jquery.fancytree.gridnav.js +2 -2
- data/{vendor → app}/assets/javascripts/fancytree/src/jquery.fancytree.js +109 -66
- data/{vendor → app}/assets/javascripts/fancytree/src/jquery.fancytree.menu.js +2 -2
- data/{vendor → app}/assets/javascripts/fancytree/src/jquery.fancytree.persist.js +106 -112
- data/{vendor → app}/assets/javascripts/fancytree/src/jquery.fancytree.table.js +23 -9
- data/{vendor → app}/assets/javascripts/fancytree/src/jquery.fancytree.themeroller.js +3 -6
- data/{vendor/assets/stylesheets/fancytree/skin-awesome/ui.fancytree.css → app/assets/stylesheets/fancytree/skin-awesome/ui.fancytree.css.erb} +30 -5
- data/app/assets/stylesheets/fancytree/skin-awesome/ui.fancytree.min.css.erb +6 -0
- data/{vendor/assets/stylesheets/fancytree/skin-bootstrap/ui.fancytree.css → app/assets/stylesheets/fancytree/skin-bootstrap/ui.fancytree.css.erb} +31 -6
- data/app/assets/stylesheets/fancytree/skin-bootstrap/ui.fancytree.min.css.erb +6 -0
- data/{vendor/assets/stylesheets/fancytree/skin-lion/ui.fancytree.css → app/assets/stylesheets/fancytree/skin-lion/ui.fancytree.css.erb} +35 -14
- data/app/assets/stylesheets/fancytree/skin-lion/ui.fancytree.min.css.erb +6 -0
- data/{vendor/assets/stylesheets/fancytree/skin-themeroller/ui.fancytree.css → app/assets/stylesheets/fancytree/skin-themeroller/ui.fancytree.css.erb} +1 -1
- data/{vendor/assets/stylesheets/fancytree/skin-themeroller/ui.fancytree.min.css → app/assets/stylesheets/fancytree/skin-themeroller/ui.fancytree.min.css.erb} +0 -0
- data/{vendor/assets/stylesheets/fancytree/skin-vista/ui.fancytree.css → app/assets/stylesheets/fancytree/skin-vista/ui.fancytree.css.erb} +35 -14
- data/app/assets/stylesheets/fancytree/skin-vista/ui.fancytree.min.css.erb +6 -0
- data/{vendor/assets/stylesheets/fancytree/skin-win7/ui.fancytree.css → app/assets/stylesheets/fancytree/skin-win7/ui.fancytree.css.erb} +35 -14
- data/app/assets/stylesheets/fancytree/skin-win7/ui.fancytree.min.css.erb +6 -0
- data/{vendor/assets/stylesheets/fancytree/skin-win8-xxl/ui.fancytree.css → app/assets/stylesheets/fancytree/skin-win8-xxl/ui.fancytree.css.erb} +37 -16
- data/app/assets/stylesheets/fancytree/skin-win8-xxl/ui.fancytree.min.css.erb +11 -0
- data/{vendor/assets/stylesheets/fancytree/skin-win8/ui.fancytree.css → app/assets/stylesheets/fancytree/skin-win8/ui.fancytree.css.erb} +37 -16
- data/app/assets/stylesheets/fancytree/skin-win8/ui.fancytree.min.css.erb +6 -0
- data/{vendor/assets/stylesheets/fancytree/skin-xp/ui.fancytree.css → app/assets/stylesheets/fancytree/skin-xp/ui.fancytree.css.erb} +35 -14
- data/app/assets/stylesheets/fancytree/skin-xp/ui.fancytree.min.css.erb +6 -0
- data/{vendor → app}/assets/stylesheets/ui.fancytree.css +0 -0
- data/lib/fancytree/rails/version.rb +2 -2
- metadata +77 -76
- data/vendor/assets/images/fancytree/skin-lion/icons.gif +0 -0
- data/vendor/assets/images/fancytree/skin-themeroller/icons.gif +0 -0
- data/vendor/assets/images/fancytree/skin-vista/icons.gif +0 -0
- data/vendor/assets/images/fancytree/skin-win7/icons.gif +0 -0
- data/vendor/assets/images/fancytree/skin-win8/icons.gif +0 -0
- data/vendor/assets/javascripts/fancytree/jquery.fancytree-custom.min.js +0 -41
- data/vendor/assets/javascripts/fancytree/jquery.fancytree.min.js +0 -14
- data/vendor/assets/stylesheets/fancytree/skin-awesome/ui.fancytree.min.css +0 -6
- data/vendor/assets/stylesheets/fancytree/skin-bootstrap/ui.fancytree.min.css +0 -6
- data/vendor/assets/stylesheets/fancytree/skin-lion/ui.fancytree.min.css +0 -6
- data/vendor/assets/stylesheets/fancytree/skin-vista/ui.fancytree.min.css +0 -6
- data/vendor/assets/stylesheets/fancytree/skin-win7/ui.fancytree.min.css +0 -6
- data/vendor/assets/stylesheets/fancytree/skin-win8-xxl/ui.fancytree.min.css +0 -11
- data/vendor/assets/stylesheets/fancytree/skin-win8/ui.fancytree.min.css +0 -6
- data/vendor/assets/stylesheets/fancytree/skin-xp/ui.fancytree.min.css +0 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5a8617873a677ecca45f5f10e1878b044e209a57
|
4
|
+
data.tar.gz: d48c2f46d24a79dace0daf77f3e395f0d797ebcf
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 958f86489eb8b3742f11b524c80a513fa64343820821c40ec4ff3bd9bc4b0e7f0da21746980a1ea45cf2ea07b03d8ead4341f531dd10e20313f819797b003016
|
7
|
+
data.tar.gz: 6651dc979969d811827f7f1aaa95774600ee234087d73ec82dcf5239c484943f8e81f3b6731e1728ecd84167068d3845c1a2959912016c3bac6a5f599f08ef2b
|
data/README.md
CHANGED
@@ -53,10 +53,16 @@ Note that for awesome style (extension) to work you to:
|
|
53
53
|
2. Enable ```awesome``` extension in Fancytree.
|
54
54
|
3. Include extension code (```//= require fancytree/jquery.fancytree.awesome```) to ```app/assets/javascripts/application.js```.
|
55
55
|
|
56
|
+
## Credits
|
57
|
+
|
58
|
+
Pice of code of Raikefile copied form joliss/jquery-ui-rails. See
|
59
|
+
3th-party for its license.
|
60
|
+
|
56
61
|
## Contributing
|
57
62
|
|
58
63
|
1. Fork it
|
59
|
-
2. Create your feature branch (`git checkout -b my-new-feature`)
|
64
|
+
2. Create your feature branch (`git checkout -b my-new-feature`). You
|
65
|
+
can use rake fancytree:update for semiautomatic update of mar10/fancytree
|
60
66
|
3. Commit your changes (`git commit -am 'Add some feature'`)
|
61
67
|
4. Push to the branch (`git push origin my-new-feature`)
|
62
68
|
5. Create new Pull Request
|
data/Rakefile
CHANGED
@@ -2,6 +2,14 @@ require "bundler/gem_tasks"
|
|
2
2
|
require 'fileutils'
|
3
3
|
require 'fancytree/rails/version'
|
4
4
|
|
5
|
+
def build_image_dependencies(source_code)
|
6
|
+
image_dependencies = Set.new source_code.scan(/url\("?images\/([-_.a-zA-Z0-9]+)"?\)/).map(&:first)
|
7
|
+
code = image_dependencies.inject("") do |acc, img|
|
8
|
+
acc += " *= depend_on_asset \"jquery-ui/#{img}\"\n"
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
|
5
13
|
namespace :fancytree do
|
6
14
|
desc "Update FancyTree library from current version"
|
7
15
|
task :update => :build do
|
@@ -9,18 +17,26 @@ namespace :fancytree do
|
|
9
17
|
|
10
18
|
cd "dist" do
|
11
19
|
js = FileList['*'].exclude(/\Askip*/)
|
12
|
-
FileUtils.cp_r(js, '../../../
|
20
|
+
FileUtils.cp_r(js, '../../../app/assets/javascripts/fancytree')
|
13
21
|
|
14
22
|
css_files = Dir.glob("skin*/*.css")
|
15
23
|
css_files.each do |file|
|
16
|
-
|
17
|
-
|
24
|
+
source_code = File.read(file)
|
25
|
+
#source_code.gsub!(/url\("?images\/([-_.a-zA-Z0-9]+)"?\)/, 'url(<%= image_path("fancytree/\1") %>)')
|
26
|
+
source_code.gsub!(/url\("icons.gif"\)/, 'url(<%= image_path("fancytree/icons.gif") %>)')
|
27
|
+
source_code.gsub!(/\A(\/\*!.+?\*\/\s)/m, "\\1\n/*\n#{build_image_dependencies(source_code)} */\n\n") unless build_image_dependencies(source_code).empty?
|
28
|
+
|
29
|
+
output_path = "../../../app/assets/stylesheets/fancytree/#{file}.erb"
|
30
|
+
mkdir_p File.dirname(output_path)
|
31
|
+
File.open(output_path, "w") do |out|
|
32
|
+
out.write(source_code)
|
33
|
+
end
|
18
34
|
end
|
19
35
|
|
20
36
|
images_files = Dir.glob("skin*/*.gif")
|
21
37
|
images_files.each do |file|
|
22
|
-
mkdir_p "../../../
|
23
|
-
FileUtils.cp file, "../../../
|
38
|
+
mkdir_p "../../../app/assets/images/fancytree/#{File.dirname(file)}"
|
39
|
+
FileUtils.cp file, "../../../app/assets/images/fancytree/#{file}"
|
24
40
|
end
|
25
41
|
end
|
26
42
|
|
File without changes
|
File without changes
|
Binary file
|
File without changes
|
Binary file
|
File without changes
|
Binary file
|
File without changes
|
Binary file
|
File without changes
|
File without changes
|
File without changes
|
Binary file
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
@@ -7,8 +7,8 @@
|
|
7
7
|
* Released under the MIT license
|
8
8
|
* https://github.com/mar10/fancytree/wiki/LicenseInfo
|
9
9
|
*
|
10
|
-
* @version 2.
|
11
|
-
* @date 2014-
|
10
|
+
* @version 2.1.0
|
11
|
+
* @date 2014-05-29T16:44
|
12
12
|
*/
|
13
13
|
|
14
14
|
/** Core Fancytree module.
|
@@ -61,6 +61,11 @@ function consoleApply(method, args){
|
|
61
61
|
}
|
62
62
|
}
|
63
63
|
|
64
|
+
/*Return true if x is a FancytreeNode.*/
|
65
|
+
function _isNode(x){
|
66
|
+
return !!(x.tree && x.statusNodeType !== undefined);
|
67
|
+
}
|
68
|
+
|
64
69
|
/** Return true if dotted version string is equal or higher than requested version.
|
65
70
|
*
|
66
71
|
* See http://jsfiddle.net/mar10/FjSAN/
|
@@ -275,6 +280,8 @@ function FancytreeNode(parent, obj){
|
|
275
280
|
} else {
|
276
281
|
this.key = "_" + (FT._nextNodeKey++);
|
277
282
|
}
|
283
|
+
} else {
|
284
|
+
this.key = "" + this.key; // Convert to string (#217)
|
278
285
|
}
|
279
286
|
|
280
287
|
// Fix tree.activeNode
|
@@ -683,9 +690,8 @@ FancytreeNode.prototype = /** @lends FancytreeNode# */{
|
|
683
690
|
// recursively set children and render
|
684
691
|
this.removeChildren();
|
685
692
|
this.addChildren(dict.children);
|
686
|
-
}else{
|
687
|
-
this.renderTitle();
|
688
693
|
}
|
694
|
+
this.renderTitle();
|
689
695
|
/*
|
690
696
|
var children = dict.children;
|
691
697
|
if(children === undefined){
|
@@ -1350,79 +1356,93 @@ FancytreeNode.prototype = /** @lends FancytreeNode# */{
|
|
1350
1356
|
/**
|
1351
1357
|
*
|
1352
1358
|
* @param {boolean | PlainObject} [effects=false] animation options.
|
1353
|
-
* @param {
|
1359
|
+
* @param {object} [options=null] {topNode: null, effects: ..., parent: ...} this node will remain visible in
|
1354
1360
|
* any case, even if `this` is outside the scroll pane.
|
1355
1361
|
* @returns {$.Promise}
|
1356
1362
|
*/
|
1357
|
-
scrollIntoView: function(effects,
|
1358
|
-
|
1359
|
-
|
1363
|
+
scrollIntoView: function(effects, options) {
|
1364
|
+
if( options !== undefined && _isNode(options) ) {
|
1365
|
+
this.warn("scrollIntoView() with 'topNode' option is deprecated since 2014-05-08. Use 'options.topNode' instead.");
|
1366
|
+
options = {topNode: options};
|
1367
|
+
}
|
1368
|
+
// this.$scrollParent = (this.options.scrollParent === "auto") ? $ul.scrollParent() : $(this.options.scrollParent);
|
1369
|
+
// this.$scrollParent = this.$scrollParent.length ? this.$scrollParent || this.$container;
|
1370
|
+
|
1371
|
+
var topNodeY, nodeY, horzScrollbarHeight, containerOffsetTop,
|
1372
|
+
opts = $.extend({
|
1373
|
+
effects: (effects === true) ? {duration: 200, queue: false} : effects,
|
1374
|
+
scrollOfs: this.tree.options.scrollOfs,
|
1375
|
+
scrollParent: this.tree.options.scrollParent || this.tree.$container,
|
1376
|
+
topNode: null
|
1377
|
+
}, options),
|
1360
1378
|
dfd = new $.Deferred(),
|
1361
1379
|
that = this,
|
1362
|
-
nodeY = $(this.span).position().top,
|
1363
1380
|
nodeHeight = $(this.span).height(),
|
1364
|
-
$container =
|
1365
|
-
|
1366
|
-
|
1367
|
-
|
1368
|
-
|
1381
|
+
$container = $(opts.scrollParent),
|
1382
|
+
topOfs = opts.scrollOfs.top || 0,
|
1383
|
+
bottomOfs = opts.scrollOfs.bottom || 0,
|
1384
|
+
containerHeight = $container.height(),// - topOfs - bottomOfs,
|
1385
|
+
scrollTop = $container.scrollTop(),
|
1386
|
+
$animateTarget = $container,
|
1387
|
+
isParentWindow = $container[0] === window,
|
1388
|
+
topNode = opts.topNode || null,
|
1369
1389
|
newScrollTop = null;
|
1370
1390
|
|
1371
|
-
//
|
1372
|
-
|
1373
|
-
|
1374
|
-
|
1375
|
-
|
1376
|
-
|
1377
|
-
|
1378
|
-
|
1379
|
-
|
1380
|
-
|
1381
|
-
|
1391
|
+
// this.debug("scrollIntoView(), scrollTop=", scrollTop, opts.scrollOfs);
|
1392
|
+
_assert($(this.span).is(":visible"), "scrollIntoView node is invisible"); // otherwise we cannot calc offsets
|
1393
|
+
|
1394
|
+
if( isParentWindow ) {
|
1395
|
+
nodeY = $(this.span).offset().top;
|
1396
|
+
topNodeY = topNode ? $(topNode.span).offset().top : 0;
|
1397
|
+
$animateTarget = $("html,body");
|
1398
|
+
|
1399
|
+
} else {
|
1400
|
+
_assert($container[0] !== document && $container[0] !== document.body, "scrollParent should be an simple element or `window`, not document or body.");
|
1401
|
+
|
1402
|
+
containerOffsetTop = $container.offset().top,
|
1403
|
+
nodeY = $(this.span).offset().top - containerOffsetTop + scrollTop; // relative to scroll parent
|
1404
|
+
topNodeY = topNode ? $(topNode.span).offset().top - containerOffsetTop + scrollTop : 0;
|
1405
|
+
horzScrollbarHeight = Math.max(0, ($container.innerHeight() - $container[0].clientHeight));
|
1406
|
+
containerHeight -= horzScrollbarHeight;
|
1407
|
+
}
|
1408
|
+
|
1409
|
+
// this.debug(" scrollIntoView(), nodeY=", nodeY, "containerHeight=", containerHeight);
|
1410
|
+
if( nodeY < (scrollTop + topOfs) ){
|
1411
|
+
// Node is above visible container area
|
1412
|
+
newScrollTop = nodeY - topOfs;
|
1413
|
+
// this.debug(" scrollIntoView(), UPPER newScrollTop=", newScrollTop);
|
1414
|
+
|
1415
|
+
}else if((nodeY + nodeHeight) > (scrollTop + containerHeight - bottomOfs)){
|
1416
|
+
newScrollTop = nodeY + nodeHeight - containerHeight + bottomOfs;
|
1417
|
+
// this.debug(" scrollIntoView(), LOWER newScrollTop=", newScrollTop);
|
1382
1418
|
// If a topNode was passed, make sure that it is never scrolled
|
1383
1419
|
// outside the upper border
|
1384
1420
|
if(topNode){
|
1385
|
-
|
1386
|
-
if(
|
1387
|
-
newScrollTop =
|
1421
|
+
_assert($(topNode.span).is(":visible"));
|
1422
|
+
if( topNodeY < newScrollTop ){
|
1423
|
+
newScrollTop = topNodeY - topOfs;
|
1424
|
+
// this.debug(" scrollIntoView(), TOP newScrollTop=", newScrollTop);
|
1388
1425
|
}
|
1389
1426
|
}
|
1390
1427
|
}
|
1428
|
+
|
1391
1429
|
if(newScrollTop !== null){
|
1392
|
-
|
1393
|
-
|
1394
|
-
|
1395
|
-
effects.complete = function(){
|
1430
|
+
// this.debug(" scrollIntoView(), SET newScrollTop=", newScrollTop);
|
1431
|
+
if(opts.effects){
|
1432
|
+
opts.effects.complete = function(){
|
1396
1433
|
dfd.resolveWith(that);
|
1397
1434
|
};
|
1398
|
-
$
|
1435
|
+
$animateTarget.stop(true).animate({
|
1399
1436
|
scrollTop: newScrollTop
|
1400
|
-
}, effects);
|
1437
|
+
}, opts.effects);
|
1401
1438
|
}else{
|
1402
|
-
$
|
1439
|
+
$animateTarget[0].scrollTop = newScrollTop;
|
1403
1440
|
dfd.resolveWith(this);
|
1404
1441
|
}
|
1405
1442
|
}else{
|
1406
1443
|
dfd.resolveWith(this);
|
1407
1444
|
}
|
1408
1445
|
return dfd.promise();
|
1409
|
-
/* from jQuery.menu:
|
1410
|
-
var borderTop, paddingTop, offset, scroll, elementHeight, itemHeight;
|
1411
|
-
if ( this._hasScroll() ) {
|
1412
|
-
borderTop = parseFloat( $.css( this.activeMenu[0], "borderTopWidth" ) ) || 0;
|
1413
|
-
paddingTop = parseFloat( $.css( this.activeMenu[0], "paddingTop" ) ) || 0;
|
1414
|
-
offset = item.offset().top - this.activeMenu.offset().top - borderTop - paddingTop;
|
1415
|
-
scroll = this.activeMenu.scrollTop();
|
1416
|
-
elementHeight = this.activeMenu.height();
|
1417
|
-
itemHeight = item.height();
|
1418
|
-
|
1419
|
-
if ( offset < 0 ) {
|
1420
|
-
this.activeMenu.scrollTop( scroll + offset );
|
1421
|
-
} else if ( offset + itemHeight > elementHeight ) {
|
1422
|
-
this.activeMenu.scrollTop( scroll + offset - elementHeight + itemHeight );
|
1423
|
-
}
|
1424
|
-
}
|
1425
|
-
*/
|
1426
1446
|
},
|
1427
1447
|
|
1428
1448
|
/**Activate this node.
|
@@ -2817,8 +2837,8 @@ $.extend(Fancytree.prototype,
|
|
2817
2837
|
// folder or doctype icon
|
2818
2838
|
role = aria ? " role='img'" : "";
|
2819
2839
|
if ( icon && typeof icon === "string" ) {
|
2820
|
-
imageSrc = (icon.charAt(0) === "/") ? icon : (opts.imagePath + icon);
|
2821
|
-
ares.push("<img src='" + imageSrc + "' alt='' />");
|
2840
|
+
imageSrc = (icon.charAt(0) === "/") ? icon : ((opts.imagePath || "") + icon);
|
2841
|
+
ares.push("<img src='" + imageSrc + "' class='fancytree-icon' alt='' />");
|
2822
2842
|
} else if ( node.data.iconclass ) {
|
2823
2843
|
// TODO: review and test and document
|
2824
2844
|
ares.push("<span " + role + " class='fancytree-custom-icon" + " " + node.data.iconclass + "'></span>");
|
@@ -2834,7 +2854,6 @@ $.extend(Fancytree.prototype,
|
|
2834
2854
|
nodeTitle = opts.renderTitle.call(tree, {type: "renderTitle"}, ctx) || "";
|
2835
2855
|
}
|
2836
2856
|
if(!nodeTitle){
|
2837
|
-
// TODO: escape tooltip string
|
2838
2857
|
tooltip = node.tooltip ? " title='" + FT.escapeHtml(node.tooltip) + "'" : "";
|
2839
2858
|
id = aria ? " id='ftal_" + node.key + "'" : "";
|
2840
2859
|
role = aria ? " role='treeitem'" : "";
|
@@ -2979,7 +2998,6 @@ $.extend(Fancytree.prototype,
|
|
2979
2998
|
node = ctx.node,
|
2980
2999
|
tree = ctx.tree,
|
2981
3000
|
opts = ctx.options,
|
2982
|
-
// userEvent = !!ctx.originalEvent,
|
2983
3001
|
noEvents = (callOpts.noEvents === true),
|
2984
3002
|
isActive = (node === tree.activeNode);
|
2985
3003
|
|
@@ -3003,7 +3021,7 @@ $.extend(Fancytree.prototype,
|
|
3003
3021
|
}
|
3004
3022
|
if(opts.activeVisible){
|
3005
3023
|
// tree.nodeMakeVisible(ctx);
|
3006
|
-
node.makeVisible();
|
3024
|
+
node.makeVisible({scrollIntoView: false}); // nodeSetFocus will scroll
|
3007
3025
|
}
|
3008
3026
|
tree.activeNode = node;
|
3009
3027
|
tree.nodeRenderStatus(ctx);
|
@@ -3080,9 +3098,9 @@ $.extend(Fancytree.prototype,
|
|
3080
3098
|
}
|
3081
3099
|
// Trigger expand/collapse after expanding
|
3082
3100
|
dfd.done(function(){
|
3083
|
-
if( opts.autoScroll && !noAnimation ) {
|
3101
|
+
if( flag && opts.autoScroll && !noAnimation ) {
|
3084
3102
|
// Scroll down to last child, but keep current node visible
|
3085
|
-
node.getLastChild().scrollIntoView(true, node).always(function(){
|
3103
|
+
node.getLastChild().scrollIntoView(true, {topNode: node}).always(function(){
|
3086
3104
|
if( !noEvents ) {
|
3087
3105
|
ctx.tree._triggerNodeEvent(flag ? "expand" : "collapse", ctx);
|
3088
3106
|
}
|
@@ -3093,7 +3111,6 @@ $.extend(Fancytree.prototype,
|
|
3093
3111
|
}
|
3094
3112
|
}
|
3095
3113
|
});
|
3096
|
-
|
3097
3114
|
// vvv Code below is executed after loading finished:
|
3098
3115
|
_afterLoad = function(callback){
|
3099
3116
|
var duration, easing, isVisible, isExpanded;
|
@@ -3201,7 +3218,7 @@ $.extend(Fancytree.prototype,
|
|
3201
3218
|
this._callHook("treeSetFocus", ctx, true, true);
|
3202
3219
|
}
|
3203
3220
|
// this.nodeMakeVisible(ctx);
|
3204
|
-
node.makeVisible();
|
3221
|
+
node.makeVisible({scrollIntoView: false});
|
3205
3222
|
tree.focusNode = node;
|
3206
3223
|
// node.debug("FOCUS...");
|
3207
3224
|
// $(node.span).find(".fancytree-title").focus();
|
@@ -3512,6 +3529,8 @@ $.widget("ui.fancytree",
|
|
3512
3529
|
keyboard: true,
|
3513
3530
|
keyPathSeparator: "/",
|
3514
3531
|
minExpandLevel: 1,
|
3532
|
+
scrollOfs: {top: 0, bottom: 0},
|
3533
|
+
scrollParent: null,
|
3515
3534
|
selectMode: 2,
|
3516
3535
|
strings: {
|
3517
3536
|
loading: "Loading…",
|
@@ -3772,7 +3791,7 @@ $.extend($.ui.fancytree,
|
|
3772
3791
|
/** @lends Fancytree_Static# */
|
3773
3792
|
{
|
3774
3793
|
/** @type {string} */
|
3775
|
-
version: "2.
|
3794
|
+
version: "2.1.0", // Set to semver by 'grunt release'
|
3776
3795
|
/** @type {string} */
|
3777
3796
|
buildType: "production", // Set to 'production' by 'grunt build'
|
3778
3797
|
/** @type {int} */
|
@@ -3800,6 +3819,29 @@ $.extend($.ui.fancytree,
|
|
3800
3819
|
assert: function(cond, msg){
|
3801
3820
|
return _assert(cond, msg);
|
3802
3821
|
},
|
3822
|
+
/** Return a function that executes *fn* at most every *timeout* ms.
|
3823
|
+
* @param {integer} timeout
|
3824
|
+
* @param {function} fn
|
3825
|
+
* @param {boolean} [invokeAsap=false]
|
3826
|
+
* @param {any} [ctx]
|
3827
|
+
*/
|
3828
|
+
debounce : function(timeout, fn, invokeAsap, ctx) {
|
3829
|
+
var timer;
|
3830
|
+
if(arguments.length === 3 && typeof invokeAsap !== "boolean") {
|
3831
|
+
ctx = invokeAsap;
|
3832
|
+
invokeAsap = false;
|
3833
|
+
}
|
3834
|
+
return function() {
|
3835
|
+
var args = arguments;
|
3836
|
+
ctx = ctx || this;
|
3837
|
+
invokeAsap && !timer && fn.apply(ctx, args);
|
3838
|
+
clearTimeout(timer);
|
3839
|
+
timer = setTimeout(function() {
|
3840
|
+
invokeAsap || fn.apply(ctx, args);
|
3841
|
+
timer = null;
|
3842
|
+
}, timeout);
|
3843
|
+
};
|
3844
|
+
},
|
3803
3845
|
/** Write message to console if debugLevel >= 2
|
3804
3846
|
* @param {string} msg
|
3805
3847
|
*/
|
@@ -3850,8 +3892,7 @@ $.extend($.ui.fancytree,
|
|
3850
3892
|
getEventTarget: function(event){
|
3851
3893
|
var tcn = event && event.target ? event.target.className : "",
|
3852
3894
|
res = {node: this.getNode(event.target), type: undefined};
|
3853
|
-
//
|
3854
|
-
// a fast version of $(res.node).hasClass()
|
3895
|
+
// We use a fast version of $(res.node).hasClass()
|
3855
3896
|
// See http://jsperf.com/test-for-classname/2
|
3856
3897
|
if( /\bfancytree-title\b/.test(tcn) ){
|
3857
3898
|
res.type = "title";
|
@@ -3862,8 +3903,10 @@ $.extend($.ui.fancytree,
|
|
3862
3903
|
}else if( /\bfancytree-icon\b/.test(tcn) ){
|
3863
3904
|
res.type = "icon";
|
3864
3905
|
}else if( /\bfancytree-node\b/.test(tcn) ){
|
3865
|
-
//
|
3866
|
-
|
3906
|
+
// Somewhere near the title
|
3907
|
+
res.type = "title";
|
3908
|
+
}else if( event && event.target && $(event.target).closest(".fancytree-title").length ) {
|
3909
|
+
// #228: clicking an embedded element inside a title
|
3867
3910
|
res.type = "title";
|
3868
3911
|
}
|
3869
3912
|
return res;
|
@@ -4047,8 +4090,8 @@ $.extend($.ui.fancytree,
|
|
4047
4090
|
* Released under the MIT license
|
4048
4091
|
* https://github.com/mar10/fancytree/wiki/LicenseInfo
|
4049
4092
|
*
|
4050
|
-
* @version 2.
|
4051
|
-
* @date 2014-
|
4093
|
+
* @version 2.1.0
|
4094
|
+
* @date 2014-05-29T16:44
|
4052
4095
|
*/
|
4053
4096
|
|
4054
4097
|
// To keep the global namespace clean, we wrap everything in a closure
|
@@ -4170,7 +4213,7 @@ $.ui.fancytree.registerExtension({
|
|
4170
4213
|
opts = ctx.options,
|
4171
4214
|
extOpts = ctx.options.childcounter;
|
4172
4215
|
// Optionally check for dependencies with other extensions
|
4173
|
-
|
4216
|
+
/* this._requireExtension("glyph", false, false); */
|
4174
4217
|
// Call the base implementation
|
4175
4218
|
this._super(ctx);
|
4176
4219
|
// Add a class to the tree container
|
@@ -4223,8 +4266,8 @@ $.ui.fancytree.registerExtension({
|
|
4223
4266
|
* Released under the MIT license
|
4224
4267
|
* https://github.com/mar10/fancytree/wiki/LicenseInfo
|
4225
4268
|
*
|
4226
|
-
* @version 2.
|
4227
|
-
* @date 2014-
|
4269
|
+
* @version 2.1.0
|
4270
|
+
* @date 2014-05-29T16:44
|
4228
4271
|
*/
|
4229
4272
|
|
4230
4273
|
;(function($, window, document, undefined) {
|
@@ -4287,8 +4330,7 @@ function _initDragAndDrop(tree) {
|
|
4287
4330
|
addClasses: false,
|
4288
4331
|
tolerance: "intersect",
|
4289
4332
|
greedy: false
|
4290
|
-
|
4291
|
-
,
|
4333
|
+
/*
|
4292
4334
|
activate: function(event, ui) {
|
4293
4335
|
logMsg("droppable - activate", event, ui, this);
|
4294
4336
|
},
|
@@ -4326,32 +4368,24 @@ function _registerDnd() {
|
|
4326
4368
|
// 'draggable' was renamed to 'ui-draggable' since jQueryUI 1.10
|
4327
4369
|
var draggable = $(this).data("ui-draggable") || $(this).data("draggable"),
|
4328
4370
|
sourceNode = ui.helper.data("ftSourceNode") || null;
|
4329
|
-
// logMsg("draggable-connectToFancytree.start, %s", sourceNode);
|
4330
|
-
// logMsg(" this: %o", this);
|
4331
|
-
// logMsg(" event: %o", event);
|
4332
|
-
// logMsg(" draggable: %o", draggable);
|
4333
|
-
// logMsg(" ui: %o", ui);
|
4334
4371
|
|
4335
4372
|
if(sourceNode) {
|
4336
4373
|
// Adjust helper offset, so cursor is slightly outside top/left corner
|
4337
4374
|
draggable.offset.click.top = -2;
|
4338
4375
|
draggable.offset.click.left = + 16;
|
4339
|
-
// logMsg(" draggable2: %o", draggable);
|
4340
|
-
// logMsg(" draggable.offset.click FIXED: %s/%s", draggable.offset.click.left, draggable.offset.click.top);
|
4341
4376
|
// Trigger dragStart event
|
4342
4377
|
// TODO: when called as connectTo..., the return value is ignored(?)
|
4343
4378
|
return sourceNode.tree.ext.dnd._onDragEvent("start", sourceNode, null, event, ui, draggable);
|
4344
4379
|
}
|
4345
4380
|
},
|
4346
4381
|
drag: function(event, ui) {
|
4347
|
-
// 'draggable' was renamed to 'ui-draggable' since jQueryUI 1.10
|
4348
4382
|
var isHelper,
|
4383
|
+
// 'draggable' was renamed to 'ui-draggable' since jQueryUI 1.10
|
4349
4384
|
draggable = $(this).data("ui-draggable") || $(this).data("draggable"),
|
4350
4385
|
sourceNode = ui.helper.data("ftSourceNode") || null,
|
4351
4386
|
prevTargetNode = ui.helper.data("ftTargetNode") || null,
|
4352
4387
|
targetNode = $.ui.fancytree.getNode(event.target);
|
4353
|
-
|
4354
|
-
// logMsg("connectToFancytree.drag: helper: %o", ui.helper[0]);
|
4388
|
+
|
4355
4389
|
if(event.target && !targetNode){
|
4356
4390
|
// We got a drag event, but the targetNode could not be found
|
4357
4391
|
// at the event location. This may happen,
|
@@ -4364,7 +4398,6 @@ function _registerDnd() {
|
|
4364
4398
|
return;
|
4365
4399
|
}
|
4366
4400
|
}
|
4367
|
-
// logMsg("draggable-connectToFancytree.drag: targetNode(from event): %s, ftTargetNode: %s", targetNode, ui.helper.data("ftTargetNode"));
|
4368
4401
|
ui.helper.data("ftTargetNode", targetNode);
|
4369
4402
|
// Leaving a tree node
|
4370
4403
|
if(prevTargetNode && prevTargetNode !== targetNode ) {
|
@@ -4391,10 +4424,7 @@ function _registerDnd() {
|
|
4391
4424
|
// mouseDownEvent = draggable._mouseDownEvent,
|
4392
4425
|
eventType = event.type,
|
4393
4426
|
dropped = (eventType === "mouseup" && event.which === 1);
|
4394
|
-
|
4395
|
-
// logMsg("draggable-connectToFancytree.stop, %s", sourceNode);
|
4396
|
-
// logMsg(" type: %o, downEvent: %o, upEvent: %o", eventType, mouseDownEvent, event);
|
4397
|
-
// logMsg(" targetNode: %o", targetNode);
|
4427
|
+
|
4398
4428
|
if(!dropped){
|
4399
4429
|
logMsg("Drag was cancelled");
|
4400
4430
|
}
|
@@ -4418,8 +4448,7 @@ function _registerDnd() {
|
|
4418
4448
|
*
|
4419
4449
|
*/
|
4420
4450
|
|
4421
|
-
$.ui.fancytree.registerExtension(
|
4422
|
-
{
|
4451
|
+
$.ui.fancytree.registerExtension({
|
4423
4452
|
name: "dnd",
|
4424
4453
|
version: "0.1.0",
|
4425
4454
|
// Default options for this extension.
|
@@ -4440,9 +4469,7 @@ $.ui.fancytree.registerExtension(
|
|
4440
4469
|
draggable: null, // Additional options passed to jQuery draggable
|
4441
4470
|
droppable: null // Additional options passed to jQuery droppable
|
4442
4471
|
},
|
4443
|
-
|
4444
|
-
// `this` : Fancytree instance
|
4445
|
-
// `this._super`: the virtual function that was overriden (member of prev. extension or Fancytree)
|
4472
|
+
|
4446
4473
|
treeInit: function(ctx){
|
4447
4474
|
var tree = ctx.tree;
|
4448
4475
|
this._super(ctx);
|
@@ -4471,15 +4498,7 @@ $.ui.fancytree.registerExtension(
|
|
4471
4498
|
.css({"z-index": 1000})
|
4472
4499
|
.prependTo($(this.$div).parent());
|
4473
4500
|
// .prependTo("body");
|
4474
|
-
// logMsg("Creating marker: %o", this.$dropMarker);
|
4475
|
-
}
|
4476
|
-
/*
|
4477
|
-
if(hitMode === "start"){
|
4478
4501
|
}
|
4479
|
-
if(hitMode === "stop"){
|
4480
|
-
// sourceNode.removeClass("fancytree-drop-target");
|
4481
|
-
}
|
4482
|
-
*/
|
4483
4502
|
// this.$dropMarker.attr("class", hitMode);
|
4484
4503
|
if(hitMode === "after" || hitMode === "before" || hitMode === "over"){
|
4485
4504
|
// $source && $source.addClass("fancytree-drag-source");
|
@@ -4488,18 +4507,19 @@ $.ui.fancytree.registerExtension(
|
|
4488
4507
|
|
4489
4508
|
switch(hitMode){
|
4490
4509
|
case "before":
|
4491
|
-
instData
|
4492
|
-
|
4510
|
+
instData
|
4511
|
+
.$dropMarker.removeClass("fancytree-drop-after fancytree-drop-over")
|
4512
|
+
.addClass("fancytree-drop-before");
|
4493
4513
|
markerAt = "top";
|
4494
4514
|
break;
|
4495
4515
|
case "after":
|
4496
|
-
instData.$dropMarker.removeClass("fancytree-drop-before fancytree-drop-over")
|
4497
|
-
|
4516
|
+
instData.$dropMarker.removeClass("fancytree-drop-before fancytree-drop-over")
|
4517
|
+
.addClass("fancytree-drop-after");
|
4498
4518
|
markerAt = "bottom";
|
4499
4519
|
break;
|
4500
4520
|
default:
|
4501
|
-
instData.$dropMarker.removeClass("fancytree-drop-after fancytree-drop-before")
|
4502
|
-
|
4521
|
+
instData.$dropMarker.removeClass("fancytree-drop-after fancytree-drop-before")
|
4522
|
+
.addClass("fancytree-drop-over");
|
4503
4523
|
$target.addClass("fancytree-drop-target");
|
4504
4524
|
markerOffsetX = 8;
|
4505
4525
|
}
|
@@ -4594,15 +4614,15 @@ $.ui.fancytree.registerExtension(
|
|
4594
4614
|
dnd = opts.dnd,
|
4595
4615
|
ctx = this._makeHookContext(node, event, {otherNode: otherNode, ui: ui, draggable: draggable}),
|
4596
4616
|
res = null,
|
4597
|
-
nodeTag = $(node.span);
|
4617
|
+
$nodeTag = $(node.span);
|
4598
4618
|
|
4599
4619
|
switch (eventName) {
|
4600
4620
|
case "helper":
|
4601
4621
|
// Only event and node argument is available
|
4602
4622
|
$helper = $("<div class='fancytree-drag-helper'><span class='fancytree-drag-helper-img' /></div>")
|
4603
|
-
|
4604
|
-
.append(nodeTag.find("span.fancytree-title").clone());
|
4605
|
-
// issue 244: helper should be child of scrollParent
|
4623
|
+
.css({zIndex: 3, position: "relative"}) // so it appears above ext-wide selection bar
|
4624
|
+
.append($nodeTag.find("span.fancytree-title").clone());
|
4625
|
+
// DT issue 244: helper should be child of scrollParent
|
4606
4626
|
$("ul.fancytree-container", node.tree.$div).append($helper);
|
4607
4627
|
// Attach node reference to helper object
|
4608
4628
|
$helper.data("ftSourceNode", node);
|
@@ -4610,6 +4630,7 @@ $.ui.fancytree.registerExtension(
|
|
4610
4630
|
// logMsg("helper.sourceNode=%o", $helper.data("ftSourceNode"));
|
4611
4631
|
res = $helper;
|
4612
4632
|
break;
|
4633
|
+
|
4613
4634
|
case "start":
|
4614
4635
|
if( node.isStatusNode() ) {
|
4615
4636
|
res = false;
|
@@ -4621,12 +4642,13 @@ $.ui.fancytree.registerExtension(
|
|
4621
4642
|
//draggable._clear();
|
4622
4643
|
// NOTE: the return value seems to be ignored (drag is not canceled, when false is returned)
|
4623
4644
|
// TODO: call this._cancelDrag()?
|
4624
|
-
ui.helper.trigger("mouseup")
|
4625
|
-
|
4645
|
+
ui.helper.trigger("mouseup")
|
4646
|
+
.hide();
|
4626
4647
|
} else {
|
4627
|
-
nodeTag.addClass("fancytree-drag-source");
|
4648
|
+
$nodeTag.addClass("fancytree-drag-source");
|
4628
4649
|
}
|
4629
4650
|
break;
|
4651
|
+
|
4630
4652
|
case "enter":
|
4631
4653
|
if(dnd.preventRecursiveMoves && node.isDescendantOf(otherNode)){
|
4632
4654
|
r = false;
|
@@ -4653,6 +4675,7 @@ $.ui.fancytree.registerExtension(
|
|
4653
4675
|
ui.helper.data("enterResponse", res);
|
4654
4676
|
logMsg("helper.enterResponse: %o", res);
|
4655
4677
|
break;
|
4678
|
+
|
4656
4679
|
case "over":
|
4657
4680
|
enterResponse = ui.helper.data("enterResponse");
|
4658
4681
|
hitMode = null;
|
@@ -4664,11 +4687,11 @@ $.ui.fancytree.registerExtension(
|
|
4664
4687
|
hitMode = enterResponse;
|
4665
4688
|
} else {
|
4666
4689
|
// Calculate hitMode from relative cursor position.
|
4667
|
-
nodeOfs = nodeTag.offset();
|
4690
|
+
nodeOfs = $nodeTag.offset();
|
4668
4691
|
relPos = { x: event.pageX - nodeOfs.left,
|
4669
4692
|
y: event.pageY - nodeOfs.top };
|
4670
|
-
relPos2 = { x: relPos.x / nodeTag.width(),
|
4671
|
-
y: relPos.y / nodeTag.height() };
|
4693
|
+
relPos2 = { x: relPos.x / $nodeTag.width(),
|
4694
|
+
y: relPos.y / $nodeTag.height() };
|
4672
4695
|
|
4673
4696
|
if( enterResponse.after && relPos2.y > 0.75 ){
|
4674
4697
|
hitMode = "after";
|
@@ -4710,10 +4733,11 @@ $.ui.fancytree.registerExtension(
|
|
4710
4733
|
ctx.hitMode = hitMode;
|
4711
4734
|
res = dnd.dragOver(node, ctx);
|
4712
4735
|
}
|
4713
|
-
// issue 332
|
4736
|
+
// DT issue 332
|
4714
4737
|
// this._setDndStatus(otherNode, node, ui.helper, hitMode, res!==false);
|
4715
4738
|
this._local._setDndStatus(otherNode, node, ui.helper, hitMode, res!==false && hitMode !== null);
|
4716
4739
|
break;
|
4740
|
+
|
4717
4741
|
case "drop":
|
4718
4742
|
hitMode = ui.helper.data("hitMode");
|
4719
4743
|
if(hitMode && dnd.dragDrop){
|
@@ -4721,6 +4745,7 @@ $.ui.fancytree.registerExtension(
|
|
4721
4745
|
dnd.dragDrop(node, ctx);
|
4722
4746
|
}
|
4723
4747
|
break;
|
4748
|
+
|
4724
4749
|
case "leave":
|
4725
4750
|
// Cancel pending expand request
|
4726
4751
|
node.scheduleAction("cancel");
|
@@ -4731,14 +4756,16 @@ $.ui.fancytree.registerExtension(
|
|
4731
4756
|
dnd.dragLeave(node, ctx);
|
4732
4757
|
}
|
4733
4758
|
break;
|
4759
|
+
|
4734
4760
|
case "stop":
|
4735
|
-
nodeTag.removeClass("fancytree-drag-source");
|
4761
|
+
$nodeTag.removeClass("fancytree-drag-source");
|
4736
4762
|
if(dnd.dragStop){
|
4737
4763
|
dnd.dragStop(node, ctx);
|
4738
4764
|
}
|
4739
4765
|
break;
|
4766
|
+
|
4740
4767
|
default:
|
4741
|
-
|
4768
|
+
$.error("Unsupported drag event: " + eventName);
|
4742
4769
|
}
|
4743
4770
|
return res;
|
4744
4771
|
},
|
@@ -4763,8 +4790,8 @@ $.ui.fancytree.registerExtension(
|
|
4763
4790
|
* Released under the MIT license
|
4764
4791
|
* https://github.com/mar10/fancytree/wiki/LicenseInfo
|
4765
4792
|
*
|
4766
|
-
* @version 2.
|
4767
|
-
* @date 2014-
|
4793
|
+
* @version 2.1.0
|
4794
|
+
* @date 2014-05-29T16:44
|
4768
4795
|
*/
|
4769
4796
|
|
4770
4797
|
;(function($, window, document, undefined) {
|
@@ -4985,7 +5012,7 @@ $.ui.fancytree._FancytreeNodeClass.prototype.endEdit = function(){
|
|
4985
5012
|
* [ext-edit] Check if any node in this tree in edit mode.
|
4986
5013
|
*
|
4987
5014
|
* @returns {FancytreeNode | null}
|
4988
|
-
* @
|
5015
|
+
* @alias Fancytree#isEditing
|
4989
5016
|
* @requires jquery.fancytree.edit.js
|
4990
5017
|
*/
|
4991
5018
|
$.ui.fancytree._FancytreeClass.prototype.isEditing = function(){
|
@@ -4996,7 +5023,7 @@ $.ui.fancytree._FancytreeClass.prototype.isEditing = function(){
|
|
4996
5023
|
/**
|
4997
5024
|
* [ext-edit] Check if this node is in edit mode.
|
4998
5025
|
* @returns {Boolean} true if node is currently beeing edited
|
4999
|
-
* @
|
5026
|
+
* @alias FancytreeNode#isEditing
|
5000
5027
|
* @requires jquery.fancytree.edit.js
|
5001
5028
|
*/
|
5002
5029
|
$.ui.fancytree._FancytreeNodeClass.prototype.isEditing = function(){
|
@@ -5027,10 +5054,6 @@ $.ui.fancytree.registerExtension({
|
|
5027
5054
|
// Local attributes
|
5028
5055
|
currentNode: null,
|
5029
5056
|
|
5030
|
-
// Override virtual methods for this extension.
|
5031
|
-
// `this` : the Fancytree instance
|
5032
|
-
// `this._local`: the namespace that contains extension attributes and private methods (same as this.ext.EXTNAME)
|
5033
|
-
// `this._super`: the virtual function that was overridden (member of previous extension or Fancytree)
|
5034
5057
|
treeInit: function(ctx){
|
5035
5058
|
this._super(ctx);
|
5036
5059
|
this.$container.addClass("fancytree-ext-edit");
|
@@ -5042,7 +5065,7 @@ $.ui.fancytree.registerExtension({
|
|
5042
5065
|
return false;
|
5043
5066
|
}
|
5044
5067
|
}
|
5045
|
-
this._super(ctx);
|
5068
|
+
return this._super(ctx);
|
5046
5069
|
},
|
5047
5070
|
nodeDblclick: function(ctx) {
|
5048
5071
|
if( $.inArray("dblclick", ctx.options.edit.triggerStart) >= 0 ){
|
@@ -5082,8 +5105,8 @@ $.ui.fancytree.registerExtension({
|
|
5082
5105
|
* Released under the MIT license
|
5083
5106
|
* https://github.com/mar10/fancytree/wiki/LicenseInfo
|
5084
5107
|
*
|
5085
|
-
* @version 2.
|
5086
|
-
* @date 2014-
|
5108
|
+
* @version 2.1.0
|
5109
|
+
* @date 2014-05-29T16:44
|
5087
5110
|
*/
|
5088
5111
|
|
5089
5112
|
;(function($, window, document, undefined) {
|
@@ -5100,33 +5123,12 @@ function _escapeRegex(str){
|
|
5100
5123
|
return (str + "").replace(/([.?*+\^\$\[\]\\(){}|-])/g, "\\$1");
|
5101
5124
|
}
|
5102
5125
|
|
5103
|
-
|
5104
|
-
// function setChildRowVisibility(parent, flag) {
|
5105
|
-
// parent.visit(function(node){
|
5106
|
-
// var tr = node.tr;
|
5107
|
-
// if(tr){
|
5108
|
-
// tr.style.display = flag ? "" : "none";
|
5109
|
-
// }
|
5110
|
-
// node.debug(flag ? "SHOW" : "HIDE");
|
5111
|
-
// if(!node.expanded){
|
5112
|
-
// return "skip";
|
5113
|
-
// }
|
5114
|
-
// });
|
5115
|
-
// }
|
5116
|
-
|
5117
|
-
/**
|
5118
|
-
* [ext-filter] Dimm or hide nodes.
|
5119
|
-
*
|
5120
|
-
* @param {function | string} filter
|
5121
|
-
* @returns {integer} count
|
5122
|
-
* @alias Fancytree#applyFilter
|
5123
|
-
* @requires jquery.fancytree.filter.js
|
5124
|
-
*/
|
5125
|
-
$.ui.fancytree._FancytreeClass.prototype.applyFilter = function(filter){
|
5126
|
+
$.ui.fancytree._FancytreeClass.prototype._applyFilterImpl = function(filter, branchMode, leavesOnly){
|
5126
5127
|
var match, re,
|
5127
5128
|
count = 0,
|
5128
|
-
hideMode = this.options.filter.mode === "hide"
|
5129
|
-
leavesOnly = this.options.filter.leavesOnly;
|
5129
|
+
hideMode = this.options.filter.mode === "hide";
|
5130
|
+
// leavesOnly = !branchMode && this.options.filter.leavesOnly;
|
5131
|
+
leavesOnly = !!leavesOnly && !branchMode;
|
5130
5132
|
|
5131
5133
|
// Default to 'match title substring (not case sensitive)'
|
5132
5134
|
if(typeof filter === "string"){
|
@@ -5146,7 +5148,6 @@ $.ui.fancytree._FancytreeClass.prototype.applyFilter = function(filter){
|
|
5146
5148
|
}
|
5147
5149
|
// Reset current filter
|
5148
5150
|
this.visit(function(node){
|
5149
|
-
// node.hide = hideMode && true;
|
5150
5151
|
delete node.match;
|
5151
5152
|
delete node.subMatch;
|
5152
5153
|
});
|
@@ -5154,12 +5155,16 @@ $.ui.fancytree._FancytreeClass.prototype.applyFilter = function(filter){
|
|
5154
5155
|
this.visit(function(node){
|
5155
5156
|
if ((!leavesOnly || node.children == null) && filter(node)) {
|
5156
5157
|
count++;
|
5157
|
-
// node.hide = false;
|
5158
5158
|
node.match = true;
|
5159
5159
|
node.visitParents(function(p){
|
5160
|
-
// p.hide = false;
|
5161
5160
|
p.subMatch = true;
|
5162
5161
|
});
|
5162
|
+
if( branchMode ) {
|
5163
|
+
node.visit(function(p){
|
5164
|
+
p.match = true;
|
5165
|
+
});
|
5166
|
+
return "skip";
|
5167
|
+
}
|
5163
5168
|
}
|
5164
5169
|
});
|
5165
5170
|
// Redraw
|
@@ -5167,15 +5172,45 @@ $.ui.fancytree._FancytreeClass.prototype.applyFilter = function(filter){
|
|
5167
5172
|
return count;
|
5168
5173
|
};
|
5169
5174
|
|
5175
|
+
/**
|
5176
|
+
* [ext-filter] Dimm or hide nodes.
|
5177
|
+
*
|
5178
|
+
* @param {function | string} filter
|
5179
|
+
* @param {boolean} [leavesOnly=false]
|
5180
|
+
* @returns {integer} count
|
5181
|
+
* @alias Fancytree#filterNodes
|
5182
|
+
* @requires jquery.fancytree.filter.js
|
5183
|
+
*/
|
5184
|
+
$.ui.fancytree._FancytreeClass.prototype.filterNodes = function(filter, leavesOnly){
|
5185
|
+
return this._applyFilterImpl(filter, false, leavesOnly);
|
5186
|
+
};
|
5187
|
+
|
5188
|
+
$.ui.fancytree._FancytreeClass.prototype.applyFilter = function(filter){
|
5189
|
+
this.warn("Fancytree.applyFilter() is deprecated since 2014-05-10. Use .filterNodes() instead.");
|
5190
|
+
return this.filterNodes.apply(this, arguments);
|
5191
|
+
};
|
5192
|
+
|
5193
|
+
/**
|
5194
|
+
* [ext-filter] Dimm or hide whole branches.
|
5195
|
+
*
|
5196
|
+
* @param {function | string} filter
|
5197
|
+
* @returns {integer} count
|
5198
|
+
* @alias Fancytree#filterBranches
|
5199
|
+
* @requires jquery.fancytree.filter.js
|
5200
|
+
*/
|
5201
|
+
$.ui.fancytree._FancytreeClass.prototype.filterBranches = function(filter){
|
5202
|
+
return this._applyFilterImpl(filter, true, null);
|
5203
|
+
};
|
5204
|
+
|
5205
|
+
|
5170
5206
|
/**
|
5171
5207
|
* [ext-filter] Reset the filter.
|
5172
5208
|
*
|
5173
|
-
* @alias Fancytree#
|
5209
|
+
* @alias Fancytree#clearFilter
|
5174
5210
|
* @requires jquery.fancytree.filter.js
|
5175
5211
|
*/
|
5176
5212
|
$.ui.fancytree._FancytreeClass.prototype.clearFilter = function(){
|
5177
5213
|
this.visit(function(node){
|
5178
|
-
// delete node.hide;
|
5179
5214
|
delete node.match;
|
5180
5215
|
delete node.subMatch;
|
5181
5216
|
});
|
@@ -5190,22 +5225,14 @@ $.ui.fancytree._FancytreeClass.prototype.clearFilter = function(){
|
|
5190
5225
|
*/
|
5191
5226
|
$.ui.fancytree.registerExtension({
|
5192
5227
|
name: "filter",
|
5193
|
-
version: "0.0
|
5228
|
+
version: "0.2.0",
|
5194
5229
|
// Default options for this extension.
|
5195
5230
|
options: {
|
5196
|
-
mode: "dimm"
|
5197
|
-
leavesOnly: false
|
5231
|
+
mode: "dimm"
|
5232
|
+
// leavesOnly: false
|
5198
5233
|
},
|
5199
|
-
// Override virtual methods for this extension.
|
5200
|
-
// `this` : is this extension object
|
5201
|
-
// `this._base` : the Fancytree instance
|
5202
|
-
// `this._super`: the virtual function that was overriden (member of prev. extension or Fancytree)
|
5203
5234
|
treeInit: function(ctx){
|
5204
5235
|
this._super(ctx);
|
5205
|
-
// ctx.tree.filter = false;
|
5206
|
-
},
|
5207
|
-
treeDestroy: function(ctx){
|
5208
|
-
this._super(ctx);
|
5209
5236
|
},
|
5210
5237
|
nodeRenderStatus: function(ctx) {
|
5211
5238
|
// Set classes for current status
|
@@ -5215,31 +5242,15 @@ $.ui.fancytree.registerExtension({
|
|
5215
5242
|
$span = $(node[tree.statusClassPropName]);
|
5216
5243
|
|
5217
5244
|
res = this._super(ctx);
|
5218
|
-
|
5219
|
-
if(!$span.length){
|
5220
|
-
return res; // nothing to do, if node was not yet rendered
|
5221
|
-
}
|
5222
|
-
if(!tree.enableFilter){
|
5245
|
+
// nothing to do, if node was not yet rendered
|
5246
|
+
if( !$span.length || !tree.enableFilter ) {
|
5223
5247
|
return res;
|
5224
5248
|
}
|
5225
|
-
$span
|
5226
|
-
|
5227
|
-
|
5228
|
-
|
5229
|
-
|
5230
|
-
// // visible = !!(node.match || node.subMatch);
|
5231
|
-
// visible = !node.hide;
|
5232
|
-
// node.debug(node.title + ": visible=" + visible);
|
5233
|
-
// if( node.li ) {
|
5234
|
-
// $(node.li).toggle(visible);
|
5235
|
-
// } else if( node.tr ) {
|
5236
|
-
// // Show/hide all rows that are structural descendants of `parent`
|
5237
|
-
// $(node.tr).toggle(visible);
|
5238
|
-
// // if( !visible ) {
|
5239
|
-
// // setChildRowVisibility(node, visible);
|
5240
|
-
// // }
|
5241
|
-
// }
|
5242
|
-
// }
|
5249
|
+
$span
|
5250
|
+
.toggleClass("fancytree-match", !!node.match)
|
5251
|
+
.toggleClass("fancytree-submatch", !!node.subMatch)
|
5252
|
+
.toggleClass("fancytree-hide", !(node.match || node.subMatch));
|
5253
|
+
|
5243
5254
|
return res;
|
5244
5255
|
}
|
5245
5256
|
});
|
@@ -5256,8 +5267,8 @@ $.ui.fancytree.registerExtension({
|
|
5256
5267
|
* Released under the MIT license
|
5257
5268
|
* https://github.com/mar10/fancytree/wiki/LicenseInfo
|
5258
5269
|
*
|
5259
|
-
* @version 2.
|
5260
|
-
* @date 2014-
|
5270
|
+
* @version 2.1.0
|
5271
|
+
* @date 2014-05-29T16:44
|
5261
5272
|
*/
|
5262
5273
|
|
5263
5274
|
;(function($, window, document, undefined) {
|
@@ -5274,7 +5285,7 @@ function _getIcon(opts, type){
|
|
5274
5285
|
|
5275
5286
|
$.ui.fancytree.registerExtension({
|
5276
5287
|
name: "glyph",
|
5277
|
-
version: "0.0
|
5288
|
+
version: "0.1.0",
|
5278
5289
|
// Default options for this extension.
|
5279
5290
|
options: {
|
5280
5291
|
prefix: "icon-",
|
@@ -5288,19 +5299,15 @@ $.ui.fancytree.registerExtension({
|
|
5288
5299
|
error: "icon-exclamation-sign",
|
5289
5300
|
expanderClosed: "icon-caret-right",
|
5290
5301
|
expanderLazy: "icon-angle-right",
|
5291
|
-
// expanderLazy: "icon-refresh icon-spin",
|
5292
5302
|
expanderOpen: "icon-caret-down",
|
5293
5303
|
folder: "icon-folder-close-alt",
|
5294
5304
|
folderOpen: "icon-folder-open-alt",
|
5295
5305
|
loading: "icon-refresh icon-spin",
|
5296
|
-
// loading: "icon-spinner icon-spin"
|
5297
5306
|
noExpander: ""
|
5298
5307
|
},
|
5299
5308
|
icon: null // TODO: allow callback here
|
5300
5309
|
},
|
5301
|
-
|
5302
|
-
// `this` : is this extension object
|
5303
|
-
// `this._super`: the virtual function that was overriden (member of prev. extension or Fancytree)
|
5310
|
+
|
5304
5311
|
treeInit: function(ctx){
|
5305
5312
|
var tree = ctx.tree;
|
5306
5313
|
this._super(ctx);
|
@@ -5364,7 +5371,8 @@ $.ui.fancytree.registerExtension({
|
|
5364
5371
|
if(node.parent){
|
5365
5372
|
span = $("span.fancytree-expander", node.span).get(0);
|
5366
5373
|
}else{
|
5367
|
-
span = $(".fancytree-statusnode-wait, .fancytree-statusnode-error", node[this.nodeContainerAttrName])
|
5374
|
+
span = $(".fancytree-statusnode-wait, .fancytree-statusnode-error", node[this.nodeContainerAttrName])
|
5375
|
+
.find("span.fancytree-expander").get(0);
|
5368
5376
|
}
|
5369
5377
|
if( status === "loading"){
|
5370
5378
|
// $("span.fancytree-expander", ctx.node.span).addClass(_getIcon(opts, "loading"));
|
@@ -5387,8 +5395,8 @@ $.ui.fancytree.registerExtension({
|
|
5387
5395
|
* Released under the MIT license
|
5388
5396
|
* https://github.com/mar10/fancytree/wiki/LicenseInfo
|
5389
5397
|
*
|
5390
|
-
* @version 2.
|
5391
|
-
* @date 2014-
|
5398
|
+
* @version 2.1.0
|
5399
|
+
* @date 2014-05-29T16:44
|
5392
5400
|
*/
|
5393
5401
|
|
5394
5402
|
;(function($, window, document, undefined) {
|
@@ -5589,8 +5597,8 @@ $.ui.fancytree.registerExtension({
|
|
5589
5597
|
* Released under the MIT license
|
5590
5598
|
* https://github.com/mar10/fancytree/wiki/LicenseInfo
|
5591
5599
|
*
|
5592
|
-
* @version 2.
|
5593
|
-
* @date 2014-
|
5600
|
+
* @version 2.1.0
|
5601
|
+
* @date 2014-05-29T16:44
|
5594
5602
|
*/
|
5595
5603
|
|
5596
5604
|
;(function($, window, document, undefined) {
|
@@ -5617,15 +5625,13 @@ var ACTIVE = "active",
|
|
5617
5625
|
/* Recursively load lazy nodes
|
5618
5626
|
* @param {string} mode 'load', 'expand', false
|
5619
5627
|
*/
|
5620
|
-
function _loadLazyNodes(tree,
|
5628
|
+
function _loadLazyNodes(tree, local, keyList, mode, dfd) {
|
5621
5629
|
var i, key, l, node,
|
5622
5630
|
foundOne = false,
|
5623
5631
|
deferredList = [],
|
5624
|
-
|
5625
|
-
missingKeyList = []; //keyList.slice(0),
|
5632
|
+
missingKeyList = [];
|
5626
5633
|
|
5627
5634
|
keyList = keyList || [];
|
5628
|
-
// expand = expand !== false;
|
5629
5635
|
dfd = dfd || $.Deferred();
|
5630
5636
|
|
5631
5637
|
for( i=0, l=keyList.length; i<l; i++ ) {
|
@@ -5633,7 +5639,6 @@ function _loadLazyNodes(tree, instData, keyList, mode, dfd) {
|
|
5633
5639
|
node = tree.getNodeByKey(key);
|
5634
5640
|
if( node ) {
|
5635
5641
|
if( mode && node.isUndefined() ) {
|
5636
|
-
// lazyNodeList.push(node);
|
5637
5642
|
foundOne = true;
|
5638
5643
|
tree.debug("_loadLazyNodes: " + node + " is lazy: loading...");
|
5639
5644
|
if( mode === "expand" ) {
|
@@ -5644,8 +5649,6 @@ function _loadLazyNodes(tree, instData, keyList, mode, dfd) {
|
|
5644
5649
|
} else {
|
5645
5650
|
tree.debug("_loadLazyNodes: " + node + " already loaded.");
|
5646
5651
|
node.setExpanded();
|
5647
|
-
// node.expanded = true;
|
5648
|
-
// node.render();
|
5649
5652
|
}
|
5650
5653
|
} else {
|
5651
5654
|
missingKeyList.push(key);
|
@@ -5657,13 +5660,13 @@ function _loadLazyNodes(tree, instData, keyList, mode, dfd) {
|
|
5657
5660
|
// All lazy-expands have finished
|
5658
5661
|
if( foundOne && missingKeyList.length > 0 ) {
|
5659
5662
|
// If we read new nodes from server, try to resolve yet-missing keys
|
5660
|
-
_loadLazyNodes(tree,
|
5663
|
+
_loadLazyNodes(tree, local, missingKeyList, mode, dfd);
|
5661
5664
|
} else {
|
5662
5665
|
if( missingKeyList.length ) {
|
5663
5666
|
tree.warn("_loadLazyNodes: could not load those keys: ", missingKeyList);
|
5664
5667
|
for( i=0, l=missingKeyList.length; i<l; i++ ) {
|
5665
5668
|
key = keyList[i];
|
5666
|
-
|
5669
|
+
local._appendKey(EXPANDED, keyList[i], false);
|
5667
5670
|
}
|
5668
5671
|
}
|
5669
5672
|
dfd.resolve();
|
@@ -5682,26 +5685,21 @@ function _loadLazyNodes(tree, instData, keyList, mode, dfd) {
|
|
5682
5685
|
* @requires jquery.fancytree.persist.js
|
5683
5686
|
*/
|
5684
5687
|
$.ui.fancytree._FancytreeClass.prototype.clearCookies = function(types){
|
5685
|
-
var
|
5686
|
-
|
5688
|
+
var local = this.ext.persist,
|
5689
|
+
prefix = local.cookiePrefix;
|
5687
5690
|
|
5688
5691
|
types = types || "active expanded focus selected";
|
5689
|
-
// TODO: optimize
|
5690
5692
|
if(types.indexOf(ACTIVE) >= 0){
|
5691
|
-
|
5692
|
-
$.removeCookie(cookiePrefix + ACTIVE);
|
5693
|
+
local._data(prefix + ACTIVE, null);
|
5693
5694
|
}
|
5694
5695
|
if(types.indexOf(EXPANDED) >= 0){
|
5695
|
-
|
5696
|
-
$.removeCookie(cookiePrefix + EXPANDED);
|
5696
|
+
local._data(prefix + EXPANDED, null);
|
5697
5697
|
}
|
5698
5698
|
if(types.indexOf(FOCUS) >= 0){
|
5699
|
-
|
5700
|
-
$.removeCookie(cookiePrefix + FOCUS);
|
5699
|
+
local._data(prefix + FOCUS, null);
|
5701
5700
|
}
|
5702
5701
|
if(types.indexOf(SELECTED) >= 0){
|
5703
|
-
|
5704
|
-
$.removeCookie(cookiePrefix + SELECTED);
|
5702
|
+
local._data(prefix + SELECTED, null);
|
5705
5703
|
}
|
5706
5704
|
};
|
5707
5705
|
|
@@ -5716,15 +5714,15 @@ $.ui.fancytree._FancytreeClass.prototype.clearCookies = function(types){
|
|
5716
5714
|
* @requires jquery.fancytree.persist.js
|
5717
5715
|
*/
|
5718
5716
|
$.ui.fancytree._FancytreeClass.prototype.getPersistData = function(){
|
5719
|
-
var
|
5720
|
-
|
5721
|
-
delim =
|
5717
|
+
var local = this.ext.persist,
|
5718
|
+
prefix = local.cookiePrefix,
|
5719
|
+
delim = local.cookieDelimiter,
|
5722
5720
|
res = {};
|
5723
5721
|
|
5724
|
-
res[ACTIVE] =
|
5725
|
-
res[EXPANDED] = (
|
5726
|
-
res[SELECTED] = (
|
5727
|
-
res[FOCUS] =
|
5722
|
+
res[ACTIVE] = local._data(prefix + ACTIVE);
|
5723
|
+
res[EXPANDED] = (local._data(prefix + EXPANDED) || "").split(delim);
|
5724
|
+
res[SELECTED] = (local._data(prefix + SELECTED) || "").split(delim);
|
5725
|
+
res[FOCUS] = local._data(prefix + FOCUS);
|
5728
5726
|
return res;
|
5729
5727
|
};
|
5730
5728
|
|
@@ -5734,10 +5732,9 @@ $.ui.fancytree._FancytreeClass.prototype.getPersistData = function(){
|
|
5734
5732
|
*/
|
5735
5733
|
$.ui.fancytree.registerExtension({
|
5736
5734
|
name: "persist",
|
5737
|
-
version: "0.
|
5735
|
+
version: "0.3.0",
|
5738
5736
|
// Default options for this extension.
|
5739
5737
|
options: {
|
5740
|
-
// appendRequestInfo: false,
|
5741
5738
|
cookieDelimiter: "~",
|
5742
5739
|
cookiePrefix: undefined, // 'fancytree-<treeId>-' by default
|
5743
5740
|
cookie: {
|
@@ -5747,89 +5744,96 @@ $.ui.fancytree.registerExtension({
|
|
5747
5744
|
domain: "",
|
5748
5745
|
secure: false
|
5749
5746
|
},
|
5750
|
-
expandLazy: false,
|
5751
|
-
overrideSource: false,
|
5747
|
+
expandLazy: false, // true: recursively expand and load lazy nodes
|
5748
|
+
overrideSource: false, // true: cookie takes precedence over `source` data attributes.
|
5749
|
+
store: "auto", // 'cookie': force cookie, 'local': force localStore, 'session': force sessionStore
|
5752
5750
|
types: "active expanded focus selected"
|
5753
5751
|
},
|
5754
5752
|
|
5753
|
+
/* Generic read/write string data to cookie, sessionStorage or localStorage. */
|
5754
|
+
_data: function(key, value){
|
5755
|
+
var ls = this._local.localStorage; // null, sessionStorage, or localStorage
|
5756
|
+
|
5757
|
+
if( value === undefined ) {
|
5758
|
+
return ls ? ls.getItem(key) : $.cookie(key);
|
5759
|
+
} else if ( value === null ) {
|
5760
|
+
if( ls ) {
|
5761
|
+
ls.removeItem(key);
|
5762
|
+
} else {
|
5763
|
+
$.removeCookie(key);
|
5764
|
+
}
|
5765
|
+
} else {
|
5766
|
+
if( ls ) {
|
5767
|
+
ls.setItem(key, value);
|
5768
|
+
} else {
|
5769
|
+
$.cookie(key, value, this.options.persist.cookie);
|
5770
|
+
}
|
5771
|
+
}
|
5772
|
+
},
|
5773
|
+
|
5755
5774
|
/* Append `key` to a cookie. */
|
5756
|
-
|
5775
|
+
_appendKey: function(type, key, flag){
|
5757
5776
|
key = "" + key; // #90
|
5758
|
-
var
|
5777
|
+
var local = this._local,
|
5759
5778
|
instOpts = this.options.persist,
|
5760
|
-
|
5761
|
-
|
5762
|
-
|
5763
|
-
|
5779
|
+
delim = instOpts.cookieDelimiter,
|
5780
|
+
cookieName = local.cookiePrefix + type,
|
5781
|
+
data = local._data(cookieName),
|
5782
|
+
keyList = data ? data.split(delim) : [],
|
5783
|
+
idx = $.inArray(key, keyList);
|
5764
5784
|
// Remove, even if we add a key, so the key is always the last entry
|
5765
5785
|
if(idx >= 0){
|
5766
|
-
|
5786
|
+
keyList.splice(idx, 1);
|
5767
5787
|
}
|
5768
5788
|
// Append key to cookie
|
5769
5789
|
if(flag){
|
5770
|
-
|
5790
|
+
keyList.push(key);
|
5771
5791
|
}
|
5772
|
-
|
5792
|
+
local._data(cookieName, keyList.join(delim));
|
5773
5793
|
},
|
5774
|
-
|
5775
|
-
// `this` : is this Fancytree object
|
5776
|
-
// `this._super`: the virtual function that was overridden (member of prev. extension or Fancytree)
|
5794
|
+
|
5777
5795
|
treeInit: function(ctx){
|
5778
5796
|
var tree = ctx.tree,
|
5779
5797
|
opts = ctx.options,
|
5780
|
-
|
5798
|
+
local = this._local,
|
5781
5799
|
instOpts = this.options.persist;
|
5782
5800
|
|
5783
|
-
|
5801
|
+
// For 'auto' or 'cookie' mode, the cookie plugin must be available
|
5802
|
+
_assert(instOpts.store === "localStore" || $.cookie, "Missing required plugin for 'persist' extension: jquery.cookie.js");
|
5784
5803
|
|
5785
|
-
|
5786
|
-
|
5787
|
-
|
5788
|
-
|
5789
|
-
|
5804
|
+
local.cookiePrefix = instOpts.cookiePrefix || ("fancytree-" + tree._id + "-");
|
5805
|
+
local.storeActive = instOpts.types.indexOf(ACTIVE) >= 0;
|
5806
|
+
local.storeExpanded = instOpts.types.indexOf(EXPANDED) >= 0;
|
5807
|
+
local.storeSelected = instOpts.types.indexOf(SELECTED) >= 0;
|
5808
|
+
local.storeFocus = instOpts.types.indexOf(FOCUS) >= 0;
|
5809
|
+
if( instOpts.store === "cookie" || !window.localStorage ) {
|
5810
|
+
local.localStorage = null;
|
5811
|
+
} else {
|
5812
|
+
local.localStorage = (instOpts.store === "local") ? window.localStorage : window.sessionStorage;
|
5813
|
+
}
|
5790
5814
|
|
5791
5815
|
// Bind init-handler to apply cookie state
|
5792
5816
|
tree.$div.bind("fancytreeinit", function(event){
|
5793
5817
|
var cookie, dfd, i, keyList, node,
|
5794
|
-
prevFocus = $.cookie(
|
5818
|
+
prevFocus = $.cookie(local.cookiePrefix + FOCUS); // record this before node.setActive() overrides it;
|
5795
5819
|
|
5796
5820
|
tree.debug("COOKIE " + document.cookie);
|
5797
5821
|
|
5798
|
-
cookie =
|
5822
|
+
cookie = local._data(local.cookiePrefix + EXPANDED);
|
5799
5823
|
keyList = cookie && cookie.split(instOpts.cookieDelimiter);
|
5800
5824
|
|
5801
|
-
if(
|
5825
|
+
if( local.storeExpanded ) {
|
5802
5826
|
// Recursively load nested lazy nodes if expandLazy is 'expand' or 'load'
|
5803
5827
|
// Also remove expand-cookies for unmatched nodes
|
5804
|
-
dfd = _loadLazyNodes(tree,
|
5828
|
+
dfd = _loadLazyNodes(tree, local, keyList, instOpts.expandLazy ? "expand" : false , null);
|
5805
5829
|
} else {
|
5806
5830
|
// nothing to do
|
5807
5831
|
dfd = new $.Deferred().resolve();
|
5808
5832
|
}
|
5809
5833
|
|
5810
5834
|
dfd.done(function(){
|
5811
|
-
|
5812
|
-
|
5813
|
-
// cookie = $.cookie(instData.cookiePrefix + EXPANDED);
|
5814
|
-
// if(cookie){
|
5815
|
-
// keyList = cookie.split(instOpts.cookieDelimiter);
|
5816
|
-
// for(i=0; i<keyList.length; i++){
|
5817
|
-
// node = tree.getNodeByKey(keyList[i]);
|
5818
|
-
// if(node){
|
5819
|
-
// if(node.expanded === undefined || instOpts.overrideSource && (node.expanded === false)){
|
5820
|
-
// // node.setExpanded();
|
5821
|
-
// node.expanded = true;
|
5822
|
-
// node.render();
|
5823
|
-
// }
|
5824
|
-
// }else{
|
5825
|
-
// // node is no longer member of the tree: remove from cookie
|
5826
|
-
// instData._setKey(EXPANDED, keyList[i], false);
|
5827
|
-
// }
|
5828
|
-
// }
|
5829
|
-
// }
|
5830
|
-
// }
|
5831
|
-
if(instData.storeSelected){
|
5832
|
-
cookie = $.cookie(instData.cookiePrefix + SELECTED);
|
5835
|
+
if(local.storeSelected){
|
5836
|
+
cookie = local._data(local.cookiePrefix + SELECTED);
|
5833
5837
|
if(cookie){
|
5834
5838
|
keyList = cookie.split(instOpts.cookieDelimiter);
|
5835
5839
|
for(i=0; i<keyList.length; i++){
|
@@ -5842,13 +5846,13 @@ $.ui.fancytree.registerExtension({
|
|
5842
5846
|
}
|
5843
5847
|
}else{
|
5844
5848
|
// node is no longer member of the tree: remove from cookie also
|
5845
|
-
|
5849
|
+
local._appendKey(SELECTED, keyList[i], false);
|
5846
5850
|
}
|
5847
5851
|
}
|
5848
5852
|
}
|
5849
5853
|
}
|
5850
|
-
if(
|
5851
|
-
cookie =
|
5854
|
+
if(local.storeActive){
|
5855
|
+
cookie = local._data(local.cookiePrefix + ACTIVE);
|
5852
5856
|
if(cookie && (opts.persist.overrideSource || !tree.activeNode)){
|
5853
5857
|
node = tree.getNodeByKey(cookie);
|
5854
5858
|
if(node){
|
@@ -5856,7 +5860,7 @@ $.ui.fancytree.registerExtension({
|
|
5856
5860
|
}
|
5857
5861
|
}
|
5858
5862
|
}
|
5859
|
-
if(
|
5863
|
+
if(local.storeFocus && prevFocus){
|
5860
5864
|
node = tree.getNodeByKey(prevFocus);
|
5861
5865
|
if(node){
|
5862
5866
|
node.setFocus();
|
@@ -5865,59 +5869,57 @@ $.ui.fancytree.registerExtension({
|
|
5865
5869
|
});
|
5866
5870
|
});
|
5867
5871
|
// Init the tree
|
5868
|
-
this._super(ctx);
|
5872
|
+
return this._super(ctx);
|
5869
5873
|
},
|
5870
|
-
// treeDestroy: function(ctx){
|
5871
|
-
// this._super(ctx);
|
5872
|
-
// },
|
5873
5874
|
nodeSetActive: function(ctx, flag, opts) {
|
5874
|
-
var
|
5875
|
-
|
5875
|
+
var res,
|
5876
|
+
local = this._local;
|
5876
5877
|
|
5877
|
-
flag = flag !== false;
|
5878
|
-
this._super(ctx, flag, opts);
|
5878
|
+
flag = (flag !== false);
|
5879
|
+
res = this._super(ctx, flag, opts);
|
5879
5880
|
|
5880
|
-
if(
|
5881
|
-
|
5882
|
-
this.activeNode ? this.activeNode.key : null,
|
5883
|
-
instOpts.cookie);
|
5881
|
+
if(local.storeActive){
|
5882
|
+
local._data(local.cookiePrefix + ACTIVE, this.activeNode ? this.activeNode.key : null);
|
5884
5883
|
}
|
5884
|
+
return res;
|
5885
5885
|
},
|
5886
5886
|
nodeSetExpanded: function(ctx, flag, opts) {
|
5887
5887
|
var res,
|
5888
5888
|
node = ctx.node,
|
5889
|
-
|
5889
|
+
local = this._local;
|
5890
5890
|
|
5891
|
-
flag = flag !== false;
|
5891
|
+
flag = (flag !== false);
|
5892
5892
|
res = this._super(ctx, flag, opts);
|
5893
5893
|
|
5894
|
-
if(
|
5895
|
-
|
5894
|
+
if(local.storeExpanded){
|
5895
|
+
local._appendKey(EXPANDED, node.key, flag);
|
5896
5896
|
}
|
5897
5897
|
return res;
|
5898
5898
|
},
|
5899
|
-
nodeSetFocus: function(ctx) {
|
5900
|
-
var
|
5901
|
-
|
5899
|
+
nodeSetFocus: function(ctx, flag) {
|
5900
|
+
var res,
|
5901
|
+
local = this._local;
|
5902
5902
|
|
5903
|
-
|
5903
|
+
flag = (flag !== false);
|
5904
|
+
res = this._super(ctx, flag);
|
5904
5905
|
|
5905
|
-
if(
|
5906
|
-
|
5907
|
-
this.focusNode ? this.focusNode.key : null,
|
5908
|
-
instOpts.cookie);
|
5906
|
+
if(flag && local.storeFocus){
|
5907
|
+
local._data(local.cookiePrefix + FOCUS, this.focusNode ? this.focusNode.key : null);
|
5909
5908
|
}
|
5909
|
+
return res;
|
5910
5910
|
},
|
5911
5911
|
nodeSetSelected: function(ctx, flag) {
|
5912
|
-
var
|
5913
|
-
|
5912
|
+
var res,
|
5913
|
+
node = ctx.node,
|
5914
|
+
local = this._local;
|
5914
5915
|
|
5915
|
-
flag = flag !== false;
|
5916
|
-
this._super(ctx, flag);
|
5916
|
+
flag = (flag !== false);
|
5917
|
+
res = this._super(ctx, flag);
|
5917
5918
|
|
5918
|
-
if(
|
5919
|
-
|
5919
|
+
if(local.storeSelected){
|
5920
|
+
local._appendKey(SELECTED, node.key, flag);
|
5920
5921
|
}
|
5922
|
+
return res;
|
5921
5923
|
}
|
5922
5924
|
});
|
5923
5925
|
}(jQuery, window, document));
|
@@ -5933,8 +5935,8 @@ $.ui.fancytree.registerExtension({
|
|
5933
5935
|
* Released under the MIT license
|
5934
5936
|
* https://github.com/mar10/fancytree/wiki/LicenseInfo
|
5935
5937
|
*
|
5936
|
-
* @version 2.
|
5937
|
-
* @date 2014-
|
5938
|
+
* @version 2.1.0
|
5939
|
+
* @date 2014-05-29T16:44
|
5938
5940
|
*/
|
5939
5941
|
|
5940
5942
|
;(function($, window, document, undefined) {
|
@@ -6222,23 +6224,37 @@ $.ui.fancytree.registerExtension({
|
|
6222
6224
|
/* Expand node, return Deferred.promise. */
|
6223
6225
|
nodeSetExpanded: function(ctx, flag, opts) {
|
6224
6226
|
var dfd = new $.Deferred(),
|
6225
|
-
|
6227
|
+
subOpts = $.extend({}, opts, {noEvents: true, noAnimation: true});
|
6226
6228
|
|
6227
|
-
opts =
|
6229
|
+
opts = opts || {};
|
6228
6230
|
|
6229
6231
|
function _afterExpand(ok) {
|
6230
6232
|
flag = (flag !== false);
|
6231
6233
|
setChildRowVisibility(ctx.node, flag);
|
6232
|
-
if( !prevOpts.noEvents ) {
|
6233
|
-
ctx.tree._triggerNodeEvent(flag ? "expand" : "collapse", ctx);
|
6234
|
-
}
|
6235
6234
|
if( ok ) {
|
6236
|
-
|
6235
|
+
if( flag && ctx.options.autoScroll && !opts.noAnimation && ctx.node.hasChildren() ) {
|
6236
|
+
// Scroll down to last child, but keep current node visible
|
6237
|
+
ctx.node.getLastChild().scrollIntoView(true, {topNode: ctx.node}).always(function(){
|
6238
|
+
if( !opts.noEvents ) {
|
6239
|
+
ctx.tree._triggerNodeEvent(flag ? "expand" : "collapse", ctx);
|
6240
|
+
}
|
6241
|
+
dfd.resolveWith(ctx.node);
|
6242
|
+
});
|
6243
|
+
} else {
|
6244
|
+
if( !opts.noEvents ) {
|
6245
|
+
ctx.tree._triggerNodeEvent(flag ? "expand" : "collapse", ctx);
|
6246
|
+
}
|
6247
|
+
dfd.resolveWith(ctx.node);
|
6248
|
+
}
|
6237
6249
|
} else {
|
6250
|
+
if( !opts.noEvents ) {
|
6251
|
+
ctx.tree._triggerNodeEvent(flag ? "expand" : "collapse", ctx);
|
6252
|
+
}
|
6238
6253
|
dfd.rejectWith(ctx.node);
|
6239
6254
|
}
|
6240
6255
|
}
|
6241
|
-
|
6256
|
+
// Call base-expand with disabled events and animation
|
6257
|
+
this._super(ctx, flag, subOpts).done(function () {
|
6242
6258
|
_afterExpand(true);
|
6243
6259
|
}).fail(function () {
|
6244
6260
|
_afterExpand(false);
|
@@ -6281,8 +6297,8 @@ $.ui.fancytree.registerExtension({
|
|
6281
6297
|
* Released under the MIT license
|
6282
6298
|
* https://github.com/mar10/fancytree/wiki/LicenseInfo
|
6283
6299
|
*
|
6284
|
-
* @version 2.
|
6285
|
-
* @date 2014-
|
6300
|
+
* @version 2.1.0
|
6301
|
+
* @date 2014-05-29T16:44
|
6286
6302
|
*/
|
6287
6303
|
|
6288
6304
|
;(function($, window, document, undefined) {
|
@@ -6302,10 +6318,7 @@ $.ui.fancytree.registerExtension({
|
|
6302
6318
|
hoverClass: "ui-state-hover",
|
6303
6319
|
selectedClass: "ui-state-highlight"
|
6304
6320
|
},
|
6305
|
-
|
6306
|
-
// `this` : is this extension object
|
6307
|
-
// `this._base` : the Fancytree instance
|
6308
|
-
// `this._super`: the virtual function that was overriden (member of prev. extension or Fancytree)
|
6321
|
+
|
6309
6322
|
treeInit: function(ctx){
|
6310
6323
|
this._super(ctx);
|
6311
6324
|
var $el = ctx.widget.element;
|