82 lines
No EOL
2.7 KiB
HTML
82 lines
No EOL
2.7 KiB
HTML
<!doctype html>
|
|
<html>
|
|
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
<title>Codemirror6 example using BaseX LSP</title>
|
|
<link rel="icon" type="image/png" href="favicon.png" />
|
|
<link rel="stylesheet" href="styles.css" />
|
|
|
|
</head>
|
|
|
|
<body>
|
|
<header>BaseX LSP client <button id="search">🔍</button>
|
|
<button id="lint">⚠️</button>
|
|
<div style="float:right">
|
|
<span id="state">🔴</span>
|
|
<input id="iServer" type="text" value="ws://localhost:3000/ws/lsp" style="width:25em" /><button id="connect">connect</button>
|
|
</div>
|
|
</header>
|
|
|
|
<div class="container">
|
|
<div class="item">
|
|
<div>
|
|
<label for="file">File:</label><input id="iFile" type="url" value="file:///some/file.xml" />
|
|
</div>
|
|
<div>
|
|
<label for="symbols">Symbols:</label><select id="symbols" disabled="disabled"></select>
|
|
</div>
|
|
</div>
|
|
<!-- Editor goes in here -->
|
|
<div id="editor" class="item"></div>
|
|
</div>
|
|
|
|
<!-- CodeMirror 6 -->
|
|
<script src="./lsp.bundle.js"></script>
|
|
<script>
|
|
|
|
let doc = `<foo at=42><bar>test</bar></foo>`;
|
|
// Load saved content from localStorage when the page loads
|
|
window.addEventListener('load', () => {
|
|
const savedText = localStorage.getItem('code');
|
|
if (savedText) {
|
|
doc = savedText;
|
|
}
|
|
});
|
|
|
|
|
|
const view = lsp.createEditorView(undefined, document.getElementById("editor"));
|
|
view.setState(lsp.createEditorState(doc, lsp.baseExts));
|
|
|
|
// Save content to localStorage when the page is about to unload
|
|
window.addEventListener('beforeunload', () => {
|
|
const doc = view.state.doc.toString();
|
|
localStorage.setItem('code', doc);
|
|
});
|
|
document.getElementById("connect").onclick = e => {
|
|
|
|
connect()
|
|
};
|
|
document.getElementById("search").onclick = e => {
|
|
lsp.openSearchPanel(view);
|
|
};
|
|
document.getElementById("lint").onclick = e => {
|
|
lsp.openLintPanel(view);
|
|
};
|
|
function connect() {
|
|
const server = document.getElementById("iServer").value;
|
|
const file = document.getElementById("iFile").value;
|
|
lsp.simpleWebSocketTransport(server)
|
|
.then(transport => {
|
|
let link = lsp.lsp(transport, file);
|
|
const state = lsp.createEditorState(doc, [...lsp.baseExts, link]);
|
|
view.setState(state);
|
|
})
|
|
.catch(r => alert("fail"));
|
|
};
|
|
connect();
|
|
</script>
|
|
</body>
|
|
|
|
</html> |