omi v6.8.0
* New syntax, prop supports reading prop from data centers(Omi.$)
This commit is contained in:
parent
2bc0aeb8c4
commit
230a0a2b77
|
@ -203,6 +203,9 @@ declare namespace Omi {
|
|||
event?: (event: Event) => Event;
|
||||
};
|
||||
|
||||
//props data center
|
||||
var $: object
|
||||
|
||||
var elements: object
|
||||
}
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/**
|
||||
* omi v6.7.1 http://omijs.org
|
||||
* omi v6.8.0 http://omijs.org
|
||||
* Omi === Preact + Scoped CSS + Store System + Native Support in 3kb javascript.
|
||||
* By dntzhang https://github.com/dntzhang
|
||||
* Github: https://github.com/Tencent/omi
|
||||
|
@ -203,6 +203,14 @@
|
|||
return str.replace(hyphenateRE, '-$1').toLowerCase();
|
||||
}
|
||||
|
||||
function getValByPath(path, current) {
|
||||
var arr = path.replace(/]/g, '').replace(/\[/g, '.').split('.');
|
||||
arr.forEach(function (prop) {
|
||||
current = current[prop];
|
||||
});
|
||||
return current;
|
||||
}
|
||||
|
||||
// DOM properties that should NOT have "px" added when numeric
|
||||
var IS_NON_DIMENSIONAL = /acit|ex(?:s|g|n|p|$)|rph|ows|mnc|ntw|ine[ch]|zoo|^ord/i;
|
||||
|
||||
|
@ -1455,7 +1463,11 @@
|
|||
break;
|
||||
case Array:
|
||||
case Object:
|
||||
ele.props[key] = JSON.parse(val.replace(/(['"])?([a-zA-Z0-9_-]+)(['"])?:([^\/])/g, '"$2":$4').replace(/'([\s\S]*?)'/g, '"$1"').replace(/,(\s*})/g, '$1'));
|
||||
if (val[0] === ':') {
|
||||
ele.props[key] = getValByPath(val.substr(1), Omi.$);
|
||||
} else {
|
||||
ele.props[key] = JSON.parse(val.replace(/(['"])?([a-zA-Z0-9_-]+)(['"])?:([^\/])/g, '"$2":$4').replace(/'([\s\S]*?)'/g, '"$1"').replace(/,(\s*})/g, '$1'));
|
||||
}
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
|
@ -1772,6 +1784,7 @@
|
|||
return {};
|
||||
}
|
||||
|
||||
var $ = {};
|
||||
var Component = WeElement;
|
||||
var defineElement = define;
|
||||
var elements = options.mapping;
|
||||
|
@ -1799,12 +1812,13 @@
|
|||
html: html,
|
||||
htm: htm,
|
||||
o: o,
|
||||
elements: elements
|
||||
elements: elements,
|
||||
$: $
|
||||
};
|
||||
|
||||
options.root.Omi = omi;
|
||||
options.root.omi = omi;
|
||||
options.root.Omi.version = '6.7.1';
|
||||
options.root.Omi.version = '6.8.0';
|
||||
|
||||
if (typeof module != 'undefined') module.exports = omi;else self.Omi = omi;
|
||||
}());
|
||||
|
|
File diff suppressed because one or more lines are too long
|
@ -1,5 +1,5 @@
|
|||
/**
|
||||
* omi v6.7.1 http://omijs.org
|
||||
* omi v6.8.0 http://omijs.org
|
||||
* Omi === Preact + Scoped CSS + Store System + Native Support in 3kb javascript.
|
||||
* By dntzhang https://github.com/dntzhang
|
||||
* Github: https://github.com/Tencent/omi
|
||||
|
@ -200,6 +200,14 @@ function hyphenate(str) {
|
|||
return str.replace(hyphenateRE, '-$1').toLowerCase();
|
||||
}
|
||||
|
||||
function getValByPath(path, current) {
|
||||
var arr = path.replace(/]/g, '').replace(/\[/g, '.').split('.');
|
||||
arr.forEach(function (prop) {
|
||||
current = current[prop];
|
||||
});
|
||||
return current;
|
||||
}
|
||||
|
||||
// DOM properties that should NOT have "px" added when numeric
|
||||
var IS_NON_DIMENSIONAL = /acit|ex(?:s|g|n|p|$)|rph|ows|mnc|ntw|ine[ch]|zoo|^ord/i;
|
||||
|
||||
|
@ -1452,7 +1460,11 @@ var WeElement = function (_HTMLElement) {
|
|||
break;
|
||||
case Array:
|
||||
case Object:
|
||||
ele.props[key] = JSON.parse(val.replace(/(['"])?([a-zA-Z0-9_-]+)(['"])?:([^\/])/g, '"$2":$4').replace(/'([\s\S]*?)'/g, '"$1"').replace(/,(\s*})/g, '$1'));
|
||||
if (val[0] === ':') {
|
||||
ele.props[key] = getValByPath(val.substr(1), Omi.$);
|
||||
} else {
|
||||
ele.props[key] = JSON.parse(val.replace(/(['"])?([a-zA-Z0-9_-]+)(['"])?:([^\/])/g, '"$2":$4').replace(/'([\s\S]*?)'/g, '"$1"').replace(/,(\s*})/g, '$1'));
|
||||
}
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
|
@ -1769,6 +1781,7 @@ function createRef() {
|
|||
return {};
|
||||
}
|
||||
|
||||
var $ = {};
|
||||
var Component = WeElement;
|
||||
var defineElement = define;
|
||||
var elements = options.mapping;
|
||||
|
@ -1796,13 +1809,14 @@ var omi = {
|
|||
html: html,
|
||||
htm: htm,
|
||||
o: o,
|
||||
elements: elements
|
||||
elements: elements,
|
||||
$: $
|
||||
};
|
||||
|
||||
options.root.Omi = omi;
|
||||
options.root.omi = omi;
|
||||
options.root.Omi.version = '6.7.1';
|
||||
options.root.Omi.version = '6.8.0';
|
||||
|
||||
export default omi;
|
||||
export { tag, WeElement, Component, render, h, h as createElement, options, define, observe, cloneElement, getHost, rpx, tick, nextTick, ModelView, defineElement, classNames, extractClass, createRef, html, htm, o, elements };
|
||||
export { tag, WeElement, Component, render, h, h as createElement, options, define, observe, cloneElement, getHost, rpx, tick, nextTick, ModelView, defineElement, classNames, extractClass, createRef, html, htm, o, elements, $ };
|
||||
//# sourceMappingURL=omi.esm.js.map
|
||||
|
|
File diff suppressed because one or more lines are too long
|
@ -84,6 +84,13 @@
|
|||
function hyphenate(str) {
|
||||
return str.replace(hyphenateRE, '-$1').toLowerCase();
|
||||
}
|
||||
function getValByPath(path, current) {
|
||||
var arr = path.replace(/]/g, '').replace(/\[/g, '.').split('.');
|
||||
arr.forEach(function(prop) {
|
||||
current = current[prop];
|
||||
});
|
||||
return current;
|
||||
}
|
||||
function isSameNodeType(node, vnode, hydrating) {
|
||||
if ('string' == typeof vnode || 'number' == typeof vnode) return void 0 !== node.splitText;
|
||||
if ('string' == typeof vnode.nodeName) return !node._componentConstructor && isNamedNode(node, vnode.nodeName); else if ('function' == typeof vnode.nodeName) return options.mapping[node.nodeName.toLowerCase()] === vnode.nodeName;
|
||||
|
@ -984,7 +991,7 @@
|
|||
|
||||
case Array:
|
||||
case Object:
|
||||
ele.props[key] = JSON.parse(val.replace(/(['"])?([a-zA-Z0-9_-]+)(['"])?:([^\/])/g, '"$2":$4').replace(/'([\s\S]*?)'/g, '"$1"').replace(/,(\s*})/g, '$1'));
|
||||
if (':' === val[0]) ele.props[key] = getValByPath(val.substr(1), Omi.$); else ele.props[key] = JSON.parse(val.replace(/(['"])?([a-zA-Z0-9_-]+)(['"])?:([^\/])/g, '"$2":$4').replace(/'([\s\S]*?)'/g, '"$1"').replace(/,(\s*})/g, '$1'));
|
||||
} else if (ele.constructor.defaultProps && ele.constructor.defaultProps.hasOwnProperty(key)) ele.props[key] = ele.constructor.defaultProps[key]; else ele.props[key] = null;
|
||||
});
|
||||
}
|
||||
|
@ -1052,6 +1059,7 @@
|
|||
return u[r] || (u[r] = t(n));
|
||||
};
|
||||
var html = htm.bind(h);
|
||||
var $ = {};
|
||||
var Component = WeElement;
|
||||
var defineElement = define;
|
||||
var elements = options.mapping;
|
||||
|
@ -1078,11 +1086,12 @@
|
|||
html: html,
|
||||
htm: htm,
|
||||
o: o,
|
||||
elements: elements
|
||||
elements: elements,
|
||||
$: $
|
||||
};
|
||||
options.root.Omi = omi;
|
||||
options.root.omi = omi;
|
||||
options.root.Omi.version = '6.7.1';
|
||||
options.root.Omi.version = '6.8.0';
|
||||
if ('undefined' != typeof module) module.exports = omi; else self.Omi = omi;
|
||||
}();
|
||||
//# sourceMappingURL=omi.js.map
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
|
@ -0,0 +1,14 @@
|
|||
<html>
|
||||
|
||||
<head></head>
|
||||
|
||||
<body>
|
||||
|
||||
<script src="b.js"></script>
|
||||
<script>
|
||||
Omi.$.user = { name: 'dntzhang', age: 18 }
|
||||
</script>
|
||||
<my-component user=":user" />
|
||||
</body>
|
||||
|
||||
</html>
|
|
@ -0,0 +1,13 @@
|
|||
import { define, render, WeElement } from '../../src/omi'
|
||||
|
||||
define('my-component', class extends WeElement {
|
||||
static propTypes = {
|
||||
user: Object
|
||||
}
|
||||
|
||||
render(props) {
|
||||
return (
|
||||
<div>name: {props.user.name}, age: {props.user.age}</div>
|
||||
)
|
||||
}
|
||||
})
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "omi",
|
||||
"version": "6.7.1",
|
||||
"version": "6.8.0",
|
||||
"description": "Front End Cross-Frameworks Framework.",
|
||||
"main": "dist/omi.js",
|
||||
"jsnext:main": "dist/omi.esm.js",
|
||||
|
|
|
@ -203,6 +203,9 @@ declare namespace Omi {
|
|||
event?: (event: Event) => Event;
|
||||
};
|
||||
|
||||
//props data center
|
||||
var $: object
|
||||
|
||||
var elements: object
|
||||
}
|
||||
|
||||
|
|
|
@ -20,6 +20,7 @@ function createRef() {
|
|||
return {}
|
||||
}
|
||||
|
||||
const $ = {}
|
||||
const Component = WeElement
|
||||
const defineElement = define
|
||||
const elements = options.mapping
|
||||
|
@ -47,12 +48,13 @@ const omi = {
|
|||
html,
|
||||
htm,
|
||||
o,
|
||||
elements
|
||||
elements,
|
||||
$
|
||||
}
|
||||
|
||||
options.root.Omi = omi
|
||||
options.root.omi = omi
|
||||
options.root.Omi.version = '6.7.1'
|
||||
options.root.Omi.version = '6.8.0'
|
||||
|
||||
export default omi
|
||||
|
||||
|
@ -79,5 +81,6 @@ export {
|
|||
html,
|
||||
htm,
|
||||
o,
|
||||
elements
|
||||
elements,
|
||||
$
|
||||
}
|
||||
|
|
|
@ -129,4 +129,12 @@ export function getTargetByPath(origin, path) {
|
|||
const hyphenateRE = /\B([A-Z])/g
|
||||
export function hyphenate(str) {
|
||||
return str.replace(hyphenateRE, '-$1').toLowerCase()
|
||||
}
|
||||
}
|
||||
|
||||
export function getValByPath(path, current) {
|
||||
const arr = path.replace(/]/g, '').replace(/\[/g, '.').split('.')
|
||||
arr.forEach(prop => {
|
||||
current = current[prop]
|
||||
})
|
||||
return current
|
||||
}
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
import { cssToDom, nProps, isArray, getUse, hyphenate } from './util'
|
||||
import { cssToDom, nProps, isArray, getUse, hyphenate, getValByPath } from './util'
|
||||
import { diff } from './vdom/diff'
|
||||
import options from './options'
|
||||
import { proxyUpdate } from './observe'
|
||||
|
@ -161,13 +161,13 @@ export default class WeElement extends HTMLElement {
|
|||
|
||||
attrsToProps(ignoreAttrs) {
|
||||
const ele = this
|
||||
if (ele.normalizedNodeName || ignoreAttrs) return
|
||||
if (ele.normalizedNodeName || ignoreAttrs) return
|
||||
ele.props['css'] = ele.getAttribute('css')
|
||||
const attrs = this.constructor.propTypes
|
||||
const attrs = this.constructor.propTypes
|
||||
if(!attrs) return
|
||||
Object.keys(attrs).forEach(key => {
|
||||
const type = attrs[key]
|
||||
const val = ele.getAttribute(hyphenate(key))
|
||||
const val = ele.getAttribute(hyphenate(key))
|
||||
if (val !== null) {
|
||||
switch (type) {
|
||||
case String:
|
||||
|
@ -185,11 +185,15 @@ export default class WeElement extends HTMLElement {
|
|||
break
|
||||
case Array:
|
||||
case Object:
|
||||
ele.props[key] = JSON.parse(val
|
||||
.replace(/(['"])?([a-zA-Z0-9_-]+)(['"])?:([^\/])/g, '"$2":$4')
|
||||
.replace(/'([\s\S]*?)'/g, '"$1"')
|
||||
.replace(/,(\s*})/g, '$1')
|
||||
)
|
||||
if (val[0] === ':') {
|
||||
ele.props[key] = getValByPath(val.substr(1), Omi.$)
|
||||
} else {
|
||||
ele.props[key] = JSON.parse(val
|
||||
.replace(/(['"])?([a-zA-Z0-9_-]+)(['"])?:([^\/])/g, '"$2":$4')
|
||||
.replace(/'([\s\S]*?)'/g, '"$1"')
|
||||
.replace(/,(\s*})/g, '$1')
|
||||
)
|
||||
}
|
||||
break
|
||||
}
|
||||
} else {
|
||||
|
|
|
@ -0,0 +1,77 @@
|
|||
import {
|
||||
define,
|
||||
render,
|
||||
WeElement,
|
||||
cloneElement,
|
||||
createRef,
|
||||
getHost
|
||||
} from '../../src/omi'
|
||||
|
||||
import {
|
||||
getValByPath
|
||||
} from '../../src/util'
|
||||
|
||||
describe('$ props data center', () => {
|
||||
let scratch
|
||||
//const Empty = () => null
|
||||
|
||||
before(() => {
|
||||
scratch = document.createElement('div')
|
||||
; (document.body || document.documentElement).appendChild(scratch)
|
||||
})
|
||||
|
||||
beforeEach(() => {
|
||||
//let c = scratch.firstElementChild;
|
||||
//if (c) render(<Empty />, scratch, { merge: c })
|
||||
scratch.innerHTML = ''
|
||||
})
|
||||
|
||||
after(() => {
|
||||
scratch.parentNode.removeChild(scratch)
|
||||
scratch = null
|
||||
})
|
||||
|
||||
it('simple test', () => {
|
||||
|
||||
var Omi = { $: { user: { name: 'dnt', age: 18 } } }
|
||||
expect(getValByPath('user', Omi.$)).to.deep.equal({ name: "dnt", age: 18 })
|
||||
expect(getValByPath('user.age', Omi.$)).to.deep.equal(18)
|
||||
|
||||
})
|
||||
|
||||
it('array test', () => {
|
||||
|
||||
var Omi = { $: { user: { name: 'dnt', age: 18, list: [{ a: 1 }, { b: 2 }] } } }
|
||||
expect(getValByPath('user.list[1].b', Omi.$)).to.deep.equal(2)
|
||||
|
||||
})
|
||||
|
||||
|
||||
it('render test', () => {
|
||||
|
||||
|
||||
define('my-component', class extends WeElement {
|
||||
static propTypes = {
|
||||
user: Object
|
||||
}
|
||||
|
||||
render(props) {
|
||||
return (
|
||||
<div>name: {props.user.name}, age: {props.user.age}</div>
|
||||
)
|
||||
}
|
||||
})
|
||||
|
||||
Omi.$.user = { name: 'dntzhang', age: 18 }
|
||||
scratch.innerHTML = `
|
||||
<my-component user=":user" />
|
||||
`
|
||||
|
||||
|
||||
expect(document.querySelector('my-component').shadowRoot.innerHTML).to.deep.equal('<div>name: dntzhang, age: 18</div>')
|
||||
|
||||
})
|
||||
|
||||
|
||||
|
||||
})
|
Loading…
Reference in New Issue