/** * Xenon Main * * Theme by: www.laborator.co **/ var public_vars = public_vars || {}; ;(function($, window, undefined){ "use strict"; $(document).ready(function() { // Main Vars public_vars.$body = $("body"); public_vars.$pageContainer = public_vars.$body.find(".page-container"); public_vars.$chat = public_vars.$pageContainer.find("#chat"); public_vars.$sidebarMenu = public_vars.$pageContainer.find('.sidebar-menu'); public_vars.$sidebarProfile = public_vars.$sidebarMenu.find('.sidebar-user-info'); public_vars.$mainMenu = public_vars.$sidebarMenu.find('.main-menu'); public_vars.$horizontalNavbar = public_vars.$body.find('.navbar.horizontal-menu'); public_vars.$horizontalMenu = public_vars.$horizontalNavbar.find('.navbar-nav'); public_vars.$mainContent = public_vars.$pageContainer.find('.main-content'); public_vars.$mainFooter = public_vars.$body.find('footer.main-footer'); public_vars.$userInfoMenuHor = public_vars.$body.find('.navbar.horizontal-menu'); public_vars.$userInfoMenu = public_vars.$body.find('nav.navbar.user-info-navbar'); public_vars.$settingsPane = public_vars.$body.find('.settings-pane'); public_vars.$settingsPaneIn = public_vars.$settingsPane.find('.settings-pane-inner'); public_vars.wheelPropagation = true; // used in Main menu (sidebar) public_vars.$pageLoadingOverlay = public_vars.$body.find('.page-loading-overlay'); public_vars.defaultColorsPalette = ['#68b828','#7c38bc','#0e62c7','#fcd036','#4fcdfc','#00b19d','#ff6264','#f7aa47']; // Page Loading Overlay if(public_vars.$pageLoadingOverlay.length) { $(window).load(function() { public_vars.$pageLoadingOverlay.addClass('loaded'); }); } window.onerror = function() { // failsafe remove loading overlay public_vars.$pageLoadingOverlay.addClass('loaded'); } // Setup Sidebar Menu setup_sidebar_menu(); // Setup Horizontal Menu setup_horizontal_menu(); // Sticky Footer if(public_vars.$mainFooter.hasClass('sticky')) { stickFooterToBottom(); $(window).on('xenon.resized', stickFooterToBottom); } // Perfect Scrollbar if($.isFunction($.fn.perfectScrollbar)) { if(public_vars.$sidebarMenu.hasClass('fixed')) ps_init(); $(".ps-scrollbar").each(function(i, el) { var $el = $(el); if($el.hasClass('ps-scroll-down')) { $el.scrollTop($el.prop('scrollHeight')); } $el.perfectScrollbar({ wheelPropagation: false }); }); // Chat Scrollbar var $chat_inner = public_vars.$pageContainer.find('#chat .chat-inner'); if($chat_inner.parent().hasClass('fixed')) $chat_inner.css({maxHeight: $(window).height()}).perfectScrollbar(); // User info opening dropdown trigger PS update $(".dropdown:has(.ps-scrollbar)").each(function(i, el) { var $scrollbar = $(this).find('.ps-scrollbar'); $(this).on('click', '[data-toggle="dropdown"]', function(ev) { ev.preventDefault(); setTimeout(function() { $scrollbar.perfectScrollbar('update'); }, 1); }); }); // Scrollable $("div.scrollable").each(function(i, el) { var $this = $(el), max_height = parseInt(attrDefault($this, 'max-height', 200), 10); max_height = max_height < 0 ? 200 : max_height; $this.css({maxHeight: max_height}).perfectScrollbar({ wheelPropagation: true }); }); } // User info search button var $uim_search_form = $(".user-info-menu .search-form, .nav.navbar-right .search-form"); $uim_search_form.each(function(i, el) { var $uim_search_input = $(el).find('.form-control'); $(el).on('click', '.btn', function(ev) { if($uim_search_input.val().trim().length == 0) { jQuery(el).addClass('focused'); setTimeout(function(){ $uim_search_input.focus(); }, 100); return false; } }); $uim_search_input.on('blur', function() { jQuery(el).removeClass('focused'); }); }); // Fixed Footer if(public_vars.$mainFooter.hasClass('fixed')) { public_vars.$mainContent.css({ paddingBottom: public_vars.$mainFooter.outerHeight(true) }); } // Go to top links $('body').on('click', 'a[rel="go-top"]', function(ev) { ev.preventDefault(); var obj = {pos: $(window).scrollTop()}; TweenLite.to(obj, .3, {pos: 0, ease:Power4.easeOut, onUpdate: function() { $(window).scrollTop(obj.pos); }}); }); // User info navbar equal heights if(public_vars.$userInfoMenu.length) { public_vars.$userInfoMenu.find('.user-info-menu > li').css({ minHeight: public_vars.$userInfoMenu.outerHeight() - 1 }); } // Autosize if($.isFunction($.fn.autosize)) { $(".autosize, .autogrow").autosize(); } // Custom Checkboxes & radios cbr_replace(); // Auto hidden breadcrumbs $(".breadcrumb.auto-hidden").each(function(i, el) { var $bc = $(el), $as = $bc.find('li a'), collapsed_width = $as.width(), expanded_width = 0; $as.each(function(i, el) { var $a = $(el); expanded_width = $a.outerWidth(true) + 5; $a.addClass('collapsed').width(expanded_width); $a.hover(function() { $a.removeClass('collapsed'); }, function() { $a.addClass('collapsed'); }); }); }); // Close Modal on Escape Keydown $(window).on('keydown', function(ev) { // Escape if(ev.keyCode == 27) { // Close opened modal if(public_vars.$body.hasClass('modal-open')) $(".modal-open .modal:visible").modal('hide'); } }); // Minimal Addon focus interaction $(".input-group.input-group-minimal:has(.form-control)").each(function(i, el) { var $this = $(el), $fc = $this.find('.form-control'); $fc.on('focus', function() { $this.addClass('focused'); }).on('blur', function() { $this.removeClass('focused'); }); }); // Spinner $(".input-group.spinner").each(function(i, el) { var $ig = $(el), $dec = $ig.find('[data-type="decrement"]'), $inc = $ig.find('[data-type="increment"]'), $inp = $ig.find('.form-control'), step = attrDefault($ig, 'step', 1), min = attrDefault($ig, 'min', 0), max = attrDefault($ig, 'max', 0), umm = min < max; $dec.on('click', function(ev) { ev.preventDefault(); var num = new Number($inp.val()) - step; if(umm && num <= min) { num = min; } $inp.val(num); }); $inc.on('click', function(ev) { ev.preventDefault(); var num = new Number($inp.val()) + step; if(umm && num >= max) { num = max; } $inp.val(num); }); }); // Select2 Dropdown replacement if($.isFunction($.fn.select2)) { $(".select2").each(function(i, el) { var $this = $(el), opts = { allowClear: attrDefault($this, 'allowClear', false) }; $this.select2(opts); $this.addClass('visible'); //$this.select2("open"); }); if($.isFunction($.fn.niceScroll)) { $(".select2-results").niceScroll({ cursorcolor: '#d4d4d4', cursorborder: '1px solid #ccc', railpadding: {right: 3} }); } } // SelectBoxIt Dropdown replacement if($.isFunction($.fn.selectBoxIt)) { $("select.selectboxit").each(function(i, el) { var $this = $(el), opts = { showFirstOption: attrDefault($this, 'first-option', true), 'native': attrDefault($this, 'native', false), defaultText: attrDefault($this, 'text', ''), }; $this.addClass('visible'); $this.selectBoxIt(opts); }); } // Datepicker if($.isFunction($.fn.datepicker)) { $(".datepicker").each(function(i, el) { var $this = $(el), opts = { format: attrDefault($this, 'format', 'mm/dd/yyyy'), startDate: attrDefault($this, 'startDate', ''), endDate: attrDefault($this, 'endDate', ''), daysOfWeekDisabled: attrDefault($this, 'disabledDays', ''), startView: attrDefault($this, 'startView', 0), rtl: rtl() }, $n = $this.next(), $p = $this.prev(); $this.datepicker(opts); if($n.is('.input-group-addon') && $n.has('a')) { $n.on('click', function(ev) { ev.preventDefault(); $this.datepicker('show'); }); } if($p.is('.input-group-addon') && $p.has('a')) { $p.on('click', function(ev) { ev.preventDefault(); $this.datepicker('show'); }); } }); } // Date Range Picker if($.isFunction($.fn.daterangepicker)) { $(".daterange").each(function(i, el) { // Change the range as you desire var ranges = { 'Today': [moment(), moment()], 'Yesterday': [moment().subtract('days', 1), moment().subtract('days', 1)], 'Last 7 Days': [moment().subtract('days', 6), moment()], 'Last 30 Days': [moment().subtract('days', 29), moment()], 'This Month': [moment().startOf('month'), moment().endOf('month')], 'Last Month': [moment().subtract('month', 1).startOf('month'), moment().subtract('month', 1).endOf('month')] }; var $this = $(el), opts = { format: attrDefault($this, 'format', 'MM/DD/YYYY'), timePicker: attrDefault($this, 'timePicker', false), timePickerIncrement: attrDefault($this, 'timePickerIncrement', false), separator: attrDefault($this, 'separator', ' - '), }, min_date = attrDefault($this, 'minDate', ''), max_date = attrDefault($this, 'maxDate', ''), start_date = attrDefault($this, 'startDate', ''), end_date = attrDefault($this, 'endDate', ''); if($this.hasClass('add-ranges')) { opts['ranges'] = ranges; } if(min_date.length) { opts['minDate'] = min_date; } if(max_date.length) { opts['maxDate'] = max_date; } if(start_date.length) { opts['startDate'] = start_date; } if(end_date.length) { opts['endDate'] = end_date; } $this.daterangepicker(opts, function(start, end) { var drp = $this.data('daterangepicker'); if($this.is('[data-callback]')) { //daterange_callback(start, end); callback_test(start, end); } if($this.hasClass('daterange-inline')) { $this.find('span').html(start.format(drp.format) + drp.separator + end.format(drp.format)); } }); if(typeof opts['ranges'] == 'object') { $this.data('daterangepicker').container.removeClass('show-calendar'); } }); } // Timepicker if($.isFunction($.fn.timepicker)) { $(".timepicker").each(function(i, el) { var $this = $(el), opts = { template: attrDefault($this, 'template', false), showSeconds: attrDefault($this, 'showSeconds', false), defaultTime: attrDefault($this, 'defaultTime', 'current'), showMeridian: attrDefault($this, 'showMeridian', true), minuteStep: attrDefault($this, 'minuteStep', 15), secondStep: attrDefault($this, 'secondStep', 15) }, $n = $this.next(), $p = $this.prev(); $this.timepicker(opts); if($n.is('.input-group-addon') && $n.has('a')) { $n.on('click', function(ev) { ev.preventDefault(); $this.timepicker('showWidget'); }); } if($p.is('.input-group-addon') && $p.has('a')) { $p.on('click', function(ev) { ev.preventDefault(); $this.timepicker('showWidget'); }); } }); } // Colorpicker if($.isFunction($.fn.colorpicker)) { $(".colorpicker").each(function(i, el) { var $this = $(el), opts = { }, $n = $this.next(), $p = $this.prev(), $preview = $this.siblings('.input-group-addon').find('.color-preview'); $this.colorpicker(opts); if($n.is('.input-group-addon') && $n.has('a')) { $n.on('click', function(ev) { ev.preventDefault(); $this.colorpicker('show'); }); } if($p.is('.input-group-addon') && $p.has('a')) { $p.on('click', function(ev) { ev.preventDefault(); $this.colorpicker('show'); }); } if($preview.length) { $this.on('changeColor', function(ev){ $preview.css('background-color', ev.color.toHex()); }); if($this.val().length) { $preview.css('background-color', $this.val()); } } }); } // Form Validation if($.isFunction($.fn.validate)) { $("form.validate").each(function(i, el) { var $this = $(el), opts = { rules: {}, messages: {}, errorElement: 'span', errorClass: 'validate-has-error', highlight: function (element) { $(element).closest('.form-group').addClass('validate-has-error'); }, unhighlight: function (element) { $(element).closest('.form-group').removeClass('validate-has-error'); }, errorPlacement: function (error, element) { if(element.closest('.has-switch').length) { error.insertAfter(element.closest('.has-switch')); } else if(element.parent('.checkbox, .radio').length || element.parent('.input-group').length) { error.insertAfter(element.parent()); } else { error.insertAfter(element); } } }, $fields = $this.find('[data-validate]'); $fields.each(function(j, el2) { var $field = $(el2), name = $field.attr('name'), validate = attrDefault($field, 'validate', '').toString(), _validate = validate.split(','); for(var k in _validate) { var rule = _validate[k], params, message; if(typeof opts['rules'][name] == 'undefined') { opts['rules'][name] = {}; opts['messages'][name] = {}; } if($.inArray(rule, ['required', 'url', 'email', 'number', 'date', 'creditcard']) != -1) { opts['rules'][name][rule] = true; message = $field.data('message-' + rule); if(message) { opts['messages'][name][rule] = message; } } // Parameter Value (#1 parameter) else if(params = rule.match(/(\w+)\[(.*?)\]/i)) { if($.inArray(params[1], ['min', 'max', 'minlength', 'maxlength', 'equalTo']) != -1) { opts['rules'][name][params[1]] = params[2]; message = $field.data('message-' + params[1]); if(message) { opts['messages'][name][params[1]] = message; } } } } }); $this.validate(opts); }); } // Input Mask if($.isFunction($.fn.inputmask)) { $("[data-mask]").each(function(i, el) { var $this = $(el), mask = $this.data('mask').toString(), opts = { numericInput: attrDefault($this, 'numeric', false), radixPoint: attrDefault($this, 'radixPoint', ''), rightAlign: attrDefault($this, 'numericAlign', 'left') == 'right' }, placeholder = attrDefault($this, 'placeholder', ''), is_regex = attrDefault($this, 'isRegex', ''); if(placeholder.length) { opts[placeholder] = placeholder; } switch(mask.toLowerCase()) { case "phone": mask = "(999) 999-9999"; break; case "currency": case "rcurrency": var sign = attrDefault($this, 'sign', '$');; mask = "999,999,999.99"; if($this.data('mask').toLowerCase() == 'rcurrency') { mask += ' ' + sign; } else { mask = sign + ' ' + mask; } opts.numericInput = true; opts.rightAlignNumerics = false; opts.radixPoint = '.'; break; case "email": mask = 'Regex'; opts.regex = "[a-zA-Z0-9._%-]+@[a-zA-Z0-9-]+\\.[a-zA-Z]{2,4}"; break; case "fdecimal": mask = 'decimal'; $.extend(opts, { autoGroup : true, groupSize : 3, radixPoint : attrDefault($this, 'rad', '.'), groupSeparator : attrDefault($this, 'dec', ',') }); } if(is_regex) { opts.regex = mask; mask = 'Regex'; } $this.inputmask(mask, opts); }); } // Form Wizard if($.isFunction($.fn.bootstrapWizard)) { $(".form-wizard").each(function(i, el) { var $this = $(el), $tabs = $this.find('> .tabs > li'), $progress = $this.find(".progress-indicator"), _index = $this.find('> ul > li.active').index(); // Validation var checkFormWizardValidaion = function(tab, navigation, index) { if($this.hasClass('validate')) { var $valid = $this.valid(); if( ! $valid) { $this.data('validator').focusInvalid(); return false; } } return true; }; // Setup Progress if(_index > 0) { $progress.css({width: _index/$tabs.length * 100 + '%'}); $tabs.removeClass('completed').slice(0, _index).addClass('completed'); } $this.bootstrapWizard({ tabClass: "", onTabShow: function($tab, $navigation, index) { var pct = $tabs.eq(index).position().left / $tabs.parent().width() * 100; $tabs.removeClass('completed').slice(0, index).addClass('completed'); $progress.css({width: pct + '%'}); }, onNext: checkFormWizardValidaion, onTabClick: checkFormWizardValidaion }); $this.data('bootstrapWizard').show( _index ); $this.find('.pager a').on('click', function(ev) { ev.preventDefault(); }); }); } // Slider if($.isFunction($.fn.slider)) { $(".slider").each(function(i, el) { var $this = $(el), $label_1 = $(''), $label_2 = $label_1.clone(), orientation = attrDefault($this, 'vertical', 0) != 0 ? 'vertical' : 'horizontal', prefix = attrDefault($this, 'prefix', ''), postfix = attrDefault($this, 'postfix', ''), fill = attrDefault($this, 'fill', ''), $fill = $(fill), step = attrDefault($this, 'step', 1), value = attrDefault($this, 'value', 5), min = attrDefault($this, 'min', 0), max = attrDefault($this, 'max', 100), min_val = attrDefault($this, 'min-val', 10), max_val = attrDefault($this, 'max-val', 90), is_range = $this.is('[data-min-val]') || $this.is('[data-max-val]'), reps = 0; // Range Slider Options if(is_range) { $this.slider({ range: true, orientation: orientation, min: min, max: max, values: [min_val, max_val], step: step, slide: function(e, ui) { var min_val = (prefix ? prefix : '') + ui.values[0] + (postfix ? postfix : ''), max_val = (prefix ? prefix : '') + ui.values[1] + (postfix ? postfix : ''); $label_1.html( min_val ); $label_2.html( max_val ); if(fill) $fill.val(min_val + ',' + max_val); reps++; }, change: function(ev, ui) { if(reps == 1) { var min_val = (prefix ? prefix : '') + ui.values[0] + (postfix ? postfix : ''), max_val = (prefix ? prefix : '') + ui.values[1] + (postfix ? postfix : ''); $label_1.html( min_val ); $label_2.html( max_val ); if(fill) $fill.val(min_val + ',' + max_val); } reps = 0; } }); var $handles = $this.find('.ui-slider-handle'); $label_1.html((prefix ? prefix : '') + min_val + (postfix ? postfix : '')); $handles.first().append( $label_1 ); $label_2.html((prefix ? prefix : '') + max_val+ (postfix ? postfix : '')); $handles.last().append( $label_2 ); } // Normal Slider else { $this.slider({ range: attrDefault($this, 'basic', 0) ? false : "min", orientation: orientation, min: min, max: max, value: value, step: step, slide: function(ev, ui) { var val = (prefix ? prefix : '') + ui.value + (postfix ? postfix : ''); $label_1.html( val ); if(fill) $fill.val(val); reps++; }, change: function(ev, ui) { if(reps == 1) { var val = (prefix ? prefix : '') + ui.value + (postfix ? postfix : ''); $label_1.html( val ); if(fill) $fill.val(val); } reps = 0; } }); var $handles = $this.find('.ui-slider-handle'); //$fill = $('
'); $label_1.html((prefix ? prefix : '') + value + (postfix ? postfix : '')); $handles.html( $label_1 ); //$handles.parent().prepend( $fill ); //$fill.width($handles.get(0).style.left); } }) } // jQuery Knob if($.isFunction($.fn.knob)) { $(".knob").knob({ change: function (value) { }, release: function (value) { }, cancel: function () { }, draw: function () { if (this.$.data('skin') == 'tron') { var a = this.angle(this.cv) // Angle , sa = this.startAngle // Previous start angle , sat = this.startAngle // Start angle , ea // Previous end angle , eat = sat + a // End angle , r = 1; this.g.lineWidth = this.lineWidth; this.o.cursor && (sat = eat - 0.3) && (eat = eat + 0.3); if (this.o.displayPrevious) { ea = this.startAngle + this.angle(this.v); this.o.cursor && (sa = ea - 0.3) && (ea = ea + 0.3); this.g.beginPath(); this.g.strokeStyle = this.pColor; this.g.arc(this.xy, this.xy, this.radius - this.lineWidth, sa, ea, false); this.g.stroke(); } this.g.beginPath(); this.g.strokeStyle = r ? this.o.fgColor : this.fgColor; this.g.arc(this.xy, this.xy, this.radius - this.lineWidth, sat, eat, false); this.g.stroke(); this.g.lineWidth = 2; this.g.beginPath(); this.g.strokeStyle = this.o.fgColor; this.g.arc(this.xy, this.xy, this.radius - this.lineWidth + 1 + this.lineWidth * 2 / 3, 0, 2 * Math.PI, false); this.g.stroke(); return false; } } }); } // Wysiwyg Editor if($.isFunction($.fn.wysihtml5)) { $(".wysihtml5").each(function(i, el) { var $this = $(el), stylesheets = attrDefault($this, 'stylesheet-url', '') $(".wysihtml5").wysihtml5({ size: 'white', stylesheets: stylesheets.split(','), "html": attrDefault($this, 'html', true), "color": attrDefault($this, 'colors', true), }); }); } // CKeditor WYSIWYG if($.isFunction($.fn.ckeditor)) { $(".ckeditor").ckeditor({ contentsLangDirection: rtl() ? 'rtl' : 'ltr' }); } // Dropzone is prezent if(typeof Dropzone != 'undefined') { Dropzone.autoDiscover = false; $(".dropzone[action]").each(function(i, el) { $(el).dropzone(); }); } // Tocify Table if($.isFunction($.fn.tocify) && $("#toc").length) { $("#toc").tocify({ context: '.tocify-content', selectors: "h2,h3,h4,h5" }); var $this = $(".tocify"), watcher = scrollMonitor.create($this.get(0)); $this.width( $this.parent().width() ); watcher.lock(); watcher.stateChange(function() { $($this.get(0)).toggleClass('fixed', this.isAboveViewport) }); } // Login Form Label Focusing $(".login-form .form-group:has(label)").each(function(i, el) { var $this = $(el), $label = $this.find('label'), $input = $this.find('.form-control'); $input.on('focus', function() { $this.addClass('is-focused'); }); $input.on('keydown', function() { $this.addClass('is-focused'); }); $input.on('blur', function() { $this.removeClass('is-focused'); if($input.val().trim().length > 0) { $this.addClass('is-focused'); } }); $label.on('click', function() { $input.focus(); }); if($input.val().trim().length > 0) { $this.addClass('is-focused'); } }); }); // Enable/Disable Resizable Event var wid = 0; $(window).resize(function() { clearTimeout(wid); wid = setTimeout(trigger_resizable, 200); }); })(jQuery, window); // Sideber Menu Setup function var sm_duration = .2, sm_transition_delay = 150; function setup_sidebar_menu() { if(public_vars.$sidebarMenu.length) { var $items_with_subs = public_vars.$sidebarMenu.find('li:has(> ul)'), toggle_others = public_vars.$sidebarMenu.hasClass('toggle-others'); $items_with_subs.filter('.active').addClass('expanded'); // On larger screens collapse sidebar when the window is tablet screen if(is('largescreen') && public_vars.$sidebarMenu.hasClass('collapsed') == false) { $(window).on('resize', function() { if(is('tabletscreen')) { public_vars.$sidebarMenu.addClass('collapsed'); ps_destroy(); } else if(is('largescreen')) { public_vars.$sidebarMenu.removeClass('collapsed'); ps_init(); } }); } $items_with_subs.each(function(i, el) { var $li = jQuery(el), $a = $li.children('a'), $sub = $li.children('ul'); $li.addClass('has-sub'); $a.on('click', function(ev) { ev.preventDefault(); if(toggle_others) { sidebar_menu_close_items_siblings($li); } if($li.hasClass('expanded') || $li.hasClass('opened')) sidebar_menu_item_collapse($li, $sub); else sidebar_menu_item_expand($li, $sub); }); }); } } function sidebar_menu_item_expand($li, $sub) { if($li.data('is-busy') || ($li.parent('.main-menu').length && public_vars.$sidebarMenu.hasClass('collapsed'))) return; $li.addClass('expanded').data('is-busy', true); $sub.show(); var $sub_items = $sub.children(), sub_height = $sub.outerHeight(), win_y = jQuery(window).height(), total_height = $li.outerHeight(), current_y = public_vars.$sidebarMenu.scrollTop(), item_max_y = $li.position().top + current_y, fit_to_viewpport = public_vars.$sidebarMenu.hasClass('fit-in-viewport'); $sub_items.addClass('is-hidden'); $sub.height(0); TweenMax.to($sub, sm_duration, {css: {height: sub_height}, onUpdate: ps_update, onComplete: function(){ $sub.height(''); }}); var interval_1 = $li.data('sub_i_1'), interval_2 = $li.data('sub_i_2'); window.clearTimeout(interval_1); interval_1 = setTimeout(function() { $sub_items.each(function(i, el) { var $sub_item = jQuery(el); $sub_item.addClass('is-shown'); }); var finish_on = sm_transition_delay * $sub_items.length, t_duration = parseFloat($sub_items.eq(0).css('transition-duration')), t_delay = parseFloat($sub_items.last().css('transition-delay')); if(t_duration && t_delay) { finish_on = (t_duration + t_delay) * 1000; } // In the end window.clearTimeout(interval_2); interval_2 = setTimeout(function() { $sub_items.removeClass('is-hidden is-shown'); }, finish_on); $li.data('is-busy', false); }, 0); $li.data('sub_i_1', interval_1), $li.data('sub_i_2', interval_2); } function sidebar_menu_item_collapse($li, $sub) { if($li.data('is-busy')) return; var $sub_items = $sub.children(); $li.removeClass('expanded').data('is-busy', true); $sub_items.addClass('hidden-item'); TweenMax.to($sub, sm_duration, {css: {height: 0}, onUpdate: ps_update, onComplete: function() { $li.data('is-busy', false).removeClass('opened'); $sub.attr('style', '').hide(); $sub_items.removeClass('hidden-item'); $li.find('li.expanded ul').attr('style', '').hide().parent().removeClass('expanded'); ps_update(true); }}); } function sidebar_menu_close_items_siblings($li) { $li.siblings().not($li).filter('.expanded, .opened').each(function(i, el) { var $_li = jQuery(el), $_sub = $_li.children('ul'); sidebar_menu_item_collapse($_li, $_sub); }); } // Horizontal Menu function setup_horizontal_menu() { if(public_vars.$horizontalMenu.length) { var $items_with_subs = public_vars.$horizontalMenu.find('li:has(> ul)'), click_to_expand = public_vars.$horizontalMenu.hasClass('click-to-expand'); if(click_to_expand) { public_vars.$mainContent.add( public_vars.$sidebarMenu ).on('click', function(ev) { $items_with_subs.removeClass('hover'); }); } $items_with_subs.each(function(i, el) { var $li = jQuery(el), $a = $li.children('a'), $sub = $li.children('ul'), is_root_element = $li.parent().is('.navbar-nav'); $li.addClass('has-sub'); // Mobile Only $a.on('click', function(ev) { if(isxs()) { ev.preventDefault(); // Automatically will toggle other menu items in mobile view if(true) { sidebar_menu_close_items_siblings($li); } if($li.hasClass('expanded') || $li.hasClass('opened')) sidebar_menu_item_collapse($li, $sub); else sidebar_menu_item_expand($li, $sub); } }); // Click To Expand if(click_to_expand) { $a.on('click', function(ev) { ev.preventDefault(); if(isxs()) return; // For parents only if(is_root_element) { $items_with_subs.filter(function(i, el){ return jQuery(el).parent().is('.navbar-nav'); }).not($li).removeClass('hover'); $li.toggleClass('hover'); } // Sub menus else { var sub_height; // To Expand if($li.hasClass('expanded') == false) { $li.addClass('expanded'); $sub.addClass('is-visible'); sub_height = $sub.outerHeight(); $sub.height(0); TweenLite.to($sub, .15, {css: {height: sub_height}, ease: Sine.easeInOut, onComplete: function(){ $sub.attr('style', ''); }}); // Hide Existing in the list $li.siblings().find('> ul.is-visible').not($sub).each(function(i, el) { var $el = jQuery(el); sub_height = $el.outerHeight(); $el.removeClass('is-visible').height(sub_height); $el.parent().removeClass('expanded'); TweenLite.to($el, .15, {css: {height: 0}, onComplete: function(){ $el.attr('style', ''); }}); }); } // To Collapse else { sub_height = $sub.outerHeight(); $li.removeClass('expanded'); $sub.removeClass('is-visible').height(sub_height); TweenLite.to($sub, .15, {css: {height: 0}, onComplete: function(){ $sub.attr('style', ''); }}); } } }); } // Hover To Expand else { $li.hoverIntent({ over: function() { if(isxs()) return; if(is_root_element) { $li.addClass('hover'); } else { $sub.addClass('is-visible'); sub_height = $sub.outerHeight(); $sub.height(0); TweenLite.to($sub, .25, {css: {height: sub_height}, ease: Sine.easeInOut, onComplete: function(){ $sub.attr('style', ''); }}); } }, out: function() { if(isxs()) return; if(is_root_element) { $li.removeClass('hover'); } else { sub_height = $sub.outerHeight(); $li.removeClass('expanded'); $sub.removeClass('is-visible').height(sub_height); TweenLite.to($sub, .25, {css: {height: 0}, onComplete: function(){ $sub.attr('style', ''); }}); } }, timeout: 200, interval: is_root_element ? 10 : 100 }); } }); } } function stickFooterToBottom() { public_vars.$mainFooter.add( public_vars.$mainContent ).add( public_vars.$sidebarMenu ).attr('style', ''); if(isxs()) return false; if(public_vars.$mainFooter.hasClass('sticky')) { var win_height = jQuery(window).height(), footer_height = public_vars.$mainFooter.outerHeight(true), main_content_height = public_vars.$mainFooter.position().top + footer_height, main_content_height_only = main_content_height - footer_height, extra_height = public_vars.$horizontalNavbar.outerHeight(); if(win_height > main_content_height - parseInt(public_vars.$mainFooter.css('marginTop'), 10)) { public_vars.$mainFooter.css({ marginTop: win_height - main_content_height - extra_height }); } } } // Perfect scroll bar functions by Arlind Nushi function ps_update(destroy_init) { if(isxs()) return; if(jQuery.isFunction(jQuery.fn.perfectScrollbar)) { if(public_vars.$sidebarMenu.hasClass('collapsed')) { return; } public_vars.$sidebarMenu.find('.sidebar-menu-inner').perfectScrollbar('update'); if(destroy_init) { ps_destroy(); ps_init(); } } } function ps_init() { if(isxs()) return; if(jQuery.isFunction(jQuery.fn.perfectScrollbar)) { if(public_vars.$sidebarMenu.hasClass('collapsed') || ! public_vars.$sidebarMenu.hasClass('fixed')) { return; } public_vars.$sidebarMenu.find('.sidebar-menu-inner').perfectScrollbar({ wheelSpeed: 1, wheelPropagation: public_vars.wheelPropagation }); } } function ps_destroy() { if(jQuery.isFunction(jQuery.fn.perfectScrollbar)) { public_vars.$sidebarMenu.find('.sidebar-menu-inner').perfectScrollbar('destroy'); } } // Radio and Check box replacement by Arlind Nushi function cbr_replace() { var $inputs = jQuery('input[type="checkbox"].cbr, input[type="radio"].cbr').filter(':not(.cbr-done)'), $wrapper = '
'; $inputs.each(function(i, el) { var $el = jQuery(el), is_radio = $el.is(':radio'), is_checkbox = $el.is(':checkbox'), is_disabled = $el.is(':disabled'), styles = ['primary', 'secondary', 'success', 'danger', 'warning', 'info', 'purple', 'blue', 'red', 'gray', 'pink', 'yellow', 'orange', 'turquoise']; if( ! is_radio && ! is_checkbox) return; $el.after( $wrapper ); $el.addClass('cbr-done'); var $wrp = $el.next(); $wrp.find('.cbr-input').append( $el ); if(is_radio) $wrp.addClass('cbr-radio'); if(is_disabled) $wrp.addClass('cbr-disabled'); if($el.is(':checked')) { $wrp.addClass('cbr-checked'); } // Style apply jQuery.each(styles, function(key, val) { var cbr_class = 'cbr-' + val; if( $el.hasClass(cbr_class)) { $wrp.addClass(cbr_class); $el.removeClass(cbr_class); } }); // Events $wrp.on('click', function(ev) { if(is_radio && $el.prop('checked') || $wrp.parent().is('label')) return; if(jQuery(ev.target).is($el) == false) { $el.prop('checked', ! $el.is(':checked')); $el.trigger('change'); } }); $el.on('change', function(ev) { $wrp.removeClass('cbr-checked'); if($el.is(':checked')) $wrp.addClass('cbr-checked'); cbr_recheck(); }); }); } function cbr_recheck() { var $inputs = jQuery("input.cbr-done"); $inputs.each(function(i, el) { var $el = jQuery(el), is_radio = $el.is(':radio'), is_checkbox = $el.is(':checkbox'), is_disabled = $el.is(':disabled'), $wrp = $el.closest('.cbr-replaced'); if(is_disabled) $wrp.addClass('cbr-disabled'); if(is_radio && ! $el.prop('checked') && $wrp.hasClass('cbr-checked')) { $wrp.removeClass('cbr-checked'); } }); } // Element Attribute Helper function attrDefault($el, data_var, default_val) { if(typeof $el.data(data_var) != 'undefined') { return $el.data(data_var); } return default_val; } // Test function function callback_test() { alert("Callback function executed! No. of arguments: " + arguments.length + "\n\nSee console log for outputed of the arguments."); console.log(arguments); } // Date Formatter function date(format, timestamp) { // discuss at: http://phpjs.org/functions/date/ // original by: Carlos R. L. Rodrigues (http://www.jsfromhell.com) // original by: gettimeofday // parts by: Peter-Paul Koch (http://www.quirksmode.org/js/beat.html) // improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net) // improved by: MeEtc (http://yass.meetcweb.com) // improved by: Brad Touesnard // improved by: Tim Wiel // improved by: Bryan Elliott // improved by: David Randall // improved by: Theriault // improved by: Theriault // improved by: Brett Zamir (http://brett-zamir.me) // improved by: Theriault // improved by: Thomas Beaucourt (http://www.webapp.fr) // improved by: JT // improved by: Theriault // improved by: RafaƂ Kukawski (http://blog.kukawski.pl) // improved by: Theriault // input by: Brett Zamir (http://brett-zamir.me) // input by: majak // input by: Alex // input by: Martin // input by: Alex Wilson // input by: Haravikk // bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net) // bugfixed by: majak // bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net) // bugfixed by: Brett Zamir (http://brett-zamir.me) // bugfixed by: omid (http://phpjs.org/functions/380:380#comment_137122) // bugfixed by: Chris (http://www.devotis.nl/) // note: Uses global: php_js to store the default timezone // note: Although the function potentially allows timezone info (see notes), it currently does not set // note: per a timezone specified by date_default_timezone_set(). Implementers might use // note: this.php_js.currentTimezoneOffset and this.php_js.currentTimezoneDST set by that function // note: in order to adjust the dates in this function (or our other date functions!) accordingly // example 1: date('H:m:s \\m \\i\\s \\m\\o\\n\\t\\h', 1062402400); // returns 1: '09:09:40 m is month' // example 2: date('F j, Y, g:i a', 1062462400); // returns 2: 'September 2, 2003, 2:26 am' // example 3: date('Y W o', 1062462400); // returns 3: '2003 36 2003' // example 4: x = date('Y m d', (new Date()).getTime()/1000); // example 4: (x+'').length == 10 // 2009 01 09 // returns 4: true // example 5: date('W', 1104534000); // returns 5: '53' // example 6: date('B t', 1104534000); // returns 6: '999 31' // example 7: date('W U', 1293750000.82); // 2010-12-31 // returns 7: '52 1293750000' // example 8: date('W', 1293836400); // 2011-01-01 // returns 8: '52' // example 9: date('W Y-m-d', 1293974054); // 2011-01-02 // returns 9: '52 2011-01-02' var that = this; var jsdate, f; // Keep this here (works, but for code commented-out below for file size reasons) // var tal= []; var txt_words = [ 'Sun', 'Mon', 'Tues', 'Wednes', 'Thurs', 'Fri', 'Satur', 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December' ]; // trailing backslash -> (dropped) // a backslash followed by any character (including backslash) -> the character // empty string -> empty string var formatChr = /\\?(.?)/gi; var formatChrCb = function (t, s) { return f[t] ? f[t]() : s; }; var _pad = function (n, c) { n = String(n); while (n.length < c) { n = '0' + n; } return n; }; f = { // Day d: function () { // Day of month w/leading 0; 01..31 return _pad(f.j(), 2); }, D: function () { // Shorthand day name; Mon...Sun return f.l() .slice(0, 3); }, j: function () { // Day of month; 1..31 return jsdate.getDate(); }, l: function () { // Full day name; Monday...Sunday return txt_words[f.w()] + 'day'; }, N: function () { // ISO-8601 day of week; 1[Mon]..7[Sun] return f.w() || 7; }, S: function () { // Ordinal suffix for day of month; st, nd, rd, th var j = f.j(); var i = j % 10; if (i <= 3 && parseInt((j % 100) / 10, 10) == 1) { i = 0; } return ['st', 'nd', 'rd'][i - 1] || 'th'; }, w: function () { // Day of week; 0[Sun]..6[Sat] return jsdate.getDay(); }, z: function () { // Day of year; 0..365 var a = new Date(f.Y(), f.n() - 1, f.j()); var b = new Date(f.Y(), 0, 1); return Math.round((a - b) / 864e5); }, // Week W: function () { // ISO-8601 week number var a = new Date(f.Y(), f.n() - 1, f.j() - f.N() + 3); var b = new Date(a.getFullYear(), 0, 4); return _pad(1 + Math.round((a - b) / 864e5 / 7), 2); }, // Month F: function () { // Full month name; January...December return txt_words[6 + f.n()]; }, m: function () { // Month w/leading 0; 01...12 return _pad(f.n(), 2); }, M: function () { // Shorthand month name; Jan...Dec return f.F() .slice(0, 3); }, n: function () { // Month; 1...12 return jsdate.getMonth() + 1; }, t: function () { // Days in month; 28...31 return (new Date(f.Y(), f.n(), 0)) .getDate(); }, // Year L: function () { // Is leap year?; 0 or 1 var j = f.Y(); return j % 4 === 0 & j % 100 !== 0 | j % 400 === 0; }, o: function () { // ISO-8601 year var n = f.n(); var W = f.W(); var Y = f.Y(); return Y + (n === 12 && W < 9 ? 1 : n === 1 && W > 9 ? -1 : 0); }, Y: function () { // Full year; e.g. 1980...2010 return jsdate.getFullYear(); }, y: function () { // Last two digits of year; 00...99 return f.Y() .toString() .slice(-2); }, // Time a: function () { // am or pm return jsdate.getHours() > 11 ? 'pm' : 'am'; }, A: function () { // AM or PM return f.a() .toUpperCase(); }, B: function () { // Swatch Internet time; 000..999 var H = jsdate.getUTCHours() * 36e2; // Hours var i = jsdate.getUTCMinutes() * 60; // Minutes // Seconds var s = jsdate.getUTCSeconds(); return _pad(Math.floor((H + i + s + 36e2) / 86.4) % 1e3, 3); }, g: function () { // 12-Hours; 1..12 return f.G() % 12 || 12; }, G: function () { // 24-Hours; 0..23 return jsdate.getHours(); }, h: function () { // 12-Hours w/leading 0; 01..12 return _pad(f.g(), 2); }, H: function () { // 24-Hours w/leading 0; 00..23 return _pad(f.G(), 2); }, i: function () { // Minutes w/leading 0; 00..59 return _pad(jsdate.getMinutes(), 2); }, s: function () { // Seconds w/leading 0; 00..59 return _pad(jsdate.getSeconds(), 2); }, u: function () { // Microseconds; 000000-999000 return _pad(jsdate.getMilliseconds() * 1000, 6); }, // Timezone e: function () { // Timezone identifier; e.g. Atlantic/Azores, ... // The following works, but requires inclusion of the very large // timezone_abbreviations_list() function. /* return that.date_default_timezone_get(); */ throw 'Not supported (see source code of date() for timezone on how to add support)'; }, I: function () { // DST observed?; 0 or 1 // Compares Jan 1 minus Jan 1 UTC to Jul 1 minus Jul 1 UTC. // If they are not equal, then DST is observed. var a = new Date(f.Y(), 0); // Jan 1 var c = Date.UTC(f.Y(), 0); // Jan 1 UTC var b = new Date(f.Y(), 6); // Jul 1 // Jul 1 UTC var d = Date.UTC(f.Y(), 6); return ((a - c) !== (b - d)) ? 1 : 0; }, O: function () { // Difference to GMT in hour format; e.g. +0200 var tzo = jsdate.getTimezoneOffset(); var a = Math.abs(tzo); return (tzo > 0 ? '-' : '+') + _pad(Math.floor(a / 60) * 100 + a % 60, 4); }, P: function () { // Difference to GMT w/colon; e.g. +02:00 var O = f.O(); return (O.substr(0, 3) + ':' + O.substr(3, 2)); }, T: function () { // Timezone abbreviation; e.g. EST, MDT, ... // The following works, but requires inclusion of the very // large timezone_abbreviations_list() function. /* var abbr, i, os, _default; if (!tal.length) { tal = that.timezone_abbreviations_list(); } if (that.php_js && that.php_js.default_timezone) { _default = that.php_js.default_timezone; for (abbr in tal) { for (i = 0; i < tal[abbr].length; i++) { if (tal[abbr][i].timezone_id === _default) { return abbr.toUpperCase(); } } } } for (abbr in tal) { for (i = 0; i < tal[abbr].length; i++) { os = -jsdate.getTimezoneOffset() * 60; if (tal[abbr][i].offset === os) { return abbr.toUpperCase(); } } } */ return 'UTC'; }, Z: function () { // Timezone offset in seconds (-43200...50400) return -jsdate.getTimezoneOffset() * 60; }, // Full Date/Time c: function () { // ISO-8601 date. return 'Y-m-d\\TH:i:sP'.replace(formatChr, formatChrCb); }, r: function () { // RFC 2822 return 'D, d M Y H:i:s O'.replace(formatChr, formatChrCb); }, U: function () { // Seconds since UNIX epoch return jsdate / 1000 | 0; } }; this.date = function (format, timestamp) { that = this; jsdate = (timestamp === undefined ? new Date() : // Not provided (timestamp instanceof Date) ? new Date(timestamp) : // JS Date() new Date(timestamp * 1000) // UNIX timestamp (auto-convert to int) ); return format.replace(formatChr, formatChrCb); }; return this.date(format, timestamp); }