Skip to content

Instantly share code, notes, and snippets.

@adardesign
Created May 6, 2012 19:36
Show Gist options
  • Save adardesign/2624002 to your computer and use it in GitHub Desktop.
Save adardesign/2624002 to your computer and use it in GitHub Desktop.
//toggleListMoreView
adrma.toggleListMoreView = {
defaults: {
limit: 4,
toggledEleClassName: "toggledHiddenList",
togglerEle: "<span>",
togglerClassName: "toggleMore",
text: ["more...", "less..."],
wrapThem:false,
wrapEle:"div",
addTriggerInside:false,
documentClickClose:false
},
init: function (config) {
var self = this;
for(var i = 0; i < config.length; i++) {
var thisConfig = $.extend({}, this.defaults, config[i]);
this.buildToggler(thisConfig);
}
},
buildToggler:function(thisConfig){
var self = this;
$(thisConfig.selector).each(function (i, e) {
var listParent = $(this),
list = listParent.children();
if(list.length <= thisConfig.limit) {
return
}
var filteredList = list.filter(function (i) {
return i > thisConfig.limit
})
if(thisConfig.wrapThem){
filteredList.wrapAll("<"+thisConfig.wrapEle+" class="+thisConfig.toggledEleClassName+"/>");
}else{
filteredList.addClass(thisConfig.toggledEleClassName);
}
var moreLink = $(thisConfig.togglerEle, {
"class": thisConfig.togglerClassName,
text: thisConfig.text[0]
}).appendTo(listParent);
thisConfig.addTriggerInside && (function(){
var clonedMore = moreLink.clone(true);
listParent.find("." + thisConfig.toggledEleClassName).append(clonedMore);
})();
$(document).on("click", "."+thisConfig.togglerClassName, function (evt) {
listParent.find("." + thisConfig.toggledEleClassName).slideToggle(100);
listParent.find("." + thisConfig.togglerClassName).html(function (i, h) {
if(h === thisConfig.text[0]){
return thisConfig.text[1]
} else {
thisConfig.documentClickClose && (function(){
console.log("document off")
$(document).off(".toggleListMoreView")
})();
return thisConfig.text[0]
}
})
return false;
})
})
},
attachDocClick:function(){
thisConfig.documentClickClose && (function(){
$(document).on("click.toggleListMoreView", function(evnt){
evnt.stopPropagation()
self.documentClose(evnt, self);
return false;
});
})()
},
documentClose:function(evnt, self){
var eTarget = $(evnt.target);
if(eTarget.closest("."+self.defaults.toggledEleClassName).length || eTarget.is("."+self.defaults.togglerClassName)){
console.log("eTarget", eTarget);
return false;
}
$("."+self.defaults.toggledEleClassName+":visible").parent().find("."+self.defaults.togglerClassName).eq(0).trigger("click", ["triggered"]);
evnt.stopPropagation();
return false
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment