diff --git a/applications/luci-app-attendedsysupgrade/luasrc/view/attendedsysupgrade.htm b/applications/luci-app-attendedsysupgrade/luasrc/view/attendedsysupgrade.htm
index 4ea67ce70a..d12ccba06b 100644
--- a/applications/luci-app-attendedsysupgrade/luasrc/view/attendedsysupgrade.htm
+++ b/applications/luci-app-attendedsysupgrade/luasrc/view/attendedsysupgrade.htm
@@ -115,406 +115,11 @@
++
<%+footer%>
diff --git a/applications/luci-app-attendedsysupgrade/root/www/luci-static/resources/attendedsysupgrade.js b/applications/luci-app-attendedsysupgrade/root/www/luci-static/resources/attendedsysupgrade.js
new file mode 100644
index 0000000000..90034f19e1
--- /dev/null
+++ b/applications/luci-app-attendedsysupgrade/root/www/luci-static/resources/attendedsysupgrade.js
@@ -0,0 +1,409 @@
+function $(s) {
+ return document.getElementById(s.substring(1));
+}
+
+function show(s) {
+ $(s).style.display = 'block';
+}
+
+function hide(s) {
+ $(s).style.display = 'none';
+}
+
+function set_server() {
+ hide("#error_box");
+ data.url = $("#server").value;
+ ubus_call("uci", "set", { "config": "attendedsysupgrade", "section": "server", values: { "url": data.url } })
+ ubus_call("uci", "commit", { "config": "attendedsysupgrade" })
+ var server_button = $("#server")
+ server_button.type = 'button';
+ server_button.className = 'cbi-button cbi-button-edit';
+ server_button.parentElement.removeChild($("#button_set"));
+ server_button.onclick = edit_server;
+}
+
+function edit_server() {
+ $("#server").type = 'text';
+ $("#server").onkeydown = function(event) {
+ if(event.key === 'Enter') {
+ set_server();
+ return false;
+ }
+ }
+ $("#server").className = '';
+ $("#server").onclick = null;
+
+ button_set = document.createElement("input");
+ button_set.type = "button";
+ button_set.value = "Save";
+ button_set.name = "button_set";
+ button_set.id = "button_set";
+ button_set.className = 'cbi-button cbi-button-edit';
+ button_set.style = 'background-image: url("/luci-static/resources/cbi/save.gif");'
+ button_set.onclick = set_server
+ $("#server").parentElement.appendChild(button_set);
+}
+
+function edit_packages() {
+ data.edit_packages = true
+ hide("#edit_button");
+ $("#edit_packages").value = data.packages.join("\n");
+ show("#edit_packages");
+}
+
+// requests to the upgrade server
+function server_request(request_dict, path, callback) {
+ request_dict.distro = data.release.distribution;
+ request_dict.target = data.release.target.split("\/")[0];
+ request_dict.subtarget = data.release.target.split("\/")[1];
+ var request = new XMLHttpRequest();
+ request.open("POST", data.url + "/" + path, true);
+ request.setRequestHeader("Content-type", "application/json");
+ request.send(JSON.stringify(request_dict));
+ request.onerror = function(e) {
+ error_box("upgrade server down")
+ show("#server_div");
+ }
+ request.addEventListener('load', function(event) {
+ callback(request)
+ });
+}
+
+// initial setup, get system information
+function setup() {
+ data["ubus_rpc_session"] = "<%=luci.dispatcher.context.authsession%>"
+ ubus_call("rpc-sys", "packagelist", {}, "packages");
+ ubus_call("system", "board", {}, "release");
+ ubus_call("system", "board", {}, "board_name");
+ ubus_call("system", "board", {}, "model");
+ ubus_call("system", "info", {}, "memory");
+ uci_get({ "config": "attendedsysupgrade", "section": "server", "option": "url" })
+ uci_get({ "config": "attendedsysupgrade", "section": "client", "option": "upgrade_packages" })
+ uci_get({ "config": "attendedsysupgrade", "section": "client", "option": "advanced_mode" })
+ uci_get({ "config": "attendedsysupgrade", "section": "client", "option": "auto_search" })
+ setup_ready();
+}
+
+function setup_ready() {
+ // checks if a async ubus calls have finished
+ if(ubus_counter != ubus_closed) {
+ setTimeout(setup_ready, 300)
+ } else {
+ if(data.auto_search == 1) {
+ upgrade_check();
+ } else {
+ show("#upgrade_button");
+ show("#server_div");
+ $("#server").value = data.url;
+ }
+ }
+}
+
+function uci_get(option) {
+ // simple wrapper to get a uci value store in data.