/pack-rat/003_pack_rat/pack-rat/node_modules/jstree/src/jstree.state.js |
@@ -0,0 +1,125 @@ |
/** |
* ### State plugin |
* |
* Saves the state of the tree (selected nodes, opened nodes) on the user's computer using available options (localStorage, cookies, etc) |
*/ |
/*globals jQuery, define, exports, require */ |
(function (factory) { |
"use strict"; |
if (typeof define === 'function' && define.amd) { |
define('jstree.state', ['jquery','jstree'], factory); |
} |
else if(typeof exports === 'object') { |
factory(require('jquery'), require('jstree')); |
} |
else { |
factory(jQuery, jQuery.jstree); |
} |
}(function ($, jstree, undefined) { |
"use strict"; |
|
if($.jstree.plugins.state) { return; } |
|
var to = false; |
/** |
* stores all defaults for the state plugin |
* @name $.jstree.defaults.state |
* @plugin state |
*/ |
$.jstree.defaults.state = { |
/** |
* A string for the key to use when saving the current tree (change if using multiple trees in your project). Defaults to `jstree`. |
* @name $.jstree.defaults.state.key |
* @plugin state |
*/ |
key : 'jstree', |
/** |
* A space separated list of events that trigger a state save. Defaults to `changed.jstree open_node.jstree close_node.jstree`. |
* @name $.jstree.defaults.state.events |
* @plugin state |
*/ |
events : 'changed.jstree open_node.jstree close_node.jstree check_node.jstree uncheck_node.jstree', |
/** |
* Time in milliseconds after which the state will expire. Defaults to 'false' meaning - no expire. |
* @name $.jstree.defaults.state.ttl |
* @plugin state |
*/ |
ttl : false, |
/** |
* A function that will be executed prior to restoring state with one argument - the state object. Can be used to clear unwanted parts of the state. |
* @name $.jstree.defaults.state.filter |
* @plugin state |
*/ |
filter : false |
}; |
$.jstree.plugins.state = function (options, parent) { |
this.bind = function () { |
parent.bind.call(this); |
var bind = $.proxy(function () { |
this.element.on(this.settings.state.events, $.proxy(function () { |
if(to) { clearTimeout(to); } |
to = setTimeout($.proxy(function () { this.save_state(); }, this), 100); |
}, this)); |
/** |
* triggered when the state plugin is finished restoring the state (and immediately after ready if there is no state to restore). |
* @event |
* @name state_ready.jstree |
* @plugin state |
*/ |
this.trigger('state_ready'); |
}, this); |
this.element |
.on("ready.jstree", $.proxy(function (e, data) { |
this.element.one("restore_state.jstree", bind); |
if(!this.restore_state()) { bind(); } |
}, this)); |
}; |
/** |
* save the state |
* @name save_state() |
* @plugin state |
*/ |
this.save_state = function () { |
var st = { 'state' : this.get_state(), 'ttl' : this.settings.state.ttl, 'sec' : +(new Date()) }; |
$.vakata.storage.set(this.settings.state.key, JSON.stringify(st)); |
}; |
/** |
* restore the state from the user's computer |
* @name restore_state() |
* @plugin state |
*/ |
this.restore_state = function () { |
var k = $.vakata.storage.get(this.settings.state.key); |
if(!!k) { try { k = JSON.parse(k); } catch(ex) { return false; } } |
if(!!k && k.ttl && k.sec && +(new Date()) - k.sec > k.ttl) { return false; } |
if(!!k && k.state) { k = k.state; } |
if(!!k && $.isFunction(this.settings.state.filter)) { k = this.settings.state.filter.call(this, k); } |
if(!!k) { |
this.element.one("set_state.jstree", function (e, data) { data.instance.trigger('restore_state', { 'state' : $.extend(true, {}, k) }); }); |
this.set_state(k); |
return true; |
} |
return false; |
}; |
/** |
* clear the state on the user's computer |
* @name clear_state() |
* @plugin state |
*/ |
this.clear_state = function () { |
return $.vakata.storage.del(this.settings.state.key); |
}; |
}; |
|
(function ($, undefined) { |
$.vakata.storage = { |
// simply specifying the functions in FF throws an error |
set : function (key, val) { return window.localStorage.setItem(key, val); }, |
get : function (key) { return window.localStorage.getItem(key); }, |
del : function (key) { return window.localStorage.removeItem(key); } |
}; |
}($)); |
|
// include the state plugin by default |
// $.jstree.defaults.plugins.push("state"); |
})); |