Sha256: f0d85aecc2513ec7b36ae44a271cabbbb5776ecdde6a450fe4310522ad4d5807

Contents?: true

Size: 1.8 KB

Versions: 410

Compression:

Stored size: 1.8 KB

Contents

export default class ElementObserver {
  constructor(matchDelegate, target = document) {
    this.matchDelegate = matchDelegate
    this.target = target
  }

  start() {
    this.mutationObserver.observe(this.target, { attributes: true, childList: true, subtree: true })
    this.catchup()
  }

  stop() {
    this.mutationObserverdisconnect()
  }

  catchup() {
    this.handleAdditions(this.matchDelegate.matches(this.target))
  }

  processMutationList(mutationList) {
    for (const mutation of mutationList) {
      if (mutation.type == 'attributes') {
        this.processAttributeChange(mutation.target)
      } else if (mutation.type == 'childList') {
        this.processRemovedNodes(Array.from(mutation.removedNodes))
        this.processAddedNodes(Array.from(mutation.addedNodes))
      }
    }
  }

  processAttributeChange(node) {
    if (node.nodeType !== Node.ELEMENT_NODE) return

    const matches = this.matchDelegate.matches(node)

    if (matches.length === 0) return this.matchDelegate.removeMatch(node)

    this.handleAdditions(matches)
  }

  processRemovedNodes(nodes) {
    for (const node of nodes) {
      if (node.nodeType !== Node.ELEMENT_NODE) continue
      this.handleRemovals(this.matchDelegate.matches(node))
    }
  }

  processAddedNodes(nodes) {
    for (const node of nodes) {
      if (node.nodeType !== Node.ELEMENT_NODE) continue
      this.handleAdditions(this.matchDelegate.matches(node))
    }
  }

  handleRemovals(elements) {
    for (const element of elements) this.matchDelegate.removeMatch(element)
  }

  handleAdditions(elements) {
    for (const element of elements) this.matchDelegate.addMatch(element)
  }

  get mutationObserver() {
    return this._mutationObserver =
      this._mutationObserver || new MutationObserver((mutationList) => this.processMutationList(mutationList))
  }
}

Version data entries

410 entries across 410 versions & 1 rubygems

Version Path
playbook_ui-14.5.0.pre.alpha.javascriptassets3939 app/pb_kits/playbook/pb_enhanced_element/element_observer.js
playbook_ui-14.5.0.pre.alpha.javascriptassets3932 app/pb_kits/playbook/pb_enhanced_element/element_observer.js
playbook_ui-11.12.1.pre.alpha.charts1 app/pb_kits/playbook/pb_enhanced_element/element_observer.js
playbook_ui-11.12.1.pre.alpha.passphrase1 app/pb_kits/playbook/pb_enhanced_element/element_observer.js
playbook_ui-11.12.1 app/pb_kits/playbook/pb_enhanced_element/element_observer.js
playbook_ui-11.13.0.pre.alpha.fileupload1 app/pb_kits/playbook/pb_enhanced_element/element_observer.js
playbook_ui-11.12.0 app/pb_kits/playbook/pb_enhanced_element/element_observer.js
playbook_ui-11.11.0.pre.alpha.paginate2 app/pb_kits/playbook/pb_enhanced_element/element_observer.js
playbook_ui-11.11.0.pre.alpha.dialog2 app/pb_kits/playbook/pb_enhanced_element/element_observer.js
playbook_ui-11.11.0.pre.alpha.paginate1 app/pb_kits/playbook/pb_enhanced_element/element_observer.js
playbook_ui-11.11.0.pre.alpha.renderer1 app/pb_kits/playbook/pb_enhanced_element/element_observer.js
playbook_ui-11.11.0.pre.alpha.dialog1 app/pb_kits/playbook/pb_enhanced_element/element_observer.js
playbook_ui-11.11.0 app/pb_kits/playbook/pb_enhanced_element/element_observer.js
playbook_ui-11.10.0.pre.alpha.pre.bold1 app/pb_kits/playbook/pb_enhanced_element/element_observer.js
playbook_ui-11.10.0.pre.alpha.pagination1 app/pb_kits/playbook/pb_enhanced_element/element_observer.js
playbook_ui-11.10.0 app/pb_kits/playbook/pb_enhanced_element/element_observer.js
playbook_ui-11.9.0 app/pb_kits/playbook/pb_enhanced_element/element_observer.js
playbook_ui-11.9.0.pre.alpha.fileupload1 app/pb_kits/playbook/pb_enhanced_element/element_observer.js
playbook_ui-11.8.1 app/pb_kits/playbook/pb_enhanced_element/element_observer.js
playbook_ui-11.8.0 app/pb_kits/playbook/pb_enhanced_element/element_observer.js