Skip to content

Instantly share code, notes, and snippets.

@deleteme
Created June 19, 2009 16:01
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save deleteme/132701 to your computer and use it in GitHub Desktop.
Save deleteme/132701 to your computer and use it in GitHub Desktop.
var InteractiveRadioField = Class.create({
initialize: function(name, pairs, activateFunction, inactivateFunction){
this.name = name;
this.fields = $$('input[type=radio][name=' + this.name + ']');
this.pairs = $H(pairs);
this.activateFunction = activateFunction;
this.inactivateFunction = inactivateFunction;
this.changed = false;
this.elementsToBeShown = $$(this.pairs.map(function(pair){
return '#' + pair.key;
}).join(','));
// if no elements, return
if (this.fields.size() <= 0 || this.elementsToBeShown.size() != this.pairs.size()) {
return false;
}
// periodically observe state of field
// var t = new PeriodicalExecuter(this.check.bind(this), .6);
// this.fields.each(function(input){
// input.observe('change', this.check.bind(this));
// });
this.fields.invoke('observe', 'change', this.check.bind(this));
},
check: function(){
this.getValue();
if (!this.changed) return;
var pair = this.pairs.any(function(pair){
if (pair.value == this.value){
this.match = $(pair.key);
return true;
} else {
return false;
}
}.bind(this));
if (pair && this.match){
this.elementsToBeShown.each(this.inactivateFunction);
this.activateFunction(this.match);
}
},
getValue: function(){
var v = $$('input:checked[type="radio"][name="' + this.name + '"]').pluck('value');
this.changed = (v != this.value);
this.value = v;
},
});
new InteractiveRadioField('section1', {
'packages': '1',
'manual-selections': '2'
}, Element.show, Element.hide);
new InteractiveRadioField('music_packages', {
'package1': 'autumn-sunset',
'package2': 'summer-sea',
'package3': 'evening-tide',
'package4': 'celtic-shores',
'package5': 'springtime-surf',
'package6': 'emerald-coast-serenade',
'package7': 'sea-winds',
'package8': 'you-make-my-heart-dance'
}, function(el){
el.addClassName('selected')
}, function(el){
el.removeClassName('selected')
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment