diff --git a/src/Squidex/app/features/administration/pages/users/users-page.component.html b/src/Squidex/app/features/administration/pages/users/users-page.component.html index 68c42465a..223f584bf 100644 --- a/src/Squidex/app/features/administration/pages/users/users-page.component.html +++ b/src/Squidex/app/features/administration/pages/users/users-page.component.html @@ -61,10 +61,10 @@ - - diff --git a/src/Squidex/app/features/apps/pages/apps-page.component.html b/src/Squidex/app/features/apps/pages/apps-page.component.html index abd6252d9..38eb2d9d3 100644 --- a/src/Squidex/app/features/apps/pages/apps-page.component.html +++ b/src/Squidex/app/features/apps/pages/apps-page.component.html @@ -19,13 +19,13 @@

{{app.name}}

- Edit + Edit  | - Content · - Assets · - Settings + Content · + Assets · + Settings
@@ -59,7 +59,7 @@
Start with our ready to use blog.
- Sample Code: C# + Sample Code: C#
@@ -76,7 +76,7 @@
Create your profile page.
- Sample Code: C# + Sample Code: C#
@@ -93,7 +93,7 @@
Create app for Squidex Identity.
- Project + Project
diff --git a/src/Squidex/app/features/apps/pages/apps-page.component.ts b/src/Squidex/app/features/apps/pages/apps-page.component.ts index 631592433..845d48924 100644 --- a/src/Squidex/app/features/apps/pages/apps-page.component.ts +++ b/src/Squidex/app/features/apps/pages/apps-page.component.ts @@ -75,10 +75,6 @@ export class AppsPageComponent implements OnInit { this.addAppDialog.show(); } - public stop(event: Event) { - event.stopPropagation(); - } - public trackByApp(index: number, app: AppDto) { return app.id; } diff --git a/src/Squidex/app/features/content/shared/content-item.component.html b/src/Squidex/app/features/content/shared/content-item.component.html index 46fa010eb..94912845c 100644 --- a/src/Squidex/app/features/content/shared/content-item.component.html +++ b/src/Squidex/app/features/content/shared/content-item.component.html @@ -1,4 +1,4 @@ - + - + @@ -21,7 +21,7 @@ - + {{content.lastModified | sqxFromNow}} - + - - - - - + - +
diff --git a/src/Squidex/app/framework/angular/forms/forms-helper.ts b/src/Squidex/app/framework/angular/forms/forms-helper.ts index 0f4b23d27..abe08ed2a 100644 --- a/src/Squidex/app/framework/angular/forms/forms-helper.ts +++ b/src/Squidex/app/framework/angular/forms/forms-helper.ts @@ -25,6 +25,14 @@ export function invalid$(form: AbstractControl): Observable { return form.statusChanges.pipe(map(() => form.invalid), startWith(form.invalid)); } +export function pristine$(form: AbstractControl): Observable { + return form.statusChanges.pipe(map(() => form.pristine), startWith(form.pristine)); +} + +export function dirty$(form: AbstractControl): Observable { + return form.statusChanges.pipe(map(() => form.dirty), startWith(form.dirty)); +} + export function value$(form: AbstractControl): Observable { return form.valueChanges.pipe(startWith(form.value)); } diff --git a/src/Squidex/app/framework/angular/stop-click.directive.ts b/src/Squidex/app/framework/angular/stop-click.directive.ts new file mode 100644 index 000000000..33e128edb --- /dev/null +++ b/src/Squidex/app/framework/angular/stop-click.directive.ts @@ -0,0 +1,26 @@ +/* + * Squidex Headless CMS + * + * @license + * Copyright (c) Squidex UG (haftungsbeschränkt). All rights reserved. + */ + +import { Directive, HostListener, Input } from '@angular/core'; + +@Directive({ + selector: '[sqxStopClick]' +}) +export class StopClickDirective { + @Input('sqxStopClick') + public shouldStop = true; + + @HostListener('click', ['$event']) + public onClick(event: Event) { + const shouldStop: any = this.shouldStop; + + if (shouldStop || shouldStop === '') { + event.stopPropagation(); + event.stopImmediatePropagation(); + } + } +} \ No newline at end of file diff --git a/src/Squidex/app/framework/declarations.ts b/src/Squidex/app/framework/declarations.ts index 6c7ac2aff..d439504f6 100644 --- a/src/Squidex/app/framework/declarations.ts +++ b/src/Squidex/app/framework/declarations.ts @@ -62,6 +62,7 @@ export * from './angular/safe-html.pipe'; export * from './angular/scroll-active.directive'; export * from './angular/shortcut.component'; export * from './angular/sorted.directive'; +export * from './angular/stop-click.directive'; export * from './angular/template-wrapper.directive'; export * from './angular/title.component'; diff --git a/src/Squidex/app/framework/module.ts b/src/Squidex/app/framework/module.ts index 54ea7050f..4b122488b 100644 --- a/src/Squidex/app/framework/module.ts +++ b/src/Squidex/app/framework/module.ts @@ -77,6 +77,7 @@ import { ShortTimePipe, SortedDirective, StarsComponent, + StopClickDirective, TagEditorComponent, TemplateWrapperDirective, TitleComponent, @@ -147,6 +148,7 @@ import { ShortTimePipe, SortedDirective, StarsComponent, + StopClickDirective, TagEditorComponent, TemplateWrapperDirective, TitleComponent, @@ -211,6 +213,7 @@ import { ShortTimePipe, SortedDirective, StarsComponent, + StopClickDirective, TagEditorComponent, TemplateWrapperDirective, TitleComponent, diff --git a/src/Squidex/app/shared/components/asset.component.html b/src/Squidex/app/shared/components/asset.component.html index 8aa751b69..580e992d4 100644 --- a/src/Squidex/app/shared/components/asset.component.html +++ b/src/Squidex/app/shared/components/asset.component.html @@ -20,7 +20,7 @@ - + @@ -98,7 +98,7 @@ - + diff --git a/src/Squidex/app/shared/state/contents.state.ts b/src/Squidex/app/shared/state/contents.state.ts index 85b8b4ba4..090fbe09b 100644 --- a/src/Squidex/app/shared/state/contents.state.ts +++ b/src/Squidex/app/shared/state/contents.state.ts @@ -288,7 +288,7 @@ export abstract class ContentsStateBase extends State { } private replaceContent(content: ContentDto, oldVersion?: Version) { - if (!oldVersion || oldVersion.eq(content.version)) { + if (!oldVersion || !oldVersion.eq(content.version)) { return this.next(s => { const contents = s.contents.replaceBy('id', content); const selectedContent = s.selectedContent && s.selectedContent.id === content.id ? content : s.selectedContent;