generate info dynamically

This commit is contained in:
Martchus 2015-10-28 22:43:59 +01:00
parent 8043caf05b
commit 9980fad0a8
6 changed files with 130 additions and 112 deletions

View File

@ -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;
}

View File

@ -153,35 +153,7 @@
<col style="width:30%">
<col style="width:70%">
</colgroup>
<tbody>
<tr><th>Name</th><td id="pkg_name"></td></tr>
<tr><th>Repository</th><td id="pkg_repo"></td></tr>
<tr><th>Version</th><td id="pkg_ver"></td></tr>
<tr><th>Description</th><td id="pkg_desc"></td></tr>
<tr><th>Architecture</th><td id="pkg_arch"></td></tr>
<tr><th>Upstream URL</th><td id="pkg_url"></td></tr>
<tr><th>Licenses</th><td id="pkg_lic"></td></tr>
<tr><th>Groups</th><td id="pkg_grp"></td></tr>
<tr><th>Provides</th><td id="pkg_prov"></td></tr>
<tr><th>Depends on</th><td id="pkg_deps"></td></tr>
<tr><th>Optional deps</th><td id="pkg_optd"></td></tr>
<tr><th>Required by</th><td id="pkg_requ"></td></tr>
<tr><th>Conflicts with</th><td id="pkg_conf"></td></tr>
<tr><th>Replaces</th><td id="pkg_repl"></td></tr>
<tr><th>Install size</th><td id="pkg_isize"></td></tr>
<tr><th>Packager</th><td id="pkg_pack"></td></tr>
<tr><th>Build date</th><td id="pkg_bdate"></td></tr>
<tr><th>Install date</th><td id="pkg_idate"></td></tr>
<tr><th>Install reason</th><td id="pkg_expl"></td></tr>
<tr><th>Install script</th><td id="pkg_scri"></td></tr>
<tr><th>Validated by</th><td id="pkg_sig"></td></tr>
<tr><th>Package files</th><td id="pkg_files"></td></tr>
<!--<tr><th>Source files</th><td id="pkg_src_files"></td></tr>-->
<tr>
<th>Download</th>
<td><span id="pkg_down"></span> <span id="src_down"></span></td>
</tr>
</tbody>
<tbody id="pkg_tbody"></tbody>
</table>
</div>
</div>
@ -237,16 +209,7 @@
<col style="width:30%">
<col style="width:70%">
</colgroup>
<tbody>
<tr><th>Name</th><td id="repo_name"></td></tr>
<tr><th>Description</th><td id="repo_desc"></td></tr>
<tr><th>Package count</th><td id="repo_pkgcount"></td></tr>
<tr><th>Usage</th><td id="repo_usage"></td></tr>
<tr><th>Signature level</th><td id="repo_siglevel"></td></tr>
<tr><th>Source-only</th><td id="repo_source_only"></td></tr>
<tr><th>Upgrade sources</th><td id="repo_upgrade_sources"></td></tr>
<tr><th>Upgrades</th><td><span id="repo_checkforupgrades"></span></td></tr>
</tbody>
<tbody id="repo_tbody"></tbody>
</table>
</div>
</div>

View File

@ -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) {

View File

@ -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);
}
}
};

View File

@ -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");

View File

@ -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 || {});