+
+
+ Viewing
{{content.lastModifiedBy | sqxUserNameRef:null}}'s changes of {{content.lastModified | sqxShortDate}}.
+
+
diff --git a/src/Squidex/app/features/content/pages/content/content-page.component.ts b/src/Squidex/app/features/content/pages/content/content-page.component.ts
index d5fb781a9..de4688c28 100644
--- a/src/Squidex/app/features/content/pages/content/content-page.component.ts
+++ b/src/Squidex/app/features/content/pages/content/content-page.component.ts
@@ -43,6 +43,7 @@ export class ContentPageComponent implements CanComponentDeactivate, OnDestroy,
private contentUnpublishedSubscription: Subscription;
private contentDeletedSubscription: Subscription;
private contentVersionSelectedSubscription: Subscription;
+ private contentOld: ContentDto;
public schema: SchemaDetailsDto;
@@ -68,7 +69,6 @@ export class ContentPageComponent implements CanComponentDeactivate, OnDestroy,
}
public ngOnInit() {
-
this.contentVersionSelectedSubscription =
this.ctx.bus.of(ContentVersionSelected)
.subscribe(message => {
@@ -121,6 +121,14 @@ export class ContentPageComponent implements CanComponentDeactivate, OnDestroy,
}
}
+ public showLatest() {
+ this.content = this.contentOld;
+ this.contentOld = null;
+
+ this.emitContentUpdated(this.content);
+ this.populateContentForm();
+ }
+
public saveAndPublish() {
this.saveContent(true);
}
@@ -176,6 +184,12 @@ export class ContentPageComponent implements CanComponentDeactivate, OnDestroy,
if (!this.isNewMode && this.content) {
this.contentsService.getVersionData(this.ctx.appName, this.schema.name, this.content.id, new Version(version.toString()))
.subscribe(dto => {
+ if (this.content.version.value !== version.toString()) {
+ this.contentOld = this.content;
+ } else {
+ this.contentOld = null;
+ }
+
this.content = this.content.setData(dto);
this.ctx.notifyInfo('Content version loaded successfully.');
diff --git a/src/Squidex/app/framework/angular/date-time.pipes.spec.ts b/src/Squidex/app/framework/angular/date-time.pipes.spec.ts
index cd5440683..8d7557d51 100644
--- a/src/Squidex/app/framework/angular/date-time.pipes.spec.ts
+++ b/src/Squidex/app/framework/angular/date-time.pipes.spec.ts
@@ -8,6 +8,7 @@
import { DateTime, Duration } from './../';
import {
+ DatePipe,
DayOfWeekPipe,
DayPipe,
DurationPipe,
@@ -76,12 +77,23 @@ describe('DayOfWeekPipe', () => {
});
});
+describe('DatePipe', () => {
+ it('should format to two digit day number and short month name and year', () => {
+ const pipe = new DatePipe();
+
+ const actual = pipe.transform(dateTime);
+ const expected = '03. Oct 2013';
+
+ expect(actual).toBe(expected);
+ });
+});
+
describe('ShortDatePipe', () => {
it('should format to two digit day number and short month name', () => {
const pipe = new ShortDatePipe();
const actual = pipe.transform(dateTime);
- const expected = '03.Oct';
+ const expected = '03. Oct';
expect(actual).toBe(expected);
});
diff --git a/src/Squidex/app/framework/angular/date-time.pipes.ts b/src/Squidex/app/framework/angular/date-time.pipes.ts
index 28c19e88d..fbfad3d14 100644
--- a/src/Squidex/app/framework/angular/date-time.pipes.ts
+++ b/src/Squidex/app/framework/angular/date-time.pipes.ts
@@ -16,7 +16,17 @@ import { Duration } from './../utils/duration';
})
export class ShortDatePipe implements PipeTransform {
public transform(value: DateTime): any {
- return value.toStringFormat('DD.MMM');
+ return value.toStringFormat('DD. MMM');
+ }
+}
+
+@Pipe({
+ name: 'sqxDate',
+ pure: true
+})
+export class DatePipe implements PipeTransform {
+ public transform(value: DateTime): any {
+ return value.toStringFormat('DD. MMM YYYY');
}
}
diff --git a/src/Squidex/app/framework/module.ts b/src/Squidex/app/framework/module.ts
index f61b8acfd..1edc0e5a5 100644
--- a/src/Squidex/app/framework/module.ts
+++ b/src/Squidex/app/framework/module.ts
@@ -19,6 +19,7 @@ import {
ConfirmClickDirective,
ControlErrorsComponent,
CopyDirective,
+ DatePipe,
DateTimeEditorComponent,
DayOfWeekPipe,
DayPipe,
@@ -87,6 +88,7 @@ import {
ControlErrorsComponent,
CopyDirective,
DateTimeEditorComponent,
+ DatePipe,
DayOfWeekPipe,
DayPipe,
DialogRendererComponent,
@@ -135,6 +137,7 @@ import {
ConfirmClickDirective,
ControlErrorsComponent,
CopyDirective,
+ DatePipe,
DateTimeEditorComponent,
DayOfWeekPipe,
DayPipe,
diff --git a/src/Squidex/app/shared/services/users-provider.service.ts b/src/Squidex/app/shared/services/users-provider.service.ts
index 942fb0ec2..8df6b15f4 100644
--- a/src/Squidex/app/shared/services/users-provider.service.ts
+++ b/src/Squidex/app/shared/services/users-provider.service.ts
@@ -40,7 +40,7 @@ export class UsersProviderService {
return result
.map(dto => {
- if (this.authService.user && dto.id === this.authService.user.id) {
+ if (me && this.authService.user && dto.id === this.authService.user.id) {
dto = new UserDto(dto.id, dto.email, me, dto.pictureUrl, dto.isLocked);
}
return dto;
diff --git a/src/Squidex/app/theme/_bootstrap.scss b/src/Squidex/app/theme/_bootstrap.scss
index 269cfab84..c1684debf 100644
--- a/src/Squidex/app/theme/_bootstrap.scss
+++ b/src/Squidex/app/theme/_bootstrap.scss
@@ -77,6 +77,14 @@ a {
color: inherit;
}
}
+
+ &.force {
+ &:hover {
+ text-decoration: underline !important;
+ cursor: pointer;
+ color: inherit;
+ }
+ }
}
//
diff --git a/src/Squidex/app/theme/_common.scss b/src/Squidex/app/theme/_common.scss
index 774dcea15..da212f221 100644
--- a/src/Squidex/app/theme/_common.scss
+++ b/src/Squidex/app/theme/_common.scss
@@ -20,11 +20,6 @@ body {
color: $color-theme-blue-dark;
}
-// Marker ref for history panel. Must be placed here, because element is created dynamically.
-.marker-ref {
- color: $color-theme-blue-dark;
-}
-
// Common style for user email.
.user-email {
font-style: italic;
diff --git a/src/Squidex/app/theme/_panels.scss b/src/Squidex/app/theme/_panels.scss
index 0e714a181..9ecc81d25 100644
--- a/src/Squidex/app/theme/_panels.scss
+++ b/src/Squidex/app/theme/_panels.scss
@@ -120,11 +120,11 @@
a {
color: $color-dark-foreground;
- }
- a,
- a:hover {
- text-decoration: underline;
+ &,
+ &:hover {
+ text-decoration: underline;
+ }
}
&-success {