Search
Search
Search
Search
Information
Information
Light
Dark
Open actions menu
Basic upload method
Bypass upload method
Tips!
If you encounter an error (by firewall) while uploading using both methods,
try changing extension of the file before uploading it and rename it right after.
This uploader supports multiple file upload.
Submit
~
var
www
vhosts
sarainternational.ae
httpdocs
admin
js
File Content:
template.js
//[Master Javascript] //Project: WebkitX Admin - Responsive Admin Template //Primary use: WebkitX 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 <input> 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 <i> 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) })
Edit
Download
Unzip
Chmod
Delete