75 lines
2.9 KiB
JavaScript
75 lines
2.9 KiB
JavaScript
import * as AjaxHelper from './ajaxhelper.js';
|
|
import * as CustomRendering from './customrendering.js';
|
|
import * as GenericRendering from './genericrendering.js';
|
|
import * as SinglePageHelper from './singlepage.js';
|
|
import * as Utils from './utils.js';
|
|
|
|
export function initPackageDetails(sectionElement, sectionData, newPackages)
|
|
{
|
|
const currentPackage = sectionData.state.package;
|
|
const hasNewPackages = newPackages.length >= 1;
|
|
if (!hasNewPackages) {
|
|
if (currentPackage !== undefined) {
|
|
SinglePageHelper.updateHashPreventingChangeHandler('#package-details-section?' + encodeURIComponent(currentPackage));
|
|
}
|
|
return true;
|
|
}
|
|
const packageStr = newPackages[0];
|
|
if (currentPackage === packageStr) {
|
|
return true;
|
|
}
|
|
const packageParts = packageStr.split('/');
|
|
const packageObj = {
|
|
db: packageParts[0],
|
|
name: packageParts[1]
|
|
};
|
|
AjaxHelper.queryRoute('GET', '/packages?details=1&name=' + encodeURIComponent(packageStr), function(ajaxRequest) {
|
|
showPackageDetails(ajaxRequest, packageObj);
|
|
}, 'package-details');
|
|
return true;
|
|
}
|
|
|
|
function makePackageID(row)
|
|
{
|
|
return row.db + (row.dbArch ? '@' + row.dbArch : '') + '/' + row.name;
|
|
}
|
|
|
|
export function queryPackageDetails(value, row)
|
|
{
|
|
AjaxHelper.queryRoute('GET', '/packages?details=1&name=' + encodeURIComponent(makePackageID(row)), function(ajaxRequest) {
|
|
showPackageDetails(ajaxRequest, row);
|
|
}, 'package-details');
|
|
}
|
|
|
|
function switchToPackageDetails(packageID)
|
|
{
|
|
SinglePageHelper.sections['package-details'].state.package = packageID;
|
|
SinglePageHelper.updateHashPreventingSectionInitializer('#package-details-section?' + encodeURIComponent(packageID));
|
|
}
|
|
|
|
function showPackageDetails(ajaxRequest, row)
|
|
{
|
|
const packageID = makePackageID(row);
|
|
const packageDetailsContainer = Utils.getAndEmptyElement('package-details-container');
|
|
if (ajaxRequest.status !== 200) {
|
|
packageDetailsContainer.appendChild(document.createTextNode('unable query package details: ' + ajaxRequest.responseText));
|
|
return;
|
|
}
|
|
const responseJson = JSON.parse(ajaxRequest.responseText);
|
|
if (!Array.isArray(responseJson) || responseJson.length !== 1) {
|
|
switchToPackageDetails(packageID);
|
|
packageDetailsContainer.appendChild(document.createTextNode('unable query package details: package not present'));
|
|
return;
|
|
}
|
|
const packageObj = responseJson[0];
|
|
const heading = document.createElement('h3');
|
|
heading.appendChild(document.createTextNode(packageObj.name));
|
|
heading.appendChild(document.createTextNode(' ' + packageObj.version));
|
|
packageDetailsContainer.appendChild(heading);
|
|
packageObj.db = row.db;
|
|
packageObj.dbArch = row.dbArch;
|
|
packageDetailsContainer.appendChild(CustomRendering.renderPackage(packageObj, true));
|
|
|
|
switchToPackageDetails(packageID);
|
|
}
|