This is the codeAbility Sharing Platform! Learn more about the codeAbility Sharing Platform.

Skip to content
Snippets Groups Projects
teaserContent.component.ts 4.22 KiB
Newer Older
import { Component, OnInit } from '@angular/core';

import { SearchService, AutoCompletionEntry } from 'app/search/service/search-service';
import { SearchInputComponent } from 'app/search/search-input/search-input.component';
import { CloudData, CloudOptions } from 'angular-tag-cloud-module';
import Color from 'ts-color-class';

import { Router } from '@angular/router';

@Component({
  selector: 'jhi-teaser-content',
  templateUrl: './teaserContent.component.html',
Daniel Rainer's avatar
Daniel Rainer committed
  styleUrls: ['./teaserContent.component.scss'],
  providers: [SearchInputComponent],
})
export class TeaserContentComponent implements OnInit {
Michael Breu's avatar
Michael Breu committed
  public keywords: Array<AutoCompletionEntry> = new Array<AutoCompletionEntry>();
  public contributors: Array<AutoCompletionEntry> = new Array<AutoCompletionEntry>();
  public programmingLanguages: Array<AutoCompletionEntry> = new Array<AutoCompletionEntry>();
  options: CloudOptions = {
    overflow: false,
    zoomOnHover: { scale: 1.2, transitionTime: 0.5 },
    width: 1,
    height: 500,
  };
  public keywordCloudData: CloudData[] = [];
  public contributorCloudData: CloudData[] = [];
  public programmingLanguageCloudData: CloudData[] = [];
Michael Breu's avatar
Michael Breu committed

  constructor(private searchService: SearchService, private router: Router, private searchInputComponent: SearchInputComponent) {}
Daniel Rainer's avatar
Daniel Rainer committed
    this.searchService.getKeywordsAutoComplete('').subscribe(
Michael Breu's avatar
Michael Breu committed
      (data: Array<AutoCompletionEntry>) => {
Daniel Rainer's avatar
Daniel Rainer committed
        this.keywords = data;
Michael Breu's avatar
Michael Breu committed
        this.keywordCloudData = [];
        this.keywords.forEach(kw =>
          this.keywordCloudData.push({
            text: kw.target.toString(),
            weight: kw.hitCount.valueOf(),
            color: this.randomColor(new Color('#ffaaee'), new Color('#440000')).getHex(),
          })
        );
Daniel Rainer's avatar
Daniel Rainer committed
      },
      () => {
        alert('Initialization of keywords failed');
      }
    );

    this.searchService.getProgrammingLanguageAutoComplete('').subscribe(
Michael Breu's avatar
Michael Breu committed
      (data: Array<AutoCompletionEntry>) => {
Daniel Rainer's avatar
Daniel Rainer committed
        this.programmingLanguages = data;
Michael Breu's avatar
Michael Breu committed
        this.programmingLanguageCloudData = [];
        this.programmingLanguages.forEach(pl =>
          this.programmingLanguageCloudData.push({
            text: pl.target.toString(),
            weight: pl.hitCount.valueOf(),
            color: this.randomColor(new Color('#2222ff'), new Color('#004444')).getHex(),
          })
        );
Daniel Rainer's avatar
Daniel Rainer committed
      },
      () => {
        alert('Initialization of programming languages failed');
      }
    );
    this.searchService.getContributorCreatorAutoComplete('').subscribe(
Michael Breu's avatar
Michael Breu committed
      (data: Array<AutoCompletionEntry>) => {
Daniel Rainer's avatar
Daniel Rainer committed
        this.contributors = data;
Michael Breu's avatar
Michael Breu committed
        this.contributorCloudData = [];
        this.contributors.forEach(pl =>
          this.contributorCloudData.push({
            text: pl.target.toString(),
            weight: pl.hitCount.valueOf(),
            color: this.randomColor(new Color('#aaff44'), new Color('#004400')).getHex(),
          })
        );
Daniel Rainer's avatar
Daniel Rainer committed
      },
      () => {
        alert('Initialization of contributors failed');
      }
    );
Michael Breu's avatar
Michael Breu committed
  onKeywordClick(event: CloudData): void {
Michael Breu's avatar
Michael Breu committed
  onProgrammingLanguageClick(event: CloudData): void {
    this.clickLanguage(event.text);
Michael Breu's avatar
Michael Breu committed

  onContributorClick(event: CloudData): void {
    this.clickContributor(event.text);
  clickLanguage(programmingLanguage: String): void {
    this.router.navigate(['/search'], { queryParams: { pl: programmingLanguage } });
  }
  clickContributor(contributor: String): void {
    this.router.navigate(['/search'], { queryParams: { a: contributor } });
  }

  clickKeyword(keyWord: String): void {
    this.router.navigate(['/search'], { queryParams: { kw: keyWord } });
  }
  private randomColor(main: Color, deviation: Color): Color {
    const upperBound = new Color(
      Math.min(main.getRed() + deviation.getRed(), 255),
      Math.min(main.getGreen() + deviation.getGreen(), 255),
      Math.min(main.getBlue() + deviation.getBlue(), 255)
    );
    const target = new Color(
      Math.max(Math.round(upperBound.getRed() - 2 * deviation.getRed() * Math.random()), 0),
      Math.max(Math.round(upperBound.getGreen() - 2 * deviation.getGreen() * Math.random()), 0),
      Math.max(Math.round(upperBound.getBlue() - 2 * deviation.getBlue() * Math.random()), 0)
    );
    return target;