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
