From 97d0deef0d28394937b6d00372f791acb1678d16 Mon Sep 17 00:00:00 2001 From: Andy Bunce Date: Fri, 8 Aug 2025 12:26:11 +0100 Subject: [PATCH] [fix] load --- compose.yaml | 2 +- docs/explore.xqbk | 2 +- webapp/lsp/docs.xqm | 16 ++++++++++++++-- webapp/lsp/lsp-text.xqm | 12 +----------- webapp/static/clients/codemirror/script.js | 9 ++++++--- 5 files changed, 23 insertions(+), 18 deletions(-) diff --git a/compose.yaml b/compose.yaml index d8e004e..62dc2a2 100644 --- a/compose.yaml +++ b/compose.yaml @@ -9,7 +9,7 @@ services: - "3001:1984" volumes: - ./data:/srv/basex/data - - ./webapp/web.xml:/srv/basex/webapp/WEB-INF/web.xml # set websocket options 12.1+ +# - ./webapp/web.xml:/srv/basex/webapp/WEB-INF/web.xml # set websocket options 12.1+ - ./webapp/lsp:/srv/basex/webapp/lsp - ./webapp/static/clients:/srv/basex/webapp/static/clients diff --git a/docs/explore.xqbk b/docs/explore.xqbk index 6df7eae..8531777 100644 --- a/docs/explore.xqbk +++ b/docs/explore.xqbk @@ -1 +1 @@ -{"cells":[{"kind":2,"language":"xquery","value":"(:<:)\r\n\r\nimport module namespace docs=\"lsp/docs\" at \"/srv/basex/webapp/lsp/docs.xqm\";"},{"kind":2,"language":"xquery","value":"ws:ids()"},{"kind":2,"language":"xquery","value":"let $sock:=foot(ws:ids())\r\nlet $f:=docs:list($sock)\r\nreturn docs:get($sock,$f,\"textDocument\")"}]} \ No newline at end of file +{"cells":[{"kind":2,"language":"xquery","value":"(:<:)\r\n\r\nimport module namespace docs=\"lsp/docs\" at \"/srv/basex/webapp/lsp/docs.xqm\";"},{"kind":2,"language":"xquery","value":"ws:ids()"},{"kind":2,"language":"xquery","value":"let $sock:=foot(ws:ids())\r\nlet $f:=docs:list($sock)\r\nlet $t:=docs:get($sock,$f,\"textDocument\")?text\r\nreturn $t"}]} \ No newline at end of file diff --git a/webapp/lsp/docs.xqm b/webapp/lsp/docs.xqm index fede9ee..cf3e92f 100644 --- a/webapp/lsp/docs.xqm +++ b/webapp/lsp/docs.xqm @@ -94,15 +94,27 @@ declare function docs:key( ws:get($socket,"files")($file)($property) }; +(: get $property key for $file from session $socket :) +declare function docs:get( + $socket as xs:string, + $file as xs:string, + $property as docs:property +) as item()? +{ + ws:get($socket, + docs:key($socket,$file,$property) + ) +}; + declare function docs:parse( $socket as xs:string, $file as xs:string )as map(*)? { - let $text:=docs:key($socket,$file,"textDocument") + let $text:=docs:get($socket,$file,"textDocument")?text let $xml:= p:parse-Module($text)=>prof:time("⏱️ p:parse-Module " || $file) return ( ws:set($socket,docs:key($socket,$file,"parse"),$xml), - rpc:log(`done {$xml/name(.)}`) + rpc:log(`{ current-dateTime() } done {$xml/name(.)} size: { string-length( $text) }`) ) }; \ No newline at end of file diff --git a/webapp/lsp/lsp-text.xqm b/webapp/lsp/lsp-text.xqm index 19f326a..c9e5003 100644 --- a/webapp/lsp/lsp-text.xqm +++ b/webapp/lsp/lsp-text.xqm @@ -57,16 +57,7 @@ function lsp-text:didOpen($json as map(*)) as map(*)? { let $uri:=docs:open(ws:id(),$json?params)=>prof:time("⏱️ doc:save ") - - (: - let $xml:=prof:time(p:parse-Module($text),"⏱️ p:parse-Module ") - let $x:=job:eval(xs:anyURI("parse.xq"), - {"params" : $json?params, - "webSocket":ws:id()}, - { 'cache': true() } - ) - :) - return rpc:log("saved " || $uri) + return docs:parse(ws:id(),$uri) }; @@ -77,7 +68,6 @@ function lsp-text:didChange($json as map(*)) as map(*)? { let $uri:=docs:change(ws:id(),$json?params)=>prof:time("⏱️ doc:change ") - return docs:parse(ws:id(),$uri) }; diff --git a/webapp/static/clients/codemirror/script.js b/webapp/static/clients/codemirror/script.js index 8e7d382..35cb295 100644 --- a/webapp/static/clients/codemirror/script.js +++ b/webapp/static/clients/codemirror/script.js @@ -1,16 +1,20 @@ -let doc = `3+1`; + // Load saved content from localStorage when the page loads window.addEventListener('load', () => { const savedText = localStorage.getItem('code'); if (savedText) { doc = savedText; } + view.setState(lsp.createEditorState(doc, lsp.baseExts)); + connect(); }); const view = lsp.createEditorView(undefined, document.getElementById("editor")); -view.setState(lsp.createEditorState(doc, lsp.baseExts)); +let doc = `3+1`; let client; + + // Save content to localStorage when the page is about to unload window.addEventListener('beforeunload', () => { const doc = view.state.doc.toString(); @@ -57,4 +61,3 @@ function connect() { }) .catch(r => alert("connection failed: "+ server)); }; -connect(); \ No newline at end of file