Get the trigger working to create and show/hide the DatePicker

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

Branch: refs/heads/5.4-js-rewrite
Commit: 415005104e1b20f644675fd3b54235abd30c1249
Parents: f3fdf52
Author: Howard M. Lewis Ship <[email protected]>
Authored: Sun Nov 11 08:08:48 2012 -0800
Committer: Howard M. Lewis Ship <[email protected]>
Committed: Sun Nov 11 08:08:48 2012 -0800

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


http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/41500510/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 a69c43e..464817b 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,65 @@
 # ##core/datefield
 #
 # Provides support for the `core/DateField` component.
-define ["core/dom", "core/events"],
-  (dom, events) ->
+define ["core/dom", "core/events", "core/messages", "core/builder", "_"],
+  (dom, events, messages, builder, _) ->
+
+    # Translate from the provided order (SUNDAY = 0, MONDAY = 1), to
+    # the order needed by the DatePicker component (MONDAY = 0 ... SUNDAY = 6)
+    serverFirstDay = parseInt messages "date-symbols.first-day"
+    datePickerFirstDay = if serverFirstDay is 0 then 6 else serverFirstDay - 1
+
+    # Loalize a few other things.
+    DatePicker.months = (messages "date-symbols.months").split ","
+    days = (messages "date-symbols.days").split ","
+    DatePicker.days = _.map days, (name) -> name.substr(0, 1).toLowerCase()
+
+    class Controller
+      constructor: (@container) ->
+        @field = @container.findFirst "input"
+        @trigger = @container.findFirst "button"
+
+        @trigger.on "click", =>
+          @doTogglePopup()
+          false
+
+      doTogglePopup: ->
+        return if @field.element.disabled
+
+        unless @popup
+          @createPopup()
+          return
+
+        if @popup.visible()
+          @popup.hide()
+        else
+          @popup.show()
+
+      createPopup: ->
+        @datePicker = new DatePicker()
+        @popup = builder "div.t-datefield-popup"
+        @popup.append dom @datePicker.create()
+        @trigger.insertAfter @popup
+
+      # @popup.absolutize().hide()
+
+      positionPopup: ->
+        reference = @container.findFirst "input[type=text], button"
+
+    scan = (root) ->
+      for container in root.find "[data-component-type=core/DateField]"
+        # Hide it from later scans
+        container.attribute "data-component-type", null
+
+        new Controller(container)
+
+    # Initialization:
+
+    scan dom.body()
+
+    # And scan any newly added content:
+
+    dom.onDocument events.zone.didUpdate, -> scan this
 
     # Exports nothing.
     return null
\ No newline at end of file

Reply via email to