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