You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tapestry.apache.org by hl...@apache.org on 2012/12/05 23:01:40 UTC
[1/3] git commit: Convert core/dom:ElementWrapper.trigger() to return
flag indicating if event completed or was canceled Modify LinkSubmit support
to trigger a "submit" event on the Form,
then submit() the form if event was not canceled, mimicing the def
Updated Branches:
refs/heads/5.4-js-rewrite 455bf0f80 -> f229bfa16
Convert core/dom:ElementWrapper.trigger() to return flag indicating if event completed or was canceled
Modify LinkSubmit support to trigger a "submit" event on the Form, then submit() the form if event was not canceled, mimicing the default form submit behavior
- form.submit() does not fire the "submit" event
Project: http://git-wip-us.apache.org/repos/asf/tapestry-5/repo
Commit: http://git-wip-us.apache.org/repos/asf/tapestry-5/commit/f229bfa1
Tree: http://git-wip-us.apache.org/repos/asf/tapestry-5/tree/f229bfa1
Diff: http://git-wip-us.apache.org/repos/asf/tapestry-5/diff/f229bfa1
Branch: refs/heads/5.4-js-rewrite
Commit: f229bfa16cb294f233f1e3d9faca5eae311b2a49
Parents: d9bfb84
Author: Howard M. Lewis Ship <hl...@apache.org>
Authored: Wed Dec 5 14:01:31 2012 -0800
Committer: Howard M. Lewis Ship <hl...@apache.org>
Committed: Wed Dec 5 14:01:31 2012 -0800
----------------------------------------------------------------------
.../coffeescript/META-INF/modules/core/dom.coffee | 28 ++++++++------
.../META-INF/modules/core/forms.coffee | 6 +++-
2 files changed, 21 insertions(+), 13 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/f229bfa1/tapestry-core/src/main/coffeescript/META-INF/modules/core/dom.coffee
----------------------------------------------------------------------
diff --git a/tapestry-core/src/main/coffeescript/META-INF/modules/core/dom.coffee b/tapestry-core/src/main/coffeescript/META-INF/modules/core/dom.coffee
index 87309da..812825c 100644
--- a/tapestry-core/src/main/coffeescript/META-INF/modules/core/dom.coffee
+++ b/tapestry-core/src/main/coffeescript/META-INF/modules/core/dom.coffee
@@ -36,16 +36,18 @@ define ["_", "core/utils", "prototype"], (_, utils) ->
$ = window.$
# Fires a native event; something that Prototype does not normally do.
+ # Returns true if the event completed normally, false if it was canceled.
fireNativeEvent = (element, eventName) ->
if document.createEventObject
# IE support:
event = document.createEventObject()
- element.fireEvent "on#{eventName}", event
- else
- # Everyone else:
- event = document.createEvent "HTMLEvents"
- event.initEvent eventName, true, true
- element.dispatchEvent event
+ return element.fireEvent "on#{eventName}", event
+
+ # Everyone else:
+ event = document.createEvent "HTMLEvents"
+ event.initEvent eventName, true, true
+ element.dispatchEvent event
+ return not event.defaultPrevented
# Converts content (provided to `ElementWrapper.update()` or `append()`) into an appropriate type. This
# primarily exists to validate the value, and to "unpack" an ElementWrapper into a DOM element.
@@ -339,6 +341,8 @@ define ["_", "core/utils", "prototype"], (_, utils) ->
# * memo - optional value assocated with the event; available as WrappedeEvent.memo in event handler functions (must
# be null for native events). The memo, when provided, should be an object; it is an error if it is a string or other
# non-object type..
+ #
+ # Returns true if the event fully executed, or false if the event was canceled.
trigger: (eventName, memo) ->
throw new Error "Attempt to trigger event with null event name" unless eventName?
@@ -347,14 +351,14 @@ define ["_", "core/utils", "prototype"], (_, utils) ->
if (eventName.indexOf ':') > 0
# Custom event is supported directly by Prototype:
- @element.fire eventName, memo
- else
- # Native events take some extra work:
- throw new Error "Memo must be null when triggering a native event" if memo
+ event = @element.fire eventName, memo
+ return not event.defaultPrevented
- fireNativeEvent @element, eventName
+ # Native events take some extra work:
+ if memo
+ throw new Error "Memo must be null when triggering a native event"
- return this
+ fireNativeEvent @element, eventName
# With no parameters, returns the current value of the element (which must be a form control element, such as `<input>` or
# `<textarea>`). With one parameter, updates the field's value, and returns the previous value. The underlying
http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/f229bfa1/tapestry-core/src/main/coffeescript/META-INF/modules/core/forms.coffee
----------------------------------------------------------------------
diff --git a/tapestry-core/src/main/coffeescript/META-INF/modules/core/forms.coffee b/tapestry-core/src/main/coffeescript/META-INF/modules/core/forms.coffee
index 5b290a0..934d390 100644
--- a/tapestry-core/src/main/coffeescript/META-INF/modules/core/forms.coffee
+++ b/tapestry-core/src/main/coffeescript/META-INF/modules/core/forms.coffee
@@ -147,7 +147,11 @@ define ["core/events", "core/dom", "core/builder", "_"],
setSubmittingHidden form, this
- form.element.submit()
+ # Now the ugly part; if we just invoke submit() on the form, it does not trigger
+ # the form's "submit" event, which we need.
+
+ if form.trigger "submit"
+ form.submit()
# And cancel the default behavior for the original click event
return false