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 <[email protected]> Authored: Sun Nov 11 08:40:53 2012 -0800 Committer: Howard M. Lewis Ship <[email protected]> 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]"
