nexus site path corrected
[portal.git] / ecomp-portal-FE / client / bower_components / jqTree / lib / save_state_handler.js
1 var $, SaveStateHandler, indexOf, isInt, util;
2
3 util = require('./util');
4
5 indexOf = util.indexOf;
6
7 isInt = util.isInt;
8
9 $ = jQuery;
10
11 SaveStateHandler = (function() {
12   function SaveStateHandler(tree_widget) {
13     this.tree_widget = tree_widget;
14   }
15
16   SaveStateHandler.prototype.saveState = function() {
17     var state;
18     state = JSON.stringify(this.getState());
19     if (this.tree_widget.options.onSetStateFromStorage) {
20       return this.tree_widget.options.onSetStateFromStorage(state);
21     } else if (this.supportsLocalStorage()) {
22       return localStorage.setItem(this.getCookieName(), state);
23     } else if ($.cookie) {
24       $.cookie.raw = true;
25       return $.cookie(this.getCookieName(), state, {
26         path: '/'
27       });
28     }
29   };
30
31   SaveStateHandler.prototype.getStateFromStorage = function() {
32     var json_data;
33     json_data = this._loadFromStorage();
34     if (json_data) {
35       return this._parseState(json_data);
36     } else {
37       return null;
38     }
39   };
40
41   SaveStateHandler.prototype._parseState = function(json_data) {
42     var state;
43     state = $.parseJSON(json_data);
44     if (state && state.selected_node && isInt(state.selected_node)) {
45       state.selected_node = [state.selected_node];
46     }
47     return state;
48   };
49
50   SaveStateHandler.prototype._loadFromStorage = function() {
51     if (this.tree_widget.options.onGetStateFromStorage) {
52       return this.tree_widget.options.onGetStateFromStorage();
53     } else if (this.supportsLocalStorage()) {
54       return localStorage.getItem(this.getCookieName());
55     } else if ($.cookie) {
56       $.cookie.raw = true;
57       return $.cookie(this.getCookieName());
58     } else {
59       return null;
60     }
61   };
62
63   SaveStateHandler.prototype.getState = function() {
64     var getOpenNodeIds, getSelectedNodeIds;
65     getOpenNodeIds = (function(_this) {
66       return function() {
67         var open_nodes;
68         open_nodes = [];
69         _this.tree_widget.tree.iterate(function(node) {
70           if (node.is_open && node.id && node.hasChildren()) {
71             open_nodes.push(node.id);
72           }
73           return true;
74         });
75         return open_nodes;
76       };
77     })(this);
78     getSelectedNodeIds = (function(_this) {
79       return function() {
80         var n;
81         return (function() {
82           var i, len, ref, results;
83           ref = this.tree_widget.getSelectedNodes();
84           results = [];
85           for (i = 0, len = ref.length; i < len; i++) {
86             n = ref[i];
87             results.push(n.id);
88           }
89           return results;
90         }).call(_this);
91       };
92     })(this);
93     return {
94       open_nodes: getOpenNodeIds(),
95       selected_node: getSelectedNodeIds()
96     };
97   };
98
99   SaveStateHandler.prototype.setInitialState = function(state) {
100     var must_load_on_demand;
101     if (!state) {
102       return false;
103     } else {
104       must_load_on_demand = this._openInitialNodes(state.open_nodes);
105       this._selectInitialNodes(state.selected_node);
106       return must_load_on_demand;
107     }
108   };
109
110   SaveStateHandler.prototype._openInitialNodes = function(node_ids) {
111     var i, len, must_load_on_demand, node, node_id;
112     must_load_on_demand = false;
113     for (i = 0, len = node_ids.length; i < len; i++) {
114       node_id = node_ids[i];
115       node = this.tree_widget.getNodeById(node_id);
116       if (node) {
117         if (!node.load_on_demand) {
118           node.is_open = true;
119         } else {
120           must_load_on_demand = true;
121         }
122       }
123     }
124     return must_load_on_demand;
125   };
126
127   SaveStateHandler.prototype._selectInitialNodes = function(node_ids) {
128     var i, len, node, node_id, select_count;
129     select_count = 0;
130     for (i = 0, len = node_ids.length; i < len; i++) {
131       node_id = node_ids[i];
132       node = this.tree_widget.getNodeById(node_id);
133       if (node) {
134         select_count += 1;
135         this.tree_widget.select_node_handler.addToSelection(node);
136       }
137     }
138     return select_count !== 0;
139   };
140
141   SaveStateHandler.prototype.setInitialStateOnDemand = function(state, cb_finished) {
142     if (state) {
143       return this._setInitialStateOnDemand(state.open_nodes, state.selected_node, cb_finished);
144     } else {
145       return cb_finished();
146     }
147   };
148
149   SaveStateHandler.prototype._setInitialStateOnDemand = function(node_ids, selected_nodes, cb_finished) {
150     var loadAndOpenNode, loading_count, openNodes;
151     loading_count = 0;
152     openNodes = (function(_this) {
153       return function() {
154         var i, len, new_nodes_ids, node, node_id;
155         new_nodes_ids = [];
156         for (i = 0, len = node_ids.length; i < len; i++) {
157           node_id = node_ids[i];
158           node = _this.tree_widget.getNodeById(node_id);
159           if (!node) {
160             new_nodes_ids.push(node_id);
161           } else {
162             if (!node.is_loading) {
163               if (node.load_on_demand) {
164                 loadAndOpenNode(node);
165               } else {
166                 _this.tree_widget._openNode(node, false);
167               }
168             }
169           }
170         }
171         node_ids = new_nodes_ids;
172         if (_this._selectInitialNodes(selected_nodes)) {
173           _this.tree_widget._refreshElements();
174         }
175         if (loading_count === 0) {
176           return cb_finished();
177         }
178       };
179     })(this);
180     loadAndOpenNode = (function(_this) {
181       return function(node) {
182         loading_count += 1;
183         return _this.tree_widget._openNode(node, false, function() {
184           loading_count -= 1;
185           return openNodes();
186         });
187       };
188     })(this);
189     return openNodes();
190   };
191
192   SaveStateHandler.prototype.getCookieName = function() {
193     if (typeof this.tree_widget.options.saveState === 'string') {
194       return this.tree_widget.options.saveState;
195     } else {
196       return 'tree';
197     }
198   };
199
200   SaveStateHandler.prototype.supportsLocalStorage = function() {
201     var testSupport;
202     testSupport = function() {
203       var error, key;
204       if (typeof localStorage === "undefined" || localStorage === null) {
205         return false;
206       } else {
207         try {
208           key = '_storage_test';
209           sessionStorage.setItem(key, true);
210           sessionStorage.removeItem(key);
211         } catch (error1) {
212           error = error1;
213           return false;
214         }
215         return true;
216       }
217     };
218     if (this._supportsLocalStorage == null) {
219       this._supportsLocalStorage = testSupport();
220     }
221     return this._supportsLocalStorage;
222   };
223
224   SaveStateHandler.prototype.getNodeIdToBeSelected = function() {
225     var state;
226     state = this.getStateFromStorage();
227     if (state && state.selected_node) {
228       return state.selected_node[0];
229     } else {
230       return null;
231     }
232   };
233
234   return SaveStateHandler;
235
236 })();
237
238 module.exports = SaveStateHandler;