public inbox for pve-devel@lists.proxmox.com
 help / color / mirror / Atom feed
* [pve-devel] [PATCH widget-toolkit 0/3] add proxmox-widget-toolkit-dev package
@ 2021-05-28 12:13 Dominik Csapak
  2021-05-28 12:13 ` [pve-devel] [PATCH widget-toolkit 1/3] Toolkit: move defaultDownloadServerUrl override to panel/RRDChart Dominik Csapak
                   ` (3 more replies)
  0 siblings, 4 replies; 5+ messages in thread
From: Dominik Csapak @ 2021-05-28 12:13 UTC (permalink / raw)
  To: pve-devel

intended as build-dependency
contains the apiviewer (will be used for all -docs packages),
and Toolkit.js which will be used for the prune-simulator and
lto-barcode-generator

Dominik Csapak (3):
  Toolkit: move defaultDownloadServerUrl override to panel/RRDChart
  add api-viewer source
  add proxmox-widget-toolkit-dev package

 Makefile                                      |  19 +-
 debian/control                                |   7 +
 .../{docs => proxmox-widget-toolkit-dev.docs} |   0
 debian/proxmox-widget-toolkit-dev.install     |   2 +
 debian/proxmox-widget-toolkit.docs            |   1 +
 debian/proxmox-widget-toolkit.install         |   1 +
 src/Toolkit.js                                |   3 -
 src/api-viewer/APIVIEWER.js                   | 529 ++++++++++++++++++
 src/panel/RRDChart.js                         |   3 +
 9 files changed, 554 insertions(+), 11 deletions(-)
 rename debian/{docs => proxmox-widget-toolkit-dev.docs} (100%)
 create mode 100644 debian/proxmox-widget-toolkit-dev.install
 create mode 100644 debian/proxmox-widget-toolkit.docs
 create mode 100644 debian/proxmox-widget-toolkit.install
 create mode 100644 src/api-viewer/APIVIEWER.js

-- 
2.20.1





^ permalink raw reply	[flat|nested] 5+ messages in thread

* [pve-devel] [PATCH widget-toolkit 1/3] Toolkit: move defaultDownloadServerUrl override to panel/RRDChart
  2021-05-28 12:13 [pve-devel] [PATCH widget-toolkit 0/3] add proxmox-widget-toolkit-dev package Dominik Csapak
@ 2021-05-28 12:13 ` Dominik Csapak
  2021-05-28 12:13 ` [pve-devel] [PATCH widget-toolkit 2/3] add api-viewer source Dominik Csapak
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 5+ messages in thread
From: Dominik Csapak @ 2021-05-28 12:13 UTC (permalink / raw)
  To: pve-devel

not all users of Toolkit.js have the charts lib loaded, which means
the class does not exist then.

Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
---
 src/Toolkit.js        | 3 ---
 src/panel/RRDChart.js | 3 +++
 2 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/src/Toolkit.js b/src/Toolkit.js
index 6f1aee9..a08af4e 100644
--- a/src/Toolkit.js
+++ b/src/Toolkit.js
@@ -664,9 +664,6 @@ Ext.define('Proxmox.selection.CheckboxModel', {
     },
 });
 
