diff --git a/WebInquirer.html b/WebInquirer.html index e69de29..62a35df 100644 --- a/WebInquirer.html +++ b/WebInquirer.html @@ -0,0 +1,13 @@ + + + + inquirer Tester + + + + +
+
+ + + \ No newline at end of file diff --git a/inquirer.js b/inquirer.js index e69de29..225411c 100644 --- a/inquirer.js +++ b/inquirer.js @@ -0,0 +1,244 @@ +var inquirer = inquirer || new function () { + + var icon = "R0lGODlhIAAgAKECADIyMjMzM////////yH5BAEKAAIALAAAAAAgACAAAAJulI8Zke2PFoC0LlZzW7qf633XGGHeiJqcaKWgsQov5JLvTNeYq+kM36vBUJNgaujDiVDIpLK58ylIiiU0NjWVZscHgAuUUXPOpfbhjD1bwmFIrHsvv+3Qrd4Byzda7N7h9zclmEOIFmgolgj4VgAAOw=="; + + // Toolkit + var muTK = new function () { + var ui = { + w: {} + }; + + function desktop() { + if (!ui.dsk) { + ui.dsk = document.createElement("div"); + ui.dsk.style.position = "absolute"; + ui.dsk.style.zIndex = 510; + ui.dsk.style.top = 0; + ui.dsk.style.left = 0; + ui.dsk.style.width = "100%"; + ui.dsk.style.height = "100%"; + ui.bg = document.createElement("div"); + ui.bg.style.backgroundColor = "gray"; + ui.bg.style.opacity = 0.3; + ui.bg.style.position = "absolute"; + ui.bg.style.top = 0; + ui.bg.style.left = 0; + ui.bg.style.width = "100%"; + ui.bg.style.height = "100%"; + ui.dsk.appendChild(ui.bg); + ui.menu = document.createElement("div"); + ui.menu.style.position = "absolute"; + ui.menu.style.zIndex = 512; + ui.menu.style.top = 0; + ui.menu.style.left = 0; + ui.menu.style.width = "100%"; + ui.menu.style.height = "16px"; + ui.menu.style.padding = "1px 5px 1px 5px"; + ui.menu.style.backgroundColor = "white"; + ui.menu.style.borderBottom = "1px solid black"; + ui.menu.sysMenu = document.createElement("img"); + ui.menu.sysMenu.style.width = "16px"; + ui.menu.sysMenu.style.height = "16px"; + ui.menu.sysMenu.src = "data:image/gif;base64," + icon; + ui.menu.appendChild(ui.menu.sysMenu); + ui.dsk.appendChild(ui.menu); + } + if (!document.body.contains(ui.dsk)) + document.body.appendChild(ui.dsk); + } + + function close() { + if (document.body.contains(ui.dsk)) + document.body.removeChild(ui.dsk); + } + + function control(id, def) { + var c = document.createElement("div"); + c._id = id; + c.style.position = "absolute"; + c.setTop = function (val) { + def.top = val; + this.style.top = val + "px"; + } + c.setLeft = function (val) { + def.left = val; + this.style.left = val + "px"; + } + c.setWidth = function (val) { + def.width = val; + this.style.width = val + "px"; + } + c.setHeight = function (val) { + def.height = val; + this.style.height = val + "px"; + } + if (def.top) + c.setTop(def.top); + if (def.left) + c.setLeft(def.left); + if (def.width) + c.setWidth(def.width); + if (def.height) + c.setHeight(def.height); + if (def.content) + for (var i = 0; i < def.content.length; i++) + c.appendChild(def.content[i]); + return c; + } + + function window(id, def) { + if (def.top == undefined) + def.top = (ui.dsk.clientHeight - def.height) / 2; + if (def.left == undefined) + def.left = (ui.dsk.clientWidth - def.width) / 2; + var wt = document.createElement("div"); + wt.style.borderBottom = "1px solid black"; + wt.style.textAlign = "center"; + wt.style.lineHeight = "20px"; + wt.innerText = def.title; + if (!def.content) + def.content = []; + def.content.splice(0, 0, wt); + var w = control(id, def); + w.style.backgroundColor = def.bg == undefined ? "white" : def.bg; + w.style.border = "1px solid black"; + w.style.boxShadow = "0 0 5px gray"; + ui.dsk.appendChild(w); + ui.w[id] = w; + return w; + } + + function label(id, def) { + var c = control(id, def); + c.setText = function (text) { + this.innerText = text; + } + c.setText(def.text); + return c; + } + + function list(id, def) { + var c = control(id, def); + c.style.border = "1px solid red"; + return c; + } + + function get(id) { + return ui.w[id]; + } + + this.desktop = desktop; + this.close = close; + this.window = window; + this.get = get; + this.list = list; + this.label = list; + this.button = list; + } + + // Locals + + var formerOnError; + var inq = this; + + // Methods + + function show() { + muTK.desktop(); + var w = muTK.get("Werror"); + if (!w) { + w = muTK.window("Werror", { + title: "Error", + width: 400, + height: 200, + content: [muTK.label("Lerror", { + top: 30, + left: 10, + text: "---" + }), muTK.list("Lerrors", { + top: 80, + left: 10, + width: 320, + height: 100, + }), muTK.button("Bok", { + top: 80, + left: 10, + width: 320, + height: 100, + text: "Ok", + onClick: function () { + } + })] + }); + } + } + + function hide() { + muTK.close(); + } + + function error(message, data) { + if (this.autoShow) + show(); + } + + // Konami code controller + var ckc = (function (callback) { + var kc = [38, 38, 40, 40, 37, 39, 37, 39, 66, 65]; // Konami code + var kcindex = 0; + return function (e) { + if (e.keyCode == kc[kcindex]) + kcindex++; + else + kcindex = 0; + if (kcindex == kc.length) + callback(); + } + })(function () { + this.show(); + }.bind(this)); + + function hook() { + formerOnError = window.onerror; + window.onerror = function (message, source, lineno, colno, err) { + error.bind(inq)(message, { + "source": source, + "at": lineno + ":" + colno, + "error": err, + "raw": arguments + }); + formerOnError; + } + document.addEventListener("keydown", ckc, false); + } + + // Publish + /** Open Inquirer environment when a new unhandled error happen */ + this.autoShow = true; + + /** Hook the webpage to control errors (Automatically hooked) */ + this.hook = hook; + + /** Collect an error and if autoShow is true enters environment */ + this.error = error; + + /** Enters environment */ + this.show = show; + + /** Exit environent */ + this.hide = hide; + + /** Enters environment and open variable inspector */ + this.inspect = inspect; !! + + /** Enters environment and open inquirer console */ + this.console = console; !! + + /** Log an object into the console */ + this.log = log; !! + + // Hook to system + + hook(); + +} ();