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);
};