// 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: []
}
]
});
});