1T5.extendInitializers(function() { 2 3 function init(spec) { 4 5 var element = $(spec.element); 6 7 var hidden = $(spec.element + "-hidden"); 8 var form = $(hidden.form); 9 10 var opts = (spec.bound && { bound: spec.bound }) || {}; 11 if (! spec.alwaysSubmit) { 12 hidden.disabled = ! element.isDeepVisible(opts); 13 } 14 15 function updateUI(makeVisible) { 16 17 if (! spec.alwaysSubmit) { 18 hidden.disabled = ! (makeVisible && element.parentNode.isDeepVisible(opts)); 19 } 20 21 var effect = makeVisible ? Tapestry.ElementEffect[spec.show] 22 || Tapestry.ElementEffect.slidedown 23 : Tapestry.ElementEffect[spec.hide] 24 || Tapestry.ElementEffect.slideup; 25 return effect(element); 26 } 27 28 element.observe(Tapestry.CHANGE_VISIBILITY_EVENT, function(event) { 29 // Since events propagate up, you have to call event.stop() 30 // here to prevent hiding/revealing any container FormFragment elements. 31 event.stop(); 32 33 var makeVisible = event.memo.visible; 34 35 if (makeVisible == element.visible()) 36 return; 37 38 updateUI(makeVisible); 39 }); 40 41 element.observe(Tapestry.HIDE_AND_REMOVE_EVENT, 42 function(event) { 43 event.stop(); 44 var effect = updateUI(false); 45 46 effect.options.afterFinish = function() { 47 Tapestry.remove(element); 48 }; 49 }); 50 } 51 52 /** 53 * Links a FormFragment to a trigger (a radio or a checkbox), such 54 * that changing the trigger will hide or show the FormFragment. 55 * Care should be taken to render the page with the checkbox and the 56 * FormFragment's visibility in agreement. 57 */ 58 function linker(spec) { 59 var trigger = $(spec.triggerId); 60 61 function update() { 62 var checked = trigger.checked; 63 var makeVisible = checked == !spec.invert; 64 65 $(spec.fragmentId).fire(Tapestry.CHANGE_VISIBILITY_EVENT, { 66 visible : makeVisible 67 }, true); 68 } 69 70 // Let the event bubble up to the form level. 71 if (trigger.type == "radio") { 72 $(trigger.form).observe("click", update); 73 return; 74 } 75 76 // Normal trigger is a checkbox; listen just to it. 77 trigger.observe("click", update); 78 } 79 80 return { 81 formFragment : init, 82 linkTriggerToFormFragment : linker 83 }; 84});
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.