| (function() { |
| |
| if (!window.interact) { |
| var script = document.createElement("script"); |
| script.src = "https://cdn.jsdelivr.net/npm/interactjs/dist/interact.min.js"; |
| document.head.appendChild(script); |
| } |
|
|
| var s; |
| if (!document.querySelector('style.EVALDOTJSSTYLETHING')) { |
| s = document.createElement("style"); |
| s.className = "EVALDOTJSSTYLETHING"; |
| s.innerHTML = ` |
| evalcontainer { |
| display: block; |
| position: fixed; |
| width: 500px; |
| height: 350px; |
| background: rgba(0,0,0,0.8); |
| top: 0; |
| left: 0; |
| right: 0; |
| margin: 50px auto; |
| font-size: 0; |
| z-index: 100000; |
| } |
| evalcontainer > textarea.EVALTEXTAREA { |
| width: 500px; |
| border: none; |
| box-sizing: border-box; |
| font-family: monospace; |
| font-size: 12px; |
| height: 200px; |
| padding: 5px; |
| resize: none; |
| position: absolute; |
| bottom: 0; |
| background: rgba(0,0,0,0.8); |
| color: white; |
| } |
| evalcontainer > evaloutput { |
| display: block; |
| width: 500px; |
| max-height: 150px; |
| font-size: 12px; |
| font-family: monospace; |
| overflow-y: auto; |
| color: white; |
| box-sizing: border-box; |
| padding: 5px; |
| position: absolute; |
| bottom: 200px; |
| } |
| evalcontainer > evaloutput > evaloutputentry { |
| display: block; |
| white-space: pre; |
| } |
| evalcontainer > evaloutput > evaloutputentry::before { |
| content: ">\\00a0"; |
| color: rgba(255,255,255,0.5); |
| } |
| evalcontainer > evaloutput > evaloutputentry.EVALRESULT { |
| border-bottom: 1px solid rgba(255,255,255,0.1); |
| } |
| evalcontainer > evaloutput > evaloutputentry.EVALRESULT::before { |
| content: "<\\00a0"; |
| font-style: normal; |
| } |
| evalcontainer > evaloutput > evaloutputentry.EVALWARN { |
| background: #FFEB3B; |
| color: black; |
| } |
| evalcontainer > evaloutput > evaloutputentry.EVALSTRING { |
| color: #FFEB3B; |
| } |
| evalcontainer > evaloutput > evaloutputentry.EVALNUMBER { |
| color: #2196F3; |
| } |
| evalcontainer > evaloutput > evaloutputentry.EVALFUNCTION { |
| font-style: italic; |
| } |
| evalcontainer > evaloutput > evaloutputentry.EVALUNDEFINED { |
| color: #9E9E9E; |
| } |
| evalcontainer > evaloutput > evaloutputentry.EVALERROR { |
| background: #f44336; |
| } |
| evalcontainer > evaloutput > evaloutputentry.EVALWARN.EVALSTRING { |
| color: black; |
| } |
| evalcontainer > evaloutput > evaloutputentry.EVALLOG::before { |
| content: ""; |
| } |
| .eval-close-button { |
| position: absolute; |
| top: 5px; |
| right: 10px; |
| font-size: 18px; |
| color: #fff; |
| cursor: pointer; |
| font-weight: bold; |
| } |
| `; |
| document.head.appendChild(s); |
| } |
|
|
| if (!document.querySelector('evalcontainer')) { |
| s = document.createElement("evalcontainer"); |
| var output = document.createElement("evaloutput"); |
| |
| |
| var closeButton = document.createElement("span"); |
| closeButton.innerHTML = "×"; |
| closeButton.className = "eval-close-button"; |
| closeButton.onclick = function() { |
| evaljs.close(); |
| }; |
| s.appendChild(closeButton); |
|
|
| function createOutputEntry(words) { |
| var t = document.createElement("evaloutputentry"); |
| t.innerHTML = words; |
| t.className = 'EVALLOG'; |
| output.appendChild(t); |
| } |
|
|
| createOutputEntry('To close this window, do evaljs.close();'); |
| createOutputEntry('To clear, do evaljs.clear();'); |
| s.appendChild(output); |
| |
| var textarea = document.createElement("textarea"); |
| textarea.className = 'EVALTEXTAREA'; |
| textarea.focus(); |
| textarea.onkeypress = e => { |
| if (e.keyCode === 13 && !e.shiftKey) { |
| var t = document.createElement("evaloutputentry"), |
| evaloutput; |
| t.textContent = textarea.value; |
| output.appendChild(t); |
| t = document.createElement("evaloutputentry"); |
| t.classList.add('EVALRESULT'); |
| try { |
| evaloutput = eval(textarea.value); |
| switch (typeof evaloutput) { |
| case 'object': |
| evaloutput = JSON.stringify(evaloutput); |
| t.classList.add('EVALFUNCTION'); |
| break; |
| case 'string': |
| evaloutput = `"${evaloutput}"`; |
| t.classList.add('EVALSTRING'); |
| break; |
| case 'number': |
| case 'boolean': |
| t.classList.add('EVALNUMBER'); |
| break; |
| case 'function': |
| evaloutput = evaloutput.toString(); |
| t.classList.add('EVALFUNCTION'); |
| break; |
| case 'undefined': |
| t.classList.add('EVALUNDEFINED'); |
| break; |
| case 'symbol': |
| evaloutput = evaloutput.toString(); |
| t.classList.add('EVALSTRING'); |
| break; |
| } |
| } catch(e) { |
| evaloutput = e; |
| t.classList.add('EVALERROR'); |
| } |
| t.textContent = evaloutput + ''; |
| output.appendChild(t); |
| output.scrollTop = output.scrollHeight; |
| textarea.value = ''; |
| e.preventDefault(); |
| return false; |
| } |
| }; |
| s.appendChild(textarea); |
| document.body.appendChild(s); |
| evaljs = { |
| window: s, |
| clear() { |
| while (output.hasChildNodes()) output.removeChild(output.lastChild); |
| }, |
| close() { |
| document.body.removeChild(this.window); |
| } |
| }; |
|
|
| function merp(u, t) { |
| switch (typeof u) { |
| case 'object': |
| u = JSON.stringify(u); |
| t.classList.add('EVALFUNCTION'); |
| break; |
| case 'string': |
| u = `"${u}"`; |
| t.classList.add('EVALSTRING'); |
| break; |
| case 'number': |
| case 'boolean': |
| t.classList.add('EVALNUMBER'); |
| break; |
| case 'function': |
| u = u.toString(); |
| t.classList.add('EVALFUNCTION'); |
| break; |
| case 'undefined': |
| t.classList.add('EVALUNDEFINED'); |
| break; |
| case 'symbol': |
| u = u.toString(); |
| t.classList.add('EVALSTRING'); |
| break; |
| } |
| return u; |
| } |
|
|
| console.log = function() { |
| for (var i = 0; i < arguments.length; i++) { |
| var t = document.createElement("evaloutputentry"), u = arguments[i]; |
| t.classList.add('EVALLOG'); |
| u = merp(u, t); |
| t.textContent = (u + '').replace(/\s/g, '\\u00a0'); |
| output.appendChild(t); |
| } |
| }; |
|
|
| console.warn = function() { |
| for (var i = 0; i < arguments.length; i++) { |
| var t = document.createElement("evaloutputentry"), u = arguments[i]; |
| t.classList.add('EVALLOG'); |
| t.classList.add('EVALWARN'); |
| u = merp(u, t); |
| t.textContent = (u + '').replace(/\s/g, '\\u00a0'); |
| output.appendChild(t); |
| } |
| }; |
|
|
| console.error = function() { |
| for (var i = 0; i < arguments.length; i++) { |
| var t = document.createElement("evaloutputentry"), u = arguments[i]; |
| t.classList.add('EVALLOG'); |
| t.classList.add('EVALERROR'); |
| u = merp(u, t); |
| t.textContent = (u + '').replace(/\s/g, '\\u00a0'); |
| output.appendChild(t); |
| } |
| }; |
|
|
| |
| script.onload = function() { |
| interact('evalcontainer').draggable({ |
| modifiers: [ |
| interact.modifiers.restrictRect({ |
| restriction: 'parent', |
| endOnly: true |
| }) |
| ], |
| listeners: { |
| move(event) { |
| var target = event.target; |
| var x = (parseFloat(target.getAttribute('data-x')) || 0) + event.dx; |
| var y = (parseFloat(target.getAttribute('data-y')) || 0) + event.dy; |
| target.style.transform = `translate(${x}px, ${y}px)`; |
| target.setAttribute('data-x', x); |
| target.setAttribute('data-y', y); |
| } |
| } |
| }); |
| }; |
| } |
| }()); |
|
|