UNPKG

hm-react-cli

Version:

Create a Huimei React project by module

87 lines (80 loc) 2.13 kB
import { createMarkupForStyles } from './style'; import { encodeEntities } from './encode'; const STYLE = 'style'; const RESERVED_PROPS = { children: null, key: null, ref: null, dangerouslySetInnerHTML: null, innerHTML: null }; function skipFalseAndFunction(a) { return a !== false && Object(a) !== a; } const rXlink = /^xlink:?(.+)/; var attrCached = {}; function encodeAttributes(value) { if (attrCached[value]) { return attrCached[value]; } return (attrCached[value] = '"' + encodeEntities(value) + '"'); } function stringifyClassName(obj) { var arr = []; for (var i in obj) { if (obj[i]) { arr.push(i); } } return arr.join(' '); } export function createOpenTagMarkup( tagVerbatim, tagLowercase, props, namespace, makeStaticMarkup, isRootElement ) { let ret = '<' + tagVerbatim; for (let name in props) { if (!props.hasOwnProperty(name)) { continue; } if (RESERVED_PROPS[name]) { continue; } let v = props[name], checkType = false; if (name === 'class' || name === 'className') { name = 'class'; if (v && typeof v === 'object') { v = stringifyClassName(v); checkType = true; } } else if (name === STYLE) { v = createMarkupForStyles(v); checkType = true; } if (name.match(rXlink)) { name = name.toLowerCase().replace(rXlink, 'xlink:$1'); } if (checkType || skipFalseAndFunction(v)) { ret += ' ' + name + '=' + encodeAttributes(v + ''); } } // For static pages, no need to put React ID and checksum. Saves lots of // bytes. if (makeStaticMarkup) { return ret; } if (isRootElement) { ret += ' ' + createMarkupForRoot(); } return ret; } export const ID_ATTRIBUTE_NAME = 'data-reactid'; export const ROOT_ATTRIBUTE_NAME = 'data-reactroot'; function createMarkupForRoot() { return ROOT_ATTRIBUTE_NAME + '=""'; }