Comparing version 0.8.15 to 0.8.16
{ | ||
"name": "yjs", | ||
"version": "0.8.15", | ||
"version": "0.8.16", | ||
"homepage": "y-js.org", | ||
@@ -5,0 +5,0 @@ "authors": [ |
@@ -10,4 +10,3 @@ /* global Y, ace */ | ||
name: 'websockets-client', | ||
room: 'ace-example', | ||
url: 'localhost:1234' | ||
room: 'ace-example' | ||
}, | ||
@@ -23,3 +22,3 @@ sourceDir: '/bower_components', | ||
var editor = ace.edit('ace') | ||
editor.setTheme('/bower_components/ace-builds/src-min/chrome') | ||
editor.setTheme('ace/theme/chrome') | ||
editor.getSession().setMode('ace/mode/javascript') | ||
@@ -26,0 +25,0 @@ |
@@ -6,18 +6,16 @@ | ||
**NOTE** This project is currently migrating. So there may exist some information that is not true anymore.. | ||
You can create you own shared types easily. | ||
Therefore, you can design the sturcture of your custom type, | ||
and ensure data validity, while Yjs ensures data consistency (everyone will eventually end up with the same data). | ||
We already provide data types for | ||
We already provide abstract data types for | ||
| Name | Description | | ||
|----------|-------------------| | ||
|[map](https://github.com/y-js/y-map) | Add, update, and remove properties of an object. Included in Yjs| | ||
|[array](https://github.com/y-js/y-array) | A shared linked list implementation | | ||
|[xml](https://github.com/y-js/y-xml) | An implementation of the DOM. You can create a two way binding to Browser DOM objects| | ||
|[text](https://github.com/y-js/y-text) | Collaborate on text. Supports two way binding to textareas, input elements, or HTML elements (e.g. *h1*, or *p*)| | ||
|[richtext](https://github.com/y-js/y-richtext) | Collaborate on rich text. Supports two way binding to several editors| | ||
|[map](https://github.com/y-js/y-map) | A shared Map implementation. Maps from text to any stringify-able object | | ||
|[array](https://github.com/y-js/y-array) | A shared Array implementation | | ||
|[xml](https://github.com/y-js/y-xml) | An implementation of the DOM. You can create a two way binding to Browser DOM objects | | ||
|[text](https://github.com/y-js/y-text) | Collaborate on text. Supports two way binding to textareas, input elements, or HTML elements (e.g. *<h1/>*, or *<p/>*). Also supports the [Ace Editor](https://ace.c9.io) | | ||
|[richtext](https://github.com/y-js/y-richtext) | Collaborate on rich text. Supports two way binding to the [Quill Rich Text Editor](http://quilljs.com/)| | ||
Yjs supports P2P message propagation, and not bound to a specific communication protocol. Therefore, Yjs is extremely scalable and can be used in a wide range of application scenarios. | ||
Yjs supports P2P message propagation, and is not bound to a specific communication protocol. Therefore, Yjs is extremely scalable and can be used in a wide range of application scenarios. | ||
@@ -40,3 +38,3 @@ We support several communication protocols as so called *Connectors*. | ||
|[memory](https://github.com/y-js/y-memory) | In-memory storage. | | ||
|[IndexedDb](https://github.com/y-js/y-indexeddb) | Offline storage for the browser | | ||
|[indexeddb](https://github.com/y-js/y-indexeddb) | Offline storage for the browser | | ||
@@ -47,3 +45,3 @@ You can use Yjs client-, and server- side. You can get it as via npm, and bower. We even provide polymer elements for Yjs! | ||
* .. P2P message propagation and arbitrary communication protocols | ||
* .. arbitrary complex data types | ||
* .. share any type of data. The types provide a convenient interface | ||
* .. offline support: Changes are stored persistently and only relevant changes are propagated on rejoin | ||
@@ -91,3 +89,3 @@ * .. Intention Preservation: When working on Text, the intention of your changes are preserved. This is particularily important when working offline. Every type has a notion on how we define Intention Preservation on it. | ||
} | ||
// modules: ['Richtext', 'Array'] // optional list of modules you want to import | ||
// types: ['Richtext', 'Array'] // optional list of types you want to import | ||
}).then(function (y) { | ||
@@ -99,2 +97,81 @@ // bind the textarea to a shared text element | ||
# Api | ||
### Y(options) | ||
* options.db | ||
* Will be forwarded to the database adapter. Specify the database adaper on `options.db.name`. | ||
* Have a look at the used database adapter repository to see all available options. | ||
* options.connector | ||
* Will be forwarded to the connector adapter. Specify the connector adaper on `options.connector.name`. | ||
* All our connectors implement a `room` property. Clients that specify the same room share the same data. | ||
* All of our connectors specify an `url` property that defines the connection endpoint of the used connector. | ||
* All of our connectors also have a default connection endpoint that you can use for development. | ||
* Have a look at the used connector repository to see all available options. | ||
* options.sourceDir | ||
* Path where all y-* modules are stored. | ||
* Defaults to `/bower_components` | ||
* Not required when running on `nodejs` / `iojs` | ||
* When using browserify you can specify all used modules like this: | ||
``` | ||
var Y = require('yjs') | ||
// you need to require the db, connector, and *all* types you use! | ||
require('y-memory')(Y) | ||
require('y-webrtc')(Y) | ||
require('y-map')(Y) | ||
// .. | ||
``` | ||
* options.share | ||
* Specify on `options.share[arbitraryName]` types that are shared among all users. | ||
* E.g. Specify `options.share[arbitraryName] = 'Array'` to require y-array and create an Y.Array type on `y.share[arbitraryName]`. | ||
* If userA doesn't specify `options.share[arbitraryName]`, it won't be available for userA. | ||
* If userB specifies `options.share[arbitraryName]`, it still won't be available for userA. But all the updates are send from userB to userA. | ||
* In contrast to Y.Map, types on `y.share.*` cannot be overwritten or deleted. Instead, they are merged among all users. This feature is only available on `y.share.*` | ||
* Weird behavior: It is supported that two users specify different types with the same property name. | ||
E.g. userA specifies `options.share.x = 'Array'`, and userB specifies `options.share.x = 'Text'`. But they'll only share data if they specified the same type with the same property name | ||
* options.type | ||
* Array of modules that Yjs needs to require, before instantiating a shared type. | ||
* By default Yjs requires the specified database adapter, the specified connector, and all modules that are used in `options.share.*` | ||
* Put all types here that you intend to use, but are not used in y.share.* | ||
### Instantiated Y object (y) | ||
`Y(options)` returns a promise that is fulfilled when.. | ||
* All modules are loaded | ||
* The specified database adapter is loaded | ||
* The specified connector is loaded | ||
* All types are included | ||
* The connector is initialized, and a unique user id is set (received from the server) | ||
* Note: When using y-indexeddb, a retrieved user id is stored on `localStorage` | ||
The promise returns an instance of Y. We denote it with a lower case `y`. | ||
* y.share.* | ||
* Instances of the types you specified on options.share.* | ||
* y.share.* can only be defined once when you instantiate Y! | ||
* y.connector is an instance of Y.AbstractConnector | ||
* y.connector.onUserEvent(function (event) {..}) | ||
* Observe user events (event.action is either 'userLeft' or 'userJoined') | ||
* y.connector.whenSynced(listener) | ||
* `listener` is executed when y synced with at least one user. | ||
* `listener` is not called when no other user is in the same room. | ||
* y-websockets-client aways waits to sync with the server | ||
* y.connector.disconnect() | ||
* Force to disconnect this instance from the other instances | ||
* y.connector.reconnect() | ||
* Try to reconnect to the other instances (needs to be supported by the connector) | ||
* Not supported by y-xmpp | ||
* y.destroy() | ||
* Destroy this object. | ||
* Destroys all types (they will throw weird errors if you still use them) | ||
* Disconnects from the other instances (via connector) | ||
* Removes all data from the database | ||
* y.db.stopGarbageCollector() | ||
* Stop the garbage collector. Call y.db.garbageCollect() to continue garbage collection | ||
* y.db.gcTimeout :: Number (defaults to 50000 ms) | ||
* Time interval between two garbage collect cycles | ||
* It is required that all instances exchanged all messages after two garbage collect cycles (after 100000 ms per default) | ||
* y.db.userId :: String | ||
* The used user id for this client. **Never overwrite this** | ||
# Status | ||
@@ -101,0 +178,0 @@ Yjs is a work in progress. Different versions of the *y-* repositories may not work together. Just drop me a line if you run into troubles. |
{ | ||
"name": "yjs", | ||
"version": "0.8.15", | ||
"version": "0.8.16", | ||
"description": "A framework for real-time p2p shared editing on arbitrary complex data types", | ||
@@ -5,0 +5,0 @@ "main": "./src/y.js", |
101
README.md
@@ -6,18 +6,16 @@ | ||
**NOTE** This project is currently migrating. So there may exist some information that is not true anymore.. | ||
You can create you own shared types easily. | ||
Therefore, you can design the sturcture of your custom type, | ||
and ensure data validity, while Yjs ensures data consistency (everyone will eventually end up with the same data). | ||
We already provide data types for | ||
We already provide abstract data types for | ||
| Name | Description | | ||
|----------|-------------------| | ||
|[map](https://github.com/y-js/y-map) | Add, update, and remove properties of an object. Included in Yjs| | ||
|[array](https://github.com/y-js/y-array) | A shared linked list implementation | | ||
|[xml](https://github.com/y-js/y-xml) | An implementation of the DOM. You can create a two way binding to Browser DOM objects| | ||
|[text](https://github.com/y-js/y-text) | Collaborate on text. Supports two way binding to textareas, input elements, or HTML elements (e.g. *h1*, or *p*)| | ||
|[richtext](https://github.com/y-js/y-richtext) | Collaborate on rich text. Supports two way binding to several editors| | ||
|[map](https://github.com/y-js/y-map) | A shared Map implementation. Maps from text to any stringify-able object | | ||
|[array](https://github.com/y-js/y-array) | A shared Array implementation | | ||
|[xml](https://github.com/y-js/y-xml) | An implementation of the DOM. You can create a two way binding to Browser DOM objects | | ||
|[text](https://github.com/y-js/y-text) | Collaborate on text. Supports two way binding to textareas, input elements, or HTML elements (e.g. *<h1/>*, or *<p/>*). Also supports the [Ace Editor](https://ace.c9.io) | | ||
|[richtext](https://github.com/y-js/y-richtext) | Collaborate on rich text. Supports two way binding to the [Quill Rich Text Editor](http://quilljs.com/)| | ||
Yjs supports P2P message propagation, and not bound to a specific communication protocol. Therefore, Yjs is extremely scalable and can be used in a wide range of application scenarios. | ||
Yjs supports P2P message propagation, and is not bound to a specific communication protocol. Therefore, Yjs is extremely scalable and can be used in a wide range of application scenarios. | ||
@@ -40,3 +38,3 @@ We support several communication protocols as so called *Connectors*. | ||
|[memory](https://github.com/y-js/y-memory) | In-memory storage. | | ||
|[IndexedDb](https://github.com/y-js/y-indexeddb) | Offline storage for the browser | | ||
|[indexeddb](https://github.com/y-js/y-indexeddb) | Offline storage for the browser | | ||
@@ -47,3 +45,3 @@ You can use Yjs client-, and server- side. You can get it as via npm, and bower. We even provide polymer elements for Yjs! | ||
* .. P2P message propagation and arbitrary communication protocols | ||
* .. arbitrary complex data types | ||
* .. share any type of data. The types provide a convenient interface | ||
* .. offline support: Changes are stored persistently and only relevant changes are propagated on rejoin | ||
@@ -91,3 +89,3 @@ * .. Intention Preservation: When working on Text, the intention of your changes are preserved. This is particularily important when working offline. Every type has a notion on how we define Intention Preservation on it. | ||
} | ||
// modules: ['Richtext', 'Array'] // optional list of modules you want to import | ||
// types: ['Richtext', 'Array'] // optional list of types you want to import | ||
}).then(function (y) { | ||
@@ -99,2 +97,81 @@ // bind the textarea to a shared text element | ||
# Api | ||
### Y(options) | ||
* options.db | ||
* Will be forwarded to the database adapter. Specify the database adaper on `options.db.name`. | ||
* Have a look at the used database adapter repository to see all available options. | ||
* options.connector | ||
* Will be forwarded to the connector adapter. Specify the connector adaper on `options.connector.name`. | ||
* All our connectors implement a `room` property. Clients that specify the same room share the same data. | ||
* All of our connectors specify an `url` property that defines the connection endpoint of the used connector. | ||
* All of our connectors also have a default connection endpoint that you can use for development. | ||
* Have a look at the used connector repository to see all available options. | ||
* options.sourceDir | ||
* Path where all y-* modules are stored. | ||
* Defaults to `/bower_components` | ||
* Not required when running on `nodejs` / `iojs` | ||
* When using browserify you can specify all used modules like this: | ||
``` | ||
var Y = require('yjs') | ||
// you need to require the db, connector, and *all* types you use! | ||
require('y-memory')(Y) | ||
require('y-webrtc')(Y) | ||
require('y-map')(Y) | ||
// .. | ||
``` | ||
* options.share | ||
* Specify on `options.share[arbitraryName]` types that are shared among all users. | ||
* E.g. Specify `options.share[arbitraryName] = 'Array'` to require y-array and create an Y.Array type on `y.share[arbitraryName]`. | ||
* If userA doesn't specify `options.share[arbitraryName]`, it won't be available for userA. | ||
* If userB specifies `options.share[arbitraryName]`, it still won't be available for userA. But all the updates are send from userB to userA. | ||
* In contrast to Y.Map, types on `y.share.*` cannot be overwritten or deleted. Instead, they are merged among all users. This feature is only available on `y.share.*` | ||
* Weird behavior: It is supported that two users specify different types with the same property name. | ||
E.g. userA specifies `options.share.x = 'Array'`, and userB specifies `options.share.x = 'Text'`. But they'll only share data if they specified the same type with the same property name | ||
* options.type | ||
* Array of modules that Yjs needs to require, before instantiating a shared type. | ||
* By default Yjs requires the specified database adapter, the specified connector, and all modules that are used in `options.share.*` | ||
* Put all types here that you intend to use, but are not used in y.share.* | ||
### Instantiated Y object (y) | ||
`Y(options)` returns a promise that is fulfilled when.. | ||
* All modules are loaded | ||
* The specified database adapter is loaded | ||
* The specified connector is loaded | ||
* All types are included | ||
* The connector is initialized, and a unique user id is set (received from the server) | ||
* Note: When using y-indexeddb, a retrieved user id is stored on `localStorage` | ||
The promise returns an instance of Y. We denote it with a lower case `y`. | ||
* y.share.* | ||
* Instances of the types you specified on options.share.* | ||
* y.share.* can only be defined once when you instantiate Y! | ||
* y.connector is an instance of Y.AbstractConnector | ||
* y.connector.onUserEvent(function (event) {..}) | ||
* Observe user events (event.action is either 'userLeft' or 'userJoined') | ||
* y.connector.whenSynced(listener) | ||
* `listener` is executed when y synced with at least one user. | ||
* `listener` is not called when no other user is in the same room. | ||
* y-websockets-client aways waits to sync with the server | ||
* y.connector.disconnect() | ||
* Force to disconnect this instance from the other instances | ||
* y.connector.reconnect() | ||
* Try to reconnect to the other instances (needs to be supported by the connector) | ||
* Not supported by y-xmpp | ||
* y.destroy() | ||
* Destroy this object. | ||
* Destroys all types (they will throw weird errors if you still use them) | ||
* Disconnects from the other instances (via connector) | ||
* Removes all data from the database | ||
* y.db.stopGarbageCollector() | ||
* Stop the garbage collector. Call y.db.garbageCollect() to continue garbage collection | ||
* y.db.gcTimeout :: Number (defaults to 50000 ms) | ||
* Time interval between two garbage collect cycles | ||
* It is required that all instances exchanged all messages after two garbage collect cycles (after 100000 ms per default) | ||
* y.db.userId :: String | ||
* The used user id for this client. **Never overwrite this** | ||
# Status | ||
@@ -101,0 +178,0 @@ Yjs is a work in progress. Different versions of the *y-* repositories may not work together. Just drop me a line if you run into troubles. |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
823977
205
4131