* Introduce the PageLinkQuery
* Update page link query and some copyright
* Adds PageLinkCollectionRepresenter
* Introduces the endpoint /work_packages/id/wiki_page_links
* MetadaService tests, most of it is a work of fiction
* Adds urns for page link type improve some tests
* Removes mentions to view_wiki_page_links permissions
* Adds a test for multiple providers and same identifiers
---
Co-authored-by: Jan Sandbrink <j.sandbrink@openproject.com>
Apply Angular's Vitest migration schematic to update frontend and plugin
specs from Jasmine globals to Vitest APIs.
ng g @schematics/angular:refactor-jasmine-vitest
Fix migrated edge cases where async assertions or shallow tests changed.
https://community.openproject.org/wp/66563
* Show only 10 most recent recurrences from the previous schedule
Instantiated occurrence ICS output is split into:
- at most 10 meetings from a previous schedule (recurrence_start_time < current_schedule_start) as RECURRENCE-ID overrides
- all upcoming instantiated meetings as RECURRENCE-ID overrides
- cancelled meetings as EXDATE (to suppress RRULE-generated occurrences)
The 10 past meetings are still having their RECURRENCE-ID to a series event with a later DTSTART. this might not be picked up
correctly by all clients. We'll have to test and see
* Exclude meetings from previous schedule for EXDATE
* Fix GitHub/NoTitleAttribute, LinkHasHref errors
- Replaces `title` attribute with `aria-label` for interactive elements.
- Removes `title` from non-interactive elements.
- Converts `<a>` tags without proper `href` to `<button>` elements,
using Primer `Button`/`IconButton` where possible.
# Conflicts:
# app/views/custom_fields/_custom_options.html.erb
# spec/features/admin/custom_fields/shared_custom_field_expectations.rb
# spec/features/admin/custom_fields/work_packages/list_spec.rb
* Fix Autocomplete missing errors
* Fix GitHub/NoPositiveTabIndex errors
Removes all positive `tabindex` values.
* Fix Rails/LinkToBlank errors
* Replace toast with Primer Banner on LDAP form
* Add frozen_string_literal
* Ignore erb lint for deprecated files
* Fix linting errors in repository module
* Fix linting errors in budgets and custom actions
* Fix linting errors in member form and 2fa
* Fix linting errors in mcost types and wiki help and storages
* Fix linting errors in multi select filters, ifc viewer, and unsupported browser banner
* Fix failing spec
* Use Primer banner instead of op-toast where ever it is possible
* Use octicon instead of op_icon
* Fix failing tests
* Use no-decoration-on-hover for button links and change the button with only an icon to primer icon button
* Keep webhook response modal activation selector class-based
* use icon button for edit of hourly rate
---------
Co-authored-by: Behrokh Satarnejad <b.satarnejad@openproject.com>
The idea is to reuse them in the wikis module and probably elsewhere
as well, offering a similar look & feel.
The ReportComponent has been lightened for this, though. Previously
it included the page layout and a default to render when there was
no report. Now it only focusses on rendering an actual report and
leaves the rest up to the including component or page.
* Fix current_schedule_end time using the new start_time
we use current_schedule_start and current_schedule_end to output the
"current occurrence rule" which may be later than the original start
date.
However, current_schedule_end did use the original start_time, this
caused this bug:
DTSTART;TZID=Europe/Berlin:20260505T134500
DTEND;TZID=Europe/Berlin:20260224T140000
DTEND < DTSTART should not be possible, ever.
* Fix factory to use duration of the series
* Fix expectation on meeting series name in body
The sidebar may have a meeting series
- editing pages no longer needs the permission of viewing the history
- viewing past edits now is its own permission, still depending on
viewing the page itself
This is part of making health reports available to other modules
than storages as well. The base classes are essentially free of relevant
references to the storages module and only contain the glue code necessary
to fill a health report properly.
"My meetings" and "Invitations" were already showing the same results
before, but passed their filter params differently. With changes to the
way the filter params are passed in this PR, both now get highlighted
for the same conditions, and so removing "Invitations" makes sense.
Some changes are needed to the condition to ensure "My meetings" stays
distinct from "All meetings", however.