123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153 |
- //===== Fetching console text
- function fetchText(delay, repeat) {
- var el = $("#console");
- if (el.textEnd == undefined) {
- el.textEnd = 0;
- el.innerHTML = "";
- }
- window.setTimeout(function() {
- ajaxJson('GET', console_url + "?start=" + el.textEnd,
- function(resp) {
- var dly = updateText(resp);
- if (repeat) fetchText(dly, repeat);
- },
- function() { retryLoad(repeat); });
- }, delay);
- }
- function updateText(resp) {
- var el = $("#console");
- var delay = 3000;
- if (resp != null && resp.len > 0) {
- // console.log("updateText got", resp.len, "chars at", resp.start);
- var isScrolledToBottom = el.scrollHeight - el.clientHeight <= el.scrollTop + 1;
- //console.log("isScrolledToBottom="+isScrolledToBottom, "scrollHeight="+el.scrollHeight,
- // "clientHeight="+el.clientHeight, "scrollTop="+el.scrollTop,
- // "" + (el.scrollHeight - el.clientHeight) + "<=" + (el.scrollTop + 1));
- // append the text
- if (resp.start > el.textEnd) {
- el.innerHTML = el.innerHTML.concat("\r\n<missing lines\r\n");
- }
- el.innerHTML = el.innerHTML.concat(resp.text
- .replace(/&/g, '&')
- .replace(/</g, '<')
- .replace(/>/g, '>')
- .replace(/"/g, '"'));
- el.textEnd = resp.start + resp.len;
- delay = 500;
- // scroll to bottom
- if(isScrolledToBottom) el.scrollTop = el.scrollHeight - el.clientHeight;
- }
- return delay;
- }
- function retryLoad(repeat) {
- fetchText(1000, repeat);
- }
- //===== Text entry
- function consoleSendInit() {
- var sendHistory = $("#send-history");
- var inputText = $("#input-text");
- var inputAddCr = $("#input-add-cr");
- var inputAddLf = $("#input-add-lf");
- function findHistory(text) {
- for (var i = 0; i < sendHistory.children.length; i++) {
- if (text == sendHistory.children[i].value) {
- return i;
- }
- }
- return null;
- }
- function loadHistory(idx) {
- sendHistory.value = sendHistory.children[idx].value;
- inputText.value = sendHistory.children[idx].value;
- }
- function navHistory(rel) {
- var idx = findHistory(sendHistory.value) + rel;
- if (idx < 0) {
- idx = sendHistory.children.length - 1;
- }
- if (idx >= sendHistory.children.length) {
- idx = 0;
- }
- loadHistory(idx);
- }
- sendHistory.addEventListener("change", function(e) {
- inputText.value = sendHistory.value;
- });
- function pushHistory(text) {
- var idx = findHistory(text);
- if (idx !== null) {
- loadHistory(idx);
- return false;
- }
- var newOption = m('<option>'+
- (text
- .replace(/&/g, '&')
- .replace(/</g, '<')
- .replace(/>/g, '>')
- .replace(/"/g, '"'))
- +'</option>');
- newOption.value = text;
- sendHistory.appendChild(newOption);
- sendHistory.value = text;
- for (; sendHistory.children.length > 15; ) {
- sendHistory.removeChild(sendHistory.children[0]);
- }
- return true;
- }
- inputText.addEventListener("keydown", function(e) {
- switch (e.keyCode) {
- case 38: /* the up arrow key pressed */
- e.preventDefault();
- navHistory(-1);
- break;
- case 40: /* the down arrow key pressed */
- e.preventDefault();
- navHistory(+1);
- break;
- case 27: /* the escape key pressed */
- e.preventDefault();
- inputText.value = "";
- sendHistory.value = "";
- break;
- case 13: /* the enter key pressed */
- e.preventDefault();
- var text = inputText.value;
- if (inputAddCr.checked) text += '\r';
- if (inputAddLf.checked) text += '\n';
- pushHistory(inputText.value);
- inputText.value = "";
- ajaxSpin('POST', "/console/send?text=" + encodeURIComponent(text),
- function(resp) { showNotification("Text sent"); },
- function(s, st) { showWarning("Error sending text"); }
- );
- break;
- }
- });
- }
- //===== Log page
- function showDbgMode(mode) {
- var btns = $('.dbg-btn');
- for (var i=0; i < btns.length; i++) {
- if (btns[i].id === "dbg-"+mode)
- addClass(btns[i], "button-selected");
- else
- removeClass(btns[i], "button-selected");
- }
- }
|