Merge pull request #5398 from CatoTH/bugfix-non-paragraph-based-amendments

Bugfix non paragraph based amendments
This commit is contained in:
Emanuel Schütze 2020-06-09 20:53:03 +02:00 committed by GitHub
commit e1345cb808
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 63 additions and 41 deletions

View File

@ -324,7 +324,7 @@ export class MotionRepositoryService extends BaseIsAgendaItemAndListOfSpeakersCo
type: 'custom', type: 'custom',
ownKey: 'diffLines', ownKey: 'diffLines',
get: (motion: Motion, viewMotion: ViewMotion) => { get: (motion: Motion, viewMotion: ViewMotion) => {
if (viewMotion.parent) { if (viewMotion.parent && viewMotion.isParagraphBasedAmendment()) {
const changeRecos = viewMotion.changeRecommendations.filter(changeReco => const changeRecos = viewMotion.changeRecommendations.filter(changeReco =>
changeReco.showInFinalView() changeReco.showInFinalView()
); );
@ -335,6 +335,8 @@ export class MotionRepositoryService extends BaseIsAgendaItemAndListOfSpeakersCo
changeRecos, changeRecos,
false false
); );
} else {
return [];
} }
}, },
getCacheObjectToCheck: (viewMotion: ViewMotion) => viewMotion.parent getCacheObjectToCheck: (viewMotion: ViewMotion) => viewMotion.parent
@ -835,7 +837,9 @@ export class MotionRepositoryService extends BaseIsAgendaItemAndListOfSpeakersCo
} }
/** /**
* Returns all paragraph lines that are affected by the given amendment in diff-format, including context * Returns all paragraph lines that are affected by the given amendment in diff-format, including context.
*
* Should only be called for paragraph-based amendments.
* *
* @param {ViewMotion} amendment * @param {ViewMotion} amendment
* @param {number} lineLength * @param {number} lineLength

View File

@ -377,8 +377,11 @@ export class LinenumberingService {
* @returns {LineNumberRange} * @returns {LineNumberRange}
*/ */
public getLineNumberRange(html: string): LineNumberRange { public getLineNumberRange(html: string): LineNumberRange {
const cacheKey = this.djb2hash(html);
let range = this.lineNumberCache.get(cacheKey);
if (!range) {
const fragment = this.htmlToFragment(html); const fragment = this.htmlToFragment(html);
const range = { range = {
from: null, from: null,
to: null to: null
}; };
@ -393,6 +396,8 @@ export class LinenumberingService {
range.to = number + 1; range.to = number + 1;
} }
} }
}
this.lineNumberCache.put(cacheKey, range);
return range; return range;
} }
@ -482,10 +487,17 @@ export class LinenumberingService {
* @return {string[]} * @return {string[]}
*/ */
public splitToParagraphs(html: string): string[] { public splitToParagraphs(html: string): string[] {
const cacheKey = this.djb2hash(html);
let cachedParagraphs = this.lineNumberCache.get(cacheKey);
if (!cachedParagraphs) {
const fragment = this.htmlToFragment(html); const fragment = this.htmlToFragment(html);
return this.splitNodeToParagraphs(fragment).map((node: Element): string => { cachedParagraphs = this.splitNodeToParagraphs(fragment).map((node: Element): string => {
return node.outerHTML; return node.outerHTML;
}); });
this.lineNumberCache.put(cacheKey, cachedParagraphs);
}
return cachedParagraphs;
} }
/** /**

View File

@ -322,11 +322,6 @@ export class MotionDetailComponent extends BaseViewComponent implements OnInit,
*/ */
public showAmendmentContext = false; public showAmendmentContext = false;
/**
* Sets the current amendment text mode from the settings
*/
private amendmentTextMode: string;
/** /**
* Show all amendments in the text, not only the ones with the apropriate state * Show all amendments in the text, not only the ones with the apropriate state
*/ */
@ -540,9 +535,6 @@ export class MotionDetailComponent extends BaseViewComponent implements OnInit,
this.configService this.configService
.get<boolean>('motions_show_sequential_numbers') .get<boolean>('motions_show_sequential_numbers')
.subscribe(shown => (this.showSequential = shown)); .subscribe(shown => (this.showSequential = shown));
this.configService
.get<string>('motions_amendments_text_mode')
.subscribe(amendmentTextMode => (this.amendmentTextMode = amendmentTextMode));
// Update statute paragraphs // Update statute paragraphs
this.statuteRepo.getViewModelListObservable().subscribe(newViewStatuteParagraphs => { this.statuteRepo.getViewModelListObservable().subscribe(newViewStatuteParagraphs => {
@ -649,7 +641,9 @@ export class MotionDetailComponent extends BaseViewComponent implements OnInit,
}); });
} }
if (this.amendments) { if (this.amendments) {
this.amendments.forEach((amendment: ViewMotion): void => { this.amendments
.filter(amendment => amendment.isParagraphBasedAmendment())
.forEach((amendment: ViewMotion): void => {
const toApplyChanges = (this.amendmentChangeRecos[amendment.id] || []).filter( const toApplyChanges = (this.amendmentChangeRecos[amendment.id] || []).filter(
// The rejected change recommendations for amendments should not be considered // The rejected change recommendations for amendments should not be considered
change => change.showInFinalView() change => change.showInFinalView()
@ -750,7 +744,8 @@ export class MotionDetailComponent extends BaseViewComponent implements OnInit,
tags_id: parentMotion.tags_id tags_id: parentMotion.tags_id
}); });
if (this.amendmentTextMode === 'fulltext') { const amendmentTextMode = this.configService.instant<string>('motions_amendments_text_mode');
if (amendmentTextMode === 'fulltext') {
defaultMotion.text = parentMotion.text; defaultMotion.text = parentMotion.text;
this.contentForm.patchValue({ text: defaultMotion.text }); this.contentForm.patchValue({ text: defaultMotion.text });
} }
@ -1219,7 +1214,8 @@ export class MotionDetailComponent extends BaseViewComponent implements OnInit,
* Goes to the amendment creation wizard. Executed via click. * Goes to the amendment creation wizard. Executed via click.
*/ */
public createAmendment(): void { public createAmendment(): void {
if (this.amendmentTextMode === 'paragraph') { const amendmentTextMode = this.configService.instant<string>('motions_amendments_text_mode');
if (amendmentTextMode === 'paragraph') {
this.router.navigate(['./create-amendment'], { relativeTo: this.route }); this.router.navigate(['./create-amendment'], { relativeTo: this.route });
} else { } else {
this.router.navigate(['./motions/new-amendment'], { this.router.navigate(['./motions/new-amendment'], {
@ -1551,6 +1547,16 @@ export class MotionDetailComponent extends BaseViewComponent implements OnInit,
* a change reco. The autoupdate has to come "after" this routine * a change reco. The autoupdate has to come "after" this routine
*/ */
return ChangeRecoMode.Original; return ChangeRecoMode.Original;
} else if (
mode === ChangeRecoMode.Diff &&
!this.changeRecommendations?.length &&
this.motion?.isParagraphBasedAmendment()
) {
/**
* The Diff view for paragraph-based amendments is only relevant for change recommendations;
* the regular amendment changes are shown in the "original" view.
*/
return ChangeRecoMode.Original;
} }
return mode; return mode;
} }