{"version":3,"sources":["app.js","chibi.js"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC1PA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","file":"all.js","sourcesContent":["function bool(x) {\n\treturn (x === 1 || x === '1' || x === true || x === 'true');\n}\n\n/** html entities */\nfunction e(x) {\n\treturn String(x)\n\t\t.replace(/&/g, '&')\n\t\t.replace(/\"/g, '"')\n\t\t.replace(/'/g, ''')\n\t\t.replace(//g, '>');\n}\n\n/** Returns true if argument is array [] */\nfunction isArray(obj) {\n\treturn Object.prototype.toString.call(obj) === '[object Array]';\n}\n\n/** Returns true if argument is object {} */\nfunction isObject(obj) {\n\treturn Object.prototype.toString.call(obj) === '[object Object]';\n}\n\n/** escape a string to have no special meaning in regex */\nfunction regexEscape(s) {\n\treturn s.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n}\n\n/** Convert RSSI 0-255 to % */\nfunction rssiPerc(rssi) {\n\tvar r = parseInt(rssi);\n\tif (r > -50) return 100; // 100%\n\tif (r < -100) return 0; // 0%\n\treturn Math.round(2 * (r + 100)); // approximation\n}\n\n/** Perform a substitution in the given string.\n *\n * Arguments - array or list of replacements.\n * Arguments numeric keys will replace {0}, {1} etc.\n * Named keys also work, ie. {foo: \"bar\"} -> replaces {foo} with bar.\n *\n * Braces are added to keys if missing.\n *\n * @returns {String} result\n */\nString.prototype.format = function () {\n\tvar out = this;\n\n\tvar repl = arguments;\n\n\tif (arguments.length == 1 && (isArray(arguments[0]) || isObject(arguments[0]))) {\n\t\trepl = arguments[0];\n\t}\n\n\tfor (var ph in repl) {\n\t\tif (repl.hasOwnProperty(ph)) {\n\t\t\tvar ph_orig = ph;\n\n\t\t\tif (!ph.match(/^\\{.*\\}$/)) {\n\t\t\t\tph = '{' + ph + '}';\n\t\t\t}\n\n\t\t\t// replace all occurrences\n\t\t\tvar pattern = new RegExp(regexEscape(ph), \"g\");\n\t\t\tout = out.replace(pattern, repl[ph_orig]);\n\t\t}\n\t}\n\n\treturn out;\n};\n\n/** Module for toggling a modal overlay */\nvar modal = (function () {\n\tvar modal = {};\n\n\tmodal.show = function (sel) {\n\t\tvar $m = $(sel);\n\t\t$m.removeClass('hidden visible');\n\t\tsetTimeout(function () {\n\t\t\t$m.addClass('visible');\n\t\t}, 1);\n\t};\n\n\tmodal.hide = function (sel) {\n\t\tvar $m = $(sel);\n\t\t$m.removeClass('visible');\n\t\tsetTimeout(function () {\n\t\t\t$m.addClass('hidden');\n\t\t}, 500); // transition time\n\t};\n\n\tmodal.init = function () {\n\t\t// close modal by click outside the dialog\n\t\t$('.Modal').on('click', function () {\n\t\t\tmodal.hide(this);\n\t\t});\n\n\t\t$('.Dialog').on('click', function (e) {\n\t\t\te.stopImmediatePropagation();\n\t\t});\n\n\t\t// Hide all modals on esc\n\t\t$(window).on('keydown', function (e) {\n\t\t\tif (e.which == 27) {\n\t\t\t\tmodal.hide('.Modal');\n\t\t\t}\n\t\t});\n\t};\n\n\treturn modal;\n})();\n\n\n/** Wifi page */\nvar wifi = (function () {\n\tvar wifi = {};\n\tvar authStr = ['Open', 'WEP', 'WPA', 'WPA2', 'WPA/WPA2'];\n\n\t/** Update display for received response */\n\tfunction onScan(resp, status) {\n\t\tif (status != 200) {\n\t\t\t// bad response\n\t\t\trescan(5000); // wait 5sm then retry\n\t\t\treturn;\n\t\t}\n\n\t\tresp = JSON.parse(resp);\n\n\t\tvar done = !bool(resp.result.inProgress) && (resp.result.APs.length > 0);\n\t\trescan(done ? 15000 : 1000);\n\t\tif (!done) return; // no redraw yet\n\n\t\t// clear the AP list\n\t\tvar $list = $('#ap-list');\n\t\t// remove old APs\n\t\t$('.AP').remove();\n\n\t\t$list.toggle(done);\n\t\t$('#ap-loader').toggle(!done);\n\n\t\t// scan done\n\t\tresp.result.APs\n\t\t\t.sort(function (a, b) {\n\t\t\t\treturn b.rssi - a.rssi\n\t\t\t})\n\t\t\t.forEach(function (ap) {\n\t\t\t\tap.enc = parseInt(ap.enc);\n\n\t\t\t\tif (ap.enc > 4) return; // hide unsupported auths\n\n\t\t\t\tvar item = document.createElement('div');\n\n\t\t\t\tvar $item = $(item)\n\t\t\t\t\t.data('ssid', ap.essid)\n\t\t\t\t\t.data('pwd', ap.enc != 0)\n\t\t\t\t\t.addClass('AP');\n\n\t\t\t\t// mark current SSID\n\t\t\t\tif (ap.essid == wifi.current) {\n\t\t\t\t\t$item.addClass('selected');\n\t\t\t\t}\n\n\t\t\t\tvar inner = document.createElement('div');\n\t\t\t\tvar $inner = $(inner).addClass('inner')\n\t\t\t\t\t.htmlAppend('