diff --git a/.babelrc b/.babelrc
index a2d9279a..3f1f800e 100644
--- a/.babelrc
+++ b/.babelrc
@@ -3,7 +3,7 @@
["env", {
"spec": true,
"useBuiltIns": false
- }], ["stage-0"]
+ }], ["stage-0"], ["es3"]
],
"plugins": [
[
diff --git a/karma.conf.js b/karma.conf.js
index bf7bb224..0fcc6959 100644
--- a/karma.conf.js
+++ b/karma.conf.js
@@ -111,7 +111,6 @@ module.exports = function (config) {
'./node_modules/es5-polyfill/dist/polyfill.js',
'browsers/ie8.js',
'browsers/polyfill.js',
- 'packages/nerv/__tests__/event.spec.js',
'packages/*/__tests__/**/*spec.js?(x)'
],
@@ -171,7 +170,7 @@ module.exports = function (config) {
// Concurrency level
// how many browser should be started simultaneous
- concurrency: 2,
+ concurrency: 1,
webpack: {
devtool: 'inline-source-map',
@@ -205,11 +204,6 @@ module.exports = function (config) {
module: 'commonjs'
}
}
- },
- {
- enforce: 'post',
- test: /.js$/,
- loader: 'es3ify-loader'
}
]
},
diff --git a/package.json b/package.json
index 8f224faf..5f4809a2 100644
--- a/package.json
+++ b/package.json
@@ -109,7 +109,7 @@
"rollup-plugin-uglify": "^2.0.1",
"sinon": "^2.3.8",
"ts-jest": "^21.1.2",
- "ts-loader": "^2.3.4",
+ "ts-loader": "^3.2.0",
"tslint": "^5.7.0",
"typescript": "^2.4.2",
"webpack": "^3.7.1"
diff --git a/packages/nerv/__tests__/event.spec.js b/packages/nerv/__tests__/event.spec.js
index 37f58c31..5114b4f4 100644
--- a/packages/nerv/__tests__/event.spec.js
+++ b/packages/nerv/__tests__/event.spec.js
@@ -201,15 +201,15 @@ describe('Events', () => {
rerender()
scratch.childNodes[0].focus()
await nextTick()
- // @TODO: IMPORTANT
expect(removeEventListenerSpy.called).toBeTruthy()
})
- // @TODO
- it('should change/fix event name', () => {
+ it('should change/fix onchange event name', () => {
const container = document.createElement('div')
document.body.appendChild(container)
const onchange = function () {}
+ const proto = document.constructor.prototype
+ const addEventListenerSpy = sinon.spy(proto, 'addEventListener')
// const ondbclick = function () {}
// const ontouchtap = function () {}
class Outer extends Component {
@@ -217,11 +217,36 @@ describe('Events', () => {
return (
+
)
}
}
const app =
render(app, container)
+ expect(addEventListenerSpy.called).toBe(true)
+ })
+
+ it('should change/fix onDoubleClick/onTouchTap event name', () => {
+ const container = document.createElement('div')
+ document.body.appendChild(container)
+ const proto = document.constructor.prototype
+ const addEventListenerSpy = sinon.spy(proto, 'addEventListener')
+ const ondbclick = function () {}
+ const ontouchtap = function () {}
+ class Outer extends Component {
+ render () {
+ return (
+
+
+
+
+ )
+ }
+ }
+ const app =
+ render(app, container)
+ expect(addEventListenerSpy.called).toBe(true)
+ expect(addEventListenerSpy.callCount).toBe(2)
})
})
diff --git a/packages/nerv/src/hooks/event-hook.ts b/packages/nerv/src/hooks/event-hook.ts
index 31b72e0b..662ef5ea 100644
--- a/packages/nerv/src/hooks/event-hook.ts
+++ b/packages/nerv/src/hooks/event-hook.ts
@@ -232,7 +232,7 @@ function fixEvent (node: Element, eventName: string) {
eventName = 'ondblclick'
} else if (eventName === 'onTouchTap') {
eventName = 'onclick'
- // tslint:disable-next-line:prefer-conditional-expression
+ // tslint:disable-next-line:prefer-conditional-expression
} else if (eventName === 'onChange' && detectCanUseOnInputNode(node)) {
eventName = ONINPUT in window ? ONINPUT : ONPROPERTYCHANGE
} else {
@@ -281,17 +281,22 @@ function attachEventToDocument (d, eventName, delegatedRoots) {
currentTarget: event.target
}
/* istanbul ignore next */
- Object.defineProperties(event, {
- currentTarget: {
- configurable: true,
- get () {
- return eventData.currentTarget
+ try {
+ Object.defineProperties(event, {
+ currentTarget: {
+ configurable: true,
+ get () {
+ return eventData.currentTarget
+ }
+ },
+ stopPropagation: {
+ value: stopPropagation
}
- },
- stopPropagation: {
- value: stopPropagation
- }
- })
+ })
+ } catch (error) {
+ // some browsers crashed
+ // see: https://stackoverflow.com/questions/44052813/why-cannot-redefine-property
+ }
dispatchEvent(event, event.target, delegatedRoots.items, count, eventData)
}
}
diff --git a/packages/nerv/src/vdom/create-element.ts b/packages/nerv/src/vdom/create-element.ts
index 9c1304a9..3ed0ca4c 100644
--- a/packages/nerv/src/vdom/create-element.ts
+++ b/packages/nerv/src/vdom/create-element.ts
@@ -107,10 +107,10 @@ function mountChild (
}
}
-function setProps (domNode: Element, vnode, isSvg) {
+function setProps (domNode: Element, vnode: VNode, isSvg) {
const props = vnode.props
// set type property first for input element
- if ('type' in props && domNode.tagName === 'INPUT') {
+ if ('type' in props && vnode.type === 'input') {
domNode.setAttribute('type', props['type'])
}
for (const p in props) {
diff --git a/yarn.lock b/yarn.lock
index 4c802b2d..426fb830 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -1400,6 +1400,14 @@ chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0:
escape-string-regexp "^1.0.5"
supports-color "^4.0.0"
+chalk@^2.3.0:
+ version "2.3.0"
+ resolved "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz#b5ea48efc9c1793dccc9b4767c93914d3f2d52ba"
+ dependencies:
+ ansi-styles "^3.1.0"
+ escape-string-regexp "^1.0.5"
+ supports-color "^4.0.0"
+
chokidar@^1.4.1, chokidar@^1.7.0:
version "1.7.0"
resolved "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz#798e689778151c8076b4b360e5edd28cda2bb468"
@@ -6547,11 +6555,11 @@ ts-jest@^21.1.2:
source-map-support "^0.5.0"
yargs "^9.0.1"
-ts-loader@^2.3.4:
- version "2.3.4"
- resolved "https://registry.npmjs.org/ts-loader/-/ts-loader-2.3.4.tgz#904f82f6812406f3f073c1c114eea2759e27f80a"
+ts-loader@^3.2.0:
+ version "3.2.0"
+ resolved "https://registry.npmjs.org/ts-loader/-/ts-loader-3.2.0.tgz#23211922179b81f7448754b7fdfca45b8374a15a"
dependencies:
- chalk "^2.0.1"
+ chalk "^2.3.0"
enhanced-resolve "^3.0.0"
loader-utils "^1.0.2"
semver "^5.0.1"