diff --git a/src/resources/js/download.js b/src/resources/js/download.js
index 2649d7d..9dd90f0 100644
--- a/src/resources/js/download.js
+++ b/src/resources/js/download.js
@@ -1,12 +1,13 @@
// download package list as soon as possible
$.get("/api/packages").done(function(json) {
var packageList = json.result;
+ const preselectedPackage = new URL(window.location.href).searchParams.getAll("package") ;
// wait until the DOM has finished loading before rendering the results
$(function() {
const optpkgTemplate =
'
'+
- '
'+
+ '
'+
'
'+
'
'+
'
';
@@ -27,6 +28,30 @@ $.get("/api/packages").done(function(json) {
var $optpkg = $(optpkgTemplate);
$('.optpkg-name', $optpkg).text(pkg.path);
+ if (preselectedPackage.includes(pkg.path)) {
+ $('.optpkg-check', $optpkg).prop("checked", true);
+ $('.optpkg-check', $optpkg).closest('.optpkg').toggleClass("selected");
+ }
+
+ $('.optpkg-check', $optpkg).change({pkg: pkg}, (event) => {
+ const element = $(event.currentTarget);
+ let newUrl = new URL(window.location.href);
+ let currentSelected = newUrl.searchParams.getAll("package") ;
+ newUrl.searchParams.delete("package");
+ const pkgPath = event.data.pkg.path;
+ if (element.is(':checked')) {
+ if (!currentSelected.includes(pkgPath)) {
+ currentSelected = [...currentSelected, pkgPath];
+ }
+ } else {
+ const position = currentSelected.indexOf(pkgPath);
+ if (position >= 0) {
+ currentSelected.splice(position, 1);
+ }
+ }
+ currentSelected.forEach( (selected) => newUrl.searchParams.append("package", selected));
+ history.replaceState({}, "Download Caddy", newUrl.toString());
+ });
if (pkg.modules && pkg.modules.length > 0) {
for (var j = 0; j < pkg.modules.length; j++) {
@@ -43,6 +68,7 @@ $.get("/api/packages").done(function(json) {
}
$('#optional-packages').append($optpkg);
}
+ updatePage();
});
}).fail(function(jqxhr, status, error) {
swal({
@@ -218,4 +244,4 @@ function enableFields() {
window.onbeforeunload = null;
}
-var downloadButtonHtml; // to restore button to its original contents
\ No newline at end of file
+var downloadButtonHtml; // to restore button to its original contents