UNPKG

next

Version:

The React Framework

68 lines (66 loc) 2.37 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); Object.defineProperty(exports, "setAttributesFromProps", { enumerable: true, get: function() { return setAttributesFromProps; } }); const DOMAttributeNames = { acceptCharset: 'accept-charset', className: 'class', htmlFor: 'for', httpEquiv: 'http-equiv', noModule: 'noModule' }; const ignoreProps = [ 'onLoad', 'onReady', 'dangerouslySetInnerHTML', 'children', 'onError', 'strategy', 'stylesheets' ]; function isBooleanScriptAttribute(attr) { return [ 'async', 'defer', 'noModule' ].includes(attr); } function setAttributesFromProps(el, props) { for (const [p, value] of Object.entries(props)){ if (!props.hasOwnProperty(p)) continue; if (ignoreProps.includes(p)) continue; // we don't render undefined props to the DOM if (value === undefined) { continue; } const attr = DOMAttributeNames[p] || p.toLowerCase(); if (el.tagName === 'SCRIPT' && isBooleanScriptAttribute(attr)) { // Correctly assign boolean script attributes // https://github.com/vercel/next.js/pull/20748 ; el[attr] = !!value; } else { el.setAttribute(attr, String(value)); } // Remove falsy non-zero boolean attributes so they are correctly interpreted // (e.g. if we set them to false, this coerces to the string "false", which the browser interprets as true) if (value === false || el.tagName === 'SCRIPT' && isBooleanScriptAttribute(attr) && (!value || value === 'false')) { // Call setAttribute before, as we need to set and unset the attribute to override force async: // https://html.spec.whatwg.org/multipage/scripting.html#script-force-async el.setAttribute(attr, ''); el.removeAttribute(attr); } } } if ((typeof exports.default === 'function' || (typeof exports.default === 'object' && exports.default !== null)) && typeof exports.default.__esModule === 'undefined') { Object.defineProperty(exports.default, '__esModule', { value: true }); Object.assign(exports.default, exports); module.exports = exports.default; } //# sourceMappingURL=set-attributes-from-props.js.map