]>
git.proxmox.com Git - pve-manager.git/blob - www/manager6/StateProvider.js
9924cd4a915436f1f7aa41803af6988a08280b76
1 /* This state provider keeps part of the state inside
4 * We compress (shorten) url using dictionary based compression
5 * i.e. use column separated list instead of url encoded hash:
7 * := indicates string values
8 * :\d+ lookup value in dictionary hash
9 * #v1:=value1:5:=value2:=value3:...
12 Ext
.define('PVE.StateProvider', {
13 extend
: 'Ext.state.LocalStorageProvider',
16 setHV: function(name
, newvalue
, fireEvents
) {
20 var oldtext
= Ext
.encode(me
.UIState
[name
]);
21 var newtext
= Ext
.encode(newvalue
);
22 if (newtext
!= oldtext
) {
24 me
.UIState
[name
] = newvalue
;
25 //console.log("changed old " + name + " " + oldtext);
26 //console.log("changed new " + name + " " + newtext);
28 me
.fireEvent("statechange", me
, name
, { value
: newvalue
});
36 // order is important for notifications
66 'firewall-options': 36,
68 'firewall-aliases': 34,
105 decodeHToken: function(token
) {
110 Ext
.Array
.each(me
.hslist
, function(rec
) {
111 state
[rec
[0]] = rec
[1];
116 // return Ext.urlDecode(token);
118 var items
= token
.split(':');
119 var prefix
= items
.shift();
121 if (prefix
!= me
.hprefix
) {
122 return me
.decodeHToken();
125 Ext
.Array
.each(me
.hslist
, function(rec
) {
126 var value
= items
.shift();
128 if (value
[0] === '=') {
129 value
= decodeURIComponent(value
.slice(1));
131 Ext
.Object
.each(me
.compDict
, function(key
, cv
) {
139 state
[rec
[0]] = value
;
145 encodeHToken: function(state
) {
148 // return Ext.urlEncode(state);
150 var ctoken
= me
.hprefix
;
151 Ext
.Array
.each(me
.hslist
, function(rec
) {
152 var value
= state
[rec
[0]];
153 if (!Ext
.isDefined(value
)) {
156 value
= encodeURIComponent(value
);
160 var comp
= me
.compDict
[value
];
161 if (Ext
.isDefined(comp
)) {
162 ctoken
+= ":" + comp
;
164 ctoken
+= ":=" + value
;
172 constructor: function(config
){
175 me
.callParent([config
]);
177 me
.UIState
= me
.decodeHToken(); // set default
179 var history_change_cb = function(token
) {
180 //console.log("HC " + token);
182 var res
= window
.confirm(gettext('Are you sure you want to navigate away from this page?'));
184 // process text value and close...
187 Ext
.History
.forward();
192 var newstate
= me
.decodeHToken(token
);
193 Ext
.Array
.each(me
.hslist
, function(rec
) {
194 if (typeof newstate
[rec
[0]] == "undefined") {
197 me
.setHV(rec
[0], newstate
[rec
[0]], true);
201 var start_token
= Ext
.History
.getToken();
203 history_change_cb(start_token
);
205 var htext
= me
.encodeHToken(me
.UIState
);
206 Ext
.History
.add(htext
);
209 Ext
.History
.on('change', history_change_cb
);
212 get: function(name
, defaultValue
){
213 /*jslint confusion: true */
217 if (typeof me
.UIState
[name
] != "undefined") {
218 data
= { value
: me
.UIState
[name
] };
220 data
= me
.callParent(arguments
);
221 if (!data
&& name
=== 'GuiCap') {
222 data
= { vms
: {}, storage
: {}, access
: {}, nodes
: {}, dc
: {} };
226 //console.log("GET " + name + " " + Ext.encode(data));
230 clear: function(name
){
233 if (typeof me
.UIState
[name
] != "undefined") {
234 me
.UIState
[name
] = null;
237 me
.callParent(arguments
);
240 set: function(name
, value
){
243 //console.log("SET " + name + " " + Ext.encode(value));
244 if (typeof me
.UIState
[name
] != "undefined") {
245 var newvalue
= value
? value
.value
: null;
246 if (me
.setHV(name
, newvalue
, false)) {
247 var htext
= me
.encodeHToken(me
.UIState
);
248 Ext
.History
.add(htext
);
251 me
.callParent(arguments
);