|
|
@@ -0,0 +1,48 @@
|
|
|
+import { Injectable, Renderer2, RendererFactory2 } from '@angular/core';
|
|
|
+
|
|
|
+@Injectable({providedIn: 'root'})
|
|
|
+
|
|
|
+export class SeoService {
|
|
|
+ private renderer: Renderer2;
|
|
|
+
|
|
|
+ private data: Object = {};
|
|
|
+ private modeSet: boolean = false;
|
|
|
+ private modeSingle: boolean = true;
|
|
|
+
|
|
|
+ constructor(private rendererFactory: RendererFactory2) {
|
|
|
+ this.renderer = this.rendererFactory.createRenderer(null, null);
|
|
|
+ this.set("@context", "https://schema.org/");
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * Sets the service to insert
|
|
|
+ */
|
|
|
+ setModeSingle(){
|
|
|
+ if (this.modeSet){
|
|
|
+ console.log("The mode is already set to " + (this.modeSingle ? "SINGLE" : "MULTIPLE"));
|
|
|
+ }
|
|
|
+ this.modeSingle = true;
|
|
|
+ this.modeSet = true;
|
|
|
+ Object.defineProperty(this.data, 'mainEntity', { value: {}, writable: true });
|
|
|
+ }
|
|
|
+
|
|
|
+ setModeMultiple(){
|
|
|
+ if (this.modeSet){
|
|
|
+ console.log("The mode is already set to " + (this.modeSingle ? "SINGLE" : "MULTIPLE"));
|
|
|
+ }
|
|
|
+ this.modeSingle = false;
|
|
|
+ this.modeSet = true;
|
|
|
+ Object.defineProperty(this.data, 'mainEntity', { value: {}, writable: true });
|
|
|
+ }
|
|
|
+
|
|
|
+ set(key: string, value: string){
|
|
|
+ Object.defineProperty(this.data, key, { value: value, writable: true });
|
|
|
+ }
|
|
|
+
|
|
|
+ render() {
|
|
|
+ const script = this.renderer.createElement('script');
|
|
|
+ script.type = 'application/ld+json';
|
|
|
+ script.text = JSON.stringify(this.data);
|
|
|
+ this.renderer.appendChild(document.head, script);
|
|
|
+ }
|
|
|
+}
|