Skip to content
Merged
Show file tree
Hide file tree
Changes from 7 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions client/src/app/domain/models/meetings/meeting.ts
Original file line number Diff line number Diff line change
Expand Up @@ -141,6 +141,8 @@ export class Settings {
public motions_export_follow_recommendation!: boolean;
public motions_hide_metadata_background: boolean;
public motions_create_enable_additional_submitter_text: boolean;
public motions_enable_restricted_editor_for_manager: boolean;
public motions_enable_restricted_editor_for_non_manager: boolean;

public motion_poll_ballot_paper_selection!: BallotPaperSelection;
public motion_poll_ballot_paper_number!: number;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ <h4>
</h4>
}
<div>
<os-editor formControlName="text"></os-editor>
<os-editor formControlName="text" [limitEditor]="true"></os-editor>
</div>

<mat-checkbox formControlName="public">{{ 'Public' | translate }}</mat-checkbox>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -110,7 +110,7 @@ <h4>
</span>
}
</h4>
<os-editor [formControlName]="'text_' + paragraph.paragraphNo"></os-editor>
<os-editor [formControlName]="'text_' + paragraph.paragraphNo" [limitEditor]="true"></os-editor>
</section>
}

Expand All @@ -131,7 +131,7 @@ <h4>
}
</h3>

<os-editor formControlName="reason" [required]="reasonRequired"></os-editor>
<os-editor formControlName="reason" [limitEditor]="true" [required]="reasonRequired"></os-editor>
@if (
reasonRequired &&
contentForm.get('reason')?.invalid &&
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -118,6 +118,7 @@ <h3>
}
<os-editor
formControlName="text"
[limitEditor]="true"
[required]="!isParagraphBasedAmendment"
></os-editor>
@if (
Expand Down Expand Up @@ -154,7 +155,11 @@ <h3>
}
</h3>
<!-- The HTML Editor -->
<os-editor formControlName="reason" [required]="reasonRequired"></os-editor>
<os-editor
formControlName="reason"
[limitEditor]="true"
[required]="reasonRequired"
></os-editor>
@if (
reasonRequired &&
contentForm.get('reason')?.invalid &&
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ <h3>
</span>
}
</h3>
<os-editor [formControlName]="paragraph.paragraphNo"></os-editor>
<os-editor [formControlName]="paragraph.paragraphNo" [limitEditor]="true"></os-editor>
@if (isControlInvalid(paragraph.paragraphNo)) {
<div class="red-warning-text">
{{ 'This field is required.' | translate }}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
} @else {
<form [formGroup]="formGroup">
<!-- The HTML Editor -->
<os-editor formControlName="text" [id]="sectionId"></os-editor>
<os-editor formControlName="text" [id]="sectionId" [limitEditor]="true"></os-editor>
</form>
}
@if (saveHint) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,11 @@
@if (isEditMode) {
<form [formGroup]="contentForm">
<os-editor formControlName="modified_final_version" required [hidden]="!isEditMode"></os-editor>
<os-editor
formControlName="modified_final_version"
required
[hidden]="!isEditMode"
[limitEditor]="true"
></os-editor>
@if (
contentForm.get('modified_final_version')?.invalid &&
(contentForm.get('modified_final_version')?.dirty || contentForm.get('modified_final_version')?.touched)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@
} @else {
<form [formGroup]="formGroup">
<!-- The HTML Editor -->
<os-editor formControlName="text"></os-editor>
<os-editor formControlName="text" [limitEditor]="true"></os-editor>
</form>
}
@if (saveHint) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -588,6 +588,16 @@ export const meetingSettings: SettingsGroup[] = fillInSettingsDefaults([
label: _(`Activate submitter extension field in motion create form`),
helpText: _(`Requires permission to manage motion metadata`),
type: `boolean`
},
{
key: `motions_enable_restricted_editor_for_non_manager`,
label: _(`Limit the editor for all users without motion manage permissions`),
type: `boolean`
},
{
key: `motions_enable_restricted_editor_for_manager`,
label: _(`Limit the editor for all users with motion manage permissions`),
type: `boolean`
}
]
},
Expand Down
253 changes: 131 additions & 122 deletions client/src/app/ui/modules/editor/components/editor/editor.component.html
Original file line number Diff line number Diff line change
Expand Up @@ -34,10 +34,12 @@
<button mat-menu-item [matMenuTriggerFor]="headingMenu">
{{ 'Headings' | translate }}
</button>
<button mat-menu-item [matMenuTriggerFor]="textAlignMenu">
{{ 'Align' | translate }}
</button>
<button mat-menu-item [matMenuTriggerFor]="inlineMenu">{{ 'Inline' | translate }}</button>
@if (!isEditorLimited()) {
<button mat-menu-item [matMenuTriggerFor]="textAlignMenu">
{{ 'Align' | translate }}
</button>
<button mat-menu-item [matMenuTriggerFor]="inlineMenu">{{ 'Inline' | translate }}</button>
}
</mat-menu>

