MCPcopy
hub / github.com/ChinaGodMan/UserScripts / startObserver

Function startObserver

youtube-dynamic-grid/youtube-dynamic-grid.user.js:678–719  ·  view source on GitHub ↗

* Starts the MutationObserver for grid changes.

()

Source from the content-addressed store, hash-verified

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.

Callers

nothing calls this directly

Calls 2

isPlaylistPageFunction · 0.85
loggerFunction · 0.85

Tested by

no test coverage detected