From 5eea2d67f3dbbaa4c25af5e63bb822e597255b0b Mon Sep 17 00:00:00 2001 From: Steve Nyemba Date: Sat, 19 Jul 2025 13:17:57 -0500 Subject: [PATCH] bug fix: new features, code generation --- requirements.txt | 2 +- www/html/_assets/css/prism.css | 255 ++++ www/html/_assets/css/studio.css | 8 + www/html/_assets/images/sql.png | Bin 0 -> 41501 bytes www/html/_assets/js/prism.js | 2293 +++++++++++++++++++++++++++++++ www/html/_assets/js/studio.js | 33 +- www/html/_plugins/demo.py | 18 +- www/html/_plugins/io.py | 16 + www/html/about.html | 5 +- www/html/index.html | 3 + www/html/menu.html | 2 +- www/html/sheet.html | 109 +- 12 files changed, 2671 insertions(+), 73 deletions(-) create mode 100644 www/html/_assets/css/prism.css create mode 100644 www/html/_assets/images/sql.png create mode 100644 www/html/_assets/js/prism.js 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 0000000000000000000000000000000000000000..0a07eaf5fa7652153da19128b106e1fcebd5fbd8 GIT binary patch literal 41501 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

-{gW3h<>&A!f%sT!0KxBxjS3mYPIFLn|`k`Ct-q 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 literal 0 HcmV?d00001 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