amaze.js 8.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340
  1. "use strict";
  2. (function() {
  3. var fixedTop = false;
  4. var mobile_menu_visible = 0,
  5. mobile_menu_initialized = false,
  6. toggle_initialized = false,
  7. bootstrap_nav_initialized = false,
  8. $sidebar = $('.sidebar'),
  9. isWindows;
  10. var $window = $(window);
  11. var $body = $('body');
  12. var $html = $('html');
  13. var $sidebar_wrapper = $('.sidebar-wrapper');
  14. isWindows = navigator.platform.indexOf('Win') > -1 ? true : false;
  15. if (isWindows && !$body.hasClass('sidebar-mini')){
  16. // if we are on windows OS we activate the perfectScrollbar function
  17. $('.sidebar .sidebar-wrapper, .main-panel').perfectScrollbar();
  18. $html.addClass('perfect-scrollbar-on');
  19. } else {
  20. $html.addClass('perfect-scrollbar-off');
  21. }
  22. $(document).ready(function(){
  23. var window_width = $window.width();
  24. if($body.hasClass('sidebar-mini')){
  25. pdp.misc.sidebar_mini_active = true;
  26. }
  27. pdp.initSidebarsCheck();
  28. pdp.initMinimizeSidebar();
  29. $('.form-control').on("focus", function(){
  30. $(this).parent('.input-group').addClass("input-group-focus");
  31. }).on("blur", function(){
  32. $(this).parent(".input-group").removeClass("input-group-focus");
  33. });
  34. // Activate the tooltips
  35. $('[rel="tooltip"]').tooltip();
  36. // Init Tags Input
  37. if($(".tagsinput").length != 0){
  38. $(".tagsinput").tagsInput();
  39. }
  40. // Init Bootstrap Select Picker
  41. if($(".selectpicker").length != 0){
  42. $(".selectpicker").selectpicker({
  43. size: 9
  44. });
  45. }
  46. });
  47. // activate collapse right menu when the windows is resized
  48. $window.resize(function(){
  49. pdp.initSidebarsCheck();
  50. });
  51. var pdp = {
  52. misc:{
  53. navbar_menu_visible: 0,
  54. active_collapse: true,
  55. disabled_collapse_init: 0
  56. },
  57. initSidebarsCheck: function(){
  58. // Init navigation toggle for small screens
  59. if($window.width() <= 991){
  60. if($sidebar.length !== 0){
  61. pdp.initSidebarMenu();
  62. } else {
  63. pdp.initBootstrapNavbarMenu();
  64. }
  65. } else if(mobile_menu_initialized === true){
  66. // reset all the additions that we made for the sidebar wrapper only if the screen is bigger than 991px
  67. $sidebar_wrapper.find('.navbar-form').remove();
  68. $sidebar_wrapper.find('.nav-mobile-menu').remove();
  69. mobile_menu_initialized = false;
  70. }
  71. },
  72. initMinimizeSidebar: function(){
  73. var $sidebar_collapse = $('.sidebar .collapse');
  74. // when we are on a Desktop Screen and the collapse is triggered we check if the sidebar mini is active or not. If it is active then we don't let the collapse to show the elements because the elements from the collapse are showing on the hover state over the icons in sidebar mini, not on the click.
  75. $sidebar_collapse.on('show.bs.collapse',function(){
  76. if($window.width() > 991){
  77. if(pdp.misc.sidebar_mini_active === true){
  78. return false;
  79. } else{
  80. return true;
  81. }
  82. }
  83. });
  84. $('#minimizeSidebar').on('click',function(){
  85. var $btn = $(this);
  86. if(pdp.misc.sidebar_mini_active === true){
  87. $body.removeClass('sidebar-mini');
  88. $btn.html('<i class="ti-arrow-left"></i>');
  89. pdp.misc.sidebar_mini_active = false;
  90. if(isWindows){
  91. $('.sidebar .sidebar-wrapper').perfectScrollbar();
  92. }
  93. }else{
  94. $sidebar_collapse.collapse('hide').on('hidden.bs.collapse',function(){
  95. $(this).css('height','auto');
  96. });
  97. if(isWindows){
  98. $('.sidebar .sidebar-wrapper').perfectScrollbar('destroy');
  99. }
  100. setTimeout(function(){
  101. $body.addClass('sidebar-mini');
  102. $btn.html('<i class="ti-arrow-right"></i>');
  103. $sidebar_collapse.css('height','auto');
  104. pdp.misc.sidebar_mini_active = true;
  105. },300);
  106. }
  107. // we simulate the window Resize so the charts will get updated in realtime.
  108. var simulateWindowResize = setInterval(function(){
  109. window.dispatchEvent(new Event('resize'));
  110. },180);
  111. // we stop the simulation of Window Resize after the animations are completed
  112. setTimeout(function(){
  113. clearInterval(simulateWindowResize);
  114. },1000);
  115. });
  116. },
  117. initSidebarMenu: function(){
  118. if(!mobile_menu_initialized){
  119. var $navbar = $('nav').find('.navbar-collapse').first().clone(true);
  120. var nav_content = '';
  121. var mobile_menu_content = '';
  122. $navbar.children('ul').each(function(){
  123. var content_buff = $(this).html();
  124. nav_content = nav_content + content_buff;
  125. });
  126. nav_content = '<ul class="nav nav-mobile-menu">' + nav_content + '</ul>';
  127. var $navbar_form = $('nav').find('.navbar-form').clone(true);
  128. var $sidebar_nav = $sidebar_wrapper.find(' > .nav');
  129. // insert the navbar form before the sidebar list
  130. var $nav_content = $(nav_content);
  131. $nav_content.insertBefore($sidebar_nav);
  132. $navbar_form.insertBefore($nav_content);
  133. $(".sidebar-wrapper .dropdown .dropdown-menu > li > a").on('click',function(event) {
  134. event.stopPropagation();
  135. });
  136. mobile_menu_initialized = true;
  137. } else {
  138. if($window.width() > 991){
  139. // reset all the additions that we made for the sidebar wrapper only if the screen is bigger than 991px
  140. $sidebar_wrapper.find('.navbar-form').remove();
  141. $sidebar_wrapper.find('.nav-mobile-menu').remove();
  142. mobile_menu_initialized = false;
  143. }
  144. }
  145. if(!toggle_initialized){
  146. var $toggle = $('.navbar-toggle');
  147. $toggle.on('click',function (){
  148. if(mobile_menu_visible === 1) {
  149. $html.removeClass('nav-open');
  150. $('.close-layer').remove();
  151. setTimeout(function(){
  152. $toggle.removeClass('toggled');
  153. }, 400);
  154. mobile_menu_visible = 0;
  155. } else {
  156. setTimeout(function(){
  157. $toggle.addClass('toggled');
  158. }, 430);
  159. var main_panel_height = $('.main-panel')[0].scrollHeight;
  160. var $layer = $('<div class="close-layer"></div>');
  161. $layer.css('height',main_panel_height + 'px');
  162. $layer.appendTo(".main-panel");
  163. setTimeout(function(){
  164. $layer.addClass('visible');
  165. }, 100);
  166. $layer.on('click',function() {
  167. $html.removeClass('nav-open');
  168. mobile_menu_visible = 0;
  169. $layer.removeClass('visible');
  170. setTimeout(function(){
  171. $layer.remove();
  172. $toggle.removeClass('toggled');
  173. }, 400);
  174. });
  175. $html.addClass('nav-open');
  176. mobile_menu_visible = 1;
  177. }
  178. });
  179. toggle_initialized = true;
  180. }
  181. },
  182. initBootstrapNavbarMenu: debounce(function(){
  183. if(!bootstrap_nav_initialized){
  184. var $navbar = $('nav').find('.navbar-collapse').first().clone(true);
  185. var nav_content = '';
  186. var mobile_menu_content = '';
  187. //add the content from the regular header to the mobile menu
  188. $navbar.children('ul').each(function(){
  189. var content_buff = $(this).html();
  190. nav_content = nav_content + content_buff;
  191. });
  192. nav_content = '<ul class="nav nav-mobile-menu">' + nav_content + '</ul>';
  193. $navbar.html(nav_content);
  194. $navbar.addClass('off-canvas-sidebar');
  195. // append it to the body, so it will come from the right side of the screen
  196. $body.append($navbar);
  197. var $toggle = $('.navbar-toggle');
  198. $navbar.find('a').removeClass('btn btn-round btn-default');
  199. $navbar.find('button').removeClass('btn-round btn-fill btn-info btn-primary btn-success btn-danger btn-warning btn-neutral');
  200. $navbar.find('button').addClass('btn-simple btn-block');
  201. $toggle.on('click',function (){
  202. if(mobile_menu_visible === 1) {
  203. $html.removeClass('nav-open');
  204. $('.close-layer').remove();
  205. setTimeout(function(){
  206. $toggle.removeClass('toggled');
  207. }, 400);
  208. mobile_menu_visible = 0;
  209. } else {
  210. setTimeout(function(){
  211. $toggle.addClass('toggled');
  212. }, 430);
  213. var $layer = $('<div class="close-layer"></div>');
  214. $layer.appendTo(".wrapper-full-page");
  215. setTimeout(function(){
  216. $layer.addClass('visible');
  217. }, 100);
  218. $layer.on('click',function() {
  219. $html.removeClass('nav-open');
  220. mobile_menu_visible = 0;
  221. $layer.removeClass('visible');
  222. setTimeout(function(){
  223. $layer.remove();
  224. $toggle.removeClass('toggled');
  225. }, 400);
  226. });
  227. $html.addClass('nav-open');
  228. mobile_menu_visible = 1;
  229. }
  230. });
  231. bootstrap_nav_initialized = true;
  232. }
  233. }, 500),
  234. }
  235. // Returns a function, that, as long as it continues to be invoked, will not
  236. // be triggered. The function will be called after it stops being called for
  237. // N milliseconds. If `immediate` is passed, trigger the function on the
  238. // leading edge, instead of the trailing.
  239. function debounce(func, wait, immediate) {
  240. var timeout;
  241. return function() {
  242. var context = this, args = arguments;
  243. clearTimeout(timeout);
  244. timeout = setTimeout(function() {
  245. timeout = null;
  246. if (!immediate) func.apply(context, args);
  247. }, wait);
  248. if (immediate && !timeout) func.apply(context, args);
  249. };
  250. };
  251. })();