<mat-menu #headingMenu="matMenu">
Expand Down Expand Up @@ -148,108 +150,113 @@
>
<mat-icon>format_italic</mat-icon>
</button>
<button
#btn
mat-ripple
osTabNavigation
type="button"
[buttonList]="buttonElements"
[matTooltip]="'Underline' | translate"
[ngClass]="{ active: editor.isActive('underline') }"
(click)="editor.chain().focus().toggleUnderline().run()"
>
<mat-icon>format_underline</mat-icon>
</button>
<button
#btn
mat-ripple
osTabNavigation
type="button"
[buttonList]="buttonElements"
[matTooltip]="'Strikethrough' | translate"
[ngClass]="{ active: editor.isActive('strike') }"
(click)="editor.chain().focus().toggleStrike().run()"
>
<mat-icon>format_strikethrough</mat-icon>
</button>

@if (!isEditorLimited()) {
<button
#btn
mat-ripple
osTabNavigation
type="button"
[buttonList]="buttonElements"
[matTooltip]="'Underline' | translate"
[ngClass]="{ active: editor.isActive('underline') }"
(click)="editor.chain().focus().toggleUnderline().run()"
>
<mat-icon>format_underline</mat-icon>
</button>
<button
#btn
mat-ripple
osTabNavigation
type="button"
[buttonList]="buttonElements"
[matTooltip]="'Strikethrough' | translate"
[ngClass]="{ active: editor.isActive('strike') }"
(click)="editor.chain().focus().toggleStrike().run()"
>
<mat-icon>format_strikethrough</mat-icon>
</button>
}
</div>

