PluginProbe ʕ •ᴥ•ʔ
JetBackup – Backup, Restore & Migrate / 1.4.7
JetBackup – Backup, Restore & Migrate v1.4.7
3.1.22.3 1.4.3 1.4.4 1.4.5 1.4.6 1.4.7 1.4.8 1.4.8.1 1.4.9 1.5.0 1.5.1 1.5.1.1 1.5.2 1.5.3 1.5.4 1.5.5 1.5.6 1.5.7 1.5.8 1.6.0 1.6.10 1.6.11 1.6.12 1.6.13 1.6.15 1.6.5.1 1.6.8.8 1.6.9 1.6.9.1 2.0.3 2.0.4 2.0.5 2.0.6 2.0.7.5 2.0.8.7 2.0.9.11 2.0.9.14 2.0.9.15 2.0.9.6 2.0.9.7 2.0.9.9 3.1.10.7 3.1.11.1 3.1.12.3 3.1.13.4 3.1.14.17 3.1.15.4 3.1.16.1 3.1.17.5 3.1.18.10 3.1.18.8 3.1.18.9 3.1.19.8 3.1.20.3 3.1.21.3 3.1.7.9 3.1.9.2 trunk 1.1.90 1.1.91 1.2.0 1.2.5 1.2.6 1.2.7 1.2.8 1.2.9 1.3.0 1.3.1 1.3.2 1.3.3 1.3.4 1.3.6 1.3.7 1.3.8 1.3.9 1.4.0 1.4.1 1.4.2
backup / public / js / jstree.types.js
backup / public / js Last commit date
Chart.bundle.min.js 5 years ago bootstrap-switch.min.js 5 years ago bootstrap.min.js 5 years ago deactivationSurvey.js 5 years ago jquery-ui.js 5 years ago jquery.fileupload.js 5 years ago jquery.iframe-transport.js 5 years ago jquery.rateyo.js 5 years ago jstree.checkbox.js 5 years ago jstree.min.js 5 years ago jstree.types.js 5 years ago jstree.wholerow.js 5 years ago less.min.js 5 years ago main.js 5 years ago popup.js 5 years ago sgNoticeDismiss.js 5 years ago sgbackup.js 5 years ago sgcloud.js 5 years ago sgdiscount.js 5 years ago sglicense.js 5 years ago sglogin.js 5 years ago sgrequesthandler.js 5 years ago sgrequesthandler.wordpress.js 5 years ago sgschedule.js 5 years ago sgsettings.js 5 years ago
jstree.types.js
373 lines
1 /**
2 * ### Types plugin
3 *
4 * Makes it possible to add predefined types for groups of nodes, which make it possible to easily control nesting rules and icon for each group.
5 */
6 /*globals jQuery, define, exports, require */
7 (function (factory) {
8 "use strict";
9 if (typeof define === 'function' && define.amd) {
10 define('jstree.types', ['jquery','jstree'], factory);
11 }
12 else if(typeof exports === 'object') {
13 factory(require('jquery'), require('jstree'));
14 }
15 else {
16 factory(jQuery, jQuery.jstree);
17 }
18 }(function ($, jstree, undefined) {
19 "use strict";
20
21 if($.jstree.plugins.types) { return; }
22
23 /**
24 * An object storing all types as key value pairs, where the key is the type name and the value is an object that could contain following keys (all optional).
25 *
26 * * `max_children` the maximum number of immediate children this node type can have. Do not specify or set to `-1` for unlimited.
27 * * `max_depth` the maximum number of nesting this node type can have. A value of `1` would mean that the node can have children, but no grandchildren. Do not specify or set to `-1` for unlimited.
28 * * `valid_children` an array of node type strings, that nodes of this type can have as children. Do not specify or set to `-1` for no limits.
29 * * `icon` a string - can be a path to an icon or a className, if using an image that is in the current directory use a `./` prefix, otherwise it will be detected as a class. Omit to use the default icon from your theme.
30 * * `li_attr` an object of values which will be used to add HTML attributes on the resulting LI DOM node (merged with the node's own data)
31 * * `a_attr` an object of values which will be used to add HTML attributes on the resulting A DOM node (merged with the node's own data)
32 *
33 * There are two predefined types:
34 *
35 * * `#` represents the root of the tree, for example `max_children` would control the maximum number of root nodes.
36 * * `default` represents the default node - any settings here will be applied to all nodes that do not have a type specified.
37 *
38 * @name $.jstree.defaults.types
39 * @plugin types
40 */
41 $.jstree.defaults.types = {
42 'default' : {}
43 };
44 $.jstree.defaults.types[$.jstree.root] = {};
45
46 $.jstree.plugins.types = function (options, parent) {
47 this.init = function (el, options) {
48 var i, j;
49 if(options && options.types && options.types['default']) {
50 for(i in options.types) {
51 if(i !== "default" && i !== $.jstree.root && options.types.hasOwnProperty(i)) {
52 for(j in options.types['default']) {
53 if(options.types['default'].hasOwnProperty(j) && options.types[i][j] === undefined) {
54 options.types[i][j] = options.types['default'][j];
55 }
56 }
57 }
58 }
59 }
60 parent.init.call(this, el, options);
61 this._model.data[$.jstree.root].type = $.jstree.root;
62 };
63 this.refresh = function (skip_loading, forget_state) {
64 parent.refresh.call(this, skip_loading, forget_state);
65 this._model.data[$.jstree.root].type = $.jstree.root;
66 };
67 this.bind = function () {
68 this.element
69 .on('model.jstree', $.proxy(function (e, data) {
70 var m = this._model.data,
71 dpc = data.nodes,
72 t = this.settings.types,
73 i, j, c = 'default', k;
74 for(i = 0, j = dpc.length; i < j; i++) {
75 c = 'default';
76 if(m[dpc[i]].original && m[dpc[i]].original.type && t[m[dpc[i]].original.type]) {
77 c = m[dpc[i]].original.type;
78 }
79 if(m[dpc[i]].data && m[dpc[i]].data.jstree && m[dpc[i]].data.jstree.type && t[m[dpc[i]].data.jstree.type]) {
80 c = m[dpc[i]].data.jstree.type;
81 }
82 m[dpc[i]].type = c;
83 if(m[dpc[i]].icon === true && t[c].icon !== undefined) {
84 m[dpc[i]].icon = t[c].icon;
85 }
86 if(t[c].li_attr !== undefined && typeof t[c].li_attr === 'object') {
87 for (k in t[c].li_attr) {
88 if (t[c].li_attr.hasOwnProperty(k)) {
89 if (k === 'id') {
90 continue;
91 }
92 else if (m[dpc[i]].li_attr[k] === undefined) {
93 m[dpc[i]].li_attr[k] = t[c].li_attr[k];
94 }
95 else if (k === 'class') {
96 m[dpc[i]].li_attr['class'] = t[c].li_attr['class'] + ' ' + m[dpc[i]].li_attr['class'];
97 }
98 }
99 }
100 }
101 if(t[c].a_attr !== undefined && typeof t[c].a_attr === 'object') {
102 for (k in t[c].a_attr) {
103 if (t[c].a_attr.hasOwnProperty(k)) {
104 if (k === 'id') {
105 continue;
106 }
107 else if (m[dpc[i]].a_attr[k] === undefined) {
108 m[dpc[i]].a_attr[k] = t[c].a_attr[k];
109 }
110 else if (k === 'href' && m[dpc[i]].a_attr[k] === '#') {
111 m[dpc[i]].a_attr['href'] = t[c].a_attr['href'];
112 }
113 else if (k === 'class') {
114 m[dpc[i]].a_attr['class'] = t[c].a_attr['class'] + ' ' + m[dpc[i]].a_attr['class'];
115 }
116 }
117 }
118 }
119 }
120 m[$.jstree.root].type = $.jstree.root;
121 }, this));
122 parent.bind.call(this);
123 };
124 this.get_json = function (obj, options, flat) {
125 var i, j,
126 m = this._model.data,
127 opt = options ? $.extend(true, {}, options, {no_id:false}) : {},
128 tmp = parent.get_json.call(this, obj, opt, flat);
129 if(tmp === false) { return false; }
130 if($.isArray(tmp)) {
131 for(i = 0, j = tmp.length; i < j; i++) {
132 tmp[i].type = tmp[i].id && m[tmp[i].id] && m[tmp[i].id].type ? m[tmp[i].id].type : "default";
133 if(options && options.no_id) {
134 delete tmp[i].id;
135 if(tmp[i].li_attr && tmp[i].li_attr.id) {
136 delete tmp[i].li_attr.id;
137 }
138 if(tmp[i].a_attr && tmp[i].a_attr.id) {
139 delete tmp[i].a_attr.id;
140 }
141 }
142 }
143 }
144 else {
145 tmp.type = tmp.id && m[tmp.id] && m[tmp.id].type ? m[tmp.id].type : "default";
146 if(options && options.no_id) {
147 tmp = this._delete_ids(tmp);
148 }
149 }
150 return tmp;
151 };
152 this._delete_ids = function (tmp) {
153 if($.isArray(tmp)) {
154 for(var i = 0, j = tmp.length; i < j; i++) {
155 tmp[i] = this._delete_ids(tmp[i]);
156 }
157 return tmp;
158 }
159 delete tmp.id;
160 if(tmp.li_attr && tmp.li_attr.id) {
161 delete tmp.li_attr.id;
162 }
163 if(tmp.a_attr && tmp.a_attr.id) {
164 delete tmp.a_attr.id;
165 }
166 if(tmp.children && $.isArray(tmp.children)) {
167 tmp.children = this._delete_ids(tmp.children);
168 }
169 return tmp;
170 };
171 this.check = function (chk, obj, par, pos, more) {
172 if(parent.check.call(this, chk, obj, par, pos, more) === false) { return false; }
173 obj = obj && obj.id ? obj : this.get_node(obj);
174 par = par && par.id ? par : this.get_node(par);
175 var m = obj && obj.id ? (more && more.origin ? more.origin : $.jstree.reference(obj.id)) : null, tmp, d, i, j;
176 m = m && m._model && m._model.data ? m._model.data : null;
177 switch(chk) {
178 case "create_node":
179 case "move_node":
180 case "copy_node":
181 if(chk !== 'move_node' || $.inArray(obj.id, par.children) === -1) {
182 tmp = this.get_rules(par);
183 if(tmp.max_children !== undefined && tmp.max_children !== -1 && tmp.max_children === par.children.length) {
184 this._data.core.last_error = { 'error' : 'check', 'plugin' : 'types', 'id' : 'types_01', 'reason' : 'max_children prevents function: ' + chk, 'data' : JSON.stringify({ 'chk' : chk, 'pos' : pos, 'obj' : obj && obj.id ? obj.id : false, 'par' : par && par.id ? par.id : false }) };
185 return false;
186 }
187 if(tmp.valid_children !== undefined && tmp.valid_children !== -1 && $.inArray((obj.type || 'default'), tmp.valid_children) === -1) {
188 this._data.core.last_error = { 'error' : 'check', 'plugin' : 'types', 'id' : 'types_02', 'reason' : 'valid_children prevents function: ' + chk, 'data' : JSON.stringify({ 'chk' : chk, 'pos' : pos, 'obj' : obj && obj.id ? obj.id : false, 'par' : par && par.id ? par.id : false }) };
189 return false;
190 }
191 if(m && obj.children_d && obj.parents) {
192 d = 0;
193 for(i = 0, j = obj.children_d.length; i < j; i++) {
194 d = Math.max(d, m[obj.children_d[i]].parents.length);
195 }
196 d = d - obj.parents.length + 1;
197 }
198 if(d <= 0 || d === undefined) { d = 1; }
199 do {
200 if(tmp.max_depth !== undefined && tmp.max_depth !== -1 && tmp.max_depth < d) {
201 this._data.core.last_error = { 'error' : 'check', 'plugin' : 'types', 'id' : 'types_03', 'reason' : 'max_depth prevents function: ' + chk, 'data' : JSON.stringify({ 'chk' : chk, 'pos' : pos, 'obj' : obj && obj.id ? obj.id : false, 'par' : par && par.id ? par.id : false }) };
202 return false;
203 }
204 par = this.get_node(par.parent);
205 tmp = this.get_rules(par);
206 d++;
207 } while(par);
208 }
209 break;
210 }
211 return true;
212 };
213 /**
214 * used to retrieve the type settings object for a node
215 * @name get_rules(obj)
216 * @param {mixed} obj the node to find the rules for
217 * @return {Object}
218 * @plugin types
219 */
220 this.get_rules = function (obj) {
221 obj = this.get_node(obj);
222 if(!obj) { return false; }
223 var tmp = this.get_type(obj, true);
224 if(tmp.max_depth === undefined) { tmp.max_depth = -1; }
225 if(tmp.max_children === undefined) { tmp.max_children = -1; }
226 if(tmp.valid_children === undefined) { tmp.valid_children = -1; }
227 return tmp;
228 };
229 /**
230 * used to retrieve the type string or settings object for a node
231 * @name get_type(obj [, rules])
232 * @param {mixed} obj the node to find the rules for
233 * @param {Boolean} rules if set to `true` instead of a string the settings object will be returned
234 * @return {String|Object}
235 * @plugin types
236 */
237 this.get_type = function (obj, rules) {
238 obj = this.get_node(obj);
239 return (!obj) ? false : ( rules ? $.extend({ 'type' : obj.type }, this.settings.types[obj.type]) : obj.type);
240 };
241 /**
242 * used to change a node's type
243 * @name set_type(obj, type)
244 * @param {mixed} obj the node to change
245 * @param {String} type the new type
246 * @plugin types
247 */
248 this.set_type = function (obj, type) {
249 var m = this._model.data, t, t1, t2, old_type, old_icon, k, d, a;
250 if($.isArray(obj)) {
251 obj = obj.slice();
252 for(t1 = 0, t2 = obj.length; t1 < t2; t1++) {
253 this.set_type(obj[t1], type);
254 }
255 return true;
256 }
257 t = this.settings.types;
258 obj = this.get_node(obj);
259 if(!t[type] || !obj) { return false; }
260 d = this.get_node(obj, true);
261 if (d && d.length) {
262 a = d.children('.jstree-anchor');
263 }
264 old_type = obj.type;
265 old_icon = this.get_icon(obj);
266 obj.type = type;
267 if(old_icon === true || !t[old_type] || (t[old_type].icon !== undefined && old_icon === t[old_type].icon)) {
268 this.set_icon(obj, t[type].icon !== undefined ? t[type].icon : true);
269 }
270
271 // remove old type props
272 if(t[old_type] && t[old_type].li_attr !== undefined && typeof t[old_type].li_attr === 'object') {
273 for (k in t[old_type].li_attr) {
274 if (t[old_type].li_attr.hasOwnProperty(k)) {
275 if (k === 'id') {
276 continue;
277 }
278 else if (k === 'class') {
279 m[obj.id].li_attr['class'] = (m[obj.id].li_attr['class'] || '').replace(t[old_type].li_attr[k], '');
280 if (d) { d.removeClass(t[old_type].li_attr[k]); }
281 }
282 else if (m[obj.id].li_attr[k] === t[old_type].li_attr[k]) {
283 m[obj.id].li_attr[k] = null;
284 if (d) { d.removeAttr(k); }
285 }
286 }
287 }
288 }
289 if(t[old_type] && t[old_type].a_attr !== undefined && typeof t[old_type].a_attr === 'object') {
290 for (k in t[old_type].a_attr) {
291 if (t[old_type].a_attr.hasOwnProperty(k)) {
292 if (k === 'id') {
293 continue;
294 }
295 else if (k === 'class') {
296 m[obj.id].a_attr['class'] = (m[obj.id].a_attr['class'] || '').replace(t[old_type].a_attr[k], '');
297 if (a) { a.removeClass(t[old_type].a_attr[k]); }
298 }
299 else if (m[obj.id].a_attr[k] === t[old_type].a_attr[k]) {
300 if (k === 'href') {
301 m[obj.id].a_attr[k] = '#';
302 if (a) { a.attr('href', '#'); }
303 }
304 else {
305 delete m[obj.id].a_attr[k];
306 if (a) { a.removeAttr(k); }
307 }
308 }
309 }
310 }
311 }
312
313 // add new props
314 if(t[type].li_attr !== undefined && typeof t[type].li_attr === 'object') {
315 for (k in t[type].li_attr) {
316 if (t[type].li_attr.hasOwnProperty(k)) {
317 if (k === 'id') {
318 continue;
319 }
320 else if (m[obj.id].li_attr[k] === undefined) {
321 m[obj.id].li_attr[k] = t[type].li_attr[k];
322 if (d) {
323 if (k === 'class') {
324 d.addClass(t[type].li_attr[k]);
325 }
326 else {
327 d.attr(k, t[type].li_attr[k]);
328 }
329 }
330 }
331 else if (k === 'class') {
332 m[obj.id].li_attr['class'] = t[type].li_attr[k] + ' ' + m[obj.id].li_attr['class'];
333 if (d) { d.addClass(t[type].li_attr[k]); }
334 }
335 }
336 }
337 }
338 if(t[type].a_attr !== undefined && typeof t[type].a_attr === 'object') {
339 for (k in t[type].a_attr) {
340 if (t[type].a_attr.hasOwnProperty(k)) {
341 if (k === 'id') {
342 continue;
343 }
344 else if (m[obj.id].a_attr[k] === undefined) {
345 m[obj.id].a_attr[k] = t[type].a_attr[k];
346 if (a) {
347 if (k === 'class') {
348 a.addClass(t[type].a_attr[k]);
349 }
350 else {
351 a.attr(k, t[type].a_attr[k]);
352 }
353 }
354 }
355 else if (k === 'href' && m[obj.id].a_attr[k] === '#') {
356 m[obj.id].a_attr['href'] = t[type].a_attr['href'];
357 if (a) { a.attr('href', t[type].a_attr['href']); }
358 }
359 else if (k === 'class') {
360 m[obj.id].a_attr['class'] = t[type].a_attr['class'] + ' ' + m[obj.id].a_attr['class'];
361 if (a) { a.addClass(t[type].a_attr[k]); }
362 }
363 }
364 }
365 }
366
367 return true;
368 };
369 };
370 // include the types plugin by default
371 // $.jstree.defaults.plugins.push("types");
372 }));
373