]> git.proxmox.com Git - proxmox-widget-toolkit.git/blobdiff - src/api-viewer/APIViewer.js
fix #4271: api-viewer: display nested formats instead of [object Object]
[proxmox-widget-toolkit.git] / src / api-viewer / APIViewer.js
index 8f3759ea043f7ed072fdeef507d86c259d98390b..2b04b8caf822ecb21e3c75ff2744410a16e57eea 100644 (file)
@@ -79,6 +79,27 @@ Ext.onReady(function() {
        return pdef.enum ? 'enum' : pdef.type || 'string';
     };
 
+    const renderFormatString = function(obj) {
+       if (!Ext.isObject(obj)) {
+           return obj;
+       }
+       const mandatory = [];
+       const optional = [];
+       Object.entries(obj).forEach(function([name, param]) {
+           let list = param.optional ? optional : mandatory;
+           let str = param.default_key ? `[${name}=]` : `${name}=`;
+           if (param.alias) {
+               return;
+           } else if (param.enum) {
+               str += `(${param.enum?.join(' | ')})`;
+           } else {
+               str += `<${param.format_description || param.pattern || param.type}>`;
+           }
+           list.push(str);
+       });
+       return mandatory.join(", ") + ' ' + optional.map(each => `[,${each}]`).join(' ');
+    };
+
     let render_simple_format = function(pdef, type_fallback) {
        if (pdef.typetext) {
            return pdef.typetext;
@@ -87,7 +108,7 @@ Ext.onReady(function() {
            return pdef.enum.join(' | ');
        }
        if (pdef.format) {
-           return pdef.format;
+           return renderFormatString(pdef.format);
        }
        if (pdef.pattern) {
            return pdef.pattern;
@@ -115,6 +136,9 @@ Ext.onReady(function() {
     };
 
     let real_path = function(path) {
+       if (!path.match(/^[/]/)) {
+           path = `/${path}`;
+       }
        return path.replace(/^.*\/_upgrade_(\/)?/, "/");
     };