diff --git a/src/app/components/shared/tag-cloud/tag-cloud.component.html b/src/app/components/shared/tag-cloud/tag-cloud.component.html index ed922b41278ea285312a742603b95dab0a5cb4f3..87579d49a27660d41fe018833fd79eec836ed7a7 100644 --- a/src/app/components/shared/tag-cloud/tag-cloud.component.html +++ b/src/app/components/shared/tag-cloud/tag-cloud.component.html @@ -1,8 +1,8 @@ <ars-screen ars-flex-box> <ars-row [height]="65"> </ars-row> - <mat-drawer-container> - <mat-drawer [(opened)]="drawerOpen" position="start"> + <mat-drawer-container class="spacyTagCloudContainer"> + <mat-drawer [(opened)]="configurationOpen" position="start"> Test <!-- TODO: Gruppe 4 --> </mat-drawer> <mat-drawer-content> @@ -10,10 +10,13 @@ <angular-tag-cloud class="spacyTagCloud" (window:resize)="onResize($event)" + (afterInit)="initTagCloud()" [data]="data" [width]="options.width" [height]="options.height" [overflow]="options.overflow" + [delay]="options.delay" + [randomizeAngle]="options.randomizeAngle" [zoomOnHover]="zoomOnHoverOptions" [realignOnResize]="false"> </angular-tag-cloud> diff --git a/src/app/components/shared/tag-cloud/tag-cloud.component.scss b/src/app/components/shared/tag-cloud/tag-cloud.component.scss index bc1df4b8c90998a1ebe718cb3db0137b7aeeb9b2..74753756847711bf81bce455fce2ff9ba66402ca 100644 --- a/src/app/components/shared/tag-cloud/tag-cloud.component.scss +++ b/src/app/components/shared/tag-cloud/tag-cloud.component.scss @@ -5,14 +5,10 @@ ars-fill { } mat-drawer-container { - background-color: var(--background); height: 100%; width: 100%; } -/* TODO: Gruppe 4 */ - mat-drawer { - background-color: var(--background); - color: var(--on-background); + background-color: var(--dialog); } diff --git a/src/app/components/shared/tag-cloud/tag-cloud.component.ts b/src/app/components/shared/tag-cloud/tag-cloud.component.ts index 25e6b1f17856f1dbd708182af5d4fbad77964ece..872cb641eb8741ab2e6b3f09324eb952c68c85d0 100644 --- a/src/app/components/shared/tag-cloud/tag-cloud.component.ts +++ b/src/app/components/shared/tag-cloud/tag-cloud.component.ts @@ -23,6 +23,7 @@ import {ActivatedRoute} from '@angular/router'; import {UserRole} from '../../../models/user-roles.enum'; import {RoomService} from '../../../services/http/room.service'; import {ThemeService} from '../../../../theme/theme.service'; +import {CloudParameters} from "./tag-cloud.interface"; class CustomPosition implements Position { left: number; @@ -64,7 +65,8 @@ type TagCloudStyleData = [ string, // w7 string, // w8 string, // w9 - string // w10 + string, // w10 + string // background ]; const colorRegex = /rgba?\((\d+), (\d+), (\d+)(?:, (\d(?:\.\d+)?))?\)/; @@ -80,7 +82,8 @@ const defaultColors: string[] = [ 'var(--on-background, lightgreen)', // w7 'var(--purple, tomato)', // w8 'var(--magenta, white)', // w9 - 'var(--light-green, brown)' // w10 + 'var(--light-green, brown)', // w10 + 'var(--background, black)' //background ]; const getResolvedDefaultColors = (): string[] => { @@ -118,6 +121,22 @@ const setGlobalStyles = (styles: TagCloudStyleData): void => { } customTagCloudStyles.sheet.insertRule('.spacyTagCloud > span:hover { ' + styles[0] + ' }', rules.length); customTagCloudStyles.sheet.insertRule('.spacyTagCloud > span:hover > a { ' + styles[0] + ' }', rules.length); + customTagCloudStyles.sheet.insertRule('.spacyTagCloudContainer {' + styles[11] + '}', rules.length); +}; + +const getDefaultCloudParameters = (): CloudParameters => { + const resDefaultColors = getResolvedDefaultColors(); + return { + backgroundColor: resDefaultColors[11], + fontColor: resDefaultColors[0], + fontSizeMin: 100, + fontSizeMax: 380, + hoverScale: 1.3, + hoverTime: 0.6, + hoverDelay: 0.4, + delayWord: 0, + randomAngles: false + } }; @Component({ @@ -140,19 +159,21 @@ export class TagCloudComponent implements OnInit { // if height is between 0 and 1 it will be set to the height of the upper element multiplied by the value height: 0.99, overflow: false, - font: 'Georgia' // not working + font: 'Georgia', // not working + delay: 0, + randomizeAngle: false }; zoomOnHoverOptions: ZoomOnHoverOptions = { scale: 1.3, // Elements will become 130 % of current size on hover transitionTime: 0.6, // it will take 0.6 seconds until the zoom level defined in scale property has been reached - delay: 0.4,// Zoom will take affect after 0.4 seconds - color: 'red' + delay: 0.4 // Zoom will take affect after 0.4 seconds }; userRole: UserRole; data: CloudData[] = []; sorted = false; debounceTimer = 0; lastDebounceTime = 0; + configurationOpen = false; constructor(private commentService: CommentService, private spacyService: SpacyService, @@ -176,7 +197,7 @@ export class TagCloudComponent implements OnInit { if (e === 'createQuestion') { this.openCreateDialog(); } else if (e === 'topicCloudConfig') { - // TODO Group 4: OPEN Topic Cloud Config + this.configurationOpen = !this.configurationOpen; } else if (e === 'topicCloudAdministration') { // TODO Group 5: OPEN Topic Cloud Administration } @@ -205,20 +226,56 @@ export class TagCloudComponent implements OnInit { this.commentService.getAckComments(this.roomId).subscribe((comments: Comment[]) => { this.analyse(comments); }); - this.resetColorsToTheme(); this.themeService.getTheme().subscribe(() => { - this.resetColorsToTheme(); if (this.child) { setTimeout(() => { + this.setCloudParameters(this.getCurrentCloudParameters(), false); this.updateTagCloud(); }, 1); } }); } + initTagCloud() { + setTimeout(() => { + this.setCloudParameters(this.getCurrentCloudParameters(), false); + }); + } + resetColorsToTheme() { - setGlobalStyles(getResolvedDefaultColors() - .map(e => 'color: ' + e + ' !important;') as TagCloudStyleData); + this.setCloudParameters(getDefaultCloudParameters()); + } + + getCurrentCloudParameters(): CloudParameters { + const jsonData = localStorage.getItem('tagCloudConfiguration'); + const elem: CloudParameters = jsonData != null ? JSON.parse(jsonData) : null; + return elem || getDefaultCloudParameters(); + } + + setCloudParameters(data: CloudParameters, save = true): void { + const arr = getResolvedDefaultColors(); + arr[0] = data.fontColor; + arr[11] = data.backgroundColor; + const fontRange = (data.fontSizeMax - data.fontSizeMin) / 10; + const styles = arr.map((e, i) => { + if (i > 10) { + return 'background-color: ' + e + ';'; + } else if (i > 0) { + return 'color: ' + e + '; font-size: ' + (data.fontSizeMin + fontRange * i).toFixed(0) + '%;'; + } else { + return 'color: ' + e + ';'; + } + }); + setGlobalStyles(styles as TagCloudStyleData); + this.zoomOnHoverOptions.delay = data.hoverDelay; + this.zoomOnHoverOptions.scale = data.hoverScale; + this.zoomOnHoverOptions.transitionTime = data.hoverTime; + this.options.delay = data.delayWord; + this.options.randomizeAngle = data.randomAngles; + this.updateTagCloud(); + if (save) { + localStorage.setItem('tagCloudConfiguration', JSON.stringify(data)); + } } analyse(comments: Comment[]) { @@ -242,10 +299,6 @@ export class TagCloudComponent implements OnInit { }); } - drawerOpen(): boolean { - return true; - } - onResize(event: UIEvent): any { this.updateTagCloud(); } diff --git a/src/app/components/shared/tag-cloud/tag-cloud.interface.ts b/src/app/components/shared/tag-cloud/tag-cloud.interface.ts index 525f5fab3ab6a0cf99b5f6332157956842839d80..b3faae6f98bc4f485fc2ed4bbaeaefdbc71be061 100644 --- a/src/app/components/shared/tag-cloud/tag-cloud.interface.ts +++ b/src/app/components/shared/tag-cloud/tag-cloud.interface.ts @@ -1,4 +1,4 @@ -export interface CloudParameters{ +export interface CloudParameters { /** * Background color of the Tag-cloud */ @@ -22,7 +22,7 @@ export interface CloudParameters{ /** * Time for hovering in ms */ - hoverTime:number; + hoverTime: number; /** * Time before hover animation starts in ms */