Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
74 commits
Select commit Hold shift + click to select a range
54dd20e
Change payload to null from empty string for unique constraint fields…
reiterl Mar 26, 2026
736074a
Bump the angular group in /client with 16 updates (#6022)
dependabot[bot] Mar 26, 2026
3c5d4b4
Bump @cantoo/pdf-lib from 2.6.2 to 2.6.5 in /client (#6026)
dependabot[bot] Mar 26, 2026
e11ab3b
Bump the angular-eslint group in /client with 5 updates (#6023)
dependabot[bot] Mar 26, 2026
00459c7
Add screenreader help in autopilot if change (#5980)
Elblinator Mar 26, 2026
73f5aee
Bump pdfmake from 0.3.6 to 0.3.7 in /client (#6025)
dependabot[bot] Mar 26, 2026
ac8a2a9
Bump the typescript-eslint group in /client with 2 updates (#6020)
dependabot[bot] Mar 26, 2026
6dfa311
Update meta repository (#5972)
openslides-automation[bot] Mar 26, 2026
55b37bd
Update `getChangeDiff` cache key (#6018)
bastianjoel Mar 26, 2026
a8979fe
Bump the tiptap group in /client with 13 updates (#6024)
dependabot[bot] Mar 26, 2026
f804829
Bump typescript-eslint from 8.57.0 to 8.57.1 in /client (#6027)
dependabot[bot] Mar 26, 2026
820b173
Bigger progress bar (#5874)
Borreg0 Mar 26, 2026
4b40093
Fixed width (#5997)
Borreg0 Mar 27, 2026
397688b
Work on restrict edit managers for subcommittees (#6029)
reiterl Mar 31, 2026
275e708
Update meta repository (#6037)
openslides-automation[bot] Mar 31, 2026
9e93d05
Update meta repository (#6052)
openslides-automation[bot] Apr 1, 2026
8ac4dd3
Remove color while pasting text (#6061)
MoonCubes Apr 7, 2026
420daa7
Appearance change: assignment-detail chip colour, motion extensions f…
Elblinator Apr 9, 2026
c5ad32e
Allow more constellations for live voting (#5977)
bastianjoel Apr 10, 2026
033add8
Update visibiliy of Contributions page (#6058)
MoonCubes Apr 13, 2026
03a2798
Bump lodash from 4.17.23 to 4.18.1 in /client (#6063)
dependabot[bot] Apr 13, 2026
fb925a0
Bump lodash-es from 4.17.23 to 4.18.1 in /client (#6057)
dependabot[bot] Apr 13, 2026
05043c7
Bump brace-expansion from 1.1.12 to 1.1.13 in /client (#6043)
dependabot[bot] Apr 13, 2026
9ad0d89
Bump @coreui/angular-chartjs from 5.6.20 to 5.6.21 in /client (#6046)
dependabot[bot] Apr 13, 2026
3cc608a
Bump @xmldom/xmldom from 0.8.11 to 0.8.12 in /client (#6048)
dependabot[bot] Apr 13, 2026
6a4d509
Update meta repository (#6059)
openslides-automation[bot] Apr 13, 2026
9b10f6f
Skip additional tar of docker logs in action (#6079)
bastianjoel Apr 13, 2026
021d3da
Bump the typescript-eslint group in /client with 2 updates (#6064)
dependabot[bot] Apr 13, 2026
8d31c01
Bump the tiptap group in /client with 13 updates (#6045)
dependabot[bot] Apr 13, 2026
ac88595
Bump playwright from v1.58.2-jammy to v1.59.1-jammy in /client/tests …
dependabot[bot] Apr 13, 2026
ab6fc8a
Bump @hono/node-server from 1.19.10 to 1.19.13 in /client (#6070)
dependabot[bot] Apr 13, 2026
bc00e73
Bump ts-morph from 27.0.2 to 28.0.0 in /client (#6078)
dependabot[bot] Apr 13, 2026
c825f5c
Bump typescript-eslint from 8.57.2 to 8.58.1 in /client (#6076)
dependabot[bot] Apr 13, 2026
433e73e
Bump eslint-plugin-simple-import-sort from 12.1.1 to 13.0.0 in /clien…
dependabot[bot] Apr 13, 2026
048c3f6
Bump hono from 4.12.7 to 4.12.12 in /client (#6071)
dependabot[bot] Apr 13, 2026
cb83fe2
Bump prettier from 3.8.1 to 3.8.2 in /client (#6077)
dependabot[bot] Apr 13, 2026
ee80cae
Bump cm-chessboard from 8.11.5 to 8.12.0 in /client in the chess grou…
dependabot[bot] Apr 13, 2026
3041031
Bump the angular group across 1 directory with 16 updates (#6066)
dependabot[bot] Apr 13, 2026
a94dc38
Remove check-database buttons and presenter call (#6082)
reiterl Apr 14, 2026
9619c0b
Add account-dialog-main to have own subscriptions for account-dialog …
reiterl Apr 17, 2026
27d25ef
Update meta repository (#6089)
openslides-automation[bot] Apr 17, 2026
46ae533
Add meeting time zone field (#6042)
reiterl Apr 17, 2026
9efb3b5
Update meta repository (#6095)
openslides-automation[bot] Apr 17, 2026
6c0bf84
Use motion html-to-pdf service in agenda export (#6090)
reiterl Apr 20, 2026
744507b
Bump follow-redirects from 1.15.9 to 1.16.0 in /client (#6087)
dependabot[bot] Apr 20, 2026
6735409
Bump hono from 4.12.12 to 4.12.14 in /client (#6088)
dependabot[bot] Apr 20, 2026
ad49183
Update motion diff dependencies (#6100)
bastianjoel Apr 20, 2026
377f934
Cleanup: Use inject() for dep inj and getTimezoneXY methods (#6101)
reiterl Apr 20, 2026
bbcea8f
Fix search selector doesn't close (#6094)
reiterl Apr 20, 2026
9ff541d
Bump typescript-eslint from 8.58.1 to 8.58.2 in /client (#6109)
dependabot[bot] Apr 20, 2026
d8d2392
Bump prettier from 3.8.2 to 3.8.3 in /client (#6108)
dependabot[bot] Apr 20, 2026
713ca86
Bump the tiptap group in /client with 13 updates (#6106)
dependabot[bot] Apr 20, 2026
2cfa21f
Bump the angular group in /client with 14 updates (#6105)
dependabot[bot] Apr 20, 2026
3267d9c
Bump cm-chessboard from 8.12.0 to 8.12.7 in /client in the chess grou…
dependabot[bot] Apr 20, 2026
47bb2c3
Add integration tests for global/meeting search (#6092)
reiterl Apr 20, 2026
280e19b
Fixed color in recommendation editor (#5999)
Borreg0 Apr 22, 2026
6b302ed
Change appearance of Agenda export (#6062)
Elblinator Apr 22, 2026
90befde
Bump @xmldom/xmldom from 0.8.12 to 0.8.13 in /client (#6116)
dependabot[bot] Apr 23, 2026
33a2616
Update meta repository (#6111)
openslides-automation[bot] Apr 24, 2026
d506392
Cleanup of the account dialog main component (#6118)
reiterl Apr 24, 2026
b5da830
Adjust same space for change recommendations (#6040)
Borreg0 Apr 24, 2026
9642535
Fix CRs for paragraphs with empty first line (#5340)
bastianjoel Apr 27, 2026
bad806c
Bump the angular group in /client with 16 updates (#6124)
dependabot[bot] Apr 28, 2026
dbae3e6
Update meta repository (#6121)
openslides-automation[bot] Apr 28, 2026
5c15922
Bump typescript-eslint from 8.58.2 to 8.59.1 in /client (#6125)
dependabot[bot] Apr 28, 2026
98097d3
Bump @coreui/angular-chartjs from 5.6.21 to 5.6.22 in /client (#6126)
dependabot[bot] Apr 28, 2026
fe57131
Bump postcss from 8.5.8 to 8.5.12 in /client (#6128)
dependabot[bot] Apr 28, 2026
a3a3ef1
Bump picomatch and @angular-devkit/core in /client (#6127)
dependabot[bot] Apr 28, 2026
403d319
Add a test to the diff service about nested lists and dots (#5872)
reiterl Apr 28, 2026
bf31714
Motion diff issue with nested list and text change (#5871)
reiterl Apr 28, 2026
d2df7f6
Update injectable providedIn from a module to 'root' (#6113)
reiterl Apr 28, 2026
2e06a67
Fix export buttons not fully clickable (#6130)
Borreg0 Apr 29, 2026
a856798
Bump the angular group in /client with 16 updates (#6142)
dependabot[bot] May 4, 2026
5cd4f30
Bump ip-address and express-rate-limit in /client (#6148)
dependabot[bot] May 7, 2026
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
19 changes: 17 additions & 2 deletions .github/workflows/continuous-integration.yml
Original file line number Diff line number Diff line change
Expand Up @@ -69,13 +69,28 @@ jobs:
working-directory: "./openslides-client"
run: make run-playwright

- uses: actions/upload-artifact@v7
if: always()
- name: Upload playwright logs
uses: actions/upload-artifact@v7
if: failure()
with:
name: playwright-report
path: "./openslides-client/client/tests/playwright-report/"
retention-days: 7

- name: Collect docker logs on failure
if: failure()
uses: jwalton/gh-docker-logs@v2
with:
dest: './logs'

- name: Upload docker logs
if: failure()
uses: actions/upload-artifact@master
with:
name: docker-logs
path: ./logs
retention-days: 7

- name: Shut down setup
if: always()
working-directory: "./dev/localprod"
Expand Down
1,336 changes: 604 additions & 732 deletions client/package-lock.json

Large diffs are not rendered by default.

87 changes: 44 additions & 43 deletions client/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -32,62 +32,63 @@
"get-available-languages": "npm run ts -- cli/get-available-languages.ts"
},
"dependencies": {
"@angular/animations": "^21.2.4",
"@angular/cdk": "^21.2.2",
"@angular/common": "^21.2.4",
"@angular/compiler": "^21.2.4",
"@angular/core": "^21.2.4",
"@angular/forms": "^21.2.4",
"@angular/material": "^21.2.2",
"@angular/material-date-fns-adapter": "^21.2.2",
"@angular/platform-browser": "^21.2.4",
"@angular/platform-browser-dynamic": "^21.2.4",
"@angular/router": "^21.2.4",
"@angular/service-worker": "^21.2.4",
"@cantoo/pdf-lib": "^2.6.2",
"@coreui/angular-chartjs": "~5.6.20",
"@angular/animations": "^21.2.11",
"@angular/cdk": "^21.2.9",
"@angular/common": "^21.2.11",
"@angular/compiler": "^21.2.11",
"@angular/core": "^21.2.11",
"@angular/forms": "^21.2.11",
"@angular/material": "^21.2.9",
"@angular/material-date-fns-adapter": "^21.2.9",
"@angular/platform-browser": "^21.2.11",
"@angular/platform-browser-dynamic": "^21.2.11",
"@angular/router": "^21.2.11",
"@angular/service-worker": "^21.2.11",
"@cantoo/pdf-lib": "^2.6.5",
"@coreui/angular-chartjs": "~5.6.22",
"@coreui/chartjs": "^4.1.0",
"@date-fns/tz": "^1.4.1",
"@intevation/tiptap-extension-office-paste": "^0.1.2",
"@material/typography": "^14.0.0",
"@ngx-pwa/local-storage": "^21.0.0",
"@ngx-translate/core": "^17.0.0",
"@ngx-translate/http-loader": "^17.0.0",
"@openslides/motion-diff": "file:../packages/openslides-motion-diff",
"@tiptap/core": "^3.20.2",
"@tiptap/extension-color": "^3.20.2",
"@tiptap/extension-highlight": "^3.20.2",
"@tiptap/extension-image": "^3.20.2",
"@tiptap/extension-list": "^3.20.2",
"@tiptap/extension-subscript": "^3.20.2",
"@tiptap/extension-superscript": "^3.20.2",
"@tiptap/extension-table": "^3.20.2",
"@tiptap/extension-text-align": "^3.20.2",
"@tiptap/core": "^3.22.4",
"@tiptap/extension-color": "^3.22.4",
"@tiptap/extension-highlight": "^3.22.4",
"@tiptap/extension-image": "^3.22.4",
"@tiptap/extension-list": "^3.22.4",
"@tiptap/extension-subscript": "^3.22.4",
"@tiptap/extension-superscript": "^3.22.4",
"@tiptap/extension-table": "^3.22.4",
"@tiptap/extension-text-align": "^3.22.4",
"@tiptap/extension-text-style": "^3.4.2",
"@tiptap/extensions": "^3.20.2",
"@tiptap/extensions": "^3.22.4",
"@tiptap/pm": "^3.4.2",
"@tiptap/starter-kit": "^3.20.2",
"@tiptap/starter-kit": "^3.22.4",
"@tsparticles/angular": "^3.0.0",
"@tsparticles/engine": "^3.9.1",
"@tsparticles/plugin-emitters": "^3.9.1",
"@tsparticles/shape-text": "^3.9.1",
"@tsparticles/slim": "^3.9.1",
"chart.js": "^4.5.1",
"cm-chess": "^3.6.3",
"cm-chessboard": "^8.11.5",
"cm-chessboard": "^8.12.7",
"date-fns": "^4.1.0",
"exceljs": "^4.4.0",
"file-saver": "^2.0.5",
"fzstd": "^0.1.1",
"jszip": "^3.10.1",
"lodash-es": "^4.17.23",
"lodash-es": "^4.18.1",
"material-design-icons-iconfont": "^6.7.0",
"ngx-cookie-service": "^21.1.0",
"ngx-date-fns": "^12.0.1",
"ngx-device-detector": "^11.0.0",
"ngx-file-drop": "^16.0.0",
"ngx-material-timepicker": "^13.1.1",
"ngx-papaparse": "^8.0.0",
"pdfmake": "^0.3.6",
"pdfmake": "^0.3.7",
"pofile": "^1.1.4",
"qrcode": "^1.5.4",
"rxjs": "^7.8.2",
Expand All @@ -96,16 +97,16 @@
"zone.js": "^0.16.1"
},
"devDependencies": {
"@angular-eslint/builder": "^21.3.0",
"@angular-eslint/eslint-plugin": "^21.3.0",
"@angular-eslint/eslint-plugin-template": "^21.3.0",
"@angular-eslint/schematics": "^21.3.0",
"@angular-eslint/builder": "^21.3.1",
"@angular-eslint/eslint-plugin": "^21.3.1",
"@angular-eslint/eslint-plugin-template": "^21.3.1",
"@angular-eslint/schematics": "^21.3.1",
"@angular-eslint/template-parser": "^21.3.0",
"@angular/build": "^21.2.2",
"@angular/cli": "^21.2.2",
"@angular/compiler-cli": "^21.2.4",
"@angular/language-server": "^21.2.4",
"@coreui/angular-chartjs": "^5.6.20",
"@angular/build": "^21.2.9",
"@angular/cli": "^21.2.9",
"@angular/compiler-cli": "^21.2.11",
"@angular/language-server": "^21.2.11",
"@coreui/angular-chartjs": "^5.6.22",
"@stylistic/eslint-plugin": "^5.10.0",
"@types/file-saver": "^2.0.7",
"@types/jasmine": "~5.1.15",
Expand All @@ -115,14 +116,14 @@
"@types/qrcode": "^1.5.6",
"@types/tinycolor2": "^1.4.6",
"@types/video.js": "^7.3.58",
"@typescript-eslint/eslint-plugin": "^8.56.1",
"@typescript-eslint/parser": "^8.56.1",
"@typescript-eslint/eslint-plugin": "^8.58.1",
"@typescript-eslint/parser": "^8.58.1",
"@vendure/ngx-translate-extract": "^10.1.3",
"angular-eslint": "^21.2.0",
"eslint": "^9.39.4",
"eslint-config-prettier": "^10.1.8",
"eslint-plugin-prettier": "^5.5.5",
"eslint-plugin-simple-import-sort": "^12.1.1",
"eslint-plugin-simple-import-sort": "^13.0.0",
"eslint-plugin-unused-imports": "^4.4.1",
"fetch-mock": "^12.6.0",
"jasmine-core": "^5.13.0",
Expand All @@ -132,13 +133,13 @@
"karma-coverage": "~2.2.1",
"karma-jasmine": "~5.1.0",
"karma-jasmine-html-reporter": "~2.2.0",
"prettier": "^3.8.1",
"prettier": "^3.8.3",
"ts-dedent": "^2.2.0",
"ts-morph": "^27.0.2",
"ts-morph": "^28.0.0",
"ts-node": "^10.9.2",
"tsconfig-paths": "^4.2.0",
"typescript": "^5.9.3",
"typescript-eslint": "^8.57.0"
"typescript-eslint": "^8.59.1"
},
"browser": {
"fs": false
Expand Down
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 @@ -31,6 +31,7 @@ export class Settings {
// in the committee-list-view is finished.
public enable_anonymous!: boolean;
public language!: string;
public time_zone!: string;

// Jitsi/Livestream settings
public jitsi_domain!: string;
Expand Down Expand Up @@ -305,6 +306,7 @@ export class Meeting extends BaseModel<Meeting> {
`is_archived_in_organization_id`,
`description`,
`location`,
`time_zone`,
`start_time`,
`end_time`,
`locked_from_inside`,
Expand Down
3 changes: 3 additions & 0 deletions client/src/app/domain/models/motions/motion.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ export interface MotionFormattingRepresentation {
text: string;
modified_final_version: string;
start_line_number: number;
diff_version: string;
}

export interface HasReferencedMotionInExtensionIds {
Expand All @@ -36,6 +37,7 @@ export class Motion extends BaseModel<Motion> implements MotionFormattingReprese
public sequential_number!: number;
public title!: string;
public text!: string;
public diff_version!: string;
public modified_final_version!: string;
public reason!: string;
public category_weight!: number;
Expand Down Expand Up @@ -106,6 +108,7 @@ export class Motion extends BaseModel<Motion> implements MotionFormattingReprese
`number`,
`sequential_number`,
`title`,
`diff_version`,
`text`,
`amendment_paragraphs`,
`modified_final_version`,
Expand Down
2 changes: 2 additions & 0 deletions client/src/app/domain/models/organizations/organization.ts
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,7 @@ export class Organization extends BaseModel<Organization> {
public mediafile_ids!: Id[];
public gender_ids!: Id[]; // (gender/organization_id);
public published_mediafile_ids!: Id[];
public time_zone!: string;

public constructor(input?: any) {
super(Organization.COLLECTION, input);
Expand All @@ -78,6 +79,7 @@ export class Organization extends BaseModel<Organization> {
`limit_of_meetings`,
`limit_of_users`,
`default_language`,
`time_zone`,
`require_duplicate_from`,
`enable_anonymous`,
`restrict_editing_same_level_committee_admins`,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
import { inject, Injectable } from '@angular/core';
import { BaseViewModel } from 'src/app/site/base/base-view-model';

import { ExportServiceModule } from '../export-service.module';
import { FileExportService } from '../file-export.service';
import {
BackendCsvColumnsDefinition,
Expand All @@ -14,7 +13,7 @@ import {
} from './csv-export-utils';

@Injectable({
providedIn: ExportServiceModule
providedIn: 'root'
})
export class CsvExportForBackendService {
private exporter = inject(FileExportService);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -313,12 +313,20 @@ export class HtmlToPdfService {
*/
protected createSpanParagraph(data: CreateSpecificParagraphPayload): any {
const children = this.parseChildren(data.element, data.styles);

const newParagraph = {
...this.create(`text`),
...this.computeStyle(data.styles)
};

newParagraph.text = children;
if (data.classes?.includes(`spacer`)) {
const lines = +data.element.getAttribute(`data-lines`) || 0;
if (lines - 1 > 0) {
newParagraph.text = `\n`.repeat(lines - 1);
}
} else {
newParagraph.text = children;
}
return newParagraph;
}

Expand Down

This file was deleted.

This file was deleted.

18 changes: 18 additions & 0 deletions client/src/app/gateways/presenter/get-valid-timezones.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
import { Injectable } from '@angular/core';

import { Presenter } from './presenter';
import { PresenterService } from './presenter.service';

type ValidTimeZones = Record<string, string>;

@Injectable({
providedIn: `root`
})
export class GetValidTimezonesPresenterService {
public constructor(private presenter: PresenterService) {}

public async call(): Promise<ValidTimeZones> {
const response = await this.presenter.call<ValidTimeZones>(Presenter.GET_VALID_TIMEZONES, {});
return response;
}
}
5 changes: 2 additions & 3 deletions client/src/app/gateways/presenter/presenter.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,8 @@ export enum Presenter {
GET_USER_SCOPE = `get_user_scope`,
GET_FORWARDING_COMMITTEES = `get_forwarding_committees`,
GET_FORWARDING_MEETINGS = `get_forwarding_meetings`,
GET_VALID_TIMEZONES = `get_valid_timezones`,
SEARCH_USERS = `search_users`,
SEARCH_DELETED_MODELS = `search_deleted_models`,
EXPORT_MEETING = `export_meeting`,
CHECK_DATABASE = `check_database`,
CHECK_DATABASE_ALL = `check_database_all`
EXPORT_MEETING = `export_meeting`
}
Loading
Loading