Chandra
view release on metacpan or search on metacpan
include/chandra/chandra_devtools.h view on Meta::CPAN
/*
* chandra_devtools.h - DevTools JS constant and helpers
* Included from Chandra.xs
*/
#ifndef CHANDRA_DEVTOOLS_H
#define CHANDRA_DEVTOOLS_H
static const char Chandra__DevTools__js_code_str[] =
"(function() {\n"
" if (window.__chandraDevTools) return;\n"
"\n"
" var dt = window.__chandraDevTools = {\n"
" visible: false,\n"
" errors: [],\n"
" panel: null,\n"
" currentTab: 'console',\n"
"\n"
" init: function() {\n"
" this.panel = document.createElement('div');\n"
" this.panel.id = '__chandra-devtools';\n"
" this.panel.style.cssText = 'position:fixed;bottom:0;left:0;right:0;height:250px;' +\n"
" 'background:#1e1e2e;color:#cdd6f4;font-family:monospace;font-size:12px;' +\n"
" 'border-top:2px solid #89b4fa;z-index:999999;display:none;overflow:hidden;';\n"
"\n"
" var header = document.createElement('div');\n"
" header.style.cssText = 'display:flex;align-items:center;padding:4px 8px;' +\n"
" 'background:#313244;border-bottom:1px solid #45475a;';\n"
"\n"
" var title = document.createElement('span');\n"
" title.style.cssText = 'flex:1;font-weight:bold;color:#89b4fa;';\n"
" title.textContent = 'Chandra DevTools';\n"
" header.appendChild(title);\n"
"\n"
" var tabs = ['Console', 'Bindings', 'Elements'];\n"
" var self = this;\n"
" tabs.forEach(function(tab) {\n"
" var btn = document.createElement('button');\n"
" btn.textContent = tab;\n"
" btn.className = '__cdt-tab';\n"
" btn.setAttribute('data-tab', tab.toLowerCase());\n"
" btn.style.cssText = 'background:none;border:1px solid #45475a;color:#cdd6f4;' +\n"
" 'padding:2px 8px;margin:0 2px;cursor:pointer;border-radius:3px;font-size:11px;';\n"
" btn.onclick = function() { self.showTab(tab.toLowerCase()); };\n"
" header.appendChild(btn);\n"
" });\n"
"\n"
" var reloadBtn = document.createElement('button');\n"
" reloadBtn.textContent = '\\u27F3 Reload';\n"
" reloadBtn.style.cssText = 'background:none;border:1px solid #45475a;color:#a6e3a1;' +\n"
" 'padding:2px 8px;margin:0 2px;cursor:pointer;border-radius:3px;font-size:11px;';\n"
" reloadBtn.onclick = function() {\n"
" if (window.chandra) window.chandra.invoke('__devtools_reload', []);\n"
" };\n"
" header.appendChild(reloadBtn);\n"
"\n"
" var clearBtn = document.createElement('button');\n"
" clearBtn.textContent = '\\u2718 Clear';\n"
" clearBtn.style.cssText = 'background:none;border:1px solid #45475a;color:#f9e2af;' +\n"
" 'padding:2px 8px;margin:0 2px;cursor:pointer;border-radius:3px;font-size:11px;';\n"
" clearBtn.onclick = function() { self.clearConsole(); };\n"
" header.appendChild(clearBtn);\n"
"\n"
" var closeBtn = document.createElement('button');\n"
" closeBtn.textContent = '\\u2715';\n"
" closeBtn.style.cssText = 'background:none;border:none;color:#f38ba8;padding:2px 6px;' +\n"
" 'cursor:pointer;font-size:14px;margin-left:4px;';\n"
" closeBtn.onclick = function() { self.toggle(); };\n"
" header.appendChild(closeBtn);\n"
"\n"
" this.panel.appendChild(header);\n"
"\n"
" this.content = document.createElement('div');\n"
" this.content.style.cssText = 'height:calc(100% - 30px);overflow-y:auto;padding:8px;';\n"
" this.panel.appendChild(this.content);\n"
"\n"
" document.body.appendChild(this.panel);\n"
"\n"
" document.addEventListener('keydown', function(e) {\n"
" if (e.key === 'F12' || (e.ctrlKey && e.shiftKey && e.key === 'I')) {\n"
" e.preventDefault();\n"
" self.toggle();\n"
" }\n"
" });\n"
"\n"
" var origError = console.error;\n"
" console.error = function() {\n"
" origError.apply(console, arguments);\n"
" var msg = Array.prototype.slice.call(arguments).join(' ');\n"
" self.addError(msg);\n"
" };\n"
"\n"
" window.addEventListener('error', function(e) {\n"
" self.addError(e.message + ' at ' + e.filename + ':' + e.lineno);\n"
" });\n"
"\n"
" this.showTab('console');\n"
" },\n"
"\n"
" toggle: function() {\n"
" this.visible = !this.visible;\n"
" this.panel.style.display = this.visible ? 'block' : 'none';\n"
" },\n"
"\n"
" show: function() {\n"
" this.visible = true;\n"
" this.panel.style.display = 'block';\n"
" },\n"
"\n"
" hide: function() {\n"
" this.visible = false;\n"
" this.panel.style.display = 'none';\n"
" },\n"
"\n"
" addError: function(msg) {\n"
" this.errors.push({ time: new Date().toLocaleTimeString(), message: msg, level: 'error' });\n"
" if (this.currentTab === 'console') this.showTab('console');\n"
" },\n"
"\n"
" addLog: function(level, msg) {\n"
" this.errors.push({ time: new Date().toLocaleTimeString(), message: msg, level: level });\n"
" if (this.currentTab === 'console') this.showTab('console');\n"
" },\n"
"\n"
" showTab: function(tab) {\n"
" this.currentTab = tab;\n"
" var html = '';\n"
( run in 1.290 second using v1.01-cache-2.11-cpan-140bd7fdf52 )