This repository has been archived on 2025-06-18. You can view files and clone it, but you cannot make any changes to its state, such as pushing and creating new issues, pull requests or comments.
casino/frontend/src/app/shared/services/sound-initializer.service.ts
Jan-Marlon Leibl 6d353cc202
All checks were successful
CI / Get Changed Files (pull_request) Successful in 10s
CI / Checkstyle Main (pull_request) Has been skipped
CI / Docker backend validation (pull_request) Has been skipped
CI / oxlint (pull_request) Successful in 26s
CI / eslint (pull_request) Successful in 39s
CI / prettier (pull_request) Successful in 30s
CI / Docker frontend validation (pull_request) Successful in 57s
CI / test-build (pull_request) Successful in 42s
style: fix formatting and add missing commas in code
2025-05-15 14:04:43 +02:00

51 lines
1.3 KiB
TypeScript

import { Injectable, Renderer2, RendererFactory2 } from '@angular/core';
@Injectable({
providedIn: 'root',
})
export class SoundInitializerService {
private renderer: Renderer2;
private observer: MutationObserver;
constructor(rendererFactory: RendererFactory2) {
this.renderer = rendererFactory.createRenderer(null, null);
this.observer = new MutationObserver((mutations) => {
mutations.forEach((mutation) => {
mutation.addedNodes.forEach((node) => {
if (node instanceof HTMLElement) {
this.processElement(node);
}
});
});
});
}
initialize() {
document.querySelectorAll('button, a').forEach((element) => {
if (!element.hasAttribute('appPlaySound')) {
this.renderer.setAttribute(element, 'appPlaySound', '');
}
});
this.observer.observe(document.body, {
childList: true,
subtree: true,
});
}
private processElement(element: HTMLElement) {
if (
(element.tagName === 'BUTTON' || element.tagName === 'A') &&
!element.hasAttribute('appPlaySound')
) {
this.renderer.setAttribute(element, 'appPlaySound', '');
}
element.querySelectorAll('button, a').forEach((child) => {
if (!child.hasAttribute('appPlaySound')) {
this.renderer.setAttribute(child, 'appPlaySound', '');
}
});
}
}