]> git.proxmox.com Git - pve-manager.git/blob - www/manager/data/reader/JsonObject.js
disable animation of charts on load
[pve-manager.git] / www / manager / data / reader / JsonObject.js
1 /* A reader to store a single JSON Object (hash) into a storage.
2 * Also accepts an array containing a single hash.
3 *
4 * So it can read:
5 *
6 * example1: {data1: "xyz", data2: "abc"}
7 * returns [{key: "data1", value: "xyz"}, {key: "data2", value: "abc"}]
8 *
9 * example2: [ {data1: "xyz", data2: "abc"} ]
10 * returns [{key: "data1", value: "xyz"}, {key: "data2", value: "abc"}]
11 *
12 * If you set 'readArray', the reader expexts the object as array:
13 *
14 * example3: [ { key: "data1", value: "xyz", p2: "cde" }, { key: "data2", value: "abc", p2: "efg" }]
15 * returns [{key: "data1", value: "xyz", p2: "cde}, {key: "data2", value: "abc", p2: "efg"}]
16 *
17 * Note: The records can contain additional properties (like 'p2' above) when you use 'readArray'
18 *
19 * Additional feature: specify allowed properties with default values with 'rows' object
20 *
21 * var rows = {
22 * memory: {
23 * required: true,
24 * defaultValue: 512
25 * }
26 * }
27 *
28 */
29
30 Ext.define('PVE.data.reader.JsonObject', {
31 extend: 'Ext.data.reader.Json',
32 alias : 'reader.jsonobject',
33
34 root: 'data',
35
36 readArray: false,
37
38 rows: undefined,
39
40 constructor: function(config) {
41 var me = this;
42
43 Ext.apply(me, config || {});
44
45 me.callParent([config]);
46 },
47
48 getResponseData: function(response) {
49 var me = this;
50
51 var data = [];
52 try {
53 var result = Ext.decode(response.responseText);
54 var root = me.getRoot(result);
55
56 if (me.readArray) {
57
58 var rec_hash = {};
59 Ext.Array.each(root, function(rec) {
60 if (Ext.isDefined(rec.key)) {
61 rec_hash[rec.key] = rec;
62 }
63 });
64
65 if (me.rows) {
66 Ext.Object.each(me.rows, function(key, rowdef) {
67 var rec = rec_hash[key];
68 if (Ext.isDefined(rec)) {
69 if (!Ext.isDefined(rec.value)) {
70 rec.value = rowdef.defaultValue;
71 }
72 data.push(rec);
73 } else if (Ext.isDefined(rowdef.defaultValue)) {
74 data.push({key: key, value: rowdef.defaultValue} );
75 } else if (rowdef.required) {
76 data.push({key: key, value: undefined });
77 }
78 });
79 } else {
80 Ext.Array.each(root, function(rec) {
81 if (Ext.isDefined(rec.key)) {
82 data.push(rec);
83 }
84 });
85 }
86
87 } else {
88
89 var org_root = root;
90
91 if (Ext.isArray(org_root)) {
92 if (root.length == 1) {
93 root = org_root[0];
94 } else {
95 root = {};
96 }
97 }
98
99 if (me.rows) {
100 Ext.Object.each(me.rows, function(key, rowdef) {
101 if (Ext.isDefined(root[key])) {
102 data.push({key: key, value: root[key]});
103 } else if (Ext.isDefined(rowdef.defaultValue)) {
104 data.push({key: key, value: rowdef.defaultValue});
105 } else if (rowdef.required) {
106 data.push({key: key, value: undefined});
107 }
108 });
109 } else {
110 Ext.Object.each(root, function(key, value) {
111 data.push({key: key, value: value });
112 });
113 }
114 }
115 }
116 catch (ex) {
117 Ext.Error.raise({
118 response: response,
119 json: response.responseText,
120 parseError: ex,
121 msg: 'Unable to parse the JSON returned by the server: ' + ex.toString()
122 });
123 }
124
125 return data;
126 }
127 });
128