import { IHtmlEngineHelper, IHandlebarsOptions } from './html-engine-helper.interface'; import { DependenciesEngine } from '../dependencies.engine'; import { ConfigurationInterface } from '../../interfaces/configuration.interface'; import { AngularVersionUtil, BasicTypeUtil } from '../../../utils'; export class LinkTypeHelper implements IHtmlEngineHelper { private angularVersionUtil = new AngularVersionUtil(); private basicTypeUtil = new BasicTypeUtil(); constructor( private configuration: ConfigurationInterface, private dependenciesEngine: DependenciesEngine) { } public helperFunc(context: any, name: string, options: IHandlebarsOptions) { let _result = this.dependenciesEngine.find(name); let angularDocPrefix = this.angularVersionUtil.prefixOfficialDoc(this.configuration.mainData.angularVersion); if (_result) { context.type = { raw: name }; if (_result.source === 'internal') { if (_result.data.type === 'class') { _result.data.type = 'classe'; } context.type.href = '../' + _result.data.type + 's/' + _result.data.name + '.html'; if (_result.data.type === 'miscellaneous') { let mainpage = ''; switch (_result.data.subtype) { case 'enum': mainpage = 'enumerations'; break; case 'function': mainpage = 'functions'; break; case 'typealias': mainpage = 'typealiases'; break; case 'variable': mainpage = 'variables'; } context.type.href = '../' + _result.data.type + '/' + mainpage + '.html#' + _result.data.name; } context.type.target = '_self'; } else { context.type.href = `https://${angularDocPrefix}angular.io/${_result.data.path}`; context.type.target = '_blank'; } return options.fn(context); } else if (this.basicTypeUtil.isKnownType(name)) { context.type = { raw: name }; context.type.target = '_blank'; context.type.href = this.basicTypeUtil.getTypeUrl(name); return options.fn(context); } else { return options.inverse(context); } } }