diff --git a/src/Squidex.Infrastructure/States/StateFactory.cs b/src/Squidex.Infrastructure/States/StateFactory.cs index 518ad8f31..1b03c1635 100644 --- a/src/Squidex.Infrastructure/States/StateFactory.cs +++ b/src/Squidex.Infrastructure/States/StateFactory.cs @@ -16,7 +16,7 @@ namespace Squidex.Infrastructure.States { public sealed class StateFactory : DisposableObjectBase, IExternalSystem, IStateFactory { - private static readonly TimeSpan CacheDuration = TimeSpan.FromMinutes(10); + private static readonly TimeSpan CacheDuration = TimeSpan.FromMinutes(1); private readonly IPubSub pubSub; private readonly IStateStore store; private readonly IMemoryCache statesCache; diff --git a/src/Squidex/app/features/content/pages/content/content-page.component.html b/src/Squidex/app/features/content/pages/content/content-page.component.html index bb578347a..7427d6d76 100644 --- a/src/Squidex/app/features/content/pages/content/content-page.component.html +++ b/src/Squidex/app/features/content/pages/content/content-page.component.html @@ -41,6 +41,13 @@
+
+ + 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 {