import { Injectable } from '@angular/core'; import {log as defulatLog} from '../util/log'; const log = defulatLog.factory('settings'); let totalSettings: any = {}; let extendSettings: any = {}; @Injectable() export class SettingsService { constructor() { } public register(module: string, settings: any) { log(`[${module.toUpperCase()}] register`) // if (totalSettings[module] !== undefined) { // throw new Error(`Already registered setting module (${module})`); // } totalSettings[module] = Object.assign(totalSettings[module] || {}, settings) if (extendSettings[module] !== undefined && extendSettings[module].length > 0 ) { for(let extendSetting of extendSettings[module]) { totalSettings[module] = Object.assign(totalSettings[module], extendSetting) } } log(`[${module.toUpperCase()}] registered`, totalSettings) } public extend(module: string, settings: any) { if (totalSettings[module] === undefined) { log(`[${module.toUpperCase()}] extend not ready, waiting for register`, settings) extendSettings[module] = extendSettings[module] || []; extendSettings[module].push(settings) return; } log(`[${module.toUpperCase()}] extend`, settings) totalSettings[module] = Object.assign(totalSettings[module], settings) log(`[${module.toUpperCase()}] done`, totalSettings) } get data(): any { return totalSettings; } boot() { } afterInitWaiter: any; afterInit() { log('afterInit'); const coreSettings = totalSettings['core']; if (coreSettings === undefined) { log('afterInit waiting for construction') this.afterInitWaiter = setTimeout(() => { this.afterInit() }) return } if (coreSettings.hasOwnProperty('integration')) { log('afterInit - integration'); const head = document.getElementsByTagName("head")[0]; // yandex if (coreSettings.integration.hasOwnProperty('yandex')) { log('afterInit - integration - yandex'); // yandex-verification if (coreSettings.integration.yandex.hasOwnProperty('verification')) { log('afterInit - integration - yandex - verification'); const meta = document.createElement('meta'); meta.name = "yandex-verification"; meta.content = coreSettings.integration.yandex['verification']; head.appendChild(meta); } } // google if (coreSettings.integration.hasOwnProperty('google')) { log('afterInit - integration - google'); // google-site-verification if (coreSettings.integration.google.hasOwnProperty('site-verification')) { log('afterInit - integration - google - site-verification'); const meta = document.createElement('meta'); meta.name = "google-site-verification"; meta.content = coreSettings.integration.google['site-verification']; head.appendChild(meta); } // google analytics if (coreSettings.integration.google.hasOwnProperty('analytics')) { log('afterInit - integration - google - analytics'); const script = document.createElement("script"); script.type = 'text/javascript'; script.async = true script.src = `https://www.googletagmanager.com/gtag/js?id=${coreSettings.integration.google.analytics}` head.appendChild(script); const scriptInline =document.createElement("script"); scriptInline.type = 'text/javascript'; scriptInline.innerHTML = ` window.dataLayer = window.dataLayer || []; function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', '${coreSettings.integration.google.analytics}'); ` head.appendChild(scriptInline); log('afterInit - integration - google - analytics - load script'); } } // microsoft if (coreSettings.integration.hasOwnProperty('microsoft')) { log('afterInit - integration - google - microsoft'); // msvalidate.01 / bing if (coreSettings.integration.microsoft.hasOwnProperty('msvalidate.01')) { log('afterInit - integration - google - microsoft - msvalidate'); const meta = document.createElement('meta'); meta.name = "msvalidate.01"; meta.content = coreSettings.integration.microsoft['msvalidate.01']; head.appendChild(meta); } } } } }