Eric Mc Sween 3831416c2f Merge pull request #12206 from overleaf/em-camel-case-docupdater пре 3 година
..
server f0bd6dda23 Merge pull request #7986 from overleaf/jpa-eslint-8 пре 4 година
types 3831416c2f Merge pull request #12206 from overleaf/em-camel-case-docupdater пре 3 година
README.md a519980c10 decaffeinate: rename app/coffee dir to app/js пре 6 година
count.js c532376e21 [misc] run format_fix and lint:fix пре 5 година
helpers.js a6f05109a3 Merge pull request #5352 from overleaf/jpa-no-var пре 5 година
index.js dbf9e88dc3 prettier: convert app/js decaffeinated files to Prettier format пре 6 година
json-api.js 3831416c2f Merge pull request #12206 from overleaf/em-camel-case-docupdater пре 3 година
json.js a6f05109a3 Merge pull request #5352 from overleaf/jpa-no-var пре 5 година
model.js f0bd6dda23 Merge pull request #7986 from overleaf/jpa-eslint-8 пре 4 година
simple.js c532376e21 [misc] run format_fix and lint:fix пре 5 година
syncqueue.js a6f05109a3 Merge pull request #5352 from overleaf/jpa-no-var пре 5 година
text-api.js c532376e21 [misc] run format_fix and lint:fix пре 5 година
text-composable-api.js c532376e21 [misc] run format_fix and lint:fix пре 5 година
text-composable.js 5862359ff0 Merge pull request #5518 from overleaf/jpa-no-empty пре 5 година
text-tp2-api.js a6f05109a3 Merge pull request #5352 from overleaf/jpa-no-var пре 5 година
text-tp2.js 5862359ff0 Merge pull request #5518 from overleaf/jpa-no-empty пре 5 година
text.js 3831416c2f Merge pull request #12206 from overleaf/em-camel-case-docupdater пре 3 година
web-prelude.js dbf9e88dc3 prettier: convert app/js decaffeinated files to Prettier format пре 6 година

README.md

This directory contains all the operational transform code. Each file defines a type.

Most of the types in here are for testing or demonstration. The only types which are sent to the webclient are text and json.

An OT type

All OT types have the following fields:

name: (string) Name of the type. Should match the filename. create() -> snapshot: Function which creates and returns a new document snapshot

apply(snapshot, op) -> snapshot: A function which creates a new document snapshot with the op applied transform(op1, op2, side) -> op1': OT transform function.

Given op1, op2, apply(s, op2, transform(op1, op2, 'left')) == apply(s, op1, transform(op2, op1, 'right')).

Transform and apply must never modify their arguments.

Optional properties:

tp2: (bool) True if the transform function supports TP2. This allows p2p architectures to work. compose(op1, op2) -> op: Create and return a new op which has the same effect as op1 + op2. serialize(snapshot) -> JSON object: Serialize a document to something we can JSON.stringify() deserialize(object) -> snapshot: Deserialize a JSON object into the document's internal snapshot format prune(op1', op2, side) -> op1: Inserse transform function. Only required for TP2 types. normalize(op) -> op: Fix up an op to make it valid. Eg, remove skips of size zero. api: (object) Set of helper methods which will be mixed in to the client document object for manipulating documents. See below.

Examples

count and simple are two trivial OT type definitions if you want to take a look. JSON defines the ot-for-JSON type (see the wiki for documentation) and all the text types define different text implementations. (I still have no idea which one I like the most, and they're fun to write!)

API

Types can also define API functions. These methods are mixed into the client's Doc object when a document is created. You can use them to help construct ops programatically (so users don't need to understand how ops are structured).

For example, the three text types defined here (text, text-composable and text-tp2) all provide the text API, supplying .insert(), .del(), .getLength and .getText methods.

See text-api.coffee for an example.