PageRenderTime 50ms CodeModel.GetById 23ms RepoModel.GetById 1ms app.codeStats 0ms

/webroot/js/lib/nav.accordion.js

https://gitlab.com/ghufron/vkoolupdate
JavaScript | 205 lines | 151 code | 31 blank | 23 comment | 32 complexity | c0bcf65f31a61444b3cb8dab071a0e9b MD5 | raw file
  1. /*
  2. * DC jQuery Vertical Accordion Menu - jQuery vertical accordion menu plugin
  3. * Copyright (c) 2011 Design Chemical
  4. * Modified in 2015 By Westilian - Kamrujaman Shohel
  5. * Dual licensed under the MIT and GPL xxxxxxlicenses:
  6. * http://www.opensource.org/licenses/mit-license.php
  7. * http://www.gnu.org/licenses/gpl.html
  8. *
  9. */
  10. (function (factory) {
  11. if (typeof define === 'function' && define.amd) {
  12. // AMD. Register as an anonymous module depending on jQuery.
  13. define(['jquery'], factory);
  14. } else {
  15. // No AMD. Register plugin with global jQuery object.
  16. factory(jQuery);
  17. }
  18. }(function ($) {
  19. $.fn.navAccordion = function(options) {
  20. //set default options
  21. var defaults = {
  22. classParent : 'acc-parent',
  23. classActive : 'active',
  24. classArrow : 'acc-icon',
  25. classCount : 'acc-count',
  26. classExpand : 'acc-current-parent',
  27. classDisable : '',
  28. eventType : 'click',
  29. hoverDelay : 300,
  30. menuClose : true,
  31. autoClose : true,
  32. autoExpand : false,
  33. speed : 'slow',
  34. saveState : true,
  35. disableLink : true,
  36. showCount : false
  37. };
  38. //call in the default otions
  39. var options = $.extend(defaults, options);
  40. this.each(function(options){
  41. var obj = this;
  42. $objLinks = $('li > a',obj);
  43. $objSub = $('li > ul',obj);
  44. //console.log($objLinks,$objSub+"\n");
  45. if(defaults.classDisable){
  46. $objLinks = $('li:not(.'+defaults.classDisable+') > a',obj);
  47. $objSub = $('li:not(.'+defaults.classDisable+') > ul',obj);
  48. }
  49. classActive = defaults.classActive;
  50. setUpAccordion();
  51. if(defaults.autoExpand == true){
  52. $('li.'+defaults.classExpand+' > a').addClass(classActive);
  53. }
  54. resetAccordion();
  55. if(defaults.eventType == 'hover'){
  56. var config = {
  57. sensitivity: 2, // number = sensitivity threshold (must be 1 or higher)
  58. interval: defaults.hoverDelay, // number = milliseconds for onMouseOver polling interval
  59. over: linkOver, // function = onMouseOver callback (REQUIRED)
  60. timeout: defaults.hoverDelay, // number = milliseconds delay before onMouseOut
  61. out: linkOut // function = onMouseOut callback (REQUIRED)
  62. };
  63. $objLinks.hoverIntent(config);
  64. var configMenu = {
  65. sensitivity: 2, // number = sensitivity threshold (must be 1 or higher)
  66. interval: 1000, // number = milliseconds for onMouseOver polling interval
  67. over: menuOver, // function = onMouseOver callback (REQUIRED)
  68. timeout: 1000, // number = milliseconds delay before onMouseOut
  69. out: menuOut // function = onMouseOut callback (REQUIRED)
  70. };
  71. $(obj).hoverIntent(configMenu);
  72. // Disable parent links
  73. if(defaults.disableLink == true){
  74. $objLinks.on("click", function(e){
  75. if($(this).siblings('ul').length >0){
  76. e.preventDefault();
  77. }
  78. });
  79. }
  80. } else {
  81. $objLinks.on("click", function(e){
  82. $activeLi = $(this).parent('li');
  83. $parentsLi = $activeLi.parents('li');
  84. $parentsUl = $activeLi.parents('ul');
  85. // Prevent browsing to link if has child links
  86. if(defaults.disableLink == true){
  87. if($(this).siblings('ul').length >0){
  88. e.preventDefault();
  89. }
  90. }
  91. // Auto close sibling menus
  92. if(defaults.autoClose == true){
  93. autoCloseAccordion($parentsLi, $parentsUl);
  94. }
  95. if ($('> ul',$activeLi).is(':visible')){
  96. $('ul',$activeLi).slideUp(defaults.speed);
  97. $('a',$activeLi).removeClass(classActive);
  98. } else {
  99. $(this).siblings('ul').slideToggle(defaults.speed);
  100. $('> a',$activeLi).addClass(classActive);
  101. }
  102. });
  103. }
  104. // Set up accordion
  105. function setUpAccordion(){
  106. $arrow = '<span class="'+defaults.classArrow+'"></span>';
  107. var classParentLi = defaults.classParent+'-li';
  108. $objSub.show();
  109. $('li',obj).each(function(){
  110. if($('> ul',this).length > 0){
  111. $(this).addClass(classParentLi);
  112. $('> a',this).addClass(defaults.classParent).append($arrow);
  113. }
  114. });
  115. $objSub.hide();
  116. if(defaults.classDisable){
  117. $('li.'+defaults.classDisable+' > ul').show();
  118. }
  119. if(defaults.showCount == true){
  120. $('li.'+classParentLi,obj).each(function(){
  121. if(defaults.disableLink == true){
  122. var getCount = parseInt($('ul a:not(.'+defaults.classParent+')',this).length);
  123. } else {
  124. var getCount = parseInt($('ul a',this).length);
  125. }
  126. $('> a',this).append(' <span class="'+defaults.classCount+'">('+getCount+')</span>');
  127. });
  128. }
  129. }
  130. function linkOver(){
  131. $activeLi = $(this).parent('li');
  132. $parentsLi = $activeLi.parents('li');
  133. $parentsUl = $activeLi.parents('ul');
  134. // Auto close sibling menus
  135. if(defaults.autoClose == true){
  136. autoCloseAccordion($parentsLi, $parentsUl);
  137. }
  138. if ($('> ul',$activeLi).is(':visible')){
  139. $('ul',$activeLi).slideUp(defaults.speed);
  140. $('a',$activeLi).removeClass(classActive);
  141. } else {
  142. $(this).siblings('ul').slideToggle(defaults.speed);
  143. $('> a',$activeLi).addClass(classActive);
  144. }
  145. }
  146. function linkOut(){
  147. }
  148. function menuOver(){
  149. }
  150. function menuOut(){
  151. if(defaults.menuClose == true){
  152. $objSub.slideUp(defaults.speed);
  153. // Reset active links
  154. $('a',obj).removeClass(classActive);
  155. }
  156. }
  157. // Auto-Close Open Menu Items
  158. function autoCloseAccordion($parentsLi, $parentsUl){
  159. $('ul',obj).not($parentsUl).slideUp(defaults.speed);
  160. // Reset active links
  161. $('a',obj).removeClass(classActive);
  162. $('> a',$parentsLi).addClass(classActive);
  163. }
  164. // Reset accordion using active links
  165. function resetAccordion(){
  166. $objSub.hide();
  167. var $parentsLi = $('a.'+classActive,obj).parents('li');
  168. $('> a',$parentsLi).addClass(classActive);
  169. $allActiveLi = $('a.'+classActive,obj);
  170. $($allActiveLi).siblings('ul').show();
  171. }
  172. });
  173. };
  174. }));