var lastStatus = 0; // Method to display a message in a message field. The existing html is saved and replaced // with the new html. After a timeout period the original html is restored. // $origMessage = null; $origId = null; $msgTimerId = null; function showMessage(timeout, id, message) { // Is this a new message whilst one is active? if($origMessage !== null) { // Cancel timer and restore original message. clearTimeout($msgTimerId); $('#' + $origId).html($origMessage); } // Store original message and Id so that on timer expiry it can be replaced.. $origMessage = $('#' + id).html(); $origId = id; // Change HTML and set timer to restore it. $('#' + id).html(message); $msgTimerId = setTimeout(function(msgFieldId) { $('#' + msgFieldId).html($origMessage); $origMessage = null; }, timeout, id); } // Clear the file input array. function clearFileInput(ctrl) { try { ctrl.value = null; } catch(ex) { } if (ctrl.value) { ctrl.parentNode.replaceChild(ctrl.cloneNode(true), ctrl); } } // Firmware handlers. document.getElementById('firmwareUpload').onchange = function getFirmwareFileName(e) { var default_path = document.getElementById("firmwareUpload").files[0].name; // Put the name of the file into the table cell. document.getElementById('firmwareName').innerHTML = "=>" + default_path; document.getElementById('firmwareUpgrade').value = document.getElementById('firmwareUpload').files[0].name; // Disable select and enable upgrade/cancel. document.getElementById('firmwareUploadLabel').style.display = 'none'; document.getElementById('firmwareUpgrade').disabled = false; document.getElementById('firmwareUpgrade').style.display = 'block'; document.getElementById('firmwareCancel').disabled = false; document.getElementById('firmwareCancel').style.display = 'block'; document.getElementById('firmwareMsg').innerHTML = "Press Upgrade to upload and flash the firmware into the SharpKey or Cancel to cancel and re-select file."; } document.getElementById('firmwareCancel').onclick = function cancelFirmwareUpload(e) { var default_path = document.getElementById("firmwareUpload").files[0].name; // Reset the selected filename. document.getElementById('firmwareName').innerHTML = ""; document.getElementById('firmwareUpgrade').value = []; clearFileInput(document.getElementById('firmwareUpload')); // Enable select and disable upgrade/cancel. document.getElementById('firmwareUploadLabel').style.display = 'block'; document.getElementById('firmwareUpgrade').disabled = true; document.getElementById('firmwareUpgrade').style.display = 'none'; document.getElementById('firmwareCancel').disabled = true; document.getElementById('firmwareCancel').style.display = 'none'; document.getElementById('firmwareMsg').innerHTML = "Select a firmware image file with which to upgrade the SharpKey Operating System."; } // Firmware upgrade handler. function firmwareUpdateProgress(e) { if (e.lengthComputable) { var percentage = Math.round((e.loaded/e.total)*100); document.getElementById('firmwareProgressBar').style.width = percentage + '%'; } else { document.getElementById('firmwareProgressBar').innerHTML = "Unable to compute progress information since the total size is unknown"; } } document.getElementById('firmwareUpgrade').onclick = function firmwareUpload() { var fileInput = document.getElementById("firmwareUpload").files; // Reset the last status. Used to track state change. lastStatus = 0; // Client side checks, no point initiating a firmware update if the file isnt valid! if (fileInput.length == 0) { alert("No file selected!"); } else if (fileInput[0].size > 1664*1024) { alert("File size must be less than 1.6MB!"); } else { document.getElementById("firmwareUpload").disabled = true; document.getElementById("firmwareUploadLabel").style.display = 'none'; document.getElementById("firmwareUpgrade").disabled = true; document.getElementById("firmwareUpgrade").style.display = 'none'; document.getElementById("firmwareCancel").style.display = 'none'; document.getElementById("firmwareProgress").style.display = 'block'; var xhttp; if(window.XMLHttpRequest) { xhttp = new XMLHttpRequest(); } else { xhttp = new ActiveXObject("Microsoft.XMLHTTP"); } // Install listeners to xhttp.upload.addEventListener("progress", firmwareUpdateProgress, false); xhttp.onreadystatechange = function() { if (xhttp.readyState == 4) { lastStatus = xhttp.status; if (xhttp.status == 200) { document.getElementById('firmwareMsg').innerHTML = "

Transfer complete, firmware successfully flashed onto the SharpKey. Please press Reboot to activate.

"; document.getElementById("firmwareProgress").style.display = 'none'; document.getElementById('firmwareName').style.display = 'none'; } else if (xhttp.status == 500) { document.getElementById('firmwareMsg').innerHTML = "

Error: " + xhttp.responseText + " - Press Reboot

"; } else if (xhttp.status == 0) { document.getElementById('firmwareMsg').innerHTML = "

Error: Server closed the connection abrubtly, flash status unknown! - Press Reboot

"; } else { document.getElementById('firmwareMsg').innerHTML = "

Error: " + xhttp.responseText + " - Press Reboot

"; } } }; document.getElementById('firmwareMsg').innerHTML = "

Uploading and flashing the new firmware, please wait...

