fancytree-rails 2.1.0.pre.0 → 2.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +4 -0
- data/README.md +1 -1
- data/Rakefile +3 -4
- data/app/assets/javascripts/fancytree/jquery.fancytree-all.js +568 -51
- data/app/assets/javascripts/fancytree/jquery.fancytree-custom.min.js +9 -6
- data/app/assets/javascripts/fancytree/jquery.fancytree.js +63 -27
- data/app/assets/javascripts/fancytree/jquery.fancytree.min.js +4 -4
- data/app/assets/javascripts/fancytree/src/jquery.fancytree.childcounter.js +2 -2
- data/app/assets/javascripts/fancytree/src/jquery.fancytree.clones.js +7 -3
- data/app/assets/javascripts/fancytree/src/jquery.fancytree.columnview.js +2 -2
- data/app/assets/javascripts/fancytree/src/jquery.fancytree.debug.js +2 -2
- data/app/assets/javascripts/fancytree/src/jquery.fancytree.dnd.js +24 -4
- data/app/assets/javascripts/fancytree/src/jquery.fancytree.edit.js +3 -2
- data/app/assets/javascripts/fancytree/src/jquery.fancytree.filter.js +2 -2
- data/app/assets/javascripts/fancytree/src/jquery.fancytree.glyph.js +14 -6
- data/app/assets/javascripts/fancytree/src/jquery.fancytree.gridnav.js +2 -2
- data/app/assets/javascripts/fancytree/src/jquery.fancytree.js +63 -27
- data/app/assets/javascripts/fancytree/src/jquery.fancytree.menu.js +2 -2
- data/app/assets/javascripts/fancytree/src/jquery.fancytree.persist.js +2 -2
- data/app/assets/javascripts/fancytree/src/jquery.fancytree.table.js +2 -2
- data/app/assets/javascripts/fancytree/src/jquery.fancytree.themeroller.js +2 -2
- data/app/assets/javascripts/fancytree/src/jquery.fancytree.wide.js +124 -0
- data/app/assets/stylesheets/fancytree/skin-lion/ui.fancytree.css.erb +5 -0
- data/app/assets/stylesheets/fancytree/skin-vista/ui.fancytree.css.erb +5 -0
- data/app/assets/stylesheets/fancytree/skin-win7/ui.fancytree.css.erb +5 -0
- data/app/assets/stylesheets/fancytree/skin-win8-xxl/ui.fancytree.css.erb +5 -0
- data/app/assets/stylesheets/fancytree/skin-win8/ui.fancytree.css.erb +5 -0
- data/app/assets/stylesheets/fancytree/skin-xp/ui.fancytree.css.erb +5 -0
- data/lib/fancytree/rails/version.rb +2 -2
- metadata +5 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9763566a5cf99627c6cda44c2570cff3f980333e
|
4
|
+
data.tar.gz: 4e79a94a6e0332683b61baf961e5c779045c35a1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6bb9216bdaad12e45fe5ef4ed0fca43b4e5ccd6eddf54efc6a5c993bb7f6a1637468400c3f3d22cff06d887a510da800b2c58e67659dfa30a5b434164487d038
|
7
|
+
data.tar.gz: 60d3f5b403758d2b47e4469eaed31605122448cc043ee6a1c605d61f0e6e6e209e3a59ce7e8171620f5d00e340586fd662b8ecb890b712230c146b57d1c10618
|
data/CHANGELOG.md
CHANGED
data/README.md
CHANGED
@@ -55,7 +55,7 @@ Note that for awesome style (extension) to work you to:
|
|
55
55
|
|
56
56
|
## Credits
|
57
57
|
|
58
|
-
|
58
|
+
Piece of code of Rakefile copied from joliss/jquery-ui-rails. See
|
59
59
|
3th-party for its license.
|
60
60
|
|
61
61
|
## Contributing
|
data/Rakefile
CHANGED
@@ -3,9 +3,9 @@ require 'fileutils'
|
|
3
3
|
require 'fancytree/rails/version'
|
4
4
|
|
5
5
|
def build_image_dependencies(source_code)
|
6
|
-
image_dependencies = Set.new source_code.scan(/url\("
|
6
|
+
image_dependencies = Set.new source_code.scan(/url\("(icons.gif)"?\)/).map(&:first)
|
7
7
|
code = image_dependencies.inject("") do |acc, img|
|
8
|
-
acc += " *= depend_on_asset \"
|
8
|
+
acc += " *= depend_on_asset \"fancytree/#{img}\"\n"
|
9
9
|
end
|
10
10
|
end
|
11
11
|
|
@@ -22,9 +22,8 @@ namespace :fancytree do
|
|
22
22
|
css_files = Dir.glob("skin*/*.css")
|
23
23
|
css_files.each do |file|
|
24
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
25
|
source_code.gsub!(/\A(\/\*!.+?\*\/\s)/m, "\\1\n/*\n#{build_image_dependencies(source_code)} */\n\n") unless build_image_dependencies(source_code).empty?
|
26
|
+
source_code.gsub!(/url\("icons.gif"\)/, 'url(<%= image_path("fancytree/icons.gif") %>)')
|
28
27
|
|
29
28
|
output_path = "../../../app/assets/stylesheets/fancytree/#{file}.erb"
|
30
29
|
mkdir_p File.dirname(output_path)
|
@@ -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.3.0
|
11
|
+
* @date 2014-08-17T10:39
|
12
12
|
*/
|
13
13
|
|
14
14
|
/** Core Fancytree module.
|
@@ -614,7 +614,7 @@ FancytreeNode.prototype = /** @lends FancytreeNode# */{
|
|
614
614
|
var i, l, child, s, state, allSelected,someSelected,
|
615
615
|
children = node.children;
|
616
616
|
|
617
|
-
if( children ){
|
617
|
+
if( children && children.length ){
|
618
618
|
// check all children recursively
|
619
619
|
allSelected = true;
|
620
620
|
someSelected = false;
|
@@ -852,6 +852,16 @@ FancytreeNode.prototype = /** @lends FancytreeNode# */{
|
|
852
852
|
hasFocus: function() {
|
853
853
|
return (this.tree.hasFocus() && this.tree.focusNode === this);
|
854
854
|
},
|
855
|
+
/** Write to browser console if debugLevel >= 1 (prepending node info)
|
856
|
+
*
|
857
|
+
* @param {*} msg string or object or array of such
|
858
|
+
*/
|
859
|
+
info: function(msg){
|
860
|
+
if( this.tree.options.debugLevel >= 1 ) {
|
861
|
+
Array.prototype.unshift.call(arguments, this.toString());
|
862
|
+
consoleApply("info", arguments);
|
863
|
+
}
|
864
|
+
},
|
855
865
|
/** Return true if node is active (see also FancytreeNode#isSelected).
|
856
866
|
* @returns {boolean}
|
857
867
|
*/
|
@@ -1063,6 +1073,9 @@ FancytreeNode.prototype = /** @lends FancytreeNode# */{
|
|
1063
1073
|
}
|
1064
1074
|
// Unlink this node from current parent
|
1065
1075
|
if( this.parent.children.length === 1 ) {
|
1076
|
+
if( this.parent === targetParent ){
|
1077
|
+
return; // #258
|
1078
|
+
}
|
1066
1079
|
this.parent.children = this.parent.lazy ? [] : null;
|
1067
1080
|
this.parent.expanded = false;
|
1068
1081
|
} else {
|
@@ -1196,7 +1209,7 @@ FancytreeNode.prototype = /** @lends FancytreeNode# */{
|
|
1196
1209
|
// Navigate to node
|
1197
1210
|
function _goto(n){
|
1198
1211
|
if( n ){
|
1199
|
-
n.makeVisible();
|
1212
|
+
try { n.makeVisible(); } catch(e) {} // #272
|
1200
1213
|
// Node may still be hidden by a filter
|
1201
1214
|
if( ! $(n.span).is(":visible") ) {
|
1202
1215
|
n.debug("Navigate: skipping hidden node");
|
@@ -1467,13 +1480,20 @@ FancytreeNode.prototype = /** @lends FancytreeNode# */{
|
|
1467
1480
|
setFocus: function(flag){
|
1468
1481
|
return this.tree._callHook("nodeSetFocus", this, flag);
|
1469
1482
|
},
|
1470
|
-
// TODO: setLazyNodeStatus
|
1471
1483
|
/**Select this node, i.e. check the checkbox.
|
1472
1484
|
* @param {boolean} [flag=true] pass false to deselect
|
1473
1485
|
*/
|
1474
1486
|
setSelected: function(flag){
|
1475
1487
|
return this.tree._callHook("nodeSetSelected", this, flag);
|
1476
1488
|
},
|
1489
|
+
/**Mark a lazy node as 'error', 'loading', or 'ok'.
|
1490
|
+
* @param {string} status 'error', 'ok'
|
1491
|
+
* @param {string} [message]
|
1492
|
+
* @param {string} [details]
|
1493
|
+
*/
|
1494
|
+
setStatus: function(status, message, details){
|
1495
|
+
return this.tree._callHook("nodeSetStatus", this, status, message, details);
|
1496
|
+
},
|
1477
1497
|
/**Rename this node.
|
1478
1498
|
* @param {string} title
|
1479
1499
|
*/
|
@@ -1666,6 +1686,9 @@ function Fancytree(widget) {
|
|
1666
1686
|
};
|
1667
1687
|
}
|
1668
1688
|
}
|
1689
|
+
if( this.options && $.isFunction(this.options.loaderror) ) {
|
1690
|
+
$.error("The 'loaderror' event was renamed since 2014-07-03. Use 'loadError' (with uppercase E) instead.");
|
1691
|
+
}
|
1669
1692
|
this.ext = {}; // Active extension instances
|
1670
1693
|
// allow to init tree.data.foo from <div data-foo=''>
|
1671
1694
|
this.data = _getElementDataAsDict(this.$div);
|
@@ -1883,17 +1906,17 @@ Fancytree.prototype = /** @lends Fancytree# */{
|
|
1883
1906
|
generateFormElements: function(selected, active) {
|
1884
1907
|
// TODO: test case
|
1885
1908
|
var nodeList,
|
1886
|
-
selectedName = (selected !== false) ? "ft_" + this._id : selected,
|
1909
|
+
selectedName = (selected !== false) ? "ft_" + this._id + "[]" : selected,
|
1887
1910
|
activeName = (active !== false) ? "ft_" + this._id + "_active" : active,
|
1888
1911
|
id = "fancytree_result_" + this._id,
|
1889
|
-
$result =
|
1912
|
+
$result = $("#" + id);
|
1890
1913
|
|
1891
1914
|
if($result.length){
|
1892
1915
|
$result.empty();
|
1893
1916
|
}else{
|
1894
1917
|
$result = $("<div>", {
|
1895
1918
|
id: id
|
1896
|
-
}).hide().
|
1919
|
+
}).hide().insertAfter(this.$container);
|
1897
1920
|
}
|
1898
1921
|
if(selectedName){
|
1899
1922
|
nodeList = this.getSelectedNodes( this.options.selectMode === 3 );
|
@@ -1967,7 +1990,12 @@ Fancytree.prototype = /** @lends Fancytree# */{
|
|
1967
1990
|
}, true);
|
1968
1991
|
return match;
|
1969
1992
|
},
|
1970
|
-
|
1993
|
+
/** Return the invisible system root node.
|
1994
|
+
* @returns {FancytreeNode}
|
1995
|
+
*/
|
1996
|
+
getRootNode: function() {
|
1997
|
+
return this.rootNode;
|
1998
|
+
},
|
1971
1999
|
/**
|
1972
2000
|
* Return an array of selected nodes.
|
1973
2001
|
* @param {boolean} [stopOnParents=false] only return the topmost selected
|
@@ -2373,7 +2401,7 @@ $.extend(Fancytree.prototype,
|
|
2373
2401
|
* data was rendered.
|
2374
2402
|
*/
|
2375
2403
|
nodeLoadChildren: function(ctx, source) {
|
2376
|
-
var ajax, delay,
|
2404
|
+
var ajax, delay, dfd,
|
2377
2405
|
tree = ctx.tree,
|
2378
2406
|
node = ctx.node;
|
2379
2407
|
|
@@ -2393,7 +2421,7 @@ $.extend(Fancytree.prototype,
|
|
2393
2421
|
|
2394
2422
|
node.debug("nodeLoadChildren waiting debug delay " + Math.round(delay) + "ms");
|
2395
2423
|
ajax.debugDelay = false;
|
2396
|
-
|
2424
|
+
dfd = $.Deferred(function (dfd) {
|
2397
2425
|
setTimeout(function () {
|
2398
2426
|
$.ajax(ajax)
|
2399
2427
|
.done(function () { dfd.resolveWith(this, arguments); })
|
@@ -2401,33 +2429,42 @@ $.extend(Fancytree.prototype,
|
|
2401
2429
|
}, delay);
|
2402
2430
|
});
|
2403
2431
|
}else{
|
2404
|
-
|
2432
|
+
dfd = $.ajax(ajax);
|
2405
2433
|
}
|
2406
2434
|
|
2407
|
-
//
|
2408
|
-
//
|
2409
|
-
source =
|
2410
|
-
|
2435
|
+
// Defer the deferred: we want to be able to reject, even if ajax
|
2436
|
+
// resolved ok.
|
2437
|
+
source = new $.Deferred();
|
2438
|
+
dfd.done(function (data, textStatus, jqXHR) {
|
2439
|
+
var errorObj, res;
|
2411
2440
|
if(typeof data === "string"){
|
2412
2441
|
$.error("Ajax request returned a string (did you get the JSON dataType wrong?).");
|
2413
2442
|
}
|
2414
|
-
// postProcess is similar to the standard dataFilter hook,
|
2443
|
+
// postProcess is similar to the standard ajax dataFilter hook,
|
2415
2444
|
// but it is also called for JSONP
|
2416
2445
|
if( ctx.options.postProcess ){
|
2417
|
-
res = tree._triggerNodeEvent("postProcess", ctx, ctx.originalEvent, {response: data, dataType: this.dataType});
|
2446
|
+
res = tree._triggerNodeEvent("postProcess", ctx, ctx.originalEvent, {response: data, error: null, dataType: this.dataType});
|
2447
|
+
if( res.error ) {
|
2448
|
+
errorObj = $.isPlainObject(res.error) ? res.error : {message: res.error};
|
2449
|
+
errorObj = tree._makeHookContext(node, null, errorObj);
|
2450
|
+
source.rejectWith(this, [errorObj]);
|
2451
|
+
return;
|
2452
|
+
}
|
2418
2453
|
data = $.isArray(res) ? res : data;
|
2454
|
+
|
2419
2455
|
} else if (data && data.hasOwnProperty("d") && ctx.options.enableAspx ) {
|
2420
2456
|
// Process ASPX WebMethod JSON object inside "d" property
|
2421
2457
|
data = (typeof data.d === "string") ? $.parseJSON(data.d) : data.d;
|
2422
2458
|
}
|
2423
|
-
|
2424
|
-
}
|
2425
|
-
|
2459
|
+
source.resolveWith(this, [data]);
|
2460
|
+
}).fail(function (jqXHR, textStatus, errorThrown) {
|
2461
|
+
var errorObj = tree._makeHookContext(node, null, {
|
2426
2462
|
error: jqXHR,
|
2427
2463
|
args: Array.prototype.slice.call(arguments),
|
2428
2464
|
message: errorThrown,
|
2429
2465
|
details: jqXHR.status + ": " + errorThrown
|
2430
2466
|
});
|
2467
|
+
source.rejectWith(this, [errorObj]);
|
2431
2468
|
});
|
2432
2469
|
}
|
2433
2470
|
|
@@ -2437,7 +2474,7 @@ $.extend(Fancytree.prototype,
|
|
2437
2474
|
// node._isLoading = true;
|
2438
2475
|
tree.nodeSetStatus(ctx, "loading");
|
2439
2476
|
|
2440
|
-
source.done(function () {
|
2477
|
+
source.done(function (children) {
|
2441
2478
|
tree.nodeSetStatus(ctx, "ok");
|
2442
2479
|
}).fail(function(error){
|
2443
2480
|
var ctxErr;
|
@@ -2451,8 +2488,9 @@ $.extend(Fancytree.prototype,
|
|
2451
2488
|
message: error ? (error.message || error.toString()) : ""
|
2452
2489
|
});
|
2453
2490
|
}
|
2454
|
-
tree._triggerNodeEvent("
|
2455
|
-
|
2491
|
+
if( tree._triggerNodeEvent("loadError", ctxErr, null) !== false ) {
|
2492
|
+
tree.nodeSetStatus(ctx, "error", ctxErr.message, ctxErr.details);
|
2493
|
+
}
|
2456
2494
|
});
|
2457
2495
|
}
|
2458
2496
|
// $.when(source) resolves also for non-deferreds
|
@@ -2472,9 +2510,7 @@ $.extend(Fancytree.prototype,
|
|
2472
2510
|
_assert($.isArray(children), "expected array of children");
|
2473
2511
|
node._setChildren(children);
|
2474
2512
|
// trigger fancytreeloadchildren
|
2475
|
-
// if( node.parent ) {
|
2476
2513
|
tree._triggerNodeEvent("loadChildren", node);
|
2477
|
-
// }
|
2478
2514
|
// }).always(function(){
|
2479
2515
|
// node._isLoading = false;
|
2480
2516
|
});
|
@@ -3791,7 +3827,7 @@ $.extend($.ui.fancytree,
|
|
3791
3827
|
/** @lends Fancytree_Static# */
|
3792
3828
|
{
|
3793
3829
|
/** @type {string} */
|
3794
|
-
version: "2.
|
3830
|
+
version: "2.3.0", // Set to semver by 'grunt release'
|
3795
3831
|
/** @type {string} */
|
3796
3832
|
buildType: "production", // Set to 'production' by 'grunt build'
|
3797
3833
|
/** @type {int} */
|
@@ -4090,8 +4126,8 @@ $.extend($.ui.fancytree,
|
|
4090
4126
|
* Released under the MIT license
|
4091
4127
|
* https://github.com/mar10/fancytree/wiki/LicenseInfo
|
4092
4128
|
*
|
4093
|
-
* @version 2.
|
4094
|
-
* @date 2014-
|
4129
|
+
* @version 2.3.0
|
4130
|
+
* @date 2014-08-17T10:39
|
4095
4131
|
*/
|
4096
4132
|
|
4097
4133
|
// To keep the global namespace clean, we wrap everything in a closure
|
@@ -4255,6 +4291,458 @@ $.ui.fancytree.registerExtension({
|
|
4255
4291
|
// End of namespace closure
|
4256
4292
|
}(jQuery));
|
4257
4293
|
|
4294
|
+
/*!
|
4295
|
+
*
|
4296
|
+
* jquery.fancytree.clones.js
|
4297
|
+
* Support faster lookup of nodes by key and shared ref-ids.
|
4298
|
+
* (Extension module for jquery.fancytree.js: https://github.com/mar10/fancytree/)
|
4299
|
+
*
|
4300
|
+
* Copyright (c) 2014, Martin Wendt (http://wwWendt.de)
|
4301
|
+
*
|
4302
|
+
* Released under the MIT license
|
4303
|
+
* https://github.com/mar10/fancytree/wiki/LicenseInfo
|
4304
|
+
*
|
4305
|
+
* @version 2.3.0
|
4306
|
+
* @date 2014-08-17T10:39
|
4307
|
+
*/
|
4308
|
+
|
4309
|
+
;(function($, window, document, undefined) {
|
4310
|
+
|
4311
|
+
"use strict";
|
4312
|
+
|
4313
|
+
/*******************************************************************************
|
4314
|
+
* Private functions and variables
|
4315
|
+
*/
|
4316
|
+
function _assert(cond, msg){
|
4317
|
+
// TODO: see qunit.js extractStacktrace()
|
4318
|
+
if(!cond){
|
4319
|
+
msg = msg ? ": " + msg : "";
|
4320
|
+
$.error("Assertion failed" + msg);
|
4321
|
+
}
|
4322
|
+
}
|
4323
|
+
|
4324
|
+
|
4325
|
+
/* Return first occurrence of member from array. */
|
4326
|
+
function _removeArrayMember(arr, elem) {
|
4327
|
+
// TODO: use Array.indexOf for IE >= 9
|
4328
|
+
var i;
|
4329
|
+
for (i = arr.length - 1; i >= 0; i--) {
|
4330
|
+
if (arr[i] === elem) {
|
4331
|
+
arr.splice(i, 1);
|
4332
|
+
return true;
|
4333
|
+
}
|
4334
|
+
}
|
4335
|
+
return false;
|
4336
|
+
}
|
4337
|
+
|
4338
|
+
|
4339
|
+
// /**
|
4340
|
+
// * Calculate a 32 bit FNV-1a hash
|
4341
|
+
// * Found here: https://gist.github.com/vaiorabbit/5657561
|
4342
|
+
// * Ref.: http://isthe.com/chongo/tech/comp/fnv/
|
4343
|
+
// *
|
4344
|
+
// * @param {string} str the input value
|
4345
|
+
// * @param {boolean} [asString=false] set to true to return the hash value as
|
4346
|
+
// * 8-digit hex string instead of an integer
|
4347
|
+
// * @param {integer} [seed] optionally pass the hash of the previous chunk
|
4348
|
+
// * @returns {integer | string}
|
4349
|
+
// */
|
4350
|
+
// function hashFnv32a(str, asString, seed) {
|
4351
|
+
// /*jshint bitwise:false */
|
4352
|
+
// var i, l,
|
4353
|
+
// hval = (seed === undefined) ? 0x811c9dc5 : seed;
|
4354
|
+
|
4355
|
+
// for (i = 0, l = str.length; i < l; i++) {
|
4356
|
+
// hval ^= str.charCodeAt(i);
|
4357
|
+
// hval += (hval << 1) + (hval << 4) + (hval << 7) + (hval << 8) + (hval << 24);
|
4358
|
+
// }
|
4359
|
+
// if( asString ){
|
4360
|
+
// // Convert to 8 digit hex string
|
4361
|
+
// return ("0000000" + (hval >>> 0).toString(16)).substr(-8);
|
4362
|
+
// }
|
4363
|
+
// return hval >>> 0;
|
4364
|
+
// }
|
4365
|
+
|
4366
|
+
|
4367
|
+
/**
|
4368
|
+
* JS Implementation of MurmurHash3 (r136) (as of May 20, 2011)
|
4369
|
+
*
|
4370
|
+
* @author <a href="mailto:gary.court@gmail.com">Gary Court</a>
|
4371
|
+
* @see http://github.com/garycourt/murmurhash-js
|
4372
|
+
* @author <a href="mailto:aappleby@gmail.com">Austin Appleby</a>
|
4373
|
+
* @see http://sites.google.com/site/murmurhash/
|
4374
|
+
*
|
4375
|
+
* @param {string} key ASCII only
|
4376
|
+
* @param {boolean} [asString=false]
|
4377
|
+
* @param {number} seed Positive integer only
|
4378
|
+
* @return {number} 32-bit positive integer hash
|
4379
|
+
*/
|
4380
|
+
function hashMurmur3(key, asString, seed) {
|
4381
|
+
/*jshint bitwise:false */
|
4382
|
+
var h1b, k1,
|
4383
|
+
remainder = key.length & 3,
|
4384
|
+
bytes = key.length - remainder,
|
4385
|
+
h1 = seed,
|
4386
|
+
c1 = 0xcc9e2d51,
|
4387
|
+
c2 = 0x1b873593,
|
4388
|
+
i = 0;
|
4389
|
+
|
4390
|
+
while (i < bytes) {
|
4391
|
+
k1 =
|
4392
|
+
((key.charCodeAt(i) & 0xff)) |
|
4393
|
+
((key.charCodeAt(++i) & 0xff) << 8) |
|
4394
|
+
((key.charCodeAt(++i) & 0xff) << 16) |
|
4395
|
+
((key.charCodeAt(++i) & 0xff) << 24);
|
4396
|
+
++i;
|
4397
|
+
|
4398
|
+
k1 = ((((k1 & 0xffff) * c1) + ((((k1 >>> 16) * c1) & 0xffff) << 16))) & 0xffffffff;
|
4399
|
+
k1 = (k1 << 15) | (k1 >>> 17);
|
4400
|
+
k1 = ((((k1 & 0xffff) * c2) + ((((k1 >>> 16) * c2) & 0xffff) << 16))) & 0xffffffff;
|
4401
|
+
|
4402
|
+
h1 ^= k1;
|
4403
|
+
h1 = (h1 << 13) | (h1 >>> 19);
|
4404
|
+
h1b = ((((h1 & 0xffff) * 5) + ((((h1 >>> 16) * 5) & 0xffff) << 16))) & 0xffffffff;
|
4405
|
+
h1 = (((h1b & 0xffff) + 0x6b64) + ((((h1b >>> 16) + 0xe654) & 0xffff) << 16));
|
4406
|
+
}
|
4407
|
+
|
4408
|
+
k1 = 0;
|
4409
|
+
|
4410
|
+
switch (remainder) {
|
4411
|
+
/*jshint -W086:true */
|
4412
|
+
case 3: k1 ^= (key.charCodeAt(i + 2) & 0xff) << 16;
|
4413
|
+
case 2: k1 ^= (key.charCodeAt(i + 1) & 0xff) << 8;
|
4414
|
+
case 1: k1 ^= (key.charCodeAt(i) & 0xff);
|
4415
|
+
|
4416
|
+
k1 = (((k1 & 0xffff) * c1) + ((((k1 >>> 16) * c1) & 0xffff) << 16)) & 0xffffffff;
|
4417
|
+
k1 = (k1 << 15) | (k1 >>> 17);
|
4418
|
+
k1 = (((k1 & 0xffff) * c2) + ((((k1 >>> 16) * c2) & 0xffff) << 16)) & 0xffffffff;
|
4419
|
+
h1 ^= k1;
|
4420
|
+
}
|
4421
|
+
|
4422
|
+
h1 ^= key.length;
|
4423
|
+
|
4424
|
+
h1 ^= h1 >>> 16;
|
4425
|
+
h1 = (((h1 & 0xffff) * 0x85ebca6b) + ((((h1 >>> 16) * 0x85ebca6b) & 0xffff) << 16)) & 0xffffffff;
|
4426
|
+
h1 ^= h1 >>> 13;
|
4427
|
+
h1 = ((((h1 & 0xffff) * 0xc2b2ae35) + ((((h1 >>> 16) * 0xc2b2ae35) & 0xffff) << 16))) & 0xffffffff;
|
4428
|
+
h1 ^= h1 >>> 16;
|
4429
|
+
|
4430
|
+
if( asString ){
|
4431
|
+
// Convert to 8 digit hex string
|
4432
|
+
return ("0000000" + (h1 >>> 0).toString(16)).substr(-8);
|
4433
|
+
}
|
4434
|
+
return h1 >>> 0;
|
4435
|
+
}
|
4436
|
+
|
4437
|
+
// console.info(hashMurmur3("costarring"));
|
4438
|
+
// console.info(hashMurmur3("costarring", true));
|
4439
|
+
// console.info(hashMurmur3("liquid"));
|
4440
|
+
// console.info(hashMurmur3("liquid", true));
|
4441
|
+
|
4442
|
+
|
4443
|
+
/*
|
4444
|
+
* Return a unique key for node by calculationg the hash of the parents refKey-list
|
4445
|
+
*/
|
4446
|
+
function calcUniqueKey(node) {
|
4447
|
+
var key,
|
4448
|
+
path = $.map(node.getParentList(false, true), function(e){ return e.refKey || e.key; });
|
4449
|
+
path = path.join("/");
|
4450
|
+
key = "id_" + hashMurmur3(path, true);
|
4451
|
+
node.debug(path + " -> " + key);
|
4452
|
+
return key;
|
4453
|
+
}
|
4454
|
+
|
4455
|
+
|
4456
|
+
/**
|
4457
|
+
* [ext-clones] Return a list of clone-nodes or null.
|
4458
|
+
* @param {boolean} [includeSelf=false]
|
4459
|
+
* @returns {FancytreeNode[] | null}
|
4460
|
+
*
|
4461
|
+
* @alias FancytreeNode#getCloneList
|
4462
|
+
* @requires jquery.fancytree.clones.js
|
4463
|
+
*/
|
4464
|
+
$.ui.fancytree._FancytreeNodeClass.prototype.getCloneList = function(includeSelf){
|
4465
|
+
var key,
|
4466
|
+
tree = this.tree,
|
4467
|
+
refList = tree.refMap[this.refKey] || null,
|
4468
|
+
keyMap = tree.keyMap;
|
4469
|
+
|
4470
|
+
if( refList ) {
|
4471
|
+
key = this.key;
|
4472
|
+
// Convert key list to node list
|
4473
|
+
if( includeSelf ) {
|
4474
|
+
refList = $.map(refList, function(val){ return keyMap[val]; });
|
4475
|
+
} else {
|
4476
|
+
refList = $.map(refList, function(val){ return val === key ? null : keyMap[val]; });
|
4477
|
+
if( refList.length < 1 ) {
|
4478
|
+
refList = null;
|
4479
|
+
}
|
4480
|
+
}
|
4481
|
+
}
|
4482
|
+
return refList;
|
4483
|
+
};
|
4484
|
+
|
4485
|
+
|
4486
|
+
/**
|
4487
|
+
* [ext-clones] Return true if this node has at least another clone with same refKey.
|
4488
|
+
* @returns {boolean}
|
4489
|
+
*
|
4490
|
+
* @alias FancytreeNode#isClone
|
4491
|
+
* @requires jquery.fancytree.clones.js
|
4492
|
+
*/
|
4493
|
+
$.ui.fancytree._FancytreeNodeClass.prototype.isClone = function(){
|
4494
|
+
var refKey = this.refKey || null,
|
4495
|
+
refList = refKey && this.tree.refMap[refKey] || null;
|
4496
|
+
return !!(refList && refList.length > 1);
|
4497
|
+
};
|
4498
|
+
|
4499
|
+
|
4500
|
+
/**
|
4501
|
+
* [ext-clones] Update key and/or refKey for an existing node.
|
4502
|
+
* @param {string} key
|
4503
|
+
* @param {string} refKey
|
4504
|
+
* @returns {boolean}
|
4505
|
+
*
|
4506
|
+
* @alias FancytreeNode#reRegister
|
4507
|
+
* @requires jquery.fancytree.clones.js
|
4508
|
+
*/
|
4509
|
+
$.ui.fancytree._FancytreeNodeClass.prototype.reRegister = function(key, refKey){
|
4510
|
+
key = (key == null) ? null : "" + key;
|
4511
|
+
refKey = (refKey == null) ? null : "" + refKey;
|
4512
|
+
this.debug("reRegister", key, refKey);
|
4513
|
+
|
4514
|
+
var tree = this.tree,
|
4515
|
+
prevKey = this.key,
|
4516
|
+
prevRefKey = this.refKey,
|
4517
|
+
keyMap = tree.keyMap,
|
4518
|
+
refMap = tree.refMap,
|
4519
|
+
refList = refMap[prevRefKey] || null,
|
4520
|
+
// curCloneKeys = refList ? node.getCloneList(true),
|
4521
|
+
modified = false;
|
4522
|
+
|
4523
|
+
// Key has changed: update all references
|
4524
|
+
if( key != null && key !== this.key ) {
|
4525
|
+
if( keyMap[key] ) {
|
4526
|
+
$.error("[ext-clones] reRegister(" + key + "): already exists.");
|
4527
|
+
}
|
4528
|
+
// Update keyMap
|
4529
|
+
delete keyMap[prevKey];
|
4530
|
+
keyMap[key] = this;
|
4531
|
+
// Update refMap
|
4532
|
+
if( refList ) {
|
4533
|
+
refMap[prevRefKey] = $.map(refList, function(e){
|
4534
|
+
return e === prevKey ? key : e;
|
4535
|
+
});
|
4536
|
+
}
|
4537
|
+
this.key = key;
|
4538
|
+
modified = true;
|
4539
|
+
}
|
4540
|
+
|
4541
|
+
// refKey has changed
|
4542
|
+
if( refKey != null && refKey !== this.refKey ) {
|
4543
|
+
// Remove previous refKeys
|
4544
|
+
if( refList ){
|
4545
|
+
if( refList.length === 1 ){
|
4546
|
+
delete refMap[prevRefKey];
|
4547
|
+
}else{
|
4548
|
+
refMap[prevRefKey] = $.map(refList, function(e){
|
4549
|
+
return e === prevKey ? null : e;
|
4550
|
+
});
|
4551
|
+
}
|
4552
|
+
}
|
4553
|
+
// Add refKey
|
4554
|
+
if( refMap[refKey] ) {
|
4555
|
+
refMap[refKey].append(key);
|
4556
|
+
}else{
|
4557
|
+
refMap[refKey] = [ this.key ];
|
4558
|
+
}
|
4559
|
+
this.refKey = refKey;
|
4560
|
+
modified = true;
|
4561
|
+
}
|
4562
|
+
return modified;
|
4563
|
+
};
|
4564
|
+
|
4565
|
+
|
4566
|
+
/**
|
4567
|
+
* [ext-clones] Return all nodes with a given refKey (null if not found).
|
4568
|
+
* @param {string} refKey
|
4569
|
+
* @param {FancytreeNode} [rootNode] optionally restrict results to descendants of this node
|
4570
|
+
* @returns {FancytreeNode[] | null}
|
4571
|
+
* @alias Fancytree#getNodesByRef
|
4572
|
+
* @requires jquery.fancytree.clones.js
|
4573
|
+
*/
|
4574
|
+
$.ui.fancytree._FancytreeClass.prototype.getNodesByRef = function(refKey, rootNode){
|
4575
|
+
var keyMap = this.keyMap,
|
4576
|
+
refList = this.refMap[refKey] || null;
|
4577
|
+
|
4578
|
+
if( refList ) {
|
4579
|
+
// Convert key list to node list
|
4580
|
+
if( rootNode ) {
|
4581
|
+
refList = $.map(refList, function(val){
|
4582
|
+
var node = keyMap[val];
|
4583
|
+
return node.isDescendantOf(rootNode) ? node : null;
|
4584
|
+
});
|
4585
|
+
}else{
|
4586
|
+
refList = $.map(refList, function(val){ return keyMap[val]; });
|
4587
|
+
}
|
4588
|
+
if( refList.length < 1 ) {
|
4589
|
+
refList = null;
|
4590
|
+
}
|
4591
|
+
}
|
4592
|
+
return refList;
|
4593
|
+
};
|
4594
|
+
|
4595
|
+
|
4596
|
+
/**
|
4597
|
+
* [ext-clones] Replace a refKey with a new one.
|
4598
|
+
* @param {string} oldRefKey
|
4599
|
+
* @param {string} newRefKey
|
4600
|
+
* @alias Fancytree#changeRefKey
|
4601
|
+
* @requires jquery.fancytree.clones.js
|
4602
|
+
*/
|
4603
|
+
$.ui.fancytree._FancytreeClass.prototype.changeRefKey = function(oldRefKey, newRefKey) {
|
4604
|
+
var i, node,
|
4605
|
+
keyMap = this.keyMap,
|
4606
|
+
refList = this.refMap[oldRefKey] || null;
|
4607
|
+
|
4608
|
+
if (refList) {
|
4609
|
+
for (i = 0; i < refList.length; i++) {
|
4610
|
+
node = keyMap[refList[i]];
|
4611
|
+
node.refKey = newRefKey;
|
4612
|
+
}
|
4613
|
+
delete this.refMap[oldRefKey];
|
4614
|
+
this.refMap[newRefKey] = refList;
|
4615
|
+
}
|
4616
|
+
};
|
4617
|
+
|
4618
|
+
|
4619
|
+
/*******************************************************************************
|
4620
|
+
* Extension code
|
4621
|
+
*/
|
4622
|
+
$.ui.fancytree.registerExtension({
|
4623
|
+
name: "clones",
|
4624
|
+
version: "0.0.3",
|
4625
|
+
// Default options for this extension.
|
4626
|
+
options: {
|
4627
|
+
highlightActiveClones: true, // set 'fancytree-active-clone' on active clones and all peers
|
4628
|
+
highlightClones: false // set 'fancytree-clone' class on any node that has at least one clone
|
4629
|
+
},
|
4630
|
+
|
4631
|
+
treeCreate: function(ctx){
|
4632
|
+
this._super(ctx);
|
4633
|
+
ctx.tree.refMap = {};
|
4634
|
+
ctx.tree.keyMap = {};
|
4635
|
+
},
|
4636
|
+
treeInit: function(ctx){
|
4637
|
+
this.$container.addClass("fancytree-ext-clones");
|
4638
|
+
_assert(ctx.options.defaultKey == null);
|
4639
|
+
// Generate unique / reproducible default keys
|
4640
|
+
ctx.options.defaultKey = function(node){
|
4641
|
+
return calcUniqueKey(node);
|
4642
|
+
};
|
4643
|
+
// The default implementation loads initial data
|
4644
|
+
this._super(ctx);
|
4645
|
+
},
|
4646
|
+
treeClear: function(ctx){
|
4647
|
+
ctx.tree.refMap = {};
|
4648
|
+
ctx.tree.keyMap = {};
|
4649
|
+
return this._super(ctx);
|
4650
|
+
},
|
4651
|
+
treeRegisterNode: function(ctx, add, node) {
|
4652
|
+
var refList, len,
|
4653
|
+
tree = ctx.tree,
|
4654
|
+
keyMap = tree.keyMap,
|
4655
|
+
refMap = tree.refMap,
|
4656
|
+
key = node.key,
|
4657
|
+
refKey = (node && node.refKey != null) ? "" + node.refKey : null;
|
4658
|
+
|
4659
|
+
// ctx.tree.debug("clones.treeRegisterNode", add, node);
|
4660
|
+
|
4661
|
+
if( key === "_statusNode" ){
|
4662
|
+
return this._super(ctx, add, node);
|
4663
|
+
}
|
4664
|
+
|
4665
|
+
if( add ) {
|
4666
|
+
if( keyMap[node.key] != null ) {
|
4667
|
+
$.error("clones.treeRegisterNode: node.key already exists: " + node.key);
|
4668
|
+
}
|
4669
|
+
keyMap[key] = node;
|
4670
|
+
if( refKey ) {
|
4671
|
+
refList = refMap[refKey];
|
4672
|
+
if( refList ) {
|
4673
|
+
refList.push(key);
|
4674
|
+
if( refList.length === 2 && ctx.options.clones.highlightClones ) {
|
4675
|
+
// Mark peer node, if it just became a clone (no need to
|
4676
|
+
// mark current node, since it will be rendered later anyway)
|
4677
|
+
keyMap[refList[0]].renderStatus();
|
4678
|
+
}
|
4679
|
+
} else {
|
4680
|
+
refMap[refKey] = [key];
|
4681
|
+
}
|
4682
|
+
node.debug("clones.treeRegisterNode: add clone =>", refMap[refKey]);
|
4683
|
+
}
|
4684
|
+
}else {
|
4685
|
+
if( keyMap[key] == null ) {
|
4686
|
+
$.error("clones.treeRegisterNode: node.key not registered: " + node.key);
|
4687
|
+
}
|
4688
|
+
delete keyMap[key];
|
4689
|
+
if( refKey ) {
|
4690
|
+
refList = refMap[refKey];
|
4691
|
+
node.debug("clones.treeRegisterNode: remove clone BEFORE =>", refMap[refKey]);
|
4692
|
+
if( refList ) {
|
4693
|
+
len = refList.length;
|
4694
|
+
if( len <= 1 ){
|
4695
|
+
_assert(len === 1);
|
4696
|
+
_assert(refList[0] === key);
|
4697
|
+
delete refMap[refKey];
|
4698
|
+
}else{
|
4699
|
+
_removeArrayMember(refList, key);
|
4700
|
+
// Unmark peer node, if this was the only clone
|
4701
|
+
if( len === 2 && ctx.options.clones.highlightClones ) {
|
4702
|
+
// node.debug("clones.treeRegisterNode: last =>", node.getCloneList());
|
4703
|
+
keyMap[refList[0]].renderStatus();
|
4704
|
+
}
|
4705
|
+
}
|
4706
|
+
node.debug("clones.treeRegisterNode: remove clone =>", refMap[refKey]);
|
4707
|
+
}
|
4708
|
+
}
|
4709
|
+
}
|
4710
|
+
return this._super(ctx, add, node);
|
4711
|
+
},
|
4712
|
+
nodeRenderStatus: function(ctx) {
|
4713
|
+
var $span, res,
|
4714
|
+
node = ctx.node;
|
4715
|
+
|
4716
|
+
res = this._super(ctx);
|
4717
|
+
|
4718
|
+
if( ctx.options.clones.highlightClones ) {
|
4719
|
+
$span = $(node[ctx.tree.statusClassPropName]);
|
4720
|
+
// Only if span already exists
|
4721
|
+
if( $span.length && node.isClone() ){
|
4722
|
+
// node.debug("clones.nodeRenderStatus: ", ctx.options.clones.highlightClones);
|
4723
|
+
$span.addClass("fancytree-clone");
|
4724
|
+
}
|
4725
|
+
}
|
4726
|
+
return res;
|
4727
|
+
},
|
4728
|
+
nodeSetActive: function(ctx, flag) {
|
4729
|
+
var res,
|
4730
|
+
scpn = ctx.tree.statusClassPropName,
|
4731
|
+
node = ctx.node;
|
4732
|
+
|
4733
|
+
res = this._super(ctx, flag);
|
4734
|
+
|
4735
|
+
if( ctx.options.clones.highlightActiveClones && node.isClone() ) {
|
4736
|
+
$.each(node.getCloneList(true), function(idx, n){
|
4737
|
+
n.debug("clones.nodeSetActive: ", flag !== false);
|
4738
|
+
$(n[scpn]).toggleClass("fancytree-active-clone", flag !== false);
|
4739
|
+
});
|
4740
|
+
}
|
4741
|
+
return res;
|
4742
|
+
}
|
4743
|
+
});
|
4744
|
+
}(jQuery, window, document));
|
4745
|
+
|
4258
4746
|
/*!
|
4259
4747
|
* jquery.fancytree.dnd.js
|
4260
4748
|
*
|
@@ -4266,8 +4754,8 @@ $.ui.fancytree.registerExtension({
|
|
4266
4754
|
* Released under the MIT license
|
4267
4755
|
* https://github.com/mar10/fancytree/wiki/LicenseInfo
|
4268
4756
|
*
|
4269
|
-
* @version 2.
|
4270
|
-
* @date 2014-
|
4757
|
+
* @version 2.3.0
|
4758
|
+
* @date 2014-08-17T10:39
|
4271
4759
|
*/
|
4272
4760
|
|
4273
4761
|
;(function($, window, document, undefined) {
|
@@ -4302,9 +4790,8 @@ function _initDragAndDrop(tree) {
|
|
4302
4790
|
containment: false,
|
4303
4791
|
delay: 0,
|
4304
4792
|
distance: 4,
|
4305
|
-
// TODO: merge Dynatree issue 419
|
4306
4793
|
revert: false,
|
4307
|
-
scroll: true, //
|
4794
|
+
scroll: true, // to disable, also set css 'position: inherit' on ul.fancytree-container
|
4308
4795
|
scrollSpeed: 7,
|
4309
4796
|
scrollSensitivity: 10,
|
4310
4797
|
// Delegate draggable.start, drag, and stop events to our handler
|
@@ -4461,6 +4948,7 @@ $.ui.fancytree.registerExtension({
|
|
4461
4948
|
autoExpandMS: 1000, // Expand nodes after n milliseconds of hovering.
|
4462
4949
|
preventVoidMoves: true, // Prevent dropping nodes 'before self', etc.
|
4463
4950
|
preventRecursiveMoves: true, // Prevent dropping nodes on own descendants
|
4951
|
+
focusOnClick: false, // Focus, although draggable cancels mousedown event (#270)
|
4464
4952
|
dragEnter: null, // Callback(targetNode, data)
|
4465
4953
|
dragOver: null, // Callback(targetNode, data)
|
4466
4954
|
dragDrop: null, // Callback(targetNode, data)
|
@@ -4473,6 +4961,20 @@ $.ui.fancytree.registerExtension({
|
|
4473
4961
|
treeInit: function(ctx){
|
4474
4962
|
var tree = ctx.tree;
|
4475
4963
|
this._super(ctx);
|
4964
|
+
// issue #270: draggable eats mousedown events
|
4965
|
+
if( tree.options.dnd.dragStart ){
|
4966
|
+
tree.$container.on("mousedown", function(event){
|
4967
|
+
if( !tree.hasFocus() && ctx.options.dnd.focusOnClick ) {
|
4968
|
+
var node = $.ui.fancytree.getNode(event);
|
4969
|
+
node.debug("Re-enable focus that was prevented by jQuery UI draggable.");
|
4970
|
+
// node.setFocus();
|
4971
|
+
// $(node.span).closest(":tabbable").focus();
|
4972
|
+
// $(event.target).trigger("focus");
|
4973
|
+
// $(event.target).closest(":tabbable").trigger("focus");
|
4974
|
+
$(event.target).closest(":tabbable").focus();
|
4975
|
+
}
|
4976
|
+
});
|
4977
|
+
}
|
4476
4978
|
_initDragAndDrop(tree);
|
4477
4979
|
},
|
4478
4980
|
/* Override key handler in order to cancel dnd on escape.*/
|
@@ -4483,6 +4985,12 @@ $.ui.fancytree.registerExtension({
|
|
4483
4985
|
}
|
4484
4986
|
return this._super(ctx);
|
4485
4987
|
},
|
4988
|
+
nodeClick: function(ctx) {
|
4989
|
+
// if( ctx.options.dnd.dragStart ){
|
4990
|
+
// ctx.tree.$container.focus();
|
4991
|
+
// }
|
4992
|
+
return this._super(ctx);
|
4993
|
+
},
|
4486
4994
|
/* Display drop marker according to hitMode ('after', 'before', 'over', 'out', 'start', 'stop'). */
|
4487
4995
|
_setDndStatus: function(sourceNode, targetNode, helper, hitMode, accept) {
|
4488
4996
|
var posOpts,
|
@@ -4790,8 +5298,8 @@ $.ui.fancytree.registerExtension({
|
|
4790
5298
|
* Released under the MIT license
|
4791
5299
|
* https://github.com/mar10/fancytree/wiki/LicenseInfo
|
4792
5300
|
*
|
4793
|
-
* @version 2.
|
4794
|
-
* @date 2014-
|
5301
|
+
* @version 2.3.0
|
5302
|
+
* @date 2014-08-17T10:39
|
4795
5303
|
*/
|
4796
5304
|
|
4797
5305
|
;(function($, window, document, undefined) {
|
@@ -4898,6 +5406,7 @@ $.ui.fancytree._FancytreeNodeClass.prototype.editStart = function(){
|
|
4898
5406
|
node.editEnd(true, event);
|
4899
5407
|
return false; // so we don't start editmode on Mac
|
4900
5408
|
}
|
5409
|
+
event.stopPropagation();
|
4901
5410
|
}).blur(function(event){
|
4902
5411
|
return node.editEnd(true, event);
|
4903
5412
|
});
|
@@ -5105,8 +5614,8 @@ $.ui.fancytree.registerExtension({
|
|
5105
5614
|
* Released under the MIT license
|
5106
5615
|
* https://github.com/mar10/fancytree/wiki/LicenseInfo
|
5107
5616
|
*
|
5108
|
-
* @version 2.
|
5109
|
-
* @date 2014-
|
5617
|
+
* @version 2.3.0
|
5618
|
+
* @date 2014-08-17T10:39
|
5110
5619
|
*/
|
5111
5620
|
|
5112
5621
|
;(function($, window, document, undefined) {
|
@@ -5267,8 +5776,8 @@ $.ui.fancytree.registerExtension({
|
|
5267
5776
|
* Released under the MIT license
|
5268
5777
|
* https://github.com/mar10/fancytree/wiki/LicenseInfo
|
5269
5778
|
*
|
5270
|
-
* @version 2.
|
5271
|
-
* @date 2014-
|
5779
|
+
* @version 2.3.0
|
5780
|
+
* @date 2014-08-17T10:39
|
5272
5781
|
*/
|
5273
5782
|
|
5274
5783
|
;(function($, window, document, undefined) {
|
@@ -5316,6 +5825,7 @@ $.ui.fancytree.registerExtension({
|
|
5316
5825
|
nodeRenderStatus: function(ctx) {
|
5317
5826
|
var icon, span,
|
5318
5827
|
node = ctx.node,
|
5828
|
+
$span = $(node.span),
|
5319
5829
|
opts = ctx.options.glyph,
|
5320
5830
|
// callback = opts.icon,
|
5321
5831
|
map = opts.map
|
@@ -5328,8 +5838,9 @@ $.ui.fancytree.registerExtension({
|
|
5328
5838
|
if( node.isRoot() ){
|
5329
5839
|
return;
|
5330
5840
|
}
|
5331
|
-
|
5332
|
-
span = $("span.fancytree-expander", node.span).get(0);
|
5841
|
+
// #257: only search one level deep:
|
5842
|
+
// span = $("span.fancytree-expander", node.span).get(0);
|
5843
|
+
span = $span.children("span.fancytree-expander").get(0);
|
5333
5844
|
if( span ){
|
5334
5845
|
if( node.isLoading() ){
|
5335
5846
|
icon = "loading";
|
@@ -5342,16 +5853,22 @@ $.ui.fancytree.registerExtension({
|
|
5342
5853
|
}else{
|
5343
5854
|
icon = "noExpander";
|
5344
5855
|
}
|
5856
|
+
// node.debug(icon, map[icon], span);
|
5345
5857
|
span.className = "fancytree-expander " + map[icon];
|
5346
5858
|
}
|
5347
5859
|
|
5348
|
-
|
5860
|
+
if( node.tr ){
|
5861
|
+
span = $(node.tr).children("span.fancytree-checkbox").get(0);
|
5862
|
+
}else{
|
5863
|
+
span = $span.children("span.fancytree-checkbox").get(0);
|
5864
|
+
}
|
5349
5865
|
if( span ){
|
5350
5866
|
icon = node.selected ? "checkboxSelected" : (node.partsel ? "checkboxUnknown" : "checkbox");
|
5351
5867
|
span.className = "fancytree-checkbox " + map[icon];
|
5352
5868
|
}
|
5353
5869
|
|
5354
|
-
span = $("span.fancytree-icon", node.span).get(0);
|
5870
|
+
// span = $("span.fancytree-icon", node.span).get(0);
|
5871
|
+
span = $span.children("span.fancytree-icon").get(0);
|
5355
5872
|
if( span ){
|
5356
5873
|
if( node.folder ){
|
5357
5874
|
icon = node.expanded ? _getIcon(opts, "folderOpen") : _getIcon(opts, "folder");
|
@@ -5395,8 +5912,8 @@ $.ui.fancytree.registerExtension({
|
|
5395
5912
|
* Released under the MIT license
|
5396
5913
|
* https://github.com/mar10/fancytree/wiki/LicenseInfo
|
5397
5914
|
*
|
5398
|
-
* @version 2.
|
5399
|
-
* @date 2014-
|
5915
|
+
* @version 2.3.0
|
5916
|
+
* @date 2014-08-17T10:39
|
5400
5917
|
*/
|
5401
5918
|
|
5402
5919
|
;(function($, window, document, undefined) {
|
@@ -5597,8 +6114,8 @@ $.ui.fancytree.registerExtension({
|
|
5597
6114
|
* Released under the MIT license
|
5598
6115
|
* https://github.com/mar10/fancytree/wiki/LicenseInfo
|
5599
6116
|
*
|
5600
|
-
* @version 2.
|
5601
|
-
* @date 2014-
|
6117
|
+
* @version 2.3.0
|
6118
|
+
* @date 2014-08-17T10:39
|
5602
6119
|
*/
|
5603
6120
|
|
5604
6121
|
;(function($, window, document, undefined) {
|
@@ -5935,8 +6452,8 @@ $.ui.fancytree.registerExtension({
|
|
5935
6452
|
* Released under the MIT license
|
5936
6453
|
* https://github.com/mar10/fancytree/wiki/LicenseInfo
|
5937
6454
|
*
|
5938
|
-
* @version 2.
|
5939
|
-
* @date 2014-
|
6455
|
+
* @version 2.3.0
|
6456
|
+
* @date 2014-08-17T10:39
|
5940
6457
|
*/
|
5941
6458
|
|
5942
6459
|
;(function($, window, document, undefined) {
|
@@ -6297,8 +6814,8 @@ $.ui.fancytree.registerExtension({
|
|
6297
6814
|
* Released under the MIT license
|
6298
6815
|
* https://github.com/mar10/fancytree/wiki/LicenseInfo
|
6299
6816
|
*
|
6300
|
-
* @version 2.
|
6301
|
-
* @date 2014-
|
6817
|
+
* @version 2.3.0
|
6818
|
+
* @date 2014-08-17T10:39
|
6302
6819
|
*/
|
6303
6820
|
|
6304
6821
|
;(function($, window, document, undefined) {
|