mirror of https://github.com/abpframework/abp.git
2 changed files with 47 additions and 17 deletions
@ -0,0 +1,28 @@ |
|||
import { Inject, Injectable } from '@angular/core'; |
|||
import { DOCUMENT } from '@angular/common'; |
|||
import { DomStrategy } from '../strategies'; |
|||
|
|||
@Injectable({ providedIn: 'root' }) |
|||
export class DomStrategyService { |
|||
constructor(@Inject(DOCUMENT) private document: Document) {} |
|||
|
|||
afterElement(el: HTMLElement) { |
|||
return new DomStrategy(() => el, 'afterend'); |
|||
} |
|||
|
|||
beforeElement(el: HTMLElement) { |
|||
return new DomStrategy(() => el, 'beforebegin'); |
|||
} |
|||
|
|||
appendToBody() { |
|||
return new DomStrategy(() => this.document.body, 'beforeend'); |
|||
} |
|||
|
|||
appendToHead() { |
|||
return new DomStrategy(() => this.document.head, 'beforeend'); |
|||
} |
|||
|
|||
prependToHead() { |
|||
return new DomStrategy(() => this.document.head, 'afterbegin'); |
|||
} |
|||
} |
|||
@ -1,29 +1,31 @@ |
|||
import { inject, PLATFORM_ID } from '@angular/core'; |
|||
import { isPlatformBrowser, DOCUMENT } from '@angular/common'; |
|||
|
|||
export class DomStrategy { |
|||
private readonly isBrowser: boolean; |
|||
|
|||
constructor( |
|||
private targetFactory: () => HTMLElement, |
|||
private getTarget: () => HTMLElement, |
|||
public position: InsertPosition = 'beforeend', |
|||
) { |
|||
const platformId = inject(PLATFORM_ID); |
|||
this.isBrowser = isPlatformBrowser(platformId); |
|||
} |
|||
) {} |
|||
|
|||
insertElement<T extends HTMLElement>(element: T) { |
|||
if (this.isBrowser) { |
|||
const target = this.targetFactory(); |
|||
if (typeof document !== 'undefined') { |
|||
const target = this.getTarget(); |
|||
target.insertAdjacentElement(this.position, element); |
|||
} |
|||
} |
|||
} |
|||
|
|||
export const DOM_STRATEGY = { |
|||
AfterElement: (el: HTMLElement) => new DomStrategy(() => el, 'afterend'), |
|||
BeforeElement: (el: HTMLElement) => new DomStrategy(() => el, 'beforebegin'), |
|||
AppendToBody: () => new DomStrategy(() => inject(DOCUMENT).body, 'beforeend'), |
|||
AppendToHead: () => new DomStrategy(() => inject(DOCUMENT).head, 'beforeend'), |
|||
PrependToHead: () => new DomStrategy(() => inject(DOCUMENT).head, 'afterbegin'), |
|||
AfterElement(element: HTMLElement) { |
|||
return new DomStrategy(() => element, 'afterend'); |
|||
}, |
|||
AppendToBody() { |
|||
return new DomStrategy(() => document?.body, 'beforeend'); |
|||
}, |
|||
AppendToHead() { |
|||
return new DomStrategy(() => document?.head, 'beforeend'); |
|||
}, |
|||
BeforeElement(element: HTMLElement) { |
|||
return new DomStrategy(() => element, 'beforebegin'); |
|||
}, |
|||
PrependToHead() { |
|||
return new DomStrategy(() => document?.head, 'afterbegin'); |
|||
}, |
|||
}; |
|||
|
|||
Loading…
Reference in new issue