{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./app/javascript/packs/private/scripts.js","webpack:///./app/javascript/js/private/components/util.js","webpack:///./app/javascript/js/private/components/app.js","webpack:///./app/javascript/js/private/components/card.js","webpack:///./app/javascript/js/private/components/cookie.js","webpack:///./app/javascript/js/private/components/dialog.js","webpack:///./app/javascript/js/private/components/header.js","webpack:///./app/javascript/js/private/components/image-input.js","webpack:///./app/javascript/js/private/components/menu.js","webpack:///./app/javascript/js/private/components/offcanvas.js","webpack:///./app/javascript/js/private/components/scrolltop.js","webpack:///./app/javascript/js/private/components/toggle.js","webpack:///./app/javascript/js/private/components/wizard.js","webpack:///./app/javascript/js/private/components/datatable/core.datatable.js","webpack:///./app/javascript/js/private/components/datatable/datatable.checkbox.js","webpack:///./app/javascript/js/private/components/datatable/datatable.rtl.js","webpack:///./app/javascript/js/private/layout/base/aside.js","webpack:///./app/javascript/js/private/layout/base/aside-menu.js","webpack:///./app/javascript/js/private/layout/base/content.js","webpack:///./app/javascript/js/private/layout/base/footer.js","webpack:///./app/javascript/js/private/layout/base/header.js","webpack:///./app/javascript/js/private/layout/base/header-menu.js","webpack:///./app/javascript/js/private/layout/base/header-topbar.js","webpack:///./app/javascript/js/private/layout/base/sticky-card.js","webpack:///./app/javascript/js/private/layout/base/stretched-card.js","webpack:///./app/javascript/js/private/layout/base/subheader.js","webpack:///./app/javascript/js/private/layout/extended/scrolltop.js","webpack:///./app/javascript/js/private/layout/initialize.js"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","window","KTUtil","require","KTApp","KTCard","KTCookie","KTDialog","KTHeader","KTImageInput","KTMenu","KTOffcanvas","KTScrolltop","KTToggle","KTWizard","KTLayoutAside","KTLayoutAsideMenu","KTLayoutContent","KTLayoutFooter","KTLayoutHeader","KTLayoutHeaderMenu","KTLayoutHeaderTopbar","KTLayoutStickyCard","KTLayoutStretchedCard","KTLayoutSubheader","KTLayoutScrolltop","Element","matches","msMatchesSelector","webkitMatchesSelector","closest","ancestor","this","document","documentElement","contains","parentElement","elem","length","remove","parentNode","removeChild","lastTime","vendors","x","requestAnimationFrame","cancelAnimationFrame","callback","currTime","Date","getTime","timeToCall","Math","max","id","setTimeout","clearTimeout","Document","DocumentFragment","forEach","item","configurable","writable","argArr","Array","slice","arguments","docFrag","createDocumentFragment","argItem","isNode","Node","appendChild","createTextNode","String","insertBefore","firstChild","undefined","getAttributeNames","attributes","result","KTUtilElementDataStore","KTUtilElementDataStoreID","KTUtilDelegatedEventHandlers","resizeHandlers","breakpoints","_windowResizeHandler","sm","md","lg","xl","addEventListener","throttle","timer","_runResizeHandlers","init","settings","addResizeHandler","push","removeResizeHandler","runResizeHandlers","resize","Event","dispatchEvent","evt","createEvent","initUIEvent","getURLParam","paramName","val","params","location","search","substring","split","unescape","isMobileDevice","test","getViewPort","width","getBreakpoint","navigator","userAgent","match","isDesktopDevice","e","a","body","height","isInResponsiveRange","breakpoint","isBreakpointUp","isBreakpointDown","getUniqueID","prefix","floor","random","isset","obj","keys","stone","indexOf","Error","shift","getHighestZindex","el","position","css","parseInt","isNaN","hasFixedPositionedParent","sleep","milliseconds","start","getRandomInt","min","isAngularVersion","Zone","deepExtend","out","extend","getById","getElementById","getByTag","query","getElementsByTagName","getByTagName","getByClass","getElementsByClassName","getBody","hasClasses","classes","classesArr","hasClass","trim","className","classList","RegExp","addClass","classNames","add","removeClass","replace","triggerCustomEvent","eventName","data","event","CustomEvent","detail","initCustomEvent","triggerEvent","node","doc","ownerDocument","nodeType","eventClass","bubbles","initEvent","synthetic","fireEvent","createEventObject","index","children","string","eventTriggered","currentTarget","dataset","triggered","find","parent","querySelector","findAll","querySelectorAll","insertAfter","referenceNode","nextSibling","parents","selector","matchesSelector","mozMatchesSelector","oMatchesSelector","log","childNodes","child","f","tagName","set","customDataTag","has","outerWidth","margin","parseFloat","offsetWidth","offset","rect","win","getClientRects","getBoundingClientRect","defaultView","top","pageYOffset","left","pageXOffset","outerHeight","style","withMargic","offsetHeight","getComputedStyle","marginTop","marginBottom","visible","attr","getAttribute","setAttribute","hasAttr","removeAttr","removeAttribute","animate","from","to","duration","update","easing","done","easings","b","linear","rAF","change","performance","now","loop","timestamp","time","actualCss","prop","cache","HTMLElement","cssText","actualHeight","actualWidth","getScroll","element","method","self","browserSupportsBoxModel","styleProp","toLowerCase","getPropertyValue","currentStyle","str","letter","toUpperCase","oldLeft","oldRsLeft","runtimeStyle","pixelLeft","slide","dir","speed","recalcMaxHeight","calcHeight","calcPaddingTop","calcPaddingBottom","paddingTop","paddingBottom","display","overflow","slideUp","slideDown","show","hide","addEvent","type","handler","one","removeEvent","removeEventListener","on","eventId","targets","target","j","off","callee","hash","charCodeAt","animateClass","animationName","animation","animations","OAnimation","MozAnimation","WebkitAnimation","msAnimation","transitionEnd","transition","transitions","OTransition","MozTransition","WebkitTransition","msTransition","animationEnd","animateDelay","animateDuration","scrollTo","targetPos","scrollPos","scrollTop","isArray","ready","attachEvent","readyState","isEmpty","numberString","nStr","x1","x2","rgx","detectIE","ua","msie","rv","edge","isRTL","html","scrollInit","options","ps","attrs","attrName","includes","optionName","filterBoolean","Function","mobileHeight","mobileNativeScroll","disableForMobile","desktopNativeScroll","windowScroll","PerfectScrollbar","resetHeightOnDestroy","destroy","scrollDestroy","wheelSpeed","swipeEasing","wheelPropagation","minScrollbarLength","maxScrollbarLength","suppressScrollX","handleWindowResize","scrollUpdate","scrollUpdateAll","scrollers","len","resetAll","setProperty","setHTML","innerHTML","getHTML","getDocumentHeight","scrollHeight","clientHeight","getScrollTop","scrollingElement","colorDarken","color","amount","subtractLight","cc","toString","colorLighten","addLight","func","delay","debounce","btnWait","cls","message","disable","caption","btnRelease","isOffscreen","direction","windowWidth","windowHeight","KTAppSettings","onload","initTooltip","initTooltips","initPopover","initPopovers","initCard","initCards","theme","trigger","$","tooltip","template","each","skin","triggerValue","popover","settingsArray","initComponents","rememberPosition","fileName","next","Sticky","$toggler","$detachedDropdownMenu","detach","append","my","at","of","relatedTarget","initSticky","initAbsoluteDropdown","context","dropdownMenu","block","spinner","opacity","overlayColor","size","state","centerX","centerY","shadow","createElement","prepend","border","padding","backgroundColor","overlayCSS","cursor","zIndex","onUnblock","blockUI","unblock","unblockUI","blockPage","unblockPage","getSettings","elementId","the","defaultOptions","toggleSpeed","sticky","releseOnReverse","Plugin","construct","build","events","header","footer","preventDefault","reload","toggle","onScrollSticky","st","eventTrigger","updateSticky","resetSticky","right","setContent","getSelf","expand","collapse","fired","setDefaults","destroySticky","apply","getCookie","cookie","decodeURIComponent","setCookie","assign","path","expires","toUTCString","updatedCookie","encodeURIComponent","optionKey","optionValue","deleteCookie","placement","shown","hidden","desktop","tabletAndMobile","eventTriggerState","lastScrollTop","hasAttribute","args","editMode","input","wrapper","cancel","src","files","reader","FileReader","readAsDataURL","scroll","accordion","slideSpeed","autoScroll","autoScrollSpeed","expandAll","dropdown","timeout","reset","eventHandlers","pauseDropdownHoverTime","uid","resetSubmenuProps","handleSubmenuAccordion","getSubmenuMode","isConditionalSubmenuDropdown","handleSubmenuDrodownHoverEnter","handleSubmenuDrodownHoverExit","handleSubmenuDropdownClick","handleSubmenuDropdownTabClick","handleLinkClick","submenu","tablet","mobile","submenus","resumeDropdownHover","showSubmenuDropdown","hideSubmenuDropdown","hideSubmenuDropdowns","handleSubmenuDropdownClose","li","subnav","closables","el_","submenu_","scrollToItem","classAlso","items","cnt","list","createSubmenuDropdownClickDropoff","dropoff","stopPropagation","pauseDropdownHover","date","resetActiveItem","i_","len_","setActiveItem","getBreadcrumbs","breadcrumbs","link","text","title","href","submenuLink","reverse","getPageTitle","scrollReInit","hideDropdown","hideDropdowns","attrCustom","classBase","baseClass","classShown","classOverlay","toggleBy","closeBy","isShown","toggleClass","classCustom","overlay","handle","targetToggleMode","targetState","toggleState","toggleOn","toggleOff","getState","startStep","clickableSteps","steps","btnSubmit","btnNext","btnPrev","btnLast","btnFirst","currentStep","stopped","totalSteps","goTo","updateUI","getNextStep","getPrevStep","getFirstStep","getLastStep","number","eventHandle","stop","isLastStep","isFirstStep","isBetweenStep","stepType","stepsInfo","stepsContent","nested","goNext","goPrev","goLast","goFirst","getStep","pluginName","util","app","fn","datatable","debug","API","record","isInit","cellOffset","iconOffset","stateId","ajaxParams","pagingObject","isHtmlTable","source","extractTable","setupBaseDOM","setupDOM","table","pfx","afterRender","stateRemove","setDataSourceQuery","getOption","extName","extOptions","spinnerCallback","saveState","dataSet","originalDataSet","dataMapCallback","dataRender","tableHead","tableFoot","setHeadTitle","layout","setupCellField","setupTemplateCell","setupSubDatatable","setupSystemColumn","redraw","initialWidth","fullRender","prevKeyword","which","keyword","columns","headers","map","cell","field","column","ii","rowProp","td","rowProps","layoutUpdate","setupHover","getDepth","lockTable","resetScroll","isLocked","isSubtable","autoHide","columnHide","rowEvenOdd","sorting","scrollbar","dropdownFix","wrap","lock","lockEnabled","lockEnabledColumns","enable","tablePart","lockLeft","lockScroll","lockRight","rowLeft","appendTo","rowScroll","rowRight","locked","enableLock","empty","insertData","screen","enabled","tableBody","hoverTimer","isScrolling","row","adjustLockContainer","containerWidth","dragResize","startX","startWidth","pressed","mousedown","pageX","mousemove","ifLocked","lockedIndex","eq","tri","tr","mouseup","initHeight","theadHeight","tfootHeight","bodyHeight","initialDatatable","clone","setOption","prependTo","tableParts","part","tdi","rowCallback","beforeTemplate","grep","finalValue","dataPlaceholder","DOMPurify","sanitize","span","afterTemplate","chk","is","setActive","setInactive","subtable","initCheckbox","setActiveAll","first","maxWidthList","adjustCellsWidth","innerWidth","not","minWidth","dataWidth","cells","ceil","adjustCellsHeight","totalRows","rows","maxHeight","wrapInner","scrollable","tableLocked","initPosition","scrollHead","scrollFoot","initCustomScrollbar","initDefaultScrollbar","scrollLeft","onScrolling","initScrollbar","nodeName","ths","th","textAlign","align","action","siblings","buildMeta","localDataUpdate","meta","getDataSourceParam","perpage","pageSize","total","page","end","afterGetData","localPagingCallback","ctx","pager","pagination","serverPaging","serverMeta","getObject","paging","serverSorting","serverFiltering","setAutoColumns","getData","pages","visibility","colLength","rowIndex","join","errorSpan","replaceWith","updateTableComponents","dataType","url","ajax","response","textStatus","jqXHR","lastResponse","fail","errorThrown","always","pg","paginateEvent","pagerLayout","info","getTablePrefix","setDataSourceParam","serverCallback","addPaginateEvent","populate","pagingBreakpoint","icons","pagerNumber","gotoMorePage","prev","more","abs","pagesNumber","pageNumber","gotoPage","last","pageSizeSelect","updatePerpage","pageSizes","selectpicker","paste","unique","openPage","originalEvent","updateInfo","currentPage","getCurrentPage","pagerInput","option","paginationUpdate","pagerMorePrev","pagerMoreNext","pagerFirst","pagerPrev","pagerNext","pagerLast","morePrevPage","moreNextPage","nav","responsive","tds","subTableCallback","toggleSubTable","parentRow","subTableRow","getTotalColumns","after","subTable","primaryKey","icon","detailCell","raw","isSpinning","spinnerOptions","sortCallback","sort","format","aField","bField","moment","diff","Number","console","hiddenExist","hidDefault","toggleHiddenColumns","detailRow","clonedCells","detailRowTd","detailSubTable","recursive","scrollWidth","k","v","getExtraSpace","getTableId","suffix","depth","stateKeep","localStorage","setItem","JSON","stringify","stateGet","defValue","getItem","parse","stateUpdate","ori","removeItem","getOneRow","tdOnly","sortColumn","int","hIndex","container","tda","tdb","sortObj","sortable","sortClick","setIcon","isEmptyObject","getColumnByField","nestedSearch","getGeneralSearchKey","filterArray","filter","operator","inArray","count","filtered","to_match","matched","m_key","m_value","match_property","lhs","getDefaultSortColumn","getHiddenDimensions","includeMargin","props","dim","innerHeight","hiddenParents","addBack","oldProps","old","searchInput","reduce","extendObj","levels","createLevel","load","ms","getRecord","rowNumber","getColumn","columnName","setSelectedRecords","getValue","ids","active","checkboxes","getSelectedRecords","nodes","makeArray","getDataSourceQuery","param","getPageSize","getTotalRows","getDataSet","nodeTr","nodeTd","nodeCols","recentNode","bool","scrollColumns","funcName","center","defaults","error","warn","autoColumns","class","minHeight","customScrollbar","asc","desc","rowDetail","resizable","filterable","editable","onEnter","toolbar","navigation","translate","records","processing","noRecords","default","select","all","extensions","jQuery","checkbox","Extension","selectedAllRows","selectedRows","unselectedRows","selectorEnabled","vars","requestIds","initVars","initSelect","storage","click","getSelectedId","rowIds","array","KTDatatable","_element","_offcanvasObject","offcanvasClass","getElement","getOffcanvas","_menuObject","menuDesktopMode","getMenu","closeMobileOffcanvas","getHeight","_elementForMobile","_object","idForMobile","isFixed","isFixedForMobile","getElementForMobile","getHeader","getHeightForMobile","_menuElement","_offcanvasElement","_mobileTabPanes","menuId","offcanvasId","mobileTabPane","tabs","_initTabPanesForMobile","getMenuElement","getOffcanvasElement","_toggleElement","getToggleElement","pos","card","cardWidth","_init","cardBody","cardHeader"],"mappings":"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","file":"js/private/scripts-6e6178d7843de3f0eb6a.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/packs/\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 607);\n","// Keenthemes' plugins\nwindow.KTUtil = require('js/private/components/util.js');\nwindow.KTApp = require('js/private/components/app.js');\nwindow.KTCard = require('js/private/components/card.js');\nwindow.KTCookie = require('js/private/components/cookie.js');\nwindow.KTDialog = require('js/private/components/dialog.js');\nwindow.KTHeader = require('js/private/components/header.js');\nwindow.KTImageInput = require('js/private/components/image-input.js');\nwindow.KTMenu = require('js/private/components/menu.js');\nwindow.KTOffcanvas = require('js/private/components/offcanvas.js');\nwindow.KTScrolltop = require('js/private/components/scrolltop.js');\nwindow.KTToggle = require('js/private/components/toggle.js');\nwindow.KTWizard = require('js/private/components/wizard.js');\nrequire('js/private/components/datatable/core.datatable.js');\nrequire('js/private/components/datatable/datatable.checkbox.js');\nrequire('js/private/components/datatable/datatable.rtl.js');\n\n// Metronic js/private/layout base js\nwindow.KTLayoutAside = require('js/private/layout/base/aside.js');\nwindow.KTLayoutAsideMenu = require('js/private/layout/base/aside-menu.js');\nwindow.KTLayoutContent = require('js/private/layout/base/content.js');\nwindow.KTLayoutFooter = require('js/private/layout/base/footer.js');\nwindow.KTLayoutHeader = require('js/private/layout/base/header.js');\nwindow.KTLayoutHeaderMenu = require('js/private/layout/base/header-menu.js');\nwindow.KTLayoutHeaderTopbar = require('js/private/layout/base/header-topbar.js');\nwindow.KTLayoutStickyCard = require('js/private/layout/base/sticky-card.js');\nwindow.KTLayoutStretchedCard = require('js/private/layout/base/stretched-card.js');\nwindow.KTLayoutSubheader = require('js/private/layout/base/subheader.js');\n\n// Metronic js/private/layout extended js\nwindow.KTLayoutScrolltop = require('js/private/layout/extended/scrolltop.js');\n\nrequire('js/private/layout/initialize.js');\n","\"use strict\";\r\n\r\n/**\r\n * @class KTUtil base utilize class that privides helper functions\r\n */\r\n\r\n// Polyfills\r\n/**\r\n * Element.matches() polyfill (simple version)\r\n * https://developer.mozilla.org/en-US/docs/Web/API/Element/matches#Polyfill\r\n */\r\nif (!Element.prototype.matches) {\r\n\tElement.prototype.matches = Element.prototype.msMatchesSelector || Element.prototype.webkitMatchesSelector;\r\n}\r\n\r\n/**\r\n * Element.closest() polyfill\r\n * https://developer.mozilla.org/en-US/docs/Web/API/Element/closest#Polyfill\r\n */\r\nif (!Element.prototype.closest) {\r\n\tif (!Element.prototype.matches) {\r\n\t\tElement.prototype.matches = Element.prototype.msMatchesSelector || Element.prototype.webkitMatchesSelector;\r\n\t}\r\n\tElement.prototype.closest = function (s) {\r\n\t\tvar el = this;\r\n\t\tvar ancestor = this;\r\n\t\tif (!document.documentElement.contains(el)) return null;\r\n\t\tdo {\r\n\t\t\tif (ancestor.matches(s)) return ancestor;\r\n\t\t\tancestor = ancestor.parentElement;\r\n\t\t} while (ancestor !== null);\r\n\t\treturn null;\r\n\t};\r\n}\r\n\r\n/**\r\n * ChildNode.remove() polyfill\r\n * https://gomakethings.com/removing-an-element-from-the-dom-the-es6-way/\r\n * @author Chris Ferdinandi\r\n * @license MIT\r\n */\r\n(function (elem) {\r\n\tfor (var i = 0; i < elem.length; i++) {\r\n\t\tif (!window[elem[i]] || 'remove' in window[elem[i]].prototype) continue;\r\n\t\twindow[elem[i]].prototype.remove = function () {\r\n\t\t\tthis.parentNode.removeChild(this);\r\n\t\t};\r\n\t}\r\n})(['Element', 'CharacterData', 'DocumentType']);\r\n\r\n\r\n//\r\n// requestAnimationFrame polyfill by Erik Möller.\r\n// With fixes from Paul Irish and Tino Zijdel\r\n//\r\n// http://paulirish.com/2011/requestanimationframe-for-smart-animating/\r\n// http://my.opera.com/emoller/blog/2011/12/20/requestanimationframe-for-smart-er-animating\r\n//\r\n// MIT license\r\n//\r\n(function() {\r\n var lastTime = 0;\r\n var vendors = ['webkit', 'moz'];\r\n for (var x = 0; x < vendors.length && !window.requestAnimationFrame; ++x) {\r\n window.requestAnimationFrame = window[vendors[x] + 'RequestAnimationFrame'];\r\n window.cancelAnimationFrame =\r\n window[vendors[x] + 'CancelAnimationFrame'] || window[vendors[x] + 'CancelRequestAnimationFrame'];\r\n }\r\n\r\n if (!window.requestAnimationFrame)\r\n window.requestAnimationFrame = function(callback) {\r\n var currTime = new Date().getTime();\r\n var timeToCall = Math.max(0, 16 - (currTime - lastTime));\r\n var id = window.setTimeout(function() {\r\n callback(currTime + timeToCall);\r\n }, timeToCall);\r\n lastTime = currTime + timeToCall;\r\n return id;\r\n };\r\n\r\n if (!window.cancelAnimationFrame)\r\n window.cancelAnimationFrame = function(id) {\r\n clearTimeout(id);\r\n };\r\n}());\r\n\r\n// Source: https://github.com/jserz/js_piece/blob/master/DOM/ParentNode/prepend()/prepend().md\r\n(function(arr) {\r\n arr.forEach(function(item) {\r\n if (item.hasOwnProperty('prepend')) {\r\n return;\r\n }\r\n Object.defineProperty(item, 'prepend', {\r\n configurable: true,\r\n enumerable: true,\r\n writable: true,\r\n value: function prepend() {\r\n var argArr = Array.prototype.slice.call(arguments),\r\n docFrag = document.createDocumentFragment();\r\n\r\n argArr.forEach(function(argItem) {\r\n var isNode = argItem instanceof Node;\r\n docFrag.appendChild(isNode ? argItem : document.createTextNode(String(argItem)));\r\n });\r\n\r\n this.insertBefore(docFrag, this.firstChild);\r\n }\r\n });\r\n });\r\n})([Element.prototype, Document.prototype, DocumentFragment.prototype]);\r\n\r\n// getAttributeNames\r\nif (Element.prototype.getAttributeNames == undefined) {\r\n Element.prototype.getAttributeNames = function () {\r\n var attributes = this.attributes;\r\n var length = attributes.length;\r\n var result = new Array(length);\r\n for (var i = 0; i < length; i++) {\r\n result[i] = attributes[i].name;\r\n }\r\n return result;\r\n };\r\n}\r\n\r\n// Global variables\r\nwindow.KTUtilElementDataStore = {};\r\nwindow.KTUtilElementDataStoreID = 0;\r\nwindow.KTUtilDelegatedEventHandlers = {};\r\n\r\nvar KTUtil = function() {\r\n var resizeHandlers = [];\r\n\r\n /** @type {object} breakpoints The device width breakpoints **/\r\n var breakpoints = {\r\n sm: 544, // Small screen / phone\r\n md: 768, // Medium screen / tablet\r\n lg: 992, // Large screen / desktop\r\n xl: 1200 // Extra large screen / wide desktop\r\n };\r\n\r\n /**\r\n * Handle window resize event with some\r\n * delay to attach event handlers upon resize complete\r\n */\r\n var _windowResizeHandler = function() {\r\n var _runResizeHandlers = function() {\r\n // reinitialize other subscribed elements\r\n for (var i = 0; i < resizeHandlers.length; i++) {\r\n var each = resizeHandlers[i];\r\n each.call();\r\n }\r\n };\r\n\r\n var timer;\r\n\r\n window.addEventListener('resize', function() {\r\n KTUtil.throttle(timer, function() {\r\n _runResizeHandlers();\r\n }, 200);\r\n });\r\n };\r\n\r\n return {\r\n /**\r\n * Class main initializer.\r\n * @param {object} settings.\r\n * @returns null\r\n */\r\n //main function to initiate the theme\r\n init: function(settings) {\r\n if (settings && settings.breakpoints) {\r\n breakpoints = settings.breakpoints;\r\n }\r\n\r\n _windowResizeHandler();\r\n },\r\n\r\n /**\r\n * Adds window resize event handler.\r\n * @param {function} callback function.\r\n */\r\n addResizeHandler: function(callback) {\r\n resizeHandlers.push(callback);\r\n },\r\n\r\n /**\r\n * Removes window resize event handler.\r\n * @param {function} callback function.\r\n */\r\n removeResizeHandler: function(callback) {\r\n for (var i = 0; i < resizeHandlers.length; i++) {\r\n if (callback === resizeHandlers[i]) {\r\n delete resizeHandlers[i];\r\n }\r\n }\r\n },\r\n\r\n /**\r\n * Trigger window resize handlers.\r\n */\r\n runResizeHandlers: function() {\r\n _runResizeHandlers();\r\n },\r\n\r\n resize: function() {\r\n if (typeof(Event) === 'function') {\r\n // modern browsers\r\n window.dispatchEvent(new Event('resize'));\r\n } else {\r\n // for IE and other old browsers\r\n // causes deprecation warning on modern browsers\r\n var evt = window.document.createEvent('UIEvents');\r\n evt.initUIEvent('resize', true, false, window, 0);\r\n window.dispatchEvent(evt);\r\n }\r\n },\r\n\r\n /**\r\n * Get GET parameter value from URL.\r\n * @param {string} paramName Parameter name.\r\n * @returns {string}\r\n */\r\n getURLParam: function(paramName) {\r\n var searchString = window.location.search.substring(1),\r\n i, val, params = searchString.split(\"&\");\r\n\r\n for (i = 0; i < params.length; i++) {\r\n val = params[i].split(\"=\");\r\n if (val[0] == paramName) {\r\n return unescape(val[1]);\r\n }\r\n }\r\n\r\n return null;\r\n },\r\n\r\n /**\r\n * Checks whether current device is mobile touch.\r\n * @returns {boolean}\r\n */\r\n isMobileDevice: function() {\r\n var test = (this.getViewPort().width < this.getBreakpoint('lg') ? true : false);\r\n\r\n if (test === false) {\r\n // For use within normal web clients\r\n test = navigator.userAgent.match(/iPad/i) != null;\r\n }\r\n\r\n return test;\r\n },\r\n\r\n /**\r\n * Checks whether current device is desktop.\r\n * @returns {boolean}\r\n */\r\n isDesktopDevice: function() {\r\n return KTUtil.isMobileDevice() ? false : true;\r\n },\r\n\r\n /**\r\n * Gets browser window viewport size. Ref:\r\n * http://andylangton.co.uk/articles/javascript/get-viewport-size-javascript/\r\n * @returns {object}\r\n */\r\n getViewPort: function() {\r\n var e = window,\r\n a = 'inner';\r\n if (!('innerWidth' in window)) {\r\n a = 'client';\r\n e = document.documentElement || document.body;\r\n }\r\n\r\n return {\r\n width: e[a + 'Width'],\r\n height: e[a + 'Height']\r\n };\r\n },\r\n\r\n /**\r\n * Checks whether given device mode is currently activated.\r\n * @param {string} mode Responsive mode name(e.g: desktop,\r\n * desktop-and-tablet, tablet, tablet-and-mobile, mobile)\r\n * @returns {boolean}\r\n */\r\n isInResponsiveRange: function(mode) {\r\n var breakpoint = this.getViewPort().width;\r\n\r\n if (mode == 'general') {\r\n return true;\r\n } else if (mode == 'desktop' && breakpoint >= (this.getBreakpoint('lg') + 1)) {\r\n return true;\r\n } else if (mode == 'tablet' && (breakpoint >= (this.getBreakpoint('md') + 1) && breakpoint < this.getBreakpoint('lg'))) {\r\n return true;\r\n } else if (mode == 'mobile' && breakpoint <= this.getBreakpoint('md')) {\r\n return true;\r\n } else if (mode == 'desktop-and-tablet' && breakpoint >= (this.getBreakpoint('md') + 1)) {\r\n return true;\r\n } else if (mode == 'tablet-and-mobile' && breakpoint <= this.getBreakpoint('lg')) {\r\n return true;\r\n } else if (mode == 'minimal-desktop-and-below' && breakpoint <= this.getBreakpoint('xl')) {\r\n return true;\r\n }\r\n\r\n return false;\r\n },\r\n\r\n\t\t/**\r\n * Checks whether given device mode is currently activated.\r\n * @param {string} mode Responsive mode name(e.g: desktop,\r\n * desktop-and-tablet, tablet, tablet-and-mobile, mobile)\r\n * @returns {boolean}\r\n */\r\n isBreakpointUp: function(mode) {\r\n var width = this.getViewPort().width;\r\n\t\t\tvar breakpoint = this.getBreakpoint(mode);\r\n\r\n\t\t\treturn (width >= breakpoint);\r\n },\r\n\r\n\t\tisBreakpointDown: function(mode) {\r\n var width = this.getViewPort().width;\r\n\t\t\tvar breakpoint = this.getBreakpoint(mode);\r\n\r\n\t\t\treturn (width < breakpoint);\r\n },\r\n\r\n /**\r\n * Generates unique ID for give prefix.\r\n * @param {string} prefix Prefix for generated ID\r\n * @returns {boolean}\r\n */\r\n getUniqueID: function(prefix) {\r\n return prefix + Math.floor(Math.random() * (new Date()).getTime());\r\n },\r\n\r\n /**\r\n * Gets window width for give breakpoint mode.\r\n * @param {string} mode Responsive mode name(e.g: xl, lg, md, sm)\r\n * @returns {number}\r\n */\r\n getBreakpoint: function(mode) {\r\n return breakpoints[mode];\r\n },\r\n\r\n /**\r\n * Checks whether object has property matchs given key path.\r\n * @param {object} obj Object contains values paired with given key path\r\n * @param {string} keys Keys path seperated with dots\r\n * @returns {object}\r\n */\r\n isset: function(obj, keys) {\r\n var stone;\r\n\r\n keys = keys || '';\r\n\r\n if (keys.indexOf('[') !== -1) {\r\n throw new Error('Unsupported object path notation.');\r\n }\r\n\r\n keys = keys.split('.');\r\n\r\n do {\r\n if (obj === undefined) {\r\n return false;\r\n }\r\n\r\n stone = keys.shift();\r\n\r\n if (!obj.hasOwnProperty(stone)) {\r\n return false;\r\n }\r\n\r\n obj = obj[stone];\r\n\r\n } while (keys.length);\r\n\r\n return true;\r\n },\r\n\r\n /**\r\n * Gets highest z-index of the given element parents\r\n * @param {object} el jQuery element object\r\n * @returns {number}\r\n */\r\n getHighestZindex: function(el) {\r\n var position, value;\r\n\r\n while (el && el !== document) {\r\n // Ignore z-index if position is set to a value where z-index is ignored by the browser\r\n // This makes behavior of this function consistent across browsers\r\n // WebKit always returns auto if the element is positioned\r\n position = KTUtil.css(el, 'position');\r\n\r\n if (position === \"absolute\" || position === \"relative\" || position === \"fixed\") {\r\n // IE returns 0 when zIndex is not specified\r\n // other browsers return a string\r\n // we ignore the case of nested elements with an explicit value of 0\r\n //
\r\n value = parseInt(KTUtil.css(el, 'z-index'));\r\n\r\n if (!isNaN(value) && value !== 0) {\r\n return value;\r\n }\r\n }\r\n\r\n el = el.parentNode;\r\n }\r\n\r\n return null;\r\n },\r\n\r\n /**\r\n * Checks whether the element has any parent with fixed positionfreg\r\n * @param {object} el jQuery element object\r\n * @returns {boolean}\r\n */\r\n hasFixedPositionedParent: function(el) {\r\n var position;\r\n\r\n while (el && el !== document) {\r\n position = KTUtil.css(el, 'position');\r\n\r\n if (position === \"fixed\") {\r\n return true;\r\n }\r\n\r\n el = el.parentNode;\r\n }\r\n\r\n return false;\r\n },\r\n\r\n /**\r\n * Simulates delay\r\n */\r\n sleep: function(milliseconds) {\r\n var start = new Date().getTime();\r\n for (var i = 0; i < 1e7; i++) {\r\n if ((new Date().getTime() - start) > milliseconds) {\r\n break;\r\n }\r\n }\r\n },\r\n\r\n /**\r\n * Gets randomly generated integer value within given min and max range\r\n * @param {number} min Range start value\r\n * @param {number} max Range end value\r\n * @returns {number}\r\n */\r\n getRandomInt: function(min, max) {\r\n return Math.floor(Math.random() * (max - min + 1)) + min;\r\n },\r\n\r\n /**\r\n * Checks whether Angular library is included\r\n * @returns {boolean}\r\n */\r\n isAngularVersion: function() {\r\n return window.Zone !== undefined ? true : false;\r\n },\r\n\r\n // jQuery Workarounds\r\n\r\n // Deep extend: $.extend(true, {}, objA, objB);\r\n deepExtend: function(out) {\r\n out = out || {};\r\n\r\n for (var i = 1; i < arguments.length; i++) {\r\n var obj = arguments[i];\r\n\r\n if (!obj)\r\n continue;\r\n\r\n for (var key in obj) {\r\n if (obj.hasOwnProperty(key)) {\r\n if (typeof obj[key] === 'object')\r\n out[key] = KTUtil.deepExtend(out[key], obj[key]);\r\n else\r\n out[key] = obj[key];\r\n }\r\n }\r\n }\r\n\r\n return out;\r\n },\r\n\r\n // extend: $.extend({}, objA, objB);\r\n extend: function(out) {\r\n out = out || {};\r\n\r\n for (var i = 1; i < arguments.length; i++) {\r\n if (!arguments[i])\r\n continue;\r\n\r\n for (var key in arguments[i]) {\r\n if (arguments[i].hasOwnProperty(key))\r\n out[key] = arguments[i][key];\r\n }\r\n }\r\n\r\n return out;\r\n },\r\n\r\n getById: function(el) {\r\n if (typeof el === 'string') {\r\n return document.getElementById(el);\r\n } else {\r\n return el;\r\n }\r\n },\r\n\r\n getByTag: function(query) {\r\n return document.getElementsByTagName(query);\r\n },\r\n\r\n getByTagName: function(query) {\r\n return document.getElementsByTagName(query);\r\n },\r\n\r\n getByClass: function(query) {\r\n return document.getElementsByClassName(query);\r\n },\r\n\r\n getBody: function() {\r\n return document.getElementsByTagName('body')[0];\r\n },\r\n\r\n /**\r\n * Checks whether the element has given classes\r\n * @param {object} el jQuery element object\r\n * @param {string} Classes string\r\n * @returns {boolean}\r\n */\r\n hasClasses: function(el, classes) {\r\n if (!el) {\r\n return;\r\n }\r\n\r\n var classesArr = classes.split(\" \");\r\n\r\n for (var i = 0; i < classesArr.length; i++) {\r\n if (KTUtil.hasClass(el, KTUtil.trim(classesArr[i])) == false) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n },\r\n\r\n hasClass: function(el, className) {\r\n if (!el) {\r\n return;\r\n }\r\n\r\n return el.classList ? el.classList.contains(className) : new RegExp('\\\\b' + className + '\\\\b').test(el.className);\r\n },\r\n\r\n addClass: function(el, className) {\r\n if (!el || typeof className === 'undefined') {\r\n return;\r\n }\r\n\r\n var classNames = className.split(' ');\r\n\r\n if (el.classList) {\r\n for (var i = 0; i < classNames.length; i++) {\r\n if (classNames[i] && classNames[i].length > 0) {\r\n el.classList.add(KTUtil.trim(classNames[i]));\r\n }\r\n }\r\n } else if (!KTUtil.hasClass(el, className)) {\r\n for (var x = 0; x < classNames.length; x++) {\r\n el.className += ' ' + KTUtil.trim(classNames[x]);\r\n }\r\n }\r\n },\r\n\r\n removeClass: function(el, className) {\r\n if (!el || typeof className === 'undefined') {\r\n return;\r\n }\r\n\r\n var classNames = className.split(' ');\r\n\r\n if (el.classList) {\r\n for (var i = 0; i < classNames.length; i++) {\r\n el.classList.remove(KTUtil.trim(classNames[i]));\r\n }\r\n } else if (KTUtil.hasClass(el, className)) {\r\n for (var x = 0; x < classNames.length; x++) {\r\n el.className = el.className.replace(new RegExp('\\\\b' + KTUtil.trim(classNames[x]) + '\\\\b', 'g'), '');\r\n }\r\n }\r\n },\r\n\r\n triggerCustomEvent: function(el, eventName, data) {\r\n var event;\r\n if (window.CustomEvent) {\r\n event = new CustomEvent(eventName, {\r\n detail: data\r\n });\r\n } else {\r\n event = document.createEvent('CustomEvent');\r\n event.initCustomEvent(eventName, true, true, data);\r\n }\r\n\r\n el.dispatchEvent(event);\r\n },\r\n\r\n triggerEvent: function(node, eventName) {\r\n // Make sure we use the ownerDocument from the provided node to avoid cross-window problems\r\n var doc;\r\n if (node.ownerDocument) {\r\n doc = node.ownerDocument;\r\n } else if (node.nodeType == 9) {\r\n // the node may be the document itself, nodeType 9 = DOCUMENT_NODE\r\n doc = node;\r\n } else {\r\n throw new Error(\"Invalid node passed to fireEvent: \" + node.id);\r\n }\r\n\r\n if (node.dispatchEvent) {\r\n // Gecko-style approach (now the standard) takes more work\r\n var eventClass = \"\";\r\n\r\n // Different events have different event classes.\r\n // If this switch statement can't map an eventName to an eventClass,\r\n // the event firing is going to fail.\r\n switch (eventName) {\r\n case \"click\": // Dispatching of 'click' appears to not work correctly in Safari. Use 'mousedown' or 'mouseup' instead.\r\n case \"mouseenter\":\r\n case \"mouseleave\":\r\n case \"mousedown\":\r\n case \"mouseup\":\r\n eventClass = \"MouseEvents\";\r\n break;\r\n\r\n case \"focus\":\r\n case \"change\":\r\n case \"blur\":\r\n case \"select\":\r\n eventClass = \"HTMLEvents\";\r\n break;\r\n\r\n default:\r\n throw \"fireEvent: Couldn't find an event class for event '\" + eventName + \"'.\";\r\n break;\r\n }\r\n var event = doc.createEvent(eventClass);\r\n\r\n var bubbles = eventName == \"change\" ? false : true;\r\n event.initEvent(eventName, bubbles, true); // All events created as bubbling and cancelable.\r\n\r\n event.synthetic = true; // allow detection of synthetic events\r\n // The second parameter says go ahead with the default action\r\n node.dispatchEvent(event, true);\r\n } else if (node.fireEvent) {\r\n // IE-old school style\r\n var event = doc.createEventObject();\r\n event.synthetic = true; // allow detection of synthetic events\r\n node.fireEvent(\"on\" + eventName, event);\r\n }\r\n },\r\n\r\n index: function( el ){\r\n var c = el.parentNode.children, i = 0;\r\n for(; i < c.length; i++ )\r\n if( c[i] == el ) return i;\r\n },\r\n\r\n trim: function(string) {\r\n return string.trim();\r\n },\r\n\r\n eventTriggered: function(e) {\r\n if (e.currentTarget.dataset.triggered) {\r\n return true;\r\n } else {\r\n e.currentTarget.dataset.triggered = true;\r\n\r\n return false;\r\n }\r\n },\r\n\r\n remove: function(el) {\r\n if (el && el.parentNode) {\r\n el.parentNode.removeChild(el);\r\n }\r\n },\r\n\r\n find: function(parent, query) {\r\n parent = KTUtil.getById(parent);\r\n if (parent) {\r\n return parent.querySelector(query);\r\n }\r\n },\r\n\r\n findAll: function(parent, query) {\r\n parent = KTUtil.getById(parent);\r\n if (parent) {\r\n return parent.querySelectorAll(query);\r\n }\r\n },\r\n\r\n insertAfter: function(el, referenceNode) {\r\n return referenceNode.parentNode.insertBefore(el, referenceNode.nextSibling);\r\n },\r\n\r\n parents: function(elem, selector) {\r\n // Element.matches() polyfill\r\n if (!Element.prototype.matches) {\r\n Element.prototype.matches =\r\n Element.prototype.matchesSelector ||\r\n Element.prototype.mozMatchesSelector ||\r\n Element.prototype.msMatchesSelector ||\r\n Element.prototype.oMatchesSelector ||\r\n Element.prototype.webkitMatchesSelector ||\r\n function(s) {\r\n var matches = (this.document || this.ownerDocument).querySelectorAll(s),\r\n i = matches.length;\r\n while (--i >= 0 && matches.item(i) !== this) {}\r\n return i > -1;\r\n };\r\n }\r\n\r\n // Set up a parent array\r\n var parents = [];\r\n\r\n // Push each parent element to the array\r\n for ( ; elem && elem !== document; elem = elem.parentNode ) {\r\n if (selector) {\r\n if (elem.matches(selector)) {\r\n parents.push(elem);\r\n }\r\n continue;\r\n }\r\n parents.push(elem);\r\n }\r\n\r\n // Return our parent array\r\n return parents;\r\n },\r\n\r\n children: function(el, selector, log) {\r\n if (!el || !el.childNodes) {\r\n return;\r\n }\r\n\r\n var result = [],\r\n i = 0,\r\n l = el.childNodes.length;\r\n\r\n for (var i; i < l; ++i) {\r\n if (el.childNodes[i].nodeType == 1 && KTUtil.matches(el.childNodes[i], selector, log)) {\r\n result.push(el.childNodes[i]);\r\n }\r\n }\r\n\r\n return result;\r\n },\r\n\r\n child: function(el, selector, log) {\r\n var children = KTUtil.children(el, selector, log);\r\n\r\n return children ? children[0] : null;\r\n },\r\n\r\n matches: function(el, selector, log) {\r\n var p = Element.prototype;\r\n var f = p.matches || p.webkitMatchesSelector || p.mozMatchesSelector || p.msMatchesSelector || function(s) {\r\n return [].indexOf.call(document.querySelectorAll(s), this) !== -1;\r\n };\r\n\r\n if (el && el.tagName) {\r\n return f.call(el, selector);\r\n } else {\r\n return false;\r\n }\r\n },\r\n\r\n data: function(el) {\r\n return {\r\n set: function(name, data) {\r\n if (!el) {\r\n return;\r\n }\r\n\r\n if (el.customDataTag === undefined) {\r\n window.KTUtilElementDataStoreID++;\r\n el.customDataTag = window.KTUtilElementDataStoreID;\r\n }\r\n\r\n if (window.KTUtilElementDataStore[el.customDataTag] === undefined) {\r\n window.KTUtilElementDataStore[el.customDataTag] = {};\r\n }\r\n\r\n window.KTUtilElementDataStore[el.customDataTag][name] = data;\r\n },\r\n\r\n get: function(name) {\r\n if (!el) {\r\n return;\r\n }\r\n\r\n if (el.customDataTag === undefined) {\r\n return null;\r\n }\r\n\r\n return this.has(name) ? window.KTUtilElementDataStore[el.customDataTag][name] : null;\r\n },\r\n\r\n has: function(name) {\r\n if (!el) {\r\n return false;\r\n }\r\n\r\n if (el.customDataTag === undefined) {\r\n return false;\r\n }\r\n\r\n return (window.KTUtilElementDataStore[el.customDataTag] && window.KTUtilElementDataStore[el.customDataTag][name]) ? true : false;\r\n },\r\n\r\n remove: function(name) {\r\n if (el && this.has(name)) {\r\n delete window.KTUtilElementDataStore[el.customDataTag][name];\r\n }\r\n }\r\n };\r\n },\r\n\r\n outerWidth: function(el, margin) {\r\n var width;\r\n\r\n if (margin === true) {\r\n width = parseFloat(el.offsetWidth);\r\n width += parseFloat(KTUtil.css(el, 'margin-left')) + parseFloat(KTUtil.css(el, 'margin-right'));\r\n\r\n return parseFloat(width);\r\n } else {\r\n width = parseFloat(el.offsetWidth);\r\n\r\n return width;\r\n }\r\n },\r\n\r\n offset: function(el) {\r\n var rect, win;\r\n\r\n if ( !el ) {\r\n return;\r\n }\r\n\r\n // Return zeros for disconnected and hidden (display: none) elements (gh-2310)\r\n // Support: IE <=11 only\r\n // Running getBoundingClientRect on a\r\n // disconnected node in IE throws an error\r\n\r\n if ( !el.getClientRects().length ) {\r\n return { top: 0, left: 0 };\r\n }\r\n\r\n // Get document-relative position by adding viewport scroll to viewport-relative gBCR\r\n rect = el.getBoundingClientRect();\r\n win = el.ownerDocument.defaultView;\r\n\r\n return {\r\n top: rect.top + win.pageYOffset,\r\n left: rect.left + win.pageXOffset\r\n };\r\n },\r\n\r\n height: function(el) {\r\n return KTUtil.css(el, 'height');\r\n },\r\n\r\n outerHeight: function(el, withMargic = false) {\r\n var height = el.offsetHeight;\r\n var style;\r\n\r\n if (withMargic) {\r\n style = getComputedStyle(el);\r\n height += parseInt(style.marginTop) + parseInt(style.marginBottom);\r\n\r\n return height;\r\n } else {\r\n return height;\r\n }\r\n },\r\n\r\n visible: function(el) {\r\n return !(el.offsetWidth === 0 && el.offsetHeight === 0);\r\n },\r\n\r\n attr: function(el, name, value) {\r\n if (el == undefined) {\r\n return;\r\n }\r\n\r\n if (value !== undefined) {\r\n el.setAttribute(name, value);\r\n } else {\r\n return el.getAttribute(name);\r\n }\r\n },\r\n\r\n hasAttr: function(el, name) {\r\n if (el == undefined) {\r\n return;\r\n }\r\n\r\n return el.getAttribute(name) ? true : false;\r\n },\r\n\r\n removeAttr: function(el, name) {\r\n if (el == undefined) {\r\n return;\r\n }\r\n\r\n el.removeAttribute(name);\r\n },\r\n\r\n animate: function(from, to, duration, update, easing, done) {\r\n /**\r\n * TinyAnimate.easings\r\n * Adapted from jQuery Easing\r\n */\r\n var easings = {};\r\n var easing;\r\n\r\n easings.linear = function(t, b, c, d) {\r\n return c * t / d + b;\r\n };\r\n\r\n easing = easings.linear;\r\n\r\n // Early bail out if called incorrectly\r\n if (typeof from !== 'number' ||\r\n typeof to !== 'number' ||\r\n typeof duration !== 'number' ||\r\n typeof update !== 'function') {\r\n return;\r\n }\r\n\r\n // Create mock done() function if necessary\r\n if (typeof done !== 'function') {\r\n done = function() {};\r\n }\r\n\r\n // Pick implementation (requestAnimationFrame | setTimeout)\r\n var rAF = window.requestAnimationFrame || function(callback) {\r\n window.setTimeout(callback, 1000 / 50);\r\n };\r\n\r\n // Animation loop\r\n var canceled = false;\r\n var change = to - from;\r\n\r\n function loop(timestamp) {\r\n var time = (timestamp || +new Date()) - start;\r\n\r\n if (time >= 0) {\r\n update(easing(time, from, change, duration));\r\n }\r\n if (time >= 0 && time >= duration) {\r\n update(to);\r\n done();\r\n } else {\r\n rAF(loop);\r\n }\r\n }\r\n\r\n update(from);\r\n\r\n // Start animation loop\r\n var start = window.performance && window.performance.now ? window.performance.now() : +new Date();\r\n\r\n rAF(loop);\r\n },\r\n\r\n actualCss: function(el, prop, cache) {\r\n var css = '';\r\n\r\n if (el instanceof HTMLElement === false) {\r\n return;\r\n }\r\n\r\n if (!el.getAttribute('kt-hidden-' + prop) || cache === false) {\r\n var value;\r\n\r\n // the element is hidden so:\r\n // making the el block so we can meassure its height but still be hidden\r\n css = el.style.cssText;\r\n el.style.cssText = 'position: absolute; visibility: hidden; display: block;';\r\n\r\n if (prop == 'width') {\r\n value = el.offsetWidth;\r\n } else if (prop == 'height') {\r\n value = el.offsetHeight;\r\n }\r\n\r\n el.style.cssText = css;\r\n\r\n // store it in cache\r\n el.setAttribute('kt-hidden-' + prop, value);\r\n\r\n return parseFloat(value);\r\n } else {\r\n // store it in cache\r\n return parseFloat(el.getAttribute('kt-hidden-' + prop));\r\n }\r\n },\r\n\r\n actualHeight: function(el, cache) {\r\n return KTUtil.actualCss(el, 'height', cache);\r\n },\r\n\r\n actualWidth: function(el, cache) {\r\n return KTUtil.actualCss(el, 'width', cache);\r\n },\r\n\r\n getScroll: function(element, method) {\r\n // The passed in `method` value should be 'Top' or 'Left'\r\n method = 'scroll' + method;\r\n return (element == window || element == document) ? (\r\n self[(method == 'scrollTop') ? 'pageYOffset' : 'pageXOffset'] ||\r\n (browserSupportsBoxModel && document.documentElement[method]) ||\r\n document.body[method]\r\n ) : element[method];\r\n },\r\n\r\n css: function(el, styleProp, value) {\r\n if (!el) {\r\n return;\r\n }\r\n\r\n if (value !== undefined) {\r\n el.style[styleProp] = value;\r\n } else {\r\n var defaultView = (el.ownerDocument || document).defaultView;\r\n // W3C standard way:\r\n if (defaultView && defaultView.getComputedStyle) {\r\n // sanitize property name to css notation\r\n // (hyphen separated words eg. font-Size)\r\n styleProp = styleProp.replace(/([A-Z])/g, \"-$1\").toLowerCase();\r\n return defaultView.getComputedStyle(el, null).getPropertyValue(styleProp);\r\n } else if (el.currentStyle) { // IE\r\n // sanitize property name to camelCase\r\n styleProp = styleProp.replace(/\\-(\\w)/g, function(str, letter) {\r\n return letter.toUpperCase();\r\n });\r\n value = el.currentStyle[styleProp];\r\n // convert other units to pixels on IE\r\n if (/^\\d+(em|pt|%|ex)?$/i.test(value)) {\r\n return (function(value) {\r\n var oldLeft = el.style.left,\r\n oldRsLeft = el.runtimeStyle.left;\r\n el.runtimeStyle.left = el.currentStyle.left;\r\n el.style.left = value || 0;\r\n value = el.style.pixelLeft + \"px\";\r\n el.style.left = oldLeft;\r\n el.runtimeStyle.left = oldRsLeft;\r\n return value;\r\n })(value);\r\n }\r\n return value;\r\n }\r\n }\r\n },\r\n\r\n slide: function(el, dir, speed, callback, recalcMaxHeight) {\r\n if (!el || (dir == 'up' && KTUtil.visible(el) === false) || (dir == 'down' && KTUtil.visible(el) === true)) {\r\n return;\r\n }\r\n\r\n speed = (speed ? speed : 600);\r\n var calcHeight = KTUtil.actualHeight(el);\r\n var calcPaddingTop = false;\r\n var calcPaddingBottom = false;\r\n\r\n if (KTUtil.css(el, 'padding-top') && KTUtil.data(el).has('slide-padding-top') !== true) {\r\n KTUtil.data(el).set('slide-padding-top', KTUtil.css(el, 'padding-top'));\r\n }\r\n\r\n if (KTUtil.css(el, 'padding-bottom') && KTUtil.data(el).has('slide-padding-bottom') !== true) {\r\n KTUtil.data(el).set('slide-padding-bottom', KTUtil.css(el, 'padding-bottom'));\r\n }\r\n\r\n if (KTUtil.data(el).has('slide-padding-top')) {\r\n calcPaddingTop = parseInt(KTUtil.data(el).get('slide-padding-top'));\r\n }\r\n\r\n if (KTUtil.data(el).has('slide-padding-bottom')) {\r\n calcPaddingBottom = parseInt(KTUtil.data(el).get('slide-padding-bottom'));\r\n }\r\n\r\n if (dir == 'up') { // up\r\n el.style.cssText = 'display: block; overflow: hidden;';\r\n\r\n if (calcPaddingTop) {\r\n KTUtil.animate(0, calcPaddingTop, speed, function(value) {\r\n el.style.paddingTop = (calcPaddingTop - value) + 'px';\r\n }, 'linear');\r\n }\r\n\r\n if (calcPaddingBottom) {\r\n KTUtil.animate(0, calcPaddingBottom, speed, function(value) {\r\n el.style.paddingBottom = (calcPaddingBottom - value) + 'px';\r\n }, 'linear');\r\n }\r\n\r\n KTUtil.animate(0, calcHeight, speed, function(value) {\r\n el.style.height = (calcHeight - value) + 'px';\r\n }, 'linear', function() {\r\n el.style.height = '';\r\n el.style.display = 'none';\r\n\r\n if (typeof callback === 'function') {\r\n callback();\r\n }\r\n });\r\n\r\n\r\n } else if (dir == 'down') { // down\r\n el.style.cssText = 'display: block; overflow: hidden;';\r\n\r\n if (calcPaddingTop) {\r\n KTUtil.animate(0, calcPaddingTop, speed, function(value) {//\r\n el.style.paddingTop = value + 'px';\r\n }, 'linear', function() {\r\n el.style.paddingTop = '';\r\n });\r\n }\r\n\r\n if (calcPaddingBottom) {\r\n KTUtil.animate(0, calcPaddingBottom, speed, function(value) {\r\n el.style.paddingBottom = value + 'px';\r\n }, 'linear', function() {\r\n el.style.paddingBottom = '';\r\n });\r\n }\r\n\r\n KTUtil.animate(0, calcHeight, speed, function(value) {\r\n el.style.height = value + 'px';\r\n }, 'linear', function() {\r\n el.style.height = '';\r\n el.style.display = '';\r\n el.style.overflow = '';\r\n\r\n if (typeof callback === 'function') {\r\n callback();\r\n }\r\n });\r\n }\r\n },\r\n\r\n slideUp: function(el, speed, callback) {\r\n KTUtil.slide(el, 'up', speed, callback);\r\n },\r\n\r\n slideDown: function(el, speed, callback) {\r\n KTUtil.slide(el, 'down', speed, callback);\r\n },\r\n\r\n show: function(el, display) {\r\n if (typeof el !== 'undefined') {\r\n el.style.display = (display ? display : 'block');\r\n }\r\n },\r\n\r\n hide: function(el) {\r\n if (typeof el !== 'undefined') {\r\n el.style.display = 'none';\r\n }\r\n },\r\n\r\n addEvent: function(el, type, handler, one) {\r\n if (typeof el !== 'undefined' && el !== null) {\r\n el.addEventListener(type, handler);\r\n }\r\n },\r\n\r\n removeEvent: function(el, type, handler) {\r\n if (el !== null) {\r\n el.removeEventListener(type, handler);\r\n }\r\n },\r\n\r\n on: function(element, selector, event, handler) {\r\n if (!selector) {\r\n return;\r\n }\r\n\r\n var eventId = KTUtil.getUniqueID('event');\r\n\r\n window.KTUtilDelegatedEventHandlers[eventId] = function(e) {\r\n var targets = element.querySelectorAll(selector);\r\n var target = e.target;\r\n\r\n while (target && target !== element) {\r\n for (var i = 0, j = targets.length; i < j; i++) {\r\n if (target === targets[i]) {\r\n handler.call(target, e);\r\n }\r\n }\r\n\r\n target = target.parentNode;\r\n }\r\n }\r\n\r\n KTUtil.addEvent(element, event, window.KTUtilDelegatedEventHandlers[eventId]);\r\n\r\n return eventId;\r\n },\r\n\r\n off: function(element, event, eventId) {\r\n if (!element || !window.KTUtilDelegatedEventHandlers[eventId]) {\r\n return;\r\n }\r\n\r\n KTUtil.removeEvent(element, event, window.KTUtilDelegatedEventHandlers[eventId]);\r\n\r\n delete window.KTUtilDelegatedEventHandlers[eventId];\r\n },\r\n\r\n one: function onetime(el, type, callback) {\r\n el.addEventListener(type, function callee(e) {\r\n // remove event\r\n if (e.target && e.target.removeEventListener) {\r\n e.target.removeEventListener(e.type, callee);\r\n }\r\n\r\n // need to verify from https://themeforest.net/author_dashboard#comment_23615588\r\n if (el && el.removeEventListener) {\r\n\t\t\t\t e.currentTarget.removeEventListener(e.type, callee);\r\n\t\t\t }\r\n\r\n // call handler\r\n return callback(e);\r\n });\r\n },\r\n\r\n hash: function(str) {\r\n var hash = 0,\r\n i, chr;\r\n\r\n if (str.length === 0) return hash;\r\n for (i = 0; i < str.length; i++) {\r\n chr = str.charCodeAt(i);\r\n hash = ((hash << 5) - hash) + chr;\r\n hash |= 0; // Convert to 32bit integer\r\n }\r\n\r\n return hash;\r\n },\r\n\r\n animateClass: function(el, animationName, callback) {\r\n var animation;\r\n var animations = {\r\n animation: 'animationend',\r\n OAnimation: 'oAnimationEnd',\r\n MozAnimation: 'mozAnimationEnd',\r\n WebkitAnimation: 'webkitAnimationEnd',\r\n msAnimation: 'msAnimationEnd',\r\n };\r\n\r\n for (var t in animations) {\r\n if (el.style[t] !== undefined) {\r\n animation = animations[t];\r\n }\r\n }\r\n\r\n KTUtil.addClass(el, 'animated ' + animationName);\r\n\r\n KTUtil.one(el, animation, function() {\r\n KTUtil.removeClass(el, 'animated ' + animationName);\r\n });\r\n\r\n if (callback) {\r\n KTUtil.one(el, animation, callback);\r\n }\r\n },\r\n\r\n transitionEnd: function(el, callback) {\r\n var transition;\r\n var transitions = {\r\n transition: 'transitionend',\r\n OTransition: 'oTransitionEnd',\r\n MozTransition: 'mozTransitionEnd',\r\n WebkitTransition: 'webkitTransitionEnd',\r\n msTransition: 'msTransitionEnd'\r\n };\r\n\r\n for (var t in transitions) {\r\n if (el.style[t] !== undefined) {\r\n transition = transitions[t];\r\n }\r\n }\r\n\r\n KTUtil.one(el, transition, callback);\r\n },\r\n\r\n animationEnd: function(el, callback) {\r\n var animation;\r\n var animations = {\r\n animation: 'animationend',\r\n OAnimation: 'oAnimationEnd',\r\n MozAnimation: 'mozAnimationEnd',\r\n WebkitAnimation: 'webkitAnimationEnd',\r\n msAnimation: 'msAnimationEnd'\r\n };\r\n\r\n for (var t in animations) {\r\n if (el.style[t] !== undefined) {\r\n animation = animations[t];\r\n }\r\n }\r\n\r\n KTUtil.one(el, animation, callback);\r\n },\r\n\r\n animateDelay: function(el, value) {\r\n var vendors = ['webkit-', 'moz-', 'ms-', 'o-', ''];\r\n for (var i = 0; i < vendors.length; i++) {\r\n KTUtil.css(el, vendors[i] + 'animation-delay', value);\r\n }\r\n },\r\n\r\n animateDuration: function(el, value) {\r\n var vendors = ['webkit-', 'moz-', 'ms-', 'o-', ''];\r\n for (var i = 0; i < vendors.length; i++) {\r\n KTUtil.css(el, vendors[i] + 'animation-duration', value);\r\n }\r\n },\r\n\r\n scrollTo: function(target, offset, duration) {\r\n var duration = duration ? duration : 500;\r\n var targetPos = target ? KTUtil.offset(target).top : 0;\r\n var scrollPos = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop || 0;\r\n var from, to;\r\n\r\n if (offset) {\r\n scrollPos += offset;\r\n }\r\n\r\n from = scrollPos;\r\n to = targetPos;\r\n\r\n KTUtil.animate(from, to, duration, function(value) {\r\n document.documentElement.scrollTop = value;\r\n document.body.parentNode.scrollTop = value;\r\n document.body.scrollTop = value;\r\n }); //, easing, done\r\n },\r\n\r\n scrollTop: function(offset, duration) {\r\n KTUtil.scrollTo(null, offset, duration);\r\n },\r\n\r\n isArray: function(obj) {\r\n return obj && Array.isArray(obj);\r\n },\r\n\r\n ready: function(callback) {\r\n if (document.attachEvent ? document.readyState === \"complete\" : document.readyState !== \"loading\") {\r\n callback();\r\n } else {\r\n document.addEventListener('DOMContentLoaded', callback);\r\n }\r\n },\r\n\r\n isEmpty: function(obj) {\r\n for (var prop in obj) {\r\n if (obj.hasOwnProperty(prop)) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n },\r\n\r\n numberString: function(nStr) {\r\n nStr += '';\r\n var x = nStr.split('.');\r\n var x1 = x[0];\r\n var x2 = x.length > 1 ? '.' + x[1] : '';\r\n var rgx = /(\\d+)(\\d{3})/;\r\n while (rgx.test(x1)) {\r\n x1 = x1.replace(rgx, '$1' + ',' + '$2');\r\n }\r\n return x1 + x2;\r\n },\r\n\r\n detectIE: function() {\r\n var ua = window.navigator.userAgent;\r\n\r\n // Test values; Uncomment to check result …\r\n\r\n // IE 10\r\n // ua = 'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Trident/6.0)';\r\n\r\n // IE 11\r\n // ua = 'Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv:11.0) like Gecko';\r\n\r\n // Edge 12 (Spartan)\r\n // ua = 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Safari/537.36 Edge/12.0';\r\n\r\n // Edge 13\r\n // ua = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2486.0 Safari/537.36 Edge/13.10586';\r\n\r\n var msie = ua.indexOf('MSIE ');\r\n if (msie > 0) {\r\n // IE 10 or older => return version number\r\n return parseInt(ua.substring(msie + 5, ua.indexOf('.', msie)), 10);\r\n }\r\n\r\n var trident = ua.indexOf('Trident/');\r\n if (trident > 0) {\r\n // IE 11 => return version number\r\n var rv = ua.indexOf('rv:');\r\n return parseInt(ua.substring(rv + 3, ua.indexOf('.', rv)), 10);\r\n }\r\n\r\n var edge = ua.indexOf('Edge/');\r\n if (edge > 0) {\r\n // Edge (IE 12+) => return version number\r\n return parseInt(ua.substring(edge + 5, ua.indexOf('.', edge)), 10);\r\n }\r\n\r\n // other browser\r\n return false;\r\n },\r\n\r\n isRTL: function() {\r\n var html = KTUtil.getByTagName('html')[0];\r\n\r\n if (html) {\r\n return (KTUtil.attr(html, 'direction') == 'rtl');\r\n }\r\n },\r\n\r\n // Scroller\r\n scrollInit: function(element, options) {\r\n if (!element) {\r\n return;\r\n }\r\n\r\n // Learn more: https://github.com/mdbootstrap/perfect-scrollbar#options\r\n var pluginDefOptions = {\r\n wheelSpeed: 0.5,\r\n swipeEasing: true,\r\n wheelPropagation: false,\r\n minScrollbarLength: 40,\r\n maxScrollbarLength: 300,\r\n suppressScrollX: true\r\n };\r\n\r\n options = KTUtil.deepExtend({}, pluginDefOptions, options);\r\n\r\n // Define init function\r\n function init() {\r\n var ps;\r\n var height;\r\n\r\n // Get extra options via data attributes\r\n var attrs = element.getAttributeNames();\r\n if (attrs.length > 0) {\r\n attrs.forEach(function(attrName) {\r\n \t\t\t// more options; https://github.com/ganlanyuan/tiny-slider#options\r\n \t\t\tif ((/^data-.*/g).test(attrName)) {\r\n if (['scroll', 'height', 'mobile-height'].includes(optionName) == false) {\r\n var optionName = attrName.replace('data-', '').toLowerCase().replace(/(?:[\\s-])\\w/g, function(match) {\r\n \t\t\t\t\treturn match.replace('-', '').toUpperCase();\r\n \t\t\t\t});\r\n\r\n options[optionName] = KTUtil.filterBoolean(element.getAttribute(attrName));\r\n }\r\n \t\t\t}\r\n \t\t});\r\n }\r\n\r\n if (options.height instanceof Function) {\r\n height = options.height.call();\r\n } else {\r\n if (KTUtil.isMobileDevice() === true && options.mobileHeight) {\r\n height = parseInt(options.mobileHeight);\r\n } else {\r\n height = parseInt(options.height);\r\n }\r\n }\r\n\r\n if (height === false) {\r\n KTUtil.scrollDestroy(element, true);\r\n\r\n return;\r\n }\r\n\r\n height = parseInt(height);\r\n\r\n // Destroy scroll on table and mobile modes\r\n if ((options.mobileNativeScroll || options.disableForMobile) && KTUtil.isMobileDevice() === true) {\r\n ps = KTUtil.data(element).get('ps');\r\n if (ps) {\r\n if (options.resetHeightOnDestroy) {\r\n KTUtil.css(element, 'height', 'auto');\r\n } else {\r\n KTUtil.css(element, 'overflow', 'auto');\r\n if (height > 0) {\r\n KTUtil.css(element, 'height', height + 'px');\r\n }\r\n }\r\n\r\n ps.destroy();\r\n ps = KTUtil.data(element).remove('ps');\r\n } else if (height > 0){\r\n KTUtil.css(element, 'overflow', 'auto');\r\n KTUtil.css(element, 'height', height + 'px');\r\n }\r\n\r\n return;\r\n }\r\n\r\n if (height > 0) {\r\n KTUtil.css(element, 'height', height + 'px');\r\n }\r\n\r\n if (options.desktopNativeScroll) {\r\n KTUtil.css(element, 'overflow', 'auto');\r\n return;\r\n }\r\n\r\n // Pass options via HTML Attributes\r\n if (KTUtil.attr(element, 'data-window-scroll') == 'true') {\r\n options.windowScroll = true;\r\n }\r\n\r\n // Init scroll\r\n ps = KTUtil.data(element).get('ps');\r\n\r\n if (ps) {\r\n ps.update();\r\n } else {\r\n KTUtil.css(element, 'overflow', 'hidden');\r\n KTUtil.addClass(element, 'scroll');\r\n\r\n ps = new PerfectScrollbar(element, options);\r\n\r\n KTUtil.data(element).set('ps', ps);\r\n }\r\n\r\n // Remember scroll position in cookie\r\n var uid = KTUtil.attr(element, 'id');\r\n // Consider using Localstorage\r\n //if (options.rememberPosition === true && Cookies && uid) {\r\n // if (KTCookie.getCookie(uid)) {\r\n // var pos = parseInt(KTCookie.getCookie(uid));\r\n //\r\n // if (pos > 0) {\r\n // element.scrollTop = pos;\r\n // }\r\n // }\r\n //\r\n // element.addEventListener('ps-scroll-y', function() {\r\n // KTCookie.setCookie(uid, element.scrollTop);\r\n // });\r\n //}\r\n }\r\n\r\n // Init\r\n init();\r\n\r\n // Handle window resize\r\n if (options.handleWindowResize) {\r\n KTUtil.addResizeHandler(function() {\r\n init();\r\n });\r\n }\r\n },\r\n\r\n scrollUpdate: function(element) {\r\n var ps = KTUtil.data(element).get('ps');\r\n if (ps) {\r\n ps.update();\r\n }\r\n },\r\n\r\n scrollUpdateAll: function(parent) {\r\n var scrollers = KTUtil.findAll(parent, '.ps');\r\n for (var i = 0, len = scrollers.length; i < len; i++) {\r\n KTUtil.scrollUpdate(scrollers[i]);\r\n }\r\n },\r\n\r\n scrollDestroy: function(element, resetAll) {\r\n var ps = KTUtil.data(element).get('ps');\r\n\r\n if (ps) {\r\n ps.destroy();\r\n ps = KTUtil.data(element).remove('ps');\r\n }\r\n\r\n if (element && resetAll) {\r\n element.style.setProperty('overflow', '');\r\n element.style.setProperty('height', '');\r\n }\r\n },\r\n\r\n filterBoolean: function(val) {\r\n // Convert string boolean\r\n\t\t\tif (val === true || val === 'true') {\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\r\n\t\t\tif (val === false || val === 'false') {\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\r\n return val;\r\n },\r\n\r\n setHTML: function(el, html) {\r\n el.innerHTML = html;\r\n },\r\n\r\n getHTML: function(el) {\r\n if (el) {\r\n return el.innerHTML;\r\n }\r\n },\r\n\r\n getDocumentHeight: function() {\r\n var body = document.body;\r\n var html = document.documentElement;\r\n\r\n return Math.max( body.scrollHeight, body.offsetHeight, html.clientHeight, html.scrollHeight, html.offsetHeight );\r\n },\r\n\r\n getScrollTop: function() {\r\n return (document.scrollingElement || document.documentElement).scrollTop;\r\n },\r\n\r\n colorDarken: function(color, amount) {\r\n var subtractLight = function(color, amount){\r\n var cc = parseInt(color,16) - amount;\r\n var c = (cc < 0) ? 0 : (cc);\r\n c = (c.toString(16).length > 1 ) ? c.toString(16) : `0${c.toString(16)}`;\r\n\r\n return c;\r\n }\r\n\r\n color = (color.indexOf(\"#\")>=0) ? color.substring(1,color.length) : color;\r\n amount = parseInt((255*amount)/100);\r\n\r\n return color = `#${subtractLight(color.substring(0,2), amount)}${subtractLight(color.substring(2,4), amount)}${subtractLight(color.substring(4,6), amount)}`;\r\n },\r\n\r\n colorLighten: function(color, amount) {\r\n var addLight = function(color, amount){\r\n var cc = parseInt(color,16) + amount;\r\n var c = (cc > 255) ? 255 : (cc);\r\n c = (c.toString(16).length > 1 ) ? c.toString(16) : `0${c.toString(16)}`;\r\n\r\n return c;\r\n }\r\n\r\n color = (color.indexOf(\"#\")>=0) ? color.substring(1,color.length) : color;\r\n amount = parseInt((255*amount)/100);\r\n\r\n return color = `#${addLight(color.substring(0,2), amount)}${addLight(color.substring(2,4), amount)}${addLight(color.substring(4,6), amount)}`;\r\n },\r\n\r\n // Throttle function: Input as function which needs to be throttled and delay is the time interval in milliseconds\r\n throttle: function (timer, func, delay) {\r\n \t// If setTimeout is already scheduled, no need to do anything\r\n \tif (timer) {\r\n \t\treturn;\r\n \t}\r\n\r\n \t// Schedule a setTimeout after delay seconds\r\n \ttimer = setTimeout(function () {\r\n \t\tfunc();\r\n\r\n \t\t// Once setTimeout function execution is finished, timerId = undefined so that in
\r\n \t\t// the next scroll event function execution can be scheduled by the setTimeout\r\n \t\ttimer = undefined;\r\n \t}, delay);\r\n },\r\n\r\n // Debounce function: Input as function which needs to be debounced and delay is the debounced time in milliseconds\r\n debounce: function (timer, func, delay) {\r\n \t// Cancels the setTimeout method execution\r\n \tclearTimeout(timer)\r\n\r\n \t// Executes the func after delay time.\r\n \ttimer = setTimeout(func, delay);\r\n },\r\n\r\n btnWait: function(el, cls, message, disable = true) {\r\n if (!el) {\r\n return;\r\n }\r\n\r\n if (disable) {\r\n KTUtil.attr(el, \"disabled\", true);\r\n }\r\n\r\n if (cls) {\r\n KTUtil.addClass(el, cls);\r\n KTUtil.attr(el, \"wait-class\", cls);\r\n }\r\n\r\n if (message) {\r\n var caption = KTUtil.find(el, '.btn-caption');\r\n\r\n if (caption) {\r\n KTUtil.data(caption).set('caption', KTUtil.getHTML(caption));\r\n KTUtil.setHTML(caption, message);\r\n } else {\r\n KTUtil.data(el).set('caption', KTUtil.getHTML(el));\r\n KTUtil.setHTML(el, message);\r\n }\r\n }\r\n },\r\n\r\n btnRelease: function(el) {\r\n if (!el) {\r\n return;\r\n }\r\n\r\n /// Show loading state on button\r\n KTUtil.removeAttr(el, \"disabled\");\r\n\r\n if (KTUtil.hasAttr(el, \"wait-class\")) {\r\n KTUtil.removeClass(el, KTUtil.attr(el, \"wait-class\"));\r\n }\r\n\r\n var caption = KTUtil.find(el, '.btn-caption');\r\n\r\n if (caption && KTUtil.data(caption).has('caption')) {\r\n KTUtil.setHTML(caption, KTUtil.data(caption).get('caption'));\r\n } else if (KTUtil.data(el).has('caption')) {\r\n KTUtil.setHTML(el, KTUtil.data(el).get('caption'));\r\n }\r\n },\r\n\r\n isOffscreen: function(el, direction, offset = 0) {\r\n var windowWidth = KTUtil.getViewPort().width;\r\n var windowHeight = KTUtil.getViewPort().height;\r\n\r\n var top = KTUtil.offset(el).top;\r\n var height = KTUtil.outerHeight(el) + offset;\r\n var left = KTUtil.offset(el).left;\r\n var width = KTUtil.outerWidth(el) + offset;\r\n\r\n if (direction == 'bottom') {\r\n if (windowHeight < top + height) {\r\n return true;\r\n } else if (windowHeight > top + height * 1.5) {\r\n return true;\r\n }\r\n }\r\n\r\n if (direction == 'top') {\r\n if (top < 0) {\r\n return true;\r\n } else if (top > height) {\r\n return true;\r\n }\r\n }\r\n\r\n if (direction == 'left') {\r\n if (left < 0) {\r\n return true;\r\n } else if (left * 2 > width) {\r\n //console.log('left 2');\r\n //return true;\r\n }\r\n }\r\n\r\n if (direction == 'right') {\r\n if (windowWidth < left + width) {\r\n return true;\r\n } else {\r\n //console.log('right 2');\r\n //return true;\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n }\r\n}();\r\n\r\n// webpack support\r\nif (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {\r\n module.exports = KTUtil;\r\n}\r\n\r\n// Initialize KTUtil class on document ready\r\nKTUtil.ready(function() {\r\n\tif (typeof KTAppSettings !== 'undefined') {\r\n\t\tKTUtil.init(KTAppSettings);\r\n\t} else {\r\n\t\tKTUtil.init();\r\n\t}\r\n});\r\n\r\n// CSS3 Transitions only after page load(.page-loading class added to body tag and remove with JS on page load)\r\nwindow.onload = function() {\r\n var result = KTUtil.getByTagName('body');\r\n if (result && result[0]) {\r\n KTUtil.removeClass(result[0], 'page-loading');\r\n }\r\n}\r\n","\"use strict\";\r\n\r\n// Component Definition\r\nvar KTApp = function() {\r\n /** @type {object} colors State colors **/\r\n var settings = {};\r\n\r\n var initTooltip = function(el) {\r\n var theme = el.data('theme') ? 'tooltip-' + el.data('theme') : '';\r\n var width = el.data('width') == 'auto' ? 'tooltop-auto-width' : '';\r\n var trigger = el.data('trigger') ? el.data('trigger') : 'hover';\r\n\r\n $(el).tooltip({\r\n trigger: trigger,\r\n template: '
\\\r\n
\\\r\n
\\\r\n
'\r\n });\r\n }\r\n\r\n var initTooltips = function() {\r\n // init bootstrap tooltips\r\n $('[data-toggle=\"tooltip\"]').each(function() {\r\n initTooltip($(this));\r\n });\r\n }\r\n\r\n var initPopover = function(el) {\r\n var skin = el.data('skin') ? 'popover-' + el.data('skin') : '';\r\n var triggerValue = el.data('trigger') ? el.data('trigger') : 'hover';\r\n\r\n el.popover({\r\n trigger: triggerValue,\r\n template: '\\\r\n
\\\r\n
\\\r\n

\\\r\n
\\\r\n
'\r\n });\r\n }\r\n\r\n var initPopovers = function() {\r\n // init bootstrap popover\r\n $('[data-toggle=\"popover\"]').each(function() {\r\n initPopover($(this));\r\n });\r\n }\r\n\r\n var initFileInput = function() {\r\n // init bootstrap popover\r\n $('.custom-file-input').on('change', function() {\r\n var fileName = $(this).val();\r\n $(this).next('.custom-file-label').addClass(\"selected\").html(fileName);\r\n });\r\n }\r\n\r\n var initScroll = function() {\r\n $('[data-scroll=\"true\"]').each(function() {\r\n var el = $(this);\r\n\r\n KTUtil.scrollInit(this, {\r\n mobileNativeScroll: true,\r\n handleWindowResize: true,\r\n rememberPosition: (el.data('remember-position') == 'true' ? true : false),\r\n height: function() {\r\n if (KTUtil.isBreakpointDown('lg') && el.data('mobile-height')) {\r\n return el.data('mobile-height');\r\n } else {\r\n return el.data('height');\r\n }\r\n }\r\n });\r\n });\r\n }\r\n\r\n var initAlerts = function() {\r\n // init bootstrap popover\r\n $('body').on('click', '[data-close=alert]', function() {\r\n $(this).closest('.alert').hide();\r\n });\r\n }\r\n\r\n var initCard = function(el, options) {\r\n // init card tools\r\n var el = $(el);\r\n var card = new KTCard(el[0], options);\r\n }\r\n\r\n var initCards = function() {\r\n // init card tools\r\n $('[data-card=\"true\"]').each(function() {\r\n var el = $(this);\r\n var options = {};\r\n\r\n if (el.data('data-card-initialized') !== true) {\r\n initCard(el, options);\r\n el.data('data-card-initialized', true);\r\n }\r\n });\r\n }\r\n\r\n var initStickyCard = function() {\r\n if (typeof Sticky === 'undefined') {\r\n return;\r\n }\r\n\r\n var sticky = new Sticky('[data-sticky=\"true\"]');\r\n }\r\n\r\n var initAbsoluteDropdown = function(context) {\r\n var dropdownMenu;\r\n\r\n if (!context) {\r\n return;\r\n }\r\n\r\n $('body').on('show.bs.dropdown', context, function(e) {\r\n \tdropdownMenu = $(e.target).find('.dropdown-menu');\r\n \t$('body').append(dropdownMenu.detach());\r\n \tdropdownMenu.css('display', 'block');\r\n \tdropdownMenu.position({\r\n \t\t'my': 'right top',\r\n \t\t'at': 'right bottom',\r\n \t\t'of': $(e.relatedTarget),\r\n \t});\r\n }).on('hide.bs.dropdown', context, function(e) {\r\n \t$(e.target).append(dropdownMenu.detach());\r\n \tdropdownMenu.hide();\r\n });\r\n }\r\n\r\n var initAbsoluteDropdowns = function() {\r\n $('body').on('show.bs.dropdown', function(e) {\r\n // e.target is always parent (contains toggler and menu)\r\n var $toggler = $(e.target).find(\"[data-attach='body']\");\r\n if ($toggler.length === 0) {\r\n return;\r\n }\r\n var $dropdownMenu = $(e.target).find('.dropdown-menu');\r\n // save detached menu\r\n var $detachedDropdownMenu = $dropdownMenu.detach();\r\n // save reference to detached menu inside data of toggler\r\n $toggler.data('dropdown-menu', $detachedDropdownMenu);\r\n\r\n $('body').append($detachedDropdownMenu);\r\n $detachedDropdownMenu.css('display', 'block');\r\n $detachedDropdownMenu.position({\r\n my: 'right top',\r\n at: 'right bottom',\r\n of: $(e.relatedTarget),\r\n });\r\n });\r\n\r\n $('body').on('hide.bs.dropdown', function(e) {\r\n var $toggler = $(e.target).find(\"[data-attach='body']\");\r\n if ($toggler.length === 0) {\r\n return;\r\n }\r\n // access to reference of detached menu from data of toggler\r\n var $detachedDropdownMenu = $toggler.data('dropdown-menu');\r\n // re-append detached menu inside parent\r\n $(e.target).append($detachedDropdownMenu.detach());\r\n // hide dropdown\r\n $detachedDropdownMenu.hide();\r\n });\r\n };\r\n\r\n return {\r\n init: function(settingsArray) {\r\n if (settingsArray) {\r\n settings = settingsArray;\r\n }\r\n\r\n KTApp.initComponents();\r\n },\r\n\r\n initComponents: function() {\r\n initScroll();\r\n initTooltips();\r\n initPopovers();\r\n initAlerts();\r\n initFileInput();\r\n initCards();\r\n initStickyCard();\r\n initAbsoluteDropdowns();\r\n },\r\n\r\n initTooltips: function() {\r\n initTooltips();\r\n },\r\n\r\n initTooltip: function(el) {\r\n initTooltip(el);\r\n },\r\n\r\n initPopovers: function() {\r\n initPopovers();\r\n },\r\n\r\n initPopover: function(el) {\r\n initPopover(el);\r\n },\r\n\r\n initCard: function(el, options) {\r\n initCard(el, options);\r\n },\r\n\r\n initCards: function() {\r\n initCards();\r\n },\r\n\r\n initSticky: function() {\r\n initSticky();\r\n },\r\n\r\n initAbsoluteDropdown: function(context) {\r\n initAbsoluteDropdown(context);\r\n },\r\n\r\n block: function(target, options) {\r\n var el = $(target);\r\n\r\n options = $.extend(true, {\r\n opacity: 0.05,\r\n overlayColor: '#000000',\r\n type: '',\r\n size: '',\r\n state: 'primary',\r\n centerX: true,\r\n centerY: true,\r\n message: '',\r\n shadow: true,\r\n width: 'auto'\r\n }, options);\r\n\r\n var html;\r\n var version = options.type ? 'spinner-' + options.type : '';\r\n var state = options.state ? 'spinner-' + options.state : '';\r\n var size = options.size ? 'spinner-' + options.size : '';\r\n var spinner = ' 0) {\r\n var classes = 'blockui ' + (options.shadow === false ? 'blockui' : '');\r\n\r\n html = '
' + options.message + '' + spinner + '
';\r\n\r\n var el = document.createElement('div');\r\n\r\n $('body').prepend(el);\r\n KTUtil.addClass(el, classes);\r\n el.innerHTML = html;\r\n options.width = KTUtil.actualWidth(el) + 10;\r\n KTUtil.remove(el);\r\n\r\n if (target == 'body') {\r\n html = '
' + options.message + '' + spinner + '
';\r\n }\r\n } else {\r\n html = spinner;\r\n }\r\n\r\n var params = {\r\n message: html,\r\n centerY: options.centerY,\r\n centerX: options.centerX,\r\n css: {\r\n top: '30%',\r\n left: '50%',\r\n border: '0',\r\n padding: '0',\r\n backgroundColor: 'none',\r\n width: options.width\r\n },\r\n overlayCSS: {\r\n backgroundColor: options.overlayColor,\r\n opacity: options.opacity,\r\n cursor: 'wait',\r\n zIndex: (target == 'body' ? 1100 : 10)\r\n },\r\n onUnblock: function() {\r\n if (el && el[0]) {\r\n KTUtil.css(el[0], 'position', '');\r\n KTUtil.css(el[0], 'zoom', '');\r\n }\r\n }\r\n };\r\n\r\n if (target == 'body') {\r\n params.css.top = '50%';\r\n $.blockUI(params);\r\n } else {\r\n var el = $(target);\r\n el.block(params);\r\n }\r\n },\r\n\r\n unblock: function(target) {\r\n if (target && target != 'body') {\r\n $(target).unblock();\r\n } else {\r\n $.unblockUI();\r\n }\r\n },\r\n\r\n blockPage: function(options) {\r\n return KTApp.block('body', options);\r\n },\r\n\r\n unblockPage: function() {\r\n return KTApp.unblock('body');\r\n },\r\n\r\n getSettings: function() {\r\n return settings;\r\n }\r\n };\r\n}();\r\n\r\n// webpack support\r\nif (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {\r\n module.exports = KTApp;\r\n}\r\n\r\n// Initialize KTApp class on document ready\r\n$(document).ready(function() {\r\n KTApp.init(KTAppSettings);\r\n});\r\n","\"use strict\";\r\n\r\n// Component Definition\r\nvar KTCard = function(elementId, options) {\r\n // Main object\r\n var the = this;\r\n var init = false;\r\n\r\n // Get element object\r\n var element = KTUtil.getById(elementId);\r\n var body = KTUtil.getBody();\r\n\r\n if (!element) {\r\n return;\r\n }\r\n\r\n // Default options\r\n var defaultOptions = {\r\n toggleSpeed: 400,\r\n sticky: {\r\n releseOnReverse: false,\r\n offset: 300,\r\n zIndex: 101\r\n }\r\n };\r\n\r\n ////////////////////////////\r\n // ** Private Methods ** //\r\n ////////////////////////////\r\n\r\n var Plugin = {\r\n /**\r\n * Construct\r\n */\r\n\r\n construct: function(options) {\r\n if (KTUtil.data(element).has('card')) {\r\n the = KTUtil.data(element).get('card');\r\n } else {\r\n // reset menu\r\n Plugin.init(options);\r\n\r\n // build menu\r\n Plugin.build();\r\n\r\n KTUtil.data(element).set('card', the);\r\n }\r\n\r\n return the;\r\n },\r\n\r\n /**\r\n * Init card\r\n */\r\n init: function(options) {\r\n the.element = element;\r\n the.events = [];\r\n\r\n // merge default and user defined options\r\n the.options = KTUtil.deepExtend({}, defaultOptions, options);\r\n the.header = KTUtil.child(element, '.card-header');\r\n the.footer = KTUtil.child(element, '.card-footer');\r\n\r\n if (KTUtil.child(element, '.card-body')) {\r\n the.body = KTUtil.child(element, '.card-body');\r\n } else if (KTUtil.child(element, '.form')) {\r\n the.body = KTUtil.child(element, '.form');\r\n }\r\n },\r\n\r\n /**\r\n * Build Form Wizard\r\n */\r\n build: function() {\r\n // Remove\r\n var remove = KTUtil.find(the.header, '[data-card-tool=remove]');\r\n if (remove) {\r\n KTUtil.addEvent(remove, 'click', function(e) {\r\n e.preventDefault();\r\n Plugin.remove();\r\n });\r\n }\r\n\r\n // Reload\r\n var reload = KTUtil.find(the.header, '[data-card-tool=reload]');\r\n if (reload) {\r\n KTUtil.addEvent(reload, 'click', function(e) {\r\n e.preventDefault();\r\n Plugin.reload();\r\n });\r\n }\r\n\r\n // Toggle\r\n var toggle = KTUtil.find(the.header, '[data-card-tool=toggle]');\r\n if (toggle) {\r\n KTUtil.addEvent(toggle, 'click', function(e) {\r\n e.preventDefault();\r\n Plugin.toggle();\r\n });\r\n }\r\n },\r\n\r\n /**\r\n * Enable stickt mode\r\n */\r\n initSticky: function() {\r\n var lastScrollTop = 0;\r\n var offset = the.options.sticky.offset;\r\n\r\n if (!the.header) {\r\n return;\r\n }\r\n\r\n\t window.addEventListener('scroll', Plugin.onScrollSticky);\r\n },\r\n\r\n\t /**\r\n\t * Window scroll handle event for sticky card\r\n\t */\r\n\t onScrollSticky: function(e) {\r\n\t\t var offset = the.options.sticky.offset;\r\n\r\n\t\t if(isNaN(offset)) return;\r\n\r\n\t\t var st = KTUtil.getScrollTop();\r\n\r\n\t\t if (st >= offset && KTUtil.hasClass(body, 'card-sticky-on') === false) {\r\n\t\t\t Plugin.eventTrigger('stickyOn');\r\n\r\n\t\t\t KTUtil.addClass(body, 'card-sticky-on');\r\n\r\n\t\t\t Plugin.updateSticky();\r\n\r\n\t\t } else if ((st*1.5) <= offset && KTUtil.hasClass(body, 'card-sticky-on')) {\r\n\t\t\t // Back scroll mode\r\n\t\t\t Plugin.eventTrigger('stickyOff');\r\n\r\n\t\t\t KTUtil.removeClass(body, 'card-sticky-on');\r\n\r\n\t\t\t Plugin.resetSticky();\r\n\t\t }\r\n\t },\r\n\r\n updateSticky: function() {\r\n if (!the.header) {\r\n return;\r\n }\r\n\r\n var top;\r\n\r\n if (KTUtil.hasClass(body, 'card-sticky-on')) {\r\n if (the.options.sticky.position.top instanceof Function) {\r\n top = parseInt(the.options.sticky.position.top.call(this, the));\r\n } else {\r\n top = parseInt(the.options.sticky.position.top);\r\n }\r\n\r\n var left;\r\n if (the.options.sticky.position.left instanceof Function) {\r\n left = parseInt(the.options.sticky.position.left.call(this, the));\r\n } else {\r\n left = parseInt(the.options.sticky.position.left);\r\n }\r\n\r\n var right;\r\n if (the.options.sticky.position.right instanceof Function) {\r\n right = parseInt(the.options.sticky.position.right.call(this, the));\r\n } else {\r\n right = parseInt(the.options.sticky.position.right);\r\n }\r\n\r\n KTUtil.css(the.header, 'z-index', the.options.sticky.zIndex);\r\n KTUtil.css(the.header, 'top', top + 'px');\r\n KTUtil.css(the.header, 'left', left + 'px');\r\n KTUtil.css(the.header, 'right', right + 'px');\r\n }\r\n },\r\n\r\n resetSticky: function() {\r\n if (!the.header) {\r\n return;\r\n }\r\n\r\n if (KTUtil.hasClass(body, 'card-sticky-on') === false) {\r\n KTUtil.css(the.header, 'z-index', '');\r\n KTUtil.css(the.header, 'top', '');\r\n KTUtil.css(the.header, 'left', '');\r\n KTUtil.css(the.header, 'right', '');\r\n }\r\n },\r\n\r\n /**\r\n * Remove card\r\n */\r\n remove: function() {\r\n if (Plugin.eventTrigger('beforeRemove') === false) {\r\n return;\r\n }\r\n\r\n KTUtil.remove(element);\r\n\r\n Plugin.eventTrigger('afterRemove');\r\n },\r\n\r\n /**\r\n * Set content\r\n */\r\n setContent: function(html) {\r\n if (html) {\r\n the.body.innerHTML = html;\r\n }\r\n },\r\n\r\n /**\r\n * Get body\r\n */\r\n getBody: function() {\r\n return the.body;\r\n },\r\n\r\n /**\r\n * Get self\r\n */\r\n getSelf: function() {\r\n return element;\r\n },\r\n\r\n /**\r\n * Reload\r\n */\r\n reload: function() {\r\n Plugin.eventTrigger('reload');\r\n },\r\n\r\n /**\r\n * Toggle\r\n */\r\n toggle: function() {\r\n if (KTUtil.hasClass(element, 'card-collapse') || KTUtil.hasClass(element, 'card-collapsed')) {\r\n Plugin.expand();\r\n } else {\r\n Plugin.collapse();\r\n }\r\n },\r\n\r\n /**\r\n * Collapse\r\n */\r\n collapse: function() {\r\n if (Plugin.eventTrigger('beforeCollapse') === false) {\r\n return;\r\n }\r\n\r\n KTUtil.slideUp(the.body, the.options.toggleSpeed, function() {\r\n Plugin.eventTrigger('afterCollapse');\r\n });\r\n\r\n KTUtil.addClass(element, 'card-collapse');\r\n },\r\n\r\n /**\r\n * Expand\r\n */\r\n expand: function() {\r\n if (Plugin.eventTrigger('beforeExpand') === false) {\r\n return;\r\n }\r\n\r\n KTUtil.slideDown(the.body, the.options.toggleSpeed, function() {\r\n Plugin.eventTrigger('afterExpand');\r\n });\r\n\r\n KTUtil.removeClass(element, 'card-collapse');\r\n KTUtil.removeClass(element, 'card-collapsed');\r\n },\r\n\r\n /**\r\n * Trigger events\r\n */\r\n eventTrigger: function(name) {\r\n //KTUtil.triggerCustomEvent(name);\r\n for (var i = 0; i < the.events.length; i++) {\r\n var event = the.events[i];\r\n if (event.name == name) {\r\n if (event.one == true) {\r\n if (event.fired == false) {\r\n the.events[i].fired = true;\r\n return event.handler.call(this, the);\r\n }\r\n } else {\r\n return event.handler.call(this, the);\r\n }\r\n }\r\n }\r\n },\r\n\r\n addEvent: function(name, handler, one) {\r\n the.events.push({\r\n name: name,\r\n handler: handler,\r\n one: one,\r\n fired: false\r\n });\r\n\r\n return the;\r\n }\r\n };\r\n\r\n //////////////////////////\r\n // ** Public Methods ** //\r\n //////////////////////////\r\n\r\n /**\r\n * Set default options\r\n */\r\n\r\n the.setDefaults = function(options) {\r\n defaultOptions = options;\r\n };\r\n\r\n /**\r\n * Remove card\r\n */\r\n the.remove = function() {\r\n return Plugin.remove(html);\r\n };\r\n\r\n /**\r\n * Init sticky card\r\n */\r\n the.initSticky = function() {\r\n return Plugin.initSticky();\r\n };\r\n\r\n /**\r\n * Rerender sticky layout\r\n */\r\n the.updateSticky = function() {\r\n return Plugin.updateSticky();\r\n };\r\n\r\n /**\r\n * Reset the sticky\r\n */\r\n the.resetSticky = function() {\r\n return Plugin.resetSticky();\r\n };\r\n\r\n\t/**\r\n\t * Destroy sticky card\r\n\t */\r\n\tthe.destroySticky = function() {\r\n\t\tPlugin.resetSticky();\r\n\t\twindow.removeEventListener('scroll', Plugin.onScrollSticky);\r\n\t};\r\n\r\n /**\r\n * Reload card\r\n */\r\n the.reload = function() {\r\n return Plugin.reload();\r\n };\r\n\r\n /**\r\n * Set card content\r\n */\r\n the.setContent = function(html) {\r\n return Plugin.setContent(html);\r\n };\r\n\r\n /**\r\n * Toggle card\r\n */\r\n the.toggle = function() {\r\n return Plugin.toggle();\r\n };\r\n\r\n /**\r\n * Collapse card\r\n */\r\n the.collapse = function() {\r\n return Plugin.collapse();\r\n };\r\n\r\n /**\r\n * Expand card\r\n */\r\n the.expand = function() {\r\n return Plugin.expand();\r\n };\r\n\r\n /**\r\n * Get cardbody\r\n * @returns {jQuery}\r\n */\r\n the.getBody = function() {\r\n return Plugin.getBody();\r\n };\r\n\r\n /**\r\n * Get cardbody\r\n * @returns {jQuery}\r\n */\r\n the.getSelf = function() {\r\n return Plugin.getSelf();\r\n };\r\n\r\n /**\r\n * Attach event\r\n */\r\n the.on = function(name, handler) {\r\n return Plugin.addEvent(name, handler);\r\n };\r\n\r\n /**\r\n * Attach event that will be fired once\r\n */\r\n the.one = function(name, handler) {\r\n return Plugin.addEvent(name, handler, true);\r\n };\r\n\r\n // Construct plugin\r\n Plugin.construct.apply(the, [options]);\r\n\r\n return the;\r\n};\r\n\r\n// webpack support\r\nif (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {\r\n module.exports = KTCard;\r\n}\r\n","\"use strict\";\r\n// DOCS: https://javascript.info/cookie\r\n\r\n// Component Definition \r\nvar KTCookie = function() {\r\n return {\r\n // returns the cookie with the given name,\r\n // or undefined if not found\r\n getCookie: function(name) {\r\n var matches = document.cookie.match(new RegExp(\r\n \"(?:^|; )\" + name.replace(/([\\.$?*|{}\\(\\)\\[\\]\\\\\\/\\+^])/g, '\\\\$1') + \"=([^;]*)\"\r\n ));\r\n return matches ? decodeURIComponent(matches[1]) : undefined;\r\n },\r\n // Please note that a cookie value is encoded,\r\n // so getCookie uses a built-in decodeURIComponent function to decode it.\r\n setCookie: function(name, value, options) {\r\n if (!options) {\r\n options = {};\r\n }\r\n\r\n options = Object.assign({}, {path: '/'}, options);\r\n\r\n if (options.expires instanceof Date) {\r\n options.expires = options.expires.toUTCString();\r\n }\r\n\r\n var updatedCookie = encodeURIComponent(name) + \"=\" + encodeURIComponent(value);\r\n\r\n for (var optionKey in options) {\r\n if (!options.hasOwnProperty(optionKey)) {\r\n continue;\r\n }\r\n updatedCookie += \"; \" + optionKey;\r\n var optionValue = options[optionKey];\r\n if (optionValue !== true) {\r\n updatedCookie += \"=\" + optionValue;\r\n }\r\n }\r\n\r\n document.cookie = updatedCookie;\r\n },\r\n // To delete a cookie, we can call it with a negative expiration date:\r\n deleteCookie: function(name) {\r\n setCookie(name, \"\", {\r\n 'max-age': -1\r\n })\r\n }\r\n }\r\n}();\r\n\r\n// webpack support\r\nif (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {\r\n module.exports = KTCookie;\r\n}\r\n","\"use strict\";\r\n\r\n// Component Definition \r\nvar KTDialog = function(options) {\r\n // Main object\r\n var the = this;\r\n\r\n // Get element object\r\n var element;\r\n var body = KTUtil.getBody();\r\n\r\n // Default options\r\n var defaultOptions = {\r\n 'placement' : 'top center',\r\n 'type' : 'loader',\r\n 'width' : 100,\r\n 'state' : 'default',\r\n 'message' : 'Loading...'\r\n };\r\n\r\n ////////////////////////////\r\n // ** Private Methods ** //\r\n ////////////////////////////\r\n\r\n var Plugin = {\r\n /**\r\n * Construct\r\n */\r\n\r\n construct: function(options) {\r\n Plugin.init(options);\r\n\r\n return the;\r\n },\r\n\r\n /**\r\n * Handles subtoggle click toggle\r\n */\r\n init: function(options) {\r\n the.events = [];\r\n\r\n // merge default and user defined options\r\n the.options = KTUtil.deepExtend({}, defaultOptions, options);\r\n\r\n the.state = false;\r\n },\r\n\r\n /**\r\n * Show dialog\r\n */\r\n show: function() {\r\n Plugin.eventTrigger('show');\r\n\r\n element = document.createElement(\"DIV\");\r\n KTUtil.setHTML(element, the.options.message);\r\n\r\n KTUtil.addClass(element, 'dialog dialog-shown');\r\n KTUtil.addClass(element, 'dialog-' + the.options.state);\r\n KTUtil.addClass(element, 'dialog-' + the.options.type);\r\n\r\n if (the.options.placement == 'top center') {\r\n KTUtil.addClass(element, 'dialog-top-center');\r\n }\r\n\r\n body.appendChild(element);\r\n\r\n the.state = 'shown';\r\n\r\n Plugin.eventTrigger('shown');\r\n\r\n return the;\r\n },\r\n\r\n /**\r\n * Hide dialog\r\n */\r\n hide: function() {\r\n if (element) {\r\n Plugin.eventTrigger('hide');\r\n\r\n element.remove();\r\n the.state = 'hidden';\r\n\r\n Plugin.eventTrigger('hidden');\r\n }\r\n\r\n return the;\r\n },\r\n\r\n /**\r\n * Trigger events\r\n */\r\n eventTrigger: function(name) {\r\n for (var i = 0; i < the.events.length; i++) {\r\n var event = the.events[i];\r\n\r\n if (event.name == name) {\r\n if (event.one == true) {\r\n if (event.fired == false) {\r\n the.events[i].fired = true;\r\n return event.handler.call(this, the);\r\n }\r\n } else {\r\n return event.handler.call(this, the);\r\n }\r\n }\r\n }\r\n },\r\n\r\n addEvent: function(name, handler, one) {\r\n the.events.push({\r\n name: name,\r\n handler: handler,\r\n one: one,\r\n fired: false\r\n });\r\n\r\n return the;\r\n }\r\n };\r\n\r\n //////////////////////////\r\n // ** Public Methods ** //\r\n //////////////////////////\r\n\r\n /**\r\n * Set default options\r\n */\r\n\r\n the.setDefaults = function(options) {\r\n defaultOptions = options;\r\n };\r\n\r\n /**\r\n * Check shown state\r\n */\r\n the.shown = function() {\r\n return the.state == 'shown';\r\n };\r\n\r\n /**\r\n * Check hidden state\r\n */\r\n the.hidden = function() {\r\n return the.state == 'hidden';\r\n };\r\n\r\n /**\r\n * Show dialog\r\n */\r\n the.show = function() {\r\n return Plugin.show();\r\n };\r\n\r\n /**\r\n * Hide dialog\r\n */\r\n the.hide = function() {\r\n return Plugin.hide();\r\n };\r\n\r\n /**\r\n * Attach event\r\n * @returns {KTToggle}\r\n */\r\n the.on = function(name, handler) {\r\n return Plugin.addEvent(name, handler);\r\n };\r\n\r\n /**\r\n * Attach event that will be fired once\r\n * @returns {KTToggle}\r\n */\r\n the.one = function(name, handler) {\r\n return Plugin.addEvent(name, handler, true);\r\n };\r\n\r\n // Construct plugin\r\n Plugin.construct.apply(the, [options]);\r\n\r\n return the;\r\n};\r\n\r\n// webpack support\r\nif (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {\r\n module.exports = KTDialog;\r\n}\r\n","\"use strict\";\r\n\r\n// Component Definition\r\nvar KTHeader = function(elementId, options) {\r\n // Main object\r\n var the = this;\r\n var init = false;\r\n\r\n // Get element object\r\n var element = KTUtil.getById(elementId);\r\n var body = KTUtil.getBody();\r\n\r\n if (element === undefined) {\r\n return;\r\n }\r\n\r\n // Default options\r\n var defaultOptions = {\r\n offset: {\r\n desktop: true,\r\n tabletAndMobile: true\r\n },\r\n releseOnReverse: {\r\n desktop: false,\r\n tabletAndMobile: false\r\n }\r\n };\r\n\r\n ////////////////////////////\r\n // ** Private Methods ** //\r\n ////////////////////////////\r\n\r\n var Plugin = {\r\n /**\r\n * Run plugin\r\n * @returns {KTHeader}\r\n */\r\n construct: function(options) {\r\n if (KTUtil.data(element).has('header')) {\r\n the = KTUtil.data(element).get('header');\r\n } else {\r\n // reset header\r\n Plugin.init(options);\r\n\r\n // build header\r\n Plugin.build();\r\n\r\n KTUtil.data(element).set('header', the);\r\n }\r\n\r\n return the;\r\n },\r\n\r\n /**\r\n * Handles subheader click toggle\r\n * @returns {KTHeader}\r\n */\r\n init: function(options) {\r\n the.events = [];\r\n\r\n // merge default and user defined options\r\n the.options = KTUtil.deepExtend({}, defaultOptions, options);\r\n },\r\n\r\n /**\r\n * Reset header\r\n * @returns {KTHeader}\r\n */\r\n build: function() {\r\n var eventTriggerState = true;\r\n var lastScrollTop = 0;\r\n\r\n window.addEventListener('scroll', function() {\r\n var offset = 0, st, attrName;\r\n\r\n if (KTUtil.isBreakpointDown('lg') && the.options.offset.tabletAndMobile === false) {\r\n return;\r\n }\r\n\r\n if (KTUtil.isBreakpointUp('lg') && the.options.offset.desktop === false) {\r\n return;\r\n }\r\n\r\n if (KTUtil.isBreakpointUp('lg')) {\r\n offset = the.options.offset.desktop;\r\n } else if (KTUtil.isBreakpointDown('lg')) {\r\n offset = the.options.offset.tabletAndMobile;\r\n }\r\n\r\n st = KTUtil.getScrollTop();\r\n\r\n if (\r\n (KTUtil.isBreakpointDown('lg') && the.options.releseOnReverse.tabletAndMobile) ||\r\n (KTUtil.isBreakpointUp('lg') && the.options.releseOnReverse.desktop)\r\n ) {\r\n if (st > offset && lastScrollTop < st) { // down scroll mode\r\n if (body.hasAttribute('data-header-scroll') === false) {\r\n body.setAttribute('data-header-scroll', 'on');\r\n }\r\n\r\n if (eventTriggerState) {\r\n Plugin.eventTrigger('scrollOn', the);\r\n eventTriggerState = false;\r\n }\r\n } else { // back scroll mode\r\n if (body.hasAttribute('data-header-scroll') === true) {\r\n body.removeAttribute('data-header-scroll');\r\n }\r\n\r\n if (eventTriggerState == false) {\r\n Plugin.eventTrigger('scrollOff', the);\r\n eventTriggerState = true;\r\n }\r\n }\r\n\r\n lastScrollTop = st;\r\n } else {\r\n if (st > offset) { // down scroll mode\r\n if (body.hasAttribute('data-header-scroll') === false) {\r\n body.setAttribute('data-header-scroll', 'on');\r\n }\r\n\r\n if (eventTriggerState) {\r\n Plugin.eventTrigger('scrollOn', the);\r\n eventTriggerState = false;\r\n }\r\n } else { // back scroll mode\r\n if (body.hasAttribute('data-header-scroll') === true) {\r\n body.removeAttribute('data-header-scroll');\r\n }\r\n\r\n if (eventTriggerState == false) {\r\n Plugin.eventTrigger('scrollOff', the);\r\n eventTriggerState = true;\r\n }\r\n }\r\n }\r\n });\r\n },\r\n\r\n /**\r\n * Trigger events\r\n */\r\n eventTrigger: function(name, args) {\r\n for (var i = 0; i < the.events.length; i++) {\r\n var event = the.events[i];\r\n if (event.name == name) {\r\n if (event.one == true) {\r\n if (event.fired == false) {\r\n the.events[i].fired = true;\r\n return event.handler.call(this, the, args);\r\n }\r\n } else {\r\n return event.handler.call(this, the, args);\r\n }\r\n }\r\n }\r\n },\r\n\r\n addEvent: function(name, handler, one) {\r\n the.events.push({\r\n name: name,\r\n handler: handler,\r\n one: one,\r\n fired: false\r\n });\r\n }\r\n };\r\n\r\n //////////////////////////\r\n // ** Public Methods ** //\r\n //////////////////////////\r\n\r\n /**\r\n * Set default options\r\n */\r\n\r\n the.setDefaults = function(options) {\r\n defaultOptions = options;\r\n };\r\n\r\n /**\r\n * Register event\r\n */\r\n the.on = function(name, handler) {\r\n return Plugin.addEvent(name, handler);\r\n };\r\n\r\n ///////////////////////////////\r\n // ** Plugin Construction ** //\r\n ///////////////////////////////\r\n\r\n // Run plugin\r\n Plugin.construct.apply(the, [options]);\r\n\r\n // Init done\r\n init = true;\r\n\r\n // Return plugin instance\r\n return the;\r\n};\r\n\r\n// webpack support\r\nif (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {\r\n module.exports = KTHeader;\r\n}\r\n","\"use strict\";\r\n\r\n// Component Definition \r\nvar KTImageInput = function(elementId, options) {\r\n // Main object\r\n var the = this;\r\n var init = false;\r\n\r\n // Get element object\r\n var element = KTUtil.getById(elementId);\r\n var body = KTUtil.getBody();\r\n\r\n if (!element) {\r\n return;\r\n }\r\n\r\n // Default options\r\n var defaultOptions = {\r\n editMode: false\r\n };\r\n\r\n ////////////////////////////\r\n // ** Private Methods ** //\r\n ////////////////////////////\r\n\r\n var Plugin = {\r\n /**\r\n * Construct\r\n */\r\n\r\n construct: function(options) {\r\n if (KTUtil.data(element).has('imageinput')) {\r\n the = KTUtil.data(element).get('imageinput');\r\n } else {\r\n // reset menu\r\n Plugin.init(options);\r\n\r\n // build menu\r\n Plugin.build();\r\n\r\n KTUtil.data(element).set('imageinput', the);\r\n }\r\n\r\n return the;\r\n },\r\n\r\n /**\r\n * Init avatar\r\n */\r\n init: function(options) {\r\n the.element = element;\r\n the.events = [];\r\n\r\n the.input = KTUtil.find(element, 'input[type=\"file\"]');\r\n the.wrapper = KTUtil.find(element, '.image-input-wrapper');\r\n the.cancel = KTUtil.find(element, '[data-action=\"cancel\"]');\r\n the.remove = KTUtil.find(element, '[data-action=\"remove\"]');\r\n the.src = KTUtil.css(the.wrapper, 'backgroundImage');\r\n the.hidden = KTUtil.find(element, 'input[type=\"hidden\"]');\r\n\r\n // merge default and user defined options\r\n the.options = KTUtil.deepExtend({}, defaultOptions, options);\r\n },\r\n\r\n /**\r\n * Build\r\n */\r\n build: function() {\r\n // Handle change\r\n KTUtil.addEvent(the.input, 'change', function(e) {\r\n e.preventDefault();\r\n\r\n\t if (the.input && the.input.files && the.input.files[0]) {\r\n\t var reader = new FileReader();\r\n\t reader.onload = function(e) {\r\n\t KTUtil.css(the.wrapper, 'background-image', 'url('+e.target.result +')');\r\n\t }\r\n\t reader.readAsDataURL(the.input.files[0]);\r\n\r\n\t KTUtil.addClass(the.element, 'image-input-changed');\r\n KTUtil.removeClass(the.element, 'image-input-empty');\r\n\r\n // Fire change event\r\n Plugin.eventTrigger('change');\r\n\t }\r\n });\r\n\r\n // Handle cancel\r\n KTUtil.addEvent(the.cancel, 'click', function(e) {\r\n e.preventDefault();\r\n\r\n // Fire cancel event\r\n Plugin.eventTrigger('cancel');\r\n\r\n\t KTUtil.removeClass(the.element, 'image-input-changed');\r\n KTUtil.removeClass(the.element, 'image-input-empty');\r\n\t KTUtil.css(the.wrapper, 'background-image', the.src);\r\n\t the.input.value = \"\";\r\n\r\n if (the.hidden) {\r\n the.hidden.value = \"0\";\r\n }\r\n });\r\n\r\n // Handle remove\r\n KTUtil.addEvent(the.remove, 'click', function(e) {\r\n e.preventDefault();\r\n\r\n // Fire cancel event\r\n Plugin.eventTrigger('remove');\r\n\r\n\t KTUtil.removeClass(the.element, 'image-input-changed');\r\n KTUtil.addClass(the.element, 'image-input-empty');\r\n\t KTUtil.css(the.wrapper, 'background-image', \"none\");\r\n\t the.input.value = \"\";\r\n\r\n if (the.hidden) {\r\n the.hidden.value = \"1\";\r\n }\r\n });\r\n },\r\n\r\n /**\r\n * Trigger events\r\n */\r\n eventTrigger: function(name) {\r\n //KTUtil.triggerCustomEvent(name);\r\n for (var i = 0; i < the.events.length; i++) {\r\n var event = the.events[i];\r\n if (event.name == name) {\r\n if (event.one == true) {\r\n if (event.fired == false) {\r\n the.events[i].fired = true;\r\n return event.handler.call(this, the);\r\n }\r\n } else {\r\n return event.handler.call(this, the);\r\n }\r\n }\r\n }\r\n },\r\n\r\n addEvent: function(name, handler, one) {\r\n the.events.push({\r\n name: name,\r\n handler: handler,\r\n one: one,\r\n fired: false\r\n });\r\n\r\n return the;\r\n }\r\n };\r\n\r\n //////////////////////////\r\n // ** Public Methods ** //\r\n //////////////////////////\r\n\r\n /**\r\n * Set default options\r\n */\r\n\r\n the.setDefaults = function(options) {\r\n defaultOptions = options;\r\n };\r\n\r\n /**\r\n * Attach event\r\n */\r\n the.on = function(name, handler) {\r\n return Plugin.addEvent(name, handler);\r\n };\r\n\r\n /**\r\n * Attach event that will be fired once\r\n */\r\n the.one = function(name, handler) {\r\n return Plugin.addEvent(name, handler, true);\r\n };\r\n\r\n // Construct plugin\r\n Plugin.construct.apply(the, [options]);\r\n\r\n return the;\r\n};\r\n\r\n// webpack support\r\nif (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {\r\n module.exports = KTImageInput;\r\n}\r\n","\"use strict\";\r\n\r\n// Component Definition\r\nvar KTMenu = function(elementId, options) {\r\n // Main object\r\n var the = this;\r\n var init = false;\r\n\r\n // Get element object\r\n var element = KTUtil.getById(elementId);\r\n var body = KTUtil.getBody();\r\n\r\n if (!element) {\r\n return;\r\n }\r\n\r\n // Default options\r\n var defaultOptions = {\r\n // scrollable area with Perfect Scroll\r\n scroll: {\r\n rememberPosition: false\r\n },\r\n\r\n // accordion submenu mode\r\n accordion: {\r\n slideSpeed: 200, // accordion toggle slide speed in milliseconds\r\n autoScroll: false, // enable auto scrolling(focus) to the clicked menu item\r\n autoScrollSpeed: 1200,\r\n expandAll: true // allow having multiple expanded accordions in the menu\r\n },\r\n\r\n // dropdown submenu mode\r\n dropdown: {\r\n timeout: 500 // timeout in milliseconds to show and hide the hoverable submenu dropdown\r\n }\r\n };\r\n\r\n ////////////////////////////\r\n // ** Private Methods ** //\r\n ////////////////////////////\r\n\r\n var Plugin = {\r\n /**\r\n * Run plugin\r\n * @returns {KTMenu}\r\n */\r\n construct: function(options) {\r\n if (KTUtil.data(element).has('menu')) {\r\n the = KTUtil.data(element).get('menu');\r\n } else {\r\n // reset menu\r\n Plugin.init(options);\r\n\r\n // reset menu\r\n Plugin.reset();\r\n\r\n // build menu\r\n Plugin.build();\r\n\r\n KTUtil.data(element).set('menu', the);\r\n }\r\n\r\n return the;\r\n },\r\n\r\n /**\r\n * Handles submenu click toggle\r\n * @returns {KTMenu}\r\n */\r\n init: function(options) {\r\n the.events = [];\r\n\r\n the.eventHandlers = {};\r\n\r\n // merge default and user defined options\r\n the.options = KTUtil.deepExtend({}, defaultOptions, options);\r\n\r\n // pause menu\r\n the.pauseDropdownHoverTime = 0;\r\n\r\n the.uid = KTUtil.getUniqueID();\r\n },\r\n\r\n update: function(options) {\r\n // merge default and user defined options\r\n the.options = KTUtil.deepExtend({}, defaultOptions, options);\r\n\r\n // pause menu\r\n the.pauseDropdownHoverTime = 0;\r\n\r\n // reset menu\r\n Plugin.reset();\r\n\r\n the.eventHandlers = {};\r\n\r\n // build menu\r\n Plugin.build();\r\n\r\n KTUtil.data(element).set('menu', the);\r\n },\r\n\r\n reload: function() {\r\n // reset menu\r\n Plugin.reset();\r\n\r\n // build menu\r\n Plugin.build();\r\n\r\n // reset submenu props\r\n Plugin.resetSubmenuProps();\r\n },\r\n\r\n /**\r\n * Reset menu\r\n * @returns {KTMenu}\r\n */\r\n build: function() {\r\n // General accordion submenu toggle\r\n the.eventHandlers['event_1'] = KTUtil.on( element, '.menu-toggle', 'click', Plugin.handleSubmenuAccordion);\r\n\r\n // Dropdown mode(hoverable)\r\n if (Plugin.getSubmenuMode() === 'dropdown' || Plugin.isConditionalSubmenuDropdown()) {\r\n // dropdown submenu - hover toggle\r\n the.eventHandlers['event_2'] = KTUtil.on( element, '[data-menu-toggle=\"hover\"]', 'mouseover', Plugin.handleSubmenuDrodownHoverEnter);\r\n the.eventHandlers['event_3'] = KTUtil.on( element, '[data-menu-toggle=\"hover\"]', 'mouseout', Plugin.handleSubmenuDrodownHoverExit);\r\n\r\n // dropdown submenu - click toggle\r\n the.eventHandlers['event_4'] = KTUtil.on( element, '[data-menu-toggle=\"click\"] > .menu-toggle, [data-menu-toggle=\"click\"] > .menu-link .menu-toggle', 'click', Plugin.handleSubmenuDropdownClick);\r\n the.eventHandlers['event_5'] = KTUtil.on( element, '[data-menu-toggle=\"tab\"] > .menu-toggle, [data-menu-toggle=\"tab\"] > .menu-link .menu-toggle', 'click', Plugin.handleSubmenuDropdownTabClick);\r\n }\r\n\r\n // Handle general link click\r\n the.eventHandlers['event_6'] = KTUtil.on(element, '.menu-item > .menu-link:not(.menu-toggle):not(.menu-link-toggle-skip)', 'click', Plugin.handleLinkClick);\r\n\r\n // Init scrollable menu\r\n if (the.options.scroll && the.options.scroll.height) {\r\n Plugin.scrollInit();\r\n }\r\n },\r\n\r\n /**\r\n * Reset menu\r\n * @returns {KTMenu}\r\n */\r\n reset: function() {\r\n KTUtil.off( element, 'click', the.eventHandlers['event_1']);\r\n\r\n // dropdown submenu - hover toggle\r\n KTUtil.off( element, 'mouseover', the.eventHandlers['event_2']);\r\n KTUtil.off( element, 'mouseout', the.eventHandlers['event_3']);\r\n\r\n // dropdown submenu - click toggle\r\n KTUtil.off( element, 'click', the.eventHandlers['event_4']);\r\n KTUtil.off( element, 'click', the.eventHandlers['event_5']);\r\n\r\n // handle link click\r\n KTUtil.off(element, 'click', the.eventHandlers['event_6']);\r\n },\r\n\r\n /**\r\n * Init scroll menu\r\n *\r\n */\r\n scrollInit: function() {\r\n if ( the.options.scroll && the.options.scroll.height ) {\r\n KTUtil.scrollDestroy(element, true);\r\n KTUtil.scrollInit(element, {mobileNativeScroll: true, windowScroll: false, resetHeightOnDestroy: true, handleWindowResize: true, height: the.options.scroll.height, rememberPosition: the.options.scroll.rememberPosition});\r\n } else {\r\n KTUtil.scrollDestroy(element, true);\r\n }\r\n },\r\n\r\n /**\r\n * Update scroll menu\r\n */\r\n scrollUpdate: function() {\r\n if ( the.options.scroll && the.options.scroll.height ) {\r\n KTUtil.scrollUpdate(element);\r\n }\r\n },\r\n\r\n /**\r\n * Scroll top\r\n */\r\n scrollTop: function() {\r\n if ( the.options.scroll && the.options.scroll.height ) {\r\n KTUtil.scrollTop(element);\r\n }\r\n },\r\n\r\n /**\r\n * Get submenu mode for current breakpoint and menu state\r\n * @returns {KTMenu}\r\n */\r\n getSubmenuMode: function(el) {\r\n if ( KTUtil.isBreakpointUp('lg') ) {\r\n if (el && KTUtil.hasAttr(el, 'data-menu-toggle') && KTUtil.attr(el, 'data-menu-toggle') == 'hover') {\r\n return 'dropdown';\r\n }\r\n\r\n if ( KTUtil.isset(the.options.submenu, 'desktop.state.body') ) {\r\n if ( KTUtil.hasClasses(body, the.options.submenu.desktop.state.body) ) {\r\n return the.options.submenu.desktop.state.mode;\r\n } else {\r\n return the.options.submenu.desktop.default;\r\n }\r\n } else if ( KTUtil.isset(the.options.submenu, 'desktop') ) {\r\n return the.options.submenu.desktop;\r\n }\r\n } else if ( KTUtil.isBreakpointUp('md') && KTUtil.isBreakpointDown('lg') && KTUtil.isset(the.options.submenu, 'tablet') ) {\r\n return the.options.submenu.tablet;\r\n } else if ( KTUtil.isBreakpointDown('md') && KTUtil.isset(the.options.submenu, 'mobile') ) {\r\n return the.options.submenu.mobile;\r\n } else {\r\n return false;\r\n }\r\n },\r\n\r\n /**\r\n * Get submenu mode for current breakpoint and menu state\r\n * @returns {KTMenu}\r\n */\r\n isConditionalSubmenuDropdown: function() {\r\n if ( KTUtil.isBreakpointUp('lg') && KTUtil.isset(the.options.submenu, 'desktop.state.body') ) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n },\r\n\r\n\r\n /**\r\n * Reset submenu attributes\r\n * @returns {KTMenu}\r\n */\r\n resetSubmenuProps: function(e) {\r\n var submenus = KTUtil.findAll(element, '.menu-submenu');\r\n if ( submenus ) {\r\n for (var i = 0, len = submenus.length; i < len; i++) {\r\n var submenu = submenus[0];\r\n\r\n KTUtil.css(submenu, 'display', '');\r\n KTUtil.css(submenu, 'overflow', '');\r\n\r\n if (submenu.hasAttribute('data-hor-direction')) {\r\n KTUtil.removeClass(submenu, 'menu-submenu-left');\r\n KTUtil.removeClass(submenu, 'menu-submenu-right');\r\n KTUtil.addClass(submenu, submenu.getAttribute('data-hor-direction'));\r\n }\r\n }\r\n }\r\n },\r\n\r\n /**\r\n * Handles submenu hover toggle\r\n * @returns {KTMenu}\r\n */\r\n handleSubmenuDrodownHoverEnter: function(e) {\r\n if ( Plugin.getSubmenuMode(this) === 'accordion' ) {\r\n return;\r\n }\r\n\r\n if ( the.resumeDropdownHover() === false ) {\r\n return;\r\n }\r\n\r\n var item = this;\r\n\r\n if ( item.getAttribute('data-hover') == '1' ) {\r\n item.removeAttribute('data-hover');\r\n clearTimeout( item.getAttribute('data-timeout') );\r\n item.removeAttribute('data-timeout');\r\n }\r\n\r\n Plugin.showSubmenuDropdown(item);\r\n },\r\n\r\n /**\r\n * Handles submenu hover toggle\r\n * @returns {KTMenu}\r\n */\r\n handleSubmenuDrodownHoverExit: function(e) {\r\n if ( the.resumeDropdownHover() === false ) {\r\n return;\r\n }\r\n\r\n if ( Plugin.getSubmenuMode(this) === 'accordion' ) {\r\n return;\r\n }\r\n\r\n var item = this;\r\n var time = the.options.dropdown.timeout;\r\n\r\n var timeout = setTimeout(function() {\r\n if ( item.getAttribute('data-hover') == '1' ) {\r\n Plugin.hideSubmenuDropdown(item, true);\r\n }\r\n }, time);\r\n\r\n item.setAttribute('data-hover', '1');\r\n item.setAttribute('data-timeout', timeout);\r\n },\r\n\r\n /**\r\n * Handles submenu click toggle\r\n * @returns {KTMenu}\r\n */\r\n handleSubmenuDropdownClick: function(e) {\r\n if ( Plugin.getSubmenuMode(this) === 'accordion' ) {\r\n return;\r\n }\r\n\r\n var item = this.closest('.menu-item');\r\n\r\n // Trigger click event handlers\r\n var result = Plugin.eventTrigger('submenuToggle', this, e);\r\n if (result === false) {\r\n return;\r\n }\r\n\r\n if ( item.getAttribute('data-menu-submenu-mode') == 'accordion' ) {\r\n return;\r\n }\r\n\r\n if ( KTUtil.hasClass(item, 'menu-item-hover') === false ) {\r\n KTUtil.addClass(item, 'menu-item-open-dropdown');\r\n Plugin.showSubmenuDropdown(item);\r\n } else {\r\n KTUtil.removeClass(item, 'menu-item-open-dropdown' );\r\n Plugin.hideSubmenuDropdown(item, true);\r\n }\r\n\r\n e.preventDefault();\r\n },\r\n\r\n /**\r\n * Handles tab click toggle\r\n * @returns {KTMenu}\r\n */\r\n handleSubmenuDropdownTabClick: function(e) {\r\n if (Plugin.getSubmenuMode(this) === 'accordion') {\r\n return;\r\n }\r\n var item = this.closest('.menu-item');\r\n\r\n // Trigger click event handlers\r\n var result = Plugin.eventTrigger('submenuToggle', this, e);\r\n if (result === false) {\r\n return;\r\n }\r\n\r\n if (item.getAttribute('data-menu-submenu-mode') == 'accordion') {\r\n return;\r\n }\r\n\r\n if (KTUtil.hasClass(item, 'menu-item-hover') == false) {\r\n KTUtil.addClass(item, 'menu-item-open-dropdown');\r\n Plugin.showSubmenuDropdown(item);\r\n }\r\n\r\n e.preventDefault();\r\n },\r\n\r\n /**\r\n * Handles link click\r\n * @returns {KTMenu}\r\n */\r\n handleLinkClick: function(e) {\r\n var submenu = this.closest('.menu-item.menu-item-submenu');\r\n\r\n // Trigger click event handlers\r\n var result = Plugin.eventTrigger('linkClick', this, e);\r\n if (result === false) {\r\n return;\r\n }\r\n\r\n if ( submenu && Plugin.getSubmenuMode(submenu) === 'dropdown' ) {\r\n Plugin.hideSubmenuDropdowns();\r\n }\r\n },\r\n\r\n /**\r\n * Handles submenu dropdown close on link click\r\n * @returns {KTMenu}\r\n */\r\n handleSubmenuDropdownClose: function(e, el) {\r\n // exit if its not submenu dropdown mode\r\n if (Plugin.getSubmenuMode(el) === 'accordion') {\r\n return;\r\n }\r\n\r\n var shown = element.querySelectorAll('.menu-item.menu-item-submenu.menu-item-hover:not(.menu-item-tabs)');\r\n\r\n // check if currently clicked link's parent item ha\r\n if (shown.length > 0 && KTUtil.hasClass(el, 'menu-toggle') === false && el.querySelectorAll('.menu-toggle').length === 0) {\r\n // close opened dropdown menus\r\n for (var i = 0, len = shown.length; i < len; i++) {\r\n Plugin.hideSubmenuDropdown(shown[0], true);\r\n }\r\n }\r\n },\r\n\r\n /**\r\n * helper functions\r\n * @returns {KTMenu}\r\n */\r\n handleSubmenuAccordion: function(e, el) {\r\n var query;\r\n var item = el ? el : this;\r\n\r\n // Trigger click event handlers\r\n var result = Plugin.eventTrigger('submenuToggle', this, e);\r\n if (result === false) {\r\n return;\r\n }\r\n\r\n if ( Plugin.getSubmenuMode(el) === 'dropdown' && (query = item.closest('.menu-item') ) ) {\r\n if (query.getAttribute('data-menu-submenu-mode') != 'accordion' ) {\r\n e.preventDefault();\r\n return;\r\n }\r\n }\r\n\r\n var li = item.closest('.menu-item');\r\n var submenu = KTUtil.child(li, '.menu-submenu, .menu-inner');\r\n\r\n if (KTUtil.hasClass(item.closest('.menu-item'), 'menu-item-open-always')) {\r\n return;\r\n }\r\n\r\n if ( li && submenu ) {\r\n e.preventDefault();\r\n var speed = the.options.accordion.slideSpeed;\r\n var hasClosables = false;\r\n\r\n if ( KTUtil.hasClass(li, 'menu-item-open') === false ) {\r\n // hide other accordions\r\n if ( the.options.accordion.expandAll === false ) {\r\n var subnav = item.closest('.menu-nav, .menu-subnav');\r\n var closables = KTUtil.children(subnav, '.menu-item.menu-item-open.menu-item-submenu:not(.menu-item-here):not(.menu-item-open-always)');\r\n\r\n if ( subnav && closables ) {\r\n for (var i = 0, len = closables.length; i < len; i++) {\r\n var el_ = closables[0];\r\n var submenu_ = KTUtil.child(el_, '.menu-submenu');\r\n if ( submenu_ ) {\r\n KTUtil.slideUp(submenu_, speed, function() {\r\n Plugin.scrollUpdate();\r\n KTUtil.removeClass(el_, 'menu-item-open');\r\n });\r\n }\r\n }\r\n }\r\n }\r\n\r\n KTUtil.slideDown(submenu, speed, function() {\r\n Plugin.scrollToItem(item);\r\n Plugin.scrollUpdate();\r\n\r\n Plugin.eventTrigger('submenuToggle', submenu, e);\r\n });\r\n\r\n KTUtil.addClass(li, 'menu-item-open');\r\n\r\n } else {\r\n KTUtil.slideUp(submenu, speed, function() {\r\n Plugin.scrollToItem(item);\r\n Plugin.eventTrigger('submenuToggle', submenu, e);\r\n });\r\n\r\n KTUtil.removeClass(li, 'menu-item-open');\r\n }\r\n }\r\n },\r\n\r\n /**\r\n * scroll to item function\r\n * @returns {KTMenu}\r\n */\r\n scrollToItem: function(item) {\r\n // handle auto scroll for accordion submenus\r\n if ( KTUtil.isBreakpointUp('lg') && the.options.accordion.autoScroll && element.getAttribute('data-menu-scroll') !== '1' ) {\r\n KTUtil.scrollTo(item, the.options.accordion.autoScrollSpeed);\r\n }\r\n },\r\n\r\n /**\r\n * Hide submenu dropdown\r\n * @returns {KTMenu}\r\n */\r\n hideSubmenuDropdown: function(item, classAlso) {\r\n // remove submenu activation class\r\n if ( classAlso ) {\r\n KTUtil.removeClass(item, 'menu-item-hover');\r\n KTUtil.removeClass(item, 'menu-item-active-tab');\r\n }\r\n\r\n // clear timeout\r\n item.removeAttribute('data-hover');\r\n\r\n if ( item.getAttribute('data-menu-toggle-class') ) {\r\n KTUtil.removeClass(body, item.getAttribute('data-menu-toggle-class'));\r\n }\r\n\r\n var timeout = item.getAttribute('data-timeout');\r\n item.removeAttribute('data-timeout');\r\n clearTimeout(timeout);\r\n },\r\n\r\n /**\r\n * Hide submenu dropdowns\r\n * @returns {KTMenu}\r\n */\r\n hideSubmenuDropdowns: function() {\r\n var items;\r\n if ( items = element.querySelectorAll('.menu-item-submenu.menu-item-hover:not(.menu-item-tabs):not([data-menu-toggle=\"tab\"])') ) {\r\n for (var j = 0, cnt = items.length; j < cnt; j++) {\r\n Plugin.hideSubmenuDropdown(items[j], true);\r\n }\r\n }\r\n },\r\n\r\n /**\r\n * helper functions\r\n * @returns {KTMenu}\r\n */\r\n showSubmenuDropdown: function(item) {\r\n // close active submenus\r\n var list = element.querySelectorAll('.menu-item-submenu.menu-item-hover, .menu-item-submenu.menu-item-active-tab');\r\n\r\n if ( list ) {\r\n for (var i = 0, len = list.length; i < len; i++) {\r\n var el = list[i];\r\n if ( item !== el && el.contains(item) === false && item.contains(el) === false ) {\r\n Plugin.hideSubmenuDropdown(el, true);\r\n }\r\n }\r\n }\r\n\r\n // add submenu activation class\r\n KTUtil.addClass(item, 'menu-item-hover');\r\n\r\n // Change the alignment of submenu is offscreen.\r\n var submenu = KTUtil.find(item, '.menu-submenu');\r\n\r\n if (submenu && submenu.hasAttribute('data-hor-direction') === false) {\r\n if (KTUtil.hasClass(submenu, 'menu-submenu-left')) {\r\n submenu.setAttribute('data-hor-direction', 'menu-submenu-left');\r\n } else if (KTUtil.hasClass(submenu, 'menu-submenu-right')) {\r\n submenu.setAttribute('data-hor-direction', 'menu-submenu-right');\r\n }\r\n }\r\n\r\n if ( submenu && KTUtil.isOffscreen(submenu, 'left', 15) === true ) {\r\n KTUtil.removeClass(submenu, 'menu-submenu-left');\r\n KTUtil.addClass(submenu, 'menu-submenu-right');\r\n } else if ( submenu && KTUtil.isOffscreen(submenu, 'right', 15) === true ) {\r\n KTUtil.removeClass(submenu, 'menu-submenu-right');\r\n KTUtil.addClass(submenu, 'menu-submenu-left');\r\n }\r\n\r\n if ( item.getAttribute('data-menu-toggle-class') ) {\r\n KTUtil.addClass(body, item.getAttribute('data-menu-toggle-class'));\r\n }\r\n },\r\n\r\n /**\r\n * Handles submenu slide toggle\r\n * @returns {KTMenu}\r\n */\r\n createSubmenuDropdownClickDropoff: function(el) {\r\n var query;\r\n var zIndex = (query = KTUtil.child(el, '.menu-submenu') ? KTUtil.css(query, 'z-index') : 0) - 1;\r\n\r\n var dropoff = document.createElement('
');\r\n\r\n body.appendChild(dropoff);\r\n\r\n KTUtil.addEvent(dropoff, 'click', function(e) {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n KTUtil.remove(this);\r\n Plugin.hideSubmenuDropdown(el, true);\r\n });\r\n },\r\n\r\n /**\r\n * Handles submenu hover toggle\r\n * @returns {KTMenu}\r\n */\r\n pauseDropdownHover: function(time) {\r\n var date = new Date();\r\n\r\n the.pauseDropdownHoverTime = date.getTime() + time;\r\n },\r\n\r\n /**\r\n * Handles submenu hover toggle\r\n * @returns {KTMenu}\r\n */\r\n resumeDropdownHover: function() {\r\n var date = new Date();\r\n\r\n return (date.getTime() > the.pauseDropdownHoverTime ? true : false);\r\n },\r\n\r\n /**\r\n * Reset menu's current active item\r\n * @returns {KTMenu}\r\n */\r\n resetActiveItem: function(item) {\r\n var list;\r\n var parents;\r\n\r\n list = element.querySelectorAll('.menu-item-active');\r\n\r\n for (var i = 0, len = list.length; i < len; i++) {\r\n var el = list[0];\r\n KTUtil.removeClass(el, 'menu-item-active');\r\n KTUtil.hide( KTUtil.child(el, '.menu-submenu') );\r\n parents = KTUtil.parents(el, '.menu-item-submenu') || [];\r\n\r\n for (var i_ = 0, len_ = parents.length; i_ < len_; i_++) {\r\n var el_ = parents[i];\r\n KTUtil.removeClass(el_, 'menu-item-open');\r\n KTUtil.hide( KTUtil.child(el_, '.menu-submenu') );\r\n }\r\n }\r\n\r\n // close open submenus\r\n if ( the.options.accordion.expandAll === false ) {\r\n if ( list = element.querySelectorAll('.menu-item-open') ) {\r\n for (var i = 0, len = list.length; i < len; i++) {\r\n KTUtil.removeClass(parents[0], 'menu-item-open');\r\n }\r\n }\r\n }\r\n },\r\n\r\n /**\r\n * Sets menu's active item\r\n * @returns {KTMenu}\r\n */\r\n setActiveItem: function(item) {\r\n // reset current active item\r\n Plugin.resetActiveItem();\r\n\r\n var parents = KTUtil.parents(item, '.menu-item-submenu') || [];\r\n for (var i = 0, len = parents.length; i < len; i++) {\r\n KTUtil.addClass(parents[i], 'menu-item-open');\r\n }\r\n\r\n KTUtil.addClass(item, 'menu-item-active');\r\n },\r\n\r\n /**\r\n * Returns page breadcrumbs for the menu's active item\r\n * @returns {KTMenu}\r\n */\r\n getBreadcrumbs: function(item) {\r\n var query;\r\n var breadcrumbs = [];\r\n var link = KTUtil.child(item, '.menu-link');\r\n\r\n breadcrumbs.push({\r\n text: (query = KTUtil.child(link, '.menu-text') ? query.innerHTML : ''),\r\n title: link.getAttribute('title'),\r\n href: link.getAttribute('href')\r\n });\r\n\r\n var parents = KTUtil.parents(item, '.menu-item-submenu');\r\n for (var i = 0, len = parents.length; i < len; i++) {\r\n var submenuLink = KTUtil.child(parents[i], '.menu-link');\r\n\r\n breadcrumbs.push({\r\n text: (query = KTUtil.child(submenuLink, '.menu-text') ? query.innerHTML : ''),\r\n title: submenuLink.getAttribute('title'),\r\n href: submenuLink.getAttribute('href')\r\n });\r\n }\r\n\r\n return breadcrumbs.reverse();\r\n },\r\n\r\n /**\r\n * Returns page title for the menu's active item\r\n * @returns {KTMenu}\r\n */\r\n getPageTitle: function(item) {\r\n var query;\r\n\r\n return (query = KTUtil.child(item, '.menu-text') ? query.innerHTML : '');\r\n },\r\n\r\n /**\r\n * Trigger events\r\n */\r\n eventTrigger: function(name, target, e) {\r\n for (var i = 0; i < the.events.length; i++ ) {\r\n var event = the.events[i];\r\n if ( event.name == name ) {\r\n if ( event.one == true ) {\r\n if ( event.fired == false ) {\r\n the.events[i].fired = true;\r\n return event.handler.call(this, target, e);\r\n }\r\n } else {\r\n return event.handler.call(this, target, e);\r\n }\r\n }\r\n }\r\n },\r\n\r\n addEvent: function(name, handler, one) {\r\n the.events.push({\r\n name: name,\r\n handler: handler,\r\n one: one,\r\n fired: false\r\n });\r\n },\r\n\r\n removeEvent: function(name) {\r\n if (the.events[name]) {\r\n delete the.events[name];\r\n }\r\n }\r\n };\r\n\r\n //////////////////////////\r\n // ** Public Methods ** //\r\n //////////////////////////\r\n\r\n /**\r\n * Set default options\r\n */\r\n\r\n the.setDefaults = function(options) {\r\n defaultOptions = options;\r\n };\r\n\r\n /**\r\n * Update scroll\r\n */\r\n the.scrollUpdate = function() {\r\n return Plugin.scrollUpdate();\r\n };\r\n\r\n /**\r\n * Re-init scroll\r\n */\r\n the.scrollReInit = function() {\r\n return Plugin.scrollInit();\r\n };\r\n\r\n /**\r\n * Scroll top\r\n */\r\n the.scrollTop = function() {\r\n return Plugin.scrollTop();\r\n };\r\n\r\n /**\r\n * Set active menu item\r\n */\r\n the.setActiveItem = function(item) {\r\n return Plugin.setActiveItem(item);\r\n };\r\n\r\n the.reload = function() {\r\n return Plugin.reload();\r\n };\r\n\r\n the.update = function(options) {\r\n return Plugin.update(options);\r\n };\r\n\r\n /**\r\n * Set breadcrumb for menu item\r\n */\r\n the.getBreadcrumbs = function(item) {\r\n return Plugin.getBreadcrumbs(item);\r\n };\r\n\r\n /**\r\n * Set page title for menu item\r\n */\r\n the.getPageTitle = function(item) {\r\n return Plugin.getPageTitle(item);\r\n };\r\n\r\n /**\r\n * Get submenu mode\r\n */\r\n the.getSubmenuMode = function(el) {\r\n return Plugin.getSubmenuMode(el);\r\n };\r\n\r\n /**\r\n * Hide dropdown\r\n * @returns {Object}\r\n */\r\n the.hideDropdown = function(item) {\r\n Plugin.hideSubmenuDropdown(item, true);\r\n };\r\n\r\n /**\r\n * Hide dropdowns\r\n * @returns {Object}\r\n */\r\n the.hideDropdowns = function() {\r\n Plugin.hideSubmenuDropdowns();\r\n };\r\n\r\n /**\r\n * Disable menu for given time\r\n * @returns {Object}\r\n */\r\n the.pauseDropdownHover = function(time) {\r\n Plugin.pauseDropdownHover(time);\r\n };\r\n\r\n /**\r\n * Disable menu for given time\r\n * @returns {Object}\r\n */\r\n the.resumeDropdownHover = function() {\r\n return Plugin.resumeDropdownHover();\r\n };\r\n\r\n /**\r\n * Register event\r\n */\r\n the.on = function(name, handler) {\r\n return Plugin.addEvent(name, handler);\r\n };\r\n\r\n the.off = function(name) {\r\n return Plugin.removeEvent(name);\r\n };\r\n\r\n the.one = function(name, handler) {\r\n return Plugin.addEvent(name, handler, true);\r\n };\r\n\r\n ///////////////////////////////\r\n // ** Plugin Construction ** //\r\n ///////////////////////////////\r\n\r\n // Run plugin\r\n Plugin.construct.apply(the, [options]);\r\n\r\n // Handle plugin on window resize\r\n KTUtil.addResizeHandler(function() {\r\n if (init) {\r\n the.reload();\r\n }\r\n });\r\n\r\n // Init done\r\n init = true;\r\n\r\n // Return plugin instance\r\n return the;\r\n};\r\n\r\n// webpack support\r\nif (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {\r\n module.exports = KTMenu;\r\n}\r\n\r\n// Plugin global lazy initialization\r\ndocument.addEventListener(\"click\", function (e) {\r\n var body = KTUtil.getByTagName('body')[0];\r\n var query;\r\n if ( query = body.querySelectorAll('.menu-nav .menu-item.menu-item-submenu.menu-item-hover:not(.menu-item-tabs)[data-menu-toggle=\"click\"]') ) {\r\n for (var i = 0, len = query.length; i < len; i++) {\r\n var element = query[i].closest('.menu-nav').parentNode;\r\n\r\n if ( element ) {\r\n var the = KTUtil.data(element).get('menu');\r\n\r\n if ( !the ) {\r\n break;\r\n }\r\n\r\n if ( !the || the.getSubmenuMode() !== 'dropdown' ) {\r\n break;\r\n }\r\n\r\n if ( e.target !== element && element.contains(e.target) === false ) {\r\n the.hideDropdowns();\r\n }\r\n }\r\n }\r\n }\r\n});\r\n","\"use strict\";\r\n\r\n// Component Definition\r\nvar KTOffcanvas = function(elementId, options) {\r\n // Main object\r\n var the = this;\r\n var init = false;\r\n\r\n // Get element object\r\n var element = KTUtil.getById(elementId);\r\n var body = KTUtil.getBody();\r\n\r\n if (!element) {\r\n return;\r\n }\r\n\r\n // Default options\r\n var defaultOptions = {\r\n attrCustom: ''\r\n };\r\n\r\n ////////////////////////////\r\n // ** Private Methods ** //\r\n ////////////////////////////\r\n\r\n var Plugin = {\r\n construct: function(options) {\r\n if (KTUtil.data(element).has('offcanvas')) {\r\n the = KTUtil.data(element).get('offcanvas');\r\n } else {\r\n // Reset offcanvas\r\n Plugin.init(options);\r\n\r\n // Build offcanvas\r\n Plugin.build();\r\n\r\n KTUtil.data(element).set('offcanvas', the);\r\n }\r\n\r\n return the;\r\n },\r\n\r\n init: function(options) {\r\n the.events = [];\r\n\r\n // merge default and user defined options\r\n the.options = KTUtil.deepExtend({}, defaultOptions, options);\r\n\r\n the.classBase = the.options.baseClass;\r\n the.attrCustom = the.options.attrCustom;\r\n the.classShown = the.classBase + '-on';\r\n the.classOverlay = the.classBase + '-overlay';\r\n the.target;\r\n\r\n the.state = KTUtil.hasClass(element, the.classShown) ? 'shown' : 'hidden';\r\n },\r\n\r\n build: function() {\r\n // offcanvas toggle\r\n if (the.options.toggleBy) {\r\n if (typeof the.options.toggleBy === 'string') {\r\n KTUtil.addEvent(KTUtil.getById(the.options.toggleBy), 'click', function(e) {\r\n e.preventDefault();\r\n the.target = this;\r\n Plugin.toggle();\r\n });\r\n } else if (the.options.toggleBy && the.options.toggleBy[0]) {\r\n if (the.options.toggleBy[0].target) {\r\n for (var i in the.options.toggleBy) {\r\n KTUtil.addEvent(KTUtil.getById(the.options.toggleBy[i].target), 'click', function(e) {\r\n e.preventDefault();\r\n the.target = this;\r\n Plugin.toggle();\r\n });\r\n }\r\n } else {\r\n for (var i in the.options.toggleBy) {\r\n KTUtil.addEvent(KTUtil.getById(the.options.toggleBy[i]), 'click', function(e) {\r\n e.preventDefault();\r\n the.target = this;\r\n Plugin.toggle();\r\n });\r\n }\r\n }\r\n\r\n } else if (the.options.toggleBy && the.options.toggleBy.target) {\r\n KTUtil.addEvent( KTUtil.getById(the.options.toggleBy.target), 'click', function(e) {\r\n e.preventDefault();\r\n the.target = this;\r\n Plugin.toggle();\r\n });\r\n }\r\n }\r\n\r\n // offcanvas close\r\n var closeBy = KTUtil.getById(the.options.closeBy);\r\n if (closeBy) {\r\n KTUtil.addEvent(closeBy, 'click', function(e) {\r\n e.preventDefault();\r\n the.target = this;\r\n Plugin.hide();\r\n });\r\n }\r\n },\r\n\r\n isShown: function() {\r\n return (the.state == 'shown' ? true : false);\r\n },\r\n\r\n toggle: function() {;\r\n Plugin.eventTrigger('toggle');\r\n\r\n if (the.state == 'shown') {\r\n Plugin.hide();\r\n } else {\r\n Plugin.show();\r\n }\r\n },\r\n\r\n show: function() {\r\n if (the.state == 'shown') {\r\n return;\r\n }\r\n\r\n Plugin.eventTrigger('beforeShow');\r\n\r\n Plugin.toggleClass('show');\r\n\r\n // Offcanvas panel\r\n KTUtil.attr(body, 'data-offcanvas-' + the.classBase, 'on');\r\n KTUtil.addClass(element, the.classShown);\r\n\r\n if (the.attrCustom.length > 0) {\r\n KTUtil.attr(body, 'data-offcanvas-' + the.classCustom, 'on');\r\n //KTUtil.addClass(body, the.classCustom);\r\n }\r\n\r\n the.state = 'shown';\r\n\r\n if (the.options.overlay) {\r\n the.overlay = KTUtil.insertAfter(document.createElement('DIV') , element );\r\n KTUtil.addClass(the.overlay, the.classOverlay);\r\n\r\n KTUtil.addEvent(the.overlay, 'click', function(e) {\r\n //e.stopPropagation();\r\n e.preventDefault();\r\n Plugin.hide(the.target);\r\n });\r\n }\r\n\r\n Plugin.eventTrigger('afterShow');\r\n },\r\n\r\n hide: function() {\r\n if (the.state == 'hidden') {\r\n return;\r\n }\r\n\r\n Plugin.eventTrigger('beforeHide');\r\n\r\n Plugin.toggleClass('hide');\r\n\r\n KTUtil.removeAttr(body, 'data-offcanvas-' + the.classBase);\r\n KTUtil.removeClass(element, the.classShown);\r\n\r\n if (the.attrCustom.length > 0) {\r\n KTUtil.removeAttr(body, 'data-offcanvas-' + the.attrCustom);\r\n }\r\n\r\n the.state = 'hidden';\r\n\r\n if (the.options.overlay && the.overlay) {\r\n KTUtil.remove(the.overlay);\r\n }\r\n\r\n Plugin.eventTrigger('afterHide');\r\n },\r\n\r\n toggleClass: function(mode) {\r\n var id = KTUtil.attr(the.target, 'id');\r\n var toggleBy;\r\n\r\n if (the.options.toggleBy && the.options.toggleBy[0] && the.options.toggleBy[0].target) {\r\n for (var i in the.options.toggleBy) {\r\n if (the.options.toggleBy[i].target === id) {\r\n toggleBy = the.options.toggleBy[i];\r\n }\r\n }\r\n } else if (the.options.toggleBy && the.options.toggleBy.target) {\r\n toggleBy = the.options.toggleBy;\r\n }\r\n\r\n if (toggleBy) {\r\n var el = KTUtil.getById(toggleBy.target);\r\n\r\n if (mode === 'show') {\r\n KTUtil.addClass(el, toggleBy.state);\r\n }\r\n\r\n if (mode === 'hide') {\r\n KTUtil.removeClass(el, toggleBy.state);\r\n }\r\n }\r\n },\r\n\r\n eventTrigger: function(name, args) {\r\n for (var i = 0; i < the.events.length; i++) {\r\n var event = the.events[i];\r\n if (event.name == name) {\r\n if (event.one == true) {\r\n if (event.fired == false) {\r\n the.events[i].fired = true;\r\n return event.handler.call(this, the, args);\r\n }\r\n } else {\r\n return event.handler.call(this, the, args);\r\n }\r\n }\r\n }\r\n },\r\n\r\n addEvent: function(name, handler, one) {\r\n the.events.push({\r\n name: name,\r\n handler: handler,\r\n one: one,\r\n fired: false\r\n });\r\n }\r\n };\r\n\r\n //////////////////////////\r\n // ** Public Methods ** //\r\n //////////////////////////\r\n\r\n /**\r\n * Set default options\r\n * @param options\r\n */\r\n the.setDefaults = function(options) {\r\n defaultOptions = options;\r\n };\r\n\r\n /**\r\n * Check if canvas is shown\r\n * @returns {boolean}\r\n */\r\n the.isShown = function() {\r\n return Plugin.isShown();\r\n };\r\n\r\n /**\r\n * Set to hide the canvas\r\n */\r\n the.hide = function() {\r\n return Plugin.hide();\r\n };\r\n\r\n /**\r\n * Set to show the canvas\r\n */\r\n the.show = function() {\r\n return Plugin.show();\r\n };\r\n\r\n /**\r\n * Attach event\r\n * @param name\r\n * @param handler\r\n */\r\n the.on = function(name, handler) {\r\n return Plugin.addEvent(name, handler);\r\n };\r\n\r\n /**\r\n * Attach event that will be fired once\r\n * @param name\r\n * @param handler\r\n */\r\n the.one = function(name, handler) {\r\n return Plugin.addEvent(name, handler, true);\r\n };\r\n\r\n ///////////////////////////////\r\n // ** Plugin Construction ** //\r\n ///////////////////////////////\r\n\r\n // Run plugin\r\n Plugin.construct.apply(the, [options]);\r\n\r\n // Init done\r\n init = true;\r\n\r\n // Return plugin instance\r\n return the;\r\n};\r\n\r\n// webpack support\r\nif (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {\r\n module.exports = KTOffcanvas;\r\n}\r\n","\"use strict\";\r\n\r\n// Component Definition\r\nvar KTScrolltop = function(elementId, options) {\r\n // Main object\r\n var the = this;\r\n var init = false;\r\n\r\n // Get element object\r\n var element = KTUtil.getById(elementId);\r\n var body = KTUtil.getBody();\r\n\r\n if (!element) {\r\n return;\r\n }\r\n\r\n // Default options\r\n var defaultOptions = {\r\n offset: 300,\r\n speed: 6000\r\n };\r\n\r\n ////////////////////////////\r\n // ** Private Methods ** //\r\n ////////////////////////////\r\n\r\n var Plugin = {\r\n /**\r\n * Run plugin\r\n * @returns {mscrolltop}\r\n */\r\n construct: function(options) {\r\n if (KTUtil.data(element).has('scrolltop')) {\r\n the = KTUtil.data(element).get('scrolltop');\r\n } else {\r\n // reset scrolltop\r\n Plugin.init(options);\r\n\r\n // build scrolltop\r\n Plugin.build();\r\n\r\n KTUtil.data(element).set('scrolltop', the);\r\n }\r\n\r\n return the;\r\n },\r\n\r\n /**\r\n * Handles subscrolltop click toggle\r\n * @returns {mscrolltop}\r\n */\r\n init: function(options) {\r\n the.events = [];\r\n\r\n // merge default and user defined options\r\n the.options = KTUtil.deepExtend({}, defaultOptions, options);\r\n },\r\n\r\n build: function() {\r\n var timer;\r\n\r\n window.addEventListener('scroll', function() {\r\n KTUtil.throttle(timer, function() {\r\n Plugin.handle();\r\n }, 200);\r\n });\r\n\r\n // handle button click\r\n KTUtil.addEvent(element, 'click', Plugin.scroll);\r\n },\r\n\r\n /**\r\n * Handles scrolltop click scrollTop\r\n */\r\n handle: function() {\r\n var pos = KTUtil.getScrollTop(); // current vertical position\r\n\r\n if (pos > the.options.offset) {\r\n if (body.hasAttribute('data-scrolltop') === false) {\r\n body.setAttribute('data-scrolltop', 'on');\r\n }\r\n } else {\r\n if (body.hasAttribute('data-scrolltop') === true) {\r\n body.removeAttribute('data-scrolltop');\r\n }\r\n }\r\n },\r\n\r\n /**\r\n * Handles scrolltop click scrollTop\r\n */\r\n scroll: function(e) {\r\n e.preventDefault();\r\n\r\n KTUtil.scrollTop(0, the.options.speed);\r\n },\r\n\r\n\r\n /**\r\n * Trigger events\r\n */\r\n eventTrigger: function(name, args) {\r\n for (var i = 0; i < the.events.length; i++) {\r\n var event = the.events[i];\r\n if (event.name == name) {\r\n if (event.one == true) {\r\n if (event.fired == false) {\r\n the.events[i].fired = true;\r\n return event.handler.call(this, the, args);\r\n }\r\n } else {\r\n return event.handler.call(this, the, args);\r\n }\r\n }\r\n }\r\n },\r\n\r\n addEvent: function(name, handler, one) {\r\n the.events.push({\r\n name: name,\r\n handler: handler,\r\n one: one,\r\n fired: false\r\n });\r\n }\r\n };\r\n\r\n //////////////////////////\r\n // ** Public Methods ** //\r\n //////////////////////////\r\n\r\n /**\r\n * Set default options\r\n */\r\n\r\n the.setDefaults = function(options) {\r\n defaultOptions = options;\r\n };\r\n\r\n /**\r\n * Get subscrolltop mode\r\n */\r\n the.on = function(name, handler) {\r\n return Plugin.addEvent(name, handler);\r\n };\r\n\r\n /**\r\n * Set scrolltop content\r\n * @returns {mscrolltop}\r\n */\r\n the.one = function(name, handler) {\r\n return Plugin.addEvent(name, handler, true);\r\n };\r\n\r\n ///////////////////////////////\r\n // ** Plugin Construction ** //\r\n ///////////////////////////////\r\n\r\n // Run plugin\r\n Plugin.construct.apply(the, [options]);\r\n\r\n // Init done\r\n init = true;\r\n\r\n // Return plugin instance\r\n return the;\r\n};\r\n\r\n// webpack support\r\nif (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {\r\n module.exports = KTScrolltop;\r\n}\r\n","\"use strict\";\r\n\r\n// Component Definition\r\nvar KTToggle = function(elementId, options) {\r\n // Main object\r\n var the = this;\r\n var init = false;\r\n\r\n // Get element object\r\n var element = KTUtil.getById(elementId);\r\n\r\n if (!element) {\r\n return;\r\n }\r\n\r\n // Default options\r\n var defaultOptions = {\r\n targetToggleMode: 'class' // class|attribute\r\n };\r\n\r\n ////////////////////////////\r\n // ** Private Methods ** //\r\n ////////////////////////////\r\n\r\n var Plugin = {\r\n /**\r\n * Construct\r\n */\r\n\r\n construct: function(options) {\r\n if (KTUtil.data(element).has('toggle')) {\r\n the = KTUtil.data(element).get('toggle');\r\n } else {\r\n // reset menu\r\n Plugin.init(options);\r\n\r\n // build menu\r\n Plugin.build();\r\n\r\n KTUtil.data(element).set('toggle', the);\r\n }\r\n\r\n return the;\r\n },\r\n\r\n /**\r\n * Handles subtoggle click toggle\r\n */\r\n init: function(options) {\r\n the.element = element;\r\n the.events = [];\r\n\r\n // Merge default and user defined options\r\n the.options = KTUtil.deepExtend({}, defaultOptions, options);\r\n\r\n //alert(the.options.target.tagName);\r\n the.target = KTUtil.getById(options.target);\r\n\r\n the.targetState = the.options.targetState;\r\n the.toggleState = the.options.toggleState;\r\n\r\n if (the.options.targetToggleMode == 'class') {\r\n the.state = KTUtil.hasClasses(the.target, the.targetState) ? 'on' : 'off';\r\n } else {\r\n the.state = KTUtil.hasAttr(the.target, 'data-' + the.targetState) ? KTUtil.attr(the.target, 'data-' + the.targetState) : 'off';\r\n }\r\n },\r\n\r\n /**\r\n * Setup toggle\r\n */\r\n build: function() {\r\n KTUtil.addEvent(element, 'mouseup', Plugin.toggle);\r\n },\r\n\r\n /**\r\n * Handles offcanvas click toggle\r\n */\r\n toggle: function(e) {\r\n Plugin.eventTrigger('beforeToggle');\r\n\r\n if (the.state == 'off') {\r\n Plugin.toggleOn();\r\n } else {\r\n Plugin.toggleOff();\r\n }\r\n\r\n Plugin.eventTrigger('afterToggle');\r\n\r\n e.preventDefault();\r\n\r\n return the;\r\n },\r\n\r\n /**\r\n * Handles toggle click toggle\r\n */\r\n toggleOn: function() {\r\n Plugin.eventTrigger('beforeOn');\r\n\r\n if (the.options.targetToggleMode == 'class') {\r\n KTUtil.addClass(the.target, the.targetState);\r\n } else {\r\n KTUtil.attr(the.target, 'data-' + the.targetState, 'on');\r\n }\r\n\r\n if (the.toggleState) {\r\n KTUtil.addClass(element, the.toggleState);\r\n }\r\n\r\n the.state = 'on';\r\n\r\n Plugin.eventTrigger('afterOn');\r\n\r\n Plugin.eventTrigger('toggle');\r\n\r\n return the;\r\n },\r\n\r\n /**\r\n * Handles toggle click toggle\r\n */\r\n toggleOff: function() {\r\n Plugin.eventTrigger('beforeOff');\r\n\r\n if (the.options.targetToggleMode == 'class') {\r\n KTUtil.removeClass(the.target, the.targetState);\r\n } else {\r\n KTUtil.removeAttr(the.target, 'data-' + the.targetState);\r\n }\r\n\r\n if (the.toggleState) {\r\n KTUtil.removeClass(element, the.toggleState);\r\n }\r\n\r\n the.state = 'off';\r\n\r\n Plugin.eventTrigger('afterOff');\r\n\r\n Plugin.eventTrigger('toggle');\r\n\r\n return the;\r\n },\r\n\r\n /**\r\n * Trigger events\r\n */\r\n eventTrigger: function(name) {\r\n for (var i = 0; i < the.events.length; i++) {\r\n var event = the.events[i];\r\n\r\n if (event.name == name) {\r\n if (event.one == true) {\r\n if (event.fired == false) {\r\n the.events[i].fired = true;\r\n return event.handler.call(this, the);\r\n }\r\n } else {\r\n return event.handler.call(this, the);\r\n }\r\n }\r\n }\r\n },\r\n\r\n addEvent: function(name, handler, one) {\r\n the.events.push({\r\n name: name,\r\n handler: handler,\r\n one: one,\r\n fired: false\r\n });\r\n\r\n return the;\r\n }\r\n };\r\n\r\n //////////////////////////\r\n // ** Public Methods ** //\r\n //////////////////////////\r\n\r\n /**\r\n * Set default options\r\n */\r\n\r\n the.setDefaults = function(options) {\r\n defaultOptions = options;\r\n };\r\n\r\n /**\r\n * Get toggle state\r\n */\r\n the.getState = function() {\r\n return the.state;\r\n };\r\n\r\n /**\r\n * Toggle\r\n */\r\n the.toggle = function() {\r\n return Plugin.toggle();\r\n };\r\n\r\n /**\r\n * Toggle on\r\n */\r\n the.toggleOn = function() {\r\n return Plugin.toggleOn();\r\n };\r\n\r\n /**\r\n * Toggle off\r\n */\r\n the.toggleOff = function() {\r\n return Plugin.toggleOff();\r\n };\r\n\r\n /**\r\n * Attach event\r\n * @returns {KTToggle}\r\n */\r\n the.on = function(name, handler) {\r\n return Plugin.addEvent(name, handler);\r\n };\r\n\r\n /**\r\n * Attach event that will be fired once\r\n * @returns {KTToggle}\r\n */\r\n the.one = function(name, handler) {\r\n return Plugin.addEvent(name, handler, true);\r\n };\r\n\r\n // Construct plugin\r\n Plugin.construct.apply(the, [options]);\r\n\r\n return the;\r\n};\r\n\r\n// webpack support\r\nif (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {\r\n module.exports = KTToggle;\r\n}\r\n","\"use strict\";\r\n\r\n// Component Definition\r\nvar KTWizard = function(elementId, options) {\r\n // Main object\r\n var the = this;\r\n var init = false;\r\n\r\n // Get element object\r\n var element = KTUtil.getById(elementId);\r\n var body = KTUtil.getBody();\r\n\r\n if (!element) {\r\n return;\r\n }\r\n\r\n // Default options\r\n var defaultOptions = {\r\n startStep: 1,\r\n clickableSteps: false // to make steps clickable this set value true and add data-wizard-clickable=\"true\" in HTML for class=\"wizard\" element\r\n };\r\n\r\n ////////////////////////////\r\n // ** Private Methods ** //\r\n ////////////////////////////\r\n\r\n var Plugin = {\r\n /**\r\n * Construct\r\n */\r\n\r\n construct: function(options) {\r\n if (KTUtil.data(element).has('wizard')) {\r\n the = KTUtil.data(element).get('wizard');\r\n } else {\r\n // reset menu\r\n Plugin.init(options);\r\n\r\n // build menu\r\n Plugin.build();\r\n\r\n KTUtil.data(element).set('wizard', the);\r\n }\r\n\r\n return the;\r\n },\r\n\r\n /**\r\n * Init wizard\r\n */\r\n init: function(options) {\r\n the.element = element;\r\n the.events = [];\r\n\r\n // merge default and user defined options\r\n the.options = KTUtil.deepExtend({}, defaultOptions, options);\r\n\r\n // Elements\r\n the.steps = KTUtil.findAll(element, '[data-wizard-type=\"step\"]');\r\n\r\n the.btnSubmit = KTUtil.find(element, '[data-wizard-type=\"action-submit\"]');\r\n the.btnNext = KTUtil.find(element, '[data-wizard-type=\"action-next\"]');\r\n the.btnPrev = KTUtil.find(element, '[data-wizard-type=\"action-prev\"]');\r\n the.btnLast = KTUtil.find(element, '[data-wizard-type=\"action-last\"]');\r\n the.btnFirst = KTUtil.find(element, '[data-wizard-type=\"action-first\"]');\r\n\r\n // Variables\r\n the.events = [];\r\n the.currentStep = 1;\r\n the.stopped = false;\r\n the.totalSteps = the.steps.length;\r\n\r\n // Init current step\r\n if (the.options.startStep > 1) {\r\n Plugin.goTo(the.options.startStep);\r\n }\r\n\r\n // Init UI\r\n Plugin.updateUI();\r\n },\r\n\r\n /**\r\n * Build Form Wizard\r\n */\r\n build: function() {\r\n // Next button event handler\r\n KTUtil.addEvent(the.btnNext, 'click', function(e) {\r\n e.preventDefault();\r\n Plugin.goTo(Plugin.getNextStep(), true);\r\n });\r\n\r\n // Prev button event handler\r\n KTUtil.addEvent(the.btnPrev, 'click', function(e) {\r\n e.preventDefault();\r\n Plugin.goTo(Plugin.getPrevStep(), true);\r\n });\r\n\r\n // First button event handler\r\n KTUtil.addEvent(the.btnFirst, 'click', function(e) {\r\n e.preventDefault();\r\n Plugin.goTo(Plugin.getFirstStep(), true);\r\n });\r\n\r\n // Last button event handler\r\n KTUtil.addEvent(the.btnLast, 'click', function(e) {\r\n e.preventDefault();\r\n Plugin.goTo(Plugin.getLastStep(), true);\r\n });\r\n\r\n if (the.options.clickableSteps === true) {\r\n KTUtil.on(element, '[data-wizard-type=\"step\"]', 'click', function() {\r\n var index = KTUtil.index(this) + 1;\r\n if (index !== the.currentStep) {\r\n Plugin.goTo(index, true);\r\n }\r\n });\r\n }\r\n },\r\n\r\n /**\r\n * Handles wizard click wizard\r\n */\r\n goTo: function(number, eventHandle) {\r\n //console.log('go to:' + number);\r\n\r\n // Skip if this step is already shown\r\n if (number === the.currentStep || number > the.totalSteps || number < 0) {\r\n return;\r\n }\r\n\r\n // Validate step number\r\n if (number) {\r\n number = parseInt(number);\r\n } else {\r\n number = Plugin.getNextStep();\r\n }\r\n\r\n // Before next and prev events\r\n var callback;\r\n\r\n if (eventHandle === true) {\r\n if (number > the.currentStep) {\r\n callback = Plugin.eventTrigger('beforeNext');\r\n } else {\r\n callback = Plugin.eventTrigger('beforePrev');\r\n }\r\n }\r\n\r\n // Skip if stopped\r\n if (the.stopped === true) {\r\n the.stopped = false;\r\n return;\r\n }\r\n\r\n // Continue if no exit\r\n if (callback !== false) {\r\n // Before change\r\n if (eventHandle === true) {\r\n Plugin.eventTrigger('beforeChange');\r\n }\r\n\r\n // Set current step\r\n the.currentStep = number;\r\n\r\n Plugin.updateUI();\r\n\r\n // Trigger change event\r\n if (eventHandle === true) {\r\n Plugin.eventTrigger('change');\r\n }\r\n }\r\n\r\n // After next and prev events\r\n if (eventHandle === true) {\r\n if (number > the.startStep) {\r\n Plugin.eventTrigger('afterNext');\r\n } else {\r\n Plugin.eventTrigger('afterPrev');\r\n }\r\n }\r\n\r\n return the;\r\n },\r\n\r\n /**\r\n * Cancel\r\n */\r\n stop: function() {\r\n the.stopped = true;\r\n },\r\n\r\n /**\r\n * Resume\r\n */\r\n start: function() {\r\n the.stopped = false;\r\n },\r\n\r\n /**\r\n * Check last step\r\n */\r\n isLastStep: function() {\r\n return the.currentStep === the.totalSteps;\r\n },\r\n\r\n /**\r\n * Check first step\r\n */\r\n isFirstStep: function() {\r\n return the.currentStep === 1;\r\n },\r\n\r\n /**\r\n * Check between step\r\n */\r\n isBetweenStep: function() {\r\n return Plugin.isLastStep() === false && Plugin.isFirstStep() === false;\r\n },\r\n\r\n /**\r\n * Go to the first step\r\n */\r\n updateUI: function() {\r\n var stepType = '';\r\n var index = the.currentStep - 1;\r\n\r\n if (Plugin.isLastStep()) {\r\n stepType = 'last';\r\n } else if (Plugin.isFirstStep()) {\r\n stepType = 'first';\r\n } else {\r\n stepType = 'between';\r\n }\r\n\r\n KTUtil.attr(the.element, 'data-wizard-state', stepType);\r\n\r\n // Steps\r\n var steps = KTUtil.findAll(the.element, '[data-wizard-type=\"step\"]');\r\n\r\n if (steps && steps.length > 0) {\r\n for (var i = 0, len = steps.length; i < len; i++) {\r\n if (i == index) {\r\n KTUtil.attr(steps[i], 'data-wizard-state', 'current');\r\n } else {\r\n if (i < index) {\r\n KTUtil.attr(steps[i], 'data-wizard-state', 'done');\r\n } else {\r\n KTUtil.attr(steps[i], 'data-wizard-state', 'pending');\r\n }\r\n }\r\n }\r\n }\r\n\r\n // Steps Info\r\n var stepsInfo = KTUtil.findAll(the.element, '[data-wizard-type=\"step-info\"]');\r\n if (stepsInfo &&stepsInfo.length > 0) {\r\n for (var i = 0, len = stepsInfo.length; i < len; i++) {\r\n if (i == index) {\r\n KTUtil.attr(stepsInfo[i], 'data-wizard-state', 'current');\r\n } else {\r\n KTUtil.removeAttr(stepsInfo[i], 'data-wizard-state');\r\n }\r\n }\r\n }\r\n\r\n // Steps Content\r\n var stepsContent = KTUtil.findAll(the.element, '[data-wizard-type=\"step-content\"]');\r\n if (stepsContent&& stepsContent.length > 0) {\r\n for (var i = 0, len = stepsContent.length; i < len; i++) {\r\n if (i == index) {\r\n KTUtil.attr(stepsContent[i], 'data-wizard-state', 'current');\r\n } else {\r\n KTUtil.removeAttr(stepsContent[i], 'data-wizard-state');\r\n }\r\n }\r\n }\r\n },\r\n\r\n /**\r\n * Get next step\r\n */\r\n getNextStep: function() {\r\n if (the.totalSteps >= (the.currentStep + 1)) {\r\n return the.currentStep + 1;\r\n } else {\r\n return the.totalSteps;\r\n }\r\n },\r\n\r\n /**\r\n * Get prev step\r\n */\r\n getPrevStep: function() {\r\n if ((the.currentStep - 1) >= 1) {\r\n return the.currentStep - 1;\r\n } else {\r\n return 1;\r\n }\r\n },\r\n\r\n /**\r\n * Trigger events\r\n */\r\n eventTrigger: function(name, nested) {\r\n //KTUtil.triggerCustomEvent(name);\r\n for (var i = 0; i < the.events.length; i++) {\r\n var event = the.events[i];\r\n if (event.name == name) {\r\n if (event.one == true) {\r\n if (event.fired == false) {\r\n the.events[i].fired = true;\r\n return event.handler.call(this, the);\r\n }\r\n } else {\r\n return event.handler.call(this, the);\r\n }\r\n }\r\n }\r\n },\r\n\r\n addEvent: function(name, handler, one) {\r\n the.events.push({\r\n name: name,\r\n handler: handler,\r\n one: one,\r\n fired: false\r\n });\r\n\r\n return the;\r\n }\r\n };\r\n\r\n //////////////////////////\r\n // ** Public Methods ** //\r\n //////////////////////////\r\n\r\n /**\r\n * Set default options\r\n */\r\n\r\n the.setDefaults = function(options) {\r\n defaultOptions = options;\r\n };\r\n\r\n /**\r\n * Go to the next step\r\n */\r\n the.goNext = function(eventHandle) {\r\n return Plugin.goTo(Plugin.getNextStep(), eventHandle);\r\n };\r\n\r\n /**\r\n * Go to the prev step\r\n */\r\n the.goPrev = function(eventHandle) {\r\n return Plugin.goTo(Plugin.getPrevStep(),eventHandle);\r\n };\r\n\r\n /**\r\n * Go to the last step\r\n */\r\n the.goLast = function(eventHandle) {\r\n return Plugin.goTo(Plugin.getLastStep(), eventHandle);\r\n };\r\n\r\n /**\r\n * Go to the first step\r\n */\r\n the.goFirst = function(eventHandle) {\r\n return Plugin.goTo(Plugin.getFirstStep(), eventHandle);\r\n };\r\n\r\n /**\r\n * Go to a step\r\n */\r\n the.goTo = function(number, eventHandle) {\r\n return Plugin.goTo(number, eventHandle);\r\n };\r\n\r\n /**\r\n * Cancel step\r\n */\r\n the.stop = function() {\r\n return Plugin.stop();\r\n };\r\n\r\n /**\r\n * Resume step\r\n */\r\n the.start = function() {\r\n return Plugin.start();\r\n };\r\n\r\n /**\r\n * Get current step number\r\n */\r\n the.getStep = function() {\r\n return the.currentStep;\r\n };\r\n\r\n /**\r\n * Check last step\r\n */\r\n the.isLastStep = function() {\r\n return Plugin.isLastStep();\r\n };\r\n\r\n /**\r\n * Check first step\r\n */\r\n the.isFirstStep = function() {\r\n return Plugin.isFirstStep();\r\n };\r\n\r\n /**\r\n * Attach event\r\n */\r\n the.on = function(name, handler) {\r\n return Plugin.addEvent(name, handler);\r\n };\r\n\r\n /**\r\n * Attach event that will be fired once\r\n */\r\n the.one = function(name, handler) {\r\n return Plugin.addEvent(name, handler, true);\r\n };\r\n\r\n // Construct plugin\r\n Plugin.construct.apply(the, [options]);\r\n\r\n return the;\r\n};\r\n\r\n// webpack support\r\nif (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {\r\n module.exports = KTWizard;\r\n}\r\n","'use strict';\r\n(function($) {\r\n\r\n\tvar pluginName = 'KTDatatable';\r\n\tvar pfx = '';\r\n\tvar util = KTUtil;\r\n\tvar app = KTApp;\r\n\r\n\tif (typeof util === 'undefined') throw new Error('Util class is required and must be included before ' + pluginName);\r\n\r\n\t// plugin setup\r\n\t$.fn[pluginName] = function(options) {\r\n\t\tif ($(this).length === 0) {\r\n\t\t\tconsole.warn('No ' + pluginName + ' element exist.');\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// global variables\r\n\t\tvar datatable = this;\r\n\r\n\t\t// debug enabled?\r\n\t\t// 1) state will be cleared on each refresh\r\n\t\t// 2) enable some logs\r\n\t\t// 3) etc.\r\n\t\tdatatable.debug = false;\r\n\r\n\t\tdatatable.API = {\r\n\t\t\trecord: null,\r\n\t\t\tvalue: null,\r\n\t\t\tparams: null,\r\n\t\t};\r\n\r\n\t\tvar Plugin = {\r\n\t\t\t/********************\r\n\t\t\t ** PRIVATE METHODS\r\n\t\t\t ********************/\r\n\t\t\tisInit: false,\r\n\t\t\tcellOffset: 110,\r\n\t\t\ticonOffset: 15,\r\n\t\t\tstateId: 'meta',\r\n\t\t\tajaxParams: {},\r\n\t\t\tpagingObject: {},\r\n\r\n\t\t\tinit: function(options) {\r\n\t\t\t\tvar isHtmlTable = false;\r\n\t\t\t\t// data source option empty is normal table\r\n\t\t\t\tif (options.data.source === null) {\r\n\t\t\t\t\tPlugin.extractTable();\r\n\t\t\t\t\tisHtmlTable = true;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tPlugin.setupBaseDOM.call();\r\n\t\t\t\tPlugin.setupDOM(datatable.table);\r\n\r\n\t\t\t\t// on event after layout had done setup, show datatable\r\n\t\t\t\t$(datatable).on(pfx + 'datatable-on-layout-updated', Plugin.afterRender);\r\n\r\n\t\t\t\tif (datatable.debug) {\r\n\t\t\t\t\tPlugin.stateRemove(Plugin.stateId);\r\n\t\t\t\t}\r\n\r\n\t\t\t\t/*var es = Plugin.stateGet(Plugin.stateId);\r\n\t\t\t\tvar eq = {};\r\n\t\t\t\tif (es && es.hasOwnProperty('query')) {\r\n\t\t\t\t\teq = es.query;\r\n\t\t\t\t}\r\n\t\t\t\tPlugin.setDataSourceQuery(Object.assign({}, eq, Plugin.getOption('data.source.read.params.query')));*/\r\n\r\n\t\t\t\t// set custom query from options\r\n\t\t\t\tPlugin.setDataSourceQuery(Plugin.getOption('data.source.read.params.query'));\r\n\r\n\t\t\t\t// initialize extensions\r\n\t\t\t\t$.each(Plugin.getOption('extensions'), function(extName, extOptions) {\r\n\t\t\t\t\tif (typeof $.fn[pluginName][extName] === 'function') {\r\n\t\t\t\t\t\tif (typeof extOptions !== 'object') {\r\n\t\t\t\t\t\t\textOptions = $.extend({}, extOptions);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tnew $.fn[pluginName][extName](datatable, extOptions);\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\t\tPlugin.spinnerCallback(true);\r\n\t\t\t\t// get data\r\n\t\t\t\tif (options.data.type === 'remote' || options.data.type === 'local') {\r\n\t\t\t\t\tif (options.data.saveState === false) {\r\n\t\t\t\t\t\tPlugin.stateRemove(Plugin.stateId);\r\n\t\t\t\t\t}\r\n\t\t\t\t\t// get data for local datatable and local table\r\n\t\t\t\t\tif (options.data.type === 'local' && typeof options.data.source === 'object') {\r\n\t\t\t\t\t\tdatatable.dataSet = datatable.originalDataSet = Plugin.dataMapCallback(options.data.source);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tPlugin.dataRender();\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// if html table, remove and setup a new header\r\n\t\t\t\tif (isHtmlTable) {\r\n\t\t\t\t\t$(datatable.tableHead).find('tr').remove();\r\n\t\t\t\t\t$(datatable.tableFoot).find('tr').remove();\r\n\t\t\t\t}\r\n\r\n\t\t\t\tPlugin.setHeadTitle();\r\n\t\t\t\tif (Plugin.getOption('layout.footer')) {\r\n\t\t\t\t\tPlugin.setHeadTitle(datatable.tableFoot);\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// hide header\r\n\t\t\t\tif (typeof options.layout.header !== 'undefined' &&\r\n\t\t\t\t\toptions.layout.header === false) {\r\n\t\t\t\t\t$(datatable.table).find('thead').remove();\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// hide footer\r\n\t\t\t\tif (typeof options.layout.footer !== 'undefined' &&\r\n\t\t\t\t\toptions.layout.footer === false) {\r\n\t\t\t\t\t$(datatable.table).find('tfoot').remove();\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// for normal and local data type, run layoutUpdate\r\n\t\t\t\tif (options.data.type === null ||\r\n\t\t\t\t\toptions.data.type === 'local') {\r\n\t\t\t\t\tPlugin.setupCellField.call();\r\n\t\t\t\t\tPlugin.setupTemplateCell.call();\r\n\r\n\t\t\t\t\t// setup nested datatable, if option enabled\r\n\t\t\t\t\tPlugin.setupSubDatatable.call();\r\n\r\n\t\t\t\t\t// setup extra system column properties\r\n\t\t\t\t\tPlugin.setupSystemColumn.call();\r\n\t\t\t\t\tPlugin.redraw();\r\n\t\t\t\t}\r\n\r\n\t\t\t\tvar width;\r\n\t\t\t\tvar initialWidth = false;\r\n\t\t\t\t$(window).resize(function() {\r\n\t\t\t\t\t// issue: URL Bar Resizing on mobile, https://developers.google.com/web/updates/2016/12/url-bar-resizing\r\n\t\t\t\t\t// trigger datatable resize on width change only\r\n\t\t\t\t\tif ($(this).width() !== width) {\r\n\t\t\t\t\t\twidth = $(this).width();\r\n\t\t\t\t\t\tPlugin.fullRender();\r\n\t\t\t\t\t}\r\n\t\t\t\t\t// get initial width\r\n\t\t\t\t\tif (!initialWidth) {\r\n\t\t\t\t\t\twidth = $(this).width();\r\n\t\t\t\t\t\tinitialWidth = true;\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\t\t$(datatable).height('');\r\n\r\n\t\t\t\tvar prevKeyword = '';\r\n\t\t\t\t$(Plugin.getOption('search.input')).on('keyup', function(e) {\r\n\t\t\t\t\tif (Plugin.getOption('search.onEnter') && e.which !== 13) return;\r\n\t\t\t\t\tvar keyword = $(this).val();\r\n\t\t\t\t\t// prevent multiple search request on every button keyup\r\n\t\t\t\t\tif (prevKeyword !== keyword) {\r\n\t\t\t\t\t\tPlugin.search(keyword);\r\n\t\t\t\t\t\tprevKeyword = keyword;\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\t\treturn datatable;\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * Extract static HTML table content into datasource\r\n\t\t\t */\r\n\t\t\textractTable: function() {\r\n\t\t\t\tvar columns = [];\r\n\t\t\t\tvar headers = $(datatable).find('tr:first-child th').get().map(function(cell, i) {\r\n\t\t\t\t\tvar field = $(cell).data('field');\r\n\t\t\t\t\tvar title = $(cell).data('title');\r\n\t\t\t\t\tif (typeof field === 'undefined') {\r\n\t\t\t\t\t\tfield = $(cell).text().trim();\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (typeof title === 'undefined') {\r\n\t\t\t\t\t\ttitle = $(cell).text().trim();\r\n\t\t\t\t\t}\r\n\t\t\t\t\tvar column = {field: field, title: title};\r\n\t\t\t\t\tfor (var ii in options.columns) {\r\n\t\t\t\t\t\tif (options.columns[ii].field === field) {\r\n\t\t\t\t\t\t\tcolumn = $.extend(true, {}, options.columns[ii], column);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tcolumns.push(column);\r\n\t\t\t\t\treturn field;\r\n\t\t\t\t});\r\n\t\t\t\t// auto create columns config\r\n\t\t\t\toptions.columns = columns;\r\n\r\n\t\t\t\tvar rowProp = [];\r\n\t\t\t\tvar source = [];\r\n\r\n\t\t\t\t$(datatable).find('tr').each(function() {\r\n\t\t\t\t\tif ($(this).find('td').length) {\r\n\t\t\t\t\t\trowProp.push($(this).prop('attributes'));\r\n\t\t\t\t\t}\r\n\t\t\t\t\tvar td = {};\r\n\t\t\t\t\t$(this).find('td').each(function(i, cell) {\r\n\t\t\t\t\t\ttd[headers[i]] = cell.innerHTML.trim();\r\n\t\t\t\t\t});\r\n\t\t\t\t\tif (!util.isEmpty(td)) {\r\n\t\t\t\t\t\tsource.push(td);\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\t\toptions.data.attr.rowProps = rowProp;\r\n\t\t\t\toptions.data.source = source;\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * One time layout update on init\r\n\t\t\t */\r\n\t\t\tlayoutUpdate: function() {\r\n\t\t\t\t// setup nested datatable, if option enabled\r\n\t\t\t\tPlugin.setupSubDatatable.call();\r\n\r\n\t\t\t\t// setup extra system column properties\r\n\t\t\t\tPlugin.setupSystemColumn.call();\r\n\r\n\t\t\t\t// setup cell hover event\r\n\t\t\t\tPlugin.setupHover.call();\r\n\r\n\t\t\t\tif (typeof options.detail === 'undefined'\r\n\t\t\t\t\t// temporary disable lock column in subtable\r\n\t\t\t\t\t&& Plugin.getDepth() === 1) {\r\n\t\t\t\t\t// lock columns handler\r\n\t\t\t\t\tPlugin.lockTable.call();\r\n\t\t\t\t}\r\n\r\n\t\t\t\tPlugin.resetScroll();\r\n\r\n\t\t\t\t// check if not is a locked column\r\n\t\t\t\tif (!Plugin.isLocked()) {\r\n\t\t\t\t\tPlugin.redraw.call();\r\n\t\t\t\t\t// check if its not a subtable and has autoHide option enabled\r\n\t\t\t\t\tif (!Plugin.isSubtable() && Plugin.getOption('rows.autoHide') === true) {\r\n\t\t\t\t\t\tPlugin.autoHide();\r\n\t\t\t\t\t}\r\n\t\t\t\t\t// reset row\r\n\t\t\t\t\t$(datatable.table).find('.' + pfx + 'datatable-row').css('height', '');\r\n\t\t\t\t}\r\n\r\n\t\t\t\tPlugin.columnHide.call();\r\n\r\n\t\t\t\tPlugin.rowEvenOdd.call();\r\n\r\n\t\t\t\tPlugin.sorting.call();\r\n\r\n\t\t\t\tPlugin.scrollbar.call();\r\n\r\n\t\t\t\tif (!Plugin.isInit) {\r\n\t\t\t\t\t// run once dropdown inside datatable\r\n\t\t\t\t\tPlugin.dropdownFix();\r\n\t\t\t\t\t$(datatable).trigger(pfx + 'datatable-on-init', {table: $(datatable.wrap).attr('id'), options: options});\r\n\t\t\t\t\tPlugin.isInit = true;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t$(datatable).trigger(pfx + 'datatable-on-layout-updated', {table: $(datatable.wrap).attr('id')});\r\n\t\t\t},\r\n\r\n\t\t\tdropdownFix: function() {\r\n\t\t\t\tvar dropdownMenu;\r\n\t\t\t\t$('body').on('show.bs.dropdown', '.' + pfx + 'datatable .' + pfx + 'datatable-body', function(e) {\r\n\t\t\t\t\tdropdownMenu = $(e.target).find('.dropdown-menu');\r\n\t\t\t\t\t$('body').append(dropdownMenu.detach());\r\n\t\t\t\t\tdropdownMenu.css('display', 'block');\r\n\t\t\t\t\tdropdownMenu.position({\r\n\t\t\t\t\t\t'my': 'right top',\r\n\t\t\t\t\t\t'at': 'right bottom',\r\n\t\t\t\t\t\t'of': $(e.relatedTarget),\r\n\t\t\t\t\t});\r\n\t\t\t\t\t// if datatable is inside modal\r\n\t\t\t\t\tif (datatable.closest('.modal').length) {\r\n\t\t\t\t\t\t// increase dropdown z-index\r\n\t\t\t\t\t\tdropdownMenu.css('z-index', '2000');\r\n\t\t\t\t\t}\r\n\t\t\t\t}).on('hide.bs.dropdown', '.' + pfx + 'datatable .' + pfx + 'datatable-body', function(e) {\r\n\t\t\t\t\t$(e.target).append(dropdownMenu.detach());\r\n\t\t\t\t\tdropdownMenu.hide();\r\n\t\t\t\t});\r\n\r\n\t\t\t\t// remove dropdown if window resize\r\n\t\t\t\t$(window).on('resize', function(e) {\r\n\t\t\t\t\tif (typeof dropdownMenu !== 'undefined') {\r\n\t\t\t\t\t\tdropdownMenu.hide();\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t},\r\n\r\n\t\t\tlockTable: function() {\r\n\t\t\t\tvar lock = {\r\n\t\t\t\t\tlockEnabled: false,\r\n\t\t\t\t\tinit: function() {\r\n\t\t\t\t\t\t// check if table should be locked columns\r\n\t\t\t\t\t\tlock.lockEnabled = Plugin.lockEnabledColumns();\r\n\t\t\t\t\t\tif (lock.lockEnabled.left.length === 0 &&\r\n\t\t\t\t\t\t\tlock.lockEnabled.right.length === 0) {\r\n\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tlock.enable();\r\n\t\t\t\t\t},\r\n\t\t\t\t\tenable: function() {\r\n\t\t\t\t\t\tvar enableLock = function(tablePart) {\r\n\t\t\t\t\t\t\t// check if already has lock column\r\n\t\t\t\t\t\t\tif ($(tablePart).find('.' + pfx + 'datatable-lock').length > 0) {\r\n\t\t\t\t\t\t\t\tPlugin.log('Locked container already exist in: ', tablePart);\r\n\t\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t// check if no rows exists\r\n\t\t\t\t\t\t\tif ($(tablePart).find('.' + pfx + 'datatable-row').length === 0) {\r\n\t\t\t\t\t\t\t\tPlugin.log('No row exist in: ', tablePart);\r\n\t\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t// locked div container\r\n\t\t\t\t\t\t\tvar lockLeft = $('
').addClass(pfx + 'datatable-lock ' + pfx + 'datatable-lock-left');\r\n\t\t\t\t\t\t\tvar lockScroll = $('
').addClass(pfx + 'datatable-lock ' + pfx + 'datatable-lock-scroll');\r\n\t\t\t\t\t\t\tvar lockRight = $('
').addClass(pfx + 'datatable-lock ' + pfx + 'datatable-lock-right');\r\n\r\n\t\t\t\t\t\t\t$(tablePart).find('.' + pfx + 'datatable-row').each(function() {\r\n\t\t\t\t\t\t\t\t// create new row for lock columns and pass the data\r\n\t\t\t\t\t\t\t\tvar rowLeft = $('').addClass(pfx + 'datatable-row').data('obj', $(this).data('obj')).appendTo(lockLeft);\r\n\t\t\t\t\t\t\t\tvar rowScroll = $('').addClass(pfx + 'datatable-row').data('obj', $(this).data('obj')).appendTo(lockScroll);\r\n\t\t\t\t\t\t\t\tvar rowRight = $('').addClass(pfx + 'datatable-row').data('obj', $(this).data('obj')).appendTo(lockRight);\r\n\t\t\t\t\t\t\t\t$(this).find('.' + pfx + 'datatable-cell').each(function() {\r\n\t\t\t\t\t\t\t\t\tvar locked = $(this).data('locked');\r\n\t\t\t\t\t\t\t\t\tif (typeof locked !== 'undefined') {\r\n\t\t\t\t\t\t\t\t\t\tif (typeof locked.left !== 'undefined' || locked === true) {\r\n\t\t\t\t\t\t\t\t\t\t\t// default locked to left\r\n\t\t\t\t\t\t\t\t\t\t\t$(this).appendTo(rowLeft);\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\tif (typeof locked.right !== 'undefined') {\r\n\t\t\t\t\t\t\t\t\t\t\t$(this).appendTo(rowRight);\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\t\t\t$(this).appendTo(rowScroll);\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t\t// remove old row\r\n\t\t\t\t\t\t\t\t$(this).remove();\r\n\t\t\t\t\t\t\t});\r\n\r\n\t\t\t\t\t\t\tif (lock.lockEnabled.left.length > 0) {\r\n\t\t\t\t\t\t\t\t$(datatable.wrap).addClass(pfx + 'datatable-lock');\r\n\t\t\t\t\t\t\t\t$(lockLeft).appendTo(tablePart);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tif (lock.lockEnabled.left.length > 0 || lock.lockEnabled.right.length > 0) {\r\n\t\t\t\t\t\t\t\t$(lockScroll).appendTo(tablePart);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tif (lock.lockEnabled.right.length > 0) {\r\n\t\t\t\t\t\t\t\t$(datatable.wrap).addClass(pfx + 'datatable-lock');\r\n\t\t\t\t\t\t\t\t$(lockRight).appendTo(tablePart);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t};\r\n\r\n\t\t\t\t\t\t$(datatable.table).find('thead,tbody,tfoot').each(function() {\r\n\t\t\t\t\t\t\tvar tablePart = this;\r\n\t\t\t\t\t\t\tif ($(this).find('.' + pfx + 'datatable-lock').length === 0) {\r\n\t\t\t\t\t\t\t\t$(this).ready(function() {\r\n\t\t\t\t\t\t\t\t\tenableLock(tablePart);\r\n\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t},\r\n\t\t\t\t};\r\n\t\t\t\tlock.init();\r\n\t\t\t\treturn lock;\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * Render everything for resize\r\n\t\t\t */\r\n\t\t\tfullRender: function() {\r\n\t\t\t\t$(datatable.tableHead).empty();\r\n\t\t\t\tPlugin.setHeadTitle();\r\n\t\t\t\tif (Plugin.getOption('layout.footer')) {\r\n\t\t\t\t\t$(datatable.tableFoot).empty();\r\n\t\t\t\t\tPlugin.setHeadTitle(datatable.tableFoot);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tPlugin.spinnerCallback(true);\r\n\t\t\t\t$(datatable.wrap).removeClass(pfx + 'datatable-loaded');\r\n\r\n\t\t\t\tPlugin.insertData();\r\n\t\t\t},\r\n\r\n\t\t\tlockEnabledColumns: function() {\r\n\t\t\t\tvar screen = $(window).width();\r\n\t\t\t\tvar columns = options.columns;\r\n\t\t\t\tvar enabled = {left: [], right: []};\r\n\t\t\t\t$.each(columns, function(i, column) {\r\n\t\t\t\t\tif (typeof column.locked !== 'undefined') {\r\n\t\t\t\t\t\tif (typeof column.locked.left !== 'undefined') {\r\n\t\t\t\t\t\t\tif (util.getBreakpoint(column.locked.left) <= screen) {\r\n\t\t\t\t\t\t\t\tenabled['left'].push(column.locked.left);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tif (typeof column.locked.right !== 'undefined') {\r\n\t\t\t\t\t\t\tif (util.getBreakpoint(column.locked.right) <= screen) {\r\n\t\t\t\t\t\t\t\tenabled['right'].push(column.locked.right);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t\treturn enabled;\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * After render event, called by \"datatable-on-layout-updated\"\r\n\t\t\t * @param e\r\n\t\t\t * @param args\r\n\t\t\t */\r\n\t\t\tafterRender: function(e, args) {\r\n\t\t\t\t$(datatable).ready(function() {\r\n\t\t\t\t\t// redraw locked columns table\r\n\t\t\t\t\tif (Plugin.isLocked()) {\r\n\t\t\t\t\t\tPlugin.redraw();\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t$(datatable.tableBody).css('visibility', '');\r\n\t\t\t\t\t$(datatable.wrap).addClass(pfx + 'datatable-loaded');\r\n\r\n\t\t\t\t\tPlugin.spinnerCallback(false);\r\n\t\t\t\t});\r\n\t\t\t},\r\n\r\n\t\t\thoverTimer: 0,\r\n\t\t\tisScrolling: false,\r\n\t\t\tsetupHover: function() {\r\n\t\t\t\t$(window).scroll(function(e) {\r\n\t\t\t\t\t// stop hover when scrolling\r\n\t\t\t\t\tclearTimeout(Plugin.hoverTimer);\r\n\t\t\t\t\tPlugin.isScrolling = true;\r\n\t\t\t\t});\r\n\r\n\t\t\t\t$(datatable.tableBody).find('.' + pfx + 'datatable-cell').off('mouseenter', 'mouseleave').on('mouseenter', function() {\r\n\t\t\t\t\t// reset scroll timer to hover class\r\n\t\t\t\t\tPlugin.hoverTimer = setTimeout(function() {\r\n\t\t\t\t\t\tPlugin.isScrolling = false;\r\n\t\t\t\t\t}, 200);\r\n\t\t\t\t\tif (Plugin.isScrolling) return;\r\n\r\n\t\t\t\t\t// normal table\r\n\t\t\t\t\tvar row = $(this).closest('.' + pfx + 'datatable-row').addClass(pfx + 'datatable-row-hover');\r\n\t\t\t\t\tvar index = $(row).index() + 1;\r\n\r\n\t\t\t\t\t// lock table\r\n\t\t\t\t\t$(row).closest('.' + pfx + 'datatable-lock').parent().find('.' + pfx + 'datatable-row:nth-child(' + index + ')').addClass(pfx + 'datatable-row-hover');\r\n\t\t\t\t}).on('mouseleave', function() {\r\n\t\t\t\t\t// normal table\r\n\t\t\t\t\tvar row = $(this).closest('.' + pfx + 'datatable-row').removeClass(pfx + 'datatable-row-hover');\r\n\t\t\t\t\tvar index = $(row).index() + 1;\r\n\r\n\t\t\t\t\t// look table\r\n\t\t\t\t\t$(row).closest('.' + pfx + 'datatable-lock').parent().find('.' + pfx + 'datatable-row:nth-child(' + index + ')').removeClass(pfx + 'datatable-row-hover');\r\n\t\t\t\t});\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * Adjust width of locked table containers by resize handler\r\n\t\t\t * @returns {number}\r\n\t\t\t */\r\n\t\t\tadjustLockContainer: function() {\r\n\t\t\t\tif (!Plugin.isLocked()) return 0;\r\n\r\n\t\t\t\t// refer to head dimension\r\n\t\t\t\tvar containerWidth = $(datatable.tableHead).width();\r\n\t\t\t\tvar lockLeft = $(datatable.tableHead).find('.' + pfx + 'datatable-lock-left').width();\r\n\t\t\t\tvar lockRight = $(datatable.tableHead).find('.' + pfx + 'datatable-lock-right').width();\r\n\r\n\t\t\t\tif (typeof lockLeft === 'undefined') lockLeft = 0;\r\n\t\t\t\tif (typeof lockRight === 'undefined') lockRight = 0;\r\n\r\n\t\t\t\tvar lockScroll = Math.floor(containerWidth - lockLeft - lockRight);\r\n\t\t\t\t$(datatable.table).find('.' + pfx + 'datatable-lock-scroll').css('width', lockScroll);\r\n\r\n\t\t\t\treturn lockScroll;\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * todo; not in use\r\n\t\t\t */\r\n\t\t\tdragResize: function() {\r\n\t\t\t\tvar pressed = false;\r\n\t\t\t\tvar start = undefined;\r\n\t\t\t\tvar startX, startWidth;\r\n\t\t\t\t$(datatable.tableHead).find('.' + pfx + 'datatable-cell').mousedown(function(e) {\r\n\t\t\t\t\tstart = $(this);\r\n\t\t\t\t\tpressed = true;\r\n\t\t\t\t\tstartX = e.pageX;\r\n\t\t\t\t\tstartWidth = $(this).width();\r\n\t\t\t\t\t$(start).addClass(pfx + 'datatable-cell-resizing');\r\n\r\n\t\t\t\t}).mousemove(function(e) {\r\n\t\t\t\t\tif (pressed) {\r\n\t\t\t\t\t\tvar i = $(start).index();\r\n\t\t\t\t\t\tvar tableBody = $(datatable.tableBody);\r\n\t\t\t\t\t\tvar ifLocked = $(start).closest('.' + pfx + 'datatable-lock');\r\n\r\n\t\t\t\t\t\tif (ifLocked) {\r\n\t\t\t\t\t\t\tvar lockedIndex = $(ifLocked).index();\r\n\t\t\t\t\t\t\ttableBody = $(datatable.tableBody).find('.' + pfx + 'datatable-lock').eq(lockedIndex);\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t$(tableBody).find('.' + pfx + 'datatable-row').each(function(tri, tr) {\r\n\t\t\t\t\t\t\t$(tr).find('.' + pfx + 'datatable-cell').eq(i).width(startWidth + (e.pageX - startX)).children().width(startWidth + (e.pageX - startX));\r\n\t\t\t\t\t\t});\r\n\r\n\t\t\t\t\t\t$(start).children().css('width', startWidth + (e.pageX - startX));\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}).mouseup(function() {\r\n\t\t\t\t\t$(start).removeClass(pfx + 'datatable-cell-resizing');\r\n\t\t\t\t\tpressed = false;\r\n\t\t\t\t});\r\n\r\n\t\t\t\t$(document).mouseup(function() {\r\n\t\t\t\t\t$(start).removeClass(pfx + 'datatable-cell-resizing');\r\n\t\t\t\t\tpressed = false;\r\n\t\t\t\t});\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * To prepare placeholder for table before content is loading\r\n\t\t\t */\r\n\t\t\tinitHeight: function() {\r\n\t\t\t\tif (options.layout.height && options.layout.scroll) {\r\n\t\t\t\t\tvar theadHeight = $(datatable.tableHead).find('.' + pfx + 'datatable-row').outerHeight();\r\n\t\t\t\t\tvar tfootHeight = $(datatable.tableFoot).find('.' + pfx + 'datatable-row').outerHeight();\r\n\t\t\t\t\tvar bodyHeight = options.layout.height;\r\n\t\t\t\t\tif (theadHeight > 0) {\r\n\t\t\t\t\t\tbodyHeight -= theadHeight;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (tfootHeight > 0) {\r\n\t\t\t\t\t\tbodyHeight -= tfootHeight;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// scrollbar offset\r\n\t\t\t\t\tbodyHeight -= 2;\r\n\r\n\t\t\t\t\t$(datatable.tableBody).css('max-height', Math.floor(parseFloat(bodyHeight)));\r\n\r\n\t\t\t\t\t// set scrollable area fixed height\r\n\t\t\t\t\t// $(datatable.tableBody).find('.' + pfx + 'datatable-lock-scroll').css('height', Math.floor(parseFloat(bodyHeight)));\r\n\t\t\t\t}\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * Setup base DOM (table, thead, tbody, tfoot) and create if not\r\n\t\t\t * exist.\r\n\t\t\t */\r\n\t\t\tsetupBaseDOM: function() {\r\n\t\t\t\t// keep original state before datatable initialize\r\n\t\t\t\tdatatable.initialDatatable = $(datatable).clone();\r\n\r\n\t\t\t\t// main element\r\n\t\t\t\tif ($(datatable).prop('tagName') === 'TABLE') {\r\n\t\t\t\t\t// if main init element is , wrap with div\r\n\t\t\t\t\tdatatable.table = $(datatable).removeClass(pfx + 'datatable').addClass(pfx + 'datatable-table');\r\n\t\t\t\t\tif ($(datatable.table).parents('.' + pfx + 'datatable').length === 0) {\r\n\t\t\t\t\t\tdatatable.table.wrap($('
').addClass(pfx + 'datatable').addClass(pfx + 'datatable-' + options.layout.theme));\r\n\t\t\t\t\t\tdatatable.wrap = $(datatable.table).parent();\r\n\t\t\t\t\t}\r\n\t\t\t\t} else {\r\n\t\t\t\t\t// create table\r\n\t\t\t\t\tdatatable.wrap = $(datatable).addClass(pfx + 'datatable').addClass(pfx + 'datatable-' + options.layout.theme);\r\n\t\t\t\t\tdatatable.table = $('
').addClass(pfx + 'datatable-table').appendTo(datatable);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (typeof options.layout.class !== 'undefined') {\r\n\t\t\t\t\t$(datatable.wrap).addClass(options.layout.class);\r\n\t\t\t\t}\r\n\r\n\t\t\t\t$(datatable.table).removeClass(pfx + 'datatable-destroyed').css('display', 'block');\r\n\r\n\t\t\t\t// force disable save state\r\n\t\t\t\tif (typeof $(datatable).attr('id') === 'undefined') {\r\n\t\t\t\t\tPlugin.setOption('data.saveState', false);\r\n\t\t\t\t\t$(datatable.table).attr('id', util.getUniqueID(pfx + 'datatable-'));\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// predefine table height\r\n\t\t\t\tif (Plugin.getOption('layout.minHeight'))\r\n\t\t\t\t\t$(datatable.table).css('min-height', Plugin.getOption('layout.minHeight'));\r\n\r\n\t\t\t\tif (Plugin.getOption('layout.height'))\r\n\t\t\t\t\t$(datatable.table).css('max-height', Plugin.getOption('layout.height'));\r\n\r\n\t\t\t\t// for normal table load\r\n\t\t\t\tif (options.data.type === null) {\r\n\t\t\t\t\t$(datatable.table).css('width', '').css('display', '');\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// create table head element\r\n\t\t\t\tdatatable.tableHead = $(datatable.table).find('thead');\r\n\t\t\t\tif ($(datatable.tableHead).length === 0) {\r\n\t\t\t\t\tdatatable.tableHead = $('').prependTo(datatable.table);\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// create table head element\r\n\t\t\t\tdatatable.tableBody = $(datatable.table).find('tbody');\r\n\t\t\t\tif ($(datatable.tableBody).length === 0) {\r\n\t\t\t\t\tdatatable.tableBody = $('').appendTo(datatable.table);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (typeof options.layout.footer !== 'undefined' &&\r\n\t\t\t\t\toptions.layout.footer) {\r\n\t\t\t\t\t// create table foot element\r\n\t\t\t\t\tdatatable.tableFoot = $(datatable.table).find('tfoot');\r\n\t\t\t\t\tif ($(datatable.tableFoot).length === 0) {\r\n\t\t\t\t\t\tdatatable.tableFoot = $('').appendTo(datatable.table);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * Set column data before table manipulation.\r\n\t\t\t */\r\n\t\t\tsetupCellField: function(tableParts) {\r\n\t\t\t\tif (typeof tableParts === 'undefined') tableParts = $(datatable.table).children();\r\n\t\t\t\tvar columns = options.columns;\r\n\t\t\t\t$.each(tableParts, function(part, tablePart) {\r\n\t\t\t\t\t$(tablePart).find('.' + pfx + 'datatable-row').each(function(tri, tr) {\r\n\t\t\t\t\t\t// prepare data\r\n\t\t\t\t\t\t$(tr).find('.' + pfx + 'datatable-cell').each(function(tdi, td) {\r\n\t\t\t\t\t\t\tif (typeof columns[tdi] !== 'undefined') {\r\n\t\t\t\t\t\t\t\t$(td).data(columns[tdi]);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t});\r\n\t\t\t\t});\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * Set column template callback\r\n\t\t\t * @param tablePart\r\n\t\t\t */\r\n\t\t\tsetupTemplateCell: function(tablePart) {\r\n\t\t\t\tif (typeof tablePart === 'undefined') tablePart = datatable.tableBody;\r\n\t\t\t\tvar columns = options.columns;\r\n\t\t\t\t$(tablePart).find('.' + pfx + 'datatable-row').each(function(tri, tr) {\r\n\t\t\t\t\t// row data object, if any\r\n\t\t\t\t\tvar obj = $(tr).data('obj');\r\n\t\t\t\t\tif (typeof obj === 'undefined') {\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// @deprecated in v5.0.6\r\n\t\t\t\t\t// obj['getIndex'] = function() {\r\n\t\t\t\t\t// \treturn tri;\r\n\t\t\t\t\t// };\r\n\t\t\t\t\t// @deprecated in v5.0.6\r\n\t\t\t\t\t// obj['getDatatable'] = function() {\r\n\t\t\t\t\t// \treturn datatable;\r\n\t\t\t\t\t// };\r\n\r\n\t\t\t\t\t// @deprecated in v5.0.6\r\n\t\t\t\t\tvar rowCallback = Plugin.getOption('rows.callback');\r\n\t\t\t\t\tif (typeof rowCallback === 'function') {\r\n\t\t\t\t\t\trowCallback($(tr), obj, tri);\r\n\t\t\t\t\t}\r\n\t\t\t\t\t// before template row callback\r\n\t\t\t\t\tvar beforeTemplate = Plugin.getOption('rows.beforeTemplate');\r\n\t\t\t\t\tif (typeof beforeTemplate === 'function') {\r\n\t\t\t\t\t\tbeforeTemplate($(tr), obj, tri);\r\n\t\t\t\t\t}\r\n\t\t\t\t\t// if data object is undefined, collect from table\r\n\t\t\t\t\tif (typeof obj === 'undefined') {\r\n\t\t\t\t\t\tobj = {};\r\n\t\t\t\t\t\t$(tr).find('.' + pfx + 'datatable-cell').each(function(tdi, td) {\r\n\t\t\t\t\t\t\t// get column settings by field\r\n\t\t\t\t\t\t\tvar column = $.grep(columns, function(n, i) {\r\n\t\t\t\t\t\t\t\treturn $(td).data('field') === n.field;\r\n\t\t\t\t\t\t\t})[0];\r\n\t\t\t\t\t\t\tif (typeof column !== 'undefined') {\r\n\t\t\t\t\t\t\t\tobj[column['field']] = $(td).text();\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t$(tr).find('.' + pfx + 'datatable-cell').each(function(tdi, td) {\r\n\t\t\t\t\t\t// get column settings by field\r\n\t\t\t\t\t\tvar column = $.grep(columns, function(n, i) {\r\n\t\t\t\t\t\t\treturn $(td).data('field') === n.field;\r\n\t\t\t\t\t\t})[0];\r\n\t\t\t\t\t\tif (typeof column !== 'undefined') {\r\n\t\t\t\t\t\t\t// column template\r\n\t\t\t\t\t\t\tif (typeof column.template !== 'undefined') {\r\n\t\t\t\t\t\t\t\tvar finalValue = '';\r\n\t\t\t\t\t\t\t\t// template string\r\n\t\t\t\t\t\t\t\tif (typeof column.template === 'string') {\r\n\t\t\t\t\t\t\t\t\tfinalValue = Plugin.dataPlaceholder(column.template, obj);\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t// template callback function\r\n\t\t\t\t\t\t\t\tif (typeof column.template === 'function') {\r\n\t\t\t\t\t\t\t\t\tfinalValue = column.template(obj, tri, datatable);\r\n\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\t// sanitize using DOMPurify if installed\r\n\t\t\t\t\t\t\t\tif (typeof DOMPurify !== 'undefined') {\r\n\t\t\t\t\t\t\t\t\tfinalValue = DOMPurify.sanitize(finalValue);\r\n\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\tvar span = document.createElement('span');\r\n\t\t\t\t\t\t\t\tspan.innerHTML = finalValue;\r\n\r\n\t\t\t\t\t\t\t\t// insert to cell, wrap with span\r\n\t\t\t\t\t\t\t\t$(td).html(span);\r\n\r\n\t\t\t\t\t\t\t\t// set span overflow\r\n\t\t\t\t\t\t\t\tif (typeof column.overflow !== 'undefined') {\r\n\t\t\t\t\t\t\t\t\t$(span).css('overflow', column.overflow);\r\n\t\t\t\t\t\t\t\t\t$(span).css('position', 'relative');\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\t// after template row callback\r\n\t\t\t\t\tvar afterTemplate = Plugin.getOption('rows.afterTemplate');\r\n\t\t\t\t\tif (typeof afterTemplate === 'function') {\r\n\t\t\t\t\t\tafterTemplate($(tr), obj, tri);\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * Setup extra system column properties\r\n\t\t\t * Note: selector checkbox, subtable toggle\r\n\t\t\t */\r\n\t\t\tsetupSystemColumn: function() {\r\n\t\t\t\tdatatable.dataSet = datatable.dataSet || [];\r\n\t\t\t\t// no records available\r\n\t\t\t\tif (datatable.dataSet.length === 0) return;\r\n\r\n\t\t\t\tvar columns = options.columns;\r\n\t\t\t\t$(datatable.tableBody).find('.' + pfx + 'datatable-row').each(function(tri, tr) {\r\n\t\t\t\t\t$(tr).find('.' + pfx + 'datatable-cell').each(function(tdi, td) {\r\n\t\t\t\t\t\t// get column settings by field\r\n\t\t\t\t\t\tvar column = $.grep(columns, function(n, i) {\r\n\t\t\t\t\t\t\treturn $(td).data('field') === n.field;\r\n\t\t\t\t\t\t})[0];\r\n\t\t\t\t\t\tif (typeof column !== 'undefined') {\r\n\t\t\t\t\t\t\tvar value = $(td).text();\r\n\r\n\t\t\t\t\t\t\t// enable column selector\r\n\t\t\t\t\t\t\tif (typeof column.selector !== 'undefined' && column.selector !== false) {\r\n\t\t\t\t\t\t\t\t// check if checkbox exist\r\n\t\t\t\t\t\t\t\tif ($(td).find('.' + pfx + 'checkbox [type=\"checkbox\"]').length > 0) return;\r\n\r\n\t\t\t\t\t\t\t\t$(td).addClass(pfx + 'datatable-cell-check');\r\n\r\n\t\t\t\t\t\t\t\t// append checkbox\r\n\t\t\t\t\t\t\t\tvar chk = $(' as parent and add as child table\r\n\t\t\t\t\t\tsubTableRow = $('').\r\n\t\t\t\t\t\t\taddClass(pfx + 'datatable-row-subtable ' + pfx + 'datatable-row-loading').\r\n\t\t\t\t\t\t\thide().\r\n\t\t\t\t\t\t\tappend($('').addClass(pfx + 'datatable-row-detail').insertAfter(row);\r\n\t\t\t\t\t\tvar detailRowTd = $('
').addClass(pfx + 'datatable-subtable').attr('colspan', Plugin.getTotalColumns()));\r\n\t\t\t\t\t\t$(parentRow).after(subTableRow);\r\n\t\t\t\t\t\t// add class to even row\r\n\t\t\t\t\t\tif ($(parentRow).hasClass(pfx + 'datatable-row-even')) {\r\n\t\t\t\t\t\t\t$(subTableRow).addClass(pfx + 'datatable-row-subtable-even');\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t$(subTableRow).toggle();\r\n\r\n\t\t\t\t\tvar subTable = $(subTableRow).find('.' + pfx + 'datatable-subtable');\r\n\r\n\t\t\t\t\t// get id from first column of parent row\r\n\t\t\t\t\tvar primaryKey = $(this).closest('[data-field]:first-child').find('.' + pfx + 'datatable-toggle-subtable').data('value');\r\n\r\n\t\t\t\t\tvar icon = $(this).find('i').removeAttr('class');\r\n\r\n\t\t\t\t\t// prevent duplicate datatable init\r\n\t\t\t\t\tif ($(parentRow).hasClass(pfx + 'datatable-row-subtable-expanded')) {\r\n\t\t\t\t\t\t$(icon).addClass(Plugin.getOption('layout.icons.rowDetail.collapse'));\r\n\t\t\t\t\t\t// remove expand class from parent row\r\n\t\t\t\t\t\t$(parentRow).removeClass(pfx + 'datatable-row-subtable-expanded');\r\n\t\t\t\t\t\t// trigger event on collapse\r\n\t\t\t\t\t\t$(datatable).trigger(pfx + 'datatable-on-collapse-subtable', [parentRow]);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\t// expand and run callback function\r\n\t\t\t\t\t\t$(icon).addClass(Plugin.getOption('layout.icons.rowDetail.expand'));\r\n\t\t\t\t\t\t// add expand class to parent row\r\n\t\t\t\t\t\t$(parentRow).addClass(pfx + 'datatable-row-subtable-expanded');\r\n\t\t\t\t\t\t// trigger event on expand\r\n\t\t\t\t\t\t$(datatable).trigger(pfx + 'datatable-on-expand-subtable', [parentRow]);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// prevent duplicate datatable init\r\n\t\t\t\t\tif ($(subTable).find('.' + pfx + 'datatable').length === 0) {\r\n\t\t\t\t\t\t// get data by primary id\r\n\t\t\t\t\t\t$.map(datatable.dataSet, function(n, i) {\r\n\t\t\t\t\t\t\t// primary id must be at the first column, otherwise e.data will be undefined\r\n\t\t\t\t\t\t\tif (primaryKey === n[options.columns[0].field]) {\r\n\t\t\t\t\t\t\t\te.data = n;\r\n\t\t\t\t\t\t\t\treturn true;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t\t});\r\n\r\n\t\t\t\t\t\t// deprecated in v5.0.6\r\n\t\t\t\t\t\te.detailCell = subTable;\r\n\r\n\t\t\t\t\t\te.parentRow = parentRow;\r\n\t\t\t\t\t\te.subTable = subTable;\r\n\r\n\t\t\t\t\t\t// run callback with event\r\n\t\t\t\t\t\tsubTableCallback(e);\r\n\r\n\t\t\t\t\t\t$(subTable).children('.' + pfx + 'datatable').on(pfx + 'datatable-on-init', function(e) {\r\n\t\t\t\t\t\t\t$(subTableRow).removeClass(pfx + 'datatable-row-loading');\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t\tif (Plugin.getOption('data.type') === 'local') {\r\n\t\t\t\t\t\t\t$(subTableRow).removeClass(pfx + 'datatable-row-loading');\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t};\r\n\r\n\t\t\t\tvar columns = options.columns;\r\n\t\t\t\t$(datatable.tableBody).find('.' + pfx + 'datatable-row').each(function(tri, tr) {\r\n\t\t\t\t\t$(tr).find('.' + pfx + 'datatable-cell').each(function(tdi, td) {\r\n\t\t\t\t\t\t// get column settings by field\r\n\t\t\t\t\t\tvar column = $.grep(columns, function(n, i) {\r\n\t\t\t\t\t\t\treturn $(td).data('field') === n.field;\r\n\t\t\t\t\t\t})[0];\r\n\t\t\t\t\t\tif (typeof column !== 'undefined') {\r\n\t\t\t\t\t\t\tvar value = $(td).text();\r\n\t\t\t\t\t\t\t// enable column subtable toggle\r\n\t\t\t\t\t\t\tif (typeof column.subtable !== 'undefined' && column.subtable) {\r\n\t\t\t\t\t\t\t\t// check if subtable toggle exist\r\n\t\t\t\t\t\t\t\tif ($(td).find('.' + pfx + 'datatable-toggle-subtable').length > 0) return;\r\n\t\t\t\t\t\t\t\t// append subtable toggle\r\n\t\t\t\t\t\t\t\t$(td).\r\n\t\t\t\t\t\t\t\t\thtml($('').\r\n\t\t\t\t\t\t\t\t\t\taddClass(pfx + 'datatable-toggle-subtable').\r\n\t\t\t\t\t\t\t\t\t\tattr('href', '#').\r\n\t\t\t\t\t\t\t\t\t\tattr('data-value', value).\r\n\t\t\t\t\t\t\t\t\t\tattr('title', Plugin.getOption('detail.title')).\r\n\t\t\t\t\t\t\t\t\t\ton('click', toggleSubTable).\r\n\t\t\t\t\t\t\t\t\t\tappend($('').css('width', $(td).data('width')).addClass(Plugin.getOption('layout.icons.rowDetail.collapse'))));\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t\t});\r\n\r\n\t\t\t\t// $(datatable.tableHead).find('.'+pfx+'-datatable-row').first()\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * Datasource mapping callback\r\n\t\t\t */\r\n\t\t\tdataMapCallback: function(raw) {\r\n\t\t\t\t// static dataset array\r\n\t\t\t\tvar dataSet = raw;\r\n\t\t\t\t// dataset mapping callback\r\n\t\t\t\tif (typeof Plugin.getOption('data.source.read.map') === 'function') {\r\n\t\t\t\t\treturn Plugin.getOption('data.source.read.map')(raw);\r\n\t\t\t\t} else {\r\n\t\t\t\t\t// default data mapping fallback\r\n\t\t\t\t\tif (typeof raw !== 'undefined' && typeof raw.data !== 'undefined') {\r\n\t\t\t\t\t\tdataSet = raw.data;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn dataSet;\r\n\t\t\t},\r\n\r\n\t\t\tisSpinning: false,\r\n\t\t\t/**\r\n\t\t\t * BlockUI spinner callback\r\n\t\t\t * @param block\r\n\t\t\t * @param target\r\n\t\t\t */\r\n\t\t\tspinnerCallback: function(block, target) {\r\n\t\t\t\tif (typeof target === 'undefined') target = datatable;\r\n\t\t\t\t// get spinner options\r\n\t\t\t\tvar spinnerOptions = Plugin.getOption('layout.spinner');\r\n\t\t\t\t// spinner is disabled\r\n\t\t\t\tif (typeof spinnerOptions === 'undefined' || !spinnerOptions) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\tif (block) {\r\n\t\t\t\t\tif (!Plugin.isSpinning) {\r\n\t\t\t\t\t\tif (typeof spinnerOptions.message !== 'undefined' && spinnerOptions.message === true) {\r\n\t\t\t\t\t\t\t// use default spinner message from translation\r\n\t\t\t\t\t\t\tspinnerOptions.message = Plugin.getOption('translate.records.processing');\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tPlugin.isSpinning = true;\r\n\t\t\t\t\t\tif (typeof app !== 'undefined') {\r\n\t\t\t\t\t\t\tapp.block(target, spinnerOptions);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t} else {\r\n\t\t\t\t\tPlugin.isSpinning = false;\r\n\t\t\t\t\tif (typeof app !== 'undefined') {\r\n\t\t\t\t\t\tapp.unblock(target);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * Default sort callback function\r\n\t\t\t * @param data\r\n\t\t\t * @param sort\r\n\t\t\t * @param column\r\n\t\t\t * @returns {*|Array.|{sort, field}|{asc, desc}}\r\n\t\t\t */\r\n\t\t\tsortCallback: function(data, sort, column) {\r\n\t\t\t\tvar type = column['type'] || 'string';\r\n\t\t\t\tvar format = column['format'] || '';\r\n\t\t\t\tvar field = column['field'];\r\n\r\n\t\t\t\treturn $(data).sort(function(a, b) {\r\n\t\t\t\t\tvar aField = a[field];\r\n\t\t\t\t\tvar bField = b[field];\r\n\r\n\t\t\t\t\tswitch (type) {\r\n\t\t\t\t\t\tcase 'date':\r\n\t\t\t\t\t\t\tif (typeof moment === 'undefined') {\r\n\t\t\t\t\t\t\t\tthrow new Error('Moment.js is required.');\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tvar diff = moment(aField, format).diff(moment(bField, format));\r\n\t\t\t\t\t\t\tif (sort === 'asc') {\r\n\t\t\t\t\t\t\t\treturn diff > 0 ? 1 : diff < 0 ? -1 : 0;\r\n\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\treturn diff < 0 ? 1 : diff > 0 ? -1 : 0;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\tcase 'number':\r\n\t\t\t\t\t\t\tif (isNaN(parseFloat(aField)) && aField != null) {\r\n\t\t\t\t\t\t\t\taField = Number(aField.replace(/[^0-9\\.-]+/g, ''));\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tif (isNaN(parseFloat(bField)) && bField != null) {\r\n\t\t\t\t\t\t\t\tbField = Number(bField.replace(/[^0-9\\.-]+/g, ''));\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\taField = parseFloat(aField);\r\n\t\t\t\t\t\t\tbField = parseFloat(bField);\r\n\t\t\t\t\t\t\tif (sort === 'asc') {\r\n\t\t\t\t\t\t\t\treturn aField > bField ? 1 : aField < bField ? -1 : 0;\r\n\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\treturn aField < bField ? 1 : aField > bField ? -1 : 0;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\tcase 'html':\r\n\t\t\t\t\t\t\treturn $(data).sort(function(a, b) {\r\n\t\t\t\t\t\t\t\t// get the text only from html\r\n\t\t\t\t\t\t\t\taField = $(a[field]).text();\r\n\t\t\t\t\t\t\t\tbField = $(b[field]).text();\r\n\t\t\t\t\t\t\t\t// sort\r\n\t\t\t\t\t\t\t\tif (sort === 'asc') {\r\n\t\t\t\t\t\t\t\t\treturn aField > bField ? 1 : aField < bField ? -1 : 0;\r\n\t\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\t\treturn aField < bField ? 1 : aField > bField ? -1 : 0;\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\tcase 'string':\r\n\t\t\t\t\t\tdefault:\r\n\t\t\t\t\t\t\tif (sort === 'asc') {\r\n\t\t\t\t\t\t\t\treturn aField > bField ? 1 : aField < bField ? -1 : 0;\r\n\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\treturn aField < bField ? 1 : aField > bField ? -1 : 0;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * Custom debug log\r\n\t\t\t * @param text\r\n\t\t\t * @param obj\r\n\t\t\t */\r\n\t\t\tlog: function(text, obj) {\r\n\t\t\t\tif (typeof obj === 'undefined') obj = '';\r\n\t\t\t\tif (datatable.debug) {\r\n\t\t\t\t\tconsole.log(text, obj);\r\n\t\t\t\t}\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * Auto hide columnds overflow in row\r\n\t\t\t */\r\n\t\t\tautoHide: function() {\r\n\t\t\t\tvar hiddenExist = false;\r\n\t\t\t\t// force hide enabled\r\n\t\t\t\tvar hidDefault = $(datatable.table).find('[data-autohide-enabled]');\r\n\t\t\t\tif (hidDefault.length) {\r\n\t\t\t\t\thiddenExist = true;\r\n\t\t\t\t\thidDefault.hide();\r\n\t\t\t\t}\r\n\r\n\t\t\t\tvar toggleHiddenColumns = function(e) {\r\n\t\t\t\t\te.preventDefault();\r\n\r\n\t\t\t\t\tvar row = $(this).closest('.' + pfx + 'datatable-row');\r\n\t\t\t\t\tvar detailRow = $(row).next();\r\n\r\n\t\t\t\t\tif (!$(detailRow).hasClass(pfx + 'datatable-row-detail')) {\r\n\t\t\t\t\t\t$(this).find('i').removeClass(Plugin.getOption('layout.icons.rowDetail.collapse')).addClass(Plugin.getOption('layout.icons.rowDetail.expand'));\r\n\r\n\t\t\t\t\t\tvar hiddenCells = $(row).find('.' + pfx + 'datatable-cell:hidden');\r\n\t\t\t\t\t\tvar clonedCells = hiddenCells.clone().show();\r\n\r\n\t\t\t\t\t\tdetailRow = $('
').addClass(pfx + 'datatable-detail').attr('colspan', Plugin.getTotalColumns()).appendTo(detailRow);\r\n\r\n\t\t\t\t\t\tvar detailSubTable = $('');\r\n\t\t\t\t\t\t$(clonedCells).each(function() {\r\n\t\t\t\t\t\t\tvar field = $(this).data('field');\r\n\t\t\t\t\t\t\tvar column = $.grep(options.columns, function(n, i) {\r\n\t\t\t\t\t\t\t\treturn field === n.field;\r\n\t\t\t\t\t\t\t})[0];\r\n\t\t\t\t\t\t\tif (typeof column === 'undefined' || column.visible !== false) {\r\n\t\t\t\t\t\t\t\t$(detailSubTable).\r\n\t\t\t\t\t\t\t\t\t\tappend($('').\r\n\t\t\t\t\t\t\t\t\t\t\t\tappend($('').append($('').append(column.title))).\r\n\t\t\t\t\t\t\t\t\t\t\t\tappend(this));\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t\t$(detailRowTd).append(detailSubTable);\r\n\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\t$(this).find('i').removeClass(Plugin.getOption('layout.icons.rowDetail.expand')).addClass(Plugin.getOption('layout.icons.rowDetail.collapse'));\r\n\t\t\t\t\t\t$(detailRow).remove();\r\n\t\t\t\t\t}\r\n\t\t\t\t};\r\n\r\n\t\t\t\tsetTimeout(function () {\r\n\t\t\t\t\t$(datatable.table).find('.' + pfx + 'datatable-cell').show();\r\n\t\t\t\t\t$(datatable.tableBody).each(function() {\r\n\t\t\t\t\t\tvar recursive = 0;\r\n\t\t\t\t\t\twhile ($(this)[0].offsetWidth < $(this)[0].scrollWidth && recursive < options.columns.length) {\r\n\t\t\t\t\t\t\t$(datatable.table).find('.' + pfx + 'datatable-row').each(function(i) {\r\n\t\t\t\t\t\t\t\tvar cell = $(this).find('.' + pfx + 'datatable-cell:not(:hidden):not([data-autohide-disabled])').last();\r\n\t\t\t\t\t\t\t\t$(cell).hide();\r\n\t\t\t\t\t\t\t\thiddenExist = true;\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\trecursive++;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\tif (hiddenExist) {\r\n\t\t\t\t\t\t// toggle show hidden columns\r\n\t\t\t\t\t\t$(datatable.tableBody).find('.' + pfx + 'datatable-row').each(function() {\r\n\t\t\t\t\t\t\t// if no toggle yet\r\n\t\t\t\t\t\t\tif($(this).find('.' + pfx + 'datatable-toggle-detail').length === 0) {\r\n\t\t\t\t\t\t\t\t// add toggle\r\n\t\t\t\t\t\t\t\t$(this).prepend($('');\r\n\t\t\t\t\t\t\t\t$(datatable.tableFoot).\r\n\t\t\t\t\t\t\t\t\tfind('.' + pfx + 'datatable-row').\r\n\t\t\t\t\t\t\t\t\tfirst().\r\n\t\t\t\t\t\t\t\t\tprepend('');\r\n\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\t$(datatable.tableHead).find('.' + pfx + 'datatable-toggle-detail').find('span');\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\t\tPlugin.adjustCellsWidth.call();\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * To enable auto columns features for remote data source\r\n\t\t\t */\r\n\t\t\tsetAutoColumns: function() {\r\n\t\t\t\tif (Plugin.getOption('data.autoColumns')) {\r\n\t\t\t\t\t$.each(datatable.dataSet[0], function(k, v) {\r\n\t\t\t\t\t\tvar found = $.grep(options.columns, function(n, i) {\r\n\t\t\t\t\t\t\treturn k === n.field;\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t\tif (found.length === 0) {\r\n\t\t\t\t\t\t\toptions.columns.push({field: k, title: k});\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t\t\t$(datatable.tableHead).find('.' + pfx + 'datatable-row').remove();\r\n\t\t\t\t\tPlugin.setHeadTitle();\r\n\t\t\t\t\tif (Plugin.getOption('layout.footer')) {\r\n\t\t\t\t\t\t$(datatable.tableFoot).find('.' + pfx + 'datatable-row').remove();\r\n\t\t\t\t\t\tPlugin.setHeadTitle(datatable.tableFoot);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t},\r\n\r\n\t\t\t/********************\r\n\t\t\t ** HELPERS\r\n\t\t\t ********************/\r\n\r\n\t\t\t/**\r\n\t\t\t * Check if table is a locked colums table\r\n\t\t\t */\r\n\t\t\tisLocked: function() {\r\n\t\t\t\tvar isLocked = Plugin.lockEnabledColumns();\r\n\t\t\t\treturn isLocked.left.length > 0 || isLocked.right.length > 0;\r\n\t\t\t},\r\n\r\n\t\t\tisSubtable: function() {\r\n\t\t\t\treturn util.hasClass(datatable.wrap[0], pfx + 'datatable-subtable') || false;\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * Get total extra space of an element for width calculation,\r\n\t\t\t * including padding, margin, border\r\n\t\t\t * @param element\r\n\t\t\t * @returns {number}\r\n\t\t\t */\r\n\t\t\tgetExtraSpace: function(element) {\r\n\t\t\t\tvar padding = parseInt($(element).css('paddingRight')) +\r\n\t\t\t\t\tparseInt($(element).css('paddingLeft'));\r\n\t\t\t\tvar margin = parseInt($(element).css('marginRight')) +\r\n\t\t\t\t\tparseInt($(element).css('marginLeft'));\r\n\t\t\t\tvar border = Math.ceil(\r\n\t\t\t\t\t$(element).css('border-right-width').replace('px', ''));\r\n\t\t\t\treturn padding + margin + border;\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * Insert data of array into {{ }} template placeholder\r\n\t\t\t * @param template\r\n\t\t\t * @param data\r\n\t\t\t * @returns {*}\r\n\t\t\t */\r\n\t\t\tdataPlaceholder: function(template, data) {\r\n\t\t\t\tvar result = template;\r\n\t\t\t\t$.each(data, function(key, val) {\r\n\t\t\t\t\tresult = result.replace('{{' + key + '}}', val);\r\n\t\t\t\t});\r\n\t\t\t\treturn result;\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * Get table unique ID\r\n\t\t\t * Note: table unique change each time refreshed\r\n\t\t\t * @param suffix\r\n\t\t\t * @returns {*}\r\n\t\t\t */\r\n\t\t\tgetTableId: function(suffix) {\r\n\t\t\t\tif (typeof suffix === 'undefined') suffix = '';\r\n\t\t\t\tvar id = $(datatable).attr('id');\r\n\t\t\t\tif (typeof id === 'undefined') {\r\n\t\t\t\t\tid = $(datatable).attr('class').split(' ')[0];\r\n\t\t\t\t}\r\n\t\t\t\treturn id + suffix;\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * Get table prefix with depth number\r\n\t\t\t */\r\n\t\t\tgetTablePrefix: function(suffix) {\r\n\t\t\t\tif (typeof suffix !== 'undefined') suffix = '-' + suffix;\r\n\t\t\t\treturn Plugin.getTableId() + '-' + Plugin.getDepth() + suffix;\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * Get current table depth of sub table\r\n\t\t\t * @returns {number}\r\n\t\t\t */\r\n\t\t\tgetDepth: function() {\r\n\t\t\t\tvar depth = 0;\r\n\t\t\t\tvar table = datatable.table;\r\n\t\t\t\tdo {\r\n\t\t\t\t\ttable = $(table).parents('.' + pfx + 'datatable-table');\r\n\t\t\t\t\tdepth++;\r\n\t\t\t\t} while ($(table).length > 0);\r\n\t\t\t\treturn depth;\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * Keep state item\r\n\t\t\t * @param key\r\n\t\t\t * @param value\r\n\t\t\t */\r\n\t\t\tstateKeep: function(key, value) {\r\n\t\t\t\tkey = Plugin.getTablePrefix(key);\r\n\t\t\t\tif (Plugin.getOption('data.saveState') === false) return;\r\n\t\t\t\tif (localStorage) {\r\n\t\t\t\t\tlocalStorage.setItem(key, JSON.stringify(value));\r\n\t\t\t\t}\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * Get state item\r\n\t\t\t * @param key\r\n\t\t\t * @param defValue\r\n\t\t\t */\r\n\t\t\tstateGet: function(key, defValue) {\r\n\t\t\t\tkey = Plugin.getTablePrefix(key);\r\n\t\t\t\tif (Plugin.getOption('data.saveState') === false) return;\r\n\t\t\t\tvar value = null;\r\n\t\t\t\tif (localStorage) {\r\n\t\t\t\t\tvalue = localStorage.getItem(key);\r\n\t\t\t\t}\r\n\t\t\t\tif (typeof value !== 'undefined' && value !== null) {\r\n\t\t\t\t\treturn JSON.parse(value);\r\n\t\t\t\t}\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * Update data in state without clear existing\r\n\t\t\t * @param key\r\n\t\t\t * @param value\r\n\t\t\t */\r\n\t\t\tstateUpdate: function(key, value) {\r\n\t\t\t\tvar ori = Plugin.stateGet(key);\r\n\t\t\t\tif (typeof ori === 'undefined' || ori === null) ori = {};\r\n\t\t\t\tPlugin.stateKeep(key, $.extend({}, ori, value));\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * Remove state item\r\n\t\t\t * @param key\r\n\t\t\t */\r\n\t\t\tstateRemove: function(key) {\r\n\t\t\t\tkey = Plugin.getTablePrefix(key);\r\n\t\t\t\tif (localStorage) {\r\n\t\t\t\t\tlocalStorage.removeItem(key);\r\n\t\t\t\t}\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * Get total columns.\r\n\t\t\t */\r\n\t\t\tgetTotalColumns: function(tablePart) {\r\n\t\t\t\tif (typeof tablePart === 'undefined') tablePart = datatable.tableBody;\r\n\t\t\t\treturn $(tablePart).find('.' + pfx + 'datatable-row').first().find('.' + pfx + 'datatable-cell').length;\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * Get table row. Useful to get row when current table is in lock\r\n\t\t\t * mode. Can be used for both lock and normal table mode. By\r\n\t\t\t * default, returning result will be in a list of \r\n\t\t\t\tvar result = $(tablePart).find('.' + pfx + 'datatable-row:not(.' + pfx + 'datatable-row-detail):nth-child(' + row + ')');\r\n\t\t\t\tif (tdOnly) {\r\n\t\t\t\t\t// get list of
').\r\n\t\t\t\t\t\t\t\t\t\taddClass(pfx + 'datatable-cell ' + pfx + 'datatable-toggle-detail').\r\n\t\t\t\t\t\t\t\t\t\tappend($('').\r\n\t\t\t\t\t\t\t\t\t\t\taddClass(pfx + 'datatable-toggle-detail').\r\n\t\t\t\t\t\t\t\t\t\t\tattr('href', '').\r\n\t\t\t\t\t\t\t\t\t\t\ton('click', toggleHiddenColumns).\r\n\t\t\t\t\t\t\t\t\t\t\tappend('')));\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t// check if subtable toggle exist\r\n\t\t\t\t\t\t\tif ($(datatable.tableHead).find('.' + pfx + 'datatable-toggle-detail').length === 0) {\r\n\t\t\t\t\t\t\t\t// add empty column to the header and footer\r\n\t\t\t\t\t\t\t\t$(datatable.tableHead).\r\n\t\t\t\t\t\t\t\t\tfind('.' + pfx + 'datatable-row').\r\n\t\t\t\t\t\t\t\t\tfirst().\r\n\t\t\t\t\t\t\t\t\tprepend('.\r\n\t\t\t * @param tablePart\r\n\t\t\t * @param row 1-based index\r\n\t\t\t * @param tdOnly Optional. Default true\r\n\t\t\t * @returns {*}\r\n\t\t\t */\r\n\t\t\tgetOneRow: function(tablePart, row, tdOnly) {\r\n\t\t\t\tif (typeof tdOnly === 'undefined') tdOnly = true;\r\n\t\t\t\t// get list of
or \r\n\t\t\t\t\tresult = result.find('.' + pfx + 'datatable-cell');\r\n\t\t\t\t}\r\n\t\t\t\treturn result;\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * Sort table row at HTML level by column index.\r\n\t\t\t * todo; Not in use.\r\n\t\t\t * @param header Header sort clicked\r\n\t\t\t * @param sort asc|desc. Optional. Default asc\r\n\t\t\t * @param int Boolean. Optional. Comparison value parse to integer.\r\n\t\t\t * Default false\r\n\t\t\t */\r\n\t\t\tsortColumn: function(header, sort, int) {\r\n\t\t\t\tif (typeof sort === 'undefined') sort = 'asc'; // desc\r\n\t\t\t\tif (typeof int === 'undefined') int = false;\r\n\r\n\t\t\t\tvar column = $(header).index();\r\n\t\t\t\tvar rows = $(datatable.tableBody).find('.' + pfx + 'datatable-row');\r\n\t\t\t\tvar hIndex = $(header).closest('.' + pfx + 'datatable-lock').index();\r\n\t\t\t\tif (hIndex !== -1) {\r\n\t\t\t\t\trows = $(datatable.tableBody).find('.' + pfx + 'datatable-lock:nth-child(' + (hIndex + 1) + ')').find('.' + pfx + 'datatable-row');\r\n\t\t\t\t}\r\n\r\n\t\t\t\tvar container = $(rows).parent();\r\n\t\t\t\t$(rows).sort(function(a, b) {\r\n\t\t\t\t\tvar tda = $(a).find('td:nth-child(' + column + ')').text();\r\n\t\t\t\t\tvar tdb = $(b).find('td:nth-child(' + column + ')').text();\r\n\r\n\t\t\t\t\tif (int) {\r\n\t\t\t\t\t\t// useful for integer type sorting\r\n\t\t\t\t\t\ttda = parseInt(tda);\r\n\t\t\t\t\t\ttdb = parseInt(tdb);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (sort === 'asc') {\r\n\t\t\t\t\t\treturn tda > tdb ? 1 : tda < tdb ? -1 : 0;\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\treturn tda < tdb ? 1 : tda > tdb ? -1 : 0;\r\n\t\t\t\t\t}\r\n\t\t\t\t}).appendTo(container);\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * Perform sort remote and local\r\n\t\t\t */\r\n\t\t\tsorting: function() {\r\n\t\t\t\tvar sortObj = {\r\n\t\t\t\t\tinit: function() {\r\n\t\t\t\t\t\tif (options.sortable) {\r\n\t\t\t\t\t\t\t$(datatable.tableHead).\r\n\t\t\t\t\t\t\t\tfind('.' + pfx + 'datatable-cell:not(.' + pfx + 'datatable-cell-check)').\r\n\t\t\t\t\t\t\t\taddClass(pfx + 'datatable-cell-sort').\r\n\t\t\t\t\t\t\t\toff('click').\r\n\t\t\t\t\t\t\t\ton('click', sortObj.sortClick);\r\n\t\t\t\t\t\t\t// first init\r\n\t\t\t\t\t\t\tsortObj.setIcon();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t},\r\n\t\t\t\t\tsetIcon: function() {\r\n\t\t\t\t\t\tvar meta = Plugin.getDataSourceParam('sort');\r\n\t\t\t\t\t\tif ($.isEmptyObject(meta)) return;\r\n\r\n\t\t\t\t\t\tvar column = Plugin.getColumnByField(meta.field);\r\n\t\t\t\t\t\t// sort is disabled for this column\r\n\t\t\t\t\t\tif (typeof column === 'undefined') return;\r\n\t\t\t\t\t\tif (typeof column.sortable !== 'undefined' && column.sortable === false) return;\r\n\t\t\t\t\t\tif (typeof column.selector !== 'undefined' && column.selector === true) return;\r\n\r\n\t\t\t\t\t\t// sort icon beside column header\r\n\t\t\t\t\t\tvar td = $(datatable.tableHead).find('.' + pfx + 'datatable-cell[data-field=\"' + meta.field + '\"]').attr('data-sort', meta.sort);\r\n\t\t\t\t\t\tvar sorting = $(td).find('span');\r\n\t\t\t\t\t\tvar icon = $(sorting).find('i');\r\n\r\n\t\t\t\t\t\tvar icons = Plugin.getOption('layout.icons.sort');\r\n\t\t\t\t\t\t// update sort icon; desc & asc\r\n\t\t\t\t\t\tif ($(icon).length > 0) {\r\n\t\t\t\t\t\t\t$(icon).removeAttr('class').addClass(icons[meta.sort]);\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t$(sorting).append($('').addClass(icons[meta.sort]));\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t// set sorted class to header on init\r\n\t\t\t\t\t\t$(td).addClass(pfx + 'datatable-cell-sorted');\r\n\t\t\t\t\t},\r\n\t\t\t\t\tsortClick: function(e) {\r\n\t\t\t\t\t\tvar meta = Plugin.getDataSourceParam('sort');\r\n\t\t\t\t\t\tvar field = $(this).data('field');\r\n\t\t\t\t\t\tvar column = Plugin.getColumnByField(field);\r\n\t\t\t\t\t\t// sort is disabled for this column\r\n\t\t\t\t\t\tif (typeof column === 'undefined') return;\r\n\t\t\t\t\t\tif (typeof column.sortable !== 'undefined' && column.sortable === false) return;\r\n\t\t\t\t\t\tif (typeof column.selector !== 'undefined' && column.selector === true) return;\r\n\r\n\t\t\t\t\t\t// set sorted class to header\r\n\t\t\t\t\t\t$(datatable.tableHead).find('th').removeClass(pfx + 'datatable-cell-sorted');\r\n\t\t\t\t\t\tutil.addClass(this, pfx + 'datatable-cell-sorted');\r\n\r\n\t\t\t\t\t\t$(datatable.tableHead).find('.' + pfx + 'datatable-cell > span > i').remove();\r\n\r\n\t\t\t\t\t\tif (options.sortable) {\r\n\t\t\t\t\t\t\tPlugin.spinnerCallback(true);\r\n\r\n\t\t\t\t\t\t\tvar sort = 'desc';\r\n\t\t\t\t\t\t\tif (Plugin.getObject('field', meta) === field) {\r\n\t\t\t\t\t\t\t\tsort = Plugin.getObject('sort', meta);\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t// toggle sort\r\n\t\t\t\t\t\t\tsort = typeof sort === 'undefined' || sort === 'desc'\r\n\t\t\t\t\t\t\t\t? 'asc'\r\n\t\t\t\t\t\t\t\t: 'desc';\r\n\r\n\t\t\t\t\t\t\t// update field and sort params\r\n\t\t\t\t\t\t\tmeta = {field: field, sort: sort};\r\n\t\t\t\t\t\t\tPlugin.setDataSourceParam('sort', meta);\r\n\r\n\t\t\t\t\t\t\tsortObj.setIcon();\r\n\r\n\t\t\t\t\t\t\tsetTimeout(function() {\r\n\t\t\t\t\t\t\t\tPlugin.dataRender('sort');\r\n\t\t\t\t\t\t\t\t$(datatable).trigger(pfx + 'datatable-on-sort', meta);\r\n\t\t\t\t\t\t\t}, 300);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t},\r\n\t\t\t\t};\r\n\t\t\t\tsortObj.init();\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * Update JSON data list linked with sort, filter and pagination.\r\n\t\t\t * Call this method, before using dataSet variable.\r\n\t\t\t * @returns {*|null}\r\n\t\t\t */\r\n\t\t\tlocalDataUpdate: function() {\r\n\t\t\t\tvar params = Plugin.getDataSourceParam();\r\n\t\t\t\tif (typeof datatable.originalDataSet === 'undefined') {\r\n\t\t\t\t\tdatatable.originalDataSet = datatable.dataSet;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tvar field = Plugin.getObject('sort.field', params);\r\n\t\t\t\tvar sort = Plugin.getObject('sort.sort', params);\r\n\t\t\t\tvar column = Plugin.getColumnByField(field);\r\n\t\t\t\tif (typeof column !== 'undefined' && Plugin.getOption('data.serverSorting') !== true) {\r\n\t\t\t\t\tif (typeof column.sortCallback === 'function') {\r\n\t\t\t\t\t\tdatatable.dataSet = column.sortCallback(datatable.originalDataSet, sort, column);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tdatatable.dataSet = Plugin.sortCallback(datatable.originalDataSet, sort, column);\r\n\t\t\t\t\t}\r\n\t\t\t\t} else {\r\n\t\t\t\t\tdatatable.dataSet = datatable.originalDataSet;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// if server filter enable, don't pass local filter\r\n\t\t\t\tif (typeof params.query === 'object' && !Plugin.getOption('data.serverFiltering')) {\r\n\t\t\t\t\tparams.query = params.query || {};\r\n\r\n\t\t\t\t\tvar nestedSearch = function(obj) {\r\n\t\t\t\t\t\tfor (var field in obj) {\r\n\t\t\t\t\t\t\tif (!obj.hasOwnProperty(field)) continue;\r\n\t\t\t\t\t\t\tif (typeof obj[field] === 'string') {\r\n\t\t\t\t\t\t\t\tif (obj[field].toLowerCase() == search || obj[field].toLowerCase().indexOf(search) !== -1) {\r\n\t\t\t\t\t\t\t\t\treturn true;\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t} else if (typeof obj[field] === 'number') {\r\n\t\t\t\t\t\t\t\tif (obj[field] === search) {\r\n\t\t\t\t\t\t\t\t\treturn true;\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t} else if (typeof obj[field] === 'object') {\r\n\t\t\t\t\t\t\t\tif (nestedSearch(obj[field])) {\r\n\t\t\t\t\t\t\t\t\treturn true;\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t};\r\n\r\n\t\t\t\t\tvar search = $(Plugin.getOption('search.input')).val();\r\n\t\t\t\t\tif (typeof search !== 'undefined' && search !== '') {\r\n\t\t\t\t\t\tsearch = search.toLowerCase();\r\n\t\t\t\t\t\tdatatable.dataSet = $.grep(datatable.dataSet, nestedSearch);\r\n\t\t\t\t\t\t// remove generalSearch as we don't need this for next columns filter\r\n\t\t\t\t\t\tdelete params.query[Plugin.getGeneralSearchKey()];\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// remove empty element from array\r\n\t\t\t\t\t$.each(params.query, function(k, v) {\r\n\t\t\t\t\t\tif (v === '') {\r\n\t\t\t\t\t\t\tdelete params.query[k];\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\t// filter array by query\r\n\t\t\t\t\tdatatable.dataSet = Plugin.filterArray(datatable.dataSet, params.query);\r\n\r\n\t\t\t\t\t// reset array index\r\n\t\t\t\t\tdatatable.dataSet = datatable.dataSet.filter(function() {\r\n\t\t\t\t\t\treturn true;\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn datatable.dataSet;\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * Utility helper to filter array by object pair of {key:value}\r\n\t\t\t * @param list\r\n\t\t\t * @param args\r\n\t\t\t * @param operator\r\n\t\t\t * @returns {*}\r\n\t\t\t */\r\n\t\t\tfilterArray: function(list, args, operator) {\r\n\t\t\t\tif (typeof list !== 'object') {\r\n\t\t\t\t\treturn [];\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (typeof operator === 'undefined') operator = 'AND';\r\n\r\n\t\t\t\tif (typeof args !== 'object') {\r\n\t\t\t\t\treturn list;\r\n\t\t\t\t}\r\n\r\n\t\t\t\toperator = operator.toUpperCase();\r\n\r\n\t\t\t\tif ($.inArray(operator, ['AND', 'OR', 'NOT']) === -1) {\r\n\t\t\t\t\treturn [];\r\n\t\t\t\t}\r\n\r\n\t\t\t\tvar count = Object.keys(args).length;\r\n\t\t\t\tvar filtered = [];\r\n\r\n\t\t\t\t$.each(list, function(key, obj) {\r\n\t\t\t\t\tvar to_match = obj;\r\n\r\n\t\t\t\t\tvar matched = 0;\r\n\t\t\t\t\t$.each(args, function(m_key, m_value) {\r\n\t\t\t\t\t\tm_value = m_value instanceof Array ? m_value : [m_value];\r\n\t\t\t\t\t\tvar match_property = Plugin.getObject(m_key, to_match);\r\n\t\t\t\t\t\tif (typeof match_property !== 'undefined' && match_property) {\r\n\t\t\t\t\t\t\tvar lhs = match_property.toString().toLowerCase();\r\n\t\t\t\t\t\t\tm_value.forEach(function(item, index) {\r\n\t\t\t\t\t\t\t\tif (item.toString().toLowerCase() == lhs || lhs.indexOf(item.toString().toLowerCase()) !== -1) {\r\n\t\t\t\t\t\t\t\t\tmatched++;\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\tif (('AND' == operator && matched == count) ||\r\n\t\t\t\t\t\t('OR' == operator && matched > 0) ||\r\n\t\t\t\t\t\t('NOT' == operator && 0 == matched)) {\r\n\t\t\t\t\t\tfiltered[key] = obj;\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\t\tlist = filtered;\r\n\r\n\t\t\t\treturn list;\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * Reset lock column scroll to 0 when resize\r\n\t\t\t */\r\n\t\t\tresetScroll: function() {\r\n\t\t\t\tif (typeof options.detail === 'undefined' && Plugin.getDepth() === 1) {\r\n\t\t\t\t\t$(datatable.table).find('.' + pfx + 'datatable-row').css('left', 0);\r\n\t\t\t\t\t$(datatable.table).find('.' + pfx + 'datatable-lock').css('top', 0);\r\n\t\t\t\t\t$(datatable.tableBody).scrollTop(0);\r\n\t\t\t\t}\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * Get column options by field\r\n\t\t\t * @param field\r\n\t\t\t * @returns {boolean}\r\n\t\t\t */\r\n\t\t\tgetColumnByField: function(field) {\r\n\t\t\t\tif (typeof field === 'undefined') return;\r\n\t\t\t\tvar result;\r\n\t\t\t\t$.each(options.columns, function(i, column) {\r\n\t\t\t\t\tif (field === column.field) {\r\n\t\t\t\t\t\tresult = column;\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t\treturn result;\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * Get default sort column\r\n\t\t\t */\r\n\t\t\tgetDefaultSortColumn: function() {\r\n\t\t\t\tvar result;\r\n\t\t\t\t$.each(options.columns, function(i, column) {\r\n\t\t\t\t\tif (typeof column.sortable !== 'undefined'\r\n\t\t\t\t\t\t&& $.inArray(column.sortable, ['asc', 'desc']) !== -1) {\r\n\t\t\t\t\t\tresult = {sort: column.sortable, field: column.field};\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t\treturn result;\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * Helper to get element dimensions, when the element is hidden\r\n\t\t\t * @param element\r\n\t\t\t * @param includeMargin\r\n\t\t\t * @returns {{width: number, height: number, innerWidth: number,\r\n\t\t\t * innerHeight: number, outerWidth: number, outerHeight:\r\n\t\t\t * number}}\r\n\t\t\t */\r\n\t\t\tgetHiddenDimensions: function(element, includeMargin) {\r\n\t\t\t\tvar props = {\r\n\t\t\t\t\t\tposition: 'absolute',\r\n\t\t\t\t\t\tvisibility: 'hidden',\r\n\t\t\t\t\t\tdisplay: 'block',\r\n\t\t\t\t\t},\r\n\t\t\t\t\tdim = {\r\n\t\t\t\t\t\twidth: 0,\r\n\t\t\t\t\t\theight: 0,\r\n\t\t\t\t\t\tinnerWidth: 0,\r\n\t\t\t\t\t\tinnerHeight: 0,\r\n\t\t\t\t\t\touterWidth: 0,\r\n\t\t\t\t\t\touterHeight: 0,\r\n\t\t\t\t\t},\r\n\t\t\t\t\thiddenParents = $(element).parents().addBack().not(':visible');\r\n\t\t\t\tincludeMargin = (typeof includeMargin === 'boolean')\r\n\t\t\t\t\t? includeMargin\r\n\t\t\t\t\t: false;\r\n\r\n\t\t\t\tvar oldProps = [];\r\n\t\t\t\thiddenParents.each(function() {\r\n\t\t\t\t\tvar old = {};\r\n\r\n\t\t\t\t\tfor (var name in props) {\r\n\t\t\t\t\t\told[name] = this.style[name];\r\n\t\t\t\t\t\tthis.style[name] = props[name];\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\toldProps.push(old);\r\n\t\t\t\t});\r\n\r\n\t\t\t\tdim.width = $(element).width();\r\n\t\t\t\tdim.outerWidth = $(element).outerWidth(includeMargin);\r\n\t\t\t\tdim.innerWidth = $(element).innerWidth();\r\n\t\t\t\tdim.height = $(element).height();\r\n\t\t\t\tdim.innerHeight = $(element).innerHeight();\r\n\t\t\t\tdim.outerHeight = $(element).outerHeight(includeMargin);\r\n\r\n\t\t\t\thiddenParents.each(function(i) {\r\n\t\t\t\t\tvar old = oldProps[i];\r\n\t\t\t\t\tfor (var name in props) {\r\n\t\t\t\t\t\tthis.style[name] = old[name];\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\t\treturn dim;\r\n\t\t\t},\r\n\r\n\t\t\tgetGeneralSearchKey: function() {\r\n\t\t\t\tvar searchInput = $(Plugin.getOption('search.input'));\r\n\t\t\t\treturn Plugin.getOption('search.key') || $(searchInput).prop('name');\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * Get value by dot notation path string and to prevent undefined\r\n\t\t\t * errors\r\n\t\t\t * @param path String Dot notation path in string\r\n\t\t\t * @param object Object to iterate\r\n\t\t\t * @returns {*}\r\n\t\t\t */\r\n\t\t\tgetObject: function(path, object) {\r\n\t\t\t\treturn path.split('.').reduce(function(obj, i) {\r\n\t\t\t\t\treturn obj !== null && typeof obj[i] !== 'undefined' ? obj[i] : null;\r\n\t\t\t\t}, object);\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * Extend object\r\n\t\t\t * @param obj\r\n\t\t\t * @param path\r\n\t\t\t * @param value\r\n\t\t\t * @returns {*}\r\n\t\t\t */\r\n\t\t\textendObj: function(obj, path, value) {\r\n\t\t\t\tvar levels = path.split('.'),\r\n\t\t\t\t\ti = 0;\r\n\r\n\t\t\t\tfunction createLevel(child) {\r\n\t\t\t\t\tvar name = levels[i++];\r\n\t\t\t\t\tif (typeof child[name] !== 'undefined' && child[name] !== null) {\r\n\t\t\t\t\t\tif (typeof child[name] !== 'object' &&\r\n\t\t\t\t\t\t\ttypeof child[name] !== 'function') {\r\n\t\t\t\t\t\t\tchild[name] = {};\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tchild[name] = {};\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (i === levels.length) {\r\n\t\t\t\t\t\tchild[name] = value;\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tcreateLevel(child[name]);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tcreateLevel(obj);\r\n\t\t\t\treturn obj;\r\n\t\t\t},\r\n\r\n\t\t\trowEvenOdd: function() {\r\n\t\t\t\t// row even class\r\n\t\t\t\t$(datatable.tableBody).find('.' + pfx + 'datatable-row').removeClass(pfx + 'datatable-row-even');\r\n\t\t\t\tif ($(datatable.wrap).hasClass(pfx + 'datatable-subtable')) {\r\n\t\t\t\t\t$(datatable.tableBody).find('.' + pfx + 'datatable-row:not(.' + pfx + 'datatable-row-detail):even').addClass(pfx + 'datatable-row-even');\r\n\t\t\t\t} else {\r\n\t\t\t\t\t$(datatable.tableBody).find('.' + pfx + 'datatable-row:nth-child(even)').addClass(pfx + 'datatable-row-even');\r\n\t\t\t\t}\r\n\t\t\t},\r\n\r\n\t\t\t/********************\r\n\t\t\t ** PUBLIC API METHODS\r\n\t\t\t ********************/\r\n\r\n\t\t\t// delay timer\r\n\t\t\ttimer: 0,\r\n\r\n\t\t\t/**\r\n\t\t\t * Redraw datatable by recalculating its DOM elements, etc.\r\n\t\t\t * @returns {jQuery}\r\n\t\t\t */\r\n\t\t\tredraw: function() {\r\n\t\t\t\tPlugin.adjustCellsWidth.call();\r\n\t\t\t\tif (Plugin.isLocked()) {\r\n\t\t\t\t\t// fix hiding cell width issue\r\n\t\t\t\t\tPlugin.scrollbar();\r\n\t\t\t\t\tPlugin.resetScroll();\r\n\t\t\t\t\tPlugin.adjustCellsHeight.call();\r\n\t\t\t\t}\r\n\t\t\t\tPlugin.adjustLockContainer.call();\r\n\t\t\t\tPlugin.initHeight.call();\r\n\t\t\t\treturn datatable;\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * Shortcode to reload\r\n\t\t\t * @returns {jQuery}\r\n\t\t\t */\r\n\t\t\tload: function() {\r\n\t\t\t\tPlugin.reload();\r\n\t\t\t\treturn datatable;\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * Datasource reload\r\n\t\t\t * @returns {jQuery}\r\n\t\t\t */\r\n\t\t\treload: function() {\r\n\t\t\t\tvar delay = (function() {\r\n\t\t\t\t\treturn function(callback, ms) {\r\n\t\t\t\t\t\tclearTimeout(Plugin.timer);\r\n\t\t\t\t\t\tPlugin.timer = setTimeout(callback, ms);\r\n\t\t\t\t\t};\r\n\t\t\t\t})();\r\n\t\t\t\tdelay(function() {\r\n\t\t\t\t\t// local only. remote pagination will skip this block\r\n\t\t\t\t\tif (!options.data.serverFiltering) {\r\n\t\t\t\t\t\tPlugin.localDataUpdate();\r\n\t\t\t\t\t}\r\n\t\t\t\t\tPlugin.dataRender();\r\n\t\t\t\t\t$(datatable).trigger(pfx + 'datatable-on-reloaded');\r\n\t\t\t\t}, Plugin.getOption('search.delay'));\r\n\t\t\t\treturn datatable;\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * Get record by record ID\r\n\t\t\t * @param id\r\n\t\t\t * @returns {jQuery}\r\n\t\t\t */\r\n\t\t\tgetRecord: function(id) {\r\n\t\t\t\tif (typeof datatable.tableBody === 'undefined') datatable.tableBody = $(datatable.table).children('tbody');\r\n\t\t\t\t$(datatable.tableBody).find('.' + pfx + 'datatable-cell:first-child').each(function(i, cell) {\r\n\t\t\t\t\tif (id == $(cell).text()) {\r\n\t\t\t\t\t\tvar rowNumber = $(cell).closest('.' + pfx + 'datatable-row').index() + 1;\r\n\t\t\t\t\t\tdatatable.API.record = datatable.API.value = Plugin.getOneRow(datatable.tableBody, rowNumber);\r\n\t\t\t\t\t\treturn datatable;\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t\treturn datatable;\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * @deprecated in v5.0.6\r\n\t\t\t * Get column of current record ID\r\n\t\t\t * @param columnName\r\n\t\t\t * @returns {jQuery}\r\n\t\t\t */\r\n\t\t\tgetColumn: function(columnName) {\r\n\t\t\t\tPlugin.setSelectedRecords();\r\n\t\t\t\tdatatable.API.value = $(datatable.API.record).find('[data-field=\"' + columnName + '\"]');\r\n\t\t\t\treturn datatable;\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * Destroy datatable to original DOM state before datatable was\r\n\t\t\t * initialized\r\n\t\t\t * @returns {jQuery}\r\n\t\t\t */\r\n\t\t\tdestroy: function() {\r\n\t\t\t\t$(datatable).parent().find('.' + pfx + 'datatable-pager').remove();\r\n\t\t\t\tvar initialDatatable = $(datatable.initialDatatable).addClass(pfx + 'datatable-destroyed').show();\r\n\t\t\t\t$(datatable).replaceWith(initialDatatable);\r\n\t\t\t\tdatatable = initialDatatable;\r\n\t\t\t\t$(datatable).trigger(pfx + 'datatable-on-destroy');\r\n\t\t\t\tPlugin.isInit = false;\r\n\t\t\t\tinitialDatatable = null;\r\n\t\t\t\treturn initialDatatable;\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * Sort by column field\r\n\t\t\t * @param field\r\n\t\t\t * @param sort\r\n\t\t\t */\r\n\t\t\tsort: function(field, sort) {\r\n\t\t\t\t// toggle sort\r\n\t\t\t\tsort = typeof sort === 'undefined' ? 'asc' : sort;\r\n\r\n\t\t\t\tPlugin.spinnerCallback(true);\r\n\r\n\t\t\t\t// update field and sort params\r\n\t\t\t\tvar meta = {field: field, sort: sort};\r\n\t\t\t\tPlugin.setDataSourceParam('sort', meta);\r\n\r\n\t\t\t\tsetTimeout(function() {\r\n\t\t\t\t\tPlugin.dataRender('sort');\r\n\t\t\t\t\t$(datatable).trigger(pfx + 'datatable-on-sort', meta);\r\n\t\t\t\t\t$(datatable.tableHead).find('.' + pfx + 'datatable-cell > span > i').remove();\r\n\t\t\t\t}, 300);\r\n\r\n\t\t\t\treturn datatable;\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * @deprecated in v5.0.6\r\n\t\t\t * Get current selected column value\r\n\t\t\t * @returns {jQuery}\r\n\t\t\t */\r\n\t\t\tgetValue: function() {\r\n\t\t\t\treturn $(datatable.API.value).text();\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * Set checkbox active\r\n\t\t\t * @param cell JQuery selector or checkbox ID\r\n\t\t\t */\r\n\t\t\tsetActive: function(cell) {\r\n\t\t\t\tif (typeof cell === 'string') {\r\n\t\t\t\t\t// set by checkbox id\r\n\t\t\t\t\tcell = $(datatable.tableBody).find('.' + pfx + 'checkbox-single > [type=\"checkbox\"][value=\"' + cell + '\"]');\r\n\t\t\t\t}\r\n\r\n\t\t\t\t$(cell).prop('checked', true);\r\n\r\n\t\t\t\tvar ids = [];\r\n\t\t\t\t$(cell).each(function(i, td) {\r\n\t\t\t\t\t// normal table\r\n\t\t\t\t\tvar row = $(td).closest('tr').addClass(pfx + 'datatable-row-active');\r\n\r\n\t\t\t\t\tvar id = $(td).attr('value');\r\n\t\t\t\t\tif (typeof id !== 'undefined') {\r\n\t\t\t\t\t\tids.push(id);\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\t\t$(datatable).trigger(pfx + 'datatable-on-check', [ids]);\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * Set checkbox inactive\r\n\t\t\t * @param cell JQuery selector or checkbox ID\r\n\t\t\t */\r\n\t\t\tsetInactive: function(cell) {\r\n\t\t\t\tif (typeof cell === 'string') {\r\n\t\t\t\t\t// set by checkbox id\r\n\t\t\t\t\tcell = $(datatable.tableBody).find('.' + pfx + 'checkbox-single > [type=\"checkbox\"][value=\"' + cell + '\"]');\r\n\t\t\t\t}\r\n\r\n\t\t\t\t$(cell).prop('checked', false);\r\n\r\n\t\t\t\tvar ids = [];\r\n\t\t\t\t$(cell).each(function(i, td) {\r\n\t\t\t\t\t// normal table\r\n\t\t\t\t\tvar row = $(td).closest('tr').removeClass(pfx + 'datatable-row-active');\r\n\r\n\t\t\t\t\tvar id = $(td).attr('value');\r\n\t\t\t\t\tif (typeof id !== 'undefined') {\r\n\t\t\t\t\t\tids.push(id);\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\t\t$(datatable).trigger(pfx + 'datatable-on-uncheck', [ids]);\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * Set all checkboxes active or inactive\r\n\t\t\t * @param active\r\n\t\t\t */\r\n\t\t\tsetActiveAll: function(active) {\r\n\t\t\t\tvar checkboxes = $(datatable.table).\r\n\t\t\t\t\tfind('> tbody, > thead').\r\n\t\t\t\t\tfind('tr').not('.' + pfx + 'datatable-row-subtable').\r\n\t\t\t\t\tfind('.' + pfx + 'datatable-cell-check [type=\"checkbox\"]');\r\n\t\t\t\tif (active) {\r\n\t\t\t\t\tPlugin.setActive(checkboxes);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tPlugin.setInactive(checkboxes);\r\n\t\t\t\t}\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * @deprecated in v5.0.6\r\n\t\t\t * Get selected rows which are active\r\n\t\t\t * @returns {jQuery}\r\n\t\t\t */\r\n\t\t\tsetSelectedRecords: function() {\r\n\t\t\t\tdatatable.API.record = $(datatable.tableBody).find('.' + pfx + 'datatable-row-active');\r\n\t\t\t\treturn datatable;\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * Get selected records\r\n\t\t\t * @returns {null}\r\n\t\t\t */\r\n\t\t\tgetSelectedRecords: function() {\r\n\t\t\t\t// support old method\r\n\t\t\t\tPlugin.setSelectedRecords();\r\n\t\t\t\tdatatable.API.record = datatable.rows('.' + pfx + 'datatable-row-active').nodes();\r\n\t\t\t\treturn datatable.API.record;\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * Get options by dots notation path\r\n\t\t\t * @param path String Dot notation path in string\r\n\t\t\t * @returns {*}\r\n\t\t\t */\r\n\t\t\tgetOption: function(path) {\r\n\t\t\t\treturn Plugin.getObject(path, options);\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * Set global options nodes by dots notation path\r\n\t\t\t * @param path\r\n\t\t\t * @param object\r\n\t\t\t */\r\n\t\t\tsetOption: function(path, object) {\r\n\t\t\t\toptions = Plugin.extendObj(options, path, object);\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * Search filter for local & remote\r\n\t\t\t * @param value\r\n\t\t\t * @param columns. Optional list of columns to be filtered.\r\n\t\t\t */\r\n\t\t\tsearch: function(value, columns) {\r\n\t\t\t\tif (typeof columns !== 'undefined') columns = $.makeArray(columns);\r\n\t\t\t\tvar delay = (function() {\r\n\t\t\t\t\treturn function(callback, ms) {\r\n\t\t\t\t\t\tclearTimeout(Plugin.timer);\r\n\t\t\t\t\t\tPlugin.timer = setTimeout(callback, ms);\r\n\t\t\t\t\t};\r\n\t\t\t\t})();\r\n\r\n\t\t\t\tdelay(function() {\r\n\t\t\t\t\t// get query parameters\r\n\t\t\t\t\tvar query = Plugin.getDataSourceQuery();\r\n\r\n\t\t\t\t\t// search not by columns\r\n\t\t\t\t\tif (typeof columns === 'undefined' && typeof value !== 'undefined') {\r\n\t\t\t\t\t\tvar key = Plugin.getGeneralSearchKey();\r\n\t\t\t\t\t\tquery[key] = value;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// search by columns, support multiple columns\r\n\t\t\t\t\tif (typeof columns === 'object') {\r\n\t\t\t\t\t\t$.each(columns, function(k, column) {\r\n\t\t\t\t\t\t\tquery[column] = value;\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t\t// remove empty element from arrays\r\n\t\t\t\t\t\t$.each(query, function(k, v) {\r\n\t\t\t\t\t\t\tif (v === '' || $.isEmptyObject(v)) {\r\n\t\t\t\t\t\t\t\tdelete query[k];\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tPlugin.setDataSourceQuery(query);\r\n\r\n\t\t\t\t\t// reset pagination to 1 when doing seearching\r\n\t\t\t\t\tdatatable.setDataSourceParam('pagination', Object.assign({}, datatable.getDataSourceParam('pagination'), {page: 1}));\r\n\r\n\t\t\t\t\t// local filter only. remote pagination will skip this block\r\n\t\t\t\t\tif (!options.data.serverFiltering) {\r\n\t\t\t\t\t\tPlugin.localDataUpdate();\r\n\t\t\t\t\t}\r\n\t\t\t\t\tPlugin.dataRender('search');\r\n\t\t\t\t}, Plugin.getOption('search.delay'));\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * Set datasource params extract\r\n\t\t\t * @param param\r\n\t\t\t * @param value\r\n\t\t\t */\r\n\t\t\tsetDataSourceParam: function(param, value) {\r\n\t\t\t\tdatatable.API.params = $.extend({}, {\r\n\t\t\t\t\tpagination: {page: 1, perpage: Plugin.getOption('data.pageSize')},\r\n\t\t\t\t\tsort: Plugin.getDefaultSortColumn(),\r\n\t\t\t\t\tquery: {},\r\n\t\t\t\t}, datatable.API.params, Plugin.stateGet(Plugin.stateId));\r\n\r\n\t\t\t\tdatatable.API.params = Plugin.extendObj(datatable.API.params, param, value);\r\n\r\n\t\t\t\tPlugin.stateKeep(Plugin.stateId, datatable.API.params);\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * Get datasource params\r\n\t\t\t * @param param\r\n\t\t\t */\r\n\t\t\tgetDataSourceParam: function(param) {\r\n\t\t\t\tdatatable.API.params = $.extend({}, {\r\n\t\t\t\t\tpagination: {page: 1, perpage: Plugin.getOption('data.pageSize')},\r\n\t\t\t\t\tsort: Plugin.getDefaultSortColumn(),\r\n\t\t\t\t\tquery: {},\r\n\t\t\t\t}, datatable.API.params, Plugin.stateGet(Plugin.stateId));\r\n\r\n\t\t\t\tif (typeof param === 'string') {\r\n\t\t\t\t\treturn Plugin.getObject(param, datatable.API.params);\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn datatable.API.params;\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * Shortcode to datatable.getDataSourceParam('query');\r\n\t\t\t * @returns {*}\r\n\t\t\t */\r\n\t\t\tgetDataSourceQuery: function() {\r\n\t\t\t\treturn Plugin.getDataSourceParam('query') || {};\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * Shortcode to datatable.setDataSourceParam('query', query);\r\n\t\t\t * @param query\r\n\t\t\t */\r\n\t\t\tsetDataSourceQuery: function(query) {\r\n\t\t\t\tPlugin.setDataSourceParam('query', query);\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * Get current page number\r\n\t\t\t * @returns {number}\r\n\t\t\t */\r\n\t\t\tgetCurrentPage: function() {\r\n\t\t\t\treturn $(datatable.table).\r\n\t\t\t\t\tsiblings('.' + pfx + 'datatable-pager').\r\n\t\t\t\t\tlast().\r\n\t\t\t\t\tfind('.' + pfx + 'datatable-pager-nav').\r\n\t\t\t\t\tfind('.' + pfx + 'datatable-pager-link.' + pfx + 'datatable-pager-link-active').\r\n\t\t\t\t\tdata('page') || 1;\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * Get selected dropdown page size\r\n\t\t\t * @returns {*|number}\r\n\t\t\t */\r\n\t\t\tgetPageSize: function() {\r\n\t\t\t\treturn $(datatable.table).siblings('.' + pfx + 'datatable-pager').last().find('select.' + pfx + 'datatable-pager-size').val() || 10;\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * Get total rows\r\n\t\t\t */\r\n\t\t\tgetTotalRows: function() {\r\n\t\t\t\treturn datatable.API.params.pagination.total;\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * Get full dataset in grid\r\n\t\t\t * @returns {*|null|Array}\r\n\t\t\t */\r\n\t\t\tgetDataSet: function() {\r\n\t\t\t\treturn datatable.originalDataSet;\r\n\t\t\t},\r\n\r\n\t\t\tnodeTr: [],\r\n\t\t\tnodeTd: [],\r\n\t\t\tnodeCols: [],\r\n\t\t\trecentNode: [],\r\n\r\n\t\t\ttable: function() {\r\n\t\t\t\tif (typeof datatable.table !== 'undefined') {\r\n\t\t\t\t\treturn datatable.table;\r\n\t\t\t\t}\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * Select a single row from the table\r\n\t\t\t * @param selector\r\n\t\t\t * @returns {jQuery}\r\n\t\t\t */\r\n\t\t\trow: function(selector) {\r\n\t\t\t\tPlugin.rows(selector);\r\n\t\t\t\tPlugin.nodeTr = Plugin.recentNode = $(Plugin.nodeTr).first();\r\n\t\t\t\treturn datatable;\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * Select multiple rows from the table\r\n\t\t\t * @param selector\r\n\t\t\t * @returns {jQuery}\r\n\t\t\t */\r\n\t\t\trows: function(selector) {\r\n\t\t\t\tif (Plugin.isLocked()) {\r\n\t\t\t\t\tPlugin.nodeTr = Plugin.recentNode = $(datatable.tableBody).find(selector).filter('.' + pfx + 'datatable-lock-scroll > .' + pfx + 'datatable-row');\r\n\t\t\t\t} else {\r\n\t\t\t\t\tPlugin.nodeTr = Plugin.recentNode = $(datatable.tableBody).find(selector).filter('.' + pfx + 'datatable-row');\r\n\t\t\t\t}\r\n\t\t\t\treturn datatable;\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * Select a single column from the table\r\n\t\t\t * @param index zero-based index\r\n\t\t\t * @returns {jQuery}\r\n\t\t\t */\r\n\t\t\tcolumn: function(index) {\r\n\t\t\t\tPlugin.nodeCols = Plugin.recentNode = $(datatable.tableBody).find('.' + pfx + 'datatable-cell:nth-child(' + (index + 1) + ')');\r\n\t\t\t\treturn datatable;\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * Select multiple columns from the table\r\n\t\t\t * @param selector\r\n\t\t\t * @returns {jQuery}\r\n\t\t\t */\r\n\t\t\tcolumns: function(selector) {\r\n\t\t\t\tvar context = datatable.table;\r\n\t\t\t\tif (Plugin.nodeTr === Plugin.recentNode) {\r\n\t\t\t\t\tcontext = Plugin.nodeTr;\r\n\t\t\t\t}\r\n\t\t\t\tvar columns = $(context).find('.' + pfx + 'datatable-cell[data-field=\"' + selector + '\"]');\r\n\t\t\t\tif (columns.length > 0) {\r\n\t\t\t\t\tPlugin.nodeCols = Plugin.recentNode = columns;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tPlugin.nodeCols = Plugin.recentNode = $(context).find(selector).filter('.' + pfx + 'datatable-cell');\r\n\t\t\t\t}\r\n\t\t\t\treturn datatable;\r\n\t\t\t},\r\n\r\n\t\t\tcell: function(selector) {\r\n\t\t\t\tPlugin.cells(selector);\r\n\t\t\t\tPlugin.nodeTd = Plugin.recentNode = $(Plugin.nodeTd).first();\r\n\t\t\t\treturn datatable;\r\n\t\t\t},\r\n\r\n\t\t\tcells: function(selector) {\r\n\t\t\t\tvar cells = $(datatable.tableBody).find('.' + pfx + 'datatable-cell');\r\n\t\t\t\tif (typeof selector !== 'undefined') {\r\n\t\t\t\t\tcells = $(cells).filter(selector);\r\n\t\t\t\t}\r\n\t\t\t\tPlugin.nodeTd = Plugin.recentNode = cells;\r\n\t\t\t\treturn datatable;\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * Delete the selected row from the table\r\n\t\t\t * @returns {jQuery}\r\n\t\t\t */\r\n\t\t\tremove: function() {\r\n\t\t\t\tif ($(Plugin.nodeTr.length) && Plugin.nodeTr === Plugin.recentNode) {\r\n\t\t\t\t\t$(Plugin.nodeTr).remove();\r\n\t\t\t\t}\r\n\t\t\t\tPlugin.layoutUpdate();\r\n\t\t\t\treturn datatable;\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * Show or hide the columns or rows\r\n\t\t\t */\r\n\t\t\tvisible: function(bool) {\r\n\t\t\t\tif ($(Plugin.recentNode.length)) {\r\n\t\t\t\t\tvar locked = Plugin.lockEnabledColumns();\r\n\t\t\t\t\tif (Plugin.recentNode === Plugin.nodeCols) {\r\n\t\t\t\t\t\tvar index = Plugin.recentNode.index();\r\n\r\n\t\t\t\t\t\tif (Plugin.isLocked()) {\r\n\t\t\t\t\t\t\tvar scrollColumns = $(Plugin.recentNode).closest('.' + pfx + 'datatable-lock-scroll').length;\r\n\t\t\t\t\t\t\tif (scrollColumns) {\r\n\t\t\t\t\t\t\t\t// is at center of scrollable area\r\n\t\t\t\t\t\t\t\tindex += locked.left.length + 1;\r\n\t\t\t\t\t\t\t} else if ($(Plugin.recentNode).closest('.' + pfx + 'datatable-lock-right').length) {\r\n\t\t\t\t\t\t\t\t// is at the right locked table\r\n\t\t\t\t\t\t\t\tindex += locked.left.length + scrollColumns + 1;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (bool) {\r\n\t\t\t\t\t\tif (Plugin.recentNode === Plugin.nodeCols) {\r\n\t\t\t\t\t\t\tdelete options.columns[index].visible;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t$(Plugin.recentNode).show();\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tif (Plugin.recentNode === Plugin.nodeCols) {\r\n\t\t\t\t\t\t\tPlugin.setOption('columns.' + (index) + '.visible', false);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t$(Plugin.recentNode).hide();\r\n\t\t\t\t\t}\r\n\t\t\t\t\tPlugin.columnHide();\r\n\t\t\t\t\tPlugin.redraw();\r\n\t\t\t\t}\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * Get the the DOM element for the selected rows or columns\r\n\t\t\t * @returns {Array}\r\n\t\t\t */\r\n\t\t\tnodes: function() {\r\n\t\t\t\treturn Plugin.recentNode;\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * will be implemented soon\r\n\t\t\t * @returns {jQuery}\r\n\t\t\t */\r\n\t\t\tdataset: function() {\r\n\t\t\t\treturn datatable;\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * Open page by number\r\n\t\t\t * @param page number\r\n\t\t\t */\r\n\t\t\tgotoPage: function (page) {\r\n\t\t\t\tif (typeof Plugin.pagingObject !== 'undefined') {\r\n\t\t\t\t\tPlugin.isInit = true;\r\n\t\t\t\t\tPlugin.pagingObject.openPage(page);\r\n\t\t\t\t}\r\n\t\t\t},\r\n\r\n\t\t};\r\n\r\n\t\t/**\r\n\t\t * Public API methods can be used directly by datatable\r\n\t\t */\r\n\t\t$.each(Plugin, function(funcName, func) {\r\n\t\t\tdatatable[funcName] = func;\r\n\t\t});\r\n\r\n\t\t// initialize main datatable plugin\r\n\t\tif (typeof options !== 'undefined') {\r\n\t\t\tif (typeof options === 'string') {\r\n\t\t\t\tvar method = options;\r\n\t\t\t\tdatatable = $(this).data(pluginName);\r\n\t\t\t\tif (typeof datatable !== 'undefined') {\r\n\t\t\t\t\toptions = datatable.options;\r\n\t\t\t\t\tPlugin[method].apply(this, Array.prototype.slice.call(arguments, 1));\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tif (!datatable.data(pluginName) && !$(this).hasClass(pfx + 'datatable-loaded')) {\r\n\t\t\t\t\tdatatable.dataSet = null;\r\n\t\t\t\t\tdatatable.textAlign = {\r\n\t\t\t\t\t\tleft: pfx + 'datatable-cell-left',\r\n\t\t\t\t\t\tcenter: pfx + 'datatable-cell-center',\r\n\t\t\t\t\t\tright: pfx + 'datatable-cell-right',\r\n\t\t\t\t\t};\r\n\r\n\t\t\t\t\t// merge default and user defined options\r\n\t\t\t\t\toptions = $.extend(true, {}, $.fn[pluginName].defaults, options);\r\n\r\n\t\t\t\t\tdatatable.options = options;\r\n\r\n\t\t\t\t\t// init plugin process\r\n\t\t\t\t\tPlugin.init.apply(this, [options]);\r\n\r\n\t\t\t\t\t$(datatable.wrap).data(pluginName, datatable);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\t// get existing instance datatable\r\n\t\t\tdatatable = $(this).data(pluginName);\r\n\t\t\tif (typeof datatable === 'undefined') {\r\n\t\t\t\t$.error(pluginName + ' not initialized');\r\n\t\t\t}\r\n\t\t\toptions = datatable.options;\r\n\t\t}\r\n\r\n\t\treturn datatable;\r\n\t};\r\n\r\n\t// default options\r\n\t$.fn[pluginName].defaults = {\r\n\t\t// datasource definition\r\n\t\tdata: {\r\n\t\t\ttype: 'local',\r\n\t\t\tsource: null,\r\n\t\t\tpageSize: 10, // display records per page\r\n\t\t\tsaveState: true,\r\n\r\n\t\t\tserverPaging: false,\r\n\t\t\tserverFiltering: false,\r\n\t\t\tserverSorting: false,\r\n\r\n\t\t\tautoColumns: false,\r\n\t\t\tattr: {\r\n\t\t\t\trowProps: [],\r\n\t\t\t},\r\n\t\t},\r\n\r\n\t\t// layout definition\r\n\t\tlayout: {\r\n\t\t\ttheme: 'default', // datatable will support multiple themes and designs\r\n\t\t\tclass: pfx + 'datatable-primary', // custom wrapper class\r\n\t\t\tscroll: false, // enable/disable datatable scroll both horizontal and vertical when needed.\r\n\t\t\theight: null, // datatable's body's fixed height\r\n\t\t\tminHeight: null,\r\n\t\t\tfooter: false, // display/hide footer\r\n\t\t\theader: true, // display/hide header\r\n\t\t\tcustomScrollbar: true, // set false to disable custom scrollbar\r\n\r\n\t\t\t// datatable spinner\r\n\t\t\tspinner: {\r\n\t\t\t\toverlayColor: '#000000',\r\n\t\t\t\topacity: 0,\r\n\t\t\t\ttype: 'loader',\r\n\t\t\t\tstate: 'primary',\r\n\t\t\t\tmessage: true,\r\n\t\t\t},\r\n\r\n\t\t\t// datatable UI icons\r\n\t\t\ticons: {\r\n\t\t\t\tsort: {asc: 'flaticon2-arrow-up', desc: 'flaticon2-arrow-down'},\r\n\t\t\t\tpagination: {\r\n\t\t\t\t\tnext: 'flaticon2-next',\r\n\t\t\t\t\tprev: 'flaticon2-back',\r\n\t\t\t\t\tfirst: 'flaticon2-fast-back',\r\n\t\t\t\t\tlast: 'flaticon2-fast-next',\r\n\t\t\t\t\tmore: 'flaticon-more-1',\r\n\t\t\t\t},\r\n\t\t\t\trowDetail: {expand: 'fa fa-caret-down', collapse: 'fa fa-caret-right'},\r\n\t\t\t},\r\n\t\t},\r\n\r\n\t\t// column sorting\r\n\t\tsortable: true,\r\n\r\n\t\t// resize column size with mouse drag coming soon)\r\n\t\tresizable: false,\r\n\r\n\t\t// column based filtering (coming soon)\r\n\t\tfilterable: false,\r\n\r\n\t\tpagination: true,\r\n\r\n\t\t// inline and bactch editing (cooming soon)\r\n\t\teditable: false,\r\n\r\n\t\t// columns definition\r\n\t\tcolumns: [],\r\n\r\n\t\tsearch: {\r\n\t\t\t// enable trigger search by keyup enter\r\n\t\t\tonEnter: false,\r\n\t\t\t// input text for search\r\n\t\t\tinput: null,\r\n\t\t\t// search delay in milliseconds\r\n\t\t\tdelay: 400,\r\n\t\t\t//\tremote server search key value\r\n\t\t\tkey: null\r\n\t\t},\r\n\r\n\t\trows: {\r\n\t\t\t// deprecated\r\n\t\t\tcallback: function() {\r\n\t\t\t},\r\n\t\t\t// call before row template\r\n\t\t\tbeforeTemplate: function() {\r\n\t\t\t},\r\n\t\t\t// call after row template\r\n\t\t\tafterTemplate: function() {\r\n\t\t\t},\r\n\t\t\tautoHide: true,\r\n\t\t},\r\n\r\n\t\t// toolbar\r\n\t\ttoolbar: {\r\n\t\t\t// place pagination and displayInfo blocks according to the array order\r\n\t\t\tlayout: ['pagination', 'info'],\r\n\r\n\t\t\t// toolbar placement can be at top or bottom or both top and bottom repeated\r\n\t\t\tplacement: ['bottom'], //'top', 'bottom'\r\n\r\n\t\t\t// toolbar items\r\n\t\t\titems: {\r\n\t\t\t\t// pagination\r\n\t\t\t\tpagination: {\r\n\t\t\t\t\t// pagination type(default or scroll)\r\n\t\t\t\t\ttype: 'default',\r\n\r\n\t\t\t\t\t// number of pages to display by breakpoints\r\n\t\t\t\t\tpages: {\r\n\t\t\t\t\t\tdesktop: {\r\n\t\t\t\t\t\t\tlayout: 'default',\r\n\t\t\t\t\t\t\tpagesNumber: 5,\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\ttablet: {\r\n\t\t\t\t\t\t\tlayout: 'default',\r\n\t\t\t\t\t\t\tpagesNumber: 3,\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\tmobile: {\r\n\t\t\t\t\t\t\tlayout: 'compact',\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t},\r\n\r\n\t\t\t\t\t// navigation buttons\r\n\t\t\t\t\tnavigation: {\r\n\t\t\t\t\t\tprev: true, // display prev button\r\n\t\t\t\t\t\tnext: true, // display next button\r\n\t\t\t\t\t\tfirst: true, // display first button\r\n\t\t\t\t\t\tlast: true, // display last button\r\n\t\t\t\t\t\tmore: false // display more button\r\n\t\t\t\t\t},\r\n\r\n\t\t\t\t\t// page size select\r\n\t\t\t\t\tpageSizeSelect: [], // display dropdown to select pagination size. -1 is used for \"ALl\" option\r\n\t\t\t\t},\r\n\r\n\t\t\t\t// records info\r\n\t\t\t\tinfo: true,\r\n\t\t\t},\r\n\t\t},\r\n\r\n\t\t// here we will keep all strings and message used by datatable UI so developer can easiliy translate to any language.\r\n\t\t// By default the stirngs will be in the plugin source and here can override it\r\n\t\ttranslate: {\r\n\t\t\trecords: {\r\n\t\t\t\tprocessing: 'Please wait...',\r\n\t\t\t\tnoRecords: 'No records found',\r\n\t\t\t},\r\n\t\t\ttoolbar: {\r\n\t\t\t\tpagination: {\r\n\t\t\t\t\titems: {\r\n\t\t\t\t\t\tdefault: {\r\n\t\t\t\t\t\t\tfirst: 'First',\r\n\t\t\t\t\t\t\tprev: 'Previous',\r\n\t\t\t\t\t\t\tnext: 'Next',\r\n\t\t\t\t\t\t\tlast: 'Last',\r\n\t\t\t\t\t\t\tmore: 'More pages',\r\n\t\t\t\t\t\t\tinput: 'Page number',\r\n\t\t\t\t\t\t\tselect: 'Select page size',\r\n\t\t\t\t\t\t\tall: 'all',\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\tinfo: 'Showing {{start}} - {{end}} of {{total}}',\r\n\t\t\t\t\t},\r\n\t\t\t\t},\r\n\t\t\t},\r\n\t\t},\r\n\r\n\t\textensions: {},\r\n\t};\r\n\r\n}(jQuery));\r\n","\"use strict\";\r\n(function($) {\r\n\r\n\tvar pluginName = 'KTDatatable';\r\n\tvar pfx = '';\r\n\r\n\t$.fn[pluginName] = $.fn[pluginName] || {};\r\n\r\n\t/**\r\n\t * @param datatable Main datatable plugin instance\r\n\t * @param options Extension options\r\n\t * @returns {*}\r\n\t */\r\n\t$.fn[pluginName].checkbox = function(datatable, options) {\r\n\t\tvar Extension = {\r\n\t\t\tselectedAllRows: false,\r\n\t\t\tselectedRows: [],\r\n\t\t\tunselectedRows: [],\r\n\r\n\t\t\tinit: function() {\r\n\t\t\t\tif (Extension.selectorEnabled()) {\r\n\t\t\t\t\t// reset\r\n\t\t\t\t\tdatatable.setDataSourceParam(options.vars.selectedAllRows, false);\r\n\t\t\t\t\tdatatable.stateRemove('checkbox');\r\n\r\n\t\t\t\t\t// requestIds is not null\r\n\t\t\t\t\tif (options.vars.requestIds) {\r\n\t\t\t\t\t\t// request ids in response\r\n\t\t\t\t\t\tdatatable.setDataSourceParam(options.vars.requestIds, true);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// remove selected checkbox on datatable reload\r\n\t\t\t\t\t$(datatable).on(pfx + 'datatable-on-reloaded', function() {\r\n\t\t\t\t\t\tdatatable.stateRemove('checkbox');\r\n\t\t\t\t\t\tdatatable.setDataSourceParam(options.vars.selectedAllRows, false);\r\n\t\t\t\t\t\tExtension.selectedAllRows = false;\r\n\t\t\t\t\t\tExtension.selectedRows = [];\r\n\t\t\t\t\t\tExtension.unselectedRows = [];\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\t// select all on extension init\r\n\t\t\t\t\tExtension.selectedAllRows = datatable.getDataSourceParam(options.vars.selectedAllRows);\r\n\r\n\t\t\t\t\t$(datatable).on(pfx + 'datatable-on-layout-updated', function(e, args) {\r\n\t\t\t\t\t\tif (args.table != $(datatable.wrap).attr('id')) {\r\n\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tdatatable.ready(function() {\r\n\t\t\t\t\t\t\tExtension.initVars();\r\n\t\t\t\t\t\t\tExtension.initEvent();\r\n\t\t\t\t\t\t\tExtension.initSelect();\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\t$(datatable).on(pfx + 'datatable-on-check', function(e, ids) {\r\n\t\t\t\t\t\tids.forEach(function(id) {\r\n\t\t\t\t\t\t\tExtension.selectedRows.push(id);\r\n\t\t\t\t\t\t\t// // remove from unselected rows\r\n\t\t\t\t\t\t\tExtension.unselectedRows = Extension.remove(Extension.unselectedRows, id);\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t\tvar storage = {};\r\n\t\t\t\t\t\tstorage['selectedRows'] = $.unique(Extension.selectedRows);\r\n\t\t\t\t\t\tstorage['unselectedRows'] = $.unique(Extension.unselectedRows);\r\n\t\t\t\t\t\tdatatable.stateKeep('checkbox', storage);\r\n\t\t\t\t\t});\r\n\t\t\t\t\t$(datatable).on(pfx + 'datatable-on-uncheck', function(e, ids) {\r\n\t\t\t\t\t\tids.forEach(function(id) {\r\n\t\t\t\t\t\t\tExtension.unselectedRows.push(id);\r\n\t\t\t\t\t\t\t// // remove from selected rows\r\n\t\t\t\t\t\t\tExtension.selectedRows = Extension.remove(Extension.selectedRows, id);\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t\tvar storage = {};\r\n\t\t\t\t\t\tstorage['selectedRows'] = $.unique(Extension.selectedRows);\r\n\t\t\t\t\t\tstorage['unselectedRows'] = $.unique(Extension.unselectedRows);\r\n\t\t\t\t\t\tdatatable.stateKeep('checkbox', storage);\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * Init checkbox clicks event\r\n\t\t\t */\r\n\t\t\tinitEvent: function() {\r\n\t\t\t\t// select all checkbox click\r\n\t\t\t\t$(datatable.tableHead).find('.' + pfx + 'checkbox-all > [type=\"checkbox\"]').click(function(e) {\r\n\t\t\t\t\t// clear selected and unselected rows\r\n\t\t\t\t\tExtension.selectedRows = Extension.unselectedRows = [];\r\n\t\t\t\t\tdatatable.stateRemove('checkbox');\r\n\r\n\t\t\t\t\t// select all rows\r\n\t\t\t\t\tExtension.selectedAllRows = !!$(this).is(':checked');\r\n\r\n\t\t\t\t\t// local select all current page rows\r\n\t\t\t\t\tif (!options.vars.requestIds) {\r\n\t\t\t\t\t\tif ($(this).is(':checked')) {\r\n\t\t\t\t\t\t\tExtension.selectedRows = $.makeArray($(datatable.tableBody).find('.' + pfx + 'checkbox-single > [type=\"checkbox\"]').map(function(i, chk) {\r\n\t\t\t\t\t\t\t\treturn $(chk).val();\r\n\t\t\t\t\t\t\t}));\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tvar storage = {};\r\n\t\t\t\t\t\tstorage['selectedRows'] = $.unique(Extension.selectedRows);\r\n\t\t\t\t\t\tdatatable.stateKeep('checkbox', storage);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// keep selectedAllRows in datasource params\r\n\t\t\t\t\tdatatable.setDataSourceParam(options.vars.selectedAllRows, Extension.selectedAllRows);\r\n\r\n\t\t\t\t\t$(datatable).trigger(pfx + 'datatable-on-click-checkbox', [$(this)]);\r\n\t\t\t\t});\r\n\r\n\t\t\t\t// single row checkbox click\r\n\t\t\t\t$(datatable.tableBody).find('.' + pfx + 'checkbox-single > [type=\"checkbox\"]').click(function(e) {\r\n\t\t\t\t\tvar id = $(this).val();\r\n\t\t\t\t\tif ($(this).is(':checked')) {\r\n\t\t\t\t\t\tExtension.selectedRows.push(id);\r\n\t\t\t\t\t\t// remove from unselected rows\r\n\t\t\t\t\t\tExtension.unselectedRows = Extension.remove(Extension.unselectedRows, id);\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\tExtension.unselectedRows.push(id);\r\n\t\t\t\t\t\t// remove from selected rows\r\n\t\t\t\t\t\tExtension.selectedRows = Extension.remove(Extension.selectedRows, id);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// local checkbox header check\r\n\t\t\t\t\tif (!options.vars.requestIds && Extension.selectedRows.length < 1) {\r\n\t\t\t\t\t\t// remove select all checkbox, if there is no checked checkbox left\r\n\t\t\t\t\t\t$(datatable.tableHead).find('.' + pfx + 'checkbox-all > [type=\"checkbox\"]').prop('checked', false);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tvar storage = {};\r\n\t\t\t\t\tstorage['selectedRows'] = Extension.selectedRows.filter(Extension.unique);\r\n\t\t\t\t\tstorage['unselectedRows'] = Extension.unselectedRows.filter(Extension.unique);\r\n\t\t\t\t\tdatatable.stateKeep('checkbox', storage);\r\n\r\n\t\t\t\t\t$(datatable).trigger(pfx + 'datatable-on-click-checkbox', [$(this)]);\r\n\t\t\t\t});\r\n\t\t\t},\r\n\r\n\t\t\tunique: function(value, index, self) {\r\n\t\t\t\treturn self.indexOf(value) === index;\r\n\t\t\t},\r\n\r\n\t\t\tinitSelect: function() {\r\n\t\t\t\t// selected all rows from server\r\n\t\t\t\tif (Extension.selectedAllRows && options.vars.requestIds) {\r\n\t\t\t\t\tif (!datatable.hasClass(pfx + 'datatable-error')) {\r\n\t\t\t\t\t\t// set header select all checkbox checked\r\n\t\t\t\t\t\t$(datatable.tableHead).find('.' + pfx + 'checkbox-all > [type=\"checkbox\"]').prop('checked', true);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// set all checkbox in table body\r\n\t\t\t\t\tdatatable.setActiveAll(true);\r\n\r\n\t\t\t\t\t// remove unselected rows\r\n\t\t\t\t\tExtension.unselectedRows.forEach(function(id) {\r\n\t\t\t\t\t\tdatatable.setInactive(id);\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\t// single check for server and local\r\n\t\t\t\t\tExtension.selectedRows.forEach(function(id) {\r\n\t\t\t\t\t\tdatatable.setActive(id);\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\t// local checkbox; check if all checkboxes of currect page are checked\r\n\t\t\t\t\tif (!datatable.hasClass(pfx + 'datatable-error') && $(datatable.tableBody).find('.' + pfx + 'checkbox-single > [type=\"checkbox\"]').not(':checked').length < 1) {\r\n\t\t\t\t\t\t// set header select all checkbox checked\r\n\t\t\t\t\t\t$(datatable.tableHead).find('.' + pfx + 'checkbox-all > [type=\"checkbox\"]').prop('checked', true);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t},\r\n\r\n\t\t\t/**\r\n\t\t\t * Check if selector is enabled from options\r\n\t\t\t */\r\n\t\t\tselectorEnabled: function() {\r\n\t\t\t\treturn $.grep(datatable.options.columns, function(n, i) {\r\n\t\t\t\t\treturn n.selector || false;\r\n\t\t\t\t})[0];\r\n\t\t\t},\r\n\r\n\t\t\tinitVars: function() {\r\n\t\t\t\t// get single select/unselect from localstorage\r\n\t\t\t\tvar storage = datatable.stateGet('checkbox');\r\n\t\t\t\tif (typeof storage !== 'undefined') {\r\n\t\t\t\t\tExtension.selectedRows = storage['selectedRows'] || [];\r\n\t\t\t\t\tExtension.unselectedRows = storage['unselectedRows'] || [];\r\n\t\t\t\t}\r\n\t\t\t},\r\n\r\n\t\t\tgetSelectedId: function(path) {\r\n\t\t\t\tExtension.initVars();\r\n\r\n\t\t\t\t// server selected all rows\r\n\t\t\t\tif (Extension.selectedAllRows && options.vars.requestIds) {\r\n\t\t\t\t\tif (typeof path === 'undefined') {\r\n\t\t\t\t\t\tpath = options.vars.rowIds;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// if selected all rows, return id from response meta\r\n\t\t\t\t\tvar selectedAllRows = datatable.getObject(path, datatable.lastResponse) || [];\r\n\r\n\t\t\t\t\tif (selectedAllRows.length > 0) {\r\n\t\t\t\t\t\t// remove single unselected rows from selectedAllRows ids from server response emta\r\n\t\t\t\t\t\tExtension.unselectedRows.forEach(function(id) {\r\n\t\t\t\t\t\t\tselectedAllRows = Extension.remove(selectedAllRows, parseInt(id));\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn $.unique(selectedAllRows);\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// else return single checked selected rows\r\n\t\t\t\treturn Extension.selectedRows;\r\n\t\t\t},\r\n\r\n\t\t\tremove: function(array, element) {\r\n\t\t\t\treturn array.filter(function(e) {\r\n\t\t\t\t\treturn e !== element;\r\n\t\t\t\t});\r\n\t\t\t},\r\n\t\t};\r\n\r\n\t\t// make the extension accessible from datatable init\r\n\t\tdatatable.checkbox = function() {\r\n\t\t\treturn Extension;\r\n\t\t};\r\n\r\n\t\tif (typeof options === 'object') {\r\n\t\t\toptions = $.extend(true, {}, $.fn[pluginName].checkbox.default, options);\r\n\t\t\tExtension.init.apply(this, [options]);\r\n\t\t}\r\n\r\n\t\treturn datatable;\r\n\t};\r\n\r\n\t$.fn[pluginName].checkbox.default = {\r\n\t\tvars: {\r\n\t\t\t// select all rows flag to be sent to the server\r\n\t\t\tselectedAllRows: 'selectedAllRows',\r\n\t\t\t// request id parameter's name\r\n\t\t\trequestIds: 'requestIds',\r\n\t\t\t// response path to all rows id\r\n\t\t\trowIds: 'meta.rowIds',\r\n\t\t},\r\n\t};\r\n\r\n}(jQuery));\r\n","var defaults = {\r\n\tlayout: {\r\n\t\ticons: {\r\n\t\t\tpagination: {\r\n\t\t\t\tnext: 'flaticon2-next',\r\n\t\t\t\tprev: 'flaticon2-back',\r\n\t\t\t\tfirst: 'flaticon2-fast-back',\r\n\t\t\t\tlast: 'flaticon2-fast-next',\r\n\t\t\t\tmore: 'flaticon-more-1',\r\n\t\t\t},\r\n\t\t\trowDetail: {expand: 'fa fa-caret-down', collapse: 'fa fa-caret-right'},\r\n\t\t}\r\n\t}\r\n};\r\n\r\nif (KTUtil.isRTL()) {\r\n\tdefaults = {\r\n\t\tlayout: {\r\n\t\t\ticons: {\r\n\t\t\t\tpagination: {\r\n\t\t\t\t\tnext: 'flaticon2-back',\r\n\t\t\t\t\tprev: 'flaticon2-next',\r\n\t\t\t\t\tfirst: 'flaticon2-fast-next',\r\n\t\t\t\t\tlast: 'flaticon2-fast-back',\r\n\t\t\t\t},\r\n\t\t\t\trowDetail: {collapse: 'fa fa-caret-down', expand: 'fa fa-caret-right'},\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n\r\n$.extend(true, $.fn.KTDatatable.defaults, defaults);\r\n","\"use strict\";\r\n\r\nvar KTLayoutAside = function() {\r\n // Private properties\r\n var _body;\r\n var _element;\r\n var _offcanvasObject;\r\n\r\n // Private functions\r\n\t// Initialize\r\n\tvar _init = function() {\r\n\t\tvar offcanvasClass = KTUtil.hasClass(_element, 'aside-offcanvas-default') ? 'aside-offcanvas-default' : 'aside';\r\n\r\n // Initialize mobile aside offcanvas\r\n\t\t_offcanvasObject = new KTOffcanvas(_element, {\r\n\t\t\tbaseClass: offcanvasClass,\r\n\t\t\toverlay: true,\r\n\t\t\tcloseBy: 'kt_aside_close_btn',\r\n\t\t\ttoggleBy: {\r\n\t\t\t\ttarget: 'kt_aside_mobile_toggle',\r\n\t\t\t\tstate: 'mobile-toggle-active'\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n // Public methods\r\n\treturn {\r\n\t\tinit: function(id) {\r\n _element = KTUtil.getById(id);\r\n _body = KTUtil.getBody();\r\n\r\n if (!_element) {\r\n return;\r\n }\r\n\r\n // Initialize\r\n _init();\r\n },\r\n\r\n getElement: function() {\r\n return _element;\r\n },\r\n\r\n getOffcanvas: function() {\r\n return _offcanvasObject;\r\n }\r\n\t};\r\n}();\r\n\r\n// Webpack support\r\nif (typeof module !== 'undefined') {\r\n\tmodule.exports = KTLayoutAside;\r\n}\r\n","\"use strict\";\r\n\r\nvar KTLayoutAsideMenu = function() {\r\n // Private properties\r\n var _element;\r\n var _menuObject;\r\n\r\n\t// Initialize\r\n\tvar _init = function() {\r\n\t\tvar menuDesktopMode = (KTUtil.attr(_element, 'data-menu-dropdown') === '1' ? 'dropdown' : 'accordion');\r\n var scroll;\r\n\r\n\t\tif (KTUtil.isBreakpointDown('lg') && KTUtil.attr(_element, 'data-menu-scroll') === '1') {\r\n\t\t\tscroll = {\r\n\t\t\t\trememberPosition: true, // remember position on page reload\r\n\t\t\t\theight: function() { // calculate available scrollable area height\r\n\t\t\t\t\tvar height = parseInt(KTUtil.getViewPort().height);\r\n\r\n\t\t\t\t\theight = height - (parseInt(KTUtil.css(_element, 'marginBottom')) + parseInt(KTUtil.css(_element, 'marginTop')));\r\n\r\n\t\t\t\t\treturn height;\r\n\t\t\t\t}\r\n\t\t\t};\r\n\t\t}\r\n\r\n\t\t_menuObject = new KTMenu(_element, {\r\n\t\t\t// Vertical scroll\r\n\t\t\tscroll: scroll,\r\n\r\n\t\t\t// Submenu setup\r\n\t\t\tsubmenu: {\r\n\t\t\t\tdesktop: menuDesktopMode,\r\n\t\t\t\ttablet: 'accordion', // menu set to accordion in tablet mode\r\n\t\t\t\tmobile: 'accordion' // menu set to accordion in mobile mode\r\n\t\t\t},\r\n\r\n\t\t\t// Accordion setup\r\n\t\t\taccordion: {\r\n\t\t\t\texpandAll: false // allow having multiple expanded accordions in the menu\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n // Public methods\r\n\treturn {\r\n\t\tinit: function(id) {\r\n _element = KTUtil.getById(id);\r\n\r\n if (!_element) {\r\n return;\r\n }\r\n\r\n // Initialize menu\r\n _init();\r\n\t\t},\r\n\r\n\t\tgetElement: function() {\r\n\t\t\treturn _element;\r\n\t\t},\r\n\r\n getMenu: function() {\r\n\t\t\treturn _menuObject;\r\n\t\t},\r\n\r\n pauseDropdownHover: function(time) {\r\n\t\t\tif (_menuObject) {\r\n\t\t\t\t_menuObject.pauseDropdownHover(time);\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\tcloseMobileOffcanvas: function() {\r\n\t\t\tif (_menuObject && KTUtil.isMobileDevice()) {\r\n\t\t\t\t_menuObject.hide();\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n}();\r\n\r\n// Webpack support\r\nif (typeof module !== 'undefined') {\r\n\tmodule.exports = KTLayoutAsideMenu;\r\n}\r\n","\"use strict\";\r\n\r\nvar KTLayoutContent = function() {\r\n // Private properties\r\n var _element;\r\n\r\n\t// Private functions\r\n\tvar _getHeight = function() {\r\n\t\tvar height;\r\n\r\n\t\theight = KTUtil.getViewPort().height;\r\n\r\n if (_element) {\r\n height = height - parseInt(KTUtil.css(_element, 'paddingTop')) - parseInt(KTUtil.css(_element, 'paddingBottom'));\r\n } \r\n\r\n height = height - KTLayoutHeader.getHeight();\r\n height = height - KTLayoutSubheader.getHeight();\r\n height = height - KTLayoutFooter.getHeight();\r\n\r\n\t\treturn height;\r\n\t}\r\n\r\n // Public methods\r\n\treturn {\r\n\t\tinit: function(id) {\r\n _element = KTUtil.getById(id);\r\n\t\t},\r\n\r\n\t\tgetHeight: function() {\r\n\t\t\treturn _getHeight();\r\n\t\t},\r\n\r\n getElement: function() {\r\n return _element;\r\n }\r\n\t};\r\n}();\r\n\r\n// Webpack support\r\nif (typeof module !== 'undefined') {\r\n\tmodule.exports = KTLayoutContent;\r\n}\r\n","\"use strict\";\r\n\r\nvar KTLayoutFooter = function() {\r\n // Private properties\r\n var _element;\r\n\r\n\t// Private functions\r\n\tvar _getHeight = function() {\r\n\t\tvar height = 0;\r\n\r\n if (_element) {\r\n height = KTUtil.actualHeight(_element);\r\n }\r\n\r\n\t\treturn height;\r\n\t}\r\n\r\n // Public methods\r\n\treturn {\r\n\t\tinit: function(id) {\r\n _element = KTUtil.getById(id);\r\n\t\t},\r\n\r\n\t\tgetHeight: function() {\r\n\t\t\treturn _getHeight();\r\n\t\t},\r\n\r\n getElement: function() {\r\n return _element;\r\n }\r\n\t};\r\n}();\r\n\r\n// Webpack support\r\nif (typeof module !== 'undefined') {\r\n\tmodule.exports = KTLayoutFooter;\r\n}\r\n","\"use strict\";\r\n\r\nvar KTLayoutHeader = function() {\r\n // Private properties\r\n var _element;\r\n var _elementForMobile;\r\n var _object;\r\n\r\n\t// Private functions\r\n\tvar _init = function() {\r\n var options = {\r\n offset: {\r\n desktop: 300,\r\n tabletAndMobile: 300\r\n },\r\n releseOnReverse: {\r\n desktop: false,\r\n tabletAndMobile: false\r\n }\r\n\t\t};\r\n\r\n\t\t_object = new KTHeader(_element, options);\r\n\t}\r\n\r\n // Get height\r\n var _getHeight = function() {\r\n var height = 0;\r\n\r\n if (_element) {\r\n height = KTUtil.actualHeight(_element) + 1;\r\n }\r\n\r\n return height;\r\n }\r\n\r\n // Get height\r\n var _getHeightForMobile = function() {\r\n var height;\r\n\r\n height = KTUtil.actualHeight(_elementForMobile);\r\n\r\n return height;\r\n }\r\n\r\n // Public methods\r\n\treturn {\r\n\t\tinit: function(id, idForMobile) {\r\n _element = KTUtil.getById(id);\r\n _elementForMobile = KTUtil.getById(idForMobile);\r\n\r\n if (!_element) {\r\n return;\r\n }\r\n\r\n // Initialize\r\n _init();\r\n\t\t},\r\n\r\n isFixed: function() {\r\n return KTUtil.hasClass(KTUtil.getBody(), 'header-fixed')\r\n },\r\n\r\n isFixedForMobile: function() {\r\n return KTUtil.hasClass(KTUtil.getBody(), 'header-mobile-fixed')\r\n },\r\n\r\n getElement: function() {\r\n return _element;\r\n },\r\n\r\n getElementForMobile: function() {\r\n return _elementForMobile;\r\n },\r\n\r\n getHeader: function() {\r\n return _object;\r\n },\r\n\r\n getHeight: function() {\r\n return _getHeight();\r\n },\r\n\r\n getHeightForMobile: function() {\r\n return _getHeightForMobile();\r\n }\r\n\t};\r\n}();\r\n\r\n// Webpack support\r\nif (typeof module !== 'undefined') {\r\n\tmodule.exports = KTLayoutHeader;\r\n}\r\n","\"use strict\";\r\n\r\nvar KTLayoutHeaderMenu = function() {\r\n // Private properties\r\n\tvar _menuElement;\r\n var _menuObject;\r\n var _offcanvasElement;\r\n var _offcanvasObject;\r\n\tvar _mobileTabPanes;\r\n\r\n // Private functions\r\n\tvar _init = function() {\r\n\t\t_offcanvasObject = new KTOffcanvas(_offcanvasElement, {\r\n\t\t\toverlay: true,\r\n\t\t\tbaseClass: 'header-navs',\r\n\t\t\tcloseBy: 'kt_header_mobile_close',\r\n\t\t\ttoggleBy: {\r\n\t\t\t\ttarget: 'kt_header_mobile_toggle',\r\n\t\t\t\tstate: 'burge-icon-active'\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\t_menuObject = new KTMenu(_menuElement, {\r\n\t\t\tsubmenu: {\r\n\t\t\t\tdesktop: 'dropdown',\r\n\t\t\t\ttablet: 'accordion',\r\n\t\t\t\tmobile: 'accordion'\r\n\t\t\t},\r\n\t\t\taccordion: {\r\n\t\t\t\tslideSpeed: 200, // accordion toggle slide speed in milliseconds\r\n\t\t\t\texpandAll: false // allow having multiple expanded accordions in the menu\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tvar _initTabPanesForMobile = function() {\r\n\t\tif ( _mobileTabPanes ) {\r\n\t\t\tfor (var i = 0, len = _mobileTabPanes.length; i < len; i++) {\r\n\t\t\t\tvar mobileTabPane = _mobileTabPanes[i];\r\n\t\t\t\tvar tabs = KTUtil.find(_offcanvasElement, '.header-tabs');\r\n\r\n\t\t\t\tKTUtil.scrollInit(mobileTabPane, {\r\n\t\t disableForMobile: true,\r\n\t\t resetHeightOnDestroy: true,\r\n\t\t handleWindowResize: true,\r\n\t\t height: function() {\r\n\t\t\t\t\t\t// Destroy for tablet and mobile modes\r\n\t\t\t\t\t\tif (KTUtil.isBreakpointUp('lg')) {\r\n\t\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t var height = parseInt(KTUtil.getViewPort().height);\r\n\r\n\t\t if (tabs) {\r\n\t\t height = height - parseInt(KTUtil.actualHeight(tabs));\r\n\t\t height = height - parseInt(KTUtil.css(tabs, 'marginTop'));\r\n\t\t height = height - parseInt(KTUtil.css(tabs, 'marginBottom'));\r\n\t\t }\r\n\r\n\t\t if (mobileTabPane) {\r\n\t\t height = height - parseInt(KTUtil.css(mobileTabPane, 'marginTop'));\r\n\t\t height = height - parseInt(KTUtil.css(mobileTabPane, 'marginBottom'));\r\n\t\t }\r\n\r\n\t\t height = height - parseInt(KTUtil.css(_offcanvasElement, 'paddingTop'));\r\n\t\t height = height - parseInt(KTUtil.css(_offcanvasElement, 'paddingBottom'));\r\n\r\n\t\t height = height - 2;\r\n\r\n\t\t return height;\r\n\t\t }\r\n\t\t });\r\n\r\n\t\t\t\t$(_offcanvasElement).find('a[data-toggle=\"tab\"]').on('shown.bs.tab', function (e) {\r\n\t\t\t\t\t// Tablet & Mobile Modes Only\r\n\t\t\t\t\tif (KTUtil.isBreakpointUp('lg')) {\r\n\t\t\t\t\t\tKTUtil.scrollUpdate(mobileTabPane);\r\n\t\t\t\t\t}\r\n\t\t });\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n // Public methods\r\n\treturn {\r\n init: function(menuId, offcanvasId) {\r\n _menuElement = KTUtil.getById(menuId);\r\n _offcanvasElement = KTUtil.getById(offcanvasId);\r\n\t\t\t_mobileTabPanes = KTUtil.findAll(_offcanvasElement, '.tab-pane');\r\n\r\n if (!_menuElement) {\r\n return;\r\n }\r\n\r\n // Initialize menu\r\n _init();\r\n\t\t\t_initTabPanesForMobile();\r\n\t\t},\r\n\r\n\t\tgetMenuElement: function() {\r\n\t\t\treturn _menuElement;\r\n\t\t},\r\n\r\n getOffcanvasElement: function() {\r\n\t\t\treturn _offcanvasElement;\r\n\t\t},\r\n\r\n getMenu: function() {\r\n\t\t\treturn _menuObject;\r\n\t\t},\r\n\r\n\t\tpauseDropdownHover: function(time) {\r\n\t\t\tif (_menuObject) {\r\n\t\t\t\t_menuObject.pauseDropdownHover(time);\r\n\t\t\t}\r\n\t\t},\r\n\r\n getOffcanvas: function() {\r\n\t\t\treturn _offcanvasObject;\r\n\t\t},\r\n\r\n\t\tcloseMobileOffcanvas: function() {\r\n\t\t\tif (_menuObject && KTUtil.isMobileDevice()) {\r\n\t\t\t\t_offcanvasObject.hide();\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n}();\r\n\r\n// Webpack support\r\nif (typeof module !== 'undefined') {\r\n\tmodule.exports = KTLayoutHeaderMenu;\r\n}\r\n","\"use strict\";\r\n\r\nvar KTLayoutHeaderTopbar = function() {\r\n // Private properties\r\n\tvar _toggleElement;\r\n var _toggleObject;\r\n\r\n // Private functions\r\n var _init = function() {\r\n\t\t_toggleObject = new KTToggle(_toggleElement, {\r\n\t\t\ttarget: KTUtil.getBody(),\r\n\t\t\ttargetState: 'topbar-mobile-on',\r\n\t\t\ttoggleState: 'active'\r\n\t\t});\r\n }\r\n\r\n // Public methods\r\n\treturn {\r\n\t\tinit: function(id) {\r\n _toggleElement = KTUtil.getById(id);\r\n\r\n\t\t\tif (!_toggleElement) {\r\n return;\r\n }\r\n\r\n // Initialize\r\n _init();\r\n\t\t},\r\n\r\n getToggleElement: function() {\r\n return _toggleElement;\r\n }\r\n\t};\r\n}();\r\n\r\n// Webpack support\r\nif (typeof module !== 'undefined') {\r\n\tmodule.exports = KTLayoutHeaderTopbar;\r\n}\r\n","\"use strict\";\r\n\r\nvar KTLayoutStickyCard = function() {\r\n // Private properties\r\n\tvar _element;\r\n var _object;\r\n\r\n\t// Private functions\r\n\tvar _init = function() {\r\n\t\tvar offset = 300;\r\n\r\n\t\tif (typeof KTLayoutHeader !== 'undefined') {\r\n\t\t\toffset = KTLayoutHeader.getHeight();\r\n\t\t}\r\n\r\n _object = new KTCard(_element, {\r\n\t\t\tsticky: {\r\n\t\t\t\toffset: offset,\r\n\t\t\t\tzIndex: 90,\r\n\t\t\t\tposition: {\r\n\t\t\t\t\ttop: function() {\r\n\t\t\t\t\t\tvar pos = 0;\r\n var body = KTUtil.getBody();\r\n\r\n\t\t\t\t\t\tif (KTUtil.isBreakpointUp('lg')) {\r\n\t\t\t\t\t\t\tif (typeof KTLayoutHeader !== 'undefined' && KTLayoutHeader.isFixed()) {\r\n\t\t\t\t\t\t\t\tpos = pos + KTLayoutHeader.getHeight();\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\tif (typeof KTLayoutSubheader !== 'undefined' && KTLayoutSubheader.isFixed()) {\r\n\t\t\t\t\t\t\t\tpos = pos + KTLayoutSubheader.getHeight();\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tif (typeof KTLayoutHeader !== 'undefined' && KTLayoutHeader.isFixedForMobile()) {\r\n\t\t\t\t\t\t\t\tpos = pos + KTLayoutHeader.getHeightForMobile();\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tpos = pos - 1; // remove header border width\r\n\r\n\t\t\t\t\t\treturn pos;\r\n\t\t\t\t\t},\r\n\t\t\t\t\tleft: function(card) {\r\n\t\t\t\t\t\treturn KTUtil.offset(_element).left;\r\n\t\t\t\t\t},\r\n\t\t\t\t\tright: function(card) {\r\n\t\t\t\t\t\tvar body = KTUtil.getBody();\r\n\r\n\t\t\t\t\t\tvar cardWidth = parseInt(KTUtil.css(_element, 'width'));\r\n\t\t\t\t\t\tvar bodyWidth = parseInt(KTUtil.css(body, 'width'));\r\n\t\t\t\t\t\tvar cardOffsetLeft = KTUtil.offset(_element).left;\r\n\r\n\t\t\t\t\t\treturn bodyWidth - cardWidth - cardOffsetLeft;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\t_object.initSticky();\r\n\r\n\t\tKTUtil.addResizeHandler(function() {\r\n\t\t\t_object.updateSticky();\r\n\t\t});\r\n\t}\r\n\r\n // Public methods\r\n\treturn {\r\n\t\tinit: function(id) {\r\n _element = KTUtil.getById(id);\r\n\r\n if (!_element) {\r\n return;\r\n }\r\n\r\n // Initialize\r\n\t\t\t_init();\r\n\t\t},\r\n\r\n\t\tupdate: function() {\r\n\t\t\tif (_object) {\r\n\t\t\t\t_object.updateSticky();\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n}();\r\n\r\n// Webpack support\r\nif (typeof module !== 'undefined') {\r\n\tmodule.exports = KTLayoutStickyCard;\r\n}\r\n","\"use strict\";\r\n\r\nvar KTLayoutStretchedCard = function() {\r\n // Private properties\r\n\tvar _element;\r\n\r\n\t// Private functions\r\n\tvar _init = function() {\r\n\t\tvar scroll = KTUtil.find(_element, '.card-scroll');\r\n\t\tvar cardBody = KTUtil.find(_element, '.card-body');\r\n\t\tvar cardHeader = KTUtil.find(_element, '.card-header');\r\n\r\n\t\tvar height = KTLayoutContent.getHeight();\r\n\r\n\t\theight = height - parseInt(KTUtil.actualHeight(cardHeader));\r\n\r\n\t\theight = height - parseInt(KTUtil.css(_element, 'marginTop')) - parseInt(KTUtil.css(_element, 'marginBottom'));\r\n\t\theight = height - parseInt(KTUtil.css(_element, 'paddingTop')) - parseInt(KTUtil.css(_element, 'paddingBottom'));\r\n\r\n\t\theight = height - parseInt(KTUtil.css(cardBody, 'paddingTop')) - parseInt(KTUtil.css(cardBody, 'paddingBottom'));\r\n\t\theight = height - parseInt(KTUtil.css(cardBody, 'marginTop')) - parseInt(KTUtil.css(cardBody, 'marginBottom'));\r\n\r\n\t\theight = height - 3;\r\n\r\n\t\tKTUtil.css(scroll, 'height', height + 'px');\r\n\t}\r\n\r\n // Public methods\r\n\treturn {\r\n\t\tinit: function(id) {\r\n _element = KTUtil.getById(id);\r\n\r\n if (!_element) {\r\n return;\r\n }\r\n\r\n // Initialize\r\n\t\t\t_init();\r\n\r\n // Re-calculate on window resize\r\n KTUtil.addResizeHandler(function() {\r\n\t\t\t\t_init();\r\n\t\t\t});\r\n\t\t},\r\n\r\n\t\tupdate: function() {\r\n\t\t\t_init();\r\n\t\t}\r\n\t};\r\n}();\r\n\r\n// Webpack support\r\nif (typeof module !== 'undefined') {\r\n\tmodule.exports = KTLayoutStretchedCard;\r\n}\r\n","\"use strict\";\r\n\r\nvar KTLayoutSubheader = function() {\r\n // Private properties\r\n var _element;\r\n\r\n // Private functions\r\n var _getHeight = function() {\r\n var height = 0;\r\n\r\n if (_element) {\r\n height = KTUtil.actualHeight(_element);\r\n }\r\n\r\n return height;\r\n }\r\n\r\n // Public methods\r\n\treturn {\r\n\t\tinit: function(id) {\r\n _element = KTUtil.getById(id);\r\n\r\n if (!_element) {\r\n return;\r\n }\r\n\t\t},\r\n\r\n isFixed: function() {\r\n return KTUtil.hasClass(KTUtil.getBody(), 'subheader-fixed');\r\n },\r\n\r\n getElement: function() {\r\n return _element;\r\n },\r\n\r\n getHeight: function() {\r\n return _getHeight();\r\n }\r\n\t};\r\n}();\r\n\r\n// Webpack support\r\nif (typeof module !== 'undefined') {\r\n\tmodule.exports = KTLayoutSubheader;\r\n}\r\n","\"use strict\";\r\n\r\nvar KTLayoutScrolltop = function() {\r\n // Private properties\r\n var _element;\r\n var _object;\r\n\r\n // Private functions\r\n var _init = function() {\r\n _object = new KTScrolltop(_element, {\r\n offset: 300,\r\n speed: 600,\r\n });\r\n }\r\n\r\n // Public methods\r\n\treturn {\r\n\t\tinit: function(id) {\r\n _element = KTUtil.getById(id);\r\n\r\n if (!_element) {\r\n return;\r\n }\r\n\r\n // Initialize\r\n _init();\r\n\t\t},\r\n\r\n getElement: function() {\r\n return _element;\r\n }\r\n\t};\r\n}();\r\n\r\n// Webpack support\r\nif (typeof module !== 'undefined') {\r\n\tmodule.exports = KTLayoutScrolltop;\r\n}\r\n","\"use strict\";\r\n\r\n// Initialization\r\nKTUtil.ready(function() {\r\n ////////////////////////////////////////////////////\r\n // Layout Base Partials(mandatory for core layout)//\r\n ////////////////////////////////////////////////////\r\n\r\n // Init Desktop & Mobile Headers\r\n KTLayoutHeader.init('kt_header', 'kt_header_mobile');\r\n\r\n // Init Header Menu\r\n KTLayoutHeaderMenu.init('kt_header_menu', 'kt_header_navs');\r\n\r\n // Init Header Topbar For Mobile Mode\r\n KTLayoutHeaderTopbar.init('kt_header_mobile_topbar_toggle');\r\n\r\n // Init Aside\r\n KTLayoutAside.init('kt_aside');\r\n\r\n // Init Aside Menu\r\n KTLayoutAsideMenu.init('kt_aside_menu');\r\n\r\n // Init Subheader\r\n KTLayoutSubheader.init('kt_subheader');\r\n\r\n // Init Content\r\n KTLayoutContent.init('kt_content');\r\n\r\n // Init Footer\r\n KTLayoutFooter.init('kt_footer');\r\n\r\n //////////////////////////////////////////////\r\n // Layout Extended Partials(optional to use)//\r\n //////////////////////////////////////////////\r\n\r\n\r\n // Init Scrolltop\r\n KTLayoutScrolltop.init('kt_scrolltop');\r\n\r\n // Init Sticky Card\r\n KTLayoutStickyCard.init('kt_page_sticky_card');\r\n\r\n // Init Stretched Card\r\n KTLayoutStretchedCard.init('kt_page_stretched_card');\r\n});\r\n"],"sourceRoot":""}