From bf68035f8a474e759bf53625575b0330b29c39b0 Mon Sep 17 00:00:00 2001 From: sowobm Date: Wed, 8 Nov 2017 11:44:11 +0200 Subject: [PATCH] rich text editor assets drag and drop --- src/Squidex/Squidex.csproj | 8 ++ .../content/content-field.component.html | 2 +- .../pages/content/content-field.component.ts | 27 ++++- .../pages/content/content-page.component.html | 2 +- .../shared/components/asset-drop.handler.ts | 37 ++++++ .../shared/components/asset.component.html | 2 +- .../app/shared/components/asset.component.ts | 3 - .../components/rich-editor.component.html | 14 ++- .../components/rich-editor.component.scss | 40 ++++--- .../components/rich-editor.component.ts | 107 ++++++++++++------ 10 files changed, 177 insertions(+), 65 deletions(-) create mode 100644 src/Squidex/app/shared/components/asset-drop.handler.ts diff --git a/src/Squidex/Squidex.csproj b/src/Squidex/Squidex.csproj index a7ffd5aa4..0f90c7e1c 100644 --- a/src/Squidex/Squidex.csproj +++ b/src/Squidex/Squidex.csproj @@ -22,6 +22,10 @@ + + + + PreserveNewest @@ -81,6 +85,10 @@ + + + + <_DocumentationFile Include="$(DocumentationFile)" /> diff --git a/src/Squidex/app/features/content/pages/content/content-field.component.html b/src/Squidex/app/features/content/pages/content/content-field.component.html index 113649272..281671073 100644 --- a/src/Squidex/app/features/content/pages/content/content-field.component.html +++ b/src/Squidex/app/features/content/pages/content/content-field.component.html @@ -53,7 +53,7 @@
- +
diff --git a/src/Squidex/app/features/content/pages/content/content-field.component.ts b/src/Squidex/app/features/content/pages/content/content-field.component.ts index 4625524d7..acefa3803 100644 --- a/src/Squidex/app/features/content/pages/content/content-field.component.ts +++ b/src/Squidex/app/features/content/pages/content/content-field.component.ts @@ -5,7 +5,7 @@ * Copyright (c) Sebastian Stehle. All rights reserved */ -import { Component, Input, OnInit } from '@angular/core'; +import { Component, Input, OnInit, ViewChild, ElementRef } from '@angular/core'; import { FormGroup } from '@angular/forms'; import { AppLanguageDto, FieldDto } from 'shared'; @@ -32,6 +32,30 @@ export class ContentFieldComponent implements OnInit { public fieldPartitions: string[]; public fieldPartition: string; + public richTextEditorOptions: any; + + @ViewChild('assets') + public assetLink: ElementRef; + + private buildRichTextEditorOptions() { + // const self = this; + return { + toolbar: 'undo redo | styleselect | bold italic | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | image assets', + plugins: 'code,image', + file_picker_types: 'image', + convert_urls: false, + onSetup: (editor: any) => { + editor.addButton('assets', { + text: '', + icon: 'browse', + tooltip: 'Insert Assets', + onclick: () => { + console.log(this.assetLink); + } + }); + } + }; + } public selectLanguage(language: AppLanguageDto) { this.fieldPartition = language.iso2Code; @@ -39,6 +63,7 @@ export class ContentFieldComponent implements OnInit { public ngOnInit() { this.masterLanguageCode = this.languages.find(l => l.isMaster).iso2Code; + this.richTextEditorOptions = this.buildRichTextEditorOptions(); if (this.field.isDisabled) { this.fieldForm.disable(); 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 eaf689467..ba454af4a 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 @@ -49,7 +49,7 @@ - + diff --git a/src/Squidex/app/shared/components/asset-drop.handler.ts b/src/Squidex/app/shared/components/asset-drop.handler.ts new file mode 100644 index 000000000..69d846068 --- /dev/null +++ b/src/Squidex/app/shared/components/asset-drop.handler.ts @@ -0,0 +1,37 @@ +/* + * Squidex Headless CMS + * + * @license + * Copyright (c) Sebastian Stehle. All rights reserved + */ + +import { AssetUrlPipe } from './pipes'; +import { ApiUrlConfig, AssetDto } from './../declarations-base'; + +export class AssetDropHandler { + + private assetUrlGenerator: AssetUrlPipe; + + constructor(private readonly apiUrlConfig: ApiUrlConfig) { + this.assetUrlGenerator = new AssetUrlPipe(this.apiUrlConfig); + } + + public buildDroppedAssetData(asset: AssetDto, dragEvent: DragEvent) { + switch (asset.mimeType) { + + case 'image/jpeg': + case 'image/jpg': + case 'image/png': + case 'image/gif': + return this.handleImageAsset(asset, dragEvent); + default: + return ''; + } + } + + private handleImageAsset(asset: AssetDto, dragEvent: DragEvent) { + let res = ''; + return res; + } +} \ No newline at end of file diff --git a/src/Squidex/app/shared/components/asset.component.html b/src/Squidex/app/shared/components/asset.component.html index af8ff345b..95fd99dd7 100644 --- a/src/Squidex/app/shared/components/asset.component.html +++ b/src/Squidex/app/shared/components/asset.component.html @@ -1,4 +1,4 @@ -
+
diff --git a/src/Squidex/app/shared/components/asset.component.ts b/src/Squidex/app/shared/components/asset.component.ts index 1a78c7dc4..94b6415c1 100644 --- a/src/Squidex/app/shared/components/asset.component.ts +++ b/src/Squidex/app/shared/components/asset.component.ts @@ -59,9 +59,6 @@ export class AssetComponent extends AppComponentBase implements OnInit { @Output() public deleting = new EventEmitter(); - @Output() - public clicked = new EventEmitter(); - @Output() public failed = new EventEmitter(); diff --git a/src/Squidex/app/shared/components/rich-editor.component.html b/src/Squidex/app/shared/components/rich-editor.component.html index 69a0991e9..b9efa5ec6 100644 --- a/src/Squidex/app/shared/components/rich-editor.component.html +++ b/src/Squidex/app/shared/components/rich-editor.component.html @@ -1,6 +1,14 @@ -
+
+
+

Drop asset in this zone to insert into content

+
+
+
-