All Projects → convergencelabs → Monaco Collab Ext

convergencelabs / Monaco Collab Ext

Licence: other
Adds collaborative editing capabilities to the Monaco Editor

Programming Languages

typescript
32286 projects

Projects that are alternatives of or similar to Monaco Collab Ext

CoCreate-dashboard
A simple dashboard component in vanilla javascript. Easily configured using HTML5 attributes and/or JavaScript API.
Stars: ✭ 20 (-75.9%)
Mutual labels:  realtime, collaboration
wiz-editor
多人实时富文本 编辑器,可以嵌入各种应用中。支持markdown语法。
Stars: ✭ 208 (+150.6%)
Mutual labels:  realtime, collaboration
javascript-examples
Examples for the Convergence Real-time Collaboration Engine
Stars: ✭ 40 (-51.81%)
Mutual labels:  realtime, collaboration
CoCreateCSS
A lightweight utility-first Atomic CSS framework promoting rapid UI development. No learning curve... Apply your native css property:value directly in class, then extract and transform it.
Stars: ✭ 13 (-84.34%)
Mutual labels:  realtime, collaboration
Fluidframework
Library for building distributed, real-time collaborative web applications
Stars: ✭ 3,592 (+4227.71%)
Mutual labels:  collaboration, realtime
Swellrt
SwellRT main project. Server, JavaScript and Java clients
Stars: ✭ 205 (+146.99%)
Mutual labels:  collaboration, realtime
convergence-client-javascript
The Convergence JavaScript Client
Stars: ✭ 38 (-54.22%)
Mutual labels:  realtime, collaboration
Skypad
Skypad
Stars: ✭ 141 (+69.88%)
Mutual labels:  collaboration, realtime
ace-collab-ext
Enhances the Ace Editor with real time collaboration user experience.
Stars: ✭ 67 (-19.28%)
Mutual labels:  realtime, collaboration
convergence-project
The project used for Convergence Project Management and Issue Reporting
Stars: ✭ 33 (-60.24%)
Mutual labels:  realtime, collaboration
multihack-brackets
Realtime collaboration for programmers. (Brackets Extension)
Stars: ✭ 24 (-71.08%)
Mutual labels:  realtime, collaboration
Codimd
CodiMD - Realtime collaborative markdown notes on all platforms.
Stars: ✭ 7,592 (+9046.99%)
Mutual labels:  collaboration, realtime
Yjs
Shared data types for building collaborative software
Stars: ✭ 5,894 (+7001.2%)
Mutual labels:  collaboration, realtime
Convergence Server
The Convergence Server
Stars: ✭ 44 (-46.99%)
Mutual labels:  collaboration, realtime
Stl.fusion.samples
A collection of samples for Fusion library: https://github.com/servicetitan/Stl.Fusion
Stars: ✭ 65 (-21.69%)
Mutual labels:  realtime
Element Rpm
Providing the Element messaging desktop client packaged for the Fedora, Red Hat(IBM), and OpenSUSE families of linux desktop operating systems.
Stars: ✭ 73 (-12.05%)
Mutual labels:  collaboration
Steaming Ip Camera Nodejs
Real time streaming IP/Network security camera on web browser using NodeJS
Stars: ✭ 64 (-22.89%)
Mutual labels:  realtime
Webterminal
ssh rdp vnc telnet sftp bastion/jump web putty xshell terminal jumpserver audit realtime monitor rz/sz 堡垒机 云桌面 linux devops sftp websocket file management rz/sz otp 自动化运维 审计 录像 文件管理 sftp上传 实时监控 录像回放 网页版rz/sz上传下载/动态口令 django
Stars: ✭ 1,124 (+1254.22%)
Mutual labels:  realtime
Simple
Simple Client and Simple Server demo and testbed applications.
Stars: ✭ 78 (-6.02%)
Mutual labels:  realtime
Subethaedit
General purpose plain text editor for macOS. Widely known for its live collaboration feature.
Stars: ✭ 1,183 (+1325.3%)
Mutual labels:  collaboration

Monaco Collaborative Extensions

Build Status

Enhances the Monaco Editor by adding the ability to render cues about what remote users are doing in the system.

demo graphic

Installation

Install package with NPM and add it to your development dependencies:

npm install --save-dev @convergencelabs/monaco-collab-ext

Demo

Go here to see a live demo of multiple cursors, multiple selections, and remote scrollbars (Visit on multiple browsers, or even better, point a friend to it too). This uses Convergence to handle the synchronization of data and user actions.

Usage

RemoteCursorManager

The RemoteCursorManager allows you to easily render the cursors of other users working in the same document. The cursor position can be represented as either a single linear index or as a 2-dimensional position in the form of {lineNumber: 0, column: 10}.

const editor = monaco.editor.create(document.getElementById("editor"), {
  value: "function helloWorld = () => { console.log('hello world!')",
  theme: "vs-dark'",
  language: 'javascript'
});

const remoteCursorManager = new MonacoCollabExt.RemoteCursorManager({
  editor: editor,
  tooltips: true,
  tooltipDuration: 2
});

const cursor = remoteCursorManager.addCursor("jDoe", "blue", "John Doe");

// Set the position of the cursor.
cursor.setOffset(4);

// Hide the cursor
cursor.hide();

// Show the cursor
cursor.show();

// Remove the cursor.
cursor.dispose();

RemoteSelectionManager

The RemoteSelectionManager allows you to easily render the selection of other users working in the same document.

const editor = monaco.editor.create(document.getElementById("editor"), {
  value: "function helloWorld = () => { console.log('hello world!')",
  theme: "vs-dark'",
  language: 'javascript'
});

const remoteSelectionManager = new MonacoCollabExt.RemoteSelectionManager({editor: editor});

const selection = remoteSelectionManager.addSelection("jDoe", "blue");

// Set the range of the selection using zero-based offsets.
selection.setOffsets(45, 55);

// Hide the selection
selection.hide();

// Show the selection
selection.show();

// Remove the selection.
selection.dispose();

EditorContentManager

The EditorContentManager simplifies dealing with local and remote changes to the editor.

const editor = monaco.editor.create(document.getElementById("editor"), {
  value: "function helloWorld = () => { console.log('hello world!')",
  theme: "vs-dark'",
  language: 'javascript'
});

const contentManager = new MonacoCollabExt.EditorContentManager({
  editor: editor,
  onInsert(index, text) {
    console.log("Insert", index, text);
  },
  onReplace(index, length, text) {
    console.log("Replace", index, length, text);
  },
  onDelete(index, length) {
    console.log("Delete", index, length);
  }
});

// Insert text into the editor at offset 5.
contentManager.insert(5, "some text");

// Replace the text in the editor at range 5 - 10.
contentManager.replace(5, 10, "some text");

// Delete the text in the editor at range 5 - 10.
contentManager.delete(5, 10);

// Release resources when done
contentManager.dispose();
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].