From d893f3dbe51baf74ddae7a6d062f4b0925b4f7d2 Mon Sep 17 00:00:00 2001 From: Finn Stutzenstein Date: Tue, 8 Sep 2020 14:51:44 +0200 Subject: [PATCH] Always include CRs in motion slide Show Amendment CR in Projector Shows the amendment CR in the projector if the projected slide is in diff version. Only shows direct Change recos to amended paragraphs --- .../src/app/core/ui-services/diff.service.ts | 23 +++++++++++++++---- .../motion/motion-slide.component.html | 4 ++-- .../motions/motion/motion-slide.component.ts | 21 ++++++++++------- server/openslides/motions/projector.py | 19 +++++++-------- server/tests/unit/motions/test_projector.py | 2 ++ 5 files changed, 45 insertions(+), 24 deletions(-) diff --git a/client/src/app/core/ui-services/diff.service.ts b/client/src/app/core/ui-services/diff.service.ts index 3772dbe85..429a671e2 100644 --- a/client/src/app/core/ui-services/diff.service.ts +++ b/client/src/app/core/ui-services/diff.service.ts @@ -1,6 +1,6 @@ import { Injectable } from '@angular/core'; -import { LineNumberedString, LinenumberingService } from './linenumbering.service'; +import { LineNumberedString, LinenumberingService, LineNumberRange } from './linenumbering.service'; import { ViewUnifiedChange } from '../../shared/models/motions/view-unified-change'; const ELEMENT_NODE = 1; @@ -2149,11 +2149,24 @@ export class DiffService { paragraphNo: number, origText: string, newText: string, - lineLength: number + lineLength: number, + changeRecos?: ViewUnifiedChange[] ): DiffLinesInParagraph { - const paragraph_line_range = this.lineNumberingService.getLineNumberRange(origText), - diff = this.diff(origText, newText), - affected_lines = this.detectAffectedLineRange(diff); + const paragraph_line_range: LineNumberRange = this.lineNumberingService.getLineNumberRange(origText); + let diff = this.diff(origText, newText); + const affected_lines = this.detectAffectedLineRange(diff); + + /** + * If the affect line has change recos, overwirte the diff with the change reco + */ + if (changeRecos && changeRecos.length) { + const recoToThisLine = changeRecos.find(reco => { + return reco.getLineFrom() === affected_lines.from; + }); + if (recoToThisLine) { + diff = this.diff(origText, recoToThisLine.getChangeNewText()); + } + } if (affected_lines === null) { return null; diff --git a/client/src/app/slides/motions/motion/motion-slide.component.html b/client/src/app/slides/motions/motion/motion-slide.component.html index 7a594df69..da4608861 100644 --- a/client/src/app/slides/motions/motion/motion-slide.component.html +++ b/client/src/app/slides/motions/motion/motion-slide.component.html @@ -68,7 +68,6 @@ - @@ -78,7 +77,8 @@ {{ preamble | translate }} + {{ preamble | translate }} diff --git a/client/src/app/slides/motions/motion/motion-slide.component.ts b/client/src/app/slides/motions/motion/motion-slide.component.ts index 0d030af40..103522400 100644 --- a/client/src/app/slides/motions/motion/motion-slide.component.ts +++ b/client/src/app/slides/motions/motion/motion-slide.component.ts @@ -78,6 +78,9 @@ export class MotionSlideComponent extends BaseMotionSlideComponent { - if (newText === null) { + (amendmentText: string, paraNo: number): DiffLinesInParagraph => { + if (amendmentText === null) { return null; } - // Hint: can be either DiffLinesInParagraph or null, if no changes are made return this.diff.getAmendmentParagraphsLines( paraNo, baseParagraphs[paraNo], - newText, - this.lineLength + amendmentText, + this.lineLength, + this.crMode === ChangeRecoMode.Diff ? this.getAllTextChangingObjects() : undefined ); } ) .filter((para: DiffLinesInParagraph) => para !== null); + + return amendmentParagraphs; } /** diff --git a/server/openslides/motions/projector.py b/server/openslides/motions/projector.py index c9801c3a6..16c46f622 100644 --- a/server/openslides/motions/projector.py +++ b/server/openslides/motions/projector.py @@ -192,7 +192,6 @@ async def motion_slide( motions_preamble = await get_config(all_data_provider, "motions_preamble") # Query all change-recommendation and amendment related things. - change_recommendations = [] # type: ignore amendments = [] # type: ignore base_motion = None base_statute = None @@ -201,16 +200,18 @@ async def motion_slide( elif motion["parent_id"] is not None and motion["amendment_paragraphs"]: base_motion = await get_amendment_base_motion(motion, all_data_provider) else: - for change_recommendation_id in motion["change_recommendations_id"]: - cr = await get_model( - all_data_provider, - "motions/motion-change-recommendation", - change_recommendation_id, - ) - if cr is not None and not cr["internal"]: - change_recommendations.append(cr) amendments = await get_amendments_for_motion(motion, all_data_provider) + change_recommendations = [] # type: ignore + for change_recommendation_id in motion["change_recommendations_id"]: + cr = await get_model( + all_data_provider, + "motions/motion-change-recommendation", + change_recommendation_id, + ) + if cr is not None and not cr["internal"]: + change_recommendations.append(cr) + # The base return value. More fields will get added below. return_value = { "identifier": motion["identifier"], diff --git a/server/tests/unit/motions/test_projector.py b/server/tests/unit/motions/test_projector.py index 9f191b06a..de18e35db 100644 --- a/server/tests/unit/motions/test_projector.py +++ b/server/tests/unit/motions/test_projector.py @@ -108,6 +108,7 @@ def all_data_provider(): "created": "2019-01-19T18:37:34.741336+01:00", "last_modified": "2019-01-19T18:37:34.741368+01:00", "change_recommendations": [], + "change_recommendations_id": [], "amendments_id": [], }, 3: { @@ -142,6 +143,7 @@ def all_data_provider(): "created": "2019-01-19T18:37:34.741336+01:00", "last_modified": "2019-01-19T18:37:34.741368+01:00", "change_recommendations": [], + "change_recommendations_id": [], "amendments_id": [], }, }