/* * Copyright (C) 2009 Joel Sutherland. * Liscenced under the MIT liscense */ (function($) { $.fn.filterable = function(settings) { settings = $.extend({ useHash: true, animationSpeed: 1000, show: { width: 'show', opacity: 'show' }, hide: { width: 'hide', opacity: 'hide' }, useTags: true, tagSelector: '#portfolio-filter a', selectedTagClass: 'active', allTag: 'all' }, settings); return $(this).each(function(){ /* FILTER: select a tag and filter */ $(this).bind("filter", function( e, tagToShow ){ if(settings.useTags){ $(settings.tagSelector).removeClass(settings.selectedTagClass); $(settings.tagSelector + '[href=' + tagToShow + ']').addClass(settings.selectedTagClass); } $(this).trigger("filterportfolio", [ tagToShow.substr(1) ]); }); /* FILTERPORTFOLIO: pass in a class to show, all others will be hidden */ $(this).bind("filterportfolio", function( e, classToShow ){ if(classToShow == settings.allTag){ $(this).trigger("show"); }else{ $(this).trigger("show", [ '.' + classToShow ] ); $(this).trigger("hide", [ ':not(.' + classToShow + ')' ] ); } if(settings.useHash){ location.hash = '#' + classToShow; } }); /* SHOW: show a single class*/ $(this).bind("show", function( e, selectorToShow ){ $(this).children(selectorToShow).animate(settings.show, settings.animationSpeed); }); /* SHOW: hide a single class*/ $(this).bind("hide", function( e, selectorToHide ){ $(this).children(selectorToHide).animate(settings.hide, settings.animationSpeed); }); /* ============ Check URL Hash ====================*/ if(settings.useHash){ if(location.hash != '') $(this).trigger("filter", [ location.hash ]); else $(this).trigger("filter", [ '#' + settings.allTag ]); } /* ============ Setup Tags ====================*/ if(settings.useTags){ $(settings.tagSelector).click(function(){ $('#portfolio-list').trigger("filter", [ $(this).attr('href') ]); $(settings.tagSelector).removeClass('current'); $(this).addClass('current'); }); } }); } })(jQuery);