2012-08-14 04:03:06 +02:00
|
|
|
|
# Changeset Library
|
2012-08-03 22:04:06 +02:00
|
|
|
|
|
2021-10-25 01:42:59 +02:00
|
|
|
|
The [changeset
|
|
|
|
|
library](https://github.com/ether/etherpad-lite/blob/develop/src/static/js/Changeset.js)
|
|
|
|
|
provides tools to create, read, and apply changesets.
|
2012-08-03 22:04:06 +02:00
|
|
|
|
|
2021-10-25 01:42:59 +02:00
|
|
|
|
## Changeset
|
2012-08-03 22:04:06 +02:00
|
|
|
|
|
2021-10-25 01:42:59 +02:00
|
|
|
|
```javascript
|
|
|
|
|
const Changeset = require('ep_etherpad-lite/static/js/Changeset');
|
2012-08-03 22:04:06 +02:00
|
|
|
|
```
|
|
|
|
|
|
2021-10-25 01:42:59 +02:00
|
|
|
|
A changeset describes the difference between two revisions of a document. When a
|
|
|
|
|
user edits a pad, the browser generates and sends a changeset to the server,
|
|
|
|
|
which relays it to the other users and saves a copy (so that every past revision
|
|
|
|
|
is accessible).
|
2012-08-03 22:04:06 +02:00
|
|
|
|
|
2021-10-25 01:42:59 +02:00
|
|
|
|
A transmitted changeset looks like this:
|
2012-08-03 22:04:06 +02:00
|
|
|
|
|
|
|
|
|
```
|
2021-10-25 01:42:59 +02:00
|
|
|
|
'Z:z>1|2=m=b*0|1+1$\n'
|
2012-08-03 22:04:06 +02:00
|
|
|
|
```
|
|
|
|
|
|
2021-10-25 01:42:59 +02:00
|
|
|
|
## Attribute Pool
|
2012-08-07 20:29:44 +02:00
|
|
|
|
|
2021-10-25 01:42:59 +02:00
|
|
|
|
```javascript
|
|
|
|
|
const AttributePool = require('ep_etherpad-lite/static/js/AttributePool');
|
2012-08-07 20:29:44 +02:00
|
|
|
|
```
|
|
|
|
|
|
2021-10-25 01:42:59 +02:00
|
|
|
|
Changesets do not include any attribute key–value pairs. Instead, they use
|
|
|
|
|
numeric identifiers that reference attributes kept in an [attribute
|
|
|
|
|
pool](https://github.com/ether/etherpad-lite/blob/develop/src/static/js/AttributePool.js).
|
|
|
|
|
This attribute interning reduces the transmission overhead of attributes that
|
|
|
|
|
are used many times.
|
2012-08-07 20:29:44 +02:00
|
|
|
|
|
2021-10-25 01:42:59 +02:00
|
|
|
|
There is one attribute pool per pad, and it includes every current and
|
|
|
|
|
historical attribute used in the pad.
|
2012-08-03 22:04:06 +02:00
|
|
|
|
|
2021-10-25 01:42:59 +02:00
|
|
|
|
## Further Reading
|
2021-04-06 21:07:36 +02:00
|
|
|
|
|
|
|
|
|
Detailed information about the changesets & Easysync protocol:
|
|
|
|
|
|
2021-10-25 01:42:59 +02:00
|
|
|
|
* [Easysync Protocol](https://github.com/ether/etherpad-lite/blob/develop/doc/easysync/easysync-notes.pdf)
|
|
|
|
|
* [Etherpad and EasySync Technical Manual](https://github.com/ether/etherpad-lite/blob/develop/doc/easysync/easysync-full-description.pdf)
|