[38/47] incubator-weex git commit: * [html5] fix trigger click problem.
* [html5] fix trigger click problem. Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/b7fa6b0f Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/b7fa6b0f Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/b7fa6b0f Branch: refs/heads/dev Commit: b7fa6b0ff7af1b4d18823709fe43569cc5b69b9a Parents: 6ec5a50 Author: MrRaindropAuthored: Sat Sep 23 18:51:20 2017 +0800 Committer: MrRaindrop Committed: Sat Sep 23 18:51:20 2017 +0800 -- html5/render/vue/README.md| 4 ++ html5/render/vue/env/event-manager.js | 88 +++--- package.json | 2 +- packages/weex-vue-render/README.md| 4 ++ packages/weex-vue-render/package.json | 2 +- 5 files changed, 55 insertions(+), 45 deletions(-) -- http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/b7fa6b0f/html5/render/vue/README.md -- diff --git a/html5/render/vue/README.md b/html5/render/vue/README.md index 0554334..31646a2 100644 --- a/html5/render/vue/README.md +++ b/html5/render/vue/README.md @@ -172,6 +172,10 @@ vue: { * fix loading & refresh: pulling down wrongly triggered. + 0.12.15 + +* not to prevent default behaviour of click events unless the click-binding element is inside a `` link, or it is a `` link and has a `prevent` attribute on it. + ## component -> dom map | component | dom element | children | note | http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/b7fa6b0f/html5/render/vue/env/event-manager.js -- diff --git a/html5/render/vue/env/event-manager.js b/html5/render/vue/env/event-manager.js index 16057ca..e637b7d 100644 --- a/html5/render/vue/env/event-manager.js +++ b/html5/render/vue/env/event-manager.js @@ -35,6 +35,15 @@ function isANode (el) { return el.tagName.toLowerCase() === 'a' } +function isInANode (el) { + let parent = el.parentElement + while (parent && parent !== document.body) { +if (parent.tagName === 'A') { return true } +parent = parent.parentElement + } + return false +} + /** * get listeners from on config and v-on binding. * v-on binding has a priority over on config. @@ -87,72 +96,65 @@ function _init (doc) { return } let disposed = false - let evtName = e.type - /** - * take full control of redirection of element. - */ - if (evtName === 'click') { -// use '_triggered' to control bubbles event. -e._triggered = { target: vm.$el } -e.preventDefault() -return - } + const evtName = e.type if (evtName === 'tap' && e._for !== 'weex') { return } - else if (evtName === 'tap') { -evtName = 'click' - } while (vm) { const vnode = vm._vnode || vm.$vnode const elm = vm.$el -const ons = getListeners(vnode, evtName) +const ons = getListeners(vnode, evtName === 'tap' ? 'click' : evtName) const len = ons && ons.length if (len > 0) { - for (let i = 0; i < len; i++) { -const handler = ons[i] -const newEvt = evtName === 'click' - ? createEvent(el, evtName) - : e -applyFns(handler.fns, newEvt) + if (evtName !== 'click') { +for (let i = 0; i < len; i++) { + const handler = ons[i] + const newEvt = evtName === 'tap' +? createEvent(el, 'click') +: e + newEvt._triggered = { target: elm } + applyFns(handler.fns, newEvt) +} } - e._triggered = { target: vm.$el } + e._triggered = { target: elm } disposed = true } -/** - * if the handler is binding on a element, should trigger - * the handler first and then jump to href. - * NOTE: if target==='_blank' then do no jumping and leave it - * to users binding handlers for further disposing. - */ -if (evtName === 'click' && isANode(elm)) { +if (isANode(elm) + && (evtName === 'click' || evtName === 'tap')) { const href = elm.getAttribute('href') const voidHrefReg = /^\s*javascript\s*:\s*void\s*(?:\(\s*0\s*\)|0)\s*;?\s*$/ const prevent = elm.getAttribute('prevent') - disposed = true - /** - * Give the chance to the listeners binding on doc or doc.body for - * handling the a-jump. - * Should set a _should_intercept_a_jump function on window to test - * whether we should intercept the
[38/47] incubator-weex git commit: * [html5] fix trigger click problem.
* [html5] fix trigger click problem. Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/b7fa6b0f Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/b7fa6b0f Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/b7fa6b0f Branch: refs/heads/master Commit: b7fa6b0ff7af1b4d18823709fe43569cc5b69b9a Parents: 6ec5a50 Author: MrRaindropAuthored: Sat Sep 23 18:51:20 2017 +0800 Committer: MrRaindrop Committed: Sat Sep 23 18:51:20 2017 +0800 -- html5/render/vue/README.md| 4 ++ html5/render/vue/env/event-manager.js | 88 +++--- package.json | 2 +- packages/weex-vue-render/README.md| 4 ++ packages/weex-vue-render/package.json | 2 +- 5 files changed, 55 insertions(+), 45 deletions(-) -- http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/b7fa6b0f/html5/render/vue/README.md -- diff --git a/html5/render/vue/README.md b/html5/render/vue/README.md index 0554334..31646a2 100644 --- a/html5/render/vue/README.md +++ b/html5/render/vue/README.md @@ -172,6 +172,10 @@ vue: { * fix loading & refresh: pulling down wrongly triggered. + 0.12.15 + +* not to prevent default behaviour of click events unless the click-binding element is inside a `` link, or it is a `` link and has a `prevent` attribute on it. + ## component -> dom map | component | dom element | children | note | http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/b7fa6b0f/html5/render/vue/env/event-manager.js -- diff --git a/html5/render/vue/env/event-manager.js b/html5/render/vue/env/event-manager.js index 16057ca..e637b7d 100644 --- a/html5/render/vue/env/event-manager.js +++ b/html5/render/vue/env/event-manager.js @@ -35,6 +35,15 @@ function isANode (el) { return el.tagName.toLowerCase() === 'a' } +function isInANode (el) { + let parent = el.parentElement + while (parent && parent !== document.body) { +if (parent.tagName === 'A') { return true } +parent = parent.parentElement + } + return false +} + /** * get listeners from on config and v-on binding. * v-on binding has a priority over on config. @@ -87,72 +96,65 @@ function _init (doc) { return } let disposed = false - let evtName = e.type - /** - * take full control of redirection of element. - */ - if (evtName === 'click') { -// use '_triggered' to control bubbles event. -e._triggered = { target: vm.$el } -e.preventDefault() -return - } + const evtName = e.type if (evtName === 'tap' && e._for !== 'weex') { return } - else if (evtName === 'tap') { -evtName = 'click' - } while (vm) { const vnode = vm._vnode || vm.$vnode const elm = vm.$el -const ons = getListeners(vnode, evtName) +const ons = getListeners(vnode, evtName === 'tap' ? 'click' : evtName) const len = ons && ons.length if (len > 0) { - for (let i = 0; i < len; i++) { -const handler = ons[i] -const newEvt = evtName === 'click' - ? createEvent(el, evtName) - : e -applyFns(handler.fns, newEvt) + if (evtName !== 'click') { +for (let i = 0; i < len; i++) { + const handler = ons[i] + const newEvt = evtName === 'tap' +? createEvent(el, 'click') +: e + newEvt._triggered = { target: elm } + applyFns(handler.fns, newEvt) +} } - e._triggered = { target: vm.$el } + e._triggered = { target: elm } disposed = true } -/** - * if the handler is binding on a element, should trigger - * the handler first and then jump to href. - * NOTE: if target==='_blank' then do no jumping and leave it - * to users binding handlers for further disposing. - */ -if (evtName === 'click' && isANode(elm)) { +if (isANode(elm) + && (evtName === 'click' || evtName === 'tap')) { const href = elm.getAttribute('href') const voidHrefReg = /^\s*javascript\s*:\s*void\s*(?:\(\s*0\s*\)|0)\s*;?\s*$/ const prevent = elm.getAttribute('prevent') - disposed = true - /** - * Give the chance to the listeners binding on doc or doc.body for - * handling the a-jump. - * Should set a _should_intercept_a_jump function on window to test - * whether we should intercept the