// 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', '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_text = function(value, metaData, record) { var pdef = record.data; 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 pdef.typetext; if (pdef['enum']) return pdef['enum'].join(' | '); if (pdef.format) return pdef.format; if (pdef.pattern) return 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 + " |
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: [] } ] }); });