Skip to content
Snippets Groups Projects
Commit a3e857a7 authored by jojohoch's avatar jojohoch
Browse files

[player] Consolidate respnses for text elements in 'word' nmarking mode

parent 5a212b98
No related branches found
No related tags found
No related merge requests found
Pipeline #68611 failed
Player
======
## 2.6.4
### Fehlerbehebungen
- Fasst aufeinanderfolgende markierte Wörter in den Antwortdaten von Texten zu Bereichen zusammen
## 2.6.0
### Neue Funktionen
- Unterstützt Verona API 6.0
......
......@@ -25,12 +25,25 @@ export class MarkableSupport {
createMarkables(savedMarks: string[], elementComponent: TextComponent): void {
const nodes = MarkableSupport.getNodes(elementComponent.textContainerRef.nativeElement.childNodes);
const markablesContainers = MarkableSupport.getMarkablesContainers(nodes, savedMarks);
const markablesContainers = MarkableSupport
.getMarkablesContainers(nodes, MarkableSupport.expandSavedMarks(savedMarks));
const markables = markablesContainers
.flatMap((markablesContainer: MarkablesContainer) => markablesContainer.markables);
this.createComponents(markablesContainers, elementComponent, markables);
}
private static expandSavedMarks(savedMarks: string[]): string[] {
return savedMarks.flatMap(range => {
const [start, end, color] = range.split('-');
const startIndex = parseInt(start, 10);
const endIndex = parseInt(end, 10);
return Array.from({ length: endIndex - startIndex + 1 }, (_, i) => {
const currentIdx = startIndex + i;
return `${currentIdx}-${currentIdx}-${color}`;
});
});
}
private createComponents(markablesContainers: MarkablesContainer[],
elementComponent: TextComponent,
markables: Markable[]): void {
......
......@@ -101,7 +101,7 @@ export class ElementModelElementCodeMappingService {
}
if (options && (options.markingMode === 'word' || options.markingMode === 'range')) {
return ElementModelElementCodeMappingService
.getMarkedMarkables(elementModelValue as Markable[]);
.getMarkedMarkablesInSelectionFormat(elementModelValue as Markable[]);
}
return [];
case 'radio':
......@@ -119,14 +119,22 @@ export class ElementModelElementCodeMappingService {
return this.dragNDropValueObjects.find(dropListValue => dropListValue.alias === alias);
}
static getMarkedMarkables(markables: Markable[]): string[] {
static getMarkedMarkablesInSelectionFormat(markables: Markable[]): string[] {
return markables
.filter((markable: Markable) => !!markable.color)
.map((markable: Markable) => ElementModelElementCodeMappingService
.mapToTextSelectionFormat(markable, markable.color));
}
private static mapToTextSelectionFormat(markable: Markable, color: string | null): string {
return `${markable.id}-${markable.id}-${color}`;
.reduce((acc: [number, number, (string | null)][], markable: Markable) => {
const [start, end, color] = [markable.id, markable.id, markable.color];
const lastEntry = acc[acc.length - 1];
if (lastEntry) {
const [lastStart, lastEnd, lastColor] = lastEntry;
if (lastColor === color && +lastEnd + 1 === +start) {
acc[acc.length - 1] = [lastStart, end, color];
return acc;
}
}
acc.push([start, end, color]);
return acc;
}, [])
.map(e => `${e[0]}-${e[1]}-${e[2]}`);
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment