jQuery Plugin Development Pattern

May 7th, 2009

Here is an example of the Plugin Development Pattern with tabs. You can download a copy of it here.

Tab 1
Lorem ipsum dolor sit amet, consectetur adipiscing elit. In pretium aliquet risus a tristique. Proin pellentesque, urna sit amet vestibulum mollis, leo magna placerat ligula, ac tincidunt urna libero in nisi. Quisque blandit lorem id libero pulvinar vel viverra urna consequat. Sed nisl nibh, condimentum vel tincidunt in, bibendum id magna. Pellentesque eleifend est sed odio sollicitudin ultricies. Morbi porta metus nec nulla imperdiet pulvinar. Sed tincidunt augue id dui consectetur eleifend. Sed sit amet eros sit amet est viverra tristique. Quisque lorem tellus, faucibus sed vulputate nec, malesuada ac libero. Nulla facilisi. Morbi tincidunt sagittis enim, in viverra lorem mollis eget. In hac habitasse platea dictumst. Vivamus nec fermentum neque. Nulla facilisi.

Lorem ipsum dolor sit amet, consectetur adipiscing elit. In pretium aliquet risus a tristique. Proin pellentesque, urna sit amet vestibulum mollis, leo magna placerat ligula, ac tincidunt urna libero in nisi. Quisque blandit lorem id libero pulvinar vel viverra urna consequat. Sed nisl nibh, condimentum vel tincidunt in, bibendum id magna. Pellentesque eleifend est sed odio sollicitudin ultricies. Morbi porta metus nec nulla imperdiet pulvinar. Sed tincidunt augue id dui consectetur eleifend. Sed sit amet eros sit amet est viverra tristique. Quisque lorem tellus, faucibus sed vulputate nec, malesuada ac libero. Nulla facilisi. Morbi tincidunt sagittis enim, in viverra lorem mollis eget. In hac habitasse platea dictumst. Vivamus nec fermentum neque. Nulla facilisi.
Tab 2
Lorem ipsum dolor sit amet, consectetur adipiscing elit. In pretium aliquet risus a tristique. Proin pellentesque, urna sit amet vestibulum mollis, leo magna placerat ligula, ac tincidunt urna libero in nisi. Quisque blandit lorem id libero pulvinar vel viverra urna consequat. Sed nisl nibh, condimentum vel tincidunt in, bibendum id magna. Pellentesque eleifend est sed odio sollicitudin ultricies. Morbi porta metus nec nulla imperdiet pulvinar. Sed tincidunt augue id dui consectetur eleifend. Sed sit amet eros sit amet est viverra tristique. Quisque lorem tellus, faucibus sed vulputate nec, malesuada ac libero. Nulla facilisi. Morbi tincidunt sagittis enim, in viverra lorem mollis eget. In hac habitasse platea dictumst. Vivamus nec fermentum neque. Nulla facilisi.

Tab 3
Lorem ipsum dolor sit amet, consectetur adipiscing elit. In pretium aliquet risus a tristique. Proin pellentesque, urna sit amet vestibulum mollis, leo magna placerat ligula, ac tincidunt urna libero in nisi. Quisque blandit lorem id libero pulvinar vel viverra urna consequat. Sed nisl nibh, condimentum vel tincidunt in, bibendum id magna. Pellentesque eleifend est sed odio sollicitudin ultricies. Morbi porta metus nec nulla imperdiet pulvinar. Sed tincidunt augue id dui consectetur eleifend. Sed sit amet eros sit amet est viverra tristique. Quisque lorem tellus, faucibus sed vulputate nec, malesuada ac libero. Nulla facilisi. Morbi tincidunt sagittis enim, in viverra lorem mollis eget. In hac habitasse platea dictumst. Vivamus nec fermentum neque. Nulla facilisi.

  1. (function($){
  2.     $.fn.tabs = function(tabOptions) {
  3.         // support mutltiple elements
  4.         if (this.length > 1){
  5.             this.each(function() { $(this).tabs(tabOptions) });
  6.             return this;
  7.         }
  8.         // SETUP private variabls;
  9.         var tabs = this;
  10.         var baseOptions = {
  11.             tabsClass: ‘.tabList li’,
  12.             tabsSelected: ‘.selected’,
  13.             tabPanels: ‘.tab’,
  14.             tabPrefix: ‘.tab’,
  15.             debug: false
  16.         };
  17.         // SETUP private functions;
  18.         var callbacks = function(thisObject, functionList) {
  19.             var returnValue = true;
  20.             if ($.isFunction(functionList)){
  21.                 returnValue = functionList.call(thisObject);
  22.             }else if ($.isArray(functionList)){
  23.                 for (var i = 0; i < functionList.length; i++){
  24.                     returnValue = functionList[i].call(thisObject);
  25.                 }
  26.             }
  27.             return returnValue;
  28.         };
  29.         // setup options
  30.         var options = $.extend({}, baseOptions, tabOptions);
  31.         
  32.         var intialize = function() {
  33.                 // support MetaData plugin
  34.                 if ($.meta){
  35.                     options = $.extend({}, options, this.data());
  36.                 }
  37.                 // Scope selectors
  38.                 $(options.tabsClass, tabs).click( function(e){
  39.                                                                 tabs.changeTab(this);
  40.                                                             });
  41.                 tabs.changeTab($(options.tabsSelected, tabs).get(0));
  42.         };
  43.         this.changeTab = function(element) {
  44.               var newTabIndex = 0;
  45.               $(options.tabsClass, this).each(function(){
  46.                    if (this == element) {
  47.                         tabs.currentTab = newTabIndex;
  48.                         $(element).addClass(options.tabsSelected);
  49.                    } else {
  50.                         $(this).removeClass(options.tabsSelected);
  51.                    }
  52.                    newTabIndex++;
  53.               });
  54.               var tabOptions = {};
  55.               if (options['tab' + tabs.currentTab] != undefined) {
  56.                    tabOptions = options['tab' + tabs.currentTab];
  57.               }
  58.               if (callbacks(this, tabOptions.beforeLoad)){
  59.                   $(options.tabPanels, this).hide();
  60.                   callbacks(this, tabOptions.onload);
  61.                   $(‘.tab’ + tabs.currentTab, this).show();
  62.                   callbacks(this, tabOptions.afterload);
  63.               }
  64.         };
  65.          
  66.          /**
  67.           * Debug Logging
  68.           * @param {Object} data
  69.           */
  70.          var log = function(data){
  71.               if (options.debug) {
  72.                    try {
  73.                         console.log(“%o: %o”, data, this);
  74.                    } catch (e) {
  75.                         $(‘BODY’).append($(“<div class=’error‘>” + data + “</div>”));
  76.                    }
  77.               }
  78.          };
  79.          this.getCurrentTab = function() {
  80.             return this.currentTab || 0;
  81.          }
  82.          intialize();
  83.         return this;
  84.     }
  85. })(jQuery);
Bookmark and Share
Comments are closed.