1 |
|
2 | export const IS_NON_DIMENSIONAL = /acit|ex(?:s|g|n|p|$)|rph|ows|mnc|ntw|ine[ch]|zoo|^ord/i;
|
3 |
|
4 | export const objectKeys = Object.keys || (obj => {
|
5 | let keys = [];
|
6 | for (let i in obj) if (obj.hasOwnProperty(i)) keys.push(i);
|
7 | return keys;
|
8 | });
|
9 |
|
10 | export let encodeEntities = s => String(s)
|
11 | .replace(/&/g, '&')
|
12 | .replace(/</g, '<')
|
13 | .replace(/>/g, '>')
|
14 | .replace(/"/g, '"');
|
15 |
|
16 | export let indent = (s, char) => String(s).replace(/(\n+)/g, '$1' + (char || '\t'));
|
17 |
|
18 | export let isLargeString = (s, length, ignoreLines) => (String(s).length>(length || 40) || (!ignoreLines && String(s).indexOf('\n')!==-1) || String(s).indexOf('<')!==-1);
|
19 |
|
20 | const JS_TO_CSS = {};
|
21 |
|
22 |
|
23 | export function styleObjToCss(s) {
|
24 | let str = '';
|
25 | for (let prop in s) {
|
26 | let val = s[prop];
|
27 | if (val!=null) {
|
28 | if (str) str += ' ';
|
29 |
|
30 | str += JS_TO_CSS[prop] || (JS_TO_CSS[prop] = prop.replace(/([A-Z])/g,'-$1').toLowerCase());
|
31 | str += ': ';
|
32 | str += val;
|
33 | if (typeof val==='number' && IS_NON_DIMENSIONAL.test(prop)===false) {
|
34 | str += 'px';
|
35 | }
|
36 | str += ';';
|
37 | }
|
38 | }
|
39 | return str || undefined;
|
40 | }
|
41 |
|
42 |
|
43 |
|
44 |
|
45 |
|
46 |
|
47 |
|
48 |
|
49 | export function assign(obj, props) {
|
50 | for (let i in props) obj[i] = props[i];
|
51 | return obj;
|
52 | }
|
53 |
|
54 |
|
55 |
|
56 |
|
57 |
|
58 |
|
59 |
|
60 |
|
61 | export function getNodeProps(vnode) {
|
62 | let props = assign({}, vnode.attributes);
|
63 | props.children = vnode.children;
|
64 |
|
65 | let defaultProps = vnode.nodeName.defaultProps;
|
66 | if (defaultProps!==undefined) {
|
67 | for (let i in defaultProps) {
|
68 | if (props[i]===undefined) {
|
69 | props[i] = defaultProps[i];
|
70 | }
|
71 | }
|
72 | }
|
73 |
|
74 | return props;
|
75 | }
|