"; xhttp.open("POST", "/ota/firmware", true); xhttp.send(fileInput[0]); } } // Filepack handlers. document.getElementById('filepackUpload').onchange = function getFilepackFileName(e) { var default_path = document.getElementById("filepackUpload").files[0].name; // Put the name of the file into the table cell. document.getElementById('filepackName').innerHTML = "=>" + default_path; document.getElementById('filepackUpgrade').value = document.getElementById('filepackUpload').files[0].name; // Disable select and enable upgrade/cancel. document.getElementById('filepackUploadLabel').style.display = 'none'; document.getElementById('filepackUpgrade').disabled = false; document.getElementById('filepackUpgrade').style.display = 'block'; document.getElementById('filepackCancel').disabled = false; document.getElementById('filepackCancel').style.display = 'block'; document.getElementById('filepackWarning').style.display = 'block'; document.getElementById('filepackMsg').innerHTML = "Press Upgrade to upload and flash the filepack onto the SharpKey filesystem or Cancel to cancel and re-select file."; } document.getElementById('filepackCancel').onclick = function cancelFilepackUpload(e) { var default_path = document.getElementById("filepackUpload").files[0].name; // Reset the selected filename. document.getElementById('filepackName').innerHTML = ""; clearFileInput(document.getElementById('filepackUpload')); // Enable select and disable upgrade/cancel. document.getElementById('filepackUploadLabel').style.display = 'block'; document.getElementById('filepackUpgrade').disabled = true; document.getElementById('filepackUpgrade').style.display = 'none'; document.getElementById('filepackCancel').disabled = true; document.getElementById('filepackCancel').style.display = 'none'; document.getElementById('filepackWarning').style.display = 'none'; document.getElementById('filepackMsg').innerHTML = "Select a filepack image file with which to upgrade the SharpKey filesystem."; } // Filepack upgrade handler. function filepackUpdateProgress(e) { if (e.lengthComputable) { var percentage = Math.round((e.loaded/e.total)*100); document.getElementById('filepackProgressBar').style.width = percentage + '%'; } else { document.getElementById('filepackProgressBar').innerHTML = "Unable to compute progress information since the total size is unknown"; } } document.getElementById('filepackUpgrade').onclick = function filepackUpload() { var fileInput = document.getElementById("filepackUpload").files; // Reset the last status. Used to track state change. lastStatus = 0; // Client side checks, no point initiating a filepack update if the file isnt valid! if (fileInput.length == 0) { alert("No file selected!"); } else if (fileInput[0].size > 640*1024) { alert("File size must be less than 640K!"); } else { document.getElementById("filepackUpload").disabled = true; document.getElementById("filepackUploadLabel").style.display = 'none'; document.getElementById("filepackUpgrade").disabled = true; document.getElementById("filepackUpgrade").style.display = 'none'; document.getElementById("filepackCancel").style.display = 'none'; document.getElementById("filepackProgress").style.display = 'block'; var xhttp; if(window.XMLHttpRequest) { xhttp = new XMLHttpRequest(); } else { xhttp = new ActiveXObject("Microsoft.XMLHTTP"); } // Install listeners to xhttp.upload.addEventListener("progress", filepackUpdateProgress, false); xhttp.onreadystatechange = function() { if (xhttp.readyState == 4) { lastStatus = xhttp.status; if (xhttp.status == 200) { document.getElementById('filepackMsg').innerHTML = "

Transfer complete, filepack successfully flashed onto SharpKey filesystem. Please press Reboot to activate.

"; document.getElementById("filepackProgress").style.display = 'none'; document.getElementById('filepackName').style.display = 'none'; } else if (xhttp.status == 500) { document.getElementById('filepackMsg').innerHTML = "

Error: " + xhttp.responseText + " - Press Reboot

"; } else if (xhttp.status == 0) { document.getElementById('filepackMsg').innerHTML = "

Error: Server closed the connection abrubtly, flash status unknown! - Press Reboot

"; } else { document.getElementById('filepackMsg').innerHTML = "

Error: " + xhttp.responseText + " - Press Reboot

"; } } }; document.getElementById('filepackMsg').innerHTML = "

Uploading and flashing the new filepack, please wait...

"; xhttp.open("POST", "/ota/filepack", true); xhttp.send(fileInput[0]); } } // Method to enable the correct side-bar menu for the underlying host interface. function enableIfConfig() { // Disable keymap if no host is connected to the SharpKey. KeyInterface is the base class which exists when // no host was detected to invoke a host specific sub-class. if(activeInterface === "KeyInterface ") { document.getElementById("keyMapAvailable").style.display = 'none'; } // Mouse interface active? else if(activeInterface === "Mouse ") { document.getElementById("keyMapAvailable").style.display = 'none'; document.getElementById("mouseCfgAvailable").style.display = 'compact'; } else { document.getElementById("keyMapAvailable").style.display = 'compact'; // Secondary interface available? if(secondaryInterface == "Mouse ") { document.getElementById("mouseCfgAvailable").style.display = 'compact'; } else { document.getElementById("mouseCfgAvailable").style.display = 'none'; } } } // On document load, setup the items viewable on the page according to set values. document.addEventListener("DOMContentLoaded", function setPageDefaults() { enableIfConfig(); });