//[Master Javascript]
//Project: Riday Admin - Responsive Admin Template
//Primary use: Riday Admin - Responsive Admin Template
//should be included in all pages. It controls some layout
// Make sure jQuery has been loaded
if (typeof jQuery === 'undefined') {
throw new Error('template requires jQuery')
}
// Layout()
// Implements layout.
// Fixes the layout height in case min-height fails.
// @usage activated automatically upon window load.
// Configure any options by passing data-option="value"
// to the body tag.
+function ($) {
'use strict'
var DataKey = 'Masteradmin.layout'
var Default = {
slimscroll : false,
resetHeight: true
}
var Selector = {
wrapper : '.wrapper',
contentWrapper: '.content-wrapper',
layoutBoxed : '.layout-boxed',
mainFooter : '.main-footer',
mainHeader : '.main-header',
sidebar : '.sidebar',
controlSidebar: '.control-sidebar',
fixed : '.fixed',
sidebarMenu : '.sidebar-menu',
logo : '.main-header .logo'
}
var ClassName = {
fixed : 'fixed',
holdTransition: 'hold-transition'
}
var Layout = function (options) {
this.options = options
this.bindedResize = false
this.activate()
}
Layout.prototype.activate = function () {
this.fix()
this.fixSidebar()
$('body').removeClass(ClassName.holdTransition)
if (this.options.resetHeight) {
$('body, html, ' + Selector.wrapper).css({
'height' : 'auto',
'min-height': '100%'
})
}
if (!this.bindedResize) {
$(window).resize(function () {
this.fix()
this.fixSidebar()
$(Selector.logo + ', ' + Selector.sidebar).one('webkitTransitionEnd otransitionend oTransitionEnd msTransitionEnd transitionend', function () {
this.fix()
this.fixSidebar()
}.bind(this))
}.bind(this))
this.bindedResize = true
}
$(Selector.sidebarMenu).on('expanded.tree', function () {
this.fix()
this.fixSidebar()
}.bind(this))
$(Selector.sidebarMenu).on('collapsed.tree', function () {
this.fix()
this.fixSidebar()
}.bind(this))
}
Layout.prototype.fix = function () {
// Remove overflow from .wrapper if layout-boxed exists
$(Selector.layoutBoxed + ' > ' + Selector.wrapper).css('overflow', 'hidden')
// Get window height and the wrapper height
var footerHeight = $(Selector.mainFooter).outerHeight() || 0
var neg = $(Selector.mainHeader).outerHeight() + footerHeight
var windowHeight = $(window).height()
var sidebarHeight = $(Selector.sidebar).height() || 0
// Set the min-height of the content and sidebar based on
// the height of the document.
if ($('body').hasClass(ClassName.fixed)) {
$(Selector.contentWrapper).css('min-height', windowHeight - footerHeight)
} else {
var postSetHeight
if (windowHeight >= sidebarHeight) {
$(Selector.contentWrapper).css('min-height', windowHeight - neg)
postSetHeight = windowHeight - neg
} else {
$(Selector.contentWrapper).css('min-height', sidebarHeight)
postSetHeight = sidebarHeight
}
// Fix for the control sidebar height
var $controlSidebar = $(Selector.controlSidebar)
if (typeof $controlSidebar !== 'undefined') {
if ($controlSidebar.height() > postSetHeight)
$(Selector.contentWrapper).css('min-height', $controlSidebar.height())
}
}
}
Layout.prototype.fixSidebar = function () {
// Make sure the body tag has the .fixed class
if (!$('body').hasClass(ClassName.fixed)) {
if (typeof $.fn.slimScroll !== 'undefined') {
$(Selector.sidebar).slimScroll({ destroy: true }).height('auto')
}
return
}
// Enable slimscroll for fixed layout
if (this.options.slimscroll) {
if (typeof $.fn.slimScroll !== 'undefined') {
// Destroy if it exists
$(Selector.sidebar).slimScroll({ destroy: true }).height('auto')
// Add slimscroll
$(Selector.sidebar).slimScroll({
height: ($(window).height() - $(Selector.mainHeader).height()) + 'px',
color : 'rgba(0,0,0,0.2)',
size : '3px'
})
}
}
}
// Plugin Definition
function Plugin(option) {
return this.each(function () {
var $this = $(this)
var data = $this.data(DataKey)
if (!data) {
var options = $.extend({}, Default, $this.data(), typeof option === 'object' && option)
$this.data(DataKey, (data = new Layout(options)))
}
if (typeof option == 'string') {
if (typeof data[option] == 'undefined') {
throw new Error('No method named ' + option)
}
data[option]()
}
})
}
var old = $.fn.layout
$.fn.layout = Plugin
$.fn.layout.Constuctor = Layout
// No conflict mode
$.fn.layout.noConflict = function () {
$.fn.layout = old
return this
}
// Layout DATA-API
$(window).on('load', function () {
Plugin.call($('body'))
});
}(jQuery) // End of use strict
/* PushMenu()
* Adds the push menu functionality to the sidebar.
*
* @usage: $('.btn').pushMenu(options)
* or add [data-toggle="push-menu"] to any button
* Pass any option as data-option="value"
*/
+function ($) {
'use strict'
var DataKey = 'Masteradmin.pushmenu'
var Default = {
collapseScreenSize : 767,
expandOnHover : false,
expandTransitionDelay: 200
}
var Selector = {
collapsed : '.sidebar-collapse',
open : '.sidebar-open',
mainSidebar : '.main-sidebar',
contentWrapper: '.content-wrapper',
searchInput : '.sidebar-form .form-control',
button : '[data-toggle="push-menu"]',
mini : '.sidebar-mini',
expanded : '',
layoutFixed : '.fixed'
}
var ClassName = {
collapsed : 'sidebar-collapse',
open : 'sidebar-open',
mini : 'sidebar-mini',
expanded : '',
expandFeature: '',
layoutFixed : 'fixed'
}
var Event = {
expanded : 'expanded.pushMenu',
collapsed: 'collapsed.pushMenu'
}
// PushMenu Class Definition
var PushMenu = function (options) {
this.options = options
this.init()
}
PushMenu.prototype.init = function () {
//if (this.options.expandOnHover
// || ($('body').is(Selector.mini + Selector.layoutFixed))) {
// this.expandOnHover()
// $('body').addClass(ClassName.expandFeature)
// }
$(Selector.contentWrapper).on(function () {
// Enable hide menu when clicking on the content-wrapper on small screens
if ($(window).width() <= this.options.collapseScreenSize && $('body').hasClass(ClassName.open)) {
this.close()
}
}.bind(this))
// __Fix for android devices
$(Selector.searchInput).on(function (e) {
e.stopPropagation()
})
}
PushMenu.prototype.toggle = function () {
var windowWidth = $(window).width()
var isOpen = !$('body').hasClass(ClassName.collapsed)
if (windowWidth <= this.options.collapseScreenSize) {
isOpen = $('body').hasClass(ClassName.open)
}
if (!isOpen) {
this.open()
} else {
this.close()
}
}
PushMenu.prototype.open = function () {
var windowWidth = $(window).width()
if (windowWidth > this.options.collapseScreenSize) {
$('body').removeClass(ClassName.collapsed)
.trigger($.Event(Event.expanded))
}
else {
$('body').addClass(ClassName.open)
.trigger($.Event(Event.expanded))
}
}
PushMenu.prototype.close = function () {
var windowWidth = $(window).width()
if (windowWidth > this.options.collapseScreenSize) {
$('body').addClass(ClassName.collapsed)
.trigger($.Event(Event.collapsed))
} else {
$('body').removeClass(ClassName.open + ' ' + ClassName.collapsed)
.trigger($.Event(Event.collapsed))
}
}
PushMenu.prototype.expandOnHover = function () {
$(Selector.mainSidebar).hover(function () {
if ($('body').is(Selector.mini + Selector.collapsed)
&& $(window).width() > this.options.collapseScreenSize) {
this.expand()
}
}.bind(this), function () {
if ($('body').is(Selector.expanded)) {
this.collapse()
}
}.bind(this))
}
// PushMenu.prototype.expand = function () {
// setTimeout(function () {
// $('body').removeClass(ClassName.collapsed)
// .addClass(ClassName.expanded)
// }, this.options.expandTransitionDelay)
// }
PushMenu.prototype.collapse = function () {
setTimeout(function () {
$('body').removeClass(ClassName.expanded)
.addClass(ClassName.collapsed)
}, this.options.expandTransitionDelay)
}
// PushMenu Plugin Definition
function Plugin(option) {
return this.each(function () {
var $this = $(this)
var data = $this.data(DataKey)
if (!data) {
var options = $.extend({}, Default, $this.data(), typeof option === 'object' && option)
$this.data(DataKey, (data = new PushMenu(options)))
}
if (option == 'toggle') data.toggle()
})
}
var old = $.fn.pushMenu
$.fn.pushMenu = Plugin
$.fn.pushMenu.Constructor = PushMenu
// No Conflict Mode
$.fn.pushMenu.noConflict = function () {
$.fn.pushMenu = old
return this
}
// Data API
$(document).on('click', Selector.button, function (e) {
e.preventDefault()
Plugin.call($(this), 'toggle')
})
$(window).on('load', function () {
Plugin.call($(Selector.button))
})
}(jQuery) // End of use strict
/* Tree()
* Converts a nested list into a multilevel
* tree view menu.
*
* @Usage: $('.my-menu').tree(options)
* or add [data-widget="tree"] to the ul element
* Pass any option as data-option="value"
*/
+function ($) {
'use strict'
var DataKey = 'Masteradmin.tree'
var Default = {
animationSpeed: 500,
accordion : true,
followLink : false,
trigger : '.treeview a'
}
var Selector = {
tree : '.tree',
treeview : '.treeview',
treeviewMenu: '.treeview-menu',
open : '.menu-open, .active',
li : 'li',
data : '[data-widget="tree"]',
active : '.active'
}
var ClassName = {
open: 'menu-open',
tree: 'tree'
}
var Event = {
collapsed: 'collapsed.tree',
expanded : 'expanded.tree'
}
// Tree Class Definition
var Tree = function (element, options) {
this.element = element
this.options = options
$(this.element).addClass(ClassName.tree)
$(Selector.treeview + Selector.active, this.element).addClass(ClassName.open)
this._setUpListeners()
}
Tree.prototype.toggle = function (link, event) {
var treeviewMenu = link.next(Selector.treeviewMenu)
var parentLi = link.parent()
var isOpen = parentLi.hasClass(ClassName.open)
if (!parentLi.is(Selector.treeview)) {
return
}
if (!this.options.followLink || link.attr('href') == '#') {
event.preventDefault()
}
if (isOpen) {
this.collapse(treeviewMenu, parentLi)
} else {
this.expand(treeviewMenu, parentLi)
}
}
Tree.prototype.expand = function (tree, parent) {
var expandedEvent = $.Event(Event.expanded)
if (this.options.accordion) {
var openMenuLi = parent.siblings(Selector.open)
var openTree = openMenuLi.children(Selector.treeviewMenu)
this.collapse(openTree, openMenuLi)
}
parent.addClass(ClassName.open)
tree.slideDown(this.options.animationSpeed, function () {
$(this.element).trigger(expandedEvent)
}.bind(this))
}
Tree.prototype.collapse = function (tree, parentLi) {
var collapsedEvent = $.Event(Event.collapsed)
tree.find(Selector.open).removeClass(ClassName.open)
parentLi.removeClass(ClassName.open)
tree.slideUp(this.options.animationSpeed, function () {
tree.find(Selector.open + ' > ' + Selector.treeview).slideUp()
$(this.element).trigger(collapsedEvent)
}.bind(this))
}
// Private
Tree.prototype._setUpListeners = function () {
var that = this
$(this.element).on('click', this.options.trigger, function (event) {
that.toggle($(this), event)
})
}
// Plugin Definition
function Plugin(option) {
return this.each(function () {
var $this = $(this)
var data = $this.data(DataKey)
if (!data) {
var options = $.extend({}, Default, $this.data(), typeof option === 'object' && option)
$this.data(DataKey, new Tree($this, options))
}
})
}
var old = $.fn.tree
$.fn.tree = Plugin
$.fn.tree.Constructor = Tree
// No Conflict Mode
$.fn.tree.noConflict = function () {
$.fn.tree = old
return this
}
// Tree Data API
$(window).on('load', function () {
$(Selector.data).each(function () {
Plugin.call($(this))
})
})
}(jQuery) // End of use strict
/* ControlSidebar()
* Toggles the state of the control sidebar
*
* @Usage: $('#control-sidebar-trigger').controlSidebar(options)
* or add [data-toggle="control-sidebar"] to the trigger
* Pass any option as data-option="value"
*/
+function ($) {
'use strict'
var DataKey = 'Masteradmin.controlsidebar'
var Default = {
slide: true
}
var Selector = {
sidebar: '.control-sidebar',
data : '[data-toggle="control-sidebar"]',
open : '.control-sidebar-open',
bg : '.control-sidebar-bg',
wrapper: '.wrapper',
content: '.content-wrapper',
boxed : '.layout-boxed'
}
var ClassName = {
open : 'control-sidebar-open',
fixed: 'fixed'
}
var Event = {
collapsed: 'collapsed.controlsidebar',
expanded : 'expanded.controlsidebar'
}
// ControlSidebar Class Definition
var ControlSidebar = function (element, options) {
this.element = element
this.options = options
this.hasBindedResize = false
this.init()
}
ControlSidebar.prototype.init = function () {
// Add click listener if the element hasn't been
// initialized using the data API
if (!$(this.element).is(Selector.data)) {
$(this).on('click', this.toggle)
}
this.fix()
$(window).resize(function () {
this.fix()
}.bind(this))
}
ControlSidebar.prototype.toggle = function (event) {
if (event) event.preventDefault()
this.fix()
if (!$(Selector.sidebar).is(Selector.open) && !$('body').is(Selector.open)) {
this.expand()
} else {
this.collapse()
}
}
ControlSidebar.prototype.expand = function () {
if (!this.options.slide) {
$('body').addClass(ClassName.open)
} else {
$(Selector.sidebar).addClass(ClassName.open)
}
$(this.element).trigger($.Event(Event.expanded))
}
ControlSidebar.prototype.collapse = function () {
$('body, ' + Selector.sidebar).removeClass(ClassName.open)
$(this.element).trigger($.Event(Event.collapsed))
}
ControlSidebar.prototype.fix = function () {
if ($('body').is(Selector.boxed)) {
this._fixForBoxed($(Selector.bg))
}
}
// Private
ControlSidebar.prototype._fixForBoxed = function (bg) {
bg.css({
position: 'absolute',
height : $(Selector.wrapper).height()
})
}
// Plugin Definition
function Plugin(option) {
return this.each(function () {
var $this = $(this)
var data = $this.data(DataKey)
if (!data) {
var options = $.extend({}, Default, $this.data(), typeof option === 'object' && option)
$this.data(DataKey, (data = new ControlSidebar($this, options)))
}
if (typeof option == 'string') data.toggle()
})
}
var old = $.fn.controlSidebar
$.fn.controlSidebar = Plugin
$.fn.controlSidebar.Constructor = ControlSidebar
// No Conflict Mode
$.fn.controlSidebar.noConflict = function () {
$.fn.controlSidebar = old
return this
}
// ControlSidebar Data API
$(document).on('click', Selector.data, function (event) {
if (event) event.preventDefault()
Plugin.call($(this), 'toggle')
})
}(jQuery) // End of use strict
/* BoxWidget()
* Adds box widget functions to boxes.
*
* @Usage: $('.my-box').boxWidget(options)
* This plugin auto activates on any element using the `.box` class
* Pass any option as data-option="value"
*/
+function ($) {
'use strict'
var DataKey = 'Masteradmin.boxwidget'
var Default = {
animationSpeed : 500,
collapseTrigger: '[data-widget="collapse"]',
removeTrigger : '[data-widget="remove"]',
collapseIcon : 'fa-minus',
expandIcon : 'fa-plus',
removeIcon : 'fa-times'
}
var Selector = {
data : '.box',
collapsed: '.collapsed-box',
body : '.box-body',
footer : '.box-footer',
tools : '.box-tools'
}
var ClassName = {
collapsed: 'collapsed-box'
}
var Event = {
collapsed: 'collapsed.boxwidget',
expanded : 'expanded.boxwidget',
removed : 'removed.boxwidget'
}
// BoxWidget Class Definition
var BoxWidget = function (element, options) {
this.element = element
this.options = options
this._setUpListeners()
}
BoxWidget.prototype.toggle = function () {
var isOpen = !$(this.element).is(Selector.collapsed)
if (isOpen) {
this.collapse()
} else {
this.expand()
}
}
BoxWidget.prototype.expand = function () {
var expandedEvent = $.Event(Event.expanded)
var collapseIcon = this.options.collapseIcon
var expandIcon = this.options.expandIcon
$(this.element).removeClass(ClassName.collapsed)
$(this.element)
.find(Selector.tools)
.find('.' + expandIcon)
.removeClass(expandIcon)
.addClass(collapseIcon)
$(this.element).find(Selector.body + ', ' + Selector.footer)
.slideDown(this.options.animationSpeed, function () {
$(this.element).trigger(expandedEvent)
}.bind(this))
}
BoxWidget.prototype.collapse = function () {
var collapsedEvent = $.Event(Event.collapsed)
var collapseIcon = this.options.collapseIcon
var expandIcon = this.options.expandIcon
$(this.element)
.find(Selector.tools)
.find('.' + collapseIcon)
.removeClass(collapseIcon)
.addClass(expandIcon)
$(this.element).find(Selector.body + ', ' + Selector.footer)
.slideUp(this.options.animationSpeed, function () {
$(this.element).addClass(ClassName.collapsed)
$(this.element).trigger(collapsedEvent)
}.bind(this))
}
BoxWidget.prototype.remove = function () {
var removedEvent = $.Event(Event.removed)
$(this.element).slideUp(this.options.animationSpeed, function () {
$(this.element).trigger(removedEvent)
$(this.element).remove()
}.bind(this))
}
// Private
BoxWidget.prototype._setUpListeners = function () {
var that = this
$(this.element).on('click', this.options.collapseTrigger, function (event) {
if (event) event.preventDefault()
that.toggle()
})
$(this.element).on('click', this.options.removeTrigger, function (event) {
if (event) event.preventDefault()
that.remove()
})
}
// Plugin Definition
function Plugin(option) {
return this.each(function () {
var $this = $(this)
var data = $this.data(DataKey)
if (!data) {
var options = $.extend({}, Default, $this.data(), typeof option === 'object' && option)
$this.data(DataKey, (data = new BoxWidget($this, options)))
}
if (typeof option == 'string') {
if (typeof data[option] == 'undefined') {
throw new Error('No method named ' + option)
}
data[option]()
}
})
}
var old = $.fn.boxWidget
$.fn.boxWidget = Plugin
$.fn.boxWidget.Constructor = BoxWidget
// No Conflict Mode
$.fn.boxWidget.noConflict = function () {
$.fn.boxWidget = old
return this
}
// BoxWidget Data API
$(window).on('load', function () {
$(Selector.data).each(function () {
Plugin.call($(this))
})
})
}(jQuery) // End of use strict
/* TodoList()
* Converts a list into a todoList.
*
* @Usage: $('.my-list').todoList(options)
* or add [data-widget="todo-list"] to the ul element
* Pass any option as data-option="value"
*/
+function ($) {
'use strict'
var DataKey = 'Masteradmin.todolist'
var Default = {
iCheck : false,
onCheck : function () {
},
onUnCheck: function () {
}
}
var Selector = {
data: '[data-widget="todo-list"]'
}
var ClassName = {
done: 'done'
}
// TodoList Class Definition
var TodoList = function (element, options) {
this.element = element
this.options = options
this._setUpListeners()
}
TodoList.prototype.toggle = function (item) {
item.parents(Selector.li).first().toggleClass(ClassName.done)
if (!item.prop('checked')) {
this.unCheck(item)
return
}
this.check(item)
}
TodoList.prototype.check = function (item) {
this.options.onCheck.call(item)
}
TodoList.prototype.unCheck = function (item) {
this.options.onUnCheck.call(item)
}
// Private
TodoList.prototype._setUpListeners = function () {
var that = this
$(this.element).on('change ifChanged', 'input:checkbox', function () {
that.toggle($(this))
})
}
// Plugin Definition
function Plugin(option) {
return this.each(function () {
var $this = $(this)
var data = $this.data(DataKey)
if (!data) {
var options = $.extend({}, Default, $this.data(), typeof option === 'object' && option)
$this.data(DataKey, (data = new TodoList($this, options)))
}
if (typeof data == 'string') {
if (typeof data[option] == 'undefined') {
throw new Error('No method named ' + option)
}
data[option]()
}
})
}
var old = $.fn.todoList
$.fn.todoList = Plugin
$.fn.todoList.Constructor = TodoList
// No Conflict Mode
$.fn.todoList.noConflict = function () {
$.fn.todoList = old
return this
}
// TodoList Data API
$(window).on('load', function () {
$(Selector.data).each(function () {
Plugin.call($(this))
})
})
}(jQuery) // End of use strict
/* DirectChat()
* Toggles the state of the control sidebar
*
* @Usage: $('#my-chat-box').directChat()
* or add [data-widget="direct-chat"] to the trigger
*/
+function ($) {
'use strict'
var DataKey = 'Masteradmin.directchat'
var Selector = {
data: '[data-widget="chat-pane-toggle"]',
box : '.direct-chat'
}
var ClassName = {
open: 'direct-chat-contacts-open'
}
// DirectChat Class Definition
var DirectChat = function (element) {
this.element = element
}
DirectChat.prototype.toggle = function ($trigger) {
$trigger.parents(Selector.box).first().toggleClass(ClassName.open)
}
// Plugin Definition
function Plugin(option) {
return this.each(function () {
var $this = $(this)
var data = $this.data(DataKey)
if (!data) {
$this.data(DataKey, (data = new DirectChat($this)))
}
if (typeof option == 'string') data.toggle($this)
})
}
var old = $.fn.directChat
$.fn.directChat = Plugin
$.fn.directChat.Constructor = DirectChat
// No Conflict Mode
$.fn.directChat.noConflict = function () {
$.fn.directChat = old
return this
}
// DirectChat Data API
$(document).on('click', Selector.data, function (event) {
if (event) event.preventDefault()
Plugin.call($(this), 'toggle')
})
// Slim scrolling
$('.inner-content-div').slimScroll({
height: '200'
});
$('.sm-scrol').slimScroll({
height: '250'
});
$('.direct-chat-messages').slimScroll({
height: '420'
});
$('.chat-box-one').slimScroll({
height: '550'
});
$('.chat-box-one2').slimScroll({
height: '580'
});
$('.chat-box-one-side').slimScroll({
height: '650'
});
$('.chat-box-one-side2').slimScroll({
height: '500'
});
$('.chat-box-one-side3').slimScroll({
height: '685'
});
$('.notification-side').slimScroll({
height: '325'
});
$('.suggestions-side').slimScroll({
height: '300'
});
$('.events-side').slimScroll({
height: '265'
});
$('.pat-div').slimScroll({
height: '204'
});
$('.demo-panel-bx').slimScroll({
height: 'auto'
});
$(".search-box a, .search-box .app-search .srh-btn").on('click', function() {
$(".app-search").toggle(200);
});
// Close
//
$(document).on('click', '.box-btn-close', function() {
$(this).parents('.box').fadeOut(600, function() {
if ($(this).parent().children().length == 1) {
$(this).parent().remove();
}
else {
$(this).remove();
}
});
});
// Slide up/down
//
$(document).on('click', '.box-btn-slide', function(){
$(this).toggleClass('rotate-180').parents('.box').find('.box-content, .box-body').slideToggle();
});
// Maximize
//
$(document).on('click', '.box-btn-maximize', function(){
$(this).parents('.box').toggleClass('box-maximize').removeClass('box-fullscreen');
});
// Fullscreen
//
$(document).on('click', '.box-btn-fullscreen', function(){
$(this).parents('.box').toggleClass('box-fullscreen').removeClass('box-maximize');
});
// Disable demonstrative links!
//
$(document).on('click', 'a[href="#"]', function(e){
e.preventDefault();
});
// This is for the innerleft sidebar
$(".open-left-block").on('click', function() {
$('.left-block').toggleClass('open-panel');
$('.open-left-block').toggleClass('mdi-menu');
});
// Upload
//
$(document).on('click', '.file-browser', function() {
var $browser = $(this);
if ( $browser.hasClass('form-control') ) {
setTimeout(function(){
$browser.closest('.file-group').find('[type="file"]').trigger('click');
},300);
}
else {
var file = $browser.closest('.file-group').find('[type="file"]');
file.on( 'click', function(e) {
e.stopPropagation();
});
file.trigger('click');
}
});
// Event to change file name after file selection
$(document).on('change', '.file-group [type="file"]', function(){
var input = $(this)[0];
var len = input.files.length;
var filename = '';
for (var i = 0; i < len; ++i) {
filename += input.files.item(i).name + ', ';
}
filename = filename.substr(0, filename.length-2);
$(this).closest('.file-group').find('.file-value').val(filename).text(filename).focus();
});
// Update file name for bootstrap custom file upload
$(document).on('change', '.custom-file-input', function(){
var filename = $(this).val().split('\\').pop();
$(this).next('.custom-file-control').attr('data-input-value', filename);
});
$('.custom-file-control:not([data-input-value])').attr('data-input-value', 'Choose file...');
/* The todo list plugin */
$('.todo-list').todoList({
onCheck : function () {
window.console.log($(this), 'The element has been checked');
},
onUnCheck: function () {
window.console.log($(this), 'The element has been unchecked');
}
});
// bradcrumb section
$('#thismonth').sparkline([8, 5, 4, 7, 9, 7, 10, 9], {
type: 'bar',
height: '35',
barWidth: '4',
resize: true,
barSpacing: '4',
barColor: '#843cf7'
});
$('#lastyear').sparkline([8, 5, 4, 7, 9, 7, 10, 9], {
type: 'bar',
height: '35',
barWidth: '4',
resize: true,
barSpacing: '4',
barColor: '#ec4b71'
});
var sparkResize;
$("#chat-circle, #chat-box-toggle, #chat-popup").click(function(){
$("#chat-box-body").toggleClass("show");
});
}(jQuery) // End of use strict
// Fullscreen
$(function () {
'use strict'
$('[data-provide~="fullscreen"]').on('click', function () {
screenfull.toggle($('#container')[0]);
});
}); // End of use strict
+function ($) {
'use strict'
// Dynamic active menu
var path = window.location.pathname.split("/").pop();
var target = $('.sidebar-menu li a[href="'+path+'"]');
target.parent().addClass('active');
$('.sidebar-menu li.active').parents('li').addClass('active');
}(jQuery) // End of use strict
+function ($) {
'use strict'
// Dynamic active horizontal menu
var path = window.location.pathname.split("/").pop();
var target = $('.sm li a[href="'+path+'"]');
target.parent().addClass('current');
$('.sm li.current').parents('li').addClass('current');
}(jQuery) // End of use strict
// feather icon
$(function () {
'use strict'
feather.replace();
}); // End of use strict
/*!
* Waves v0.6.4
* http://fian.my.id/Waves
*
* Copyright 2014 Alfiana E. Sibuea and other contributors
* Released under the MIT license
* https://github.com/fians/Waves/blob/master/LICENSE
*/
;(function(window) {
'use strict';
var Waves = Waves || {};
var $$ = document.querySelectorAll.bind(document);
// Find exact position of element
function isWindow(obj) {
return obj !== null && obj === obj.window;
}
function getWindow(elem) {
return isWindow(elem) ? elem : elem.nodeType === 9 && elem.defaultView;
}
function offset(elem) {
var docElem, win,
box = {top: 0, left: 0},
doc = elem && elem.ownerDocument;
docElem = doc.documentElement;
if (typeof elem.getBoundingClientRect !== typeof undefined) {
box = elem.getBoundingClientRect();
}
win = getWindow(doc);
return {
top: box.top + win.pageYOffset - docElem.clientTop,
left: box.left + win.pageXOffset - docElem.clientLeft
};
}
function convertStyle(obj) {
var style = '';
for (var a in obj) {
if (obj.hasOwnProperty(a)) {
style += (a + ':' + obj[a] + ';');
}
}
return style;
}
var Effect = {
// Effect delay
duration: 750,
show: function(e, element) {
// Disable right click
if (e.button === 2) {
return false;
}
var el = element || this;
// Create ripple
var ripple = document.createElement('div');
ripple.className = 'waves-ripple';
el.appendChild(ripple);
// Get click coordinate and element witdh
var pos = offset(el);
var relativeY = (e.pageY - pos.top);
var relativeX = (e.pageX - pos.left);
var scale = 'scale('+((el.clientWidth / 100) * 10)+')';
// Support for touch devices
if ('touches' in e) {
relativeY = (e.touches[0].pageY - pos.top);
relativeX = (e.touches[0].pageX - pos.left);
}
// Attach data to element
ripple.setAttribute('data-hold', Date.now());
ripple.setAttribute('data-scale', scale);
ripple.setAttribute('data-x', relativeX);
ripple.setAttribute('data-y', relativeY);
// Set ripple position
var rippleStyle = {
'top': relativeY+'px',
'left': relativeX+'px'
};
ripple.className = ripple.className + ' waves-notransition';
ripple.setAttribute('style', convertStyle(rippleStyle));
ripple.className = ripple.className.replace('waves-notransition', '');
// Scale the ripple
rippleStyle['-webkit-transform'] = scale;
rippleStyle['-moz-transform'] = scale;
rippleStyle['-ms-transform'] = scale;
rippleStyle['-o-transform'] = scale;
rippleStyle.transform = scale;
rippleStyle.opacity = '1';
rippleStyle['-webkit-transition-duration'] = Effect.duration + 'ms';
rippleStyle['-moz-transition-duration'] = Effect.duration + 'ms';
rippleStyle['-o-transition-duration'] = Effect.duration + 'ms';
rippleStyle['transition-duration'] = Effect.duration + 'ms';
rippleStyle['-webkit-transition-timing-function'] = 'cubic-bezier(0.250, 0.460, 0.450, 0.940)';
rippleStyle['-moz-transition-timing-function'] = 'cubic-bezier(0.250, 0.460, 0.450, 0.940)';
rippleStyle['-o-transition-timing-function'] = 'cubic-bezier(0.250, 0.460, 0.450, 0.940)';
rippleStyle['transition-timing-function'] = 'cubic-bezier(0.250, 0.460, 0.450, 0.940)';
ripple.setAttribute('style', convertStyle(rippleStyle));
},
hide: function(e) {
TouchHandler.touchup(e);
var el = this;
var width = el.clientWidth * 1.4;
// Get first ripple
var ripple = null;
var ripples = el.getElementsByClassName('waves-ripple');
if (ripples.length > 0) {
ripple = ripples[ripples.length - 1];
} else {
return false;
}
var relativeX = ripple.getAttribute('data-x');
var relativeY = ripple.getAttribute('data-y');
var scale = ripple.getAttribute('data-scale');
// Get delay beetween mousedown and mouse leave
var diff = Date.now() - Number(ripple.getAttribute('data-hold'));
var delay = 350 - diff;
if (delay < 0) {
delay = 0;
}
// Fade out ripple after delay
setTimeout(function() {
var style = {
'top': relativeY+'px',
'left': relativeX+'px',
'opacity': '0',
// Duration
'-webkit-transition-duration': Effect.duration + 'ms',
'-moz-transition-duration': Effect.duration + 'ms',
'-o-transition-duration': Effect.duration + 'ms',
'transition-duration': Effect.duration + 'ms',
'-webkit-transform': scale,
'-moz-transform': scale,
'-ms-transform': scale,
'-o-transform': scale,
'transform': scale,
};
ripple.setAttribute('style', convertStyle(style));
setTimeout(function() {
try {
el.removeChild(ripple);
} catch(e) {
return false;
}
}, Effect.duration);
}, delay);
},
// Little hack to make can perform waves effect
wrapInput: function(elements) {
for (var a = 0; a < elements.length; a++) {
var el = elements[a];
if (el.tagName.toLowerCase() === 'input') {
var parent = el.parentNode;
// If input already have parent just pass through
if (parent.tagName.toLowerCase() === 'i' && parent.className.indexOf('waves-effect') !== -1) {
continue;
}
// Put element class and style to the specified parent
var wrapper = document.createElement('i');
wrapper.className = el.className + ' waves-input-wrapper';
var elementStyle = el.getAttribute('style');
if (!elementStyle) {
elementStyle = '';
}
wrapper.setAttribute('style', elementStyle);
el.className = 'waves-button-input';
el.removeAttribute('style');
// Put element as child
parent.replaceChild(wrapper, el);
wrapper.appendChild(el);
}
}
}
};
/**
* Disable mousedown event for 500ms during and after touch
*/
var TouchHandler = {
/* uses an integer rather than bool so there's no issues with
* needing to clear timeouts if another touch event occurred
* within the 500ms. Cannot mouseup between touchstart and
* touchend, nor in the 500ms after touchend. */
touches: 0,
allowEvent: function(e) {
var allow = true;
if (e.type === 'touchstart') {
TouchHandler.touches += 1; //push
} else if (e.type === 'touchend' || e.type === 'touchcancel') {
setTimeout(function() {
if (TouchHandler.touches > 0) {
TouchHandler.touches -= 1; //pop after 500ms
}
}, 500);
} else if (e.type === 'mousedown' && TouchHandler.touches > 0) {
allow = false;
}
return allow;
},
touchup: function(e) {
TouchHandler.allowEvent(e);
}
};
/**
* Delegated click handler for .waves-effect element.
* returns null when .waves-effect element not in "click tree"
*/
function getWavesEffectElement(e) {
if (TouchHandler.allowEvent(e) === false) {
return null;
}
var element = null;
var target = e.target || e.srcElement;
while (target.parentNode !== null) {
if (!(target instanceof SVGElement) && target.className.indexOf('waves-effect') !== -1) {
element = target;
break;
}
target = target.parentNode;
}
return element;
}
/**
* Bubble the click and show effect if .waves-effect elem was found
*/
function showEffect(e) {
var element = getWavesEffectElement(e);
if (element !== null) {
Effect.show(e, element);
if ('ontouchstart' in window) {
element.addEventListener('touchend', Effect.hide, false);
element.addEventListener('touchcancel', Effect.hide, false);
}
element.addEventListener('mouseup', Effect.hide, false);
element.addEventListener('mouseleave', Effect.hide, false);
element.addEventListener('dragend', Effect.hide, false);
}
}
Waves.displayEffect = function(options) {
options = options || {};
if ('duration' in options) {
Effect.duration = options.duration;
}
//Wrap input inside tag
Effect.wrapInput($$('.waves-effect'));
if ('ontouchstart' in window) {
document.body.addEventListener('touchstart', showEffect, false);
}
document.body.addEventListener('mousedown', showEffect, false);
};
/**
* Attach Waves to an input element (or any element which doesn't
* bubble mouseup/mousedown events).
* Intended to be used with dynamically loaded forms/inputs, or
* where the user doesn't want a delegated click handler.
*/
Waves.attach = function(element) {
//FUTURE: automatically add waves classes and allow users
// to specify them with an options param? Eg. light/classic/button
if (element.tagName.toLowerCase() === 'input') {
Effect.wrapInput([element]);
element = element.parentNode;
}
if ('ontouchstart' in window) {
element.addEventListener('touchstart', showEffect, false);
}
element.addEventListener('mousedown', showEffect, false);
};
window.Waves = Waves;
document.addEventListener('DOMContentLoaded', function() {
Waves.displayEffect();
}, false);
})(window);
// Demo panel
function w3_open() {
document.getElementById("mySidebar").style.display = "block";
document.getElementById("myOverlay").style.display = "block";
}
function w3_close() {
document.getElementById("mySidebar").style.display = "none";
document.getElementById("myOverlay").style.display = "none";
}
// loader
var loader;
function loadNow(opacity) {
if (opacity <= 0) {
displayContent();
} else {
loader.style.opacity = opacity;
window.setTimeout(function() {
loadNow(opacity - 0.05);
}, 50);
}
}
function displayContent() {
loader.style.display = 'none';
}
document.addEventListener("DOMContentLoaded", function() {
loader = document.getElementById('loader');
loadNow(1);
});
new PerfectScrollbar(".multinav-scroll");
var tooltipTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle="tooltip"]'))
var tooltipList = tooltipTriggerList.map(function (tooltipTriggerEl) {
return new bootstrap.Tooltip(tooltipTriggerEl)
})
$('#sidebarRight').slimScroll({
height: '100%'
});
$(".right-bar-btn").click(function(){
$("body").toggleClass("right-bar-toggle");
});
/* $(function () {
'use strict';
var optionsSpark1 = {
series: [{
name: "Sales",
data: [12, 14, 9, 27, 32, 15]
}],
chart: {
type: 'area',
height: 60,
width:100,
sparkline: {
enabled: true
},
},
colors: ["#01b075"],
stroke: {
curve: 'smooth'
},
fill: {
opacity: 0.3
},
yaxis: {
min: 0
},
};
var chartSpark1 = new ApexCharts(document.querySelector("#chart-spark1"), optionsSpark1);
chartSpark1.render();
var optionsSpark2 = {
series: [{
name: "Sessions",
data: [12, 14, 9, 27, 32, 15]
}],
chart: {
type: 'area',
height: 60,
width:100,
sparkline: {
enabled: true
},
},
colors: ["#4c95dd"],
stroke: {
curve: 'smooth'
},
fill: {
opacity: 0.3
},
yaxis: {
min: 0
},
};
var chartSpark2 = new ApexCharts(document.querySelector("#chart-spark2"), optionsSpark2);
chartSpark2.render();
var options = {
series: [{
name: 'First Time',
data: [31, 40, 28, 51, 42, 109, 100]
}, {
name: 'Returning',
data: [11, 32, 45, 32, 34, 52, 41]
}],
chart: {
width: 150,
height: 120,
type: 'area',
zoom: {
enabled: false
},
},
dataLabels: {
enabled: false
},
colors: ["#e66430", "#4c95dd"],
stroke: {
curve: 'smooth',
width: 0.5,
},
grid: {
show: false,
},
xaxis: {
categories: ["Mon","Tue","Wed","Thu","Fri","Set","Sun"],
labels: {
show: false,
},
},
yaxis: {
labels: {
show: false,
},
},
legend: {
show: false,
},
};
var chart = new ApexCharts(document.querySelector("#chart3"), options);
chart.render();
});*/ // End of use strict