// avoid errors when running without development tools if (!Ext.isDefined(Ext.global.console)) { var console = { dir: function() {}, log: function() {} }; } Ext.onReady(function() { Ext.define('pve-param-schema', { extend: 'Ext.data.Model', fields: [ 'name', 'type', 'typetext', 'description', 'verbose_description', 'enum', 'minimum', 'maximum', 'minLength', 'maxLength', 'pattern', 'title', 'requires', 'format', 'default', 'disallow', 'extends', 'links', { name: 'optional', type: 'boolean' } ] }); var store = Ext.create('Ext.data.TreeStore', { model: Ext.define('pve-api-doc', { extend: 'Ext.data.Model', fields: [ 'path', 'info', 'text', ] }), proxy: { type: 'memory', data: pveapi }, sorters: [{ property: 'leaf', direction: 'ASC' }, { property: 'text', direction: 'ASC' }] }); var render_description = function(value, metaData, record) { var pdef = record.data; value = pdef.verbose_description || value; // TODO: try to render asciidoc correctly metaData.style = 'white-space:pre-wrap;' return Ext.htmlEncode(value); }; var render_type = function(value, metaData, record) { var pdef = record.data; return pdef['enum'] ? 'enum' : (pdef.type || 'string'); }; var render_format = function(value, metaData, record) { var pdef = record.data; metaData.style = 'white-space:normal;' if (pdef.typetext) return Ext.htmlEncode(pdef.typetext); if (pdef['enum']) return pdef['enum'].join(' | '); if (pdef.format) return pdef.format; if (pdef.pattern) return Ext.htmlEncode(pdef.pattern); return ''; }; var render_docu = function(data) { var md = data.info; // console.dir(data); var items = []; var clicmdhash = { GET: 'get', POST: 'create', PUT: 'set', DELETE: 'delete' }; Ext.Array.each(['GET', 'POST', 'PUT', 'DELETE'], function(method) { var info = md[method]; if (info) { var usage = ""; usage += "
HTTP: | " + method + " /api2/json" + data.path + " |
  | |
CLI: | pvesh " + clicmdhash[method] + " " + data.path + " |
items: ' + Ext.htmlEncode(JSON.stringify(retinf.items, null, 4)) + ''; } if (retinf.properties) { returnhtml = returnhtml || ''; returnhtml += '
properties:' + Ext.htmlEncode(JSON.stringify(retinf.properties, null, 4)); } sections.push({ title: 'Returns: ' + rtype, bodyPadding: 10, html: returnhtml }); } var permhtml = ''; if (!info.permissions) { permhtml = "Root only."; } else { if (info.permissions.description) { permhtml += "" + Ext.htmlEncode(info.permissions.description) + ""; } if (info.permissions.user) { if (!info.permissions.description) { if (info.permissions.user === 'world') { permhtml += "Accessible without any authentication."; } else if (info.permissions.user === 'all') { permhtml += "Accessible by all authenticated users."; } else { permhtml += 'Onyl accessible by user "' + info.permissions.user + '"'; } } } else if (info.permissions.check) { permhtml += "Check: " + Ext.htmlEncode(Ext.JSON.encode(info.permissions.check)) + ""; } else { permhtml += "Unknown systax!"; } } sections.push({ title: 'Required permissions', bodyPadding: 10, html: permhtml }); items.push({ title: method, autoScroll: true, defaults: { border: false }, items: sections }); } }); var ct = Ext.getCmp('docview'); ct.setTitle("Path: " + data.path); ct.removeAll(true); ct.add(items); ct.setActiveTab(0); }; var tree = Ext.create('Ext.tree.Panel', { title: 'Resource Tree', store: store, width: 200, region: 'west', split: true, margins: '5 0 5 5', rootVisible: false, listeners: { selectionchange: function(v, selections) { if (!selections[0]) return; var rec = selections[0]; render_docu(rec.data); } } }); Ext.create('Ext.container.Viewport', { layout: 'border', renderTo: Ext.getBody(), items: [ tree, { xtype: 'tabpanel', title: 'Documentation', id: 'docview', region: 'center', margins: '5 5 5 0', layout: 'fit', items: [] } ] }); });