-// override the download server url globally, for privacy reasons
-Ext.draw.Container.prototype.defaultDownloadServerUrl = "-";
-
 // stop nulling of properties
 Ext.define('Proxmox.Component', {
     override: 'Ext.Component',
diff --git a/src/panel/RRDChart.js b/src/panel/RRDChart.js
index 517c45d..d63170e 100644
--- a/src/panel/RRDChart.js
+++ b/src/panel/RRDChart.js
@@ -1,3 +1,6 @@
+// override the download server url globally, for privacy reasons
+Ext.draw.Container.prototype.defaultDownloadServerUrl = "-";
+
 Ext.define('Proxmox.chart.axis.segmenter.NumericBase2', {
     extend: 'Ext.chart.axis.segmenter.Numeric',
     alias: 'segmenter.numericBase2',
-- 
2.20.1





^ permalink raw reply	[flat|nested] 5+ messages in thread

* [pve-devel] [PATCH widget-toolkit 2/3] add api-viewer source
  2021-05-28 12:13 [pve-devel] [PATCH widget-toolkit 0/3] add proxmox-widget-toolkit-dev package Dominik Csapak
  2021-05-28 12:13 ` [pve-devel] [PATCH widget-toolkit 1/3] Toolkit: move defaultDownloadServerUrl override to panel/RRDChart Dominik Csapak
@ 2021-05-28 12:13 ` Dominik Csapak
  2021-05-28 12:13 ` [pve-devel] [PATCH widget-toolkit 3/3] add proxmox-widget-toolkit-dev package Dominik Csapak
  2021-06-02 14:13 ` [pve-devel] applied-series: [PATCH widget-toolkit 0/3] " Thomas Lamprecht
  3 siblings, 0 replies; 5+ messages in thread
From: Dominik Csapak @ 2021-05-28 12:13 UTC (permalink / raw)
  To: pve-devel

so that we can reuse it across products
source was 'pbs' since that had the most features (http upgrade check)

a few changes to combine pve/pbs/pmg:
* use an optional 'cliusage' function it it exists to determine CLI usage
* check allowtoken for undefined to see if it is allowed or not
* use 'pmxapi' instead of pbs/pmg/pveapi
* rename all occurrences of 'pve' to 'pmx'

Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
---
 src/api-viewer/APIVIEWER.js | 529 ++++++++++++++++++++++++++++++++++++
 1 file changed, 529 insertions(+)
 create mode 100644 src/api-viewer/APIVIEWER.js

diff --git a/src/api-viewer/APIVIEWER.js b/src/api-viewer/APIVIEWER.js
new file mode 100644
index 0000000..c2864ed
--- /dev/null
+++ b/src/api-viewer/APIVIEWER.js
@@ -0,0 +1,529 @@
+// avoid errors when running without development tools
+if (!Ext.isDefined(Ext.global.console)) {
+    var console = {
+        dir: function() {},
+        log: function() {}
+    };
+}
+
+Ext.onReady(function() {
+
+    Ext.define('pmx-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.define('pmx-updated-treestore', {
+	extend: 'Ext.data.TreeStore',
+	model: Ext.define('pmx-api-doc', {
+            extend: 'Ext.data.Model',
+            fields:  [
+		'path', 'info', 'text',
+	    ]
+	}),
+        proxy: {
+            type: 'memory',
+            data: pmxapi
+        },
+        sorters: [{
+            property: 'leaf',
+            direction: 'ASC'
+        }, {
+            property: 'text',
+            direction: 'ASC'
+	}],
+	filterer: 'bottomup',
+	doFilter: function(node) {
+	    this.filterNodes(node, this.getFilters().getFilterFn(), true);
+	},
+
+	filterNodes: function(node, filterFn, parentVisible) {
+	    var me = this,
+		bottomUpFiltering = me.filterer === 'bottomup',
+		match = filterFn(node) && parentVisible || (node.isRoot() && !me.getRootVisible()),
+		childNodes = node.childNodes,
+		len = childNodes && childNodes.length, i, matchingChildren;
+
+	    if (len) {
+		for (i = 0; i < len; ++i) {
+		    matchingChildren = me.filterNodes(childNodes[i], filterFn, match || bottomUpFiltering) || matchingChildren;
+		}
+		if (bottomUpFiltering) {
+		    match = matchingChildren || match;
+		}
+	    }
+
+	    node.set("visible", match, me._silentOptions);
+	    return match;
+	},
+
+    }).create();
+
+    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');
+    };
+
+    let render_simple_format = function(pdef, type_fallback) {
+	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;
+
+	if (pdef.type === 'boolean')
+	    return `<true|false>`;
+
+	if (type_fallback && pdef.type)
+	    return `<${pdef.type}>`;
+
+	return;
+    };
+
+    let render_format = function(value, metaData, record) {
+	let pdef = record.data;
+
+	metaData.style = 'white-space:normal;'
+
+	if (pdef.type === 'array' && pdef.items) {
+	    let format = render_simple_format(pdef.items, true);
+	    return `[${Ext.htmlEncode(format)}, ...]`;
+	}
+
+	return Ext.htmlEncode(render_simple_format(pdef) || '');
+    };
+
+    var real_path = function(path) {
+	return path.replace(/^.*\/_upgrade_(\/)?/, "/");
+    };
+
+    var permission_text = function(permission) {
+	let permhtml = "";
+
+	if (permission.user) {
+	    if (!permission.description) {
+		if (permission.user === 'world') {
+		    permhtml += "Accessible without any authentication.";
+		} else if (permission.user === 'all') {
+		    permhtml += "Accessible by all authenticated users.";
+		} else {
+		    permhtml += 'Onyl accessible by user "' +
+			permission.user + '"';
+		}
+	    }
+	} else if (permission.check) {
+	    permhtml += "<pre>Check: " +
+		Ext.htmlEncode(Ext.JSON.encode(permission.check))  + "</pre>";
+	} else if (permission.userParam) {
+	    permhtml += `<div>Check if user matches parameter '${permission.userParam}'`;
+	} else if (permission.or) {
+	    permhtml += "<div>Or<div style='padding-left: 10px;'>";
+	    Ext.Array.each(permission.or, function(sub_permission) {
+		permhtml += permission_text(sub_permission);
+	    })
+	    permhtml += "</div></div>";
+	} else if (permission.and) {
+	    permhtml += "<div>And<div style='padding-left: 10px;'>";
+	    Ext.Array.each(permission.and, function(sub_permission) {
+		permhtml += permission_text(sub_permission);
+	    })
+	    permhtml += "</div></div>";
+	} else {
+	    //console.log(permission);
+	    permhtml += "Unknown syntax!";
+	}
+
+	return permhtml;
+    };
+
+    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 += "<table><tr><td>HTTP:&nbsp;&nbsp;&nbsp;</td><td>"
+		    + method + " " + real_path("/api2/json" + data.path) + "</td></tr>";
+
+		if (typeof cliusage === 'function') {
+		    usage += cliusage(method, real_path(data.path));
+		}
+
+		var sections = [
+		    {
+			title: 'Description',
+			html: Ext.htmlEncode(info.description),
+			bodyPadding: 10
+		    },
+		    {
+			title: 'Usage',
+			html: usage,
+			bodyPadding: 10
+		    }
+		];
+
+		if (info.parameters && info.parameters.properties) {
+
+		    var pstore = Ext.create('Ext.data.Store', {
+			model: 'pmx-param-schema',
+			proxy: {
+			    type: 'memory'
+			},
+			groupField: 'optional',
+			sorters: [
+			    {
+				property: 'name',
+				direction: 'ASC'
+			    }
+			]
+		    });
+
+		    Ext.Object.each(info.parameters.properties, function(name, pdef) {
+			pdef.name = name;
+			pstore.add(pdef);
+		    });
+
+		    pstore.sort();
+
+		    var groupingFeature = Ext.create('Ext.grid.feature.Grouping',{
+			enableGroupingMenu: false,
+			groupHeaderTpl: '<tpl if="groupValue">Optional</tpl><tpl if="!groupValue">Required</tpl>'
+		    });
+
+		    sections.push({
+			xtype: 'gridpanel',
+			title: 'Parameters',
+			features: [groupingFeature],
+			store: pstore,
+			viewConfig: {
+			    trackOver: false,
+			    stripeRows: true
+			},
+			columns: [
+			    {
+				header: 'Name',
+				dataIndex: 'name',
+				flex: 1
+			    },
+			    {
+				header: 'Type',
+				dataIndex: 'type',
+				renderer: render_type,
+				flex: 1
+			    },
+			    {
+				header: 'Default',
+				dataIndex: 'default',
+				flex: 1
+			    },
+			    {
+				header: 'Format',
+				dataIndex: 'type',
+				renderer: render_format,
+				flex: 2
+			    },
+			    {
+				header: 'Description',
+				dataIndex: 'description',
+				renderer: render_description,
+				flex: 6
+			    }
+			]
+		    });
+
+		}
+
+		if (info.returns) {
+
+		    var retinf = info.returns;
+		    var rtype = retinf.type;
+		    if (!rtype && retinf.items)
+			rtype = 'array';
+		    if (!rtype)
+			rtype = 'object';
+
+		    var rpstore = Ext.create('Ext.data.Store', {
+			model: 'pmx-param-schema',
+			proxy: {
+			    type: 'memory'
+			},
+			groupField: 'optional',
+			sorters: [
+			    {
+				property: 'name',
+				direction: 'ASC'
+			   }
+			]
+		    });
+
+		    var properties;
+		    if (rtype === 'array' && retinf.items.properties) {
+			properties = retinf.items.properties;
+		    }
+
+		    if (rtype === 'object' && retinf.properties) {
+			properties = retinf.properties;
+		    }
+
+		    Ext.Object.each(properties, function(name, pdef) {
+			pdef.name = name;
+			rpstore.add(pdef);
+		    });
+
+		    rpstore.sort();
+
+		    var groupingFeature = Ext.create('Ext.grid.feature.Grouping',{
+			enableGroupingMenu: false,
+			groupHeaderTpl: '<tpl if="groupValue">Optional</tpl><tpl if="!groupValue">Obligatory</tpl>'
+		    });
+		    var returnhtml;
+		    if (retinf.items) {
+			returnhtml = '<pre>items: ' + Ext.htmlEncode(JSON.stringify(retinf.items, null, 4)) + '</pre>';
+		    }
+
+		    if (retinf.properties) {
+			returnhtml = returnhtml || '';
+			returnhtml += '<pre>properties:' + Ext.htmlEncode(JSON.stringify(retinf.properties, null, 4)) + '</pre>';
+		    }
+
+		    var rawSection = Ext.create('Ext.panel.Panel', {
+			bodyPadding: '0px 10px 10px 10px',
+			html: returnhtml,
+			hidden: true
+		    });
+
+		    sections.push({
+			xtype: 'gridpanel',
+			title: 'Returns: ' + rtype,
+			features: [groupingFeature],
+			store: rpstore,
+			viewConfig: {
+			    trackOver: false,
+			    stripeRows: true
+			},
+		    columns: [
+			{
+			    header: 'Name',
+			    dataIndex: 'name',
+			    flex: 1
+			},
+			{
+			    header: 'Type',
+			    dataIndex: 'type',
+			    renderer: render_type,
+			    flex: 1
+			},
+			{
+			    header: 'Default',
+			    dataIndex: 'default',
+			    flex: 1
+			},
+			{
+			    header: 'Format',
+			    dataIndex: 'type',
+			    renderer: render_format,
+			    flex: 2
+			},
+			{
+			    header: 'Description',
+			    dataIndex: 'description',
+			    renderer: render_description,
+			    flex: 6
+			}
+		    ],
+		    bbar: [
+			{
+			    xtype: 'button',
+			    text: 'Show RAW',
+			    handler: function(btn) {
+				rawSection.setVisible(!rawSection.isVisible());
+				btn.setText(rawSection.isVisible() ? 'Hide RAW' : 'Show RAW');
+			    }}
+		    ]
+		});
+
+		sections.push(rawSection);
+
+
+		}
+
+		if (!data.path.match(/\/_upgrade_/)) {
+		    var permhtml = '';
+
+		    if (!info.permissions) {
+			permhtml = "Root only.";
+		    } else {
+			if (info.permissions.description) {
+			    permhtml += "<div style='white-space:pre-wrap;padding-bottom:10px;'>" +
+				Ext.htmlEncode(info.permissions.description) + "</div>";
+			}
+			permhtml += permission_text(info.permissions);
+		    }
+
+		    if (info.allowtoken !== undefined && !info.allowtoken) {
+		        permhtml += "<br />This API endpoint is not available for API tokens."
+		    }
+
+		    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: " +  real_path(data.path));
+	ct.removeAll(true);
+	ct.add(items);
+	ct.setActiveTab(0);
+    };
+
+    Ext.define('Ext.form.SearchField', {
+	extend: 'Ext.form.field.Text',
+	alias: 'widget.searchfield',
+
+	emptyText: 'Search...',
+
+	flex: 1,
+
+	inputType: 'search',
+	listeners: {
+	    'change': function(){
+
+		var value = this.getValue();
+		if (!Ext.isEmpty(value)) {
+		    store.filter({
+			property: 'path',
+			value: value,
+			anyMatch: true
+		    });
+		} else {
+		    store.clearFilter();
+		}
+	    }
+	}
+    });
+
+    var tree = Ext.create('Ext.tree.Panel', {
+	title: 'Resource Tree',
+	tbar: [
+	    {
+		xtype: 'searchfield',
+	    }
+	],
+	tools: [
+	    {
+		type: 'expand',
+		tooltip: 'Expand all',
+		tooltipType: 'title',
+		callback: (tree) => tree.expandAll(),
+	    },
+	    {
+		type: 'collapse',
+		tooltip: 'Collapse all',
+		tooltipType: 'title',
+		callback: (tree) => tree.collapseAll(),
+	    },
+	],
+        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);
+		location.hash = '#' + rec.data.path;
+	    }
+	}
+    });
+
+    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: []
+	    }
+	]
+    });
+
+    var deepLink = function() {
+	var path = window.location.hash.substring(1).replace(/\/\s*$/, '')
+	var endpoint = store.findNode('path', path);
+
+	if (endpoint) {
+	    tree.getSelectionModel().select(endpoint);
+	    tree.expandPath(endpoint.getPath());
+	    render_docu(endpoint.data);
+	}
+    }
+    window.onhashchange = deepLink;
+
+    deepLink();
+
+});
-- 
2.20.1





