From 13871be80bfd77f186ec65917b6b7cf66671ee44 Mon Sep 17 00:00:00 2001 From: Andy Bunce Date: Sat, 1 Nov 2025 16:31:29 +0000 Subject: [PATCH 1/2] [mod] css --- package-lock.json | 35 ++++++++++++------- package.json | 1 + test/ast.xq | 10 +++--- test/symbols.xq | 1 + webapp/static/clients/codemirror/grail.css | 1 + webapp/static/clients/codemirror/grail.html | 22 ++++++------ .../static/clients/codemirror/wc-qd-list.js | 2 +- 7 files changed, 43 insertions(+), 29 deletions(-) diff --git a/package-lock.json b/package-lock.json index fdddabe..06b1131 100644 --- a/package-lock.json +++ b/package-lock.json @@ -16,6 +16,7 @@ "@codemirror/search": "^6.5.11", "@codemirror/theme-one-dark": "^6.1.3", "@codemirror/view": "^6.38.6", + "@quietui/quiet-browser": "^1.6.1", "@replit/codemirror-minimap": "^0.5.2", "@zenfs/core": "^2.4.2", "@zenfs/dom": "^1.2.5", @@ -696,6 +697,16 @@ "integrity": "sha512-0FCeqG6WvK4/Cc06F/xXMd/pv4FeisI0c1tUpBbfhA2n9Y8eZEv4Karjbmf2ZqQCPUWMrGp8A571tCjizxoTiQ==", "license": "Apache-2.0" }, + "node_modules/@quietui/quiet-browser": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@quietui/quiet-browser/-/quiet-browser-1.6.1.tgz", + "integrity": "sha512-t398SI83bVmIuM6rQZTfQkMop8lMGdPmcSPhd6AUg2tpBVorQXUNTTQnFotevAHKU5kXch9amTKNnW44GBcUaw==", + "license": "MIT", + "funding": { + "type": "individual", + "url": "https://github.com/sponsors/quietui" + } + }, "node_modules/@replit/codemirror-minimap": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/@replit/codemirror-minimap/-/codemirror-minimap-0.5.2.tgz", @@ -1104,9 +1115,9 @@ "license": "MIT" }, "node_modules/@types/node": { - "version": "24.9.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-24.9.1.tgz", - "integrity": "sha512-QoiaXANRkSXK6p0Duvt56W208du4P9Uye9hWLWgGMDTEoKPhuenzNcC4vGUmrNkiOKTlIrBoyNQYNpSwfEZXSg==", + "version": "24.9.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-24.9.2.tgz", + "integrity": "sha512-uWN8YqxXxqFMX2RqGOrumsKeti4LlmIMIyV0lgut4jx7KQBcBiW6vkDtIBvHnHIquwNfJhk8v2OtmO8zXWHfPA==", "license": "MIT", "dependencies": { "undici-types": "~7.16.0" @@ -1549,9 +1560,9 @@ "license": "MIT" }, "node_modules/kerium": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/kerium/-/kerium-1.3.7.tgz", - "integrity": "sha512-3pFGohBrDeGkxBvRJ1FKrkN6HpiLAvHRZ4rk5zZUExzslgDZm/iijDRKXTHHJpyHQaBlOFxVnpqYp76u5qmQSg==", + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/kerium/-/kerium-1.3.8.tgz", + "integrity": "sha512-tOtOOsTZ85Wt4h8TwV4ItgTi6paj2U1buOC/v9Rdon0ndtqASm5fn/rBRfEsif1czW4+u73T7XPbQAIBUF4tzg==", "license": "MIT", "dependencies": { "utilium": "^2.0.0" @@ -1622,9 +1633,9 @@ } }, "node_modules/memium": { - "version": "0.3.10", - "resolved": "https://registry.npmjs.org/memium/-/memium-0.3.10.tgz", - "integrity": "sha512-7LdicWe1tGBLrstNXdcH1Wh2iiAC4u8eU/iGuBvoVAkG20qU2d8bQk3/y40FIrM6mk5N+hpiqFI7PmOlR1hNOg==", + "version": "0.3.11", + "resolved": "https://registry.npmjs.org/memium/-/memium-0.3.11.tgz", + "integrity": "sha512-CwmIpLVSG7UToDj2sYAZFDkpco30OPsXpaCnt+7Z7JQaulCjH5UvwJIctTIHmgQdFqk8pliBsPLnH5OZcDLZyQ==", "license": "LGPL-3.0-or-later", "dependencies": { "kerium": "^1.3.2", @@ -2047,9 +2058,9 @@ "license": "MIT" }, "node_modules/utilium": { - "version": "2.5.7", - "resolved": "https://registry.npmjs.org/utilium/-/utilium-2.5.7.tgz", - "integrity": "sha512-8F/HW+6g4v6k3yYR1bhSG+OVnoxjbuZeelLa4IyyNdwFaqGj8HpxKdOQf07xmB2jWIuUs1sq2wXcsqiERRWvEA==", + "version": "2.5.8", + "resolved": "https://registry.npmjs.org/utilium/-/utilium-2.5.8.tgz", + "integrity": "sha512-RNXAYoYH7hefayCW/2LU3SYCwDGQlDc8f4gPCRbMO6dJsYGGlzAhyHqYQGp73ox41JtPKjdqzddAbDhWQ9MrXQ==", "license": "LGPL-3.0-or-later", "dependencies": { "eventemitter3": "^5.0.1" diff --git a/package.json b/package.json index 6de37d8..3e6b727 100644 --- a/package.json +++ b/package.json @@ -11,6 +11,7 @@ "@codemirror/search": "^6.5.11", "@codemirror/theme-one-dark": "^6.1.3", "@codemirror/view": "^6.38.6", + "@quietui/quiet-browser": "^1.6.1", "@replit/codemirror-minimap": "^0.5.2", "@zenfs/core": "^2.4.2", "@zenfs/dom": "^1.2.5", diff --git a/test/ast.xq b/test/ast.xq index 2a27a27..35035d0 100644 --- a/test/ast.xq +++ b/test/ast.xq @@ -3,18 +3,18 @@ import module namespace ast="lsp/ast" at "../webapp/lsp/ast/ast.xqm"; (: declare variable $file:="sample.docs/pdfbox.xqm"; :) declare variable $file:="sample.docs/simple.xq"; -declare variable $A:=doc("sample.docs/parse-pdfbox.xml"); +declare variable $A:="sample.docs/pdfbox.xqm"; -unparsed-text($file) +unparsed-text($A) -=>ast:build() +=>ast:build({"flatten":true(),"position":true()}) -update{ +(: update{ for $e in descendant-or-self::element() let $len:=string-length($e) let $before:=$e/preceding-sibling::node()/string-length()=>sum() return (insert node attribute len { $len } into $e, insert node attribute before { $before } into $e ) -} +} :) diff --git a/test/symbols.xq b/test/symbols.xq index d82ffde..ccaa79d 100644 --- a/test/symbols.xq +++ b/test/symbols.xq @@ -4,3 +4,4 @@ declare variable $parse:=doc($src)/*; syms:list($parse,string($parse )) + diff --git a/webapp/static/clients/codemirror/grail.css b/webapp/static/clients/codemirror/grail.css index 34ec940..7982e1f 100644 --- a/webapp/static/clients/codemirror/grail.css +++ b/webapp/static/clients/codemirror/grail.css @@ -4,6 +4,7 @@ color-scheme: light dark; --quiet-primary-seed: #e98d61; --quiet-content-spacing: 0.75rem; + --quiet-form-control-height-md:0.9rem; } * { diff --git a/webapp/static/clients/codemirror/grail.html b/webapp/static/clients/codemirror/grail.html index 6527a65..b7feb00 100644 --- a/webapp/static/clients/codemirror/grail.html +++ b/webapp/static/clients/codemirror/grail.html @@ -33,17 +33,17 @@ - - - Editor - - - LSP Manager - - - Dba - - + + + Editor + + + LSP Manager + + + Dba + + diff --git a/webapp/static/clients/codemirror/wc-qd-list.js b/webapp/static/clients/codemirror/wc-qd-list.js index 403b12a..db7627d 100644 --- a/webapp/static/clients/codemirror/wc-qd-list.js +++ b/webapp/static/clients/codemirror/wc-qd-list.js @@ -183,7 +183,7 @@ class PanelComponent extends HTMLElement { style.textContent = ` @import url("../codicon@0.0.40/codicon.css"); ul { list-style-type: none; padding:0;margin:0; - background-color: #f8f9fa;font-size: 80%;} + background-color: #e3e4e4ff;font-size: 80%;} li { padding: 0 0 0 2px; border-bottom: 1px solid #ccc; cursor: pointer; width:100%; } li:not(.selected) :hover { background-color: #ccc; } .selected { background-color: #0d6efd;color: #ffff;} From 13ad78853df5794571a6b9ed5de95602acfc6102 Mon Sep 17 00:00:00 2001 From: Andy Bunce Date: Sat, 1 Nov 2025 22:53:55 +0000 Subject: [PATCH 2/2] mod] [popover --- webapp/static/clients/codemirror/grail.css | 3 +- webapp/static/clients/codemirror/grail.html | 114 +++++++++++------- webapp/static/clients/codemirror/script.js | 24 ++-- .../static/clients/codemirror/wc-qd-list.js | 2 +- 4 files changed, 86 insertions(+), 57 deletions(-) diff --git a/webapp/static/clients/codemirror/grail.css b/webapp/static/clients/codemirror/grail.css index 7982e1f..c60d9f3 100644 --- a/webapp/static/clients/codemirror/grail.css +++ b/webapp/static/clients/codemirror/grail.css @@ -30,7 +30,7 @@ form header { .page-wrap { background: white; height: calc(100vh - 10px); - box-shadow: 0 0 3px rgba(black, 0.33); + display: grid; grid-template-columns: minmax(10px, 1fr) minmax(10px, 4fr); @@ -98,6 +98,7 @@ form header { grid-column: 1 / -1; display: flex; justify-content: space-between; + background: #ffecb3; } .page-sidebar { diff --git a/webapp/static/clients/codemirror/grail.html b/webapp/static/clients/codemirror/grail.html index b7feb00..199c393 100644 --- a/webapp/static/clients/codemirror/grail.html +++ b/webapp/static/clients/codemirror/grail.html @@ -33,10 +33,46 @@ + + + New + + + + Open + + + + Web + + URL + + + + + + + + + + + + + + + + + - - Editor - LSP Manager @@ -44,31 +80,6 @@ Dba - - - - - - - - - - - - - - - - @@ -80,47 +91,41 @@ - + - - - - - - - - - - - - - @@ -199,9 +204,28 @@ + +
+ + + + + + + + Fetch + Cancel + +
+ +
+ + +
Connect to LSP diff --git a/webapp/static/clients/codemirror/script.js b/webapp/static/clients/codemirror/script.js index 823a7ae..feaf037 100644 --- a/webapp/static/clients/codemirror/script.js +++ b/webapp/static/clients/codemirror/script.js @@ -39,9 +39,13 @@ window.addEventListener('beforeunload', () => { $("connect").onclick = e => { e.preventDefault(); connect() }; -$("symTrigger").onclick = e => { e.preventDefault(); }; -$("symOptions").onclick = e => { e.preventDefault(); }; -$("bnNew").onclick = e => { alert("TODO"); }; +$("symTrigger").onclick = e => { e.preventDefault(); }; +$("symOptions").onclick = e => { e.preventDefault(); }; +$("bnNew").onclick = e => { + let name = prompt("New file name?"); + if (name === null) return; + alert("TODO") +}; $("search").onclick = e => lsp.openSearchPanel(view); @@ -76,13 +80,13 @@ $("cmdList").onclick = e => { }; $("symList").addEventListener("itemSelected", e => { - const plugin=lsp.LSPPlugin.get(view) - if(!plugin) return; + const plugin = lsp.LSPPlugin.get(view) + if (!plugin) return; const sel = e.detail.range // or selectionRange; console.log("SYM selection range", sel); const an = plugin.fromPosition(sel.start) const hd = plugin.fromPosition(sel.end) - view.dispatch({ selection: { anchor: an, head: hd}, scrollIntoView: true }); + view.dispatch({ selection: { anchor: an, head: hd }, scrollIntoView: true }); }); $("lint").onclick = async e => { @@ -129,7 +133,7 @@ $("load").onchange = e => { $("tConnect").addEventListener('quiet-change', e => { e.preventDefault(); $("popConnect").showPopover() - }); +}); $("msgIcon").onclick = e => { e.preventDefault(); alert("NOT YET") @@ -158,13 +162,13 @@ function connect() { const file = $("iFile").value; lsp.simpleWebSocketTransport(server) .then(transport => { - transport.socket.onclose = (event) => $("tConnect").checked=false; + transport.socket.onclose = (event) => $("tConnect").checked = false; transport.socket.oneror = (event) => $("msg").innerText = "sock error!"; transport.subscribe(incoming); client = new lsp.LSPClient({ extensions: lsp.languageServerExtensions() }); client.connect(transport); $("popConnect").hidePopover(); - $("tConnect").checked=true; + $("tConnect").checked = true; const extLsp = client.plugin(file, "xquery"); view.dispatch({ @@ -175,7 +179,7 @@ function connect() { }) .catch(e => { console.log(e); - $("tConnect").checked=false; + $("tConnect").checked = false; alert("connection failed: " + server) }); diff --git a/webapp/static/clients/codemirror/wc-qd-list.js b/webapp/static/clients/codemirror/wc-qd-list.js index db7627d..69e34b8 100644 --- a/webapp/static/clients/codemirror/wc-qd-list.js +++ b/webapp/static/clients/codemirror/wc-qd-list.js @@ -183,7 +183,7 @@ class PanelComponent extends HTMLElement { style.textContent = ` @import url("../codicon@0.0.40/codicon.css"); ul { list-style-type: none; padding:0;margin:0; - background-color: #e3e4e4ff;font-size: 80%;} + background-color: #e3e4e4ff;font-size: 80%; scrollbar-color: #000077 #bada55;} li { padding: 0 0 0 2px; border-bottom: 1px solid #ccc; cursor: pointer; width:100%; } li:not(.selected) :hover { background-color: #ccc; } .selected { background-color: #0d6efd;color: #ffff;}