[add] server save/default

This commit is contained in:
Andy Bunce 2025-08-29 11:39:39 +01:00
parent 433a2c54a7
commit 532580273b
2 changed files with 36 additions and 27 deletions

View file

@ -112,7 +112,7 @@
</header> </header>
<div class="modal-body"> <div class="modal-body">
<div id="state">🔴</div> <div id="state">🔴</div>
<input id="iServer" type="text" value="ws://localhost:3000/ws/lsp" style="width:25em" /> <input id="iServer" type="text" style="width:25em" />
</div> </div>
<div class="modal-footer"> <div class="modal-footer">
<button id="connect">connect</button> <button id="connect">connect</button>

View file

@ -1,21 +1,26 @@
const view = new lsp.EditorView({ const view = new lsp.EditorView({
extensions: lsp.baseExts, extensions: lsp.baseExts,
parent:document.getElementById("editor") parent: document.getElementById("editor")
}); });
let doc = "xquery version '3.1';\n(:~ comment:)\nmodule namespace pdfbox='ns';\n"; let doc = "xquery version '3.1';\n(:~ comment:)\nmodule namespace pdfbox='ns';\n";
var client; var client;
var extLint; var extLint;
function $(id){ return document.getElementById(id) }; function $(id) { return document.getElementById(id) };
// Load saved content from localStorage when the page loads // Load saved content from localStorage when the page loads
window.addEventListener('load', () => { window.addEventListener('load', () => {
const savedText = localStorage.getItem('code'); const savedText = localStorage.getItem('code');
if (savedText) { if (savedText) doc = savedText;
doc = savedText; let svr = localStorage.getItem('lsp');
if (!svr) {
let x = new URL(window.location.href);
x.protocol = "ws";
x.pathname = "ws/lsp"
svr = x.href;
} }
$("iServer").value = svr;
view.setState(lsp.EditorState.create({doc:doc, extensions: lsp.baseExts})); view.setState(lsp.EditorState.create({ doc: doc, extensions: lsp.baseExts }));
connect(); connect();
}); });
@ -23,24 +28,25 @@ window.addEventListener('load', () => {
window.addEventListener('beforeunload', () => { window.addEventListener('beforeunload', () => {
const doc = view.state.doc.toString(); const doc = view.state.doc.toString();
localStorage.setItem('code', doc); localStorage.setItem('code', doc);
localStorage.setItem('lsp', $("iServer").value);
}); });
$("connect").onclick = e => { e.preventDefault();connect()}; $("connect").onclick = e => { e.preventDefault(); connect() };
$("search").onclick = e => lsp.openSearchPanel(view); $("search").onclick = e => lsp.openSearchPanel(view);
$("format").onclick = e => console.log("CMDS",lsp.listCommands(view)); $("format").onclick = e => console.log("CMDS", lsp.listCommands(view));
$("lint").onclick = async e => { $("lint").onclick = async e => {
console.log("word", view.state.wordAt(1)); console.log("word", view.state.wordAt(1));
lsp.openLintPanel(view); lsp.openLintPanel(view);
}; };
$("sync").onclick = e => { client.sync(); console.log("XXXsync");}; $("sync").onclick = e => { client.sync(); console.log("XXXsync"); };
$("format").onclick = e => { $("format").onclick = e => {
client.sync(); client.sync();
console.log("FMT",lsp.formatDocument(view)); console.log("FMT", lsp.formatDocument(view));
}; };
$("load").onchange = e => { $("load").onchange = e => {
@ -70,20 +76,23 @@ function connect() {
transport.socket.onclose = (event) => connectStatus(false); transport.socket.onclose = (event) => connectStatus(false);
transport.socket.oneror = (event) => $("msg").innerText = "sock error!"; transport.socket.oneror = (event) => $("msg").innerText = "sock error!";
transport.subscribe(incoming); transport.subscribe(incoming);
client = new lsp.LSPClient({extensions: lsp.languageServerExtensions()}); client = new lsp.LSPClient({ extensions: lsp.languageServerExtensions() });
client.connect(transport); client.connect(transport);
$("popConnect").hidePopover(); $("popConnect").hidePopover();
connectStatus(true); connectStatus(true);
let extLsp =client.plugin( file, "xquery"); let extLsp = client.plugin(file, "xquery");
let up=lsp.debouncedChangeListener({ let up = lsp.debouncedChangeListener({
delay: 750, delay: 750,
onChange: (content, state) => { onChange: (content, state) => {
console.log('Debounced change detected:'); console.log('Debounced change detected:');
client.sync(); client.sync();
}}) }
})
view.dispatch({ effects: lsp.StateEffect.appendConfig.of( view.dispatch({
[lsp.linter(null, {autoPanel:true}),...extLsp,up]) }) effects: lsp.StateEffect.appendConfig.of(
[lsp.linter(null, { autoPanel: true }), ...extLsp, up])
})
}) })
.catch(r => { connectStatus(false); alert("connection failed: " + server) }); .catch(r => { connectStatus(false); alert("connection failed: " + server) });
@ -107,11 +116,11 @@ function incoming(msg) {
function log(rpc) { function log(rpc) {
console.log("<-",rpc) console.log("<-", rpc)
if (rpc.id) return if (rpc.id) return
const text = rpc.method; const text = rpc.method;
const li = document.createElement("li"); const li = document.createElement("li");
const n=$("traffic").childElementCount + " "; const n = $("traffic").childElementCount + " ";
li.appendChild(document.createTextNode(n + text)); li.appendChild(document.createTextNode(n + text));
$("traffic").insertBefore(li, $("traffic").firstChild) $("traffic").insertBefore(li, $("traffic").firstChild)
}; };