^ permalink raw reply	[flat|nested] 5+ messages in thread

* [pve-devel] [PATCH widget-toolkit 3/3] add proxmox-widget-toolkit-dev package
  2021-05-28 12:13 [pve-devel] [PATCH widget-toolkit 0/3] add proxmox-widget-toolkit-dev package Dominik Csapak
  2021-05-28 12:13 ` [pve-devel] [PATCH widget-toolkit 1/3] Toolkit: move defaultDownloadServerUrl override to panel/RRDChart Dominik Csapak
  2021-05-28 12:13 ` [pve-devel] [PATCH widget-toolkit 2/3] add api-viewer source Dominik Csapak
@ 2021-05-28 12:13 ` Dominik Csapak
  2021-06-02 14:13 ` [pve-devel] applied-series: [PATCH widget-toolkit 0/3] " Thomas Lamprecht
  3 siblings, 0 replies; 5+ messages in thread
From: Dominik Csapak @ 2021-05-28 12:13 UTC (permalink / raw)
  To: pve-devel

used for various other packages to dev-depend on (e.g. pve-docs)
which only contains the Toolkit.js for now

Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
---
 Makefile                                      | 19 +++++++++++--------
 debian/control                                |  7 +++++++
 .../{docs => proxmox-widget-toolkit-dev.docs} |  0
 debian/proxmox-widget-toolkit-dev.install     |  2 ++
 debian/proxmox-widget-toolkit.docs            |  1 +
 debian/proxmox-widget-toolkit.install         |  1 +
 6 files changed, 22 insertions(+), 8 deletions(-)
 rename debian/{docs => proxmox-widget-toolkit-dev.docs} (100%)
 create mode 100644 debian/proxmox-widget-toolkit-dev.install
 create mode 100644 debian/proxmox-widget-toolkit.docs
 create mode 100644 debian/proxmox-widget-toolkit.install

diff --git a/Makefile b/Makefile
index c0fe06d..0060296 100644
--- a/Makefile
+++ b/Makefile
@@ -3,7 +3,9 @@ export DEB_VERSION_UPSTREAM_REVISION
 
 export PACKAGE=proxmox-widget-toolkit
 BUILDDIR ?= ${PACKAGE}-${DEB_VERSION_UPSTREAM}
-DEB=${PACKAGE}_${DEB_VERSION_UPSTREAM_REVISION}_all.deb
+WT_DEB=${PACKAGE}_${DEB_VERSION_UPSTREAM_REVISION}_all.deb
+WT_DEV_DEB=${PACKAGE}-dev_${DEB_VERSION_UPSTREAM_REVISION}_all.deb
+DEBS=${WT_DEB} ${WT_DEV_DEB}
 DSC=${PACKAGE}_${DEB_VERSION_UPSTREAM_REVISION}.dsc
 
 GITVERSION:=$(shell git rev-parse HEAD)
@@ -16,10 +18,10 @@ ${BUILDDIR}:
 	mv ${BUILDDIR}.tmp/ ${BUILDDIR}
 
 .PHONY: deb
-deb: ${DEB}
-${DEB}: ${BUILDDIR}
+deb: ${DEBS}
+${DEBS}: ${BUILDDIR}
 	cd ${BUILDDIR}; dpkg-buildpackage -b -us -uc
-	lintian ${DEB}
+	lintian ${DEBS}
 
 .PHONY: dsc
 dsc: ${DSC}
@@ -32,8 +34,9 @@ lint: ${JSSRC}
 	${MAKE} -C src lint
 
 .PHONY: upload
-upload: ${DEB}
-	tar cf - ${DEB} | ssh -X repoman@repo.proxmox.com -- upload --product pve,pmg,pbs --dist buster
+upload: ${DEBS}
+	tar cf - ${WT_DEB} | ssh -X repoman@repo.proxmox.com -- upload --product pve,pmg,pbs --dist buster
+	tar cf - ${WT_DEV_DEB} | ssh -X repoman@repo.proxmox.com -- upload --product devel --dist buster
 
 distclean: clean
 clean:
@@ -42,5 +45,5 @@ clean:
 	find . -name '*~' -exec rm {} ';'
 
 .PHONY: dinstall
-dinstall: ${DEB}
-	dpkg -i ${DEB}
+dinstall: ${DEBS}
+	dpkg -i ${DEBS}
diff --git a/debian/control b/debian/control
index 45ca9b4..ad88929 100644
--- a/debian/control
+++ b/debian/control
@@ -12,3 +12,10 @@ Architecture: all
 Depends: ${misc:Depends}
 Description: ExtJS Helper Classes for Proxmox 
  ExtJS Helper Classes to easy access to Proxmox APIs.
+
+Package: proxmox-widget-toolkit-dev
+Architecture: all
+Depends: ${misc:Depends}
+Description: Development dependencies for Proxmox Projects
+ Contains some common javascript code that are dev-dependencies,
+ for various Proxmox projects.
diff --git a/debian/docs b/debian/proxmox-widget-toolkit-dev.docs
similarity index 100%
rename from debian/docs
rename to debian/proxmox-widget-toolkit-dev.docs
diff --git a/debian/proxmox-widget-toolkit-dev.install b/debian/proxmox-widget-toolkit-dev.install
new file mode 100644
index 0000000..514d1d0
--- /dev/null
+++ b/debian/proxmox-widget-toolkit-dev.install
@@ -0,0 +1,2 @@
+Toolkit.js /usr/share/javascript/proxmox-widget-toolkit-dev/
+api-viewer/APIVIEWER.js /usr/share/javascript/proxmox-widget-toolkit-dev/
diff --git a/debian/proxmox-widget-toolkit.docs b/debian/proxmox-widget-toolkit.docs
new file mode 100644
index 0000000..8696672
--- /dev/null
+++ b/debian/proxmox-widget-toolkit.docs
@@ -0,0 +1 @@
+debian/SOURCE
diff --git a/debian/proxmox-widget-toolkit.install b/debian/proxmox-widget-toolkit.install
new file mode 100644
index 0000000..3c85d66
--- /dev/null
+++ b/debian/proxmox-widget-toolkit.install
@@ -0,0 +1 @@
+/usr/share/javascript/proxmox-widget-toolkit
-- 
2.20.1





^ permalink raw reply	[flat|nested] 5+ messages in thread

* [pve-devel] applied-series: [PATCH widget-toolkit 0/3] add proxmox-widget-toolkit-dev package
  2021-05-28 12:13 [pve-devel] [PATCH widget-toolkit 0/3] add proxmox-widget-toolkit-dev package Dominik Csapak
                   ` (2 preceding siblings ...)
  2021-05-28 12:13 ` [pve-devel] [PATCH widget-toolkit 3/3] add proxmox-widget-toolkit-dev package Dominik Csapak
@ 2021-06-02 14:13 ` Thomas Lamprecht
  3 siblings, 0 replies; 5+ messages in thread
From: Thomas Lamprecht @ 2021-06-02 14:13 UTC (permalink / raw)
  To: Proxmox VE development discussion, Dominik Csapak

On 28.05.21 14:13, Dominik Csapak wrote:
> intended as build-dependency
> contains the apiviewer (will be used for all -docs packages),
> and Toolkit.js which will be used for the prune-simulator and
> lto-barcode-generator
> 
> Dominik Csapak (3):
>   Toolkit: move defaultDownloadServerUrl override to panel/RRDChart
>   add api-viewer source
>   add proxmox-widget-toolkit-dev package
> 
>  Makefile                                      |  19 +-
>  debian/control                                |   7 +
>  .../{docs => proxmox-widget-toolkit-dev.docs} |   0
>  debian/proxmox-widget-toolkit-dev.install     |   2 +
>  debian/proxmox-widget-toolkit.docs            |   1 +
>  debian/proxmox-widget-toolkit.install         |   1 +
>  src/Toolkit.js                                |   3 -
>  src/api-viewer/APIVIEWER.js                   | 529 ++++++++++++++++++
>  src/panel/RRDChart.js                         |   3 +
>  9 files changed, 554 insertions(+), 11 deletions(-)
>  rename debian/{docs => proxmox-widget-toolkit-dev.docs} (100%)
>  create mode 100644 debian/proxmox-widget-toolkit-dev.install
>  create mode 100644 debian/proxmox-widget-toolkit.docs
>  create mode 100644 debian/proxmox-widget-toolkit.install
>  create mode 100644 src/api-viewer/APIVIEWER.js
> 


applied series, thanks!

eslint wasn't really happy though, so I added a few followups to ensure it is (and check
on package build).

The external "interface" got also a bit adapted, it's now `apiSchema` and optionally
`cliUsageRenderer`




^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2021-06-02 14:13 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-05-28 12:13 [pve-devel] [PATCH widget-toolkit 0/3] add proxmox-widget-toolkit-dev package Dominik Csapak
2021-05-28 12:13 ` [pve-devel] [PATCH widget-toolkit 1/3] Toolkit: move defaultDownloadServerUrl override to panel/RRDChart Dominik Csapak
2021-05-28 12:13 ` [pve-devel] [PATCH widget-toolkit 2/3] add api-viewer source Dominik Csapak
2021-05-28 12:13 ` [pve-devel] [PATCH widget-toolkit 3/3] add proxmox-widget-toolkit-dev package Dominik Csapak
2021-06-02 14:13 ` [pve-devel] applied-series: [PATCH widget-toolkit 0/3] " Thomas Lamprecht

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
Service provided by Proxmox Server Solutions GmbH | Privacy | Legal