Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 | 18x 18x 18x 18x 46x 46x 46x 13x 46x 13x 23x 23x 23x 9x 9x 9x 9x 2x 2x 3x | /** * Copyright (c) Nicolas Gallagher. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * * @noflow */ import getBoundingClientRect from '../../modules/getBoundingClientRect'; import setValueForStyles from '../../modules/setValueForStyles'; const getRect = (node) => { // Unlike the DOM's getBoundingClientRect, React Native layout measurements // for "height" and "width" ignore scale transforms. // https://developer.mozilla.org/en-US/docs/Web/API/CSS_Object_Model/Determining_the_dimensions_of_elements const { x, y, top, left } = getBoundingClientRect(node); const width = node.offsetWidth; const height = node.offsetHeight; return { x, y, width, height, top, left }; }; const measureLayout = (node, relativeToNativeNode, callback) => { const relativeNode = relativeToNativeNode || (node && node.parentNode); if (node && relativeNode) { setTimeout(() => { const relativeRect = getBoundingClientRect(relativeNode); const { height, left, top, width } = getRect(node); const x = left - relativeRect.left; const y = top - relativeRect.top; callback(x, y, width, height, left, top); }, 0); } }; const focusableElements = { A: true, INPUT: true, SELECT: true, TEXTAREA: true }; const UIManager = { blur(node) { try { node.blur(); } catch (err) {} }, focus(node) { try { const name = node.nodeName; // A tabIndex of -1 allows element to be programmatically focused but // prevents keyboard focus, so we don't want to set the value on elements // that support keyboard focus by default. if (node.getAttribute('tabIndex') == null && focusableElements[name] == null) { node.setAttribute('tabIndex', '-1'); } node.focus(); } catch (err) {} }, measure(node, callback) { measureLayout(node, null, callback); }, measureInWindow(node, callback) { if (node) { setTimeout(() => { const { height, left, top, width } = getRect(node); callback(left, top, width, height); }, 0); } }, measureLayout(node, relativeToNativeNode, onFail, onSuccess) { measureLayout(node, relativeToNativeNode, onSuccess); }, updateView(node, props) { for (const prop in props) { Iif (!Object.prototype.hasOwnProperty.call(props, prop)) { continue; } const value = props[prop]; switch (prop) { case 'style': { setValueForStyles(node, value); break; } case 'class': case 'className': { node.setAttribute('class', value); break; } case 'text': case 'value': // native platforms use `text` prop to replace text input value node.value = value; break; default: node.setAttribute(prop, value); } } }, configureNextLayoutAnimation(config, onAnimationDidEnd) { onAnimationDidEnd(); }, // mocks setLayoutAnimationEnabledExperimental() {} }; export default UIManager; |