Skip to content

Instantly share code, notes, and snippets.

@duff
Created December 20, 2010 16:59
Show Gist options
  • Select an option

  • Save duff/748638 to your computer and use it in GitHub Desktop.

Select an option

Save duff/748638 to your computer and use it in GitHub Desktop.
window.addEvent 'domready', ->
$$('[toggle_id]').each(hookupIDToggler)
hookupIDToggler = (element) ->
respondToClickOrChange element
initialToggleIfChecked element
respondToClickOrChange = (element) ->
action = if element.match('input[type=checkbox]') then 'change' else 'click'
element.addEvent action, (event) ->
event.stop() if element.match('a')
toggleIDs(this)
initialToggleIfChecked = (element) ->
return unless element.match('input[type=checkbox]')
toggleIDs(element) if element.checked
toggleIDs = (element) ->
ids = element.get('toggle_id').split(', ')
ids.each (id) ->
$(id).toggle()
rememberState(element, id)
setFocus(element)
swapText(element)
rememberState = (element, id) ->
return unless element.get('remember_state') is 'true'
Cookie.write("remember_state_#{id}", $(id).isVisible(), { duration: 5000 })
setFocus = (element) ->
focusID = element.get('focus_id')
$(focusID).focus() if focusID?
swapText = (element) ->
swap = element.get('swap_text')
return unless swap?
element.set('swap_text', element.get('html')).set('html', swap)
window.addEvent('domready', function() {
$$('[toggle_id]').each(setupIDToggler);
});
function setupIDToggler(el){
var action = el.match('input[type=checkbox]') ? 'change' : 'click';
el.addEvent(action, function(event){
if(el.match('a')) event.stop();
toggleIDs(this);
});
if (el.match('input[type=checkbox]')){
if(el.checked)
toggleIDs(el)
}
}
function toggleIDs(el){
var ids = el.get('toggle_id').split(', ');
ids.each(function(id){
$(id).toggle();
rememberState(el, id);
});
setFocus(el);
swapText(el);
}
function showIDs(el){
var ids = el.get('toggle_id').split(', ');
ids.each(function(id){
$(id).show();
});
}
function rememberState(el, id) {
if (el.get('remember_state') != 'true') { return };
Cookie.write('remember_state_' + id, $(id).isVisible(), {duration: 5000});
}
function setFocus(el){
var focusID = el.get('focus_id');
if (focusID) $(focusID).focus();
}
function swapText(el){
var swapText = el.get('swap_text');
if (swapText) {
el.set('swap_text', el.get('html')).set('html', swapText);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment