Skip to content

Commit de2fbf5

Browse files
committed
Add blanks into the view model as embeds
1 parent 8fd16d2 commit de2fbf5

File tree

16 files changed

+4505
-4337
lines changed

16 files changed

+4505
-4337
lines changed

src/SIL.XForge.Scripture/ClientApp/src/app/checking/checking/checking.component.spec.ts

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -490,6 +490,7 @@ describe('CheckingComponent', () => {
490490
env.setBookChapter('JHN', 2);
491491
env.fixture.detectChanges();
492492
expect(env.component.questionsList!.activeQuestionDoc!.data!.dataId).toBe('q15Id');
493+
tick();
493494
flush();
494495
discardPeriodicTasks();
495496
}));
@@ -3847,19 +3848,15 @@ class TestEnvironment {
38473848
private createTextDataForChapter(chapter: number): TextData {
38483849
const delta = new Delta();
38493850
delta.insert({ chapter: { number: chapter.toString(), style: 'c' } });
3850-
delta.insert({ blank: true }, { segment: 'p_1' });
38513851
delta.insert({ verse: { number: '1', style: 'v' } });
38523852
delta.insert(`target: chapter ${chapter}, verse 1.`, { segment: `verse_${chapter}_1` });
38533853
delta.insert({ verse: { number: '2', style: 'v' } });
3854-
delta.insert({ blank: true }, { segment: `verse_${chapter}_2` });
38553854
delta.insert('\n', { para: { style: 'p' } });
3856-
delta.insert({ blank: true }, { segment: `verse_${chapter}_2/p_1` });
38573855
delta.insert({ verse: { number: '3', style: 'v' } });
38583856
delta.insert(`target: chapter ${chapter}, verse 3.`, { segment: `verse_${chapter}_3` });
38593857
delta.insert({ verse: { number: '4', style: 'v' } });
38603858
delta.insert(`target: chapter ${chapter}, verse 4.`, { segment: `verse_${chapter}_4` });
38613859
delta.insert('\n', { para: { style: 'p' } });
3862-
delta.insert({ blank: true }, { segment: `verse_${chapter}_4/p_1` });
38633860
delta.insert({ verse: { number: '5', style: 'v' } });
38643861
delta.insert(`target: chapter ${chapter}, `, { segment: `verse_${chapter}_5` });
38653862
delta.insert('\n', { para: { style: 'p' } });

src/SIL.XForge.Scripture/ClientApp/src/app/shared/test-utils.ts

Lines changed: 25 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -21,30 +21,30 @@ import { RIGHT_TO_LEFT_MARK } from './utils';
2121
\v 7 target: chapter 1, verse 7.
2222
\p target: chapter 1, verse 7 - 2nd paragraph.
2323
*/
24-
export function getTextDoc(id: TextDocId): TextData {
24+
export function getTextDoc(id: TextDocId, modelHasBlanks: boolean = false): TextData {
2525
const delta = new Delta();
2626
delta.insert(`Title for chapter ${id.chapterNum}`, { segment: 's_1' });
2727
delta.insert('\n', { para: { style: 's' } });
2828
delta.insert({ chapter: { number: id.chapterNum.toString(), style: 'c' } });
29-
delta.insert({ blank: true }, { segment: 'p_1' });
29+
if (modelHasBlanks) delta.insert({ blank: true }, { segment: 'p_1' });
3030
delta.insert({ verse: { number: '1', style: 'v' } });
3131
delta.insert(`${id.textType}: chapter ${id.chapterNum}, verse 1.`, { segment: `verse_${id.chapterNum}_1` });
3232
delta.insert({ verse: { number: '2', style: 'v' } });
33-
delta.insert({ blank: true }, { segment: `verse_${id.chapterNum}_2` });
33+
if (modelHasBlanks) delta.insert({ blank: true }, { segment: `verse_${id.chapterNum}_2` });
3434
delta.insert({ verse: { number: '3', style: 'v' } });
3535
delta.insert(`${id.textType}: chapter ${id.chapterNum}, verse 3.`, { segment: `verse_${id.chapterNum}_3` });
3636
delta.insert({ verse: { number: '4', style: 'v' } });
3737
delta.insert(`${id.textType}: chapter ${id.chapterNum}, verse 4.`, { segment: `verse_${id.chapterNum}_4` });
3838
delta.insert('\n', { para: { style: 'p' } });
39-
delta.insert({ blank: true }, { segment: `verse_${id.chapterNum}_4/p_1` });
39+
if (modelHasBlanks) delta.insert({ blank: true }, { segment: `verse_${id.chapterNum}_4/p_1` });
4040
delta.insert({ verse: { number: '5', style: 'v' } });
4141
delta.insert(`${id.textType}: chapter ${id.chapterNum}, `, { segment: `verse_${id.chapterNum}_5` });
4242
delta.insert('\n', { para: { style: 'p' } });
43-
delta.insert({ blank: true }, { segment: `verse_${id.chapterNum}_5/p_1` });
43+
if (modelHasBlanks) delta.insert({ blank: true }, { segment: `verse_${id.chapterNum}_5/p_1` });
4444
delta.insert({ verse: { number: '6', style: 'v' } });
4545
delta.insert(`${id.textType}: chapter ${id.chapterNum}, verse 6. `, { segment: `verse_${id.chapterNum}_6` });
4646
delta.insert('\n', { para: { style: 'p' } });
47-
delta.insert({ blank: true }, { segment: `verse_${id.chapterNum}_6/p_1` });
47+
if (modelHasBlanks) delta.insert({ blank: true }, { segment: `verse_${id.chapterNum}_6/p_1` });
4848
delta.insert({ verse: { number: '7', style: 'v' } });
4949
delta.insert(`${id.textType}: chapter ${id.chapterNum}, verse 7.`, { segment: `verse_${id.chapterNum}_7` });
5050
delta.insert('\n', { para: { style: 'p' } });
@@ -68,14 +68,18 @@ export function getTextDoc(id: TextDocId): TextData {
6868
\v 6a target: chapter 1, verse 6a.
6969
\v 6b target: chapter 1, verse 6b.
7070
*/
71-
export function getCombinedVerseTextDoc(id: TextDocId, rtl: boolean = false): TextData {
71+
export function getCombinedVerseTextDoc(
72+
id: TextDocId,
73+
modelHasBlanks: boolean = false,
74+
rtl: boolean = false
75+
): TextData {
7276
const verse2Str: string = rtl ? `2${RIGHT_TO_LEFT_MARK}-3` : '2-3';
7377
const verse5Str: string = rtl ? `5${RIGHT_TO_LEFT_MARK},7` : '5,7';
7478
const delta = new Delta();
7579
delta.insert(`Title for chapter ${id.chapterNum}`, { segment: 's_1' });
7680
delta.insert('\n', { para: { style: 's' } });
7781
delta.insert({ chapter: { number: id.chapterNum.toString(), style: 'c' } });
78-
delta.insert({ blank: true }, { segment: 'p_1' });
82+
if (modelHasBlanks) delta.insert({ blank: true }, { segment: 'p_1' });
7983
delta.insert({ verse: { number: '1', style: 'v' } });
8084
delta.insert(`${id.textType}: chapter ${id.chapterNum}, verse 1.`, { segment: `verse_${id.chapterNum}_1` });
8185
delta.insert({ verse: { number: verse2Str, style: 'v' } });
@@ -85,7 +89,7 @@ export function getCombinedVerseTextDoc(id: TextDocId, rtl: boolean = false): Te
8589
delta.insert('\n', { para: { style: 'p' } });
8690
delta.insert('Text in section heading', { segment: 's_2' });
8791
delta.insert('\n', { para: { style: 's' } });
88-
delta.insert({ blank: true }, { segment: 'p_2' });
92+
if (modelHasBlanks) delta.insert({ blank: true }, { segment: 'p_2' });
8993
delta.insert({ verse: { number: '4', style: 'v' } });
9094
delta.insert(`${id.textType}: chapter ${id.chapterNum}, verse 4.`, { segment: `verse_${id.chapterNum}_4` });
9195
delta.insert({ verse: { number: verse5Str, style: 'v' } });
@@ -110,18 +114,18 @@ export function getCombinedVerseTextDoc(id: TextDocId, rtl: boolean = false): Te
110114
\q Poetry third line
111115
\q Poetry fourth line
112116
*/
113-
export function getPoetryVerseTextDoc(id: TextDocId): TextData {
117+
export function getPoetryVerseTextDoc(id: TextDocId, modelHasBlanks: boolean = false): TextData {
114118
const delta = new Delta();
115119
delta.insert(`Title for chapter ${id.chapterNum}`, { segment: 's_1' });
116120
delta.insert('\n', { para: { style: 's' } });
117121
delta.insert({ chapter: { number: id.chapterNum.toString(), style: 'c' } });
118-
delta.insert({ blank: true }, { segment: 'q_1' });
122+
if (modelHasBlanks) delta.insert({ blank: true }, { segment: 'q_1' });
119123
delta.insert({ verse: { number: '1', style: 'v' } });
120124
delta.insert('Poetry first line', { segment: `verse_${id.chapterNum}_1` });
121125
delta.insert('\n', { para: { style: 'q' } });
122126
delta.insert('Poetry second line', { segment: `verse_${id.chapterNum}_1/q_1` });
123127
delta.insert('\n', { para: { style: 'q' } });
124-
delta.insert({ blank: true }, { segment: `verse_${id.chapterNum}_1/b_2` });
128+
if (modelHasBlanks) delta.insert({ blank: true }, { segment: `verse_${id.chapterNum}_1/b_2` });
125129
delta.insert('\n', { para: { style: 'b' } });
126130
delta.insert('Poetry third line', { segment: `verse_${id.chapterNum}_1/q_3` });
127131
delta.insert('\n', { para: { style: 'q' } });
@@ -141,24 +145,24 @@ export function getPoetryVerseTextDoc(id: TextDocId): TextData {
141145
\p
142146
\v 3
143147
*/
144-
export function getEmptyChapterDoc(id: TextDocId): TextData {
148+
export function getEmptyChapterDoc(id: TextDocId, modelHasBlanks: boolean = false): TextData {
145149
const delta = new Delta();
146-
delta.insert({ blank: true }, { segment: 's_1' });
150+
if (modelHasBlanks) delta.insert({ blank: true }, { segment: 's_1' });
147151
delta.insert('\n', { para: { style: 's' } });
148152
delta.insert({ chapter: { number: id.chapterNum.toString(), style: 'c' } });
149-
delta.insert({ blank: true }, { segment: 's_2' });
153+
if (modelHasBlanks) delta.insert({ blank: true }, { segment: 's_2' });
150154
delta.insert('\n', { para: { style: 's' } });
151-
delta.insert({ blank: true }, { segment: 'p_1' });
155+
if (modelHasBlanks) delta.insert({ blank: true }, { segment: 'p_1' });
152156
delta.insert({ verse: { number: '1', style: 'v' } });
153-
delta.insert({ blank: true }, { segment: 'verse_1_1' });
157+
if (modelHasBlanks) delta.insert({ blank: true }, { segment: 'verse_1_1' });
154158
delta.insert({ verse: { number: '2', style: 'v' } });
155-
delta.insert({ blank: true }, { segment: 'verse_1_2' });
159+
if (modelHasBlanks) delta.insert({ blank: true }, { segment: 'verse_1_2' });
156160
delta.insert('\n', { para: { style: 'p' } });
157-
delta.insert({ blank: true }, { segment: 's_3' });
161+
if (modelHasBlanks) delta.insert({ blank: true }, { segment: 's_3' });
158162
delta.insert('\n', { para: { style: 's' } });
159-
delta.insert({ blank: true }, { segment: 'p_2' });
163+
if (modelHasBlanks) delta.insert({ blank: true }, { segment: 'p_2' });
160164
delta.insert({ verse: { number: '3', style: 'v' } });
161-
delta.insert({ blank: true }, { segment: 'verse_1_3' });
165+
if (modelHasBlanks) delta.insert({ blank: true }, { segment: 'verse_1_3' });
162166
delta.insert('\n', { para: { style: 'p' } });
163167
return delta;
164168
}

src/SIL.XForge.Scripture/ClientApp/src/app/shared/text/quill-editor-registration/quill-formats/quill-blots.ts

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -131,12 +131,20 @@ export class BlankEmbed extends QuillEmbedBlot {
131131

132132
static create(value: boolean): Node {
133133
const node = super.create(value) as HTMLElement;
134+
setUsxValue(node, value);
134135
node.innerText = NBSP.repeat(8);
135136
return node;
136137
}
137138

138-
static value(_node: HTMLElement): boolean {
139-
return true;
139+
static value(node: HTMLElement): boolean {
140+
return getUsxValue(node);
141+
}
142+
143+
value(): any {
144+
// The base implementation will always return true, so we override it to allow { blank: false }
145+
return {
146+
[this.statics.blotName]: this.statics.value(this.domNode)
147+
};
140148
}
141149

142150
static formats(node: HTMLElement): any {

src/SIL.XForge.Scripture/ClientApp/src/app/shared/text/quill-editor-registration/quill-history.spec.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,12 +56,12 @@ describe('Quill history', () => {
5656
},
5757
{
5858
name: 'mixed text and embeds with trailing text',
59-
delta: new Delta().insert({ blank: true }).insert('text').insert({ image: 'test.jpg' }).insert('more'),
59+
delta: new Delta().insert({ image: 'test1.jpg' }).insert('text').insert({ image: 'test.jpg' }).insert('more'),
6060
expected: 10
6161
},
6262
{
6363
name: 'mixed text and embeds with trailing embed',
64-
delta: new Delta().insert({ blank: true }).insert('text').insert({ image: 'test.jpg' }),
64+
delta: new Delta().insert({ image: 'test1.jpg' }).insert('text').insert({ image: 'test.jpg' }),
6565
expected: 5
6666
},
6767
{

0 commit comments

Comments
 (0)