diff --git a/web/css/core.css b/web/css/core.css index 2f29691..7b6e94b 100644 --- a/web/css/core.css +++ b/web/css/core.css @@ -102,12 +102,12 @@ span.glyphicon { float: none; width: 100%; } -#pkg_files ul { +.file-tree ul { margin: 0px; padding: 0px; list-style-type: none; } -#pkg_files ul ul { +.file-tree ul ul { margin-left: 5px; } diff --git a/web/index.html b/web/index.html index 3a337fd..fee5b0a 100644 --- a/web/index.html +++ b/web/index.html @@ -153,35 +153,7 @@ - - Name - Repository - Version - Description - Architecture - Upstream URL - Licenses - Groups - Provides - Depends on - Optional deps - Required by - Conflicts with - Replaces - Install size - Packager - Build date - Install date - Install reason - Install script - Validated by - Package files - - - Download - - - + @@ -237,16 +209,7 @@ - - Name - Description - Package count - Usage - Signature level - Source-only - Upgrade sources - Upgrades - + diff --git a/web/js/packagemanagement.js b/web/js/packagemanagement.js index e89a30b..37276cb 100644 --- a/web/js/packagemanagement.js +++ b/web/js/packagemanagement.js @@ -124,42 +124,65 @@ var setProperties = function() { // -> basic package info var basics = entry.info.basics ? entry.info.basics : {}; - repoindex.setPackageNames("pkg_name", [entry.name]); - repoindex.setText("pkg_repo", repoindex.makeStr(entry.info.repo)); - repoindex.setText("pkg_ver", repoindex.makeStr(basics.ver)); - repoindex.setText("pkg_desc", repoindex.makeStr(basics.desc)); - repoindex.setText("pkg_arch", repoindex.makeStr(basics.arch)); - repoindex.setText("pkg_bdate", repoindex.makeStr(basics.bdate)); + var tb = document.getElementById("pkg_tbody"); + tb.wipeChildren(); + repoindex.addPackageNames(tb, "Name", [entry.name]); + repoindex.addField(tb, "Repository", repoindex.makeStr(entry.info.repo)); + repoindex.addField(tb, "Version", repoindex.makeStr(basics.ver)); + repoindex.addField(tb, "Description", repoindex.makeStr(basics.desc)); + if(basics.arch) { + repoindex.addField(tb, "Architecture", repoindex.makeStr(basics.arch)); + } else if(basics.archs) { + repoindex.addField(tb, "Architectures", repoindex.makeArray(basics.archs)); + } // -> full package info var details = entry.info.details ? entry.info.details : {}; if(details.url) { - repoindex.setLink("pkg_url", details.url, details.url, window.open); + repoindex.setLink(repoindex.addField(tb, "Upstream URL"), details.url, details.url, window.open); } else { - repoindex.setText("pkg_url", "unknown"); + repoindex.addField(tb, "Upstream URL", "unknown"); + } + repoindex.addField(tb, "Licenses", repoindex.makeArray(details.lic)); + repoindex.addPackageNames(tb, "Groups", repoindex.pack(details.grp), repoindex.Pages.Groups); + repoindex.addPackageNames(tb, "Provides", repoindex.pkgNamesFromDeps(details.prov)); + repoindex.addPackageNames(tb, "Depends on", repoindex.pkgNamesFromDeps(details.deps)); + repoindex.addPackageNames(tb, "Optional deps", repoindex.pkgNamesFromDeps(details.optd)); + repoindex.addPackageNames(tb, "Required by", details.requ); + repoindex.addPackageNames(tb, "Optional for", details.optf); + repoindex.addPackageNames(tb, "Conflicts with", repoindex.pkgNamesFromDeps(details.conf)); + repoindex.addPackageNames(tb, "Replaces", repoindex.pkgNamesFromDeps(details.repl)); + if(details.buildAvail) { + repoindex.addField(tb, "Install size", repoindex.makeDataSize(details.isize)); + repoindex.addField(tb, "Packager", details.pack); + repoindex.addField(tb, "Build date", repoindex.makeStr(basics.bdate)); + if(entry.info.repo === "local") { + repoindex.addField(tb, "Install date", repoindex.makeStr(details.idate)); + repoindex.addField(tb, "Install reason", details.expl ? "explicitly installed" : "installed as dependency"); + } + repoindex.addField(tb, "Install script", repoindex.makeBool(details.scri)); + repoindex.addField(tb, "Validated by", repoindex.makeArray(details.sig)); + repoindex.setTree(repoindex.addField(tb, "Package files"), repoindex.makeTree(details.files)); + } + // -> update download buttons + if(details.buildAvail || details.srcAvail) { + var downloadElement = repoindex.addField(tb, "Download"); + var spanElement; + if(details.buildAvail) { + spanElement = document.createElement("span"); + var downloadPkgParams = {repo: entry.info.repo, pkg: entry.name, down: "pkg"}; + repoindex.setDownloadButton(spanElement, "package", repoindex.makeHash(repoindex.Pages.Packages, downloadPkgParams, true), function() { + repoindex.pageManager.denoteHash(repoindex.Pages.Packages, downloadPkgParams); + repoindex.pageManager.packageManager.showMirrorsForIndex(entryIndex); + }); + downloadElement.appendChild(spanElement); + } + if(details.srcAvail) { + spanElement = document.createElement("span"); + var downloadSrcParams = {repo: entry.info.repo, pkg: entry.name, down: "src"}; + repoindex.setDownloadButton(spanElement, "source", repoindex.makeHash(repoindex.Pages.Packages, downloadSrcParams, true)); + downloadElement.appendChild(spanElement); + } } - repoindex.setText("pkg_lic", repoindex.makeArray(details.lic)); - repoindex.setPackageNames("pkg_grp", repoindex.pack(details.grp), repoindex.Pages.Groups); - repoindex.setPackageNames("pkg_prov", repoindex.pkgNamesFromDeps(details.prov)); - repoindex.setPackageNames("pkg_deps", repoindex.pkgNamesFromDeps(details.deps)); - repoindex.setPackageNames("pkg_optd", repoindex.pkgNamesFromDeps(details.optd)); - repoindex.setPackageNames("pkg_requ", repoindex.pack(details.requ)); - repoindex.setPackageNames("pkg_conf", repoindex.pkgNamesFromDeps(details.conf)); - repoindex.setPackageNames("pkg_repl", repoindex.pkgNamesFromDeps(details.repl)); - repoindex.setText("pkg_isize", repoindex.makeDataSize(details.isize)); - repoindex.setText("pkg_pack", repoindex.makeStr(details.pack)); - repoindex.setText("pkg_idate", repoindex.makeStr(details.idate)); - repoindex.setText("pkg_expl", entry.info.repo === "local" ? (details.expl ? "explicitly installed" : "installed as dependency") : "n/a"); - repoindex.setText("pkg_scri", repoindex.makeBool(details.scri)); - repoindex.setText("pkg_sig", repoindex.makeArray(details.sig)); - repoindex.setTree("pkg_files", repoindex.makeTree(details.files)); - // -> upgrade download buttons - var downloadPkgParams = {repo: entry.info.repo, pkg: entry.name, down: "pkg"}; - repoindex.setDownloadButton("pkg_down", "package", repoindex.makeHash(repoindex.Pages.Packages, downloadPkgParams, true), function() { - repoindex.pageManager.denoteHash(repoindex.Pages.Packages, downloadPkgParams); - repoindex.pageManager.packageManager.showMirrorsForIndex(entryIndex); - }); - var downloadSrcParams = {repo: entry.info.repo, pkg: entry.name, down: "src"}; - repoindex.setDownloadButton("src_down", "source", repoindex.makeHash(repoindex.Pages.Packages, downloadSrcParams, true)); }; setProperties(); if(!entry.info.basics || !entry.info.details) { diff --git a/web/js/pagemanagement.js b/web/js/pagemanagement.js index 6d79495..dbea1a6 100644 --- a/web/js/pagemanagement.js +++ b/web/js/pagemanagement.js @@ -281,10 +281,13 @@ this.setPage(repoindex.Pages.Packages); // ensure right column is visible this.showRightColumn(this.leftColumnContainerPackages, this.rightColumnContainerPackages); - if(scroll && !checkVisibility($("#pkg_sig"))) { - $('html, body').animate({ - scrollTop: $("#" + this.rightColumnContainerPackages.id).offset().top - }, 500); + var tb = document.getElementById("pkg_tbody"); + if(tb.lastChild) { + if(scroll && !checkVisibility(tb.lastChild)) { + $('html, body').animate({ + scrollTop: $("#" + this.rightColumnContainerPackages.id).offset().top + }, 500); + } } }; diff --git a/web/js/repomanagement.js b/web/js/repomanagement.js index 22512c9..179747d 100644 --- a/web/js/repomanagement.js +++ b/web/js/repomanagement.js @@ -181,15 +181,17 @@ var entry = this.entryByIndex(entryIndex); if(entry) { var info = entry.info; - repoindex.setText("repo_name", entry.name); - repoindex.setText("repo_desc", info.desc); - repoindex.setText("repo_pkgcount", repoindex.makeStr(info.packageCount)); - repoindex.setText("repo_usage", repoindex.makeArray(info.usage, ", ")); - repoindex.setText("repo_siglevel", repoindex.makeArray(info.sigLevel, ", ")); - repoindex.setText("repo_source_only", repoindex.makeBool(info.srcOnly)); - repoindex.setText("repo_upgrade_sources", repoindex.makeArray(info.upgradeSources, ", ")); + var tb = document.getElementById("repo_tbody"); + tb.wipeChildren(); + repoindex.addField(tb, "Name", repoindex.makeStr(entry.name)); + repoindex.addField(tb, "Description", repoindex.makeStr(info.desc)); + repoindex.addField(tb, "Package count", repoindex.makeStr(info.packageCount)); + repoindex.addField(tb, "Usage", repoindex.makeArray(info.usage, ", ")); + repoindex.addField(tb, "Signature level", repoindex.makeArray(info.sigLevel, ", ")); + repoindex.addField(tb, "Source-only", repoindex.makeBool(info.srcOnly)); + repoindex.addField(tb, "Upgrade sources", repoindex.makeArray(info.upgradeSources, ", ")); var invokeUpgradeLookupParams = {repo: entry.name, invoke: "upgradelookup"}; - repoindex.setDownloadButton("repo_checkforupgrades", "check for upgrades", repoindex.makeHash(repoindex.Pages.Repositories, invokeUpgradeLookupParams, true), function() { + repoindex.setDownloadButton(repoindex.addField(tb, "Upgrades"), "check for upgrades", repoindex.makeHash(repoindex.Pages.Repositories, invokeUpgradeLookupParams, true), function() { repoindex.pageManager.repoManager.showAvailableUpgrades(entry.name); repoindex.pageManager.denoteHash(repoindex.Pages.Repositories, invokeUpgradeLookupParams); }, "refresh"); diff --git a/web/js/utils.js b/web/js/utils.js index b798499..7db91d3 100644 --- a/web/js/utils.js +++ b/web/js/utils.js @@ -115,25 +115,29 @@ repoindex.setPackageNames = function(id, packageNames, pageName) { var element = typeof id === "string" ? document.getElementById(id) : id; element.wipeChildren(); - if(packageNames.length > 0) { - if(!pageName) { - pageName = repoindex.Pages.Packages; - } - for(var i = 0; i < packageNames.length; ++i) { - var link = document.createElement("a"); - link.appendChild(document.createTextNode(packageNames[i])); - link.href = repoindex.makeHash(pageName, {}, true); - link.onclick = function() { - repoindex.pageManager.setPage(pageName, {}); - repoindex.pageManager.applySearchTerm(this.firstChild.data, true); - return false; - }; - link.className = "package-link"; - element.appendChild(link); - element.appendChild(document.createTextNode(" ")); + if(Array.isArray(packageNames)) { + if(packageNames.length > 0) { + if(!pageName) { + pageName = repoindex.Pages.Packages; + } + for(var i = 0; i < packageNames.length; ++i) { + var link = document.createElement("a"); + link.appendChild(document.createTextNode(packageNames[i])); + link.href = repoindex.makeHash(pageName, {}, true); + link.onclick = function() { + repoindex.pageManager.setPage(pageName, {}); + repoindex.pageManager.applySearchTerm(this.firstChild.data, true); + return false; + }; + link.className = "package-link"; + element.appendChild(link); + element.appendChild(document.createTextNode(" ")); + } + } else { + element.appendChild(document.createTextNode("none")); } } else { - element.appendChild(document.createTextNode("none")); + element.appendChild(document.createTextNode("invalid")); } }; @@ -174,6 +178,7 @@ repoindex.setTree = function(id, nodes) { var element = typeof id === "string" ? document.getElementById(id) : id; element.wipeChildren(); + element.className = "file-tree"; // has root? if(Array.isArray(nodes) && nodes.length) { var makeNode = function(parentElement, nodes) { @@ -213,25 +218,29 @@ }; repoindex.makeStr = function(str, na) { - return str ? str : (na ? na : "unknown"); + return str ? ((typeof str === "string" || typeof str === "number") ? str : "invalid") : (na ? na : "unknown"); }; repoindex.makeArray = function(array, separator) { - return array && Array.isArray(array) ? (array.length ? array.join(separator ? separator : " ") : "none") : "unknown"; + return array ? (Array.isArray(array) ? (array.length ? array.join(separator ? separator : " ") : "none") : "invalid") : "unknown"; }; repoindex.makeDataSize = function(sizeInByte) { if(sizeInByte) { - if (sizeInByte < 1024) { - return sizeInByte + " bytes"; - } else if (sizeInByte < 1048576) { - return (sizeInByte / 1024.0).toFixed(2) + " KiB"; - } else if (sizeInByte < 1073741824) { - return (sizeInByte / 1048576.0).toFixed(2) + " MiB"; - } else if (sizeInByte < 1099511627776) { - return (sizeInByte / 1073741824.0).toFixed(2) + " GiB"; + if(typeof sizeInByte === "number") { + if (sizeInByte < 1024) { + return sizeInByte + " bytes"; + } else if (sizeInByte < 1048576) { + return (sizeInByte / 1024.0).toFixed(2) + " KiB"; + } else if (sizeInByte < 1073741824) { + return (sizeInByte / 1048576.0).toFixed(2) + " MiB"; + } else if (sizeInByte < 1099511627776) { + return (sizeInByte / 1073741824.0).toFixed(2) + " GiB"; + } else { + return (sizeInByte / 1099511627776.0).toFixed(2) + " TiB"; + } } else { - return (sizeInByte / 1099511627776.0).toFixed(2) + " TiB"; + return "invalid"; } } else { return "unknown"; @@ -271,6 +280,24 @@ }); }; + repoindex.addField = function(element, fieldName, value) { + var nameElement = document.createElement("th"); + nameElement.appendChild(document.createTextNode(fieldName)); + var valueElement = document.createElement("td"); + if(value) { + valueElement.appendChild(document.createTextNode(value)); + } + var trElement = document.createElement("tr"); + trElement.appendChild(nameElement); + trElement.appendChild(valueElement); + element.appendChild(trElement); + return valueElement; + }; + + repoindex.addPackageNames = function(element, fieldName, packageNames, pageName) { + repoindex.setPackageNames(repoindex.addField(element, fieldName), packageNames, pageName); + }; + return repoindex; })(repoindex || {});