Browse Source

Panel system improved.

pull/272/head
Sebastian Stehle 8 years ago
parent
commit
392fc49260
  1. 2
      src/Squidex/app/features/content/pages/content/content-history.component.html
  2. 2
      src/Squidex/app/features/content/pages/content/content-page.component.html
  3. 6
      src/Squidex/app/features/content/shared/contents-selector.component.html
  4. 4
      src/Squidex/app/features/content/shared/references-editor.component.html
  5. 13
      src/Squidex/app/features/content/shared/references-editor.component.ts
  6. 45
      src/Squidex/app/framework/angular/panel-container.directive.ts
  7. 2
      src/Squidex/app/framework/angular/panel.component.html
  8. 28
      src/Squidex/app/framework/angular/panel.component.ts

2
src/Squidex/app/features/content/pages/content/content-history.component.html

@ -1,4 +1,4 @@
<sqx-panel desiredWidth="16rem" isBlank="true"> <sqx-panel desiredWidth="16rem" isBlank="true" [isLazyLoaded]="false">
<ng-container title> <ng-container title>
Activity Activity
</ng-container> </ng-container>

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

@ -1,7 +1,7 @@
<sqx-title message="{app} | {schema} | Content" parameter1="app" parameter2="schema" [value1]="ctx.appName" [value2]="schema?.displayName"></sqx-title> <sqx-title message="{app} | {schema} | Content" parameter1="app" parameter2="schema" [value1]="ctx.appName" [value2]="schema?.displayName"></sqx-title>
<form [formGroup]="contentForm" (ngSubmit)="saveAndPublish()"> <form [formGroup]="contentForm" (ngSubmit)="saveAndPublish()">
<sqx-panel desiredWidth="54rem" showSidebar="true"> <sqx-panel desiredWidth="*" showSidebar="true">
<ng-container title> <ng-container title>
<a class="btn btn-link" (click)="back()"> <a class="btn btn-link" (click)="back()">
<i class="icon-angle-left"></i> <i class="icon-angle-left"></i>

6
src/Squidex/app/features/content/shared/contents-selector.component.html

@ -4,11 +4,13 @@
</ng-container> </ng-container>
<ng-container tabs> <ng-container tabs>
<sqx-search-form (queryChanged)="search($event)"></sqx-search-form> <div class="text-right">
<button class="btn btn-link btn-secondary" (click)="load(true)"> <button class="btn btn-link btn-secondary" (click)="load(true)">
<i class="icon-reset"></i> Refresh <i class="icon-reset"></i> Refresh
</button> </button>
<sqx-search-form (queryChanged)="search($event)" [canArchive]="false"></sqx-search-form>
</div>
</ng-container> </ng-container>
<ng-container content> <ng-container content>

4
src/Squidex/app/features/content/shared/references-editor.component.html

@ -1,6 +1,6 @@
<div class="references-container" [class.disabled]="isDisabled"> <div class="references-container" [class.disabled]="isDisabled">
<div class="drop-area-container" *ngIf="schema"> <div class="drop-area-container" *ngIf="schema">
<div class="drop-area" (click)="selectorModal.show()"> <div class="drop-area" (click)="showModal()">
Click here to link a content. Click here to link a content.
</div> </div>
</div> </div>
@ -25,7 +25,7 @@
</table> </table>
</div> </div>
<ng-container *sqxModalView="selectorModal;onRoot:true;closeAuto:false"> <ng-container *sqxModalView="isModalVisibible;onRoot:true;closeAuto:false">
<sqx-contents-selector <sqx-contents-selector
[language]="language" [language]="language"
[schema]="schema" [schema]="schema"

13
src/Squidex/app/features/content/shared/references-editor.component.ts

