File
        
        
            
            
            
    
        
            Methods
        
        
            
                
                    | 
                        
                        
                            
                            createScript
                            
                            
                        
                     | 
                
                
                    
createScript(src: string)
                     | 
                
                        
                            | 
                                    
                             | 
                        
                
                    
                            
                                    Parameters :
                                    
                                        
                                            
                                                | Name | 
                                                    Type | 
                                                Optional | 
                                             
                                        
                                        
                                                
                                                        | src | 
                                                        
                                                                    string
                                                         | 
                                                    
                                                    
                                                            no
                                                     | 
                                                    
                                                 
                                        
                                     
                             
                            
                             
                            
                                Returns :     Promise<any>
                             
                                
                                    
                                 
                     | 
                
            
        
        
            
                
                    | 
                        
                        
                            
                            createStyle
                            
                            
                        
                     | 
                
                
                    
createStyle(src: string)
                     | 
                
                        
                            | 
                                    
                             | 
                        
                
                    
                            
                                    Parameters :
                                    
                                        
                                            
                                                | Name | 
                                                    Type | 
                                                Optional | 
                                             
                                        
                                        
                                                
                                                        | src | 
                                                        
                                                                    string
                                                         | 
                                                    
                                                    
                                                            no
                                                     | 
                                                    
                                                 
                                        
                                     
                             
                            
                             
                            
                                Returns :     Promise<any>
                             
                                
                                    
                                 
                     | 
                
            
        
            
    
        
        
            
                
                    | 
                        
                        
                            
                                Private
                            resources
                            
                            
                        
                     | 
                
                
                    
                        resources:     literal type
                     | 
                
                    
                        
                            Type :     literal type
                         | 
                    
                    
                        
                            Default value : {}
                         | 
                    
                        
                            | 
                                    
                             | 
                        
            
        
     
    
        import { Injectable } from '@angular/core';
import { DocumentRef } from '../window-ref/document-ref.service';
@Injectable({ providedIn: 'root' })
export class AssetsLoader {
  private resources: { [key: string]: Promise<any> } = {};
  constructor(private documentRef: DocumentRef) {
  }
  createScript(src: string): Promise<any> {
    if (this.resources[src]) {
      return this.resources[src];
    }
    const promise = new Promise((resolve, reject) => {
      const script = this.documentRef.createElement('script');
      script.type = 'text/javascript';
      script.src = src;
      script.async = true;
      script.charset = 'UTF-8';
      script.id = `rebirth_script_${src}`;
      script.onreadystatechange = script.onload = () => {
        if ((!script.readyState || /loaded|complete/.test(script.readyState))) {
          resolve(script);
        }
      };
      script.onerror = (e) => {
        reject(e);
      };
      this.documentRef.body.appendChild(script);
    });
    this.resources[src] = promise;
    return promise;
  }
  createStyle(src: string): Promise<any> {
    if (this.resources[src]) {
      return this.resources[src];
    }
    const promise = new Promise((resolve, reject) => {
      const link = this.documentRef.createElement('link');
      link.rel = 'stylesheet';
      link.href = src;
      link.type = 'text/css';
      link.charset = 'UTF-8';
      link.id = `rebirth_link_${src}`;
      link.onreadystatechange = link.onload = () => {
        resolve(link);
      };
      link.onerror = (e) => {
        reject(e);
      };
      this.documentRef.body.appendChild(link);
    });
    this.resources[src] = promise;
    return promise;
  }
}