@asoftwareworld/google-adsense
Version:
Google Adsense for Angular
168 lines • 15.9 kB
JavaScript
/**
* @license
* Copyright ASW (A Software World) All Rights Reserved.
*
* Use of this source code is governed by an MIT-style license that can be
* found in the LICENSE file
*/
import { ChangeDetectionStrategy, Component, Inject, Input, ViewChild, ElementRef, PLATFORM_ID, } from '@angular/core';
import { isPlatformBrowser } from '@angular/common';
import { ASW_GOOGLE_ADSENSE_TOKEN } from './google-adsense-config';
import * as i0 from "@angular/core";
export class AswGoogleAdsense {
config;
platform;
/** adsense account ca-pub-XXXXXXXXXXXXXXXX */
adClient;
/** ad slot/number */
adSlot;
adFormat;
/** can be manually set if you need all ads on a page to have same id page-xxx */
adRegion = 'page-' + Math.floor(Math.random() * 10000) + 1;
/** ins element display style */
display;
/** ins element height in px */
width;
/** ins element width in px */
height;
/** used for in-feed ads */
layout;
/** used for in-feed ads */
layoutKey;
/** enable page-level ads */
pageLevelAds;
/** sets up some sort of google test ad */
adtest;
/* used for flexible ads */
fullWidthResponsive;
/**
* classes applied to the ins element
*/
className = '';
ins;
constructor(config, platform) {
this.config = config;
this.platform = platform;
}
ngOnInit() {
const config = this.config;
this.adClient = this.adClient ?? config.adClient;
this.adSlot = this.adSlot ?? config.adSlot;
this.adFormat = this.adFormat ?? config.adFormat ?? 'auto';
this.display = this.display ?? config.display ?? 'block';
this.width = this.width ?? config.width;
this.height = this.height ?? config.height;
this.layout = this.layout ?? config.layout;
this.layoutKey = this.layoutKey ?? config.layoutKey;
this.pageLevelAds = this.pageLevelAds ?? config.pageLevelAds;
this.adtest = this.adtest ?? config.adtest;
this.fullWidthResponsive = this.fullWidthResponsive ?? config.fullWidthResponsive;
}
ngOnDestroy() {
const iframe = this.ins.nativeElement.querySelector('iframe');
if (iframe && iframe.contentWindow) {
iframe.src = 'about:blank';
iframe.remove();
}
}
ngAfterViewInit() {
if (isPlatformBrowser(this.platform)) {
this.push();
}
}
push() {
const p = {};
if (this.pageLevelAds) {
p.google_ad_client = this.adClient;
p.enable_page_level_ads = true;
}
if (window) {
try {
(window.adsbygoogle = window.adsbygoogle || []).push(p);
}
catch {
// pass
}
}
}
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.6", ngImport: i0, type: AswGoogleAdsense, deps: [{ token: ASW_GOOGLE_ADSENSE_TOKEN }, { token: PLATFORM_ID }], target: i0.ɵɵFactoryTarget.Component });
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.6", type: AswGoogleAdsense, selector: "asw-google-adsense", inputs: { adClient: "adClient", adSlot: "adSlot", adFormat: "adFormat", adRegion: "adRegion", display: "display", width: "width", height: "height", layout: "layout", layoutKey: "layoutKey", pageLevelAds: "pageLevelAds", adtest: "adtest", fullWidthResponsive: "fullWidthResponsive", className: "className" }, viewQueries: [{ propertyName: "ins", first: true, predicate: ["ins"], descendants: true, read: ElementRef, static: true }], ngImport: i0, template: `
<ins
#ins
class="adsbygoogle {{ className }}"
[style.display]="display"
[style.width.px]="width"
[style.height.px]="height"
[attr.data-ad-client]="adClient"
[attr.data-ad-slot]="adSlot"
[attr.data-ad-format]="adFormat"
[attr.data-ad-region]="adRegion"
[attr.data-layout]="layout"
[attr.data-adtest]="adtest"
[attr.data-layout-key]="layoutKey"
[attr.data-full-width-responsive]="fullWidthResponsive"
>
</ins>
`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.6", ngImport: i0, type: AswGoogleAdsense, decorators: [{
type: Component,
args: [{
selector: 'asw-google-adsense',
template: `
<ins
#ins
class="adsbygoogle {{ className }}"
[style.display]="display"
[style.width.px]="width"
[style.height.px]="height"
[attr.data-ad-client]="adClient"
[attr.data-ad-slot]="adSlot"
[attr.data-ad-format]="adFormat"
[attr.data-ad-region]="adRegion"
[attr.data-layout]="layout"
[attr.data-adtest]="adtest"
[attr.data-layout-key]="layoutKey"
[attr.data-full-width-responsive]="fullWidthResponsive"
>
</ins>
`,
changeDetection: ChangeDetectionStrategy.OnPush,
}]
}], ctorParameters: function () { return [{ type: undefined, decorators: [{
type: Inject,
args: [ASW_GOOGLE_ADSENSE_TOKEN]
}] }, { type: undefined, decorators: [{
type: Inject,
args: [PLATFORM_ID]
}] }]; }, propDecorators: { adClient: [{
type: Input
}], adSlot: [{
type: Input
}], adFormat: [{
type: Input
}], adRegion: [{
type: Input
}], display: [{
type: Input
}], width: [{
type: Input
}], height: [{
type: Input
}], layout: [{
type: Input
}], layoutKey: [{
type: Input
}], pageLevelAds: [{
type: Input
}], adtest: [{
type: Input
}], fullWidthResponsive: [{
type: Input
}], className: [{
type: Input
}], ins: [{
type: ViewChild,
args: ['ins', { read: ElementRef, static: true }]
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ29vZ2xlLWFkc2Vuc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZ29vZ2xlLWFkc2Vuc2UvZ29vZ2xlLWFkc2Vuc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBRUgsT0FBTyxFQUVILHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsTUFBTSxFQUNOLEtBQUssRUFHTCxTQUFTLEVBQ1QsVUFBVSxFQUNWLFdBQVcsR0FDZCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUVwRCxPQUFPLEVBQUUsd0JBQXdCLEVBQTBCLE1BQU0seUJBQXlCLENBQUM7O0FBd0IzRixNQUFNLE9BQU8sZ0JBQWdCO0lBK0JxQjtJQUNiO0lBL0JqQyw4Q0FBOEM7SUFDckMsUUFBUSxDQUFVO0lBQzNCLHFCQUFxQjtJQUNaLE1BQU0sQ0FBbUI7SUFDekIsUUFBUSxDQUFVO0lBQzNCLGlGQUFpRjtJQUN4RSxRQUFRLEdBQUcsT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNwRSxnQ0FBZ0M7SUFDdkIsT0FBTyxDQUFVO0lBQzFCLCtCQUErQjtJQUN0QixLQUFLLENBQVU7SUFDeEIsOEJBQThCO0lBQ3JCLE1BQU0sQ0FBVTtJQUN6QiwyQkFBMkI7SUFDbEIsTUFBTSxDQUFVO0lBQ3pCLDJCQUEyQjtJQUNsQixTQUFTLENBQVU7SUFDNUIsNEJBQTRCO0lBQ25CLFlBQVksQ0FBVztJQUNoQywwQ0FBMEM7SUFDakMsTUFBTSxDQUFVO0lBQ3pCLDJCQUEyQjtJQUNsQixtQkFBbUIsQ0FBVztJQUN2Qzs7T0FFRztJQUNNLFNBQVMsR0FBRyxFQUFFLENBQUM7SUFDOEIsR0FBRyxDQUFjO0lBRXZFLFlBQzhDLE1BQThCLEVBQzNDLFFBQWE7UUFEQSxXQUFNLEdBQU4sTUFB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LEtBQUs7Z0JBRUcsTUFBTTtzQkFBZCxLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBRUcsUUFBUTtzQkFBaEIsS0FBSztnQkFFRyxPQUFPO3NCQUFmLEtBQUs7Z0JBRUcsS0FBSztzQkFBYixLQUFLO2dCQUVHLE1BQU07c0JBQWQsS0FBSztnQkFFRyxNQUFNO3NCQUFkLEtBQUs7Z0JBRUcsU0FBUztzQkFBakIsS0FBSztnQkFFRyxZQUFZO3NCQUFwQixLQUFLO2dCQUVHLE1BQU07c0JBQWQsS0FBSztnQkFFRyxtQkFBbUI7c0JBQTNCLEtBQUs7Z0JBSUcsU0FBUztzQkFBakIsS0FBSztnQkFDZ0QsR0FBRztzQkFBeEQsU0FBUzt1QkFBQyxLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgQVNXIChBIFNvZnR3YXJlIFdvcmxkKSBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlXG4gKi9cblxuaW1wb3J0IHtcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENvbXBvbmVudCxcbiAgICBJbmplY3QsXG4gICAgSW5wdXQsXG4gICAgT25EZXN0cm95LFxuICAgIE9uSW5pdCxcbiAgICBWaWV3Q2hpbGQsXG4gICAgRWxlbWVudFJlZixcbiAgICBQTEFURk9STV9JRCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBpc1BsYXRmb3JtQnJvd3NlciB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5cbmltcG9ydCB7IEFTV19HT09HTEVfQURTRU5TRV9UT0tFTiwgQXN3R29vZ2xlQWRzZW5zZUNvbmZpZyB9IGZyb20gJy4vZ29vZ2xlLWFkc2Vuc2UtY29uZmlnJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdhc3ctZ29vZ2xlLWFkc2Vuc2UnLFxuICAgIHRlbXBsYXRlOiBgXG4gICAgPGluc1xuICAgICAgI2luc1xuICAgICAgY2xhc3M9XCJhZHNieWdvb2dsZSB7eyBjbGFzc05hbWUgfX1cIlxuICAgICAgW3N0eWxlLmRpc3BsYXldPVwiZGlzcGxheVwiXG4gICAgICBbc3R5bGUud2lkdGgucHhdPVwid2lkdGhcIlxuICAgICAgW3N0eWxlLmhlaWdodC5weF09XCJoZWlnaHRcIlxuICAgICAgW2F0dHIuZGF0YS1hZC1jbGllbnRdPVwiYWRDbGllbnRcIlxuICAgICAgW2F0dHIuZGF0YS1hZC1zbG90XT1cImFkU2xvdFwiXG4gICAgICBbYXR0ci5kYXRhLWFkLWZvcm1hdF09XCJhZEZvcm1hdFwiXG4gICAgICBbYXR0ci5kYXRhLWFkLXJlZ2lvbl09XCJhZFJlZ2lvblwiXG4gICAgICBbYXR0ci5kYXRhLWxheW91dF09XCJsYXlvdXRcIlxuICAgICAgW2F0dHIuZGF0YS1hZHRlc3RdPVwiYWR0ZXN0XCJcbiAgICAgIFthdHRyLmRhdGEtbGF5b3V0LWtleV09XCJsYXlvdXRLZXlcIlxuICAgICAgW2F0dHIuZGF0YS1mdWxsLXdpZHRoLXJlc3BvbnNpdmVdPVwiZnVsbFdpZHRoUmVzcG9uc2l2ZVwiXG4gICAgPlxuICAgIDwvaW5zPlxuICBgLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBBc3dHb29nbGVBZHNlbnNlIGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xuICAgIC8qKiBhZHNlbnNlIGFjY291bnQgY2EtcHViLVhYWFhYWFhYWFhYWFhYWFggKi9cbiAgICBASW5wdXQoKSBhZENsaWVudCE6IHN0cmluZztcbiAgICAvKiogYWQgc2xvdC9udW1iZXIgKi9cbiAgICBASW5wdXQoKSBhZFNsb3QhOiBzdHJpbmcgfCBudW1iZXI7XG4gICAgQElucHV0KCkgYWRGb3JtYXQhOiBzdHJpbmc7XG4gICAgLyoqIGNhbiBiZSBtYW51YWxseSBzZXQgaWYgeW91IG5lZWQgYWxsIGFkcyBvbiBhIHBhZ2UgdG8gaGF2ZSBzYW1lIGlkIHBhZ2UteHh4ICovXG4gICAgQElucHV0KCkgYWRSZWdpb24gPSAncGFnZS0nICsgTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogMTAwMDApICsgMTtcbiAgICAvKiogaW5zIGVsZW1lbnQgZGlzcGxheSBzdHlsZSAqL1xuICAgIEBJbnB1dCgpIGRpc3BsYXkhOiBzdHJpbmc7XG4gICAgLyoqIGlucyBlbGVtZW50IGhlaWdodCBpbiBweCAqL1xuICAgIEBJbnB1dCgpIHdpZHRoITogbnVtYmVyO1xuICAgIC8qKiBpbnMgZWxlbWVudCB3aWR0aCBpbiBweCAqL1xuICAgIEBJbnB1dCgpIGhlaWdodCE6IG51bWJlcjtcbiAgICAvKiogdXNlZCBmb3IgaW4tZmVlZCBhZHMgKi9cbiAgICBASW5wdXQoKSBsYXlvdXQhOiBzdHJpbmc7XG4gICAgLyoqIHVzZWQgZm9yIGluLWZlZWQgYWRzICovXG4gICAgQElucHV0KCkgbGF5b3V0S2V5ITogc3RyaW5nO1xuICAgIC8qKiBlbmFibGUgcGFnZS1sZXZlbCBhZHMgKi9cbiAgICBASW5wdXQoKSBwYWdlTGV2ZWxBZHMhOiBib29sZWFuO1xuICAgIC8qKiBzZXRzIHVwIHNvbWUgc29ydCBvZiBnb29nbGUgdGVzdCBhZCAqL1xuICAgIEBJbnB1dCgpIGFkdGVzdCE6IHN0cmluZztcbiAgICAvKiB1c2VkIGZvciBmbGV4aWJsZSBhZHMgKi9cbiAgICBASW5wdXQoKSBmdWxsV2lkdGhSZXNwb25zaXZlITogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBjbGFzc2VzIGFwcGxpZWQgdG8gdGhlIGlucyBlbGVtZW50XG4gICAgICovXG4gICAgQElucHV0KCkgY2xhc3NOYW1lID0gJyc7XG4gICAgQFZpZXdDaGlsZCgnaW5zJywgeyByZWFkOiBFbGVtZW50UmVmLCBzdGF0aWM6IHRydWUgfSkgaW5zITogRWxlbWVudFJlZjtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBASW5qZWN0KEFTV19HT09HTEVfQURTRU5TRV9UT0tFTikgcHJpdmF0ZSBjb25maWc6IEFzd0dvb2dsZUFkc2Vuc2VDb25maWcsXG4gICAgICAgIEBJbmplY3QoUExBVEZPUk1fSUQpIHByaXZhdGUgcGxhdGZvcm06IGFueSxcbiAgICApIHsgfVxuXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMuY29uZmlnO1xuICAgICAgICB0aGlzLmFkQ2xpZW50ID0gdGhpcy5hZENsaWVudCA/PyBjb25maWcuYWRDbGllbnQ7XG4gICAgICAgIHRoaXMuYWRTbG90ID0gdGhpcy5hZFNsb3QgPz8gY29uZmlnLmFkU2xvdDtcbiAgICAgICAgdGhpcy5hZEZvcm1hdCA9IHRoaXMuYWRGb3JtYXQgPz8gY29uZmlnLmFkRm9ybWF0ID8/ICdhdXRvJztcbiAgICAgICAgdGhpcy5kaXNwbGF5ID0gdGhpcy5kaXNwbGF5ID8/IGNvbmZpZy5kaXNwbGF5ID8/ICdibG9jayc7XG4gICAgICAgIHRoaXMud2lkdGggPSB0aGlzLndpZHRoID8/IGNvbmZpZy53aWR0aDtcbiAgICAgICAgdGhpcy5oZWlnaHQgPSB0aGlzLmhlaWdodCA/PyBjb25maWcuaGVpZ2h0O1xuICAgICAgICB0aGlzLmxheW91dCA9IHRoaXMubGF5b3V0ID8/IGNvbmZpZy5sYXlvdXQ7XG4gICAgICAgIHRoaXMubGF5b3V0S2V5ID0gdGhpcy5sYXlvdXRLZXkgPz8gY29uZmlnLmxheW91dEtleTtcbiAgICAgICAgdGhpcy5wYWdlTGV2ZWxBZHMgPSB0aGlzLnBhZ2VMZXZlbEFkcyA/PyBjb25maWcucGFnZUxldmVsQWRzO1xuICAgICAgICB0aGlzLmFkdGVzdCA9IHRoaXMuYWR0ZXN0ID8/IGNvbmZpZy5hZHRlc3Q7XG4gICAgICAgIHRoaXMuZnVsbFdpZHRoUmVzcG9uc2l2ZSA9IHRoaXMuZnVsbFdpZHRoUmVzcG9uc2l2ZSA/PyBjb25maWcuZnVsbFdpZHRoUmVzcG9uc2l2ZTtcbiAgICB9XG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGlmcmFtZSA9IHRoaXMuaW5zLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignaWZyYW1lJyk7XG4gICAgICAgIGlmIChpZnJhbWUgJiYgaWZyYW1lLmNvbnRlbnRXaW5kb3cpIHtcbiAgICAgICAgICAgIGlmcmFtZS5zcmMgPSAnYWJvdXQ6YmxhbmsnO1xuICAgICAgICAgICAgaWZyYW1lLnJlbW92ZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgICAgICBpZiAoaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybSkpIHtcbiAgICAgICAgICAgIHRoaXMucHVzaCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVzaCgpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcDogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgYm9vbGVhbj4gPSB7fTtcbiAgICAgICAgaWYgKHRoaXMucGFnZUxldmVsQWRzKSB7XG4gICAgICAgICAgICBwLmdvb2dsZV9hZF9jbGllbnQgPSB0aGlzLmFkQ2xpZW50O1xuICAgICAgICAgICAgcC5lbmFibGVfcGFnZV9sZXZlbF9hZHMgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHdpbmRvdykge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAoKHdpbmRvdyBhcyBhbnkpLmFkc2J5Z29vZ2xlID0gKHdpbmRvdyBhcyBhbnkpLmFkc2J5Z29vZ2xlIHx8IFtdKS5wdXNoKHApO1xuICAgICAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICAgICAgLy8gcGFzc1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuIl19