/* tslint:disable component-selector */ import { Component, OnInit, ElementRef, ViewChild, AfterViewInit } from '@angular/core'; // TODO(i): add clipboard copy functionality /** * Angular.io Code Example * * Pretty renders a code block, primarily used in the docs and API reference. Can be used within an Angular app, or * independently, provided that it is dynamically generated by the component resolver. * * Usage: * * console.log('Hello World') * */ @Component({ selector: 'code-example', template: '
' }) export class CodeExampleComponent implements OnInit, AfterViewInit { @ViewChild('codeContainer') codeContainerRef: ElementRef; language: string; // could be javascript, dart, typescript // TODO(i): escape doesn't seem to be currently supported in the original code escape: string; // could be 'html' format: string; // some css class showcase: string; // a string with the value 'true' animated = false; // TODO(i): could we use @HostBinding instead or does the CSS have to be scoped to
 and 
  classes: string;
  animatedClasses: string;


  constructor(private elementRef: ElementRef) {
    // TODO(i): @Input should be supported for host elements and should just do a one off initialization of properties
    //          from the host element => talk to Tobias
    ['language', 'escape', 'format', 'showcase', 'animated'].forEach(inputName => {
      if (!this[inputName]) {
        this[inputName] = this.elementRef.nativeElement.getAttribute(inputName);
      }
    });
  }


  ngOnInit() {
    const showcaseClass = this.showcase === 'true' ? ' is-showcase' : '';
    this.classes = `
      prettyprint
      ${this.format ? this.format : ''}
      ${this.language ? 'lang-' + this.language : '' }
      ${showcaseClass ? showcaseClass : ''}
    `.trim();

    this.animatedClasses = `${this.animated ? 'animated fadeIn' : ''}`;

    // Security: the codeExampleContent is the original innerHTML of the host element provided by
    //           docs authors and as such its considered to be safe for innerHTML purposes
    this.codeContainerRef.nativeElement.innerHTML = this.elementRef.nativeElement.codeExampleContent;
  }


  ngAfterViewInit() {
    // TODO(i): import prettify.js from this file so that we don't need to preload it via index.html
    // whenever a code example is used, use syntax highlighting.
    // if(prettyPrint) {
    //   prettyPrint();
    // }
  }
}