]> git.proxmox.com Git - pve2-api-doc.git/blame - data/PVEAPI.js
remove require - we do not use dynamic loading
[pve2-api-doc.git] / data / PVEAPI.js
CommitLineData
b18ac5f8
DM
1// avoid errors when running without development tools
2if (!Ext.isDefined(Ext.global.console)) {
3 var console = {
4 dir: function() {},
5 log: function() {}
6 };
7}
8
9Ext.onReady(function() {
10
11 Ext.define('pve-param-schema', {
12 extend: 'Ext.data.Model',
13 fields: [
14 'name', 'type', 'typetext', 'description', 'enum',
15 'minimum', 'maximum', 'minLength', 'maxLength',
16 'pattern', 'title', 'requires', 'format', 'default',
17 'disallow', 'extends', 'links',
18 {
19 name: 'optional',
20 type: 'boolean'
21 }
22 ]
23 });
24
25 var store = Ext.create('Ext.data.TreeStore', {
26 model: Ext.define('pve-api-doc', {
27 extend: 'Ext.data.Model',
28 fields: [
29 'path', 'info', 'text',
30 ]
31 }),
32 proxy: {
33 type: 'memory',
34 data: pveapi
35 },
36 sorters: [{
37 property: 'leaf',
38 direction: 'ASC'
39 }, {
40 property: 'text',
41 direction: 'ASC'
42 }]
43 });
44
45 var render_text = function(value, metaData, record) {
46 var pdef = record.data;
47
48 metaData.style = 'white-space:pre-wrap;'
49
4cc4721a 50 return Ext.htmlEncode(value);
b18ac5f8
DM
51 };
52
53 var render_type = function(value, metaData, record) {
54 var pdef = record.data;
55
56 return pdef['enum'] ? 'enum' : (pdef.type || 'string');
57 };
58
59 var render_format = function(value, metaData, record) {
60 var pdef = record.data;
61
62 metaData.style = 'white-space:normal;'
63
64 if (pdef.typetext)
65 return pdef.typetext;
66
67 if (pdef['enum'])
68 return pdef['enum'].join(' | ');
69
70 if (pdef.format)
71 return pdef.format;
72
73 if (pdef.pattern)
74 return pdef.pattern;
75
76 return '';
77 };
78
79 var render_docu = function(data) {
80 var md = data.info;
81
2687378d 82 // console.dir(data);
b18ac5f8
DM
83
84 var items = [];
85
86 Ext.Array.each(['GET', 'POST', 'PUT', 'DELETE'], function(method) {
87 var info = md[method];
88 if (info) {
89
90 var sections = [
91 {
92 title: 'Description',
4cc4721a 93 html: Ext.htmlEncode(info.description),
b18ac5f8
DM
94 bodyPadding: 10
95 }
96 ];
97
98 if (info.parameters && info.parameters.properties) {
99
100 var pstore = Ext.create('Ext.data.Store', {
101 model: 'pve-param-schema',
102 proxy: {
103 type: 'memory'
104 },
105 groupField: 'optional',
106 sorters: [
107 {
108 property: 'name',
109 direction: 'ASC'
110 }
111 ]
112 });
113
114 Ext.Object.each(info.parameters.properties, function(name, pdef) {
115 pdef.name = name;
116 pstore.add(pdef);
117 });
118
119 pstore.sort();
120
121 var groupingFeature = Ext.create('Ext.grid.feature.Grouping',{
122 enableGroupingMenu: false,
123 groupHeaderTpl: '<tpl if="name">Optional</tpl><tpl if="!name">Required</tpl>'
124 });
125
126 sections.push({
127 xtype: 'gridpanel',
128 title: 'Parameters',
129 features: [groupingFeature],
130 store: pstore,
131 viewConfig: {
132 trackOver: false,
133 stripeRows: true
134 },
135 columns: [
136 {
137 header: 'Name',
138 dataIndex: 'name'
139 },
140 {
141 header: 'Type',
142 dataIndex: 'type',
143 renderer: render_type,
144 },
145 {
146 header: 'Format',
147 dataIndex: 'type',
148 renderer: render_format,
149 flex: 1
150 },
151 {
152 header: 'Description',
153 dataIndex: 'description',
154 renderer: render_text,
155 flex: 2
156 }
157 ]
158 });
159
160 }
161
162 if (info.returns) {
163
164 var rtype = info.returns.type;
165 if (!rtype && info.returns.items)
166 rtype = 'array';
167 if (!rtype)
168 rtype = 'object';
169
170 sections.push({
171 title: 'Returns: ' + rtype
172 });
173 }
174
175 var permhtml = '';
176 if (!info.permissions) {
177 permhtml = "Root only.";
2687378d
DM
178 } else {
179 if (info.permissions.description) {
180 permhtml += "<div style='white-space:pre-wrap;padding-bottom:10px;'>" +
181 Ext.htmlEncode(info.permissions.description) + "</div>";
182 }
183
184 if (info.permissions.user) {
90c7f56a
DM
185 if (!info.permissions.description) {
186 if (info.permissions.user === 'world') {
187 permhtml += "Accessible without any authententification.";
188 } else if (info.permissions.user === 'all') {
189 permhtml += "Accessible by all authententicated users.";
190 } else {
191 permhtml += 'Onyl accessible by user "' +
192 info.permissions.user + '"';
193 }
2687378d
DM
194 }
195 } else if (info.permissions.check) {
196 permhtml += "<pre>Check: " +
197 Ext.htmlEncode(Ext.JSON.encode(info.permissions.check)) + "</pre>";
b18ac5f8 198 } else {
2687378d 199 permhtml += "Unknown systax!";
b18ac5f8 200 }
b18ac5f8
DM
201 }
202
203 sections.push({
204 title: 'Required permissions',
205 bodyPadding: 10,
206 html: permhtml
207 });
208
209
210 items.push({
211 title: method,
212 autoScroll: true,
213 defaults: {
214 border: false
215 },
216 items: sections
217 });
218 }
219 });
220
221 var ct = Ext.getCmp('docview');
222 ct.setTitle("Path: " + data.path);
223 ct.removeAll(true);
224 ct.add(items);
225 };
226
227 var tree = Ext.create('Ext.tree.Panel', {
228 title: 'Resource Tree',
229 store: store,
230 width: 200,
231 region: 'west',
232 split: true,
233 margins: '5 0 5 5',
234 rootVisible: false,
235 listeners: {
236 selectionchange: function(v, selections) {
237 if (!selections[0])
238 return;
239 var rec = selections[0];
240 render_docu(rec.data);
241 }
242 }
243 });
244
245 Ext.create('Ext.container.Viewport', {
246 layout: 'border',
247 renderTo: Ext.getBody(),
248 items: [
249 tree,
250 {
251 xtype: 'tabpanel',
252 title: 'Documentation',
253 id: 'docview',
254 region: 'center',
255 margins: '5 5 5 0',
256 layout: 'fit',
257 items: []
258 }
259 ]
260 });
261
262});