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