diff --git a/requirements.txt b/requirements.txt index 75c4401..af1be70 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,2 +1,2 @@ xlsxwriter -openpyxl \ No newline at end of file +openpyxl diff --git a/www/html/_assets/css/prism.css b/www/html/_assets/css/prism.css new file mode 100644 index 0000000..2c25402 --- /dev/null +++ b/www/html/_assets/css/prism.css @@ -0,0 +1,255 @@ +/* PrismJS 1.30.0 +https://prismjs.com/download#themes=prism&languages=clike+javascript+mongodb+nasm+python+sql&plugins=line-highlight+line-numbers */ +/** + * prism.js default theme for JavaScript, CSS and HTML + * Based on dabblet (http://dabblet.com) + * @author Lea Verou + */ + +code[class*="language-"], +pre[class*="language-"] { + color: black; + background: none; + text-shadow: 0 1px white; + font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; + font-size: 1em; + text-align: left; + white-space: pre; + word-spacing: normal; + word-break: normal; + word-wrap: normal; + line-height: 1.5; + + -moz-tab-size: 4; + -o-tab-size: 4; + tab-size: 4; + + -webkit-hyphens: none; + -moz-hyphens: none; + -ms-hyphens: none; + hyphens: none; +} + +pre[class*="language-"]::-moz-selection, pre[class*="language-"] ::-moz-selection, +code[class*="language-"]::-moz-selection, code[class*="language-"] ::-moz-selection { + text-shadow: none; + background: #b3d4fc; +} + +pre[class*="language-"]::selection, pre[class*="language-"] ::selection, +code[class*="language-"]::selection, code[class*="language-"] ::selection { + text-shadow: none; + background: #b3d4fc; +} + +@media print { + code[class*="language-"], + pre[class*="language-"] { + text-shadow: none; + } +} + +/* Code blocks */ +pre[class*="language-"] { + padding: 1em; + margin: .5em 0; + overflow: auto; +} + +:not(pre) > code[class*="language-"], +pre[class*="language-"] { + background: #f5f2f0; +} + +/* Inline code */ +:not(pre) > code[class*="language-"] { + padding: .1em; + border-radius: .3em; + white-space: normal; +} + +.token.comment, +.token.prolog, +.token.doctype, +.token.cdata { + color: slategray; +} + +.token.punctuation { + color: #999; +} + +.token.namespace { + opacity: .7; +} + +.token.property, +.token.tag, +.token.boolean, +.token.number, +.token.constant, +.token.symbol, +.token.deleted { + color: #905; +} + +.token.selector, +.token.attr-name, +.token.string, +.token.char, +.token.builtin, +.token.inserted { + color: #690; +} + +.token.operator, +.token.entity, +.token.url, +.language-css .token.string, +.style .token.string { + color: #9a6e3a; + /* This background color was intended by the author of this theme. */ + background: hsla(0, 0%, 100%, .5); +} + +.token.atrule, +.token.attr-value, +.token.keyword { + color: #07a; +} + +.token.function, +.token.class-name { + color: #DD4A68; +} + +.token.regex, +.token.important, +.token.variable { + color: #e90; +} + +.token.important, +.token.bold { + font-weight: bold; +} +.token.italic { + font-style: italic; +} + +.token.entity { + cursor: help; +} + +pre[data-line] { + position: relative; + padding: 1em 0 1em 3em; +} + +.line-highlight { + position: absolute; + left: 0; + right: 0; + padding: inherit 0; + margin-top: 1em; /* Same as .prism’s padding-top */ + + background: hsla(24, 20%, 50%,.08); + background: linear-gradient(to right, hsla(24, 20%, 50%,.1) 70%, hsla(24, 20%, 50%,0)); + + pointer-events: none; + + line-height: inherit; + white-space: pre; +} + +@media print { + .line-highlight { + /* + * This will prevent browsers from replacing the background color with white. + * It's necessary because the element is layered on top of the displayed code. + */ + -webkit-print-color-adjust: exact; + color-adjust: exact; + } +} + + .line-highlight:before, + .line-highlight[data-end]:after { + content: attr(data-start); + position: absolute; + top: .4em; + left: .6em; + min-width: 1em; + padding: 0 .5em; + background-color: hsla(24, 20%, 50%,.4); + color: hsl(24, 20%, 95%); + font: bold 65%/1.5 sans-serif; + text-align: center; + vertical-align: .3em; + border-radius: 999px; + text-shadow: none; + box-shadow: 0 1px white; + } + + .line-highlight[data-end]:after { + content: attr(data-end); + top: auto; + bottom: .4em; + } + +.line-numbers .line-highlight:before, +.line-numbers .line-highlight:after { + content: none; +} + +pre[id].linkable-line-numbers span.line-numbers-rows { + pointer-events: all; +} +pre[id].linkable-line-numbers span.line-numbers-rows > span:before { + cursor: pointer; +} +pre[id].linkable-line-numbers span.line-numbers-rows > span:hover:before { + background-color: rgba(128, 128, 128, .2); +} + +pre[class*="language-"].line-numbers { + position: relative; + padding-left: 3.8em; + counter-reset: linenumber; +} + +pre[class*="language-"].line-numbers > code { + position: relative; + white-space: inherit; +} + +.line-numbers .line-numbers-rows { + position: absolute; + pointer-events: none; + top: 0; + font-size: 100%; + left: -3.8em; + width: 3em; /* works for line-numbers below 1000 lines */ + letter-spacing: -1px; + border-right: 1px solid #999; + + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + +} + + .line-numbers-rows > span { + display: block; + counter-increment: linenumber; + } + + .line-numbers-rows > span:before { + content: counter(linenumber); + color: #999; + display: block; + padding-right: 0.8em; + text-align: right; + } + diff --git a/www/html/_assets/css/studio.css b/www/html/_assets/css/studio.css index ccd502c..7fd10e7 100644 --- a/www/html/_assets/css/studio.css +++ b/www/html/_assets/css/studio.css @@ -39,6 +39,14 @@ border-color:transparent; font-family: courier; padding:8px; line-height: 1.5; background-color: #f3f3f3; + + /** ------------------ **/ + font-family: monospace; + white-space: pre; /* Ensures whitespace is rendered correctly */ + word-wrap: normal; /* Prevents wrapping */ + overflow: auto; /* Adds scrollbars if needed */ + + /* Add more styles as needed */ /* height:350px; */ } diff --git a/www/html/_assets/images/sql.png b/www/html/_assets/images/sql.png new file mode 100644 index 0000000..0a07eaf Binary files /dev/null and b/www/html/_assets/images/sql.png differ diff --git a/www/html/_assets/js/prism.js b/www/html/_assets/js/prism.js new file mode 100644 index 0000000..1feb61c --- /dev/null +++ b/www/html/_assets/js/prism.js @@ -0,0 +1,2293 @@ +/* PrismJS 1.30.0 +https://prismjs.com/download#themes=prism&languages=clike+javascript+mongodb+nasm+python+sql&plugins=line-highlight+line-numbers */ +/// + +var _self = (typeof window !== 'undefined') + ? window // if in browser + : ( + (typeof WorkerGlobalScope !== 'undefined' && self instanceof WorkerGlobalScope) + ? self // if in worker + : {} // if in node js + ); + +/** + * Prism: Lightweight, robust, elegant syntax highlighting + * + * @license MIT + * @author Lea Verou + * @namespace + * @public + */ +var Prism = (function (_self) { + + // Private helper vars + var lang = /(?:^|\s)lang(?:uage)?-([\w-]+)(?=\s|$)/i; + var uniqueId = 0; + + // The grammar object for plaintext + var plainTextGrammar = {}; + + + var _ = { + /** + * By default, Prism will attempt to highlight all code elements (by calling {@link Prism.highlightAll}) on the + * current page after the page finished loading. This might be a problem if e.g. you wanted to asynchronously load + * additional languages or plugins yourself. + * + * By setting this value to `true`, Prism will not automatically highlight all code elements on the page. + * + * You obviously have to change this value before the automatic highlighting started. To do this, you can add an + * empty Prism object into the global scope before loading the Prism script like this: + * + * ```js + * window.Prism = window.Prism || {}; + * Prism.manual = true; + * // add a new @@ -119,5 +121,6 @@ $(document).ready(()=>{ - + + \ No newline at end of file diff --git a/www/html/index.html b/www/html/index.html index efebf73..e1023af 100644 --- a/www/html/index.html +++ b/www/html/index.html @@ -30,6 +30,9 @@ + + + - - - - - - - - const spreadsheet = jspreadsheet(document.getElementById('spreadsheet'), { - data, - columns: [ - { type: 'text', title: 'Year', width: 100 }, - { type: 'numeric', title: 'Sales', width: 100 }, - ] - }); - function renderChart() { - const sheetData = spreadsheet.getData(); - const labels = sheetData.slice(1).map(row => row[0]); - const values = sheetData.slice(1).map(row => parseFloat(row[1])); +
- const ctx = document.getElementById('chartCanvas').getContext('2d'); +
+ + + +
+    
+"""
+install data-transport
+pip install data-transport[all]@git+https://github.com/lnyemba/data-transport
+"""
+import transport
+import pandas as pd
 
-    // Clear previous chart instance if any
-    if (window.myChart) window.myChart.destroy();
+# data-transport instance to read data
+#
+reader = transport.get.reader(label=':label')
+_args = :_query
 
-    window.myChart = new Chart(ctx, {
-      type: 'bar', // or 'line', 'pie', etc.
-      data: {
-        labels,
-        datasets: [{
-          label: 'Sales',
-          data: values,
-          backgroundColor: 'rgba(75, 192, 192, 0.5)',
-          borderColor: 'rgba(75, 192, 192, 1)',
-          borderWidth: 1
-        }]
-      },
-      options: {
-        responsive: true,
-        scales: {
-          y: {
-            beginAtZero: true
-          }
-        }
-      }
-    });
-  }
-
-
+# reading the query from ":label" into a pandas data-frame +_df = reader.read(**_args) +print(_df.head()) +
+
+
+
\ No newline at end of file