PageRenderTime 54ms CodeModel.GetById 26ms RepoModel.GetById 0ms app.codeStats 0ms

/html/js/jquery.dcjqaccordion.2.7.js

https://bitbucket.org/mwageni/admin-template
JavaScript | 242 lines | 149 code | 37 blank | 56 comment | 35 complexity | 7c953bda72c834fdc8fed6d0748a4574 MD5 | raw file
Possible License(s): LGPL-2.1, MPL-2.0-no-copyleft-exception, Apache-2.0
  1. /*
  2. * DC jQuery Vertical Accordion Menu - jQuery vertical accordion menu plugin
  3. * Copyright (c) 2011 Design Chemical
  4. *
  5. * Dual licensed under the MIT and GPL licenses:
  6. * http://www.opensource.org/licenses/mit-license.php
  7. * http://www.gnu.org/licenses/gpl.html
  8. *
  9. */
  10. (function($){
  11. $.fn.dcAccordion = function(options) {
  12. //set default options
  13. var defaults = {
  14. classParent : 'dcjq-parent',
  15. classActive : 'active',
  16. classArrow : 'dcjq-icon',
  17. classCount : 'dcjq-count',
  18. classExpand : 'dcjq-current-parent',
  19. eventType : 'click',
  20. hoverDelay : 300,
  21. menuClose : true,
  22. autoClose : true,
  23. autoExpand : false,
  24. speed : 'slow',
  25. saveState : true,
  26. disableLink : true,
  27. showCount : false,
  28. // cookie : 'dcjq-accordion'
  29. };
  30. //call in the default otions
  31. var options = $.extend(defaults, options);
  32. this.each(function(options){
  33. var obj = this;
  34. setUpAccordion();
  35. // if(defaults.saveState == true){
  36. // checkCookie(defaults.cookie, obj);
  37. // }
  38. if(defaults.autoExpand == true){
  39. $('li.'+defaults.classExpand+' > a').addClass(defaults.classActive);
  40. }
  41. resetAccordion();
  42. if(defaults.eventType == 'hover'){
  43. var config = {
  44. sensitivity: 2, // number = sensitivity threshold (must be 1 or higher)
  45. interval: defaults.hoverDelay, // number = milliseconds for onMouseOver polling interval
  46. over: linkOver, // function = onMouseOver callback (REQUIRED)
  47. timeout: defaults.hoverDelay, // number = milliseconds delay before onMouseOut
  48. out: linkOut // function = onMouseOut callback (REQUIRED)
  49. };
  50. $('li a',obj).hoverIntent(config);
  51. var configMenu = {
  52. sensitivity: 2, // number = sensitivity threshold (must be 1 or higher)
  53. interval: 1000, // number = milliseconds for onMouseOver polling interval
  54. over: menuOver, // function = onMouseOver callback (REQUIRED)
  55. timeout: 1000, // number = milliseconds delay before onMouseOut
  56. out: menuOut // function = onMouseOut callback (REQUIRED)
  57. };
  58. $(obj).hoverIntent(configMenu);
  59. // Disable parent links
  60. if(defaults.disableLink == true){
  61. $('li a',obj).click(function(e){
  62. if($(this).siblings('ul').length >0){
  63. e.preventDefault();
  64. }
  65. });
  66. }
  67. } else {
  68. $('li a',obj).click(function(e){
  69. $activeLi = $(this).parent('li');
  70. $parentsLi = $activeLi.parents('li');
  71. $parentsUl = $activeLi.parents('ul');
  72. // Prevent browsing to link if has child links
  73. if(defaults.disableLink == true){
  74. if($(this).siblings('ul').length >0){
  75. e.preventDefault();
  76. }
  77. }
  78. // Auto close sibling menus
  79. if(defaults.autoClose == true){
  80. autoCloseAccordion($parentsLi, $parentsUl);
  81. }
  82. if ($('> ul',$activeLi).is(':visible')){
  83. $('ul',$activeLi).slideUp(defaults.speed);
  84. $('a',$activeLi).removeClass(defaults.classActive);
  85. } else {
  86. $(this).siblings('ul').slideToggle(defaults.speed);
  87. $('> a',$activeLi).addClass(defaults.classActive);
  88. if($(this).siblings('ul').hasClass("level-3")){
  89. //$("#main-content .wrapper").css("margin-left","240px;");
  90. }
  91. }
  92. if ($activeLi.hasClass("level-2-li") && $(".level-2-li >a").hasClass("active")){
  93. $("#container").removeClass("open-right-panel")
  94. $("#container > .header").removeClass("merge-header")
  95. $("#container").addClass("open-right-panel-2")
  96. $("#container > .header").addClass("merge-header-2")
  97. }else if($activeLi.hasClass("level-2-li") || ($activeLi.hasClass("level-1-li") && !$(".level-1-li > a").hasClass("active"))){
  98. $("#container").addClass("open-right-panel")
  99. $("#container > .header").addClass("merge-header")
  100. $("#container").removeClass("open-right-panel-2")
  101. $("#container > .header").removeClass("merge-header-2")
  102. }
  103. // // Write cookie if save state is on
  104. // if(defaults.saveState == true){
  105. // createCookie(defaults.cookie, obj);
  106. // }
  107. });
  108. }
  109. // Set up accordion
  110. function setUpAccordion(){
  111. $arrow = '<span class="'+defaults.classArrow+'"></span>';
  112. var classParentLi = defaults.classParent+'-li';
  113. $('> ul',obj).show();
  114. $('li',obj).each(function(){
  115. if($('> ul',this).length > 0){
  116. $(this).addClass(classParentLi);
  117. $('> a',this).addClass(defaults.classParent).append($arrow);
  118. }
  119. });
  120. $('> ul',obj).hide();
  121. if(defaults.showCount == true){
  122. $('li.'+classParentLi,obj).each(function(){
  123. if(defaults.disableLink == true){
  124. var getCount = parseInt($('ul a:not(.'+defaults.classParent+')',this).length);
  125. } else {
  126. var getCount = parseInt($('ul a',this).length);
  127. }
  128. $('> a',this).append(' <span class="'+defaults.classCount+'">'+getCount+'</span>');
  129. });
  130. }
  131. }
  132. function linkOver(){
  133. $activeLi = $(this).parent('li');
  134. $parentsLi = $activeLi.parents('li');
  135. $parentsUl = $activeLi.parents('ul');
  136. // Auto close sibling menus
  137. if(defaults.autoClose == true){
  138. autoCloseAccordion($parentsLi, $parentsUl);
  139. }
  140. if ($('> ul',$activeLi).is(':visible')){
  141. $('ul',$activeLi).slideUp(defaults.speed);
  142. $('a',$activeLi).removeClass(defaults.classActive);
  143. } else {
  144. $(this).siblings('ul').slideToggle(defaults.speed);
  145. $('> a',$activeLi).addClass(defaults.classActive);
  146. }
  147. // Write cookie if save state is on
  148. if(defaults.saveState == true){
  149. createCookie(defaults.cookie, obj);
  150. }
  151. }
  152. function linkOut(){
  153. }
  154. function menuOver(){
  155. }
  156. function menuOut(){
  157. if(defaults.menuClose == true){
  158. $('ul',obj).slideUp(defaults.speed);
  159. // Reset active links
  160. $('a',obj).removeClass(defaults.classActive);
  161. createCookie(defaults.cookie, obj);
  162. }
  163. }
  164. // Auto-Close Open Menu Items
  165. function autoCloseAccordion($parentsLi, $parentsUl){
  166. $('ul',obj).not($parentsUl).slideUp(defaults.speed);
  167. // Reset active links
  168. $('a',obj).removeClass(defaults.classActive);
  169. $('> a',$parentsLi).addClass(defaults.classActive);
  170. }
  171. // Reset accordion using active links
  172. function resetAccordion(){
  173. $('ul',obj).hide();
  174. $allActiveLi = $('a.'+defaults.classActive,obj);
  175. $allActiveLi.siblings('ul').show();
  176. }
  177. });
  178. // Retrieve cookie value and set active items
  179. // function checkCookie(cookieId, obj){
  180. // var cookieVal = $.cookie(cookieId);
  181. // if(cookieVal != null){
  182. // // create array from cookie string
  183. // var activeArray = cookieVal.split(',');
  184. // $.each(activeArray, function(index,value){
  185. // var $cookieLi = $('li:eq('+value+')',obj);
  186. // $('> a',$cookieLi).addClass(defaults.classActive);
  187. // var $parentsLi = $cookieLi.parents('li');
  188. // $('> a',$parentsLi).addClass(defaults.classActive);
  189. // });
  190. // }
  191. // }
  192. // Write cookie
  193. // function createCookie(cookieId, obj){
  194. // var activeIndex = [];
  195. // // Create array of active items index value
  196. // $('li a.'+defaults.classActive,obj).each(function(i){
  197. // var $arrayItem = $(this).parent('li');
  198. // var itemIndex = $('li',obj).index($arrayItem);
  199. // activeIndex.push(itemIndex);
  200. // });
  201. // // Store in cookie
  202. // $.cookie(cookieId, activeIndex, { path: '/' });
  203. // }
  204. };
  205. })(jQuery);