Browse Source

Some progress with asset management

pull/65/head
Sebastian Stehle 9 years ago
parent
commit
c1864ac8b1
  1. 4
      src/Squidex/Views/Shared/Docs.cshtml
  2. 6
      src/Squidex/app/features/assets/pages/asset.component.html
  3. 6
      src/Squidex/app/features/assets/pages/asset.component.scss
  4. 12
      src/Squidex/app/features/assets/pages/asset.component.ts
  5. 2
      src/Squidex/app/features/assets/pages/assets-page.component.html
  6. 11
      src/Squidex/app/features/content/module.ts
  7. 7
      src/Squidex/app/features/content/pages/content/content-field.component.html
  8. 2
      src/Squidex/app/features/schemas/declarations.ts
  9. 4
      src/Squidex/app/features/schemas/module.ts
  10. 6
      src/Squidex/app/features/schemas/pages/schema/field.component.html
  11. 3
      src/Squidex/app/features/schemas/pages/schema/schema-page.component.ts
  12. 3
      src/Squidex/app/features/schemas/pages/schema/types/assets-ui.component.html
  13. 2
      src/Squidex/app/features/schemas/pages/schema/types/assets-ui.component.scss
  14. 25
      src/Squidex/app/features/schemas/pages/schema/types/assets-ui.component.ts
  15. 9
      src/Squidex/app/features/schemas/pages/schema/types/assets-validation.component.html
  16. 10
      src/Squidex/app/features/schemas/pages/schema/types/assets-validation.component.scss
  17. 25
      src/Squidex/app/features/schemas/pages/schema/types/assets-validation.component.ts
  18. 29
      src/Squidex/app/framework/angular/hide-invalid-image.directive.ts
  19. 98
      src/Squidex/app/framework/angular/image-source.directive.ts
  20. 2
      src/Squidex/app/framework/declarations.ts
  21. 6
      src/Squidex/app/framework/module.ts
  22. 3
      src/Squidex/app/shared/components/assets-editor.component.html
  23. 8
      src/Squidex/app/shared/components/assets-editor.component.scss
  24. 44
      src/Squidex/app/shared/components/assets-editor.component.ts
  25. 1
      src/Squidex/app/shared/declarations.ts
  26. 3
      src/Squidex/app/shared/module.ts
  27. 11
      src/Squidex/app/shared/services/schemas.service.spec.ts
  28. 17
      src/Squidex/app/shared/services/schemas.service.ts
  29. 2
      src/Squidex/app/shared/utils/file-helper.ts
  30. 128
      src/Squidex/app/theme/icomoon/demo.html
  31. BIN
      src/Squidex/app/theme/icomoon/fonts/icomoon.eot
  32. 2
      src/Squidex/app/theme/icomoon/fonts/icomoon.svg
  33. BIN
      src/Squidex/app/theme/icomoon/fonts/icomoon.ttf
  34. BIN
      src/Squidex/app/theme/icomoon/fonts/icomoon.woff
  35. 2
      src/Squidex/app/theme/icomoon/selection.json
  36. 34
      src/Squidex/app/theme/icomoon/style.css
  37. 8
      src/Squidex/package.json

4
src/Squidex/Views/Shared/Docs.cshtml

@ -24,6 +24,10 @@
.method-content a {
color: #3d7dd5 !important;
}
.redoc-markdown-block code {
color: #ffffff !important;
}
</style>
</head>
<body>

6
src/Squidex/app/features/assets/pages/asset.component.html

@ -7,11 +7,11 @@
{{fileType}}
</span>
<div *ngIf="asset.isImage">
<img [attr.src]="previewUrl" sqxHideInvalidImage (error)="retryLoadingImage()">
<div *ngIf="asset.isImage" class="file-image">
<img [sqxImageSource]="previewUrl">
</div>
<div *ngIf="!asset.isImage" class="file-icon-container">
<img class="file-icon" [attr.src]="fileIcon" sqxHideInvalidImage>
<img class="file-icon" [attr.src]="fileIcon">
</div>
<div class="file-overlay">

6
src/Squidex/app/features/assets/pages/asset.component.scss

@ -5,6 +5,8 @@ $card-size: 240px;
@mixin overlay-container {
position: relative;
padding: 0;
overflow: hidden;
}
@mixin overlay {
@ -101,6 +103,10 @@ $card-size: 240px;
font-size: .8rem;
}
&-image {
height: 100%;
}
&-preview {
& {
@include overlay-container;

12
src/Squidex/app/features/assets/pages/asset.component.ts

@ -36,7 +36,6 @@ import {
]
})
export class AssetComponent extends AppComponentBase implements OnInit {
private previewRetries = 0;
private version: Version;
public renameDialog = new ModalView();
@ -204,19 +203,8 @@ export class AssetComponent extends AppComponentBase implements OnInit {
this.fileIcon = FileHelper.fileIcon(asset.mimeType);
this.progress = 0;
this.previewUrl = FileHelper.assetPreviewUrl(this.apiUrl, asset);
this.previewRetries = 0;
this.version = asset.version;
this.resetRename();
}
public retryLoadingImage() {
this.previewRetries++;
if (this.previewRetries <= 10) {
setTimeout(() => {
this.previewUrl = FileHelper.assetPreviewUrl(this.apiUrl, this.asset);
}, this.previewRetries * 1000);
}
}
}

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

@ -1,6 +1,6 @@
<sqx-title message="{app} | Assets" parameter1="app" value1="{{appName() | async}}"></sqx-title>
<sqx-panel panelWidth="71.5rem">
<sqx-panel panelWidth="60rem">
<div class="panel-header">
<div class="panel-title-row">
<div class="float-right">

