diff --git a/srv/static/js/genericrendering.js b/srv/static/js/genericrendering.js index 772cad4..5e47d0a 100644 --- a/srv/static/js/genericrendering.js +++ b/srv/static/js/genericrendering.js @@ -162,7 +162,7 @@ export function renderTimeSpan(startTimeStamp, endTimeStamp) export function renderLink(value, row, handler, tooltip, href, middleClickHref) { const linkElement = document.createElement('a'); - const linkText = typeof value === 'object' ? value : document.createTextNode(value); + const linkText = typeof value === 'object' ? value : renderNoneInGrey(value); linkElement.appendChild(linkText); linkElement.href = middleClickHref || href || '#'; if (tooltip !== undefined) { diff --git a/srv/static/js/globalstatuspage.js b/srv/static/js/globalstatuspage.js index cfcf2fa..ef281bd 100644 --- a/srv/static/js/globalstatuspage.js +++ b/srv/static/js/globalstatuspage.js @@ -1,5 +1,6 @@ import * as AjaxHelper from './ajaxhelper.js'; import * as BuildActionsPage from './buildactionspage.js'; +import * as PackageSearchPage from './packagesearchpage.js'; import * as CustomRendering from './customrendering.js'; import * as GenericRendering from './genericrendering.js'; import * as Utils from './utils.js'; @@ -40,7 +41,7 @@ function handleGlobalStatusUpdate(ajaxRequest) columnAccessors: ['arch', 'name', 'packageCount', 'lastUpdate', 'syncFromMirror'], customRenderer: { name: function (value, row) { - return GenericRendering.renderLink(value, row, showRepository); + return GenericRendering.renderLink(value, row, searchRepository, undefined, undefined, hashToSearchRepository(row)); }, lastUpdate: GenericRendering.renderShortTimeStamp, note: function(rows) { @@ -51,6 +52,9 @@ function handleGlobalStatusUpdate(ajaxRequest) note.appendChild(CustomRendering.renderReloadButton(queryGlobalStatus)); return note; }, + syncFromMirror: function (value, row) { + return GenericRendering.renderLink(value, row, showRepository); + }, }, }); globalStatus.appendChild(dbTable); @@ -227,16 +231,32 @@ function handleGlobalStatusUpdate(ajaxRequest) BuildActionsPage.handleBuildActionPresetChange(); } -function showRepository(dbName, dbInfo) +function showRepository(value, dbInfo) { const mirror = dbInfo.mainMirror; if (!mirror) { - window.alert('No mirror configured for ' + dbName + '.'); + window.alert('No mirror configured for ' + dbInfo.name + '.'); } else { window.open(mirror); } } +function searchRepository(value, dbInfo) +{ + const form = PackageSearchPage.initSearchForm(); + form.name.value = ''; + form.db.value = Utils.makeRepoName(dbInfo.name, dbInfo.arch); + form.mode.value = 'name-contains'; + PackageSearchPage.searchForPackages(); +} + +function hashToSearchRepository(dbInfo) +{ + return '#package-search-section?' + + encodeURIComponent('name=&mode=name-contains&db=' + + encodeURIComponent(Utils.makeRepoName(dbInfo.name, dbInfo.arch))); +} + window.globalInfo = undefined; window.functionsPostponedUntilGlobalInfo = []; window.hasGlobalStatus = false; diff --git a/srv/static/js/packagesearchpage.js b/srv/static/js/packagesearchpage.js index 1203690..d289444 100644 --- a/srv/static/js/packagesearchpage.js +++ b/srv/static/js/packagesearchpage.js @@ -4,26 +4,33 @@ import * as PackageRendering from './packagerendering.js'; import * as SinglePageHelper from './singlepage.js'; import * as Utils from './utils.js'; -export function initPackageSearch(sectionElement, sectionData, newParams) +export function initSearchForm() { const searchForm = document.getElementById('package-search-form'); - if (!searchForm.dataset.initialized) { - searchForm.onsubmit = function() { - searchForPackages(); - return false; - }; - const packageResultsFormElements = document.getElementById('package-results-form').elements; - packageResultsFormElements.selectall.onclick = function () { - Utils.alterFormSelection(this.form, 'check-all'); - }; - packageResultsFormElements.unselectall.onclick = function () { - Utils.alterFormSelection(this.form, 'uncheck-all'); - }; - packageResultsFormElements.startselected.onclick = function () { - fillBuildActionFromPackageSearch(); - }; - searchForm.dataset.initialized = true; + if (searchForm.dataset.initialized) { + return searchForm; } + searchForm.onsubmit = function() { + searchForPackages(); + return false; + }; + const packageResultsFormElements = document.getElementById('package-results-form').elements; + packageResultsFormElements.selectall.onclick = function () { + Utils.alterFormSelection(this.form, 'check-all'); + }; + packageResultsFormElements.unselectall.onclick = function () { + Utils.alterFormSelection(this.form, 'uncheck-all'); + }; + packageResultsFormElements.startselected.onclick = function () { + fillBuildActionFromPackageSearch(); + }; + searchForm.dataset.initialized = true; + return searchForm; +} + +export function initPackageSearch(sectionElement, sectionData, newParams) +{ + initSearchForm(); let currentParams = sectionData.state.params; if (currentParams && currentParams.startsWith('?')) { currentParams = currentParams.substr(1); @@ -83,7 +90,7 @@ function searchForPackagesFromParams(searchParams) return res; } -function searchForPackages() +export function searchForPackages() { const res = AjaxHelper.startFormQueryEx('package-search-form', showPackageSearchResults); const params = SinglePageHelper.sections['package-search'].state.params = res.params.substr(1);