)
-
- if (tag === HostComponent && stateNode !== null) {
- lastHostComponent = stateNode // createEventHandle listeners
-
- if (reactEventName !== null) {
- var listener = getListener(instance, reactEventName)
-
- if (listener != null) {
- listeners.push(
- createDispatchListener(instance, listener, lastHostComponent)
- )
- }
- }
- } // If we are only accumulating events for the target, then we don't
- // continue to propagate through the React fiber tree to find other
- // listeners.
-
- if (accumulateTargetOnly) {
- break
- }
-
- instance = instance.return
- }
-
- return listeners
- } // We should only use this function for:
- // - BeforeInputEventPlugin
- // - ChangeEventPlugin
- // - SelectEventPlugin
- // This is because we only process these plugins
- // in the bubble phase, so we need to accumulate two
- // phase event listeners (via emulation).
-
- function accumulateTwoPhaseListeners(targetFiber, reactName) {
- var captureName = reactName + 'Capture'
- var listeners = []
- var instance = targetFiber // Accumulate all instances and listeners via the target -> root path.
-
- while (instance !== null) {
- var _instance3 = instance,
- stateNode = _instance3.stateNode,
- tag = _instance3.tag // Handle listeners that are on HostComponents (i.e.
)
-
- if (tag === HostComponent && stateNode !== null) {
- var currentTarget = stateNode
- var captureListener = getListener(instance, captureName)
-
- if (captureListener != null) {
- listeners.unshift(
- createDispatchListener(instance, captureListener, currentTarget)
- )
- }
-
- var bubbleListener = getListener(instance, reactName)
-
- if (bubbleListener != null) {
- listeners.push(
- createDispatchListener(instance, bubbleListener, currentTarget)
- )
- }
- }
-
- instance = instance.return
- }
-
- return listeners
- }
-
- function getParent(inst) {
- if (inst === null) {
- return null
- }
-
- do {
- inst = inst.return // TODO: If this is a HostRoot we might want to bail out.
- // That is depending on if we want nested subtrees (layers) to bubble
- // events to their parent. We could also go through parentNode on the
- // host node but that wouldn't work for React Native and doesn't let us
- // do the portal feature.
- } while (inst && inst.tag !== HostComponent)
-
- if (inst) {
- return inst
- }
-
- return null
- }
- /**
- * Return the lowest common ancestor of A and B, or null if they are in
- * different trees.
- */
-
- function getLowestCommonAncestor(instA, instB) {
- var nodeA = instA
- var nodeB = instB
- var depthA = 0
-
- for (var tempA = nodeA; tempA; tempA = getParent(tempA)) {
- depthA++
- }
-
- var depthB = 0
-
- for (var tempB = nodeB; tempB; tempB = getParent(tempB)) {
- depthB++
- } // If A is deeper, crawl up.
-
- while (depthA - depthB > 0) {
- nodeA = getParent(nodeA)
- depthA--
- } // If B is deeper, crawl up.
-
- while (depthB - depthA > 0) {
- nodeB = getParent(nodeB)
- depthB--
- } // Walk in lockstep until we find a match.
-
- var depth = depthA
-
- while (depth--) {
- if (
- nodeA === nodeB ||
- (nodeB !== null && nodeA === nodeB.alternate)
- ) {
- return nodeA
- }
-
- nodeA = getParent(nodeA)
- nodeB = getParent(nodeB)
- }
-
- return null
- }
-
- function accumulateEnterLeaveListenersForEvent(
- dispatchQueue,
- event,
- target,
- common,
- inCapturePhase
- ) {
- var registrationName = event._reactName
- var listeners = []
- var instance = target
-
- while (instance !== null) {
- if (instance === common) {
- break
- }
-
- var _instance4 = instance,
- alternate = _instance4.alternate,
- stateNode = _instance4.stateNode,
- tag = _instance4.tag
-
- if (alternate !== null && alternate === common) {
- break
- }
-
- if (tag === HostComponent && stateNode !== null) {
- var currentTarget = stateNode
-
- if (inCapturePhase) {
- var captureListener = getListener(instance, registrationName)
-
- if (captureListener != null) {
- listeners.unshift(
- createDispatchListener(
- instance,
- captureListener,
- currentTarget
- )
- )
- }
- } else if (!inCapturePhase) {
- var bubbleListener = getListener(instance, registrationName)
-
- if (bubbleListener != null) {
- listeners.push(
- createDispatchListener(
- instance,
- bubbleListener,
- currentTarget
- )
- )
- }
- }
- }
-
- instance = instance.return
- }
-
- if (listeners.length !== 0) {
- dispatchQueue.push({
- event: event,
- listeners: listeners,
- })
- }
- } // We should only use this function for:
- // - EnterLeaveEventPlugin
- // This is because we only process this plugin
- // in the bubble phase, so we need to accumulate two
- // phase event listeners.
-
- function accumulateEnterLeaveTwoPhaseListeners(
- dispatchQueue,
- leaveEvent,
- enterEvent,
- from,
- to
- ) {
- var common = from && to ? getLowestCommonAncestor(from, to) : null
-
- if (from !== null) {
- accumulateEnterLeaveListenersForEvent(
- dispatchQueue,
- leaveEvent,
- from,
- common,
- false
- )
- }
-
- if (to !== null && enterEvent !== null) {
- accumulateEnterLeaveListenersForEvent(
- dispatchQueue,
- enterEvent,
- to,
- common,
- true
- )
- }
- }
- function getListenerSetKey(domEventName, capture) {
- return domEventName + '__' + (capture ? 'capture' : 'bubble')
- }
-
- var didWarnInvalidHydration = false
- var DANGEROUSLY_SET_INNER_HTML = 'dangerouslySetInnerHTML'
- var SUPPRESS_CONTENT_EDITABLE_WARNING = 'suppressContentEditableWarning'
- var SUPPRESS_HYDRATION_WARNING = 'suppressHydrationWarning'
- var AUTOFOCUS = 'autoFocus'
- var CHILDREN = 'children'
- var STYLE = 'style'
- var HTML$1 = '__html'
- var HTML_NAMESPACE$1 = Namespaces.html
- var warnedUnknownTags
- var suppressHydrationWarning
- var validatePropertiesInDevelopment
- var warnForTextDifference
- var warnForPropDifference
- var warnForExtraAttributes
- var warnForInvalidEventListener
- var canDiffStyleForHydrationWarning
- var normalizeMarkupForTextOrAttribute
- var normalizeHTML
-
- {
- warnedUnknownTags = {
- // There are working polyfills for