* Starts the MutationObserver for grid changes.
()
| 676 | * Starts the MutationObserver for grid changes. |
| 677 | */ |
| 678 | startObserver() { |
| 679 | if (isPlaylistPage()) { |
| 680 | logger('Skipping observer start on playlist page') |
| 681 | GridManager.removeCSS() |
| 682 | return |
| 683 | } |
| 684 | if (this.observer) { |
| 685 | this.observer.disconnect() |
| 686 | logger('Disconnected previous observer', 'debug') |
| 687 | } |
| 688 | this.observer = new MutationObserver(mutations => { |
| 689 | for (const mutation of mutations) { |
| 690 | if ( |
| 691 | mutation.target.matches('ytd-rich-grid-renderer') || |
| 692 | mutation.target.closest('ytd-rich-grid-renderer') || |
| 693 | mutation.target.querySelector('ytd-rich-grid-renderer') || |
| 694 | ['style', 'hidden', 'class', 'elements-per-row'].includes( |
| 695 | mutation.attributeName |
| 696 | ) || |
| 697 | mutation.addedNodes.length > 0 |
| 698 | ) { |
| 699 | GridManager.updateGrid() |
| 700 | break |
| 701 | } |
| 702 | } |
| 703 | }) |
| 704 | const target = document.querySelector( |
| 705 | '#contents, ytd-two-column-browse-results-renderer, ytd-app' |
| 706 | ) |
| 707 | if (target) { |
| 708 | this.observer.observe(target, { |
| 709 | childList: true, |
| 710 | subtree: true, |
| 711 | attributes: true, |
| 712 | attributeFilter: ['style', 'class', 'hidden', 'elements-per-row'] |
| 713 | }) |
| 714 | logger('Started observer', 'debug') |
| 715 | } else { |
| 716 | logger('Observer target not found, retrying', 'debug') |
| 717 | setTimeout(() => this.startObserver(), CONFIG.RETRY_INTERVAL) |
| 718 | } |
| 719 | }, |
| 720 | |
| 721 | /** |
| 722 | * Sets up event listeners for resize, load, and popstate. |
nothing calls this directly
no test coverage detected