app.js 8.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240
  1. /*=========================================================================================
  2. File Name: app.js
  3. Description: Template related app JS.
  4. ----------------------------------------------------------------------------------------
  5. Item Name: Robust - Responsive Admin Theme
  6. Version: 1.2
  7. Author: GeeksLabs
  8. Author URL: http://www.themeforest.net/user/geekslabs
  9. ==========================================================================================*/
  10. (function(window, document, $) {
  11. 'use strict';
  12. var $html = $('html');
  13. var $body = $('body');
  14. $(window).on('load',function(){
  15. var rtl;
  16. if($('html').data('textdirection') == 'rtl'){
  17. rtl = true;
  18. }
  19. setTimeout(function(){
  20. $html.removeClass('loading').addClass('loaded');
  21. }, 1200);
  22. $.app.menu.init();
  23. // Navigation configurations
  24. var config = {
  25. speed: 300 // set speed to expand / collpase menu
  26. };
  27. if($.app.nav.initialized === false){
  28. $.app.nav.init(config);
  29. }
  30. Unison.on('change', function(bp) {
  31. $.app.menu.change();
  32. });
  33. // Tooltip Initialization
  34. $('[data-toggle="tooltip"]').tooltip({
  35. container:'body'
  36. });
  37. // Collapsible Card
  38. $('a[data-action="collapse"]').on('click',function(e){
  39. e.preventDefault();
  40. $(this).closest('.card').children('.card-body').collapse('toggle');
  41. $(this).closest('.card').find('[data-action="collapse"] i').toggleClass('icon-minus4 icon-plus4');
  42. });
  43. // Toggle fullscreen
  44. $('a[data-action="expand"]').on('click',function(e){
  45. e.preventDefault();
  46. $(this).closest('.card').find('[data-action="expand"] i').toggleClass('icon-expand2 icon-contract');
  47. $(this).closest('.card').toggleClass('card-fullscreen');
  48. });
  49. // Notifications & messages scrollable
  50. if($('.scrollable-container').length > 0){
  51. $('.scrollable-container').perfectScrollbar({
  52. theme:"dark"
  53. });
  54. }
  55. // Reload Card
  56. $('a[data-action="reload"]').on('click',function(){
  57. var block_ele = $(this).closest('.card');
  58. // Block Element
  59. block_ele.block({
  60. message: '<div class="icon-spinner9 icon-spin icon-lg"></div>',
  61. timeout: 2000, //unblock after 2 seconds
  62. overlayCSS: {
  63. backgroundColor: '#FFF',
  64. cursor: 'wait',
  65. },
  66. css: {
  67. border: 0,
  68. padding: 0,
  69. backgroundColor: 'none'
  70. }
  71. });
  72. });
  73. // Close Card
  74. $('a[data-action="close"]').on('click',function(){
  75. $(this).closest('.card').removeClass().slideUp('fast');
  76. });
  77. // Match the height of each card in a row
  78. setTimeout(function(){
  79. $('.row.match-height').each(function() {
  80. $(this).find('.card').not('.card .card').matchHeight(); // Not .card .card prevents collapsible cards from taking height
  81. });
  82. },500);
  83. $('.card .heading-elements a[data-action="collapse"]').on('click',function(){
  84. var $this = $(this),
  85. card = $this.closest('.card');
  86. var cardHeight;
  87. if(parseInt(card[0].style.height,10) > 0){
  88. cardHeight = card.css('height');
  89. card.css('height','').attr('data-height', cardHeight);
  90. }
  91. else{
  92. if(card.data('height')){
  93. cardHeight = card.data('height');
  94. card.css('height',cardHeight).attr('data-height', '');
  95. }
  96. }
  97. });
  98. // Add open class to parent list item if subitem is active except compact menu
  99. var menuType = $body.data('menu');
  100. if(menuType != 'vertical-compact-menu' && menuType != 'horizontal-menu' && menuType != 'horizontal-top-icon-menu'){
  101. $(".main-menu-content").find('li.active').parents('li').addClass('open');
  102. }
  103. if(menuType == 'vertical-compact-menu' || menuType == 'horizontal-menu' || menuType == 'horizontal-top-icon-menu'){
  104. $(".main-menu-content").find('li.active').parents('li:not(.nav-item)').addClass('open');
  105. $(".main-menu-content").find('li.active').parents('li').addClass('active');
  106. }
  107. //card heading actions buttons small screen support
  108. $(".heading-elements-toggle").on("click",function(){
  109. $(this).parent().children(".heading-elements").toggleClass("visible");
  110. });
  111. // Dynamic height for the chartjs div for the chart animations to work
  112. var chartjsDiv = $('.chartjs'),
  113. canvasHeight = chartjsDiv.children('canvas').attr('height');
  114. chartjsDiv.css('height', canvasHeight);
  115. if($('body').hasClass('boxed-layout')){
  116. if($('body').hasClass('vertical-overlay-menu') || $('body').hasClass('vertical-compact-menu')){
  117. var menuWidth= $('.main-menu').width();
  118. var contentPosition = $('.app-content').position().left;
  119. var menuPositionAdjust = contentPosition-menuWidth;
  120. if($('body').hasClass('menu-flipped')){
  121. $('.main-menu').css('right',menuPositionAdjust+'px');
  122. }else{
  123. $('.main-menu').css('left',menuPositionAdjust+'px');
  124. }
  125. }
  126. }
  127. });
  128. $(document).on('click', '.menu-toggle', function(e) {
  129. e.preventDefault();
  130. // Toggle menu
  131. $.app.menu.toggle();
  132. return false;
  133. });
  134. $(document).on('click', '.open-navbar-container', function(e) {
  135. var currentBreakpoint = Unison.fetch.now();
  136. // Init drilldown on small screen
  137. $.app.menu.drillDownMenu(currentBreakpoint.name);
  138. // return false;
  139. });
  140. $(document).on('click', '.main-menu-footer .footer-toggle', function(e) {
  141. e.preventDefault();
  142. $(this).find('i').toggleClass('pe-is-i-angle-down pe-is-i-angle-up');
  143. $('.main-menu-footer').toggleClass('footer-close footer-open');
  144. return false;
  145. });
  146. // Add Children Class
  147. $('.navigation').find('li').has('ul').addClass('has-sub');
  148. $('.carousel').carousel({
  149. interval: 2000
  150. });
  151. // Page full screen
  152. $('.nav-link-expand').on('click', function(e) {
  153. if (typeof screenfull != 'undefined'){
  154. if (screenfull.enabled) {
  155. screenfull.toggle();
  156. }
  157. }
  158. });
  159. if (typeof screenfull != 'undefined'){
  160. if (screenfull.enabled) {
  161. $(document).on(screenfull.raw.fullscreenchange, function(){
  162. if(screenfull.isFullscreen){
  163. $('.nav-link-expand').find('i').toggleClass('icon-contract icon-expand2');
  164. }
  165. else{
  166. $('.nav-link-expand').find('i').toggleClass('icon-expand2 icon-contract');
  167. }
  168. });
  169. }
  170. }
  171. // Update manual scroller when window is resized
  172. $(window).resize(function() {
  173. $.app.menu.manualScroller.updateHeight();
  174. });
  175. // TODO : Tabs dropdown fix, remove this code once fixed in bootstrap 4.
  176. $('.nav.nav-tabs a.dropdown-item', '.nav.nav-tabs a.dropdown-item').on('click',function(){
  177. var $this = $(this),
  178. href = $this.attr('href');
  179. var tabs = $this.closest('.nav');
  180. tabs.find('.nav-link').removeClass('active');
  181. $this.closest('.nav-item').find('.nav-link').addClass('active');
  182. $this.closest('.dropdown-menu').find('.dropdown-item').removeClass('active');
  183. $this.addClass('active');
  184. tabs.next().find(href).siblings('.tab-pane').removeClass('active in').attr('aria-expanded',false);
  185. $(href).addClass('active in').attr('aria-expanded','true');
  186. });
  187. $('#sidebar-page-navigation').on('click', 'a.nav-link', function(e){
  188. e.preventDefault();
  189. e.stopPropagation();
  190. var $this = $(this),
  191. href= $this.attr('href');
  192. var offset = $(href).offset();
  193. var scrollto = offset.top - 80; // minus fixed header height
  194. $('html, body').animate({scrollTop:scrollto}, 0);
  195. setTimeout(function(){
  196. $this.parent('.nav-item').siblings('.nav-item').children('.nav-link').removeClass('active');
  197. $this.addClass('active');
  198. }, 100);
  199. });
  200. })(window, document, jQuery);