window.MXOBJ = MXOBJ = window.MXOBJ||{}; MXOBJ.logger = {}; MXOBJ.attachEvent = MXOBJ.attachEvent || function(e,t,f) {if (e&&e.addEventListener)e.addEventListener(t, f, true); else e&&e.attachEvent('on'+t, f);}; MXOBJ.logger.redirectConsoleLogToDisplay = function() { if (MXOBJ.logger.oldLog) {return;} MXOBJ.logger.oldLog = console.log; console.log = function (s) { MXOBJ.logger.oldLog.apply(console, arguments); if (!MXOBJ.logger.consolediv) { let wrapper = document.createElement('div'); let inp = document.createElement('input'); let clear = document.createElement('button'); MXOBJ.logger.consolediv = document.createElement('div'); clear.innerHTML = 'C'; clear.style = 'display:inline;'; inp.style = 'width:90%;height:30px;display:inline;'; MXOBJ.logger.consolediv.style = 'width:99%;height:170px;background-color:yellow;overflow:auto'; inp.setAttribute('type', 'text'); wrapper.setAttribute('id', 'mx_console_log'); document.body.appendChild(wrapper); wrapper.style = 'position:absolute;left:0px;width:99%;height:200px;background-color:yellow;border:2px solid red;font-size:10px'; wrapper.appendChild(clear); wrapper.appendChild(inp); wrapper.appendChild(MXOBJ.logger.consolediv); MXOBJ.attachEvent(inp, 'keyup', function(e) {e=e||window.event;if (e.keyCode===13) {console.log(eval(inp.value));}}); MXOBJ.attachEvent(clear, 'click', function() {MXOBJ.logger.consolediv.innerHTML='';MXOBJ.logger.lastConsoleLog='';}); MXOBJ.attachEvent(window, 'scroll', function() {MXOBJ.logger.setPos(wrapper);}); MXOBJ.logger.setPos(wrapper); } if (MXOBJ.logger.lastConsoleLog===s) { MXOBJ.logger.consolediv.innerHTML += '÷'; } else { MXOBJ.logger.consolediv.innerHTML += '
' + s; } MXOBJ.logger.consolediv.scrollTop = MXOBJ.logger.consolediv.scrollHeight; MXOBJ.logger.lastConsoleLog = s; }; console.log('console.log has been redirected to a div.'); }; MXOBJ.logger.redirectConsoleLogToVariable = function() { if (MXOBJ.logger.oldLog) {return;} MXOBJ.logger.oldLog = console.log; MXOBJ.logger.oldErr = console.error; MXOBJ.logger.oldWarn = console.warn; MXOBJ.logger.oldInfo = console.info; MXOBJ.logger.oldTrace = console.trace; MXOBJ.logger.oldWinErr = window.onerror; MXOBJ.logger.logArr = []; console.log = function (s) { MXOBJ.logger.oldLog.apply(console, arguments); if (MXOBJ.logger.lastConsoleLog===s) { MXOBJ.logger.logArr[MXOBJ.logger.logArr.length-1] += '÷'; } else { MXOBJ.logger.pushNewLineToArr('', s); } MXOBJ.logger.lastConsoleLog = s; }; console.error = function (s) { MXOBJ.logger.oldErr.apply(console, arguments); MXOBJ.logger.pushNewLineToArr('ERR: ', s); }; console.warn = function (s) { MXOBJ.logger.oldWarn.apply(console, arguments); MXOBJ.logger.pushNewLineToArr('Warn: ', s); }; console.info = function (s) { MXOBJ.logger.oldInfo.apply(console, arguments); MXOBJ.logger.pushNewLineToArr('Info: ', s); }; console.trace = function (s) { MXOBJ.logger.oldTrace.apply(console, arguments); MXOBJ.logger.pushNewLineToArr('Trace: ', s); }; window.onerror = function(s){ MXOBJ.logger.oldWinErr && MXOBJ.logger.oldWinErr.apply(window, arguments); MXOBJ.logger.pushNewLineToArr('WERR: ', s); }; console.log('console.log has been redirected to a variable: MXOBJ.logger.logArr'); }; MXOBJ.logger.pushNewLineToArr = function(prefix, s) { MXOBJ.logger.logArr.push(prefix + s); if (MXOBJ.logger.logArr.length>5000) { MXOBJ.logger.logArr = MXOBJ.logger.logArr.slice(1000, MXOBJ.logger.logArr.length); MXOBJ.logger.logArr.push('--- FIRST 1000 LINE DELETED FROM JS CONSOLE ARRAY ---'); } }; MXOBJ.logger.setPos = function(wrapper) { wrapper.style.top = (window.innerHeight - wrapper.offsetHeight + window.scrollY) + 'px'; //console.log('setP: ' + wrapper.style.top); };