2 Commits 191bcf7887 ... ebf08c89a0

Author SHA1 Message Date
  Iñigo Valentin ebf08c89a0 Implemented child projects 1 month ago
  Iñigo Valentin 191bcf7887 Implemented child projects 1 month ago
1 changed files with 48 additions and 0 deletions
  1. 48 0
      frontend/src/app/service/seo-service.ts

+ 48 - 0
frontend/src/app/service/seo-service.ts

@@ -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);
+  }
+}