arch-repo-manager/srv/static/js/packagesearchpage.js

89 lines
3.4 KiB
JavaScript

function initPackageSearch(sectionElement, sectionData, newParams)
{
const currentParams = sectionData.state.params;
const hasNewParams = newParams.length >= 1;
if (!hasNewParams) {
if (currentParams !== undefined) {
updateHashPreventingChangeHandler('#package-search-section?' + encodeURIComponent(currentParams));
}
return true;
}
const searchParams = sections['package-search'].state.params = newParams[0];
if (currentParams === searchParams) {
return true;
}
if (!window.globalInfo) {
window.functionsPostponedUntilGlobalInfo.push(searchForPackagesFromParams.bind(this, searchParams));
} else {
searchForPackagesFromParams(searchParams);
}
return true;
}
function searchForPackagesFromParams(searchParams)
{
const params = new URLSearchParams(searchParams);
const form = document.getElementById('package-search-form');
form.reset();
params.forEach(function(value, key) {
const formElement = form[key];
if (!formElement) {
return;
}
if (formElement.multiple) {
Array.from(formElement.options).forEach(function(optionElement) {
if (optionElement.value === value) {
optionElement.selected = true;
return;
}
});
} else {
formElement.value = value;
}
});
const res = startFormQueryEx('package-search-form', showPackageSearchResults);
sections['package-search'].state.params = res.params;
return res;
}
function searchForPackages()
{
const res = startFormQueryEx('package-search-form', showPackageSearchResults);
const params = sections['package-search'].state.params = res.params.substr(1);
updateHashPreventingSectionInitializer('#package-search-section?' + encodeURIComponent(params));
return res.ajaxRequest;
}
function showPackageSearchResults(ajaxRequest)
{
const packageSearchResults = getAndEmptyElement('package-search-results');
if (ajaxRequest.status !== 200) {
packageSearchResults.appendChild(document.createTextNode('unable search for packages: ' + ajaxRequest.responseText));
return;
}
const responseJson = JSON.parse(ajaxRequest.responseText);
const table = renderTableFromJsonArray({
rows: responseJson,
columnHeaders: ['', 'Arch', 'Repo', 'Name', 'Version', 'Description', 'Build date'],
columnAccessors: ['checkbox', 'arch', 'db', 'name', 'version', 'description', 'buildDate'],
rowsPerPage: 40,
customRenderer: {
name: function (value, row) {
return renderLink(value, row, queryPackageDetails, 'Show package details', undefined,
'#package-details-section?' + encodeURIComponent(row.db + (row.dbArch ? '@' + row.dbArch : '') + '/' + value));
},
checkbox: function(value, row) {
return renderCheckBoxForTableRow(value, row, function(row) {
return [row.db, row.name].join('/');
});
},
note: function (rows) {
const note = document.createElement("p");
note.appendChild(document.createTextNode("Found " + rows.length + " packages"));
return note;
},
},
});
packageSearchResults.appendChild(table);
}