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 { |
export class DomStrategy { |
||||
private readonly isBrowser: boolean; |
|
||||
|
|
||||
constructor( |
constructor( |
||||
private targetFactory: () => HTMLElement, |
private getTarget: () => HTMLElement, |
||||
public position: InsertPosition = 'beforeend', |
public position: InsertPosition = 'beforeend', |
||||
) { |
) {} |
||||
const platformId = inject(PLATFORM_ID); |
|
||||
this.isBrowser = isPlatformBrowser(platformId); |
|
||||
} |
|
||||
|
|
||||
insertElement<T extends HTMLElement>(element: T) { |
insertElement<T extends HTMLElement>(element: T) { |
||||
if (this.isBrowser) { |
if (typeof document !== 'undefined') { |
||||
const target = this.targetFactory(); |
const target = this.getTarget(); |
||||
target.insertAdjacentElement(this.position, element); |
target.insertAdjacentElement(this.position, element); |
||||
} |
} |
||||
} |
} |
||||
} |
} |
||||
|
|
||||
export const DOM_STRATEGY = { |
export const DOM_STRATEGY = { |
||||
AfterElement: (el: HTMLElement) => new DomStrategy(() => el, 'afterend'), |
AfterElement(element: HTMLElement) { |
||||
BeforeElement: (el: HTMLElement) => new DomStrategy(() => el, 'beforebegin'), |
return new DomStrategy(() => element, 'afterend'); |
||||
AppendToBody: () => new DomStrategy(() => inject(DOCUMENT).body, 'beforeend'), |
}, |
||||
AppendToHead: () => new DomStrategy(() => inject(DOCUMENT).head, 'beforeend'), |
AppendToBody() { |
||||
PrependToHead: () => new DomStrategy(() => inject(DOCUMENT).head, 'afterbegin'), |
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