<div class="button-group">
<button
#btn
mat-ripple
osTabNavigation
type="button"
[buttonList]="buttonElements"
[matTooltip]="'Text color' | translate"
[ngClass]="{ active: editor.isActive('textStyle') }"
[ngStyle]="{
color: editor.isActive('textStyle') ? editor.getAttributes('textStyle')['color'] : null
}"
(click)="updateColorSets(); editor.chain().focus().setColor(null).removeEmptyTextStyle().run()"
>
<mat-icon>format_color_text</mat-icon>
</button>
<button
class="more color-selection"
mat-ripple
tabindex="-1"
type="button"
[ngClass]="{ focused: focusText }"
(click)="updateColorSets()"
>
<mat-icon>arrow_drop_down</mat-icon>
<input
@if (!isEditorLimited()) {
<div class="button-group">
<button
#btn
list="text-colors"
mat-ripple
osTabNavigation
type="color"
type="button"
[buttonList]="buttonElements"
[matTooltip]="'Text color' | translate"
[value]="editor.getAttributes('textStyle')['color']"
(change)="updateFontColor($event)"
(focus)="setFocus(true)"
(focusout)="setFocus()"
/>
</button>
</div>
<div class="button-group">
<button
#btn
mat-ripple
osTabNavigation
type="button"
[buttonList]="buttonElements"
[matTooltip]="'Background color' | translate"
[ngClass]="{ active: editor.isActive('highlight') }"
[ngStyle]="{ color: editor.getAttributes('highlight')['color'] }"
(click)="updateColorSets(); editor.chain().focus().toggleHighlight().run()"
>
<mat-icon>format_color_fill</mat-icon>
</button>
<button
class="more color-selection"
mat-ripple
tabindex="-1"
type="button"
[ngClass]="{ focused: focusBackground }"
(click)="updateColorSets()"
>
<mat-icon>arrow_drop_down</mat-icon>
<input
[ngClass]="{ active: editor.isActive('textStyle') }"
[ngStyle]="{
color: editor.isActive('textStyle') ? editor.getAttributes('textStyle')['color'] : null
}"
(click)="updateColorSets(); editor.chain().focus().setColor(null).removeEmptyTextStyle().run()"
>
<mat-icon>format_color_text</mat-icon>
</button>
<button
class="more color-selection"
mat-ripple
tabindex="-1"
type="button"
[ngClass]="{ focused: focusText }"
(click)="updateColorSets()"
>
<mat-icon>arrow_drop_down</mat-icon>
<input
#btn
list="text-colors"
osTabNavigation
type="color"
[buttonList]="buttonElements"
[matTooltip]="'Text color' | translate"
[value]="editor.getAttributes('textStyle')['color']"
(change)="updateFontColor($event)"
(focus)="setFocus(true)"
(focusout)="setFocus()"
/>
</button>
</div>
<div class="button-group">
<button
#btn
list="background-colors"
mat-ripple
osTabNavigation
type="color"
type="button"
[buttonList]="buttonElements"
[matTooltip]="'Background color' | translate"
[value]="editor.getAttributes('highlight')['color']"
(change)="updateHighlightColor($event)"
(focus)="setFocus(false)"
(focusout)="setFocus()"
/>
</button>
</div>
[ngClass]="{ active: editor.isActive('highlight') }"
[ngStyle]="{ color: editor.getAttributes('highlight')['color'] }"
(click)="updateColorSets(); editor.chain().focus().toggleHighlight().run()"
>
<mat-icon>format_color_fill</mat-icon>
</button>
<button
class="more color-selection"
mat-ripple
tabindex="-1"
type="button"
[ngClass]="{ focused: focusBackground }"
(click)="updateColorSets()"
>
<mat-icon>arrow_drop_down</mat-icon>
<input
#btn
list="background-colors"
osTabNavigation
type="color"
[buttonList]="buttonElements"
[matTooltip]="'Background color' | translate"
[value]="editor.getAttributes('highlight')['color']"
(change)="updateHighlightColor($event)"
(focus)="setFocus(false)"
(focusout)="setFocus()"
/>
</button>
</div>
}
<button
#btn
mat-ripple
Expand Down Expand Up @@ -291,33 +298,35 @@
</button>
</div>

<div class="button-group">
<button
#btn
mat-ripple
osTabNavigation
type="button"
[buttonList]="buttonElements"
[matTooltip]="'Insert/edit link' | translate"
[ngClass]="{ active: editor.isActive('link') }"
(click)="setLinkDialog()"
>
<mat-icon>link</mat-icon>
</button>
@if (!isEditorLimited()) {
<div class="button-group">
<button
#btn
mat-ripple
osTabNavigation
type="button"
[buttonList]="buttonElements"
[matTooltip]="'Insert/edit link' | translate"
[ngClass]="{ active: editor.isActive('link') }"
(click)="setLinkDialog()"
>
<mat-icon>link</mat-icon>
</button>

<button
#btn
mat-ripple
osTabNavigation
type="button"
[buttonList]="buttonElements"
[matTooltip]="'Insert/edit image' | translate"
[ngClass]="{ active: editor.isActive('image') }"
(click)="setImageDialog()"
>
<mat-icon>image</mat-icon>
</button>
</div>
<button
#btn
mat-ripple
osTabNavigation
type="button"
[buttonList]="buttonElements"
[matTooltip]="'Insert/edit image' | translate"
[ngClass]="{ active: editor.isActive('image') }"
(click)="setImageDialog()"
>
<mat-icon>image</mat-icon>
</button>
</div>
}

<div class="button-group">
<button
Expand Down
Loading
Loading