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/11/11 21:11:19 UTC

[5/9] git commit: Get basic parse/format working

Get basic parse/format working


Project: http://git-wip-us.apache.org/repos/asf/tapestry-5/repo
Commit: http://git-wip-us.apache.org/repos/asf/tapestry-5/commit/69a2edd1
Tree: http://git-wip-us.apache.org/repos/asf/tapestry-5/tree/69a2edd1
Diff: http://git-wip-us.apache.org/repos/asf/tapestry-5/diff/69a2edd1

Branch: refs/heads/5.4-js-rewrite
Commit: 69a2edd1d50e1d386574fc60710e34a3178cc5c9
Parents: 4150051
Author: Howard M. Lewis Ship <hl...@apache.org>
Authored: Sun Nov 11 08:40:53 2012 -0800
Committer: Howard M. Lewis Ship <hl...@apache.org>
Committed: Sun Nov 11 08:40:53 2012 -0800

----------------------------------------------------------------------
 .../META-INF/modules/core/datefield.coffee         |   69 +++++++++++++--
 1 files changed, 61 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/69a2edd1/tapestry-core/src/main/coffeescript/META-INF/modules/core/datefield.coffee
----------------------------------------------------------------------
diff --git a/tapestry-core/src/main/coffeescript/META-INF/modules/core/datefield.coffee b/tapestry-core/src/main/coffeescript/META-INF/modules/core/datefield.coffee
index 464817b..33cd0aa 100644
--- a/tapestry-core/src/main/coffeescript/META-INF/modules/core/datefield.coffee
+++ b/tapestry-core/src/main/coffeescript/META-INF/modules/core/datefield.coffee
@@ -15,8 +15,9 @@
 # ##core/datefield
 #
 # Provides support for the `core/DateField` component.
-define ["core/dom", "core/events", "core/messages", "core/builder", "_"],
-  (dom, events, messages, builder, _) ->
+define ["core/dom", "core/events", "core/messages", "core/builder", "core/ajax",
+  "core/alert", "_"],
+  (dom, events, messages, builder, ajax, alert, _) ->
 
     # Translate from the provided order (SUNDAY = 0, MONDAY = 1), to
     # the order needed by the DatePicker component (MONDAY = 0 ... SUNDAY = 6)
@@ -42,12 +43,43 @@ define ["core/dom", "core/events", "core/messages", "core/builder", "_"],
 
         unless @popup
           @createPopup()
+        else if @popup.visible()
+          @popup.hide()
           return
 
-        if @popup.visible()
-          @popup.hide()
-        else
+        value = @field.value()
+
+        if value is ""
+          @datePicker.setDate null
           @popup.show()
+          return
+
+        @field.addClass "ajax-wait"
+
+        ajax (@container.attribute "data-parse-url"),
+          parameters:
+            input: value
+          onerror: =>
+            @field.removeClass "ajax-wait"
+            @field.focus()
+
+          onsuccess: (response) =>
+            @field.removeClass "ajax-wait"
+            reply = response.responseJSON
+
+            if reply.result
+              date = new Date()
+              date.setTime reply.result
+              @datePicker.setDate date
+              @popup.show()
+              return
+
+            @field.focus()
+
+            @fieldError reply.error
+
+      fieldError: (message) ->
+        alert { message }
 
       createPopup: ->
         @datePicker = new DatePicker()
@@ -55,10 +87,31 @@ define ["core/dom", "core/events", "core/messages", "core/builder", "_"],
         @popup.append dom @datePicker.create()
         @trigger.insertAfter @popup
 
-      # @popup.absolutize().hide()
+        @datePicker.onselect = _.bind @onSelect, this
+
+      onSelect: ->
+        @field.addClass "t-ajax-wait"
+
+        date = @datePicker.getDate()
+
+        if date is null
+          @popup.hide()
+          @field.value ""
+          return
+
+        ajax (@container.attribute "data-format-url"),
+          parameters:
+            input: date.getTime()
+          onerror: (message) =>
+            @field.removeClass "t-ajax-wait"
+            @fieldError message
+            @popup.hide()
+          onsuccess: (response) =>
+            @field.removeClass "t-ajax-wait"
+            @field.value response.responseJSON.result
+            @popup.hide()
+
 
-      positionPopup: ->
-        reference = @container.findFirst "input[type=text], button"
 
     scan = (root) ->
       for container in root.find "[data-component-type=core/DateField]"