[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>
<div class="modal-body">
<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 class="modal-footer">
<button id="connect">connect</button>

View file

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