Skip to content

Commit 0967b42

Browse files
committed
Release OpenProject 12.3.4
2 parents 5a3fca4 + b408737 commit 0967b42

File tree

10 files changed

+103
-88
lines changed

10 files changed

+103
-88
lines changed

docs/installation-and-operations/installation/docker/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ If you want to start from scratch and remove the existing data you will have to
6767

6868
### Configuration
6969

70-
Please see the [advanced configuration guide's docker paragraphs](../configuration#docker)
70+
Please see the [advanced configuration guide's docker paragraphs](../../configuration#docker)
7171

7272
#### BIM Edition
7373

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
---
2+
title: OpenProject 12.3.4
3+
sidebar_navigation:
4+
title: 12.3.4
5+
release_version: 12.3.4
6+
release_date: 2022-12-02
7+
---
8+
9+
# OpenProject 12.3.4
10+
11+
Release date: 2022-12-02
12+
13+
We released [OpenProject 12.3.4](https://community.openproject.com/versions/1613).
14+
The release contains several bug fixes and we recommend updating to the newest version.
15+
16+
<!--more-->
17+
#### Bug fixes and changes
18+
19+
- Fixed: Chrome v108 freezes up on work package create and show page \[[#45169](https://community.openproject.com/wp/45169)\]

docs/release-notes/README.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,13 @@ Stay up to date and get an overview of the new features included in the releases
1414
<!--- New release notes are generated below. Do not remove comment. -->
1515
<!--- RELEASE MARKER -->
1616

17+
## 12.3.4
18+
19+
Release date: 2022-12-02
20+
21+
[Release Notes](12-3-4/)
22+
23+
1724
## 12.3.3
1825

1926
Release date: 2022-11-23
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
@import "src/assets/sass/helpers"
2+
3+
.wp-attribute-group
4+
display: flex
5+
flex-direction: row
6+
flex-wrap: wrap
7+
8+
// We want a margin between items, but don't know if any one item is on the right,
9+
// the left, or spanning both columns. The easy way to get a gutter is to give
10+
// *all* elements margins on both sides, and then negating this margin on the parent.
11+
// This also explains all of the + and - xrem calc() values below.
12+
margin: 0 -1 * $spot-spacing-1_5
13+
width: calc(100% + #{$spot-spacing-3})
14+
15+
&--attribute
16+
flex-basis: calc(100% - #{$spot-spacing-3})
17+
flex-grow: 0
18+
flex-shrink: 0
19+
margin: 0 $spot-spacing-1_5
20+
21+
@media screen and (min-width: 92rem), print
22+
flex-basis: calc(50% - #{$spot-spacing-3})
23+
24+
&_span-all
25+
flex-basis: calc(100% - #{$spot-spacing-3})

frontend/src/app/features/work-packages/components/wp-form-group/wp-attribute-group.component.ts

Lines changed: 10 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -27,14 +27,16 @@
2727
//++
2828

2929
import {
30-
Component, Injector, Input, AfterViewInit,
30+
Component,
31+
HostBinding,
32+
Injector,
33+
Input,
34+
ViewEncapsulation,
3135
} from '@angular/core';
3236
import { I18nService } from 'core-app/core/i18n/i18n.service';
3337
import { WorkPackageResource } from 'core-app/features/hal/resources/work-package-resource';
3438
import { EditFormComponent } from 'core-app/shared/components/fields/edit/edit-form/edit-form.component';
3539
import { UntilDestroyedMixin } from 'core-app/shared/helpers/angular/until-destroyed.mixin';
36-
import { fromEvent } from 'rxjs';
37-
import { debounceTime } from 'rxjs/operators';
3840
import {
3941
FieldDescriptor,
4042
GroupDescriptor,
@@ -43,8 +45,12 @@ import {
4345
@Component({
4446
selector: 'wp-attribute-group',
4547
templateUrl: './wp-attribute-group.template.html',
48+
styleUrls: ['./wp-attribute-group.component.sass'],
49+
encapsulation: ViewEncapsulation.None,
4650
})
47-
export class WorkPackageFormAttributeGroupComponent extends UntilDestroyedMixin implements AfterViewInit {
51+
export class WorkPackageFormAttributeGroupComponent extends UntilDestroyedMixin {
52+
@HostBinding('class.wp-attribute-group') className = true;
53+
4854
@Input() public workPackage:WorkPackageResource;
4955

5056
@Input() public group:GroupDescriptor;
@@ -55,20 +61,6 @@ export class WorkPackageFormAttributeGroupComponent extends UntilDestroyedMixin
5561
super();
5662
}
5763

58-
ngAfterViewInit() {
59-
setTimeout(() => this.fixColumns());
60-
61-
// Listen to resize event and fix column start again
62-
fromEvent(window, 'resize', { passive: true })
63-
.pipe(
64-
this.untilDestroyed(),
65-
debounceTime(250),
66-
)
67-
.subscribe(() => {
68-
this.fixColumns();
69-
});
70-
}
71-
7264
public trackByName(_index:number, elem:{ name:string }) {
7365
return elem.name;
7466
}
@@ -88,24 +80,4 @@ export class WorkPackageFormAttributeGroupComponent extends UntilDestroyedMixin
8880
}
8981
return name;
9082
}
91-
92-
/**
93-
* Fix the top of the columns after view has been loaded
94-
* to prevent columns from repositioning (e.g. when editing multi-select fields)
95-
*/
96-
private fixColumns() {
97-
let lastOffset = 0;
98-
// Find corresponding HTML of attribute fields for each group
99-
const htmlAttributes = jQuery(`div.attributes-group:contains(${this.group.name})`).find('.attributes-key-value');
100-
101-
htmlAttributes.each(function () {
102-
const offset = jQuery(this).position().top;
103-
104-
if (offset < lastOffset) {
105-
// Fix position of the column start
106-
jQuery(this).addClass('-column-start');
107-
}
108-
lastOffset = offset;
109-
});
110-
}
11183
}
Lines changed: 31 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,32 @@
1-
<div class="-columns-2">
2-
<div class="attributes-key-value"
3-
[ngClass]="{'-span-all-columns': descriptor.spanAll }"
4-
*ngFor="let descriptor of group.members; trackBy:trackByName">
5-
<ng-template [ngIf]="!shouldHideField(descriptor)">
6-
<div
7-
class="attributes-key-value--key"
8-
*ngIf="!descriptor.multiple && descriptor.field">
9-
<wp-replacement-label [fieldName]="descriptor.name">
10-
{{ descriptor.label }}
11-
<span class="required"
12-
*ngIf="descriptor.field!.required && descriptor.field!.writable"> *</span>
13-
</wp-replacement-label>
14-
<attribute-help-text [attribute]="descriptor.name" [attributeScope]="'WorkPackage'"></attribute-help-text>
15-
</div>
16-
<div *ngIf="!descriptor.multiple && descriptor.field"
17-
class="attributes-key-value--value-container">
18-
19-
<op-editable-attribute-field [ngClass]="{'wp-edit-formattable-field': descriptor.field!.isFormattable }"
20-
[resource]="workPackage"
21-
[isDropTarget]="descriptor.field!.isFormattable"
22-
[fieldName]="fieldName(descriptor.name)">
23-
</op-editable-attribute-field>
24-
</div>
25-
</ng-template>
26-
</div>
1+
<div
2+
class="wp-attribute-group--attribute attributes-key-value"
3+
[ngClass]="{'wp-attribute-group--attribute_span-all': descriptor.spanAll }"
4+
*ngFor="let descriptor of group.members; trackBy:trackByName"
5+
>
6+
<ng-template [ngIf]="!shouldHideField(descriptor)">
7+
<div
8+
class="attributes-key-value--key"
9+
*ngIf="!descriptor.multiple && descriptor.field"
10+
>
11+
<wp-replacement-label [fieldName]="descriptor.name">
12+
{{ descriptor.label }}
13+
<span
14+
class="required"
15+
*ngIf="descriptor.field!.required && descriptor.field!.writable"
16+
> *</span>
17+
</wp-replacement-label>
18+
<attribute-help-text [attribute]="descriptor.name" [attributeScope]="'WorkPackage'"></attribute-help-text>
19+
</div>
20+
<div
21+
*ngIf="!descriptor.multiple && descriptor.field"
22+
class="attributes-key-value--value-container"
23+
>
24+
<op-editable-attribute-field
25+
[ngClass]="{'wp-edit-formattable-field': descriptor.field!.isFormattable }"
26+
[resource]="workPackage"
27+
[isDropTarget]="descriptor.field!.isFormattable"
28+
[fieldName]="fieldName(descriptor.name)"
29+
></op-editable-attribute-field>
30+
</div>
31+
</ng-template>
2732
</div>

frontend/src/app/features/work-packages/components/wp-single-view/wp-single-view.html

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -93,13 +93,14 @@
9393
</div>
9494
</div>
9595

96-
<div *ngFor="let group of groupedFields; trackBy:trackByName"
97-
[hidden]="shouldHideGroup(group)"
98-
[attr.data-group-name]="group.name"
99-
[ngClass]="'__overflowing_' + group.id"
100-
[attr.data-overflowing-identifier]="'.__overflowing_' + group.id"
101-
class="attributes-group __overflowing_element_container">
102-
96+
<div
97+
*ngFor="let group of groupedFields; trackBy:trackByName"
98+
[hidden]="shouldHideGroup(group)"
99+
[attr.data-group-name]="group.name"
100+
[ngClass]="'__overflowing_' + group.id"
101+
[attr.data-overflowing-identifier]="'.__overflowing_' + group.id"
102+
class="attributes-group __overflowing_element_container"
103+
>
103104
<ng-container wp-isolated-query-space *ngIf="group.isolated">
104105
<ndc-dynamic [ndcDynamicComponent]="attributeGroupComponent(group)"
105106
[ndcDynamicInputs]="{ workPackage: workPackage,

frontend/src/app/shared/components/fields/edit/field/editable-attribute-field.component.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -194,6 +194,7 @@ export class EditableAttributeFieldComponent extends UntilDestroyedMixin impleme
194194
public handleUserActivate(evt:MouseEvent|KeyboardEvent|null):boolean {
195195
let positionOffset = 0;
196196

197+
// This can be both a direct click as well as a "click" via keyboard, e.g. the <Enter> key.
197198
if (evt?.type === 'click') {
198199
// Get the position where the user clicked.
199200
positionOffset = getPosition(evt);

frontend/src/global_styles/content/work_packages/single_view/_single_view.sass

Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -79,21 +79,6 @@
7979
textarea
8080
resize: vertical
8181

82-
83-
// Implement two column layout for WP full screen view
84-
&_with-columns
85-
@media screen and (min-width: 92rem), print
86-
.-columns-2
87-
@include two-column-layout
88-
89-
@supports (column-span: all)
90-
// Remove the outline on focus since that breaks the column in chrome
91-
// Chrome bug https://bugs.chromium.org/p/chromium/issues/detail?id=565116
92-
body
93-
.attributes-key-value--value-container
94-
*:focus
95-
outline: 1px solid $gray
96-
9782
.detail-panel-description
9883
margin: 0
9984
line-height: 18px

lib/open_project/version.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ module OpenProject
3333
module VERSION # :nodoc:
3434
MAJOR = 12
3535
MINOR = 3
36-
PATCH = 3
36+
PATCH = 4
3737

3838
class << self
3939
# Used by semver to define the special version (if any).

0 commit comments

Comments
 (0)