@y/y 14.0.0-rc.2 → 14.0.0-rc.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +36 -12
- package/dist/src/index.d.ts +24 -1
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/structs/AbstractStruct.d.ts +14 -17
- package/dist/src/structs/AbstractStruct.d.ts.map +1 -1
- package/dist/src/structs/GC.d.ts +9 -14
- package/dist/src/structs/GC.d.ts.map +1 -1
- package/dist/src/structs/Item.d.ts +569 -31
- package/dist/src/structs/Item.d.ts.map +1 -1
- package/dist/src/structs/Skip.d.ts +9 -11
- package/dist/src/structs/Skip.d.ts.map +1 -1
- package/dist/src/utils/BlockSet.d.ts +8 -7
- package/dist/src/utils/BlockSet.d.ts.map +1 -1
- package/dist/src/utils/Doc.d.ts +4 -9
- package/dist/src/utils/Doc.d.ts.map +1 -1
- package/dist/src/utils/ID.d.ts +0 -1
- package/dist/src/utils/ID.d.ts.map +1 -1
- package/dist/src/utils/RelativePosition.d.ts +2 -5
- package/dist/src/utils/RelativePosition.d.ts.map +1 -1
- package/dist/src/utils/Renderer.d.ts +144 -0
- package/dist/src/utils/Renderer.d.ts.map +1 -0
- package/dist/src/utils/Snapshot.d.ts +7 -11
- package/dist/src/utils/Snapshot.d.ts.map +1 -1
- package/dist/src/utils/StructStore.d.ts +45 -23
- package/dist/src/utils/StructStore.d.ts.map +1 -1
- package/dist/src/utils/Transaction.d.ts +11 -21
- package/dist/src/utils/Transaction.d.ts.map +1 -1
- package/dist/src/utils/UndoManager.d.ts +13 -14
- package/dist/src/utils/UndoManager.d.ts.map +1 -1
- package/dist/src/utils/UpdateDecoder.d.ts +1 -1
- package/dist/src/utils/UpdateDecoder.d.ts.map +1 -1
- package/dist/src/utils/UpdateEncoder.d.ts +0 -1
- package/dist/src/utils/UpdateEncoder.d.ts.map +1 -1
- package/dist/src/utils/YEvent.d.ts +22 -26
- package/dist/src/utils/YEvent.d.ts.map +1 -1
- package/dist/src/utils/content-helper.d.ts +2 -0
- package/dist/src/utils/content-helper.d.ts.map +1 -0
- package/dist/src/utils/delta-helpers.d.ts +2 -3
- package/dist/src/utils/delta-helpers.d.ts.map +1 -1
- package/dist/src/utils/encoding-helpers.d.ts +6 -0
- package/dist/src/utils/encoding-helpers.d.ts.map +1 -0
- package/dist/src/utils/encoding.d.ts +16 -18
- package/dist/src/utils/encoding.d.ts.map +1 -1
- package/dist/src/utils/ids.d.ts +331 -0
- package/dist/src/utils/ids.d.ts.map +1 -0
- package/dist/src/utils/isParentOf.d.ts +1 -2
- package/dist/src/utils/isParentOf.d.ts.map +1 -1
- package/dist/src/utils/logging.d.ts +0 -1
- package/dist/src/utils/logging.d.ts.map +1 -1
- package/dist/src/utils/meta.d.ts +15 -64
- package/dist/src/utils/meta.d.ts.map +1 -1
- package/dist/src/utils/renderer-helpers.d.ts +99 -0
- package/dist/src/utils/renderer-helpers.d.ts.map +1 -0
- package/dist/src/utils/schemas.d.ts +3 -0
- package/dist/src/utils/schemas.d.ts.map +1 -0
- package/dist/src/utils/transaction-helpers.d.ts +18 -0
- package/dist/src/utils/transaction-helpers.d.ts.map +1 -0
- package/dist/src/utils/updates.d.ts +19 -25
- package/dist/src/utils/updates.d.ts.map +1 -1
- package/dist/src/ytype.d.ts +144 -41
- package/dist/src/ytype.d.ts.map +1 -1
- package/global.d.ts +53 -0
- package/package.json +12 -16
- package/src/index.js +32 -124
- package/src/structs/AbstractStruct.js +21 -16
- package/src/structs/GC.js +15 -20
- package/src/structs/Item.js +992 -318
- package/src/structs/Skip.js +16 -19
- package/src/utils/BlockSet.js +20 -20
- package/src/utils/Doc.js +18 -29
- package/src/utils/ID.js +0 -2
- package/src/utils/RelativePosition.js +15 -25
- package/src/utils/{AttributionManager.js → Renderer.js} +42 -197
- package/src/utils/Snapshot.js +15 -37
- package/src/utils/StructStore.js +89 -227
- package/src/utils/Transaction.js +89 -321
- package/src/utils/UndoManager.js +157 -19
- package/src/utils/UpdateDecoder.js +2 -3
- package/src/utils/UpdateEncoder.js +0 -4
- package/src/utils/YEvent.js +20 -26
- package/src/utils/content-helper.js +0 -0
- package/src/utils/delta-helpers.js +21 -42
- package/src/utils/encoding-helpers.js +110 -0
- package/src/utils/encoding.js +197 -122
- package/src/utils/ids.js +1527 -0
- package/src/utils/isParentOf.js +2 -4
- package/src/utils/logging.js +0 -4
- package/src/utils/meta.js +57 -46
- package/src/utils/renderer-helpers.js +110 -0
- package/src/utils/schemas.js +3 -0
- package/src/utils/transaction-helpers.js +413 -0
- package/src/utils/updates.js +24 -146
- package/src/ytype.js +626 -255
- package/tests/testHelper.js +10 -12
- package/dist/src/internals.d.ts +0 -36
- package/dist/src/internals.d.ts.map +0 -1
- package/dist/src/structs/ContentAny.d.ts +0 -67
- package/dist/src/structs/ContentAny.d.ts.map +0 -1
- package/dist/src/structs/ContentBinary.d.ts +0 -64
- package/dist/src/structs/ContentBinary.d.ts.map +0 -1
- package/dist/src/structs/ContentDeleted.d.ts +0 -64
- package/dist/src/structs/ContentDeleted.d.ts.map +0 -1
- package/dist/src/structs/ContentDoc.d.ts +0 -72
- package/dist/src/structs/ContentDoc.d.ts.map +0 -1
- package/dist/src/structs/ContentEmbed.d.ts +0 -67
- package/dist/src/structs/ContentEmbed.d.ts.map +0 -1
- package/dist/src/structs/ContentFormat.d.ts +0 -69
- package/dist/src/structs/ContentFormat.d.ts.map +0 -1
- package/dist/src/structs/ContentJSON.d.ts +0 -70
- package/dist/src/structs/ContentJSON.d.ts.map +0 -1
- package/dist/src/structs/ContentString.d.ts +0 -70
- package/dist/src/structs/ContentString.d.ts.map +0 -1
- package/dist/src/structs/ContentType.d.ts +0 -77
- package/dist/src/structs/ContentType.d.ts.map +0 -1
- package/dist/src/utils/AttributionManager.d.ts +0 -238
- package/dist/src/utils/AttributionManager.d.ts.map +0 -1
- package/dist/src/utils/IdMap.d.ts +0 -164
- package/dist/src/utils/IdMap.d.ts.map +0 -1
- package/dist/src/utils/IdSet.d.ts +0 -163
- package/dist/src/utils/IdSet.d.ts.map +0 -1
- package/dist/tests/IdMap.tests.d.ts +0 -9
- package/dist/tests/IdMap.tests.d.ts.map +0 -1
- package/dist/tests/IdSet.tests.d.ts +0 -9
- package/dist/tests/IdSet.tests.d.ts.map +0 -1
- package/dist/tests/attribution.tests.d.ts +0 -9
- package/dist/tests/attribution.tests.d.ts.map +0 -1
- package/dist/tests/compatibility.tests.d.ts +0 -5
- package/dist/tests/compatibility.tests.d.ts.map +0 -1
- package/dist/tests/delta.tests.d.ts +0 -7
- package/dist/tests/delta.tests.d.ts.map +0 -1
- package/dist/tests/doc.tests.d.ts +0 -13
- package/dist/tests/doc.tests.d.ts.map +0 -1
- package/dist/tests/encoding.tests.d.ts +0 -5
- package/dist/tests/encoding.tests.d.ts.map +0 -1
- package/dist/tests/index.d.ts +0 -2
- package/dist/tests/index.d.ts.map +0 -1
- package/dist/tests/relativePositions.tests.d.ts +0 -11
- package/dist/tests/relativePositions.tests.d.ts.map +0 -1
- package/dist/tests/snapshot.tests.d.ts +0 -14
- package/dist/tests/snapshot.tests.d.ts.map +0 -1
- package/dist/tests/testHelper.d.ts +0 -171
- package/dist/tests/testHelper.d.ts.map +0 -1
- package/dist/tests/undo-redo.tests.d.ts +0 -27
- package/dist/tests/undo-redo.tests.d.ts.map +0 -1
- package/dist/tests/updates.tests.d.ts +0 -26
- package/dist/tests/updates.tests.d.ts.map +0 -1
- package/dist/tests/y-array.tests.d.ts +0 -43
- package/dist/tests/y-array.tests.d.ts.map +0 -1
- package/dist/tests/y-map.tests.d.ts +0 -42
- package/dist/tests/y-map.tests.d.ts.map +0 -1
- package/dist/tests/y-text.tests.d.ts +0 -49
- package/dist/tests/y-text.tests.d.ts.map +0 -1
- package/dist/tests/y-xml.tests.d.ts +0 -14
- package/dist/tests/y-xml.tests.d.ts.map +0 -1
- package/src/internals.js +0 -35
- package/src/structs/ContentAny.js +0 -115
- package/src/structs/ContentBinary.js +0 -93
- package/src/structs/ContentDeleted.js +0 -101
- package/src/structs/ContentDoc.js +0 -141
- package/src/structs/ContentEmbed.js +0 -98
- package/src/structs/ContentFormat.js +0 -105
- package/src/structs/ContentJSON.js +0 -119
- package/src/structs/ContentString.js +0 -113
- package/src/structs/ContentType.js +0 -152
- package/src/utils/IdMap.js +0 -673
- package/src/utils/IdSet.js +0 -825
package/src/utils/isParentOf.js
CHANGED
|
@@ -1,9 +1,7 @@
|
|
|
1
|
-
import { Item } from '../internals.js' // eslint-disable-line
|
|
2
|
-
|
|
3
1
|
/**
|
|
4
2
|
* Check if `parent` is a parent of `child`.
|
|
5
3
|
*
|
|
6
|
-
* @param {
|
|
4
|
+
* @param {YType} parent
|
|
7
5
|
* @param {Item|null} child
|
|
8
6
|
* @return {Boolean} Whether `parent` is a parent of `child`.
|
|
9
7
|
*
|
|
@@ -15,7 +13,7 @@ export const isParentOf = (parent, child) => {
|
|
|
15
13
|
if (child.parent === parent) {
|
|
16
14
|
return true
|
|
17
15
|
}
|
|
18
|
-
child = /** @type {
|
|
16
|
+
child = /** @type {YType} */ (child.parent)._item
|
|
19
17
|
}
|
|
20
18
|
return false
|
|
21
19
|
}
|
package/src/utils/logging.js
CHANGED
package/src/utils/meta.js
CHANGED
|
@@ -2,40 +2,50 @@
|
|
|
2
2
|
* Meta API for describing Yjs documents
|
|
3
3
|
*/
|
|
4
4
|
|
|
5
|
-
import * as idmap from './IdMap.js'
|
|
6
|
-
import * as idset from './IdSet.js'
|
|
7
|
-
import { IdSetEncoderV2 } from './UpdateEncoder.js'
|
|
8
|
-
import { IdSetDecoderV2 } from './UpdateDecoder.js'
|
|
9
5
|
import * as decoding from 'lib0/decoding'
|
|
10
6
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
7
|
+
import {
|
|
8
|
+
createIdSetFromIdMap,
|
|
9
|
+
createDeleteSetFromStructStore,
|
|
10
|
+
createInsertSetFromStructStore,
|
|
11
|
+
diffIdMap,
|
|
12
|
+
mergeIdMaps,
|
|
13
|
+
createIdSet,
|
|
14
|
+
mergeIdSets,
|
|
15
|
+
diffIdSet,
|
|
16
|
+
createIdMapFromIdSet,
|
|
17
|
+
writeIdSet,
|
|
18
|
+
readIdSet,
|
|
19
|
+
writeIdMap,
|
|
20
|
+
readIdMap,
|
|
21
|
+
intersectMaps,
|
|
22
|
+
intersectSets,
|
|
23
|
+
filterIdMap
|
|
24
|
+
} from './ids.js'
|
|
25
|
+
import { IdSetEncoderV2 } from './UpdateEncoder.js'
|
|
26
|
+
import { IdSetDecoderV2 } from './UpdateDecoder.js'
|
|
18
27
|
|
|
19
28
|
/**
|
|
20
|
-
* @param {
|
|
21
|
-
* @param {
|
|
29
|
+
* @param {IdSet} inserts
|
|
30
|
+
* @param {IdSet} deletes
|
|
31
|
+
* @return {ContentIds}
|
|
22
32
|
*/
|
|
23
|
-
export const createContentIds = (inserts =
|
|
33
|
+
export const createContentIds = (inserts = createIdSet(), deletes = createIdSet()) => ({ inserts, deletes })
|
|
24
34
|
|
|
25
35
|
/**
|
|
26
36
|
* @param {ContentMap} contentMap
|
|
27
37
|
*/
|
|
28
38
|
export const createContentIdsFromContentMap = contentMap => createContentIds(
|
|
29
|
-
|
|
30
|
-
|
|
39
|
+
createIdSetFromIdMap(contentMap.inserts),
|
|
40
|
+
createIdSetFromIdMap(contentMap.deletes)
|
|
31
41
|
)
|
|
32
42
|
|
|
33
43
|
/**
|
|
34
44
|
* @param {import('./Doc.js').Doc} ydoc
|
|
35
45
|
*/
|
|
36
46
|
export const createContentIdsFromDoc = ydoc => createContentIds(
|
|
37
|
-
|
|
38
|
-
|
|
47
|
+
createInsertSetFromStructStore(ydoc.store, false),
|
|
48
|
+
createDeleteSetFromStructStore(ydoc.store)
|
|
39
49
|
)
|
|
40
50
|
|
|
41
51
|
/**
|
|
@@ -50,47 +60,48 @@ export const createContentIdsFromDocDiff = (ydocPrev, ydocNext) =>
|
|
|
50
60
|
* @param {ContentIds} excludeContent
|
|
51
61
|
*/
|
|
52
62
|
export const excludeContentIds = (content, excludeContent) =>
|
|
53
|
-
createContentIds(
|
|
63
|
+
createContentIds(diffIdSet(content.inserts, excludeContent.inserts), diffIdSet(content.deletes, excludeContent.deletes))
|
|
54
64
|
|
|
55
65
|
/**
|
|
56
66
|
* @param {ContentMap} content
|
|
57
67
|
* @param {ContentIds | ContentMap} excludeContent
|
|
58
68
|
*/
|
|
59
69
|
export const excludeContentMap = (content, excludeContent) => createContentMap(
|
|
60
|
-
|
|
61
|
-
|
|
70
|
+
diffIdMap(content.inserts, excludeContent.inserts),
|
|
71
|
+
diffIdMap(content.deletes, excludeContent.deletes)
|
|
62
72
|
)
|
|
63
73
|
|
|
64
74
|
/**
|
|
65
75
|
* @param {Array<ContentMap>} contents
|
|
66
76
|
*/
|
|
67
77
|
export const mergeContentMaps = contents => createContentMap(
|
|
68
|
-
|
|
69
|
-
|
|
78
|
+
mergeIdMaps(contents.map(c => c.inserts)),
|
|
79
|
+
mergeIdMaps(contents.map(c => c.deletes))
|
|
70
80
|
)
|
|
71
81
|
|
|
72
82
|
/**
|
|
73
83
|
* @param {Array<ContentIds>} contents
|
|
74
84
|
*/
|
|
75
85
|
export const mergeContentIds = contents => createContentIds(
|
|
76
|
-
|
|
77
|
-
|
|
86
|
+
mergeIdSets(contents.map(c => c.inserts)),
|
|
87
|
+
mergeIdSets(contents.map(c => c.deletes))
|
|
78
88
|
)
|
|
79
89
|
|
|
80
90
|
/**
|
|
81
|
-
* @param {
|
|
82
|
-
* @param {
|
|
91
|
+
* @param {IdMap<any>} inserts
|
|
92
|
+
* @param {IdMap<any>} deletes
|
|
93
|
+
* @return {ContentMap}
|
|
83
94
|
*/
|
|
84
95
|
export const createContentMap = (inserts, deletes) => ({ inserts, deletes })
|
|
85
96
|
|
|
86
97
|
/**
|
|
87
98
|
* @param {ContentIds} contentIds
|
|
88
|
-
* @param {Array<
|
|
89
|
-
* @param {Array<
|
|
99
|
+
* @param {Array<ContentAttribute<any>>} insertAttrs
|
|
100
|
+
* @param {Array<ContentAttribute<any>>} [deleteAttrs]
|
|
90
101
|
*/
|
|
91
102
|
export const createContentMapFromContentIds = (contentIds, insertAttrs, deleteAttrs = insertAttrs) => createContentMap(
|
|
92
|
-
|
|
93
|
-
|
|
103
|
+
createIdMapFromIdSet(contentIds.inserts, insertAttrs),
|
|
104
|
+
createIdMapFromIdSet(contentIds.deletes, deleteAttrs)
|
|
94
105
|
)
|
|
95
106
|
|
|
96
107
|
/**
|
|
@@ -98,8 +109,8 @@ export const createContentMapFromContentIds = (contentIds, insertAttrs, deleteAt
|
|
|
98
109
|
* @param {ContentIds} contentIds
|
|
99
110
|
*/
|
|
100
111
|
export const writeContentIds = (encoder, contentIds) => {
|
|
101
|
-
|
|
102
|
-
|
|
112
|
+
writeIdSet(encoder, contentIds.inserts)
|
|
113
|
+
writeIdSet(encoder, contentIds.deletes)
|
|
103
114
|
}
|
|
104
115
|
|
|
105
116
|
/**
|
|
@@ -118,8 +129,8 @@ export const encodeContentIds = contentIds => {
|
|
|
118
129
|
* @return {ContentIds}
|
|
119
130
|
*/
|
|
120
131
|
export const readContentIds = decoder => createContentIds(
|
|
121
|
-
|
|
122
|
-
|
|
132
|
+
readIdSet(decoder),
|
|
133
|
+
readIdSet(decoder)
|
|
123
134
|
)
|
|
124
135
|
|
|
125
136
|
/**
|
|
@@ -134,8 +145,8 @@ export const decodeContentIds = buf => readContentIds(new IdSetDecoderV2(decodin
|
|
|
134
145
|
* @param {ContentMap} contentMap
|
|
135
146
|
*/
|
|
136
147
|
export const writeContentMap = (encoder, contentMap) => {
|
|
137
|
-
|
|
138
|
-
|
|
148
|
+
writeIdMap(encoder, contentMap.inserts)
|
|
149
|
+
writeIdMap(encoder, contentMap.deletes)
|
|
139
150
|
}
|
|
140
151
|
|
|
141
152
|
/**
|
|
@@ -145,8 +156,8 @@ export const writeContentMap = (encoder, contentMap) => {
|
|
|
145
156
|
* @return {ContentMap} contentMap
|
|
146
157
|
*/
|
|
147
158
|
export const readContentMap = (decoder) => createContentMap(
|
|
148
|
-
|
|
149
|
-
|
|
159
|
+
readIdMap(decoder),
|
|
160
|
+
readIdMap(decoder)
|
|
150
161
|
)
|
|
151
162
|
|
|
152
163
|
/**
|
|
@@ -163,8 +174,8 @@ export const encodeContentMap = contentMap => {
|
|
|
163
174
|
* @param {ContentMap|ContentIds} mapB
|
|
164
175
|
*/
|
|
165
176
|
export const intersectContentMap = (mapA, mapB) => createContentMap(
|
|
166
|
-
|
|
167
|
-
|
|
177
|
+
intersectMaps(mapA.inserts, mapB.inserts),
|
|
178
|
+
intersectMaps(mapA.deletes, mapB.deletes)
|
|
168
179
|
)
|
|
169
180
|
|
|
170
181
|
/**
|
|
@@ -172,8 +183,8 @@ export const intersectContentMap = (mapA, mapB) => createContentMap(
|
|
|
172
183
|
* @param {ContentIds|ContentMap} setB
|
|
173
184
|
*/
|
|
174
185
|
export const intersectContentIds = (setA, setB) => createContentIds(
|
|
175
|
-
|
|
176
|
-
|
|
186
|
+
intersectSets(setA.inserts, setB.inserts),
|
|
187
|
+
intersectSets(setA.deletes, setB.deletes)
|
|
177
188
|
)
|
|
178
189
|
|
|
179
190
|
/**
|
|
@@ -184,7 +195,7 @@ export const decodeContentMap = buf => readContentMap(new IdSetDecoderV2(decodin
|
|
|
184
195
|
/**
|
|
185
196
|
* @todo filter by array of content instead
|
|
186
197
|
* @param {ContentMap} contentMap
|
|
187
|
-
* @param {(c:Array<
|
|
188
|
-
* @param {(c:Array<
|
|
198
|
+
* @param {(c:Array<ContentAttribute<any>>)=>boolean} insertPredicate
|
|
199
|
+
* @param {(c:Array<ContentAttribute<any>>)=>boolean} deletePredicate
|
|
189
200
|
*/
|
|
190
|
-
export const filterContentMap = (contentMap, insertPredicate, deletePredicate) => createContentMap(
|
|
201
|
+
export const filterContentMap = (contentMap, insertPredicate, deletePredicate) => createContentMap(filterIdMap(contentMap.inserts, insertPredicate), filterIdMap(contentMap.deletes, deletePredicate))
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import * as s from 'lib0/schema'
|
|
2
|
+
import * as error from 'lib0/error'
|
|
3
|
+
import { ObservableV2 } from 'lib0/observable'
|
|
4
|
+
|
|
5
|
+
export const attributionJsonSchema = s.$object({
|
|
6
|
+
insert: s.$array(s.$string).optional,
|
|
7
|
+
insertAt: s.$number.optional,
|
|
8
|
+
delete: s.$array(s.$string).optional,
|
|
9
|
+
deleteAt: s.$number.optional,
|
|
10
|
+
format: s.$record(s.$string, s.$array(s.$string)).optional,
|
|
11
|
+
formatAt: s.$number.optional
|
|
12
|
+
})
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* @todo rename this to `insertBy`, `insertAt`, ..
|
|
16
|
+
*
|
|
17
|
+
* @typedef {s.Unwrap<typeof attributionJsonSchema>} Attribution
|
|
18
|
+
*/
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* @template T
|
|
22
|
+
*/
|
|
23
|
+
export class AttributedContent {
|
|
24
|
+
/**
|
|
25
|
+
* @param {AbstractContent} content
|
|
26
|
+
* @param {number} clock
|
|
27
|
+
* @param {boolean} deleted
|
|
28
|
+
* @param {Array<ContentAttribute<T>> | null} attrs
|
|
29
|
+
* @param {0|1|2} renderBehavior
|
|
30
|
+
*/
|
|
31
|
+
constructor (content, clock, deleted, attrs, renderBehavior) {
|
|
32
|
+
this.content = content
|
|
33
|
+
this.clock = clock
|
|
34
|
+
this.deleted = deleted
|
|
35
|
+
this.attrs = attrs
|
|
36
|
+
this.render = renderBehavior === 0 ? false : (renderBehavior === 1 ? (!deleted || attrs != null) : true)
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* Abstract base class for renderers. A renderer renders Content (with Attributions) to a delta.
|
|
42
|
+
*
|
|
43
|
+
* Should fire an event when the attributions changed _after_ the original change happens. This
|
|
44
|
+
* Event will be used to update the attribution on the current content.
|
|
45
|
+
*
|
|
46
|
+
* @extends {ObservableV2<{change:(idset:IdSet,origin:any,local:boolean)=>void}>}
|
|
47
|
+
*/
|
|
48
|
+
export class AbstractRenderer extends ObservableV2 {
|
|
49
|
+
/**
|
|
50
|
+
* @param {Array<AttributedContent<any>>} _contents - where to write the result
|
|
51
|
+
* @param {number} _client
|
|
52
|
+
* @param {number} _clock
|
|
53
|
+
* @param {boolean} _deleted
|
|
54
|
+
* @param {AbstractContent} _content
|
|
55
|
+
* @param {0|1|2} _shouldRender - 0: if undeleted or attributed, render as a retain operation. 1: render only if undeleted or attributed. 2: render as insert operation (if unattributed and deleted, render as delete).
|
|
56
|
+
*/
|
|
57
|
+
readContent (_contents, _client, _clock, _deleted, _content, _shouldRender) {
|
|
58
|
+
error.methodUnimplemented()
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* Calculate the length of the attributed content. This is used by iterators that walk through the
|
|
63
|
+
* content.
|
|
64
|
+
*
|
|
65
|
+
* If the content is not countable, it should return 0.
|
|
66
|
+
*
|
|
67
|
+
* @param {Item} _item
|
|
68
|
+
* @return {number}
|
|
69
|
+
*/
|
|
70
|
+
contentLength (_item) {
|
|
71
|
+
error.methodUnimplemented()
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
export const $renderer = AbstractRenderer.prototype.$type = s.$type('y:r', AbstractRenderer)
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* The default renderer. Renders content as-is, without looking up any attributions.
|
|
79
|
+
*
|
|
80
|
+
* @implements AbstractRenderer
|
|
81
|
+
*
|
|
82
|
+
* @extends {ObservableV2<{change:(idset:IdSet,origin:any,local:boolean)=>void}>}
|
|
83
|
+
*/
|
|
84
|
+
export class BaseRenderer extends ObservableV2 {
|
|
85
|
+
get $type () { return $renderer }
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* @param {Array<AttributedContent<any>>} contents - where to write the result
|
|
89
|
+
* @param {number} _client
|
|
90
|
+
* @param {number} clock
|
|
91
|
+
* @param {boolean} deleted
|
|
92
|
+
* @param {AbstractContent} content
|
|
93
|
+
* @param {0|1|2} shouldRender - whether this should render or just result in a `retain` operation
|
|
94
|
+
*/
|
|
95
|
+
readContent (contents, _client, clock, deleted, content, shouldRender) {
|
|
96
|
+
if (!deleted || shouldRender) {
|
|
97
|
+
contents.push(new AttributedContent(content, clock, deleted, null, shouldRender))
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
/**
|
|
102
|
+
* @param {Item} item
|
|
103
|
+
* @return {number}
|
|
104
|
+
*/
|
|
105
|
+
contentLength (item) {
|
|
106
|
+
return (item.deleted || !item.content.isCountable()) ? 0 : item.length
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
export const baseRenderer = new BaseRenderer()
|