Skip to content

Instantly share code, notes, and snippets.

@calvinfroedge
Created August 27, 2015 19:11
Show Gist options
  • Save calvinfroedge/d9a2c23e6419747cc3ee to your computer and use it in GitHub Desktop.
Save calvinfroedge/d9a2c23e6419747cc3ee to your computer and use it in GitHub Desktop.
var listchooser = function(choices, opts){
var opts = opts || {};
opts.transforms = opts.transforms || {};
opts.events = opts.events || {};
var container = $('<div></div>');
if(opts.transforms.container){
opts.transforms.container(container);
}
var chooser = $('<div>'+choices[0]+'</div>');
if(opts.transforms.chooser){
opts.transforms.chooser(chooser);
}
var ul = $('<ul></ul>');
if(opts.transforms.ul){
opts.transforms.ul(ul);
}
var hideUl = function(){
ul.css('display', 'none');
}
hideUl();
var choiceList = choices.map(function(choice){
var li = $('<li></li>');
li.attr('style', 'list-style:none;cursor:pointer;margin:0;padding:0 1em 1em 1em;');
li.text(choice);
if(opts.transforms.li) opts.transforms.li(li, choice);
li.click(function(){
if(opts.events['li.click']){
opts.events['li.click'](li, choice, chooser);
}
chooser.text(choice);
hideUl();
});
return li;
});
_.each(choiceList, function(choice){
ul.append(choice);
});
chooser.click(function(){
ul.css('position', 'absolute');
ul.css('display', 'block');
});
$(document).on('click.offListchooser', function(e){
if(e.target != chooser[0]) hideUl();
});
container.append(chooser);
container.append(ul);
$('body').append(container);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment