2022-01-23 01:56:17 +01:00
|
|
|
import * as GenericRendering from './genericrendering.js';
|
|
|
|
import * as Utils from './utils.js';
|
|
|
|
|
2021-01-25 00:24:31 +01:00
|
|
|
/// \brief Renders a dependency object.
|
2022-01-23 01:56:17 +01:00
|
|
|
export function renderDependency(value)
|
2021-01-25 00:24:31 +01:00
|
|
|
{
|
|
|
|
if (value.length < 1) {
|
2022-01-23 01:56:17 +01:00
|
|
|
return GenericRendering.renderArrayAsCommaSeparatedString(value);
|
2021-01-25 00:24:31 +01:00
|
|
|
}
|
|
|
|
const list = document.createElement('ul');
|
|
|
|
list.className = 'dependency-list';
|
|
|
|
value.forEach(function (dependency) {
|
|
|
|
const item = document.createElement('li');
|
|
|
|
let res = dependency.name;
|
|
|
|
if (dependency.version) {
|
|
|
|
const modes = [undefined, undefined, '=', '>=', '<=', '>', '<'];
|
|
|
|
const mode = modes[dependency.mode];
|
|
|
|
if (mode !== undefined) {
|
|
|
|
res += mode + dependency.version;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
item.appendChild(document.createTextNode(res));
|
|
|
|
if (dependency.description) {
|
|
|
|
const descriptionSpan = document.createElement('span');
|
|
|
|
descriptionSpan.appendChild(document.createTextNode(' - ' + dependency.description));
|
|
|
|
descriptionSpan.style.fontStyle = 'italics';
|
|
|
|
item.appendChild(descriptionSpan);
|
|
|
|
}
|
|
|
|
list.appendChild(item);
|
|
|
|
});
|
|
|
|
return list;
|
|
|
|
}
|
|
|
|
|
|
|
|
/// \brief Renders a "Reload" button invoking the specified \a handler when clicked.
|
2022-01-23 01:56:17 +01:00
|
|
|
export function renderReloadButton(handler)
|
2021-01-25 00:24:31 +01:00
|
|
|
{
|
|
|
|
const reloadButton = document.createElement('button');
|
|
|
|
reloadButton.className = 'icon-button icon-reload';
|
|
|
|
reloadButton.type = 'button';
|
|
|
|
reloadButton.onclick = handler;
|
|
|
|
reloadButton.appendChild(document.createTextNode('Reload'));
|
|
|
|
return reloadButton;
|
|
|
|
}
|
|
|
|
|
|
|
|
/// \brief Renders an icon.
|
2022-01-23 01:56:17 +01:00
|
|
|
export function renderIcon(iconName)
|
2021-01-25 00:24:31 +01:00
|
|
|
{
|
|
|
|
const icon = document.createElement('span');
|
|
|
|
icon.className = 'icon icon-' + iconName;
|
|
|
|
return icon;
|
|
|
|
}
|
|
|
|
|
|
|
|
/// \brief Renders an icon link which will invoke the specified \a handler when clicked.
|
2022-01-23 01:56:17 +01:00
|
|
|
export function renderIconLink(value, row, handler, tooltip, href, middleClickHref)
|
2021-01-25 00:24:31 +01:00
|
|
|
{
|
2022-01-23 01:56:17 +01:00
|
|
|
const link = GenericRendering.renderLink(renderIcon(value), row, handler, tooltip, href, middleClickHref);
|
2021-01-25 00:24:31 +01:00
|
|
|
link.className = 'icon-link';
|
|
|
|
return link;
|
2021-02-13 17:14:49 +01:00
|
|
|
}
|
2022-01-23 01:56:17 +01:00
|
|
|
|
|
|
|
const labelsWithoutBasics = ['Architecture', 'Repository', 'Description', 'Upstream URL', 'License(s)', 'Groups', 'Package size', 'Installed size', 'Packager', 'Build date', 'Dependencies', 'Optional dependencies', 'Make dependencies', 'Check dependencies', 'Provides', 'Replaces', 'Conflicts', 'Contained libraries', 'Needed libraries', 'Files'];
|
|
|
|
const fieldsWithoutBasics = ['packageInfo.arch', 'db', 'description', 'upstreamUrl', 'licenses', 'groups', 'packageInfo.size', 'installInfo.installedSize', 'packageInfo.packager', 'packageInfo.buildDate', 'dependencies', 'optionalDependencies', 'sourceInfo.makeDependencies', 'sourceInfo.checkDependencies', 'provides', 'replaces', 'conflicts', 'libprovides', 'libdepends', 'packageInfo.files'];
|
|
|
|
const labelsWithBasics = ['Name', 'Version', ...labelsWithoutBasics];
|
|
|
|
const fieldsWithBasics = ['name', 'version', ...fieldsWithoutBasics];
|
|
|
|
|
|
|
|
export function renderPackage(packageObj, withoutBasics)
|
|
|
|
{
|
|
|
|
const table = GenericRendering.renderTableFromJsonObject({
|
|
|
|
data: packageObj,
|
|
|
|
displayLabels: withoutBasics ? labelsWithoutBasics : labelsWithBasics,
|
|
|
|
fieldAccessors: withoutBasics ? fieldsWithoutBasics : fieldsWithBasics,
|
|
|
|
customRenderer: {
|
|
|
|
db: function(value, row) {
|
|
|
|
return document.createTextNode(Utils.makeRepoName(value, row.dbArch));
|
|
|
|
},
|
|
|
|
upstreamUrl: function(value, row) {
|
|
|
|
return GenericRendering.renderLink(value, row, function(value) {
|
|
|
|
window.open(value);
|
|
|
|
});
|
|
|
|
},
|
|
|
|
licenses: GenericRendering.renderArrayAsCommaSeparatedString,
|
|
|
|
groups: GenericRendering.renderArrayAsCommaSeparatedString,
|
|
|
|
dependencies: renderDependency,
|
|
|
|
optionalDependencies: renderDependency,
|
|
|
|
provides: renderDependency,
|
|
|
|
replaces: renderDependency,
|
|
|
|
conflicts: renderDependency,
|
|
|
|
libprovides: GenericRendering.renderArrayAsCommaSeparatedString,
|
|
|
|
libdepends: GenericRendering.renderArrayAsCommaSeparatedString,
|
|
|
|
'sourceInfo.makeDependencies': renderDependency,
|
|
|
|
'sourceInfo.checkDependencies': renderDependency,
|
|
|
|
'packageInfo.arch': function(value, row) {
|
|
|
|
const sourceInfo = row.sourceInfo;
|
|
|
|
const sourceArchs = sourceInfo !== undefined ? sourceInfo.archs : undefined;
|
|
|
|
if (Array.isArray(sourceArchs) && sourceArchs.length) {
|
|
|
|
return GenericRendering.renderArrayAsCommaSeparatedString(sourceArchs);
|
|
|
|
} else {
|
|
|
|
return GenericRendering.renderNoneInGrey(value);
|
|
|
|
}
|
|
|
|
},
|
|
|
|
'packageInfo.size': GenericRendering.renderDataSize,
|
|
|
|
'installInfo.installedSize': GenericRendering.renderDataSize,
|
|
|
|
},
|
|
|
|
});
|
|
|
|
table.className = 'package-details-table';
|
|
|
|
return table;
|
|
|
|
}
|