]>
git.proxmox.com Git - pve-manager.git/blob - www/manager6/StateProvider.js
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 let oldtext
= Ext
.encode(me
.UIState
[name
]);
21 let newtext
= Ext
.encode(newvalue
);
22 if (newtext
!== oldtext
) {
24 me
.UIState
[name
] = newvalue
;
26 me
.fireEvent("statechange", me
, name
, { value
: newvalue
});
34 // order is important for notifications
68 'firewall-options': 36,
70 'firewall-aliases': 34,
107 decodeHToken: function(token
) {
112 me
.hslist
.forEach(([k
, v
]) => { state
[k
] = v
; });
116 let [prefix
, ...items
] = token
.split(':');
118 if (prefix
!== me
.hprefix
) {
119 return me
.decodeHToken();
122 Ext
.Array
.each(me
.hslist
, function(rec
) {
123 let value
= items
.shift();
125 if (value
[0] === '=') {
126 value
= decodeURIComponent(value
.slice(1));
128 for (const [key
, hash
] of Object
.entries(me
.compDict
)) {
129 if (value
=== hash
) {
136 state
[rec
[0]] = value
;
142 encodeHToken: function(state
) {
145 let ctoken
= me
.hprefix
;
146 Ext
.Array
.each(me
.hslist
, function(rec
) {
147 let value
= state
[rec
[0]];
148 if (!Ext
.isDefined(value
)) {
151 value
= encodeURIComponent(value
);
154 } else if (Ext
.isDefined(me
.compDict
[value
])) {
155 ctoken
+= ":" + me
.compDict
[value
];
157 ctoken
+= ":=" + value
;
164 constructor: function(config
) {
167 me
.callParent([config
]);
169 me
.UIState
= me
.decodeHToken(); // set default
171 let history_change_cb = function(token
) {
177 let newstate
= me
.decodeHToken(token
);
178 Ext
.Array
.each(me
.hslist
, function(rec
) {
179 if (typeof newstate
[rec
[0]] === "undefined") {
182 me
.setHV(rec
[0], newstate
[rec
[0]], true);
186 let start_token
= Ext
.History
.getToken();
188 history_change_cb(start_token
);
190 let htext
= me
.encodeHToken(me
.UIState
);
191 Ext
.History
.add(htext
);
194 Ext
.History
.on('change', history_change_cb
);
197 get: function(name
, defaultValue
) {
201 if (typeof me
.UIState
[name
] !== "undefined") {
202 data
= { value
: me
.UIState
[name
] };
204 data
= me
.callParent(arguments
);
205 if (!data
&& name
=== 'GuiCap') {
219 clear: function(name
) {
222 if (typeof me
.UIState
[name
] !== "undefined") {
223 me
.UIState
[name
] = null;
225 me
.callParent(arguments
);
228 set: function(name
, value
, fireevent
) {
231 if (typeof me
.UIState
[name
] !== "undefined") {
232 var newvalue
= value
? value
.value
: null;
233 if (me
.setHV(name
, newvalue
, fireevent
)) {
234 let htext
= me
.encodeHToken(me
.UIState
);
235 Ext
.History
.add(htext
);
238 me
.callParent(arguments
);