Browse Source

UI improved.

pull/247/head
Sebastian Stehle 8 years ago
parent
commit
e04761bdae
  1. 8
      src/Squidex/app/features/content/pages/contents/contents-page.component.html
  2. 15
      src/Squidex/app/features/content/shared/content-item.component.html
  3. 1
      src/Squidex/app/features/content/shared/content-item.component.scss
  4. 7
      src/Squidex/app/features/content/shared/content-item.component.ts
  5. 2
      src/Squidex/app/features/schemas/pages/schema/field.component.html
  6. 2
      src/Squidex/app/features/schemas/pages/schema/schema-page.component.html
  7. 5
      src/Squidex/app/framework/angular/control-errors.component.ts
  8. 4
      src/Squidex/app/framework/angular/modal-target.directive.ts
  9. 2
      src/Squidex/app/framework/angular/onboarding-tooltip.component.html
  10. 12
      src/Squidex/app/framework/angular/tooltip.component.scss
  11. 64
      src/Squidex/app/framework/angular/tooltip.component.ts
  12. 6
      src/Squidex/app/framework/angular/user-report.component.ts
  13. 1
      src/Squidex/app/framework/declarations.ts
  14. 3
      src/Squidex/app/framework/module.ts
  15. 2
      src/Squidex/app/shared/components/language-selector.component.html
  16. 2
      src/Squidex/app/shell/pages/internal/apps-menu.component.html
  17. 2
      src/Squidex/app/shell/pages/internal/profile-menu.component.html

8
src/Squidex/app/features/content/pages/contents/contents-page.component.html

@ -28,7 +28,7 @@
Search for content using full text search over all fields and languages! Search for content using full text search over all fields and languages!
</sqx-onboarding-tooltip> </sqx-onboarding-tooltip>
<div class="dropdown-menu" *sqxModalView="searchModal" closeAlways="true" [sqxModalTarget]="inputFind"> <div class="dropdown-menu" *sqxModalView="searchModal" [sqxModalTarget]="inputFind">
<sqx-search-form <sqx-search-form
[canArchive]="!isReadOnly" [canArchive]="!isReadOnly"
(queryChanged)="contentsFilter.setValue($event, { emitEvent: false })" (queryChanged)="contentsFilter.setValue($event, { emitEvent: false })"
@ -175,21 +175,21 @@
<div class="modal-dialog"> <div class="modal-dialog">
<div class="modal-content"> <div class="modal-content">
<div class="modal-header"> <div class="modal-header">
<h4 class="modal-title">{{dueTimeAction}} content items</h4> <h4 class="modal-title">{{dueTimeAction}} content item(s)</h4>
</div> </div>
<div class="modal-body"> <div class="modal-body">
<div class="form-check"> <div class="form-check">
<input class="form-check-input" type="radio" [(ngModel)]="dueTimeMode" value="Immediately" id="immediately"> <input class="form-check-input" type="radio" [(ngModel)]="dueTimeMode" value="Immediately" id="immediately">
<label class="form-check-label" for="immediately"> <label class="form-check-label" for="immediately">
{{dueTimeAction}} content items immediately. {{dueTimeAction}} content item(s) immediately.
</label> </label>
</div> </div>
<div class="form-check"> <div class="form-check">
<input class="form-check-input" type="radio" [(ngModel)]="dueTimeMode" value="Scheduled" id="scheduled"> <input class="form-check-input" type="radio" [(ngModel)]="dueTimeMode" value="Scheduled" id="scheduled">
<label class="form-check-label" for="scheduled"> <label class="form-check-label" for="scheduled">
{{dueTimeAction}} content items at a later point date and time. {{dueTimeAction}} content item(s) at a later point date and time.
</label> </label>
</div> </div>

15
src/Squidex/app/features/content/shared/content-item.component.html

@ -11,26 +11,21 @@
</td> </td>
<td class="cell-time"> <td class="cell-time">
<span *ngIf="!content.scheduledTo"> <span *ngIf="!content.scheduledTo">
<span class="content-status content-status-{{content.status | lowercase}}" (click)="scheduleTooltip.toggle(); $event.stopPropagation()" #statusIcon> <span class="content-status content-status-{{content.status | lowercase}}" #statusIcon>
<i class="icon-circle"></i> <i class="icon-circle"></i>
</span> </span>
<div class="content-status-tooltip" *sqxModalView="scheduleTooltip" closeAlways="true" [sqxModalTarget]="statusIcon" position="topLeft" @fade> <sqx-tooltip [target]="statusIcon">{{content.status}}</sqx-tooltip>
{{content.status}}
</div>
</span> </span>
<span *ngIf="content.scheduledTo"> <span *ngIf="content.scheduledTo">
<span class="content-status content-status-{{content.scheduledTo | lowercase}}" (click)="scheduleTooltip.toggle(); $event.stopPropagation()" #statusIcon> <span class="content-status content-status-{{content.scheduledTo | lowercase}}" #statusIcon>
<i class="icon-clock"></i> <i class="icon-clock"></i>
</span> </span>
<div class="content-status-tooltip" *sqxModalView="scheduleTooltip" closeAlways="true" [sqxModalTarget]="statusIcon" position="topLeft" @fade> <sqx-tooltip [target]="statusIcon">Will be set to '{{content.scheduledTo}}' at {{content.scheduledAt | sqxFullDateTime}}</sqx-tooltip>
Will be set {{content.scheduledTo}} at {{content.scheduledAt | sqxFullDateTime}}
</div>
</span> </span>
<small class="item-modified">{{content.lastModified | sqxFromNow}}</small> <small class="item-modified">{{content.lastModified | sqxFromNow}}</small>
</td> </td>
<td class="cell-user"> <td class="cell-user">
@ -41,7 +36,7 @@
<button type="button" class="btn btn-link btn-secondary" (click)="dropdown.toggle(); $event.stopPropagation()" [class.active]="dropdown.isOpen | async" #optionsButton> <button type="button" class="btn btn-link btn-secondary" (click)="dropdown.toggle(); $event.stopPropagation()" [class.active]="dropdown.isOpen | async" #optionsButton>
<i class="icon-dots"></i> <i class="icon-dots"></i>
</button> </button>
<div class="dropdown-menu" *sqxModalView="dropdown" closeAlways="true" [sqxModalTarget]="optionsButton" @fade> <div class="dropdown-menu" *sqxModalView="dropdown" [sqxModalTarget]="optionsButton" @fade>
<a class="dropdown-item" (click)="publishing.emit(); $event.stopPropagation()" *ngIf="content.status === 'Draft'"> <a class="dropdown-item" (click)="publishing.emit(); $event.stopPropagation()" *ngIf="content.status === 'Draft'">
Publish Publish
</a> </a>

1
src/Squidex/app/features/content/shared/content-item.component.scss

@ -4,7 +4,6 @@
.content-status { .content-status {
& { & {
vertical-align: middle; vertical-align: middle;
cursor: pointer;
} }
&-published { &-published {

7
src/Squidex/app/features/content/shared/content-item.component.ts

@ -5,7 +5,7 @@
* Copyright (c) Squidex UG (haftungsbeschränkt). All rights reserved. * Copyright (c) Squidex UG (haftungsbeschränkt). All rights reserved.
*/ */
import { Component, EventEmitter, Input, OnChanges, OnInit, Output } from '@angular/core'; import { ChangeDetectionStrategy, Component, EventEmitter, Input, OnChanges, OnInit, Output } from '@angular/core';
import { import {
AppContext, AppContext,
@ -27,7 +27,8 @@ import {
], ],
animations: [ animations: [
fadeAnimation fadeAnimation
] ],
changeDetection: ChangeDetectionStrategy.OnPush
}) })
export class ContentItemComponent implements OnInit, OnChanges { export class ContentItemComponent implements OnInit, OnChanges {
@Output() @Output()
@ -74,8 +75,6 @@ export class ContentItemComponent implements OnInit, OnChanges {
public dropdown = new ModalView(false, true); public dropdown = new ModalView(false, true);
public scheduleTooltip = new ModalView(false, true);
public values: any[] = []; public values: any[] = [];
constructor(public readonly ctx: AppContext constructor(public readonly ctx: AppContext

2
src/Squidex/app/features/schemas/pages/schema/field.component.html

@ -26,7 +26,7 @@
<button type="button" class="btn btn-link btn-secondary" (click)="dropdown.toggle()" [class.active]="dropdown.isOpen | async" #optionsButton> <button type="button" class="btn btn-link btn-secondary" (click)="dropdown.toggle()" [class.active]="dropdown.isOpen | async" #optionsButton>
<i class="icon-dots"></i> <i class="icon-dots"></i>
</button> </button>
<div class="dropdown-menu" *sqxModalView="dropdown" closeAlways="true" [sqxModalTarget]="optionsButton" @fade> <div class="dropdown-menu" *sqxModalView="dropdown" [sqxModalTarget]="optionsButton" @fade>
<a class="dropdown-item" (click)="enabling.emit()" *ngIf="field.isDisabled" [class.disabled]="field.isLocked"> <a class="dropdown-item" (click)="enabling.emit()" *ngIf="field.isDisabled" [class.disabled]="field.isLocked">
Enable Enable
</a> </a>

2
src/Squidex/app/features/schemas/pages/schema/schema-page.component.html

@ -21,7 +21,7 @@
<button type="button" class="btn btn-link btn-secondary" (click)="editOptionsDropdown.toggle()" [class.active]="editOptionsDropdown.isOpen | async" #buttonOptions> <button type="button" class="btn btn-link btn-secondary" (click)="editOptionsDropdown.toggle()" [class.active]="editOptionsDropdown.isOpen | async" #buttonOptions>
<i class="icon-dots"></i> <i class="icon-dots"></i>
</button> </button>
<div class="dropdown-menu" *sqxModalView="editOptionsDropdown" closeAlways="true" [sqxModalTarget]="buttonOptions" @fade> <div class="dropdown-menu" *sqxModalView="editOptionsDropdown" [sqxModalTarget]="buttonOptions" @fade>
<a class="dropdown-item" (click)="configureScriptsDialog.show()"> <a class="dropdown-item" (click)="configureScriptsDialog.show()">
Scripts Scripts
</a> </a>

5
src/Squidex/app/framework/angular/control-errors.component.ts

@ -5,7 +5,7 @@
* Copyright (c) Sebastian Stehle. All rights r vbeserved * Copyright (c) Sebastian Stehle. All rights r vbeserved
*/ */
import { Component, Host, Input, OnChanges, Optional } from '@angular/core'; import { ChangeDetectionStrategy, Component, Host, Input, OnChanges, Optional } from '@angular/core';
import { AbstractControl, FormGroupDirective } from '@angular/forms'; import { AbstractControl, FormGroupDirective } from '@angular/forms';
import { fadeAnimation } from './animations'; import { fadeAnimation } from './animations';
@ -30,7 +30,8 @@ const DEFAULT_ERRORS: { [key: string]: string } = {
templateUrl: './control-errors.component.html', templateUrl: './control-errors.component.html',
animations: [ animations: [
fadeAnimation fadeAnimation
] ],
changeDetection: ChangeDetectionStrategy.OnPush
}) })
export class ControlErrorsComponent implements OnChanges { export class ControlErrorsComponent implements OnChanges {
private displayFieldName: string; private displayFieldName: string;

4
src/Squidex/app/framework/angular/modal-target.directive.ts

@ -87,6 +87,10 @@ export class ModalTargetDirective implements AfterViewInit, OnDestroy, OnInit {
} }
private updatePosition() { private updatePosition() {
if (!this.targetElement) {
return;
}
const viewportHeight = document.documentElement.clientHeight; const viewportHeight = document.documentElement.clientHeight;
const viewportWidth = document.documentElement.clientWidth; const viewportWidth = document.documentElement.clientWidth;

2
src/Squidex/app/framework/angular/onboarding-tooltip.component.html

@ -1,4 +1,4 @@
<div *sqxModalView="tooltipModal;onRoot:true" closeAlways="true" @fade> <div *sqxModalView="tooltipModal;onRoot:true" @fade>
<div class="onboarding-rect" [sqxModalTarget]="for" [offset]="4" [autoPosition]="false" position="full"></div> <div class="onboarding-rect" [sqxModalTarget]="for" [offset]="4" [autoPosition]="false" position="full"></div>
<div class="onboarding-help" [sqxModalTarget]="for" [offset]="4" [autoPosition]="false" [position]="position"> <div class="onboarding-help" [sqxModalTarget]="for" [offset]="4" [autoPosition]="false" [position]="position">
<div class="onboarding-text"> <div class="onboarding-text">

12
src/Squidex/app/framework/angular/tooltip.component.scss

@ -0,0 +1,12 @@
@import '_vars';
@import '_mixins';
.tooltip-container {
@include border-radius;
background: $color-tooltip;
border: 0;
font-size: .9rem;
font-weight: normal;
color: $color-dark-foreground;
padding: .5rem;
}

64
src/Squidex/app/framework/angular/tooltip.component.ts

@ -0,0 +1,64 @@
/*
* Squidex Headless CMS
*
* @license
* Copyright (c) Squidex UG (haftungsbeschränkt). All rights reserved.
*/
import { ChangeDetectionStrategy, Component, Input, OnDestroy, OnInit, Renderer } from '@angular/core';
import { ModalView } from './../utils/modal-view';
import { fadeAnimation } from './animations';
@Component({
selector: 'sqx-tooltip',
styleUrls: ['./tooltip.component.scss'],
template: `
<div class="tooltip-container" *sqxModalView="modal;onRoot:true;closeAuto:false" [sqxModalTarget]="target" position="topLeft">
<ng-content></ng-content>
</div>`,
animations: [
fadeAnimation
],
changeDetection: ChangeDetectionStrategy.OnPush
})
export class TooltipComponent implements OnDestroy, OnInit {
private targetMouseEnterListener: any;
private targetMouseLeaveListener: any;
@Input()
public target: any;
public modal = new ModalView(false, false);
constructor(
private readonly renderer: Renderer
) {
}
public ngOnDestroy() {
if (this.targetMouseEnterListener) {
this.targetMouseEnterListener();
}
if (this.targetMouseLeaveListener) {
this.targetMouseLeaveListener();
}
}
public ngOnInit() {
if (this.target) {
this.targetMouseEnterListener =
this.renderer.listen(this.target, 'mouseenter', () => {
this.modal.show();
// this.changeDetector.detectChanges();
});
this.targetMouseLeaveListener =
this.renderer.listen(this.target, 'mouseleave', () => {
this.modal.hide();
});
}
}
}

6
src/Squidex/app/framework/angular/user-report.component.ts

@ -5,7 +5,7 @@
* Copyright (c) Squidex UG (haftungsbeschränkt). All rights reserved. * Copyright (c) Squidex UG (haftungsbeschränkt). All rights reserved.
*/ */
import { Component, OnDestroy, OnInit } from '@angular/core'; import { ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core';
import { ResourceLoaderService } from './../services/resource-loader.service'; import { ResourceLoaderService } from './../services/resource-loader.service';
import { UserReportConfig } from './../configurations'; import { UserReportConfig } from './../configurations';
@ -17,9 +17,11 @@ import { UserReportConfig } from './../configurations';
export class UserReportComponent implements OnDestroy, OnInit { export class UserReportComponent implements OnDestroy, OnInit {
private loadingTimer: any; private loadingTimer: any;
constructor(config: UserReportConfig, constructor(config: UserReportConfig, changeDetector: ChangeDetectorRef,
private readonly resourceLoader: ResourceLoaderService private readonly resourceLoader: ResourceLoaderService
) { ) {
changeDetector.detach();
window['_urq'] = window['_urq'] || []; window['_urq'] = window['_urq'] || [];
window['_urq'].push(['initSite', config.siteId]); window['_urq'].push(['initSite', config.siteId]);
} }

1
src/Squidex/app/framework/declarations.ts

@ -48,6 +48,7 @@ export * from './angular/tag-editor.component';
export * from './angular/template-wrapper.directive'; export * from './angular/template-wrapper.directive';
export * from './angular/title.component'; export * from './angular/title.component';
export * from './angular/toggle.component'; export * from './angular/toggle.component';
export * from './angular/tooltip.component';
export * from './angular/user-report.component'; export * from './angular/user-report.component';
export * from './angular/validators'; export * from './angular/validators';
export * from './configurations'; export * from './configurations';

3
src/Squidex/app/framework/module.ts

@ -71,6 +71,7 @@ import {
TitleService, TitleService,
TitleComponent, TitleComponent,
ToggleComponent, ToggleComponent,
TooltipComponent,
UserReportComponent UserReportComponent
} from './declarations'; } from './declarations';
@ -131,6 +132,7 @@ import {
TemplateWrapperDirective, TemplateWrapperDirective,
TitleComponent, TitleComponent,
ToggleComponent, ToggleComponent,
TooltipComponent,
UserReportComponent UserReportComponent
], ],
exports: [ exports: [
@ -182,6 +184,7 @@ import {
TemplateWrapperDirective, TemplateWrapperDirective,
TitleComponent, TitleComponent,
ToggleComponent, ToggleComponent,
TooltipComponent,
UserReportComponent, UserReportComponent,
HttpClientModule, HttpClientModule,
FormsModule, FormsModule,

2
src/Squidex/app/shared/components/language-selector.component.html

@ -8,7 +8,7 @@
<button type="button" class="btn btn-secondary dropdown-toggle" [attr.title]="selectedLanguage.englishName" (click)="dropdown.toggle(); $event.stopPropagation()" #button> <button type="button" class="btn btn-secondary dropdown-toggle" [attr.title]="selectedLanguage.englishName" (click)="dropdown.toggle(); $event.stopPropagation()" #button>
{{selectedLanguage.iso2Code}} {{selectedLanguage.iso2Code}}
</button> </button>
<div class="dropdown-menu" *sqxModalView="dropdown" closeAlways="true" [sqxModalTarget]="button" @fade> <div class="dropdown-menu" *sqxModalView="dropdown" [sqxModalTarget]="button" @fade>
<div class="dropdown-item" *ngFor="let language of languages" [class.active]="language == selectedLanguage" (click)="selectLanguage(language)"> <div class="dropdown-item" *ngFor="let language of languages" [class.active]="language == selectedLanguage" (click)="selectLanguage(language)">
<strong class="iso-code">{{language.iso2Code}}</strong> &nbsp; &nbsp; ({{language.englishName}}) <strong class="iso-code">{{language.iso2Code}}</strong> &nbsp; &nbsp; ({{language.englishName}})
</div> </div>

2
src/Squidex/app/shell/pages/internal/apps-menu.component.html

@ -2,7 +2,7 @@
<li class="nav-item dropdown"> <li class="nav-item dropdown">
<span class="nav-link dropdown-toggle" id="app-name" (click)="appsMenu.toggle()">{{selectedApp ? selectedApp.name : 'Apps Overview'}}</span> <span class="nav-link dropdown-toggle" id="app-name" (click)="appsMenu.toggle()">{{selectedApp ? selectedApp.name : 'Apps Overview'}}</span>
<div class="dropdown-menu" *sqxModalView="appsMenu" closeAlways="true" @fade> <div class="dropdown-menu" *sqxModalView="appsMenu" @fade>
<a class="dropdown-item all-apps" routerLink="/app"> <a class="dropdown-item all-apps" routerLink="/app">
<span class="all-apps-text">All Apps</span> <span class="all-apps-text">All Apps</span>
<span class="all-apps-pill badge badge-pill badge-primary">{{apps.length}}</span> <span class="all-apps-pill badge badge-pill badge-primary">{{apps.length}}</span>

2
src/Squidex/app/shell/pages/internal/profile-menu.component.html

@ -8,7 +8,7 @@
</span> </span>
</span> </span>
<div class="dropdown-menu" *sqxModalView="modalMenu" closeAlways="true" @fade> <div class="dropdown-menu" *sqxModalView="modalMenu" @fade>
<a class="dropdown-item" routerLink="/app/administration" *ngIf="isAdmin"> <a class="dropdown-item" routerLink="/app/administration" *ngIf="isAdmin">
Administration Administration
</a> </a>

Loading…
Cancel
Save