mirror of https://github.com/lumapu/ahoy.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
114 lines
4.9 KiB
114 lines
4.9 KiB
<!doctype html>
|
|
<html lang="en">
|
|
<head>
|
|
<title>{#NAV_WEBSERIAL}</title>
|
|
{#HTML_HEADER}
|
|
</head>
|
|
<body>
|
|
{#HTML_NAV}
|
|
<div id="wrapper">
|
|
<div id="content" style="max-width: 100% !important;">
|
|
<div class="row">
|
|
<textarea id="serial" class="mt-3" cols="80" rows="40" readonly></textarea>
|
|
</div>
|
|
<div class="row my-3">
|
|
<div class="col-3">{#CONSOLE_ACTIVE}: <span class="dot" id="active"></span></div>
|
|
<div class="col-3 col-sm-4 my-3">{#UPTIME}: <span id="uptime"></span></div>
|
|
<div class="col-6 col-sm-4 a-r">
|
|
<input type="button" value="{#BTN_CLEAR}" class="btn" id="clear"/>
|
|
<input type="button" value="{#BTN_AUTOSCROLL}" class="btn" id="scroll"/>
|
|
<input type="button" value="{#BTN_COPY}" class="btn" id="copy"/>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
{#HTML_FOOTER}
|
|
<script type="text/javascript">
|
|
var mAutoScroll = true;
|
|
var con = document.getElementById("serial");
|
|
var exeOnce = true;
|
|
var version, build;
|
|
|
|
function parseGeneric(obj) {
|
|
var up = obj["ts_uptime"];
|
|
var days = parseInt(up / 86400) % 365;
|
|
var hrs = parseInt(up / 3600) % 24;
|
|
var min = parseInt(up / 60) % 60;
|
|
var sec = up % 60;
|
|
document.getElementById("uptime").innerHTML = days + " {#DAYS}, "
|
|
+ ("0"+hrs).substr(-2) + ":"
|
|
+ ("0"+min).substr(-2) + ":"
|
|
+ ("0"+sec).substr(-2);
|
|
|
|
parseRssi(obj)
|
|
if(true == exeOnce) {
|
|
parseNav(obj)
|
|
parseESP(obj)
|
|
parseTitle(obj)
|
|
window.setInterval("getAjax('/api/generic', parseGeneric)", 5000);
|
|
exeOnce = false;
|
|
setTimeOffset();
|
|
}
|
|
version = obj.version;
|
|
build = obj.build;
|
|
}
|
|
|
|
function setTimeOffset() {
|
|
// set time offset for serial console
|
|
var obj = new Object();
|
|
obj.cmd = "serial_utc_offset";
|
|
obj.val = new Date().getTimezoneOffset() * -60;
|
|
getAjax("/api/setup", null, "POST", JSON.stringify(obj));
|
|
}
|
|
|
|
document.getElementById("clear").addEventListener("click", function() {
|
|
con.value = "";
|
|
});
|
|
document.getElementById("scroll").addEventListener("click", function() {
|
|
mAutoScroll = !mAutoScroll;
|
|
this.value = (mAutoScroll) ? "{#BTN_AUTOSCROLL}" : "{#BTN_MANUALSCROLL}";
|
|
});
|
|
document.getElementById("copy").addEventListener("click", function() {
|
|
con.value = version + " - " + build + "\n---------------\n" + con.value;
|
|
if (window.clipboardData && window.clipboardData.setData) {
|
|
return window.clipboardData.setData("Text", text);
|
|
} else if (document.queryCommandSupported && document.queryCommandSupported("copy")) {
|
|
var ta = document.createElement("textarea");
|
|
ta.textContent = con.value;
|
|
ta.style.position = "fixed"; // Prevent scrolling to bottom of page in Microsoft Edge.
|
|
document.body.appendChild(ta);
|
|
ta.select();
|
|
try {
|
|
return document.execCommand("copy"); // Security exception may be thrown by some browsers.
|
|
} catch (ex) {
|
|
alert("{#CLIPBOARD_FAILED} " + ex);
|
|
} finally {
|
|
document.body.removeChild(ta);
|
|
alert("{#COPIED_TO_CLIPBOARD}");
|
|
}
|
|
}
|
|
});
|
|
|
|
if (!!window.EventSource) {
|
|
var source = new EventSource('/events');
|
|
source.addEventListener('open', function(e) {
|
|
document.getElementById("active").style.backgroundColor = "#0c0";
|
|
}, false);
|
|
|
|
source.addEventListener('error', function(e) {
|
|
if (e.target.readyState != EventSource.OPEN) {
|
|
document.getElementById("active").style.backgroundColor = "#f00";
|
|
}
|
|
}, false);
|
|
|
|
source.addEventListener('serial', function(e) {
|
|
con.value += e.data.replace(/\<rn\>/g, '\r\n');
|
|
if(mAutoScroll)
|
|
con.scrollTop = con.scrollHeight;
|
|
}, false);
|
|
}
|
|
|
|
getAjax("/api/generic", parseGeneric);
|
|
</script>
|
|
</body>
|
|
</html>
|
|
|