svn_wc_tree 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- data/ChangeLog +4 -0
- data/LICENSE +165 -0
- data/Manifest +57 -0
- data/README.rdoc +333 -0
- data/bin/svn_wc_tree +190 -0
- data/cgi/svn_wc_broker.cgi +38 -0
- data/lib/svn_wc_broker.rb +161 -0
- data/lib/svn_wc_client.rb +266 -0
- data/svn_conf.yaml +9 -0
- data/svn_wc_tree/css/swt.css +4 -0
- data/svn_wc_tree/img/swt_spinner.gif +0 -0
- data/svn_wc_tree/index.html +137 -0
- data/svn_wc_tree/index.php +29 -0
- data/svn_wc_tree/js/jquery-1.3.2.js +4376 -0
- data/svn_wc_tree/js/jquery.blockUI-2.31.js +477 -0
- data/svn_wc_tree/js/jquery.cookie.js +96 -0
- data/svn_wc_tree/js/jquery.tree.checkbox.js +75 -0
- data/svn_wc_tree/js/jquery.tree.js +2058 -0
- data/svn_wc_tree/js/source/jquery.tree.js +2058 -0
- data/svn_wc_tree/js/source/jquery.tree.min.js +1 -0
- data/svn_wc_tree/js/source/lib/jquery.cookie.js +96 -0
- data/svn_wc_tree/js/source/lib/jquery.hotkeys.js +244 -0
- data/svn_wc_tree/js/source/lib/jquery.js +19 -0
- data/svn_wc_tree/js/source/lib/jquery.metadata.js +122 -0
- data/svn_wc_tree/js/source/lib/sarissa.js +110 -0
- data/svn_wc_tree/js/source/plugins/_jquery.tree.rtl.js +32 -0
- data/svn_wc_tree/js/source/plugins/jquery.tree.checkbox.js +75 -0
- data/svn_wc_tree/js/source/plugins/jquery.tree.contextmenu.js +129 -0
- data/svn_wc_tree/js/source/plugins/jquery.tree.cookie.js +70 -0
- data/svn_wc_tree/js/source/plugins/jquery.tree.hotkeys.js +78 -0
- data/svn_wc_tree/js/source/plugins/jquery.tree.metadata.js +17 -0
- data/svn_wc_tree/js/source/plugins/jquery.tree.themeroller.js +33 -0
- data/svn_wc_tree/js/source/plugins/jquery.tree.xml_flat.js +123 -0
- data/svn_wc_tree/js/source/plugins/jquery.tree.xml_nested.js +124 -0
- data/svn_wc_tree/js/source/themes/apple/bg.jpg +0 -0
- data/svn_wc_tree/js/source/themes/apple/dot_for_ie.gif +0 -0
- data/svn_wc_tree/js/source/themes/apple/icons.png +0 -0
- data/svn_wc_tree/js/source/themes/apple/style.css +34 -0
- data/svn_wc_tree/js/source/themes/apple/throbber.gif +0 -0
- data/svn_wc_tree/js/source/themes/checkbox/dot_for_ie.gif +0 -0
- data/svn_wc_tree/js/source/themes/checkbox/icons.png +0 -0
- data/svn_wc_tree/js/source/themes/checkbox/style.css +38 -0
- data/svn_wc_tree/js/source/themes/checkbox/throbber.gif +0 -0
- data/svn_wc_tree/js/source/themes/classic/dot_for_ie.gif +0 -0
- data/svn_wc_tree/js/source/themes/classic/icons.png +0 -0
- data/svn_wc_tree/js/source/themes/classic/style.css +31 -0
- data/svn_wc_tree/js/source/themes/classic/throbber.gif +0 -0
- data/svn_wc_tree/js/source/themes/default/dot_for_ie.gif +0 -0
- data/svn_wc_tree/js/source/themes/default/icons.png +0 -0
- data/svn_wc_tree/js/source/themes/default/style.css +30 -0
- data/svn_wc_tree/js/source/themes/default/throbber.gif +0 -0
- data/svn_wc_tree/js/source/themes/themeroller/dot_for_ie.gif +0 -0
- data/svn_wc_tree/js/source/themes/themeroller/icons.png +0 -0
- data/svn_wc_tree/js/source/themes/themeroller/style.css +39 -0
- data/svn_wc_tree/js/source/themes/themeroller/throbber.gif +0 -0
- data/svn_wc_tree/js/swt.js +534 -0
- data/svn_wc_tree.conf +9 -0
- metadata +122 -0
@@ -0,0 +1,129 @@
|
|
1
|
+
(function ($) {
|
2
|
+
$.extend($.tree.plugins, {
|
3
|
+
"contextmenu" : {
|
4
|
+
object : $("<ul id='jstree-contextmenu' class='tree-context' />"),
|
5
|
+
data : {
|
6
|
+
t : false,
|
7
|
+
a : false,
|
8
|
+
r : false
|
9
|
+
},
|
10
|
+
|
11
|
+
defaults : {
|
12
|
+
class_name : "hover",
|
13
|
+
items : {
|
14
|
+
create : {
|
15
|
+
label : "Create",
|
16
|
+
icon : "create",
|
17
|
+
visible : function (NODE, TREE_OBJ) { if(NODE.length != 1) return 0; return TREE_OBJ.check("creatable", NODE); },
|
18
|
+
action : function (NODE, TREE_OBJ) { TREE_OBJ.create(false, TREE_OBJ.get_node(NODE[0])); },
|
19
|
+
separator_after : true
|
20
|
+
},
|
21
|
+
rename : {
|
22
|
+
label : "Rename",
|
23
|
+
icon : "rename",
|
24
|
+
visible : function (NODE, TREE_OBJ) { if(NODE.length != 1) return false; return TREE_OBJ.check("renameable", NODE); },
|
25
|
+
action : function (NODE, TREE_OBJ) { TREE_OBJ.rename(NODE); }
|
26
|
+
},
|
27
|
+
remove : {
|
28
|
+
label : "Delete",
|
29
|
+
icon : "remove",
|
30
|
+
visible : function (NODE, TREE_OBJ) { var ok = true; $.each(NODE, function () { if(TREE_OBJ.check("deletable", this) == false) ok = false; return false; }); return ok; },
|
31
|
+
action : function (NODE, TREE_OBJ) { $.each(NODE, function () { TREE_OBJ.remove(this); }); }
|
32
|
+
}
|
33
|
+
}
|
34
|
+
},
|
35
|
+
show : function(obj, t) {
|
36
|
+
var opts = $.extend(true, {}, $.tree.plugins.contextmenu.defaults, t.settings.plugins.contextmenu);
|
37
|
+
obj = $(obj);
|
38
|
+
$.tree.plugins.contextmenu.object.empty();
|
39
|
+
var str = "";
|
40
|
+
var cnt = 0;
|
41
|
+
for(var i in opts.items) {
|
42
|
+
if(!opts.items.hasOwnProperty(i)) continue;
|
43
|
+
if(opts.items[i] === false) continue;
|
44
|
+
var r = 1;
|
45
|
+
if(typeof opts.items[i].visible == "function") r = opts.items[i].visible.call(null, $.tree.plugins.contextmenu.data.a, t);
|
46
|
+
if(r == -1) continue;
|
47
|
+
else cnt ++;
|
48
|
+
if(opts.items[i].separator_before === true) str += "<li class='separator'><span> </span></li>";
|
49
|
+
str += '<li><a href="#" rel="' + i + '" class="' + i + ' ' + (r == 0 ? 'disabled' : '') + '">';
|
50
|
+
if(opts.items[i].icon) str += "<ins " + (opts.items[i].icon.indexOf("/") == -1 ? " class='" + opts.items[i].icon + "' " : " style='background-image:url(\"" + opts.items[i].icon + "\");' " ) + "> </ins>";
|
51
|
+
else str += "<ins> </ins>";
|
52
|
+
str += "<span>" + opts.items[i].label + '</span></a></li>';
|
53
|
+
if(opts.items[i].separator_after === true) str += "<li class='separator'><span> </span></li>";
|
54
|
+
}
|
55
|
+
var tmp = obj.children("a:visible").offset();
|
56
|
+
$.tree.plugins.contextmenu.object.attr("class","tree-context tree-" + t.settings.ui.theme_name.toString() + "-context").html(str);
|
57
|
+
var h = $.tree.plugins.contextmenu.object.height();
|
58
|
+
var w = $.tree.plugins.contextmenu.object.width();
|
59
|
+
var x = tmp.left;
|
60
|
+
var y = tmp.top + parseInt(obj.children("a:visible").height()) + 2;
|
61
|
+
var max_y = $(window).height() + $(window).scrollTop();
|
62
|
+
var max_x = $(window).width() + $(window).scrollLeft();
|
63
|
+
if(y + h > max_y) y = Math.max( (max_y - h - 2), 0);
|
64
|
+
if(x + w > max_x) x = Math.max( (max_x - w - 2), 0);
|
65
|
+
$.tree.plugins.contextmenu.object.css({ "left" : (x), "top" : (y) }).fadeIn("fast");
|
66
|
+
},
|
67
|
+
hide : function () {
|
68
|
+
if(!$.tree.plugins.contextmenu.data.t) return;
|
69
|
+
var opts = $.extend(true, {}, $.tree.plugins.contextmenu.defaults, $.tree.plugins.contextmenu.data.t.settings.plugins.contextmenu);
|
70
|
+
if($.tree.plugins.contextmenu.data.r && $.tree.plugins.contextmenu.data.a) {
|
71
|
+
$.tree.plugins.contextmenu.data.a.children("a, span").removeClass(opts.class_name);
|
72
|
+
}
|
73
|
+
$.tree.plugins.contextmenu.data = { a : false, r : false, t : false };
|
74
|
+
$.tree.plugins.contextmenu.object.fadeOut("fast");
|
75
|
+
},
|
76
|
+
exec : function (cmd) {
|
77
|
+
if($.tree.plugins.contextmenu.data.t == false) return;
|
78
|
+
var opts = $.extend(true, {}, $.tree.plugins.contextmenu.defaults, $.tree.plugins.contextmenu.data.t.settings.plugins.contextmenu);
|
79
|
+
try { opts.items[cmd].action.apply(null, [$.tree.plugins.contextmenu.data.a, $.tree.plugins.contextmenu.data.t]); } catch(e) { };
|
80
|
+
},
|
81
|
+
|
82
|
+
callbacks : {
|
83
|
+
oninit : function () {
|
84
|
+
if(!$.tree.plugins.contextmenu.css) {
|
85
|
+
var css = '#jstree-contextmenu { display:none; position:absolute; z-index:2000; list-style-type:none; margin:0; padding:0; left:-2000px; top:-2000px; } .tree-context { margin:20px; padding:0; width:180px; border:1px solid #979797; padding:2px; background:#f5f5f5; list-style-type:none; }.tree-context li { height:22px; margin:0 0 0 27px; padding:0; background:#ffffff; border-left:1px solid #e0e0e0; }.tree-context li a { position:relative; display:block; height:22px; line-height:22px; margin:0 0 0 -28px; text-decoration:none; color:black; padding:0; }.tree-context li a ins { text-decoration:none; float:left; width:16px; height:16px; margin:0 0 0 0; background-color:#f0f0f0; border:1px solid #f0f0f0; border-width:3px 5px 3px 6px; line-height:16px; }.tree-context li a span { display:block; background:#f0f0f0; margin:0 0 0 29px; padding-left:5px; }.tree-context li.separator { background:#f0f0f0; height:2px; line-height:2px; font-size:1px; border:0; margin:0; padding:0; }.tree-context li.separator span { display:block; margin:0px 0 0px 27px; height:1px; border-top:1px solid #e0e0e0; border-left:1px solid #e0e0e0; line-height:1px; font-size:1px; background:white; }.tree-context li a:hover { border:1px solid #d8f0fa; height:20px; line-height:20px; }.tree-context li a:hover span { background:#e7f4f9; margin-left:28px; }.tree-context li a:hover ins { background-color:#e7f4f9; border-color:#e7f4f9; border-width:2px 5px 2px 5px; }.tree-context li a.disabled { color:gray; }.tree-context li a.disabled ins { }.tree-context li a.disabled:hover { border:0; height:22px; line-height:22px; }.tree-context li a.disabled:hover span { background:#f0f0f0; margin-left:29px; }.tree-context li a.disabled:hover ins { border-color:#f0f0f0; background-color:#f0f0f0; border-width:3px 5px 3px 6px; }';
|
86
|
+
$.tree.plugins.contextmenu.css = this.add_sheet({ str : css });
|
87
|
+
}
|
88
|
+
},
|
89
|
+
onrgtclk : function (n, t, e) {
|
90
|
+
var opts = $.extend(true, {}, $.tree.plugins.contextmenu.defaults, t.settings.plugins.contextmenu);
|
91
|
+
n = $(n);
|
92
|
+
if(n.size() == 0) return;
|
93
|
+
$.tree.plugins.contextmenu.data.t = t;
|
94
|
+
if(!n.children("a:eq(0)").hasClass("clicked")) {
|
95
|
+
$.tree.plugins.contextmenu.data.a = n;
|
96
|
+
$.tree.plugins.contextmenu.data.r = true;
|
97
|
+
n.children("a").addClass(opts.class_name);
|
98
|
+
e.target.blur();
|
99
|
+
}
|
100
|
+
else {
|
101
|
+
$.tree.plugins.contextmenu.data.r = false;
|
102
|
+
$.tree.plugins.contextmenu.data.a = (t.selected_arr && t.selected_arr.length > 1) ? t.selected_arr : t.selected;
|
103
|
+
}
|
104
|
+
$.tree.plugins.contextmenu.show(n, t);
|
105
|
+
e.preventDefault();
|
106
|
+
e.stopPropagation();
|
107
|
+
// return false; // commented out because you might want to do something in your own callback
|
108
|
+
},
|
109
|
+
onchange : function () { $.tree.plugins.contextmenu.hide(); },
|
110
|
+
beforedata : function () { $.tree.plugins.contextmenu.hide(); },
|
111
|
+
ondestroy : function () { $.tree.plugins.contextmenu.hide(); }
|
112
|
+
}
|
113
|
+
}
|
114
|
+
});
|
115
|
+
$(function () {
|
116
|
+
$.tree.plugins.contextmenu.object.hide().appendTo("body");
|
117
|
+
$("#jstree-contextmenu a")
|
118
|
+
.live("click", function (event) {
|
119
|
+
if(!$(this).hasClass("disabled")) {
|
120
|
+
$.tree.plugins.contextmenu.exec.apply(null, [$(this).attr("rel")]);
|
121
|
+
$.tree.plugins.contextmenu.hide();
|
122
|
+
}
|
123
|
+
event.stopPropagation();
|
124
|
+
event.preventDefault();
|
125
|
+
return false;
|
126
|
+
})
|
127
|
+
$(document).bind("mousedown", function(event) { if($(event.target).parents("#jstree-contextmenu").size() == 0) $.tree.plugins.contextmenu.hide(); });
|
128
|
+
});
|
129
|
+
})(jQuery);
|
@@ -0,0 +1,70 @@
|
|
1
|
+
(function ($) {
|
2
|
+
if(typeof $.cookie == "undefined") throw "jsTree cookie: jQuery cookie plugin not included.";
|
3
|
+
|
4
|
+
$.extend($.tree.plugins, {
|
5
|
+
"cookie" : {
|
6
|
+
defaults : {
|
7
|
+
prefix : "", // a prefix that will be used for all cookies for this tree
|
8
|
+
options : {
|
9
|
+
expires: false,
|
10
|
+
path: false,
|
11
|
+
domain: false,
|
12
|
+
secure: false
|
13
|
+
},
|
14
|
+
types : {
|
15
|
+
selected : true, // should we set the selected cookie
|
16
|
+
open : true // should we set the open cookie
|
17
|
+
},
|
18
|
+
keep_selected : false, // should we merge with the selected option or overwrite it
|
19
|
+
keep_opened : false // should we merge with the opened option or overwrite it
|
20
|
+
},
|
21
|
+
set_cookie : function (type) {
|
22
|
+
var opts = $.extend(true, {}, $.tree.plugins.cookie.defaults, this.settings.plugins.cookie);
|
23
|
+
if(opts.types[type] !== true) return false;
|
24
|
+
switch(type) {
|
25
|
+
case "selected":
|
26
|
+
if(this.settings.rules.multiple != false && this.selected_arr.length > 1) {
|
27
|
+
var val = Array();
|
28
|
+
$.each(this.selected_arr, function () {
|
29
|
+
if(this.attr("id")) { val.push(this.attr("id")); }
|
30
|
+
});
|
31
|
+
val = val.join(",");
|
32
|
+
}
|
33
|
+
else var val = this.selected ? this.selected.attr("id") : false;
|
34
|
+
$.cookie(opts.prefix + 'selected', val, opts.options);
|
35
|
+
break;
|
36
|
+
case "open":
|
37
|
+
var str = "";
|
38
|
+
this.container.find("li.open").each(function (i) { if(this.id) { str += this.id + ","; } });
|
39
|
+
$.cookie(opts.prefix + 'open', str.replace(/,$/ig,""), opts.options);
|
40
|
+
break;
|
41
|
+
}
|
42
|
+
},
|
43
|
+
callbacks : {
|
44
|
+
oninit : function (t) {
|
45
|
+
var opts = $.extend(true, {}, $.tree.plugins.cookie.defaults, this.settings.plugins.cookie);
|
46
|
+
var tmp = false;
|
47
|
+
tmp = $.cookie(opts.prefix + 'open');
|
48
|
+
if(tmp) {
|
49
|
+
tmp = tmp.split(",");
|
50
|
+
if(opts.keep_opened) this.settings.opened = $.unique($.merge(tmp, this.settings.opened));
|
51
|
+
else this.settings.opened = tmp;
|
52
|
+
}
|
53
|
+
tmp = $.cookie(opts.prefix + 'selected');
|
54
|
+
if(tmp) {
|
55
|
+
tmp = tmp.split(",");
|
56
|
+
if(opts.keep_selected) this.settings.selected = $.unique($.merge(tmp, this.settings.opened));
|
57
|
+
else this.settings.selected = tmp;
|
58
|
+
}
|
59
|
+
},
|
60
|
+
onchange : function() { $.tree.plugins.cookie.set_cookie.apply(this, ["selected"]); },
|
61
|
+
onopen : function() { $.tree.plugins.cookie.set_cookie.apply(this, ["open"]); },
|
62
|
+
onclose : function() { $.tree.plugins.cookie.set_cookie.apply(this, ["open"]); },
|
63
|
+
ondelete : function() { $.tree.plugins.cookie.set_cookie.apply(this, ["open"]); },
|
64
|
+
oncopy : function() { $.tree.plugins.cookie.set_cookie.apply(this, ["open"]); },
|
65
|
+
oncreate : function() { $.tree.plugins.cookie.set_cookie.apply(this, ["open"]); },
|
66
|
+
onmoved : function() { $.tree.plugins.cookie.set_cookie.apply(this, ["open"]); }
|
67
|
+
}
|
68
|
+
}
|
69
|
+
});
|
70
|
+
})(jQuery);
|
@@ -0,0 +1,78 @@
|
|
1
|
+
(function ($) {
|
2
|
+
if(typeof window.hotkeys == "undefined") throw "jsTree hotkeys: jQuery hotkeys plugin not included.";
|
3
|
+
|
4
|
+
$.extend($.tree.plugins, {
|
5
|
+
"hotkeys" : {
|
6
|
+
bound : [],
|
7
|
+
disabled : false,
|
8
|
+
defaults : {
|
9
|
+
hover_mode : false,
|
10
|
+
functions : {
|
11
|
+
"up" : function () { $.tree.plugins.hotkeys.get_prev.apply(this); return false; },
|
12
|
+
"down" : function () { $.tree.plugins.hotkeys.get_next.apply(this); return false; },
|
13
|
+
"left" : function () { $.tree.plugins.hotkeys.get_left.apply(this); return false; },
|
14
|
+
"right" : function () { $.tree.plugins.hotkeys.get_right.apply(this); return false; },
|
15
|
+
"f2" : function () { if(this.selected) this.rename(); return false; },
|
16
|
+
"del" : function () { if(this.selected) this.remove(); return false; },
|
17
|
+
"ctrl+c": function () { if(this.selected) this.copy(); return false; },
|
18
|
+
"ctrl+x": function () { if(this.selected) this.cut(); return false; },
|
19
|
+
"ctrl+v": function () { if(this.selected) this.paste(); return false; }
|
20
|
+
}
|
21
|
+
},
|
22
|
+
exec : function(key) {
|
23
|
+
if($.tree.plugins.hotkeys.disabled) return false;
|
24
|
+
|
25
|
+
var t = $.tree.focused();
|
26
|
+
if(typeof t.settings.plugins.hotkeys == "undefined") return;
|
27
|
+
var opts = $.extend(true, {}, $.tree.plugins.hotkeys.defaults, t.settings.plugins.hotkeys);
|
28
|
+
if(typeof opts.functions[key] == "function") return opts.functions[key].apply(t);
|
29
|
+
},
|
30
|
+
get_next : function() {
|
31
|
+
var opts = $.extend(true, {}, $.tree.plugins.hotkeys.defaults, this.settings.plugins.hotkeys);
|
32
|
+
var obj = this.hovered || this.selected;
|
33
|
+
return opts.hover_mode ? this.hover_branch(this.next(obj)) : this.select_branch(this.next(obj));
|
34
|
+
},
|
35
|
+
get_prev : function() {
|
36
|
+
var opts = $.extend(true, {}, $.tree.plugins.hotkeys.defaults, this.settings.plugins.hotkeys);
|
37
|
+
var obj = this.hovered || this.selected;
|
38
|
+
return opts.hover_mode ? this.hover_branch(this.prev(obj)) : this.select_branch(this.prev(obj));
|
39
|
+
},
|
40
|
+
get_left : function() {
|
41
|
+
var opts = $.extend(true, {}, $.tree.plugins.hotkeys.defaults, this.settings.plugins.hotkeys);
|
42
|
+
var obj = this.hovered || this.selected;
|
43
|
+
if(obj) {
|
44
|
+
if(obj.hasClass("open")) this.close_branch(obj);
|
45
|
+
else {
|
46
|
+
return opts.hover_mode ? this.hover_branch(this.parent(obj)) : this.select_branch(this.parent(obj));
|
47
|
+
}
|
48
|
+
}
|
49
|
+
},
|
50
|
+
get_right : function() {
|
51
|
+
var opts = $.extend(true, {}, $.tree.plugins.hotkeys.defaults, this.settings.plugins.hotkeys);
|
52
|
+
var obj = this.hovered || this.selected;
|
53
|
+
if(obj) {
|
54
|
+
if(obj.hasClass("closed")) this.open_branch(obj);
|
55
|
+
else {
|
56
|
+
return opts.hover_mode ? this.hover_branch(obj.find("li:eq(0)")) : this.select_branch(obj.find("li:eq(0)"));
|
57
|
+
}
|
58
|
+
}
|
59
|
+
},
|
60
|
+
|
61
|
+
callbacks : {
|
62
|
+
oninit : function (t) {
|
63
|
+
var opts = $.extend(true, {}, $.tree.plugins.hotkeys.defaults, this.settings.plugins.hotkeys);
|
64
|
+
for(var i in opts.functions) {
|
65
|
+
if(opts.functions.hasOwnProperty(i) && $.inArray(i, $.tree.plugins.hotkeys.bound) == -1) {
|
66
|
+
(function (k) {
|
67
|
+
$(document).bind("keydown", { combi : k, disableInInput: true }, function (event) {
|
68
|
+
return $.tree.plugins.hotkeys.exec(k);
|
69
|
+
});
|
70
|
+
})(i);
|
71
|
+
$.tree.plugins.hotkeys.bound.push(i);
|
72
|
+
}
|
73
|
+
}
|
74
|
+
}
|
75
|
+
}
|
76
|
+
}
|
77
|
+
});
|
78
|
+
})(jQuery);
|
@@ -0,0 +1,17 @@
|
|
1
|
+
(function ($) {
|
2
|
+
if(typeof $.metadata == "undefined") throw "jsTree metadata: jQuery metadata plugin not included.";
|
3
|
+
|
4
|
+
$.extend($.tree.plugins, {
|
5
|
+
"metadata" : {
|
6
|
+
defaults : {
|
7
|
+
attribute : "data"
|
8
|
+
},
|
9
|
+
callbacks : {
|
10
|
+
check : function(rule, obj, value, tree) {
|
11
|
+
var opts = $.extend(true, {}, $.tree.plugins.metadata.defaults, this.settings.plugins.metadata);
|
12
|
+
if(typeof $(obj).metadata({ type : "attr", name : opts.attribute })[rule] != "undefined") return $(obj).metadata()[rule];
|
13
|
+
}
|
14
|
+
}
|
15
|
+
}
|
16
|
+
});
|
17
|
+
})(jQuery);
|
@@ -0,0 +1,33 @@
|
|
1
|
+
(function ($) {
|
2
|
+
$.extend($.tree.plugins, {
|
3
|
+
"themeroller" : {
|
4
|
+
defaults : {
|
5
|
+
|
6
|
+
},
|
7
|
+
callbacks : {
|
8
|
+
oninit : function (t) {
|
9
|
+
if(this.settings.ui.theme_name != "themeroller") return;
|
10
|
+
var opts = $.extend(true, {}, $.tree.plugins.themeroller.defaults, this.settings.plugins.themeroller);
|
11
|
+
this.container.addClass("ui-widget ui-widget-content");
|
12
|
+
$("#" + this.container.attr("id") + " li a").live("mouseover", function () { $(this).addClass("ui-state-hover"); });
|
13
|
+
$("#" + this.container.attr("id") + " li a").live("mouseout", function () { $(this).removeClass("ui-state-hover"); });
|
14
|
+
},
|
15
|
+
onparse : function (s, t) {
|
16
|
+
if(this.settings.ui.theme_name != "themeroller") return;
|
17
|
+
var opts = $.extend(true, {}, $.tree.plugins.themeroller.defaults, this.settings.plugins.themeroller);
|
18
|
+
return $(s).find("a").not(".ui-state-default").addClass("ui-state-default").children("ins").addClass("ui-icon").end().end().end();
|
19
|
+
},
|
20
|
+
onselect : function(n, t) {
|
21
|
+
if(this.settings.ui.theme_name != "themeroller") return;
|
22
|
+
var opts = $.extend(true, {}, $.tree.plugins.themeroller.defaults, this.settings.plugins.themeroller);
|
23
|
+
$(n).children("a").addClass("ui-state-active");
|
24
|
+
},
|
25
|
+
ondeselect : function(n, t) {
|
26
|
+
if(this.settings.ui.theme_name != "themeroller") return;
|
27
|
+
var opts = $.extend(true, {}, $.tree.plugins.themeroller.defaults, this.settings.plugins.themeroller);
|
28
|
+
$(n).children("a").removeClass("ui-state-active");
|
29
|
+
}
|
30
|
+
}
|
31
|
+
}
|
32
|
+
});
|
33
|
+
})(jQuery);
|
@@ -0,0 +1,123 @@
|
|
1
|
+
(function ($) {
|
2
|
+
if(typeof Sarissa == "undefined") throw "jsTree xml_flat: Sarissa is not included.";
|
3
|
+
|
4
|
+
$.extend($.tree.datastores, {
|
5
|
+
"xml_flat" : function () {
|
6
|
+
return {
|
7
|
+
get : function(obj, t, opts) {
|
8
|
+
var str = "";
|
9
|
+
if(!obj || $(obj).size() == 0) {
|
10
|
+
obj = t.container.children("ul").children("li");
|
11
|
+
}
|
12
|
+
else obj = $(obj);
|
13
|
+
|
14
|
+
if(obj.size() > 1) {
|
15
|
+
var _this = this;
|
16
|
+
var str = '<root>';
|
17
|
+
obj.each(function () {
|
18
|
+
opts.callback = true;
|
19
|
+
str += _this.get(this, t, opts);
|
20
|
+
});
|
21
|
+
str += '</root>';
|
22
|
+
return str;
|
23
|
+
}
|
24
|
+
|
25
|
+
if(!opts) var opts = {};
|
26
|
+
if(!opts.outer_attrib) opts.outer_attrib = [ "id", "rel", "class" ];
|
27
|
+
if(!opts.inner_attrib) opts.inner_attrib = [ ];
|
28
|
+
if(!opts.callback) str += '<root>';
|
29
|
+
|
30
|
+
str += '<item ';
|
31
|
+
str += ' parent_id="' + (obj.parents("li:eq(0)").size() ? obj.parents("li:eq(0)").attr("id") : 0) + '" ';
|
32
|
+
for(var i in opts.outer_attrib) {
|
33
|
+
if(!opts.outer_attrib.hasOwnProperty(i)) continue;
|
34
|
+
var val = (opts.outer_attrib[i] == "class") ? obj.attr(opts.outer_attrib[i]).toString().replace(/(^| )last( |$)/ig," ").replace(/(^| )(leaf|closed|open)( |$)/ig," ") : obj.attr(opts.outer_attrib[i]);
|
35
|
+
if(typeof val != "undefined" && val.toString().replace(" ","").length > 0) str += ' ' + opts.outer_attrib[i] + '="' + val.toString() + '" ';
|
36
|
+
delete val;
|
37
|
+
}
|
38
|
+
str += '>';
|
39
|
+
|
40
|
+
str += '<content>';
|
41
|
+
if(t.settings.languages.length) {
|
42
|
+
for(var i in t.settings.languages) {
|
43
|
+
if(!t.settings.languages.hasOwnProperty(i)) continue;
|
44
|
+
str += this.process_inner(obj.children("a." + t.settings.languages[i]), t, opts, t.settings.languages[i]);
|
45
|
+
}
|
46
|
+
}
|
47
|
+
else {
|
48
|
+
str += this.process_inner(obj.children("a"), t, opts);
|
49
|
+
}
|
50
|
+
str += '</content>';
|
51
|
+
str += '</item>';
|
52
|
+
|
53
|
+
if(obj.children("ul").size() > 0) {
|
54
|
+
var _this = this;
|
55
|
+
opts.callback = true;
|
56
|
+
obj.children("ul").children("li").each(function () {
|
57
|
+
str += _this.get(this, t, opts);
|
58
|
+
});
|
59
|
+
opts.callback = false;
|
60
|
+
}
|
61
|
+
if(!opts.callback) str += '</root>';
|
62
|
+
return str;
|
63
|
+
},
|
64
|
+
process_inner : function(obj, t, opts, lang) {
|
65
|
+
var str = '<name ';
|
66
|
+
if(lang) str += ' lang="' + lang + '" ';
|
67
|
+
if(opts.inner_attrib.length || obj.children("ins").get(0).style.backgroundImage.toString().length || obj.children("ins").get(0).className.length) {
|
68
|
+
if(obj.children("ins").get(0).style.className.length) {
|
69
|
+
str += ' icon="' + obj.children("ins").get(0).style.className + '" ';
|
70
|
+
}
|
71
|
+
if(obj.children("ins").get(0).style.backgroundImage.length) {
|
72
|
+
str += ' icon="' + obj.children("ins").get(0).style.backgroundImage.replace("url(","").replace(")","") + '" ';
|
73
|
+
}
|
74
|
+
if(opts.inner_attrib.length) {
|
75
|
+
for(var j in opts.inner_attrib) {
|
76
|
+
if(!opts.inner_attrib.hasOwnProperty(j)) continue;
|
77
|
+
var val = obj.attr(opts.inner_attrib[j]);
|
78
|
+
if(typeof val != "undefined" && val.toString().replace(" ","").length > 0) str += ' ' + opts.inner_attrib[j] + '="' + val.toString() + '" ';
|
79
|
+
delete val;
|
80
|
+
}
|
81
|
+
}
|
82
|
+
}
|
83
|
+
str += '><![CDATA[' + t.get_text(obj,lang) + ']]></name>';
|
84
|
+
return str;
|
85
|
+
},
|
86
|
+
|
87
|
+
parse : function(data, t, opts, callback) {
|
88
|
+
var processor = new XSLTProcessor();
|
89
|
+
processor.importStylesheet($.tree.datastores.xml_flat.xsl);
|
90
|
+
|
91
|
+
var result = $((new XMLSerializer()).serializeToString(processor.transformToDocument(data)));
|
92
|
+
if(result.is("ul")) result = result.html();
|
93
|
+
else result = result.find("ul").html();
|
94
|
+
if(callback) callback.call(null,result);
|
95
|
+
|
96
|
+
// Disabled because of Chrome issues
|
97
|
+
// if(callback) callback.call(null,(new XMLSerializer()).serializeToString(processor.transformToDocument(data)).replace(/^<ul[^>]*>/i,"").replace(/<\/ul>$/i,""));
|
98
|
+
},
|
99
|
+
load : function(data, t, opts, callback) {
|
100
|
+
if(opts.static) {
|
101
|
+
callback.call(null, (new DOMParser()).parseFromString(opts.static,'text/xml'));
|
102
|
+
}
|
103
|
+
else {
|
104
|
+
$.ajax({
|
105
|
+
'type' : opts.method,
|
106
|
+
'url' : opts.url,
|
107
|
+
'data' : data,
|
108
|
+
'dataType' : "xml",
|
109
|
+
'success' : function (d, textStatus) {
|
110
|
+
callback.call(null, d);
|
111
|
+
},
|
112
|
+
'error' : function (xhttp, textStatus, errorThrown) {
|
113
|
+
callback.call(null, false);
|
114
|
+
t.error(errorThrown + " " + textStatus);
|
115
|
+
}
|
116
|
+
});
|
117
|
+
}
|
118
|
+
}
|
119
|
+
}
|
120
|
+
}
|
121
|
+
});
|
122
|
+
$.tree.datastores.xml_flat.xsl = (new DOMParser()).parseFromString('<?xml version="1.0" encoding="utf-8" ?><xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" ><xsl:output method="html" encoding="utf-8" omit-xml-declaration="yes" standalone="no" indent="no" media-type="text/xml" /><xsl:template match="/"><ul><xsl:for-each select="//item[not(@parent_id) or @parent_id=0]"><xsl:call-template name="nodes"><xsl:with-param name="node" select="." /><xsl:with-param name="is_last" select="number(position() = last())" /></xsl:call-template></xsl:for-each></ul></xsl:template><xsl:template name="nodes"><xsl:param name="node" /><xsl:param name="theme_path" /><xsl:param name="theme_name" /><xsl:param name="is_last" /><xsl:variable name="children" select="count(//item[@parent_id=$node/attribute::id]) > 0" /><li><xsl:attribute name="class"><xsl:if test="$is_last = true()"> last </xsl:if><xsl:choose><xsl:when test="@state = \'open\'"> open </xsl:when><xsl:when test="$children or @hasChildren or @state = \'closed\'"> closed </xsl:when><xsl:otherwise> leaf </xsl:otherwise></xsl:choose><xsl:value-of select="@class" /></xsl:attribute><xsl:for-each select="@*"><xsl:if test="name() != \'parent_id\' and name() != \'hasChildren\' and name() != \'class\' and name() != \'state\'"><xsl:attribute name="{name()}"><xsl:value-of select="." /></xsl:attribute></xsl:if></xsl:for-each><xsl:for-each select="content/name"><a href="#"><xsl:attribute name="class"><xsl:value-of select="@lang" /><xsl:value-of select="@class" /></xsl:attribute><xsl:attribute name="style"><xsl:value-of select="@style" /></xsl:attribute><xsl:for-each select="@*"><xsl:if test="name() != \'style\' and name() != \'class\'"><xsl:attribute name="{name()}"><xsl:value-of select="." /></xsl:attribute></xsl:if></xsl:for-each><ins><xsl:if test="string-length(attribute::icon) > 0"><xsl:choose><xsl:when test="not(contains(@icon,\'/\'))"><xsl:attribute name="class"><xsl:value-of select="@icon" /></xsl:attribute></xsl:when><xsl:otherwise><xsl:attribute name="style">background-image:url(<xsl:value-of select="@icon" />);</xsl:attribute></xsl:otherwise></xsl:choose></xsl:if><xsl:text> </xsl:text></ins><xsl:value-of select="." /></a></xsl:for-each><xsl:if test="$children or @hasChildren"><ul><xsl:for-each select="//item[@parent_id=$node/attribute::id]"><xsl:call-template name="nodes"><xsl:with-param name="node" select="." /><xsl:with-param name="is_last" select="number(position() = last())" /></xsl:call-template></xsl:for-each></ul></xsl:if></li></xsl:template></xsl:stylesheet>','text/xml');
|
123
|
+
})(jQuery);
|
@@ -0,0 +1,124 @@
|
|
1
|
+
(function ($) {
|
2
|
+
if(typeof Sarissa == "undefined") throw "jsTree xml_nested: Sarissa is not included.";
|
3
|
+
|
4
|
+
$.extend($.tree.datastores, {
|
5
|
+
"xml_nested" : function () {
|
6
|
+
return {
|
7
|
+
get : function(obj, tree, opts) {
|
8
|
+
var str = "";
|
9
|
+
if(!obj || $(obj).size() == 0) {
|
10
|
+
obj = tree.container.children("ul").children("li");
|
11
|
+
}
|
12
|
+
else obj = $(obj);
|
13
|
+
|
14
|
+
if(obj.size() > 1) {
|
15
|
+
var _this = this;
|
16
|
+
var str = '<root>';
|
17
|
+
obj.each(function () {
|
18
|
+
opts.callback = true;
|
19
|
+
str += _this.get(this, tree, opts);
|
20
|
+
});
|
21
|
+
str += '</root>';
|
22
|
+
return str;
|
23
|
+
}
|
24
|
+
|
25
|
+
if(!opts) var opts = {};
|
26
|
+
if(!opts.outer_attrib) opts.outer_attrib = [ "id", "rel", "class" ];
|
27
|
+
if(!opts.inner_attrib) opts.inner_attrib = [ ];
|
28
|
+
if(!opts.callback) str += '<root>';
|
29
|
+
|
30
|
+
str += '<item ';
|
31
|
+
for(var i in opts.outer_attrib) {
|
32
|
+
if(!opts.outer_attrib.hasOwnProperty(i)) continue;
|
33
|
+
var val = (opts.outer_attrib[i] == "class") ? obj.attr(opts.outer_attrib[i]).replace(/(^| )last( |$)/ig," ").replace(/(^| )(leaf|closed|open)( |$)/ig," ") : obj.attr(opts.outer_attrib[i]);
|
34
|
+
if(typeof val != "undefined" && val.toString().replace(" ","").length > 0) str += ' ' + opts.outer_attrib[i] + '="' + val.toString() + '" ';
|
35
|
+
delete val;
|
36
|
+
}
|
37
|
+
str += '>';
|
38
|
+
|
39
|
+
str += '<content>';
|
40
|
+
if(tree.settings.languages.length) {
|
41
|
+
for(var i in tree.settings.languages) {
|
42
|
+
if(!tree.settings.languages.hasOwnProperty(i)) continue;
|
43
|
+
str += this.process_inner(obj.children("a." + tree.settings.languages[i]), tree, opts, tree.settings.languages[i]);
|
44
|
+
}
|
45
|
+
}
|
46
|
+
else {
|
47
|
+
str += this.process_inner(obj.children("a"), tree, opts);
|
48
|
+
}
|
49
|
+
str += '</content>';
|
50
|
+
|
51
|
+
if(obj.children("ul").size() > 0) {
|
52
|
+
var _this = this;
|
53
|
+
opts.callback = true;
|
54
|
+
obj.children("ul").children("li").each(function () {
|
55
|
+
str += _this.get(this, tree, opts);
|
56
|
+
});
|
57
|
+
opts.callback = false;
|
58
|
+
}
|
59
|
+
str += '</item>';
|
60
|
+
|
61
|
+
if(!opts.callback) str += '</root>';
|
62
|
+
return str;
|
63
|
+
},
|
64
|
+
process_inner : function(obj, tree, opts, lang) {
|
65
|
+
var str = '<name ';
|
66
|
+
if(lang) str += ' lang="' + lang + '" ';
|
67
|
+
if(opts.inner_attrib.length || obj.children("ins").get(0).style.backgroundImage.toString().length || obj.children("ins").get(0).className.length) {
|
68
|
+
if(obj.children("ins").get(0).style.className.length) {
|
69
|
+
str += ' icon="' + obj.children("ins").get(0).style.className + '" ';
|
70
|
+
}
|
71
|
+
if(obj.children("ins").get(0).style.backgroundImage.length) {
|
72
|
+
str += ' icon="' + obj.children("ins").get(0).style.backgroundImage.replace("url(","").replace(")","") + '" ';
|
73
|
+
}
|
74
|
+
if(opts.inner_attrib.length) {
|
75
|
+
for(var j in opts.inner_attrib) {
|
76
|
+
if(!opts.inner_attrib.hasOwnProperty(j)) continue;
|
77
|
+
var val = obj.attr(opts.inner_attrib[j]);
|
78
|
+
if(typeof val != "undefined" && val.toString().replace(" ","").length > 0) str += ' ' + opts.inner_attrib[j] + '="' + val.toString() + '" ';
|
79
|
+
delete val;
|
80
|
+
}
|
81
|
+
}
|
82
|
+
}
|
83
|
+
str += '><![CDATA[' + tree.get_text(obj,lang) + ']]></name>';
|
84
|
+
return str;
|
85
|
+
},
|
86
|
+
parse : function(data, tree, opts, callback) {
|
87
|
+
var processor = new XSLTProcessor();
|
88
|
+
processor.importStylesheet($.tree.datastores.xml_nested.xsl);
|
89
|
+
|
90
|
+
var result = $((new XMLSerializer()).serializeToString(processor.transformToDocument(data)).replace('<?xml version="1.0"?>',''));
|
91
|
+
// Opera bug
|
92
|
+
if(result.size() > 1) result = result.eq(1);
|
93
|
+
if(result.is("ul")) result = result.html();
|
94
|
+
else result = result.find("ul:eq(0)").html();
|
95
|
+
if(callback) callback.call(null,result);
|
96
|
+
|
97
|
+
// Disabled because of Chrome issues
|
98
|
+
// if(callback) callback.call(null,(new XMLSerializer()).serializeToString(processor.transformToDocument(data)).replace(/^<ul[^>]*>/i,"").replace(/<\/ul>$/i,""));
|
99
|
+
},
|
100
|
+
load : function(data, tree, opts, callback) {
|
101
|
+
if(opts.static) {
|
102
|
+
callback.call(null, (new DOMParser()).parseFromString(opts.static,'text/xml'));
|
103
|
+
}
|
104
|
+
else {
|
105
|
+
$.ajax({
|
106
|
+
'type' : opts.method,
|
107
|
+
'url' : opts.url,
|
108
|
+
'data' : data,
|
109
|
+
'dataType' : "xml",
|
110
|
+
'success' : function (d, textStatus) {
|
111
|
+
callback.call(null, d);
|
112
|
+
},
|
113
|
+
'error' : function (xhttp, textStatus, errorThrown) {
|
114
|
+
callback.call(null, false);
|
115
|
+
tree.error(errorThrown + " " + textStatus);
|
116
|
+
}
|
117
|
+
});
|
118
|
+
}
|
119
|
+
}
|
120
|
+
}
|
121
|
+
}
|
122
|
+
});
|
123
|
+
$.tree.datastores.xml_nested.xsl = (new DOMParser()).parseFromString('<?xml version="1.0" encoding="utf-8" ?><xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" ><xsl:output method="html" encoding="utf-8" omit-xml-declaration="yes" standalone="no" indent="no" media-type="text/html" /><xsl:template match="/"><xsl:call-template name="nodes"><xsl:with-param name="node" select="/root" /></xsl:call-template></xsl:template><xsl:template name="nodes"><xsl:param name="node" /><ul><xsl:for-each select="$node/item"><xsl:variable name="children" select="count(./item) > 0" /><li><xsl:attribute name="class"><xsl:if test="position() = last()"> last </xsl:if><xsl:choose><xsl:when test="@state = \'open\'"> open </xsl:when><xsl:when test="$children or @hasChildren"> closed </xsl:when><xsl:otherwise> leaf </xsl:otherwise></xsl:choose><xsl:value-of select="@class" /></xsl:attribute><xsl:for-each select="@*"><xsl:if test="name() != \'class\' and name() != \'state\' and name() != \'hasChildren\'"><xsl:attribute name="{name()}"><xsl:value-of select="." /></xsl:attribute></xsl:if></xsl:for-each><xsl:for-each select="content/name"><a href=""><xsl:attribute name="class"><xsl:value-of select="@lang" /><xsl:value-of select="@class" /></xsl:attribute><xsl:attribute name="style"><xsl:value-of select="@style" /></xsl:attribute><xsl:for-each select="@*"><xsl:if test="name() != \'style\' and name() != \'class\'"><xsl:attribute name="{name()}"><xsl:value-of select="." /></xsl:attribute></xsl:if></xsl:for-each><ins><xsl:if test="string-length(attribute::icon) > 0"><xsl:choose><xsl:when test="not(contains(@icon,\'/\'))"><xsl:attribute name="class"><xsl:value-of select="@icon" /></xsl:attribute></xsl:when><xsl:otherwise><xsl:attribute name="style">background-image:url(<xsl:value-of select="@icon" />);</xsl:attribute></xsl:otherwise></xsl:choose></xsl:if><xsl:text> </xsl:text></ins><xsl:value-of select="current()" /></a></xsl:for-each><xsl:if test="$children or @hasChildren"><xsl:call-template name="nodes"><xsl:with-param name="node" select="current()" /></xsl:call-template></xsl:if></li></xsl:for-each></ul></xsl:template></xsl:stylesheet>','text/xml');
|
124
|
+
})(jQuery);
|
Binary file
|
Binary file
|
Binary file
|
@@ -0,0 +1,34 @@
|
|
1
|
+
/* BACKGROUND */
|
2
|
+
.tree-apple .ltr, .tree-apple .rtl { background:url("bg.jpg") left top repeat; min-width:100%; _width:100%; margin-left:0; margin-right:0; display:table; }
|
3
|
+
.tree-apple .ltr > li.leaf, .tree-apple .rtl > li.leaf { background-image:none; }
|
4
|
+
|
5
|
+
/* LOCKED */
|
6
|
+
.tree-apple .locked li a { color:gray; }
|
7
|
+
/* DOTS */
|
8
|
+
.tree-apple ul { background-position:6px 1px; background-repeat:repeat-y; background-image:url(data:image/gif;base64,R0lGODlhAgACAIAAAB4dGf///yH5BAEAAAEALAAAAAACAAIAAAICRF4AOw==); _background-image:url("dot_for_ie.gif"); *background-image:url("dot_for_ie.gif"); }
|
9
|
+
.tree-apple li { background-position:-64px -16px; background-repeat:no-repeat; background-image:url("icons.png"); }
|
10
|
+
/* NO DOTS */
|
11
|
+
.tree-apple .no_dots, .tree-apple .no_dots ul { background:transparent; }
|
12
|
+
.tree-apple .no_dots li.leaf { background-image:none; background-color:transparent; }
|
13
|
+
/* OPEN or CLOSED */
|
14
|
+
.tree-apple li.open { background:url("icons.png") -32px -48px no-repeat; }
|
15
|
+
.tree-apple li.closed, #jstree-dragged.tree-apple li li.open { background:url("icons.png") -48px -32px no-repeat; }
|
16
|
+
#jstree-marker { background-image:url("icons.png"); }
|
17
|
+
/* DEFAULT, HOVER, CLICKED, LOADING STATES */
|
18
|
+
.tree-apple li a, .tree-apple li span { border-radius:3px; -moz-border-radius:3px; -webkit-border-radius:3px; }
|
19
|
+
.tree-apple li a:hover, .tree-apple li a.hover, .tree-apple li span { background: #e7f4f9; border:1px solid #d8f0fa; padding:0px 3px 0px 3px; }
|
20
|
+
.tree-apple li a.clicked, .tree-apple li a.clicked:hover, .tree-apple li span.clicked { background: #beebff; border:1px solid #99defd; padding:0px 3px 0px 3px; }
|
21
|
+
/* ICONS */
|
22
|
+
.tree-apple ins { background-image:url("icons.png"); background-position:0 0; background-repeat:no-repeat; }
|
23
|
+
.tree-apple ul li a.loading ins { background-image:url("throbber.gif") !important; background-position:0 0 !important; } /* UL is added to make selector stronger */
|
24
|
+
.tree-apple li a ins.forbidden { background-position:-16px -16px; }
|
25
|
+
.tree-apple .locked li a ins { background-position:0 -48px; }
|
26
|
+
.tree-apple li span ins { background-position:-16px 0; }
|
27
|
+
#jstree-dragged.tree-apple ins { background:url("icons.png") -16px -32px no-repeat; }
|
28
|
+
#jstree-dragged.tree-apple ins.forbidden { background:url("icons.png") -16px -16px no-repeat; }
|
29
|
+
|
30
|
+
/* CONTEXT MENU */
|
31
|
+
.tree-apple-context a ins { background-image:url("icons.png"); background-repeat:no-repeat; background-position:-64px -64px; }
|
32
|
+
.tree-apple-context a ins.create { background-position:0 -16px; }
|
33
|
+
.tree-apple-context a ins.rename { background-position:-16px 0px; }
|
34
|
+
.tree-apple-context a ins.remove { background-position:0 -32px; }
|
Binary file
|
Binary file
|
Binary file
|