Guest User

Untitled

a guest
Feb 25th, 2013
154
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.31 KB | None | 0 0
  1. (function ($) {
  2. $.widget('genius.accordion', {
  3. options: {
  4. //settings
  5. headerClassName: 'accordionHeader',
  6. headerActiveClassName: 'accordionHeader-active',
  7. contentClassName: 'accordionContent',
  8. collapseAll: true,
  9. speed: 700,
  10. //callbacks
  11. onAccordionOpen: null,
  12. onAccordionClose: null,
  13. onAllAccordionOpen: null,
  14. onAllAccordionClose: null
  15. },
  16. _create: function () {
  17. var self = this;
  18. var accordionHeaders = self.element.find('> li > .' + self.options.headerClassName);
  19. var accordionContents = self.element.find('> li > .' + self.options.contentClassName);
  20. accordionContents.hide();
  21.  
  22. accordionHeaders.on('click', function (e) {
  23. var currentAccordionHeader = $(this);
  24. var currentAccordionContent = $(this).next('.' + self.options.contentClassName);
  25. if (!currentAccordionContent.is(':visible')) {
  26. if (self.options.collapseAll) {
  27. accordionContents.slideUp(self.options.speed, function () {
  28. if ($.isFunction(self.options.onAccordionClose)) {
  29. self.options.onAccordionClose.call(accordionHeaders);
  30. }
  31. });
  32.  
  33. accordionHeaders.each(function () {
  34. $(this).parent('li').removeClass(self.options.headerActiveClassName);
  35. });
  36. currentAccordionHeader.parent('li').addClass(self.options.headerActiveClassName);
  37. }
  38. else {
  39. currentAccordionHeader.parent('li').addClass(self.options.headerActiveClassName);
  40. }
  41. currentAccordionContent.stop().slideDown(self.options.speed, function () {
  42. if ($.isFunction(self.options.onAccordionOpen)) {
  43. self.options.onAccordionOpen.call(currentAccordionHeader);
  44. }
  45. });
  46. }
  47. else {
  48. currentAccordionContent.stop().slideUp(self.options.speed, function () {
  49. if ($.isFunction(self.options.onAccordionClose)) {
  50. self.options.onAccordionClose.call(currentAccordionHeader);
  51. }
  52. if (!self.options.collaseAll) {
  53. accordionHeaders.each(function () {
  54. currentAccordionHeader.parent('li').removeClass(self.options.headerActiveClassName);
  55. });
  56. }
  57. });
  58. }
  59. });
  60. },
  61. _init: function () {
  62. var self = this;
  63. },
  64. _destroy: function () {
  65. var self = this;
  66. },
  67. openAll: function () {
  68. var self = this;
  69. var accordionContents = self.element.find('> li > .' + self.options.contentClassName);
  70. accordionContents.slideDown(self.options.speed, function () {
  71. if ($.isFunction(self.options.onAccordionOpen)) {
  72. self.options.onAccordionOpen.call($(this).prev('.' + self.options.headerClassName));
  73. }
  74. if ($.isFunction(self.options.onAllAccordionOpen)) {
  75. self.options.onAllAccordionOpen.call($(this).prev('.' + self.options.headerClassName));
  76. }
  77. });
  78. },
  79. closeAll: function () {
  80. var self = this;
  81. var accordionContents = self.element.find('> li > .' + self.options.contentClassName);
  82. accordionContents.slideUp(self.options.speed, function () {
  83. if ($.isFunction(self.options.onAccordionClose)) {
  84. self.options.onAccordionClose.call($(this).prev('.' + self.options.headerClassName));
  85. }
  86. if ($.isFunction(self.options.onAllAccordionClose)) {
  87. self.options.onAllAccordionClose.call($(this).prev('.' + self.options.headerClassName));
  88. }
  89. });
  90. }
  91. });
  92. })(jQuery);
Advertisement
Add Comment
Please, Sign In to add comment