/// \brief Renders a dependency object.
function renderDependency(value)
{
    if (value.length < 1) {
        return renderArrayAsCommaSeparatedString(value);
    }
    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.
function renderReloadButton(handler)
{
    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.
function renderIcon(iconName)
{
    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.
function renderIconLink(value, row, handler, tooltip, href, middleClickHref)
{
    const link = renderLink(renderIcon(value), row, handler, tooltip, href, middleClickHref);
    link.className = 'icon-link';
    return link;
}
