@@ -2,23 +2,44 @@ import type {Peritext} from '../Peritext';
2
2
import type { SliceType } from '../slice/types' ;
3
3
import type { MarkerSlice } from '../slice/MarkerSlice' ;
4
4
import type { Slices } from '../slice/Slices' ;
5
+ import type { ITimestampStruct } from '../../../json-crdt-patch' ;
6
+ import type { PersistedSlice } from '../slice/PersistedSlice' ;
7
+ import type { Cursor } from './Cursor' ;
5
8
6
9
export class EditorSlices < T = string > {
7
10
constructor (
8
11
protected readonly txt : Peritext < T > ,
9
12
protected readonly slices : Slices < T > ,
10
13
) { }
11
14
15
+ protected insAtCursors < S extends PersistedSlice < T > > ( callback : ( cursor : Cursor < T > ) => S ) : S [ ] {
16
+ const slices : S [ ] = [ ] ;
17
+ this . txt . editor . cursors ( ( cursor ) => {
18
+ const slice = callback ( cursor ) ;
19
+ slices . push ( slice ) ;
20
+ } ) ;
21
+ return slices ;
22
+ }
23
+
24
+ public insStack ( type : SliceType , data ?: unknown | ITimestampStruct ) : PersistedSlice < T > [ ] {
25
+ return this . insAtCursors ( ( cursor ) => this . slices . insStack ( cursor . range ( ) , type , data ) ) ;
26
+ }
27
+
28
+ public insOverwrite ( type : SliceType , data ?: unknown | ITimestampStruct ) : PersistedSlice < T > [ ] {
29
+ return this . insAtCursors ( ( cursor ) => this . slices . insOverwrite ( cursor . range ( ) , type , data ) ) ;
30
+ }
31
+
32
+ public insErase ( type : SliceType , data ?: unknown | ITimestampStruct ) : PersistedSlice < T > [ ] {
33
+ return this . insAtCursors ( ( cursor ) => this . slices . insErase ( cursor . range ( ) , type , data ) ) ;
34
+ }
35
+
12
36
public insMarker ( type : SliceType , data ?: unknown , separator ?: string ) : MarkerSlice < T > [ ] {
13
- const { txt, slices} = this ;
14
- const markers : MarkerSlice < T > [ ] = [ ] ;
15
- txt . editor . cursors ( ( cursor ) => {
37
+ return this . insAtCursors ( ( cursor ) => {
16
38
cursor . collapse ( ) ;
17
39
const after = cursor . start . clone ( ) ;
18
40
after . refAfter ( ) ;
19
- const marker = slices . insMarkerAfter ( after . id , type , data , separator ) ;
20
- markers . push ( marker ) ;
41
+ const marker = this . slices . insMarkerAfter ( after . id , type , data , separator ) ;
42
+ return marker ;
21
43
} ) ;
22
- return markers ;
23
44
}
24
45
}
0 commit comments