src/app/display-build/display-build.component.ts
Build display component
changeDetection | ChangeDetectionStrategy.OnPush |
selector | app-display-build |
styleUrls | display-build.component.css |
templateUrl | ./display-build.component.html |
Methods |
Inputs |
constructor(sanitizer: DomSanitizer)
|
||||||||
Create a build diplay component
Parameters :
|
build
|
Input build data
Type:
Default value: |
mainOverride
|
Input main override - generaly for build database
Type:
Default value: |
specializedOverride
|
Input specialized override - generaly for composition
Type:
Default value: |
armor |
armor()
|
Get armor html
Returns :
SafeHtml
|
consumables |
consumables()
|
Get consumables html
Returns :
SafeHtml
|
ngAfterViewChecked |
ngAfterViewChecked()
|
Todo after view checked - delete remnants of gw2armory css and scripts
Returns :
void
|
ngOnInit |
ngOnInit()
|
Todo on init
Returns :
void
|
pets |
pets()
|
Get pets html
Returns :
SafeHtml
|
profSkills |
profSkills()
|
Get profession skills html
Returns :
SafeHtml
|
skills |
skills()
|
Get skills html
Returns :
SafeHtml
|
traits |
traits()
|
Get traits html
Returns :
SafeHtml
|
trinket |
trinket()
|
Get trinket html
Returns :
SafeHtml
|
wep1 |
wep1()
|
Get primary weapon set html
Returns :
SafeHtml
|
wep2 |
wep2()
|
Get secondary weapon set html
Returns :
SafeHtml
|
import { Component, OnInit, AfterViewChecked, Input, ChangeDetectionStrategy } from '@angular/core';
import { ProfBuild } from '../helpers/profBuild';
import { DomSanitizer, SafeHtml } from '@angular/platform-browser';
(<any>document).GW2A_EMBED_OPTIONS = {
lang: 'en',
persistToLocalStorage: true
};
/**
* Build display component
*/
@Component({
selector: 'app-display-build',
templateUrl: './display-build.component.html',
styleUrls: ['./display-build.component.css'],
changeDetection: ChangeDetectionStrategy.OnPush
})
export class DisplayBuildComponent implements OnInit, AfterViewChecked {
/**
* Input build data
*/
@Input() build: ProfBuild = null;
/**
* Input main override - generaly for build database
*/
@Input() mainOverride: string = null;
/**
* Input specialized override - generaly for composition
*/
@Input() specializedOverride: {
armor: string,
consumable: string,
trinket: string,
wep1: string,
wep2: string,
specialization: string,
profSkills: string,
skills: string
} = null;
/**
* Create a build diplay component
* @param sanitizer Dom sanitizer
*/
constructor(private sanitizer: DomSanitizer) {
}
/**
* Todo on init
*/
ngOnInit() {
}
/**
* Todo after view checked - delete remnants of gw2armory css and scripts
*/
ngAfterViewChecked() {
const toDestroyScript = document.head.querySelectorAll('script');
if (toDestroyScript.length > 0) {
for (let i = 0; i < toDestroyScript.length; i++) {
const scriptToRemove = toDestroyScript[i];
if (scriptToRemove.src.indexOf('armory') !== -1) {
scriptToRemove.remove();
}
}
}
const toDestroyLink = document.head.querySelectorAll('link');
if (toDestroyLink.length > 0) {
for (let i = 0; i < toDestroyLink.length; i++) {
const linkToRemove = toDestroyLink[i];
if (linkToRemove.href.indexOf('armory') !== -1) {
linkToRemove.remove();
}
}
}
const toDestroyStyle = document.head.querySelectorAll('style');
if (toDestroyStyle.length > 0) {
for (let i = 0; i < toDestroyStyle.length; i++) {
const styleToRemove = toDestroyStyle[i];
if (styleToRemove.innerHTML.indexOf('gw2a') !== -1) {
styleToRemove.remove();
}
}
}
const toDestroyDiv = document.body.querySelectorAll('div');
if (toDestroyDiv.length > 0) {
for (let i = toDestroyDiv.length - 1; i >= 0; i--) {
const divToRemove = toDestroyDiv[toDestroyDiv.length - 1];
if (divToRemove.innerHTML.indexOf('react') !== -1 || divToRemove.innerHTML.length === 0) {
divToRemove.remove();
} else {
break;
}
}
}
const script = document.createElement('script');
script.setAttribute('async', '');
script.setAttribute('src', 'https://unpkg.com/armory-embeds@^0.x.x/armory-embeds.js');
document.head.appendChild(script);
}
/**
* Get traits html
*/
traits(): SafeHtml {
return this.sanitizer.bypassSecurityTrustHtml(this.build.getSpecializations(this.mainOverride ||
(this.specializedOverride && this.specializedOverride.specialization)));
}
/**
* Get skills html
*/
skills(): SafeHtml {
let res = '';
const overrideValue = this.mainOverride ||
(this.specializedOverride && this.specializedOverride.skills);
if (this.build.hasSkills(overrideValue)) {
const skills = this.build.getSkills(overrideValue);
res += skills.heal;
res += skills.utilities;
res += skills.elite;
}
return this.sanitizer.bypassSecurityTrustHtml(res);
}
/**
* Get profession skills html
*/
profSkills(): SafeHtml {
return this.sanitizer.bypassSecurityTrustHtml(this.build.getProfessionSkills(this.mainOverride ||
(this.specializedOverride && this.specializedOverride.profSkills)));
}
/**
* Get pets html
*/
pets(): SafeHtml {
return this.sanitizer.bypassSecurityTrustHtml(this.build.getPets());
}
/**
* Get armor html
*/
armor(): SafeHtml {
let res = '';
const equipement = this.build.getArmor(this.mainOverride ||
(this.specializedOverride && this.specializedOverride.armor));
res += equipement.armor;
res += equipement.rune;
return this.sanitizer.bypassSecurityTrustHtml(res);
}
/**
* Get consumables html
*/
consumables(): SafeHtml {
return this.sanitizer.bypassSecurityTrustHtml(this.build.getConsumable(this.mainOverride ||
(this.specializedOverride && this.specializedOverride.consumable)));
}
/**
* Get trinket html
*/
trinket(): SafeHtml {
let res = '';
const trinket = this.build.getTrinket(this.mainOverride ||
(this.specializedOverride && this.specializedOverride.trinket));
res += trinket.BA;
res += trinket.AR;
return this.sanitizer.bypassSecurityTrustHtml(res);
}
/**
* Get primary weapon set html
*/
wep1(): SafeHtml {
let res = '';
const wep1 = this.build.getWeapon1(this.mainOverride ||
(this.specializedOverride && this.specializedOverride.wep1));
res += wep1.wep;
res += wep1.sig;
return this.sanitizer.bypassSecurityTrustHtml(res);
}
/**
* Get secondary weapon set html
*/
wep2(): SafeHtml {
let res = '';
const overrideValue = this.mainOverride ||
(this.specializedOverride && this.specializedOverride.wep2);
if (!this.build.isSingleWeapon(overrideValue)) {
const wep2 = this.build.getWeapon2(overrideValue);
res += wep2.wep;
res += wep2.sig;
}
return this.sanitizer.bypassSecurityTrustHtml(res);
}
}
<div *ngIf="build">
<div [class]="build.profession.name">
<div class="build uk-margin-bottom">
<div uk-accordion="collapsible: false">
<span>
<div class="uk-accordion-title my-accordion-title uk-text-bold uk-text-uppercase uk-text-middle">
<span class="uk-margin-small-left">Aptitudes</span>
</div>
<div id="traits" class="uk-margin-bottom uk-accordion-content uk-flex uk-flex-column uk-margin-large-left uk-margin-large-right"
[innerHTML]='traits()'></div>
</span>
<span>
<div class="uk-accordion-title my-accordion-title uk-text-bold uk-text-uppercase uk-text-middle">
<span class="uk-margin-small-left">Compétences</span>
</div>
<div class="uk-accordion-content uk-flex uk-flex-center uk-flex-column uk-flex-nowrap">
<div id="profSkills" class="uk-flex uk-flex-center uk-flex-middle uk-flex-row" [innerHTML]='profSkills()'></div>
<div id="pets" class="uk-flex uk-flex-center uk-flex-middle uk-flex-row" [innerHTML]='pets()'></div>
<div id="skills" class="uk-flex uk-flex-center uk-flex-middle uk-flex-row" [innerHTML]='skills()'></div>
</div>
</span>
<span>
<div class="uk-accordion-title my-accordion-title uk-text-bold uk-text-uppercase uk-text-middle">
<span class="uk-margin-small-left">Equipement</span>
</div>
<div class="uk-accordion-content uk-flex uk-flex-around uk-flex-middle uk-flex-nowrap uk-margin-large-left uk-margin-large-right">
<span class="armor">
<div class="uk-text-bold uk-text-center uk-text-middle uk-text-large">Armure</div>
<div id="armor" class="uk-flex uk-flex-center uk-flex-row uk-flex-middle" [innerHTML]='armor()'></div>
</span>
<div class="uk-flex uk-flex-center uk-flex-column uk-flex-middle">
<span class="trinket">
<div class="uk-text-bold uk-text-center uk-text-middle uk-text-large">Bijoux</div>
<div id="trinket" class="uk-flex uk-flex-center uk-flex-middle uk-flex-column" [innerHTML]='trinket()'></div>
</span>
<div class="uk-divider-small"></div>
<span class="weapon">
<div class="uk-text-bold uk-text-center uk-text-middle uk-text-large">Armes</div>
<div class="uk-flex uk-flex-center">
<div>
<div *ngIf="build.wep2" class="uk-text-bold uk-text-center uk-text-middle uk-text-large">Set 1</div>
<div id="wep1" [innerHTML]='wep1()'></div>
</div>
<div *ngIf="build.wep2" class="uk-margin-left">
<div class="uk-text-bold uk-text-center uk-text-middle uk-text-large">Set 2</div>
<div id="wep2" [innerHTML]='wep2()'></div>
</div>
</div>
</span>
</div>
</div>
</span>
<span>
<div class="uk-accordion-title my-accordion-title uk-text-bold uk-text-uppercase uk-text-middle">
<span class="uk-margin-small-left">Consommables</span>
</div>
<div id="consum" class="uk-accordion-content uk-flex uk-flex-column uk-flex-center uk-flex-middle" [innerHTML]='consumables()'></div>
</span>
</div>
</div>
</div>
</div>