<!DOCTYPE html> <html> <head> <title>Yjs CodeMirror Example</title> <link rel=stylesheet href="https://codemirror.net/lib/codemirror.css"> <style> #container { border: grey; border-style: solid; border-width: thin; } </style> </head> <body> <p>This example shows how to bind a YText type to <a href="https://codemirror.net/">CodeMirror</a> editor.</p> <p>The content of this editor is shared with every client who visits this domain.</p> <div class="code-html"> <style> .remote-caret { position: absolute; border-left: black; border-left-style: solid; border-left-width: 2px; height: 1em; } .remote-caret > div { position: relative; top: -1.05em; font-size: 13px; background-color: rgb(250, 129, 0); font-family: serif; font-style: normal; font-weight: normal; line-height: normal; user-select: none; color: white; padding-left: 2px; padding-right: 2px; } </style> <div id="container"></div> </div> <!-- The actual source file for the following code is found in ./codemirror.js. Run `npm run watch` to compile the files --> <script class="code-js" src="./build/codemirror.js" type="module"> import * as Y from 'yjs' import { WebsocketProvider } from 'yjs/provider/websocket.js' import { CodeMirrorBinding } from 'yjs/bindings/codemirror.js' import * as conf from './exampleConfig.js' import CodeMirror from 'codemirror' import 'codemirror/mode/javascript/javascript.js' const provider = new WebsocketProvider(conf.serverAddress) const ydocument = provider.get('codemirror') const ytext = ydocument.define('codemirror', Y.Text) const editor = new CodeMirror(document.querySelector('#container'), { mode: 'javascript', lineNumbers: true }) const binding = new CodeMirrorBinding(ytext, editor) window.codemirrorExample = { binding, editor, ytext, ydocument } </script> </body> </html>