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"