form-fragment.coffee | |
---|---|
Copyright 2012, 2013 The Apache Software Foundation Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at
Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. | |
t5/core/form-fragment | define ["underscore", "./dom", "./events", "./forms"],
(_, dom, events) ->
SELECTOR = "[data-component-type='core/FormFragment']" |
When any form fires the prepareForSubmit event, check to see if any form fragments are contained within, and give them a chance to enabled/disable their hidden field. | dom.onDocument events.form.prepareForSubmit, "form", (event) ->
fragments = @find SELECTOR
_.each fragments, (frag) ->
fragmentId = frag.attr "id"
hidden = frag.findFirst "input[type=hidden][data-for-fragment='#{fragmentId}']" |
If found (e.g., not alwaysSubmit), then enable/disable the field. | hidden && hidden.attr "disabled", not frag.deepVisible() |
Again, a DOM event to make the FormFragment visible or invisible; this is useful because of the didShow/didHide events ... but we're really just seeing the evolution from the old style (the FormFragment class as controller) to the new style (DOM events and top-level event handlers). | dom.onDocument events.formfragment.changeVisibility, SELECTOR, (event) ->
makeVisible = event.memo.visible
this[if makeVisible then "show" else "hide"]()
@trigger events.element[if makeVisible then "didShow" else "didHide"]
return false |
Initializes a trigger for a FormFragment
| linkTrigger = (spec) ->
trigger = dom spec.triggerId
invert = spec.invert or false
update = ->
checked = trigger.element.checked
makeVisible = checked isnt invert
(dom spec.fragmentId).trigger events.formfragment.changeVisibility, visible: makeVisible
return
if trigger.element.type is "radio"
dom.on trigger.element.form, "click", update
else
trigger.on "click", update |
Module exports: | { linkTrigger }
|