patashala/assets/js/neon-custom-ajax.js

2094 lines
45 KiB
JavaScript
Raw Normal View History

/**
* Neon Main JavaScript File
*
* Theme by: www.laborator.co
**/
var public_vars = public_vars || {};
;(function($, window, undefined){
"use strict";
$(document).ready(function()
{
// Sidebar Menu var
public_vars.$body = $("body");
public_vars.$pageContainer = public_vars.$body.find(".page-container");
public_vars.$chat = public_vars.$pageContainer.find('#chat');
public_vars.$horizontalMenu = public_vars.$pageContainer.find('header.navbar');
public_vars.$sidebarMenu = public_vars.$pageContainer.find('.sidebar-menu');
public_vars.$mainMenu = public_vars.$sidebarMenu.find('#main-menu');
public_vars.$mainContent = public_vars.$pageContainer.find('.main-content');
public_vars.$sidebarUserEnv = public_vars.$sidebarMenu.find('.sidebar-user-info');
public_vars.$sidebarUser = public_vars.$sidebarUserEnv.find('.user-link');
public_vars.$body.addClass('loaded');
// NiceScroll
if($.isFunction($.fn.niceScroll))
{
var nicescroll_defaults = {
cursorcolor: '#d4d4d4',
cursorborder: '1px solid #ccc',
railpadding: {right: 3},
cursorborderradius: 1,
autohidemode: true,
sensitiverail: true
};
public_vars.$body.find('.dropdown .scroller').niceScroll(nicescroll_defaults);
$(".dropdown").on("shown.bs.dropdown", function ()
{
$(".scroller").getNiceScroll().resize();
$(".scroller").getNiceScroll().show();
});
var fixed_sidebar = $(".sidebar-menu.fixed");
if(fixed_sidebar.length == 1)
{
var fs_tm = 0;
fixed_sidebar.niceScroll({
cursorcolor: '#454a54',
cursorborder: '1px solid #454a54',
railpadding: {right: 3},
railalign: 'right',
cursorborderradius: 1
});
fixed_sidebar.on('click', 'li a', function()
{
fixed_sidebar.getNiceScroll().resize();
fixed_sidebar.getNiceScroll().show();
window.clearTimeout(fs_tm);
fs_tm = setTimeout(function()
{
fixed_sidebar.getNiceScroll().resize();
}, 500);
});
}
}
// Scrollable
if($.isFunction($.fn.slimScroll))
{
$(".scrollable").each(function(i, el)
{
var $this = $(el),
height = attrDefault($this, 'height', $this.height());
if($this.is(':visible'))
{
$this.removeClass('scrollable');
if($this.height() < parseInt(height, 10))
{
height = $this.outerHeight(true) + 10;
}
$this.addClass('scrollable');
}
$this.css({maxHeight: ''}).slimScroll({
height: height,
position: attrDefault($this, 'scroll-position', 'right'),
color: attrDefault($this, 'rail-color', '#000'),
size: attrDefault($this, 'rail-width', 6),
borderRadius: attrDefault($this, 'rail-radius', 3),
opacity: attrDefault($this, 'rail-opacity', .3),
alwaysVisible: parseInt(attrDefault($this, 'autohide', 1), 10) == 1 ? false : true
});
});
}
// Panels
// Added on v1.1.4 - Fixed collapsing effect with panel tables
$(".panel-heading").each(function(i, el)
{
var $this = $(el),
$body = $this.next('table');
$body.wrap('<div class="panel-body with-table"></div>');
$body = $this.next('.with-table').next('table');
$body.wrap('<div class="panel-body with-table"></div>');
});
continueWrappingPanelTables();
// End of: Added on v1.1.4
$('body').on('click', '.panel > .panel-heading > .panel-options > a[data-rel="reload"]', function(ev)
{
ev.preventDefault();
var $this = jQuery(this).closest('.panel');
blockUI($this);
$this.addClass('reloading');
setTimeout(function()
{
unblockUI($this)
$this.removeClass('reloading');
}, 900);
}).on('click', '.panel > .panel-heading > .panel-options > a[data-rel="close"]', function(ev)
{
ev.preventDefault();
var $this = $(this),
$panel = $this.closest('.panel');
var t = new TimelineLite({
onComplete: function()
{
$panel.slideUp(function()
{
$panel.remove();
});
}
});
t.append( TweenMax.to($panel, .2, {css: {scale: 0.95}}) );
t.append( TweenMax.to($panel, .5, {css: {autoAlpha: 0, transform: "translateX(100px) scale(.95)"}}) );
}).on('click', '.panel > .panel-heading > .panel-options > a[data-rel="collapse"]', function(ev)
{
ev.preventDefault();
var $this = $(this),
$panel = $this.closest('.panel'),
$body = $panel.children('.panel-body, .table'),
do_collapse = ! $panel.hasClass('panel-collapse');
if($panel.is('[data-collapsed="1"]'))
{
$panel.attr('data-collapsed', 0);
$body.hide();
do_collapse = false;
}
if(do_collapse)
{
$body.slideUp('normal', fit_main_content_height);
$panel.addClass('panel-collapse');
}
else
{
$body.slideDown('normal', fit_main_content_height);
$panel.removeClass('panel-collapse');
}
});
// Data Toggle for Radio and Checkbox Elements
$('[data-toggle="buttons-radio"]').each(function()
{
var $buttons = $(this).children();
$buttons.each(function(i, el)
{
var $this = $(el);
$this.click(function(ev)
{
$buttons.removeClass('active');
});
});
});
$('[data-toggle="buttons-checkbox"]').each(function()
{
var $buttons = $(this).children();
$buttons.each(function(i, el)
{
var $this = $(el);
$this.click(function(ev)
{
$this.removeClass('active');
});
});
});
$('[data-loading-text]').each(function(i, el) // Temporary for demo purpose only
{
var $this = $(el);
$this.on('click', function(ev)
{
$this.button('loading');
setTimeout(function(){ $this.button('reset'); }, 1800);
});
});
// Popovers and tooltips
$('[data-toggle="popover"]').each(function(i, el)
{
var $this = $(el),
placement = attrDefault($this, 'placement', 'right'),
trigger = attrDefault($this, 'trigger', 'click'),
popover_class = $this.hasClass('popover-secondary') ? 'popover-secondary' : ($this.hasClass('popover-primary') ? 'popover-primary' : ($this.hasClass('popover-default') ? 'popover-default' : ''));
$this.popover({
placement: placement,
trigger: trigger
});
$this.on('shown.bs.popover', function(ev)
{
var $popover = $this.next();
$popover.addClass(popover_class);
});
});
$('[data-toggle="tooltip"]').each(function(i, el)
{
var $this = $(el),
placement = attrDefault($this, 'placement', 'top'),
trigger = attrDefault($this, 'trigger', 'hover'),
popover_class = $this.hasClass('tooltip-secondary') ? 'tooltip-secondary' : ($this.hasClass('tooltip-primary') ? 'tooltip-primary' : ($this.hasClass('tooltip-default') ? 'tooltip-default' : ''));
$this.tooltip({
placement: placement,
trigger: trigger
});
$this.on('shown.bs.tooltip', function(ev)
{
var $tooltip = $this.next();
$tooltip.addClass(popover_class);
});
});
// 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;
}
}
});
}
// Slider
if($.isFunction($.fn.slider))
{
$(".slider").each(function(i, el)
{
var $this = $(el),
$label_1 = $('<span class="ui-label"></span>'),
$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 opts = $this.data('uiSlider').options,
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 opts = $this.data('uiSlider').options,
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 opts = $this.data('uiSlider').options,
val = (prefix ? prefix : '') + opts.value + (postfix ? postfix : '');
$label_1.html( val );
if(fill)
$fill.val(val);
reps++;
},
change: function(ev, ui)
{
if(reps == 1)
{
var opts = $this.data('uiSlider').options,
val = (prefix ? prefix : '') + opts.value + (postfix ? postfix : '');
$label_1.html( val );
if(fill)
$fill.val(val);
}
reps = 0;
}
});
var $handles = $this.find('.ui-slider-handle');
//$fill = $('<div class="ui-fill"></div>');
$label_1.html((prefix ? prefix : '') + value + (postfix ? postfix : ''));
$handles.html( $label_1 );
//$handles.parent().prepend( $fill );
//$fill.width($handles.get(0).style.left);
}
})
}
// Radio Toggle
if($.isFunction($.fn.bootstrapSwitch))
{
$('.make-switch.is-radio').on('switch-change', function () {
$('.make-switch.is-radio').bootstrapSwitch('toggleRadioState');
});
}
// 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);
});
}
// Auto Size for Textarea
if($.isFunction($.fn.autosize))
{
$("textarea.autogrow, textarea.autosize").autosize();
}
// Tagsinput
if($.isFunction($.fn.tagsinput))
{
$(".tagsinput").tagsinput();
}
// Typeahead
if($.isFunction($.fn.typeahead))
{
$(".typeahead").each(function(i, el)
{
var $this = $(el),
opts = {
name: $this.attr('name') ? $this.attr('name') : ($this.attr('id') ? $this.attr('id') : 'tt')
};
if($this.hasClass('tagsinput'))
return;
if($this.data('local'))
{
var local = $this.data('local');
local = local.replace(/\s*,\s*/g, ',').split(',');
opts['local'] = local;
}
if($this.data('prefetch'))
{
var prefetch = $this.data('prefetch');
opts['prefetch'] = prefetch;
}
if($this.data('remote'))
{
var remote = $this.data('remote');
opts['remote'] = remote;
}
if($this.data('template'))
{
var template = $this.data('template');
opts['template'] = template;
opts['engine'] = Hogan;
}
$this.typeahead(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');
});
}
});
}
// 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 = {
//format: attrDefault($this, 'format', false)
},
$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());
}
}
});
}
// 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));
}
});
});
}
// 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', ''),
rightAlignNumerics: 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 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;
}
}
}
}
});
console.log( opts );
$this.validate(opts);
});
}
// Replaced File Input
$("input.file2[type=file]").each(function(i, el)
{
var $this = $(el),
label = attrDefault($this, 'label', 'Browse');
$this.bootstrapFileInput(label);
});
// Jasny Bootstrap | Fileinput
if($.isFunction($.fn.fileinput))
{
$(".fileinput").fileinput()
}
// Multi-select
if($.isFunction($.fn.multiSelect))
{
$(".multi-select").multiSelect();
}
// Form Wizard
if($.isFunction($.fn.bootstrapWizard))
{
$(".form-wizard").each(function(i, el)
{
var $this = $(el),
$progress = $this.find(".steps-progress div"),
_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;
};
$this.bootstrapWizard({
tabClass: "",
onTabShow: function($tab, $navigation, index)
{
setCurrentProgressTab($this, $navigation, $tab, $progress, index);
},
onNext: checkFormWizardValidaion,
onTabClick: checkFormWizardValidaion
});
$this.data('bootstrapWizard').show( _index );
/*$(window).on('neon.resize', function()
{
$this.data('bootstrapWizard').show( _index );
});*/
});
}
// Wysiwyg Editor
if($.isFunction($.fn.wysihtml5))
{
$(".wysihtml5").each(function(i, el)
{
var $this = $(el),
stylesheets = attrDefault($this, 'stylesheet-url', '')
$(".wysihtml5").wysihtml5({
stylesheets: stylesheets.split(',')
});
});
}
// CKeditor WYSIWYG
if($.isFunction($.fn.ckeditor))
{
$(".ckeditor").ckeditor({
contentsLangDirection: rtl() ? 'rtl' : 'ltr'
});
}
// Checkbox/Radio Replacement
replaceCheckboxes();
// Tile Progress
$(".tile-progress").each(function(i, el)
{
var $this = $(el),
$pct_counter = $this.find('.pct-counter'),
$progressbar = $this.find('.tile-progressbar span'),
percentage = parseFloat($progressbar.data('fill')),
pct_len = percentage.toString().length;
if(typeof scrollMonitor == 'undefined')
{
$progressbar.width(percentage + '%');
$pct_counter.html(percentage);
}
else
{
var tile_progress = scrollMonitor.create( el );
tile_progress.fullyEnterViewport(function(){
$progressbar.width(percentage +'%');
tile_progress.destroy();
var o = {pct: 0};
TweenLite.to(o, 1, {pct: percentage, ease: Quint.easeInOut, onUpdate: function()
{
var pct_str = o.pct.toString().substring(0, pct_len);
$pct_counter.html(pct_str);
}
});
});
}
});
// Tile Stats
$(".tile-stats").each(function(i, el)
{
var $this = $(el),
$num = $this.find('.num'),
start = attrDefault($num, 'start', 0),
end = attrDefault($num, 'end', 0),
prefix = attrDefault($num, 'prefix', ''),
postfix = attrDefault($num, 'postfix', ''),
duration = attrDefault($num, 'duration', 1000),
delay = attrDefault($num, 'delay', 1000);
if(start < end)
{
if(typeof scrollMonitor == 'undefined')
{
$num.html(prefix + end + postfix);
}
else
{
var tile_stats = scrollMonitor.create( el );
tile_stats.fullyEnterViewport(function(){
var o = {curr: start};
TweenLite.to(o, duration/1000, {curr: end, ease: Power1.easeInOut, delay: delay/1000, onUpdate: function()
{
$num.html(prefix + Math.round(o.curr) + postfix);
}
});
tile_stats.destroy()
});
}
}
});
// 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)
});
}
// Modal Static
public_vars.$body.on('click', '.modal[data-backdrop="static"]', function(ev)
{
if( $(ev.target).is('.modal') )
{
var $modal_dialog = $(this).find('.modal-dialog .modal-content'),
tt = new TimelineMax({paused: true});
tt.append( TweenMax.to($modal_dialog, .1, {css: {scale: 1.1}, ease: Expo.easeInOut}) );
tt.append( TweenMax.to($modal_dialog, .3, {css: {scale: 1}, ease: Back.easeOut}) );
tt.play();
}
});
// Added on v1.1
// Sidebar User Links Popup
if(public_vars.$sidebarUserEnv.length)
{
var $su_normal = public_vars.$sidebarUserEnv.find('.sui-normal'),
$su_hover = public_vars.$sidebarUserEnv.find('.sui-hover');
if($su_normal.length && $su_hover.length)
{
public_vars.$sidebarUser.on('click', function(ev)
{
ev.preventDefault();
$su_hover.addClass('visible');
});
$su_hover.on('click', '.close-sui-popup', function(ev)
{
ev.preventDefault();
$su_hover.addClass('going-invisible');
$su_hover.removeClass('visible');
setTimeout(function(){ $su_hover.removeClass('going-invisible'); }, 220);
});
}
}
// End of: Added on v1.1
// Added on v1.1.4
$(".input-spinner").each(function(i, el)
{
var $this = $(el),
$minus = $this.find('button:first'),
$plus = $this.find('button:last'),
$input = $this.find('input'),
minus_step = attrDefault($minus, 'step', -1),
plus_step = attrDefault($minus, 'step', 1),
min = attrDefault($input, 'min', null),
max = attrDefault($input, 'max', null);
$this.find('button').on('click', function(ev)
{
ev.preventDefault();
var $this = $(this),
val = $input.val(),
step = attrDefault($this, 'step', $this[0] == $minus[0] ? -1 : 1);
if( ! step.toString().match(/^[0-9-\.]+$/))
{
step = $this[0] == $minus[0] ? -1 : 1;
}
if( ! val.toString().match(/^[0-9-\.]+$/))
{
val = 0;
}
$input.val( parseFloat(val) + step ).trigger('keyup');
});
$input.keyup(function()
{
if(min != null && parseFloat($input.val()) < min)
{
$input.val(min);
}
else
if(max != null && parseFloat($input.val()) > max)
{
$input.val(max);
}
});
});
// Search Results Tabs
var $search_results_env = $(".search-results-env");
if($search_results_env.length)
{
var $sr_nav_tabs = $search_results_env.find(".nav-tabs li"),
$sr_tab_panes = $search_results_env.find('.search-results-panes .search-results-pane');
$sr_nav_tabs.find('a').on('click', function(ev)
{
ev.preventDefault();
var $this = $(this),
$tab_pane = $sr_tab_panes.filter($this.attr('href'));
$sr_nav_tabs.not($this.parent()).removeClass('active');
$this.parent().addClass('active');
$sr_tab_panes.not($tab_pane).fadeOut('fast', function()
{
$tab_pane.fadeIn('fast');
});
});
}
// End of: Added on v1.1.4
// Fit main content height
fit_main_content_height();
var fmch = 0,
fmch_fn = function(){
window.clearTimeout(fmch);
fit_main_content_height();
fmch = setTimeout(fmch_fn, 800);
};
fmch_fn();
// Apply Page Transition
onPageAppear(init_page_transitions);
});
// Enable/Disable Resizable Event
var wid = 0;
$(window).resize(function() {
clearTimeout(wid);
wid = setTimeout(trigger_resizable, 200);
});
})(jQuery, window);
/* Functions */
function fit_main_content_height()
{
var $ = jQuery;
if(public_vars.$sidebarMenu.length && public_vars.$sidebarMenu.hasClass('fixed') == false)
{
public_vars.$sidebarMenu.css('min-height', '');
public_vars.$mainContent.css('min-height', '');
if(isxs())
{
if(typeof reset_mail_container_height != 'undefined')
reset_mail_container_height();
return;
if(typeof fit_calendar_container_height != 'undefined')
reset_calendar_container_height();
return;
}
var sm_height = public_vars.$sidebarMenu.outerHeight(),
mc_height = public_vars.$mainContent.outerHeight(),
doc_height = $(document).height(),
win_height = $(window).height(),
sm_height_real = 0;
if(win_height > doc_height)
{
doc_height = win_height;
}
if(public_vars.$horizontalMenu.length > 0)
{
var hm_height = public_vars.$horizontalMenu.outerHeight();
doc_height -= hm_height;
sm_height -= hm_height;
}
public_vars.$mainContent.css('min-height', doc_height);
public_vars.$sidebarMenu.css('min-height', doc_height);
public_vars.$chat.css('min-height', doc_height);
if(typeof fit_mail_container_height != 'undefined')
fit_mail_container_height();
if(typeof fit_calendar_container_height != 'undefined')
fit_calendar_container_height();
}
}
// Sidebar Menu Setup
function setup_sidebar_menu()
{
var $ = jQuery,
$items_with_submenu = public_vars.$sidebarMenu.find('li:has(ul)'),
submenu_options = {
submenu_open_delay: 0.5,
submenu_open_easing: Sine.easeInOut,
submenu_opened_class: 'opened'
},
root_level_class = 'root-level',
is_multiopen = public_vars.$mainMenu.hasClass('multiple-expanded');
public_vars.$mainMenu.find('> li').addClass(root_level_class);
$items_with_submenu.each(function(i, el)
{
var $this = $(el),
$link = $this.find('> a'),
$submenu = $this.find('> ul');
$this.addClass('has-sub');
$link.click(function(ev)
{
ev.preventDefault();
if( ! is_multiopen && $this.hasClass(root_level_class))
{
var close_submenus = public_vars.$mainMenu.find('.' + root_level_class).not($this).find('> ul');
close_submenus.each(function(i, el)
{
var $sub = $(el);
menu_do_collapse($sub, $sub.parent(), submenu_options);
});
}
if( ! $this.hasClass(submenu_options.submenu_opened_class))
{
var current_height;
if( ! $submenu.is(':visible'))
{
menu_do_expand($submenu, $this, submenu_options);
}
}
else
{
menu_do_collapse($submenu, $this, submenu_options);
}
fit_main_content_height();
});
});
// Open the submenus with "opened" class
public_vars.$mainMenu.find('.'+submenu_options.submenu_opened_class+' > ul').addClass('visible');
// Well, somebody may forgot to add "active" for all inhertiance, but we are going to help you (just in case) - we do this job for you for free :P!
if(public_vars.$mainMenu.hasClass('auto-inherit-active-class'))
{
menu_set_active_class_to_parents( public_vars.$mainMenu.find('.active') );
}
// Search Input
var $search_input = public_vars.$mainMenu.find('#search input[type="text"]'),
$search_el = public_vars.$mainMenu.find('#search');
public_vars.$mainMenu.find('#search form').submit(function(ev)
{
var is_collapsed = public_vars.$pageContainer.hasClass('sidebar-collapsed');
if(is_collapsed)
{
if($search_el.hasClass('focused') == false)
{
ev.preventDefault();
$search_el.addClass('focused');
$search_input.focus();
return false;
}
}
});
$search_input.on('blur', function(ev)
{
var is_collapsed = public_vars.$pageContainer.hasClass('sidebar-collapsed');
if(is_collapsed)
{
$search_el.removeClass('focused');
}
});
// Collapse Icon (mobile device visible)
var show_hide_menu = $('');
public_vars.$sidebarMenu.find('.logo-env').append(show_hide_menu);
}
function menu_do_expand($submenu, $this, options)
{
$submenu.addClass('visible').height('');
current_height = $submenu.outerHeight();
var props_from = {
opacity: .2,
height: 0,
top: -20
},
props_to = {
height: current_height,
opacity: 1,
top: 0
};
if(isxs())
{
delete props_from['opacity'];
delete props_from['top'];
delete props_to['opacity'];
delete props_to['top'];
}
TweenMax.set($submenu, {css: props_from});
$this.addClass(options.submenu_opened_class);
TweenMax.to($submenu, options.submenu_open_delay, {css: props_to, ease: options.submenu_open_easing, onComplete: function()
{
$submenu.attr('style', '');
fit_main_content_height();
}});
}
function menu_do_collapse($submenu, $this, options)
{
if(public_vars.$pageContainer.hasClass('sidebar-collapsed') && $this.hasClass('root-level'))
{
return;
}
$this.removeClass(options.submenu_opened_class);
TweenMax.to($submenu, options.submenu_open_delay, {css: {height: 0, opacity: .2}, ease: options.submenu_open_easing, onComplete: function()
{
$submenu.removeClass('visible');
fit_main_content_height();
}});
}
function menu_set_active_class_to_parents($active_element)
{
if($active_element.length)
{
var $parent = $active_element.parent().parent();
$parent.addClass('active');
if(! $parent.hasClass('root-level'))
menu_set_active_class_to_parents($parent)
}
}
// Horizontal Menu Setup
function setup_horizontal_menu()
{
var $ = jQuery,
$nav_bar_menu = public_vars.$horizontalMenu.find('.navbar-nav'),
$items_with_submenu = $nav_bar_menu.find('li:has(ul)'),
$search = public_vars.$horizontalMenu.find('li#search'),
$search_input = $search.find('.search-input'),
$search_submit = $search.find('form'),
root_level_class = 'root-level'
is_multiopen = $nav_bar_menu.hasClass('multiple-expanded'),
submenu_options = {
submenu_open_delay: 0.5,
submenu_open_easing: Sine.easeInOut,
submenu_opened_class: 'opened'
};
$nav_bar_menu.find('> li').addClass(root_level_class);
$items_with_submenu.each(function(i, el)
{
var $this = $(el),
$link = $this.find('> a'),
$submenu = $this.find('> ul');
$this.addClass('has-sub');
setup_horizontal_menu_hover($this, $submenu);
// xs devices only
$link.click(function(ev)
{
if(isxs())
{
ev.preventDefault();
if( ! is_multiopen && $this.hasClass(root_level_class))
{
var close_submenus = $nav_bar_menu.find('.' + root_level_class).not($this).find('> ul');
close_submenus.each(function(i, el)
{
var $sub = $(el);
menu_do_collapse($sub, $sub.parent(), submenu_options);
});
}
if( ! $this.hasClass(submenu_options.submenu_opened_class))
{
var current_height;
if( ! $submenu.is(':visible'))
{
menu_do_expand($submenu, $this, submenu_options);
}
}
else
{
menu_do_collapse($submenu, $this, submenu_options);
}
fit_main_content_height();
}
});
});
// Search Input
if($search.hasClass('search-input-collapsed'))
{
$search_submit.submit(function(ev)
{
if($search.hasClass('search-input-collapsed'))
{
ev.preventDefault();
$search.removeClass('search-input-collapsed');
$search_input.focus();
return false;
}
});
$search_input.on('blur', function(ev)
{
$search.addClass('search-input-collapsed');
});
}
}
jQuery(public_vars, {
hover_index: 4
});
function setup_horizontal_menu_hover($item, $sub)
{
var del = 0.5,
trans_x = -10,
ease = Quad.easeInOut;
TweenMax.set($sub, {css: {autoAlpha: 0, transform: "translateX("+trans_x+"px)"}});
$item.hoverIntent({
over: function()
{
if(isxs())
return false;
if($sub.css('display') == 'none')
{
$sub.css({display: 'block', visibility: 'hidden'});
}
$sub.css({zIndex: ++public_vars.hover_index});
TweenMax.to($sub, del, {css: {autoAlpha: 1, transform: "translateX(0px)"}, ease: ease});
},
out: function()
{
if(isxs())
return false;
TweenMax.to($sub, del, {css: {autoAlpha: 0, transform: "translateX("+trans_x+"px)"}, ease: ease, onComplete: function()
{
TweenMax.set($sub, {css: {transform: "translateX("+trans_x+"px)"}});
$sub.css({display: 'none'});
}});
},
timeout: 300,
interval: 50
});
}
// Block UI Helper
function blockUI($el)
{
$el.block({
message: '',
css: {
border: 'none',
padding: '0px',
backgroundColor: 'none'
},
overlayCSS: {
backgroundColor: '#fff',
opacity: .3,
cursor: 'wait'
}
});
}
function unblockUI($el)
{
$el.unblock();
}
// 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);
}
// Root Wizard Current Tab
function setCurrentProgressTab($rootwizard, $nav, $tab, $progress, index)
{
$tab.prevAll().addClass('completed');
$tab.nextAll().removeClass('completed');
var items = $nav.children().length,
pct = parseInt((index+1) / items * 100, 10),
$first_tab = $nav.find('li:first-child'),
margin = (1/(items*2) * 100) + '%';//$first_tab.find('span').position().left + 'px';
if( $first_tab.hasClass('active'))
{
$progress.width(0);
}
else
{
if(rtl())
{
$progress.width( $progress.parent().outerWidth(true) - $tab.prev().position().left - $tab.find('span').width()/2 );
}
else
{
$progress.width( ((index-1) /(items-1)) * 100 + '%' ); //$progress.width( $tab.prev().position().left - $tab.find('span').width()/2 );
}
}
$progress.parent().css({
marginLeft: margin,
marginRight: margin
});
/*var m = $first_tab.find('span').position().left - $first_tab.find('span').width() / 2;
$rootwizard.find('.tab-content').css({
marginLeft: m,
marginRight: m
});*/
}
// Replace Checkboxes
function replaceCheckboxes()
{
var $ = jQuery;
$(".checkbox-replace:not(.neon-cb-replacement), .radio-replace:not(.neon-cb-replacement)").each(function(i, el)
{
var $this = $(el),
$input = $this.find('input:first'),
$wrapper = $('<label class="cb-wrapper" />'),
$checked = $('<div class="checked" />'),
checked_class = 'checked',
is_radio = $input.is('[type="radio"]'),
$related,
name = $input.attr('name');
$this.addClass('neon-cb-replacement');
$input.wrap($wrapper);
$wrapper = $input.parent();
$wrapper.append($checked).next('label').on('click', function(ev)
{
$wrapper.click();
});
$input.on('change', function(ev)
{
if(is_radio)
{
//$(".neon-cb-replacement input[type=radio][name='"+name+"']").closest('.neon-cb-replacement').removeClass(checked_class);
$(".neon-cb-replacement input[type=radio][name='"+name+"']:not(:checked)").closest('.neon-cb-replacement').removeClass(checked_class);
}
if($input.is(':disabled'))
{
$wrapper.addClass('disabled');
}
$this[$input.is(':checked') ? 'addClass' : 'removeClass'](checked_class);
}).trigger('change');
});
}
// Scroll to Bottom
function scrollToBottom($el)
{
var $ = jQuery;
if(typeof $el == 'string')
$el = $($el);
$el.get(0).scrollTop = $el.get(0).scrollHeight;
}
// Check viewport visibility (entrie element)
function elementInViewport(el)
{
var top = el.offsetTop;
var left = el.offsetLeft;
var width = el.offsetWidth;
var height = el.offsetHeight;
while (el.offsetParent) {
el = el.offsetParent;
top += el.offsetTop;
left += el.offsetLeft;
}
return (
top >= window.pageYOffset &&
left >= window.pageXOffset &&
(top + height) <= (window.pageYOffset + window.innerHeight) &&
(left + width) <= (window.pageXOffset + window.innerWidth)
);
}
// X Overflow
function disableXOverflow()
{
public_vars.$body.addClass('overflow-x-disabled');
}
function enableXOverflow()
{
public_vars.$body.removeClass('overflow-x-disabled');
}
// Page Transitions
function init_page_transitions()
{
fit_main_content_height();
var transitions = ['page-fade', 'page-left-in', 'page-right-in', 'page-fade-only'];
for(var i in transitions)
{
var transition_name = transitions[i];
if(public_vars.$body.hasClass(transition_name))
{
public_vars.$body.addClass(transition_name + '-init')
setTimeout(function()
{
public_vars.$body.removeClass(transition_name + ' ' + transition_name + '-init');
}, 850);
return;
}
}
}
// Page Visibility API
function onPageAppear(callback)
{
var hidden, state, visibilityChange;
if (typeof document.hidden !== "undefined")
{
hidden = "hidden";
visibilityChange = "visibilitychange";
state = "visibilityState";
}
else if (typeof document.mozHidden !== "undefined")
{
hidden = "mozHidden";
visibilityChange = "mozvisibilitychange";
state = "mozVisibilityState";
}
else if (typeof document.msHidden !== "undefined")
{
hidden = "msHidden";
visibilityChange = "msvisibilitychange";
state = "msVisibilityState";
}
else if (typeof document.webkitHidden !== "undefined")
{
hidden = "webkitHidden";
visibilityChange = "webkitvisibilitychange";
state = "webkitVisibilityState";
}
if(document[state] || typeof document[state] == 'undefined')
{
callback();
}
document.addEventListener(visibilityChange, callback, false);
}
function continueWrappingPanelTables()
{
var $tables = jQuery(".panel-body.with-table + table");
if($tables.length)
{
$tables.wrap('<div class="panel-body with-table"></div>');
continueWrappingPanelTables();
}
}
function show_loading_bar(options)
{
var defaults = {
pct: 0,
delay: 1.3,
wait: 0,
before: function(){},
finish: function(){},
resetOnEnd: true
};
if(typeof options == 'object')
defaults = jQuery.extend(defaults, options);
else
if(typeof options == 'number')
defaults.pct = options;
if(defaults.pct > 100)
defaults.pct = 100;
else
if(defaults.pct < 0)
defaults.pct = 0;
var $ = jQuery,
$loading_bar = $(".neon-loading-bar");
if($loading_bar.length == 0)
{
$loading_bar = $('<div class="neon-loading-bar progress-is-hidden"><span data-pct="0"></span></div>');
public_vars.$body.append( $loading_bar );
}
var $pct = $loading_bar.find('span'),
current_pct = $pct.data('pct'),
is_regress = current_pct > defaults.pct;
defaults.before(current_pct);
TweenMax.to($pct, defaults.delay, {css: {width: defaults.pct + '%'}, delay: defaults.wait, ease: is_regress ? Expo.easeOut : Expo.easeIn,
onStart: function()
{
$loading_bar.removeClass('progress-is-hidden');
},
onComplete: function()
{
var pct = $pct.data('pct');
if(pct == 100 && defaults.resetOnEnd)
{
hide_loading_bar();
}
defaults.finish(pct);
},
onUpdate: function()
{
$pct.data('pct', parseInt($pct.get(0).style.width, 10));
}});
}
function hide_loading_bar()
{
var $ = jQuery,
$loading_bar = $(".neon-loading-bar"),
$pct = $loading_bar.find('span');
$loading_bar.addClass('progress-is-hidden');
$pct.width(0).data('pct');
}