-/* This state provider keeps part of the state inside
- * the browser history.
+/* This state provider keeps part of the state inside the browser history.
*
- * We compress (shorten) url using dictionary based compression
- * i.e. use column separated list instead of url encoded hash:
- * #v\d* version/format
- * := indicates string values
- * :\d+ lookup value in dictionary hash
- * #v1:=value1:5:=value2:=value3:...
+ * We compress (shorten) url using dictionary based compression, i.e., we use
+ * column separated list instead of url encoded hash:
+ * #v\d* version/format
+ * := indicates string values
+ * :\d+ lookup value in dictionary hash
+ * #v1:=value1:5:=value2:=value3:...
*/
Ext.define('PVE.StateProvider', {
// private
setHV: function(name, newvalue, fireEvents) {
- var me = this;
+ let me = this;
- var changes = false;
- var oldtext = Ext.encode(me.UIState[name]);
- var newtext = Ext.encode(newvalue);
- if (newtext != oldtext) {
+ let changes = false;
+ let oldtext = Ext.encode(me.UIState[name]);
+ let newtext = Ext.encode(newvalue);
+ if (newtext !== oldtext) {
changes = true;
me.UIState[name] = newvalue;
- //console.log("changed old " + name + " " + oldtext);
- //console.log("changed new " + name + " " + newtext);
if (fireEvents) {
me.fireEvent("statechange", me, name, { value: newvalue });
}
['ltab', 'tasks'],
['nodetab', ''],
['storagetab', ''],
+ ['sdntab', ''],
['pooltab', ''],
['kvmtab', ''],
['lxctab', ''],
- ['dctab', '']
+ ['dctab', ''],
],
hprefix: 'v1',
compDict: {
+ tfa: 54,
+ sdn: 53,
+ cloudinit: 52,
+ replication: 51,
+ system: 50,
monitor: 49,
'ha-fencing': 48,
'ha-groups': 47,
'ha-resources': 46,
'ceph-log': 45,
- 'ceph-crushmap':44,
+ 'ceph-crushmap': 44,
'ceph-pools': 43,
'ceph-osdtree': 42,
'ceph-disklist': 41,
clog: 3,
storage: 2,
folder: 1,
- server: 0
+ server: 0,
},
decodeHToken: function(token) {
- var me = this;
+ let me = this;
- var state = {};
+ let state = {};
if (!token) {
- Ext.Array.each(me.hslist, function(rec) {
- state[rec[0]] = rec[1];
- });
+ me.hslist.forEach(([k, v]) => { state[k] = v; });
return state;
}
- // return Ext.urlDecode(token);
-
- var items = token.split(':');
- var prefix = items.shift();
+ let [prefix, ...items] = token.split(':');
- if (prefix != me.hprefix) {
+ if (prefix !== me.hprefix) {
return me.decodeHToken();
}
Ext.Array.each(me.hslist, function(rec) {
- var value = items.shift();
+ let value = items.shift();
if (value) {
if (value[0] === '=') {
value = decodeURIComponent(value.slice(1));
- } else {
- Ext.Object.each(me.compDict, function(key, cv) {
- if (value == cv) {
- value = key;
- return false;
- }
- });
+ }
+ for (const [key, hash] of Object.entries(me.compDict)) {
+ if (String(value) === String(hash)) {
+ value = key;
+ break;
+ }
}
}
state[rec[0]] = value;
},
encodeHToken: function(state) {
- var me = this;
-
- // return Ext.urlEncode(state);
+ let me = this;
- var ctoken = me.hprefix;
+ let ctoken = me.hprefix;
Ext.Array.each(me.hslist, function(rec) {
- var value = state[rec[0]];
+ let value = state[rec[0]];
if (!Ext.isDefined(value)) {
value = rec[1];
}
value = encodeURIComponent(value);
if (!value) {
ctoken += ':';
+ } else if (Ext.isDefined(me.compDict[value])) {
+ ctoken += ":" + me.compDict[value];
} else {
- var comp = me.compDict[value];
- if (Ext.isDefined(comp)) {
- ctoken += ":" + comp;
- } else {
- ctoken += ":=" + value;
- }
+ ctoken += ":=" + value;
}
});
return ctoken;
},
- constructor: function(config){
- var me = this;
+ constructor: function(config) {
+ let me = this;
me.callParent([config]);
me.UIState = me.decodeHToken(); // set default
- var history_change_cb = function(token) {
- //console.log("HC " + token);
+ let history_change_cb = function(token) {
if (!token) {
- var res = window.confirm(gettext('Are you sure you want to navigate away from this page?'));
- if (res){
- // process text value and close...
- Ext.History.back();
- } else {
- Ext.History.forward();
- }
+ Ext.History.back();
return;
}
- var newstate = me.decodeHToken(token);
+ let newstate = me.decodeHToken(token);
Ext.Array.each(me.hslist, function(rec) {
- if (typeof newstate[rec[0]] == "undefined") {
+ if (typeof newstate[rec[0]] === "undefined") {
return;
}
me.setHV(rec[0], newstate[rec[0]], true);
});
};
- var start_token = Ext.History.getToken();
+ let start_token = Ext.History.getToken();
if (start_token) {
history_change_cb(start_token);
} else {
- var htext = me.encodeHToken(me.UIState);
+ let htext = me.encodeHToken(me.UIState);
Ext.History.add(htext);
}
Ext.History.on('change', history_change_cb);
},
- get: function(name, defaultValue){
- /*jslint confusion: true */
- var me = this;
- var data;
+ get: function(name, defaultValue) {
+ let me = this;
- if (typeof me.UIState[name] != "undefined") {
+ let data;
+ if (typeof me.UIState[name] !== "undefined") {
data = { value: me.UIState[name] };
} else {
data = me.callParent(arguments);
if (!data && name === 'GuiCap') {
- data = { vms: {}, storage: {}, access: {}, nodes: {}, dc: {} };
+ data = {
+ vms: {},
+ storage: {},
+ access: {},
+ nodes: {},
+ dc: {},
+ sdn: {},
+ };
}
}
-
- //console.log("GET " + name + " " + Ext.encode(data));
return data;
},
- clear: function(name){
- var me = this;
+ clear: function(name) {
+ let me = this;
- if (typeof me.UIState[name] != "undefined") {
+ if (typeof me.UIState[name] !== "undefined") {
me.UIState[name] = null;
}
-
me.callParent(arguments);
},
- set: function(name, value){
- var me = this;
+ set: function(name, value, fireevent) {
+ let me = this;
- //console.log("SET " + name + " " + Ext.encode(value));
- if (typeof me.UIState[name] != "undefined") {
+ if (typeof me.UIState[name] !== "undefined") {
var newvalue = value ? value.value : null;
- if (me.setHV(name, newvalue, false)) {
- var htext = me.encodeHToken(me.UIState);
+ if (me.setHV(name, newvalue, fireevent)) {
+ let htext = me.encodeHToken(me.UIState);
Ext.History.add(htext);
}
} else {
me.callParent(arguments);
}
- }
+ },
});