11
src/Squidex/app/features/content/module.ts

@ -42,7 +42,13 @@ const routes: Routes = [
children: [
{
path: 'new',
component: ContentPageComponent
component: ContentPageComponent,
children: [
{
path: 'assets',
loadChildren: './../assets/module#SqxFeatureAssetsModule'
}
]
}, {
path: ':contentId',
component: ContentPageComponent,
@ -56,6 +62,9 @@ const routes: Routes = [
data: {
channel: 'contents.{contentId}'
}
}, {
path: 'assets',
loadChildren: './../assets/module#SqxFeatureAssetsModule'
}
]
}

7
src/Squidex/app/features/content/pages/content/content-field.component.html

@ -89,6 +89,13 @@
<div *ngSwitchCase="'Json'">
<sqx-json-editor [formControlName]="language"></sqx-json-editor>
</div>
<div *ngSwitchCase="'Assets'">
<div class="assets-container">
<a routerLink="assets" class="assets-link">Show Assets</a>
<sqx-assets-editor [formControlName]="language"></sqx-assets-editor>
</div>
</div>
</div>
</div>
</div>

2
src/Squidex/app/features/schemas/declarations.ts

@ -5,6 +5,8 @@
* Copyright (c) Sebastian Stehle. All rights reserved
*/
export * from './pages/schema/types/assets-ui.component';
export * from './pages/schema/types/assets-validation.component';
export * from './pages/schema/types/boolean-ui.component';
export * from './pages/schema/types/boolean-validation.component';
export * from './pages/schema/types/date-time-ui.component';

4
src/Squidex/app/features/schemas/module.ts

@ -21,6 +21,8 @@ import { SortedDirective } from './utils/sorted.directive';
import {
FieldComponent,
AssetsUIComponent,
AssetsValidationComponent,
BooleanUIComponent,
BooleanValidationComponent,
DateTimeUIComponent,
@ -82,6 +84,8 @@ const routes: Routes = [
],
declarations: [
FieldComponent,
AssetsUIComponent,
AssetsValidationComponent,
BooleanUIComponent,
BooleanValidationComponent,
DateTimeUIComponent,

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

@ -147,6 +147,9 @@
<div *ngSwitchCase="'Json'">
<sqx-json-validation [editForm]="editForm" [properties]="field.properties"></sqx-json-validation>
</div>
<div *ngSwitchCase="'Assets'">
<sqx-assets-validation [editForm]="editForm" [properties]="field.properties"></sqx-assets-validation>
</div>
</div>
</div>
@ -170,6 +173,9 @@
<div *ngSwitchCase="'Json'">
<sqx-json-ui [editForm]="editForm" [properties]="field.properties"></sqx-json-ui>
</div>
<div *ngSwitchCase="'Assets'">
<sqx-assets-ui [editForm]="editForm" [properties]="field.properties"></sqx-assets-ui>
</div>
</div>
</div>
</form>

3
src/Squidex/app/features/schemas/pages/schema/schema-page.component.ts

@ -42,6 +42,7 @@ import { SchemaDeleted, SchemaUpdated } from './../messages';
})
export class SchemaPageComponent extends AppComponentBase implements OnInit {
public fieldTypes: string[] = [
'Assets',
'Boolean',
'DateTime',
'Geolocation',
@ -66,7 +67,7 @@ export class SchemaPageComponent extends AppComponentBase implements OnInit {
public addFieldFormSubmitted = false;
public addFieldForm: FormGroup =
this.formBuilder.group({
type: [this.fieldTypes[0],
type: ['String',
[
Validators.required
]],

3
src/Squidex/app/features/schemas/pages/schema/types/assets-ui.component.html

@ -0,0 +1,3 @@
<div [formGroup]="editForm">
<span>Nothing to setup</span>
<div>

2
src/Squidex/app/features/schemas/pages/schema/types/assets-ui.component.scss

@ -0,0 +1,2 @@
@import '_vars';
@import '_mixins';

25
src/Squidex/app/features/schemas/pages/schema/types/assets-ui.component.ts

@ -0,0 +1,25 @@
/*
* Squidex Headless CMS
*
* @license
* Copyright (c) Sebastian Stehle. All rights reserved
*/
import { ChangeDetectionStrategy, Component, Input } from '@angular/core';
import { FormGroup } from '@angular/forms';
import { AssetsFieldPropertiesDto } from 'shared';
@Component({
selector: 'sqx-assets-ui',
styleUrls: ['assets-ui.component.scss'],
templateUrl: 'assets-ui.component.html',
changeDetection: ChangeDetectionStrategy.OnPush
})
export class AssetsUIComponent {
@Input()
public editForm: FormGroup;
@Input()
public properties: AssetsFieldPropertiesDto;
}

9
src/Squidex/app/features/schemas/pages/schema/types/assets-validation.component.html

@ -0,0 +1,9 @@
<div [formGroup]="editForm">
<div class="form-group row">
<label class="col col-3 col-form-checkbox-label" for="field-required">Required</label>
<div class="col col-6">
<input type="checkbox" class="form-check-input" id="field-required" formControlName="isRequired" />
</div>
</div>
</div>

10
src/Squidex/app/features/schemas/pages/schema/types/assets-validation.component.scss

@ -0,0 +1,10 @@
@import '_vars';
@import '_mixins';
.form-check-input {
margin: 0;
}
.form-group {
margin-top: .5rem;
}

25
src/Squidex/app/features/schemas/pages/schema/types/assets-validation.component.ts

@ -0,0 +1,25 @@
/*
* Squidex Headless CMS
*
* @license
* Copyright (c) Sebastian Stehle. All rights reserved
*/
import { ChangeDetectionStrategy, Component, Input } from '@angular/core';
import { FormGroup } from '@angular/forms';
import { AssetsFieldPropertiesDto } from 'shared';
@Component({
selector: 'sqx-assets-validation',
styleUrls: ['assets-validation.component.scss'],
templateUrl: 'assets-validation.component.html',
changeDetection: ChangeDetectionStrategy.OnPush
})
export class AssetsValidationComponent {
@Input()
public editForm: FormGroup;
@Input()
public properties: AssetsFieldPropertiesDto;
}

29
src/Squidex/app/framework/angular/hide-invalid-image.directive.ts

@ -1,29 +0,0 @@
/*
* Squidex Headless CMS
*
* @license
* Copyright (c) Sebastian Stehle. All rights reserved
*/
import { Directive, ElementRef, HostListener, Renderer } from '@angular/core';
@Directive({
selector: '[sqxHideInvalidImage]'
})
export class HideInvalidImage {
constructor(
private readonly elementRef: ElementRef,
private readonly renderer: Renderer
) {
}
@HostListener('error')
public onError() {
this.renderer.setElementStyle(this.elementRef.nativeElement, 'visibility', 'hidden');
}
@HostListener('load')
public onLoad() {
this.renderer.setElementStyle(this.elementRef.nativeElement, 'visibility', 'visible');
}
}

98
src/Squidex/app/framework/angular/image-source.directive.ts

@ -0,0 +1,98 @@
/*
* Squidex Headless CMS
*
* @license
* Copyright (c) Sebastian Stehle. All rights reserved
*/
import { Directive, ElementRef, HostListener, Input, OnChanges, OnInit, Renderer } from '@angular/core';
import { MathHelper } from './../utils/math-helper';
@Directive({
selector: '[sqxImageSource]'
})
export class ImageSourceComponent implements OnChanges, OnInit {
private retries = 0;
private query = MathHelper.guid();
@Input('sqxImageSource')
public imageSource: string;
@Input()
public retryCount = 10;
@Input()
public parent: any = null;
constructor(
private readonly elementRef: ElementRef,
private readonly renderer: Renderer
) {
}
public ngOnChanges() {
this.retries = 0;
this.setImageSource();
}
public ngOnInit() {
if (this.parent === null) {
this.parent = this.elementRef.nativeElement.parentElement;
}
this.resize(this.parent);
this.renderer.listen(this.parent, 'resize', () => {
this.resize(this.parent);
});
}
@HostListener('error')
public onError() {
this.renderer.setElementStyle(this.elementRef.nativeElement, 'visibility', 'hidden');
this.retryLoadingImage();
}
@HostListener('resize')
public onResize() {
this.setImageSource();
}
@HostListener('load')
public onLoad() {
this.renderer.setElementStyle(this.elementRef.nativeElement, 'visibility', 'visible');
}
private resize(parent: any) {
const size = parent.getBoundingClientRect();
this.renderer.setElementStyle(this.elementRef.nativeElement, 'width', size.width + 'px');
this.renderer.setElementStyle(this.elementRef.nativeElement, 'height', size.height + 'px');
}
private setImageSource() {
const size = this.elementRef.nativeElement.getBoundingClientRect();
const w = Math.round(size.width);
const h = Math.round(size.height);
const source = `${this.imageSource}&width=${w}&height=${h}&mode=Crop&q=${this.query}`;
this.renderer.setElementAttribute(this.elementRef.nativeElement, 'src', source);
}
private retryLoadingImage() {
this.retries++;
if (this.retries <= 10) {
setTimeout(() => {
this.query = MathHelper.guid();
this.setImageSource();
}, this.retries * 1000);
}
}
}

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

@ -17,8 +17,8 @@ export * from './angular/file-drop.directive';
export * from './angular/focus-on-change.directive';
export * from './angular/focus-on-init.directive';
export * from './angular/geolocation-editor.component';
export * from './angular/hide-invalid-image.directive';
export * from './angular/http-utils';
export * from './angular/image-source.directive';
export * from './angular/indeterminate-value.directive';
export * from './angular/json-editor.component';
export * from './angular/lowercase-input.directive';

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

@ -27,7 +27,7 @@ import {
FocusOnInitDirective,
FromNowPipe,
GeolocationEditorComponent,
HideInvalidImage,
ImageSourceComponent,
IndeterminateValueDirective,
JsonEditorComponent,
LocalStoreService,
@ -81,7 +81,7 @@ import {
FocusOnInitDirective,
FromNowPipe,
GeolocationEditorComponent,
HideInvalidImage,
ImageSourceComponent,
IndeterminateValueDirective,
JsonEditorComponent,
LowerCaseInputDirective,
@ -119,7 +119,7 @@ import {
FocusOnInitDirective,
FromNowPipe,
GeolocationEditorComponent,
HideInvalidImage,
ImageSourceComponent,
IndeterminateValueDirective,
JsonEditorComponent,
LowerCaseInputDirective,

3
src/Squidex/app/shared/components/assets-editor.component.html

@ -0,0 +1,3 @@
<div class="assets-container">
</div>

8
src/Squidex/app/shared/components/assets-editor.component.scss

@ -0,0 +1,8 @@
@import '_vars';
@import '_mixins';
.assets {
&-container {
border: 1px solid $color-input;
}
}

44
src/Squidex/app/shared/components/assets-editor.component.ts

@ -0,0 +1,44 @@
/*
* Squidex Headless CMS
*
* @license
* Copyright (c) Sebastian Stehle. All rights reserved
*/
import { Component, forwardRef } from '@angular/core';
import { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';
const NOOP = () => { /* NOOP */ };
export const SQX_ASSETS_EDITOR_CONTROL_VALUE_ACCESSOR: any = {
provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => AssetsEditorComponent), multi: true
};
@Component({
selector: 'sqx-assets-editor',
styleUrls: ['./assets-editor.component.scss'],
templateUrl: './assets-editor.component.html',
providers: [SQX_ASSETS_EDITOR_CONTROL_VALUE_ACCESSOR]
})
export class AssetsEditorComponent implements ControlValueAccessor {
private changeCallback: (value: any) => void = NOOP;
private touchedCallback: () => void = NOOP;
public isDisabled = false;
public writeValue(value: any) {
// TODO
}
public setDisabledState(isDisabled: boolean): void {
this.isDisabled = isDisabled;
}
public registerOnChange(fn: any) {
this.changeCallback = fn;
}
public registerOnTouched(fn: any) {
this.touchedCallback = fn;
}
}

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

@ -7,6 +7,7 @@
export * from './components/app-component-base';
export * from './components/app-form.component';
export * from './components/assets-editor.component';
export * from './components/component-base';
export * from './components/dashboard-link.directive';
export * from './components/help.component';

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

@ -19,6 +19,7 @@ import {
AppsStoreService,
AppsService,
AppMustExistGuard,
AssetsEditorComponent,
AssetsService,
AuthService,
ContentsService,
@ -49,6 +50,7 @@ import {
],
declarations: [
AppFormComponent,
AssetsEditorComponent,
DashboardLinkDirective,
HelpComponent,
HistoryComponent,
@ -56,6 +58,7 @@ import {
],
exports: [
AppFormComponent,
AssetsEditorComponent,
DashboardLinkDirective,
HelpComponent,
HistoryComponent,

11
src/Squidex/app/shared/services/schemas.service.spec.ts

@ -157,6 +157,14 @@ describe('SchemasService', () => {
properties: {
fieldType: 'Geolocation'
}
}, {
fieldId: 7,
name: 'field7',
isHidden: true,
isDisabled: true,
properties: {
fieldType: 'Assets'
}
}]
}
})
@ -181,7 +189,8 @@ describe('SchemasService', () => {
new FieldDto(3, 'field3', true, true, createProperties('Boolean')),
new FieldDto(4, 'field4', true, true, createProperties('DateTime')),
new FieldDto(5, 'field5', true, true, createProperties('Json')),
new FieldDto(6, 'field6', true, true, createProperties('Geolocation'))
new FieldDto(6, 'field6', true, true, createProperties('Geolocation')),
new FieldDto(6, 'field6', true, true, createProperties('Assets'))
]));
authService.verifyAll();

17
src/Squidex/app/shared/services/schemas.service.ts

@ -47,11 +47,14 @@ export function createProperties(fieldType: string, values: Object | null = null
undefined, undefined, undefined, false, false, false, 'DateTime',
undefined, undefined, undefined);
break;
case 'Geolocation':
properties = new GeolocationFieldPropertiesDto(undefined, undefined, undefined, false, false, false, 'Map');
break;
case 'Json':
properties = new JsonFieldPropertiesDto(undefined, undefined, undefined, false, false, false);
break;
case 'Geolocation':
properties = new GeolocationFieldPropertiesDto(undefined, undefined, undefined, false, false, false, 'Map');
case 'Assets':
properties = new AssetsFieldPropertiesDto(undefined, undefined, undefined, false, false, false);
break;
default:
throw 'Invalid properties type';
@ -190,6 +193,16 @@ export class GeolocationFieldPropertiesDto extends FieldPropertiesDto {
}
}
export class AssetsFieldPropertiesDto extends FieldPropertiesDto {
constructor(label: string | undefined, hints: string | undefined, placeholder: string | undefined,
isRequired: boolean,
isListField: boolean,
isLocalizable: boolean
) {
super('Assets', label, hints, placeholder, isRequired, isListField, isLocalizable);
}
}
export class JsonFieldPropertiesDto extends FieldPropertiesDto {
constructor(label: string | undefined, hints: string | undefined, placeholder: string | undefined,
isRequired: boolean,

2
src/Squidex/app/shared/utils/file-helper.ts

@ -43,7 +43,7 @@ export module FileHelper {
}
export function assetPreviewUrl(apiUrl: ApiUrlConfig, asset: AssetDto) {
return apiUrl.buildUrl(`api/assets/${asset.id}?width=230&height=155&mode=Crop&version=${asset.version.value}&q=${MathHelper.guid()}`);
return apiUrl.buildUrl(`api/assets/${asset.id}?version=${asset.version.value}`);
}
export function assetInfo(asset: AssetDto): string {

128
src/Squidex/app/theme/icomoon/demo.html

@ -275,118 +275,6 @@
<input type="text" readonly value="" class="liga unitRight" />
</div>
</div>
<div class="glyph fs3">
<div class="clearfix bshadow0 pbs">
<span class="icon-unlocked">
</span>
<span class="mls"> icon-unlocked</span>
</div>
<fieldset class="fs0 size1of1 clearfix hidden-false">
<input type="text" readonly value="e933" class="unit size1of2" />
<input type="text" maxlength="1" readonly value="&#xe933;" class="unitRight size1of2 talign-right" />
</fieldset>
<div class="fs0 bshadow0 clearfix hidden-true">
<span class="unit pvs fgc1">liga: </span>
<input type="text" readonly value="" class="liga unitRight" />
</div>
</div>
<div class="glyph fs3">
<div class="clearfix bshadow0 pbs">
<span class="icon-lock">
</span>
<span class="mls"> icon-lock</span>
</div>
<fieldset class="fs0 size1of1 clearfix hidden-false">
<input type="text" readonly value="e934" class="unit size1of2" />
<input type="text" maxlength="1" readonly value="&#xe934;" class="unitRight size1of2 talign-right" />
</fieldset>
<div class="fs0 bshadow0 clearfix hidden-true">
<span class="unit pvs fgc1">liga: </span>
<input type="text" readonly value="" class="liga unitRight" />
</div>
</div>
<div class="glyph fs3">
<div class="clearfix bshadow0 pbs">
<span class="icon-reset">
</span>
<span class="mls"> icon-reset</span>
</div>
<fieldset class="fs0 size1of1 clearfix hidden-false">
<input type="text" readonly value="e92e" class="unit size1of2" />
<input type="text" maxlength="1" readonly value="&#xe92e;" class="unitRight size1of2 talign-right" />
</fieldset>
<div class="fs0 bshadow0 clearfix hidden-true">
<span class="unit pvs fgc1">liga: </span>
<input type="text" readonly value="" class="liga unitRight" />
</div>
</div>
<div class="glyph fs3">
<div class="clearfix bshadow0 pbs">
<span class="icon-pause">
</span>
<span class="mls"> icon-pause</span>
</div>
<fieldset class="fs0 size1of1 clearfix hidden-false">
<input type="text" readonly value="e92f" class="unit size1of2" />
<input type="text" maxlength="1" readonly value="&#xe92f;" class="unitRight size1of2 talign-right" />
</fieldset>
<div class="fs0 bshadow0 clearfix hidden-true">
<span class="unit pvs fgc1">liga: </span>
<input type="text" readonly value="" class="liga unitRight" />
</div>
</div>
<div class="glyph fs3">
<div class="clearfix bshadow0 pbs">
<span class="icon-play">
</span>
<span class="mls"> icon-play</span>
</div>
<fieldset class="fs0 size1of1 clearfix hidden-false">
<input type="text" readonly value="e930" class="unit size1of2" />
<input type="text" maxlength="1" readonly value="&#xe930;" class="unitRight size1of2 talign-right" />
</fieldset>
<div class="fs0 bshadow0 clearfix hidden-true">
<span class="unit pvs fgc1">liga: </span>
<input type="text" readonly value="" class="liga unitRight" />
</div>
</div>
<div class="glyph fs3">
<div class="clearfix bshadow0 pbs">
<span class="icon-settings2">
</span>
<span class="mls"> icon-settings2</span>
</div>
<fieldset class="fs0 size1of1 clearfix hidden-false">
<input type="text" readonly value="e92d" class="unit size1of2" />
<input type="text" maxlength="1" readonly value="&#xe92d;" class="unitRight size1of2 talign-right" />
</fieldset>
<div class="fs0 bshadow0 clearfix hidden-true">
<span class="unit pvs fgc1">liga: </span>
<input type="text" readonly value="" class="liga unitRight" />
</div>
</div>
<div class="glyph fs3">
<div class="clearfix bshadow0 pbs">
<span class="icon-bin2">
</span>
<span class="mls"> icon-bin2</span>
</div>
<fieldset class="fs0 size1of1 clearfix hidden-false">
<input type="text" readonly value="e902" class="unit size1of2" />
<input type="text" maxlength="1" readonly value="&#xe902;" class="unitRight size1of2 talign-right" />
</fieldset>
<div class="fs0 bshadow0 clearfix hidden-true">
<span class="unit pvs fgc1">liga: </span>
<input type="text" readonly value="" class="liga unitRight" />
</div>
</div>
</div>
<div class="clearfix mhl ptl">
<h1 class="mvm mtn fgc1">Grid Size: 16</h1>
@ -1084,6 +972,22 @@
<input type="text" readonly value="" class="liga unitRight" />
</div>
</div>
<div class="glyph fs6">
<div class="clearfix bshadow0 pbs">
<span class="icon-type-Assets">
</span>
<span class="mls"> icon-type-Assets</span>
</div>
<fieldset class="fs0 size1of1 clearfix hidden-false">
<input type="text" readonly value="e91d" class="unit size1of2" />
<input type="text" maxlength="1" readonly value="&#xe91d;" class="unitRight size1of2 talign-right" />
</fieldset>
<div class="fs0 bshadow0 clearfix hidden-true">
<span class="unit pvs fgc1">liga: </span>
<input type="text" readonly value="" class="liga unitRight" />
</div>
</div>
<div class="glyph fs6">
<div class="clearfix bshadow0 pbs">
<span class="icon-more">

BIN
src/Squidex/app/theme/icomoon/fonts/icomoon.eot

Binary file not shown.

2
src/Squidex/app/theme/icomoon/fonts/icomoon.svg

@ -36,7 +36,7 @@
<glyph unicode="&#xe91a;" glyph-name="type-Json, json" d="M179.2 704c0 28.262 22.938 51.2 51.2 51.2h25.6c14.157 0 25.6 11.443 25.6 25.6 0 14.131-11.443 25.6-25.6 25.6h-25.6c-56.55 0-102.4-45.85-102.4-102.4v-179.2c0-28.262-22.938-51.2-51.2-51.2h-25.6c-14.157 0-25.6-11.469-25.6-25.6 0-14.157 11.443-25.6 25.6-25.6h25.6c28.262 0 51.2-22.938 51.2-51.2v-179.2c0-56.55 45.85-102.4 102.4-102.4h25.6c14.157 0 25.6 11.443 25.6 25.6s-11.443 25.6-25.6 25.6h-25.6c-28.262 0-51.2 22.938-51.2 51.2v179.2c0 30.746-13.85 58.061-35.328 76.8 21.478 18.765 35.328 46.029 35.328 76.8v179.2zM972.8 473.6h-25.6c-28.262 0-51.2 22.938-51.2 51.2v179.2c0 56.55-45.85 102.4-102.4 102.4h-25.6c-14.157 0-25.6-11.469-25.6-25.6 0-14.157 11.443-25.6 25.6-25.6h25.6c28.262 0 51.2-22.938 51.2-51.2v-179.2c0-30.771 13.85-58.035 35.328-76.8-21.478-18.739-35.328-46.054-35.328-76.8v-179.2c0-28.262-22.938-51.2-51.2-51.2h-25.6c-14.157 0-25.6-11.443-25.6-25.6s11.443-25.6 25.6-25.6h25.6c56.55 0 102.4 45.85 102.4 102.4v179.2c0 28.262 22.938 51.2 51.2 51.2h25.6c14.157 0 25.6 11.443 25.6 25.6 0 14.131-11.443 25.6-25.6 25.6zM512 627.2c-14.157 0-25.6-11.469-25.6-25.6 0-14.157 11.443-25.6 25.6-25.6s25.6 11.443 25.6 25.6c0 14.131-11.443 25.6-25.6 25.6zM512 524.8c-14.157 0-25.6-11.469-25.6-25.6v-204.8c0-14.157 11.443-25.6 25.6-25.6s25.6 11.443 25.6 25.6v204.8c0 14.131-11.443 25.6-25.6 25.6z" />
<glyph unicode="&#xe91b;" glyph-name="location, control-Map, type-Geolocation" d="M512 960c-169.421 0-307.2-137.779-307.2-307.2 0-78.643 15.258-164.915 45.261-256.41 23.859-72.55 56.986-148.582 98.56-226.099 70.707-131.635 140.339-220.774 143.309-224.512 4.813-6.195 12.288-9.779 20.070-9.779 7.834 0 15.258 3.584 20.122 9.779 2.97 3.686 72.602 92.826 143.309 224.512 41.574 77.517 74.701 153.549 98.56 226.099 29.952 91.494 45.21 177.766 45.21 256.41 0 169.421-137.83 307.2-307.2 307.2zM630.682 195.328c-46.234-86.374-92.979-154.982-118.682-190.822-25.6 35.635-72.038 103.885-118.221 189.952-62.874 117.146-137.779 291.738-137.779 458.342 0 141.158 114.842 256 256 256s256-114.842 256-256c0-166.298-74.65-340.582-137.318-457.472zM512 806.4c-84.685 0-153.6-68.915-153.6-153.6s68.915-153.6 153.6-153.6 153.6 68.915 153.6 153.6-68.915 153.6-153.6 153.6zM512 550.4c-56.525 0-102.4 45.875-102.4 102.4 0 56.474 45.875 102.4 102.4 102.4 56.474 0 102.4-45.926 102.4-102.4 0-56.525-45.926-102.4-102.4-102.4z" />
<glyph unicode="&#xe91c;" glyph-name="logo" d="M512.273 876.218c-0.141-0.056-182.959-84.073-229.418-256.782-4.481-16.584 32.696-9.296 31.036-27.527-2.034-22.136-44.668-31.201-39.109-94.764 5.659-64.734 60.321-130.141 68.527-169.673v-27.655c-0.497-8.54-4.566-31.715-18.018-43.036-7.378-6.19-17.322-8.421-30.436-6.782-18.205 2.275-25.449 14.468-28.345 24.309-4.753 16.218-0.322 35.123 10.345 44 10.724 8.924 12.17 24.842 3.236 35.564-8.934 10.712-24.858 12.161-35.582 3.218-25.995-21.64-36.887-61.52-26.491-97 9.815-33.392 36.197-55.884 70.6-60.182 4.903-0.609 9.566-0.909 14-0.909 26.623 0 44.661 10.175 55.582 19.455 32.866 27.97 35.449 74.593 35.636 79.818 0.009 0.309 0.018 0.618 0.018 0.927v21.218h0.109v1.418c0 12.351 10.008 22.364 22.382 22.364 11.944 0 21.609-9.346 22.273-21.109v-202.491c-0.206-2.912-2.536-29.892-17.891-42.945-7.368-6.274-17.384-8.53-30.545-6.873-18.214 2.275-25.476 14.468-28.364 24.291-4.762 16.228-0.322 35.151 10.345 44.018 10.724 8.933 12.188 24.833 3.255 35.564-8.924 10.694-24.876 12.161-35.6 3.218-26.013-21.631-36.887-61.52-26.491-97 9.796-33.392 36.197-55.893 70.6-60.2 4.903-0.609 9.566-0.891 14-0.891 26.623 0 44.671 10.156 55.564 19.436 32.875 27.97 35.458 74.611 35.636 79.836 0.019 0.328 0.018 0.609 0.018 0.909v225.636l0.127 0.055v1c0 12.595 10.219 22.8 22.836 22.8 12.349 0 22.333-9.824 22.727-22.073v-227.418c0-0.309 0-0.591 0.018-0.909 0.187-5.216 2.779-51.866 35.655-79.836 10.912-9.28 28.959-19.436 55.582-19.436 4.443 0 9.088 0.282 13.982 0.891 34.394 4.307 60.804 26.818 70.6 60.2 10.405 35.48-0.487 75.36-26.491 97-10.743 8.943-26.676 7.466-35.6-3.218-8.934-10.74-7.488-26.63 3.236-35.564 10.668-8.868 15.135-27.79 10.364-44.018-2.878-9.823-10.159-22.015-28.364-24.291-13.105-1.648-23.050 0.592-30.418 6.782-13.508 11.358-17.558 34.657-18.036 43v201.818c0.297 12.093 10.14 21.818 22.327 21.818 12.374 0 22.4-10.003 22.4-22.364v-1.418h0.073v-21.218c0-0.318 0-0.628 0.018-0.927 0.178-5.216 2.779-51.848 35.655-79.818 10.912-9.28 28.941-19.455 55.564-19.455 4.434 0 9.107 0.292 14 0.891 34.394 4.298 60.786 26.818 70.582 60.2 10.405 35.48-0.487 75.351-26.491 97-10.743 8.933-26.667 7.476-35.582-3.236-8.943-10.722-7.488-26.622 3.236-35.545 10.668-8.877 15.117-27.8 10.345-44.018-2.878-9.842-10.159-22.025-28.364-24.291-13.086-1.648-23.050 0.583-30.418 6.764-13.508 11.368-17.549 34.675-18.018 43v21.018c5.305 54.103 63.095 107.777 69.091 176.364 5.531 63.563-37.121 72.627-39.145 94.764-1.669 18.232 35.498 10.944 31.036 27.527-46.468 172.709-229.269 256.726-229.4 256.782z" />
<glyph unicode="&#xe91d;" glyph-name="media" d="M947.2 960h-870.4c-42.342 0-76.8-34.458-76.8-76.8v-870.4c0-42.342 34.458-76.8 76.8-76.8h870.4c42.342 0 76.8 34.458 76.8 76.8v870.4c0 42.342-34.458 76.8-76.8 76.8zM972.8 12.8c0-14.157-11.443-25.6-25.6-25.6h-870.4c-14.131 0-25.6 11.443-25.6 25.6v870.4c0 14.131 11.469 25.6 25.6 25.6h870.4c14.157 0 25.6-11.469 25.6-25.6v-870.4zM665.6 499.2c56.448 0 102.4 45.926 102.4 102.4s-45.952 102.4-102.4 102.4c-56.448 0-102.4-45.926-102.4-102.4s45.952-102.4 102.4-102.4zM665.6 652.8c28.211 0 51.2-22.989 51.2-51.2s-22.989-51.2-51.2-51.2c-28.211 0-51.2 22.989-51.2 51.2s22.989 51.2 51.2 51.2zM896 857.6h-768c-14.131 0-25.6-11.469-25.6-25.6v-614.4c0-14.157 11.469-25.6 25.6-25.6h768c14.157 0 25.6 11.443 25.6 25.6v614.4c0 14.131-11.443 25.6-25.6 25.6zM153.6 243.2v118.246l164.301 184.858c4.198 4.787 9.728 7.373 15.462 7.475 5.734 0.051 11.29-2.458 15.642-7.040l283.238-303.539h-478.643zM870.4 243.2h-168.090l-315.853 338.432c-14.285 15.334-33.331 23.603-53.709 23.347-20.326-0.256-39.219-9.011-53.094-24.627l-126.054-141.798v367.846h716.8v-563.2z" />
<glyph unicode="&#xe91d;" glyph-name="media, type-Assets" d="M947.2 960h-870.4c-42.342 0-76.8-34.458-76.8-76.8v-870.4c0-42.342 34.458-76.8 76.8-76.8h870.4c42.342 0 76.8 34.458 76.8 76.8v870.4c0 42.342-34.458 76.8-76.8 76.8zM972.8 12.8c0-14.157-11.443-25.6-25.6-25.6h-870.4c-14.131 0-25.6 11.443-25.6 25.6v870.4c0 14.131 11.469 25.6 25.6 25.6h870.4c14.157 0 25.6-11.469 25.6-25.6v-870.4zM665.6 499.2c56.448 0 102.4 45.926 102.4 102.4s-45.952 102.4-102.4 102.4c-56.448 0-102.4-45.926-102.4-102.4s45.952-102.4 102.4-102.4zM665.6 652.8c28.211 0 51.2-22.989 51.2-51.2s-22.989-51.2-51.2-51.2c-28.211 0-51.2 22.989-51.2 51.2s22.989 51.2 51.2 51.2zM896 857.6h-768c-14.131 0-25.6-11.469-25.6-25.6v-614.4c0-14.157 11.469-25.6 25.6-25.6h768c14.157 0 25.6 11.443 25.6 25.6v614.4c0 14.131-11.443 25.6-25.6 25.6zM153.6 243.2v118.246l164.301 184.858c4.198 4.787 9.728 7.373 15.462 7.475 5.734 0.051 11.29-2.458 15.642-7.040l283.238-303.539h-478.643zM870.4 243.2h-168.090l-315.853 338.432c-14.285 15.334-33.331 23.603-53.709 23.347-20.326-0.256-39.219-9.011-53.094-24.627l-126.054-141.798v367.846h716.8v-563.2z" />
<glyph unicode="&#xe91e;" glyph-name="more, dots" d="M128 576c-70.656 0-128-57.344-128-128s57.344-128 128-128c70.656 0 128 57.344 128 128s-57.344 128-128 128zM512 576c-70.656 0-128-57.344-128-128s57.344-128 128-128c70.656 0 128 57.344 128 128s-57.344 128-128 128zM896 576c-70.656 0-128-57.344-128-128s57.344-128 128-128c70.656 0 128 57.344 128 128s-57.344 128-128 128z" />
<glyph unicode="&#xe91f;" glyph-name="pencil" d="M877.12 648.896l-66.304-66.368-228.224 228.224 66.368 66.368c25.216 25.152 66.048 25.152 91.264 0l136.896-137.024c25.216-25.216 25.216-65.984 0-91.2zM760.896 532.608l-386.176-386.112c-25.216-25.28-66.048-25.28-91.264 0l-136.96 136.896c-25.216 25.28-25.216 66.112 0 91.264l386.24 386.24 228.16-228.288zM64 64v191.872l191.936-191.872h-191.936z" />
<glyph unicode="&#xe920;" glyph-name="reference" d="M892.083 828.083c-73.523 73.498-193.152 73.498-266.65 0l-157.184-157.107c-9.958-10.035-9.958-26.214 0-36.275 10.061-9.984 26.24-9.984 36.25 0l157.133 157.107c53.504 53.555 140.672 53.555 194.176 0 53.581-53.504 53.581-140.672 0-194.176l-186.138-186.163c-53.53-53.581-140.672-53.581-194.176 0-10.086 10.010-26.24 10.010-36.275 0-10.035-10.086-10.035-26.189 0-36.25 36.787-36.736 84.992-55.117 133.325-55.117s96.589 18.432 133.376 55.117l186.163 186.214c73.498 73.472 73.498 193.152 0 266.65zM519.45 261.274l-157.082-157.082c-53.504-53.555-140.672-53.555-194.176 0-53.581 53.504-53.581 140.672 0 194.176l186.138 186.163c53.53 53.581 140.672 53.581 194.176 0 10.086-9.984 26.189-9.984 36.275 0 10.035 10.086 10.035 26.214 0 36.25-73.549 73.498-193.203 73.498-266.701 0l-186.163-186.163c-73.498-73.574-73.498-193.203 0-266.701 36.787-36.71 85.043-55.117 133.325-55.117 48.333 0 96.538 18.406 133.325 55.117l157.133 157.133c10.010 10.010 10.010 26.189 0 36.224-10.010 9.984-26.189 9.984-36.25 0z" />

Before

Width:  |  Height:  |  Size: 54 KiB

After

Width:  |  Height:  |  Size: 54 KiB

BIN
src/Squidex/app/theme/icomoon/fonts/icomoon.ttf

Binary file not shown.

BIN
src/Squidex/app/theme/icomoon/fonts/icomoon.woff

Binary file not shown.

2
src/Squidex/app/theme/icomoon/selection.json

@ -1546,7 +1546,7 @@
"properties": {
"order": 30,
"id": 11,
"name": "media",
"name": "media, type-Assets",
"prevSize": 32,
"code": 59677
},

34
src/Squidex/app/theme/icomoon/style.css

@ -1,10 +1,10 @@
@font-face {
font-family: 'icomoon';
src: url('fonts/icomoon.eot?pgarx9');
src: url('fonts/icomoon.eot?pgarx9#iefix') format('embedded-opentype'),
url('fonts/icomoon.ttf?pgarx9') format('truetype'),
url('fonts/icomoon.woff?pgarx9') format('woff'),
url('fonts/icomoon.svg?pgarx9#icomoon') format('svg');
src: url('fonts/icomoon.eot?98f7w9');
src: url('fonts/icomoon.eot?98f7w9#iefix') format('embedded-opentype'),
url('fonts/icomoon.ttf?98f7w9') format('truetype'),
url('fonts/icomoon.woff?98f7w9') format('woff'),
url('fonts/icomoon.svg?98f7w9#icomoon') format('svg');
font-weight: normal;
font-style: normal;
}
@ -72,27 +72,6 @@
.icon-info:before {
content: "\e93c";
}
.icon-unlocked:before {
content: "\e933";
}
.icon-lock:before {
content: "\e934";
}
.icon-reset:before {
content: "\e92e";
}
.icon-pause:before {
content: "\e92f";
}
.icon-play:before {
content: "\e930";
}
.icon-settings2:before {
content: "\e92d";
}
.icon-bin2:before {
content: "\e902";
}
.icon-google:before {
content: "\e93b";
}
@ -222,6 +201,9 @@
.icon-media:before {
content: "\e91d";
}
.icon-type-Assets:before {
content: "\e91d";
}
.icon-more:before {
content: "\e91e";
}

8
src/Squidex/package.json

@ -34,9 +34,9 @@
"oidc-client": "1.3.0",
"pikaday": "1.5.1",
"progressbar.js": "1.0.1",
"redoc": "1.13.0",
"redoc": "1.14.0",
"rxjs": "5.3.0",
"zone.js": "0.8.5"
"zone.js": "0.8.8"
},
"devDependencies": {
"@angular/compiler-cli": "4.0.2",
@ -77,12 +77,12 @@
"sass-loader": "6.0.3",
"style-loader": "0.16.1",
"tslint": "4.5.1",
"tslint-loader": "3.5.2",
"tslint-loader": "3.5.3",
"typemoq": "1.4.2",
"typescript": "2.2.2",
"underscore": "1.8.3",
"webpack": "2.4.1",
"webpack-dev-server": "2.4.2",
"webpack-dev-server": "2.4.4",
"webpack-merge": "4.1.0"
}
}

Loading…
Cancel
Save