@ -18,7 +18,6 @@ import {
FieldDto, FieldDto,
ImmutableArray, ImmutableArray,
MathHelper, MathHelper,
ModalView,
SchemaDetailsDto, SchemaDetailsDto,
SchemasService, SchemasService,
Types Types
@ -46,7 +45,7 @@ export class ReferencesEditorComponent implements ControlValueAccessor, OnInit {
@Input() @Input()
public language: AppLanguageDto; public language: AppLanguageDto;
public selectorModal = new ModalView(); public isModalVisibible = false;
public schema: SchemaDetailsDto; public schema: SchemaDetailsDto;
public schemaFields: FieldDto[]; public schemaFields: FieldDto[];
@ -103,6 +102,14 @@ export class ReferencesEditorComponent implements ControlValueAccessor, OnInit {
this.callTouched = fn; this.callTouched = fn;
} }
public showModal() {
this.isModalVisibible = true;
}
public hideModal() {
this.isModalVisibible = false;
}
public onContentsSelected(contents: ContentDto[]) { public onContentsSelected(contents: ContentDto[]) {
for (let content of contents) { for (let content of contents) {
this.contentItems = this.contentItems.push(content); this.contentItems = this.contentItems.push(content);
@ -112,7 +119,7 @@ export class ReferencesEditorComponent implements ControlValueAccessor, OnInit {
this.updateValue(); this.updateValue();
} }
this.selectorModal.hide(); this.hideModal();
} }
public onContentRemoving(content: ContentDto) { public onContentRemoving(content: ContentDto) {

45
src/Squidex/app/framework/angular/panel-container.directive.ts

@ -5,7 +5,7 @@
* Copyright (c) Squidex UG (haftungsbeschränkt). All rights reserved. * Copyright (c) Squidex UG (haftungsbeschränkt). All rights reserved.
*/ */
import { AfterViewInit, Directive, ElementRef, HostListener, Renderer } from '@angular/core'; import { AfterViewInit, Directive, ElementRef, HostListener } from '@angular/core';
import { PanelComponent } from './panel.component'; import { PanelComponent } from './panel.component';
@ -17,8 +17,7 @@ export class PanelContainerDirective implements AfterViewInit {
private containerWidth = 0; private containerWidth = 0;
constructor( constructor(
private readonly element: ElementRef, private readonly element: ElementRef
private readonly renderer: Renderer
) { ) {
} }
@ -48,28 +47,38 @@ export class PanelContainerDirective implements AfterViewInit {
this.containerWidth = this.element.nativeElement.getBoundingClientRect().width; this.containerWidth = this.element.nativeElement.getBoundingClientRect().width;
} }
let currentPosition = 0; const panels = this.panels;
let currentLayer = this.panels.length * 10;
const last = this.panels[this.panels.length - 1]; let currentSize = 0;
let panelsWidthSpread = 0;
for (let panel of this.panels) { for (let panel of panels) {
const panelRoot = panel.panel.nativeElement; if (panel.desiredWidth !== '*') {
const layoutWidth = panel.desiredWidth;
let layoutWidth = ''; panel.measure(layoutWidth);
if (panel.desiredWidth === '*' && panel === last) { currentSize += panel.renderWidth;
layoutWidth = (this.containerWidth - currentPosition) + 'px';
} else { } else {
layoutWidth = panel.desiredWidth; panelsWidthSpread++;
}
} }
this.renderer.setElementStyle(panelRoot, 'top', '0px'); for (let panel of panels) {
this.renderer.setElementStyle(panelRoot, 'left', currentPosition + 'px'); if (panel.desiredWidth === '*') {
this.renderer.setElementStyle(panelRoot, 'width', layoutWidth); const layoutWidth = (this.containerWidth - currentSize) / panelsWidthSpread;
this.renderer.setElementStyle(panelRoot, 'bottom', '0px');
this.renderer.setElementStyle(panelRoot, 'position', 'absolute'); panel.measure(layoutWidth + 'px');
this.renderer.setElementStyle(panelRoot, 'z-index', currentLayer.toString());
currentSize += panel.renderWidth;
}
}
let currentPosition = 0;
let currentLayer = panels.length * 10;
for (let panel of panels) {
panel.arrange(currentPosition + 'px', currentLayer.toString());
currentPosition += panel.renderWidth; currentPosition += panel.renderWidth;
currentLayer -= 10; currentLayer -= 10;

2
src/Squidex/app/framework/angular/panel.component.html

@ -13,7 +13,7 @@
</h3> </h3>
</div> </div>
<a class="panel-close" sqxParentLink isLazyLoaded="true" *ngIf="showClose"> <a class="panel-close" sqxParentLink [isLazyLoaded]="isLazyLoaded" *ngIf="showClose">
<i class="icon-close"></i> <i class="icon-close"></i>
</a> </a>

28
src/Squidex/app/framework/angular/panel.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 { AfterViewInit, Component, ElementRef, Input, OnDestroy, OnInit, ViewChild } from '@angular/core'; import { AfterViewInit, Component, ElementRef, Input, OnDestroy, OnInit, Renderer, ViewChild } from '@angular/core';
import { slideRightAnimation } from './animations'; import { slideRightAnimation } from './animations';
@ -20,6 +20,8 @@ import { PanelContainerDirective } from './panel-container.directive';
] ]
}) })
export class PanelComponent implements AfterViewInit, OnDestroy, OnInit { export class PanelComponent implements AfterViewInit, OnDestroy, OnInit {
private styleWidth: string;
public renderWidth = 0; public renderWidth = 0;
@Input() @Input()
@ -34,6 +36,9 @@ export class PanelComponent implements AfterViewInit, OnDestroy, OnInit {
@Input() @Input()
public isFullSize = false; public isFullSize = false;
@Input()
public isLazyLoaded = true;
@Input() @Input()
public showScrollbar = false; public showScrollbar = false;
@ -53,7 +58,8 @@ export class PanelComponent implements AfterViewInit, OnDestroy, OnInit {
public panel: ElementRef; public panel: ElementRef;
constructor( constructor(
private readonly container: PanelContainerDirective private readonly container: PanelContainerDirective,
private readonly renderer: Renderer
) { ) {
} }
@ -66,8 +72,24 @@ export class PanelComponent implements AfterViewInit, OnDestroy, OnInit {
} }
public ngAfterViewInit() { public ngAfterViewInit() {
this.container.invalidate();
}
public measure(size: string) {
if (this.styleWidth !== size) {
this.styleWidth = size;
this.renderer.setElementStyle(this.panel.nativeElement, 'width', size);
this.renderWidth = this.panel.nativeElement.getBoundingClientRect().width; this.renderWidth = this.panel.nativeElement.getBoundingClientRect().width;
}
}
this.container.invalidate(); public arrange(left: any, layer: any) {
this.renderer.setElementStyle(this.panel.nativeElement, 'top', '0px');
this.renderer.setElementStyle(this.panel.nativeElement, 'left', left);
this.renderer.setElementStyle(this.panel.nativeElement, 'bottom', '0px');
this.renderer.setElementStyle(this.panel.nativeElement, 'position', 'absolute');
this.renderer.setElementStyle(this.panel.nativeElement, 'z-index', layer);
} }
} }
Loading…
Cancel
Save