{"version":3,"sources":["global.js"],"names":["String","prototype","trim","this","replace","truncate","length","substring","replaceAll","pattern","text","indexOf","capitalizeFirstLetter","charAt","toUpperCase","slice","startsWith","endsWith","isValidIsoDate","nef","validate","isIsoDate","isValidNorwegianDate","test","isValidMacAddress","isMacAddress","removeHtml","$","html","Array","sortBy","Object","defineProperty","enumerable","writable","value","sort","props","arguments","obj1","obj2","i","result","numberOfProperties","property","sortOrder","substr","a","b","apply","distinct","myArray","u","l","hasOwnProperty","push","shuffle","temp","index","arra1","ctr","Math","floor","random","Date","addSeconds","seconds","date","valueOf","setSeconds","getSeconds","addDays","days","setDate","getDate","diff","dateToCompare","ms","format","kendo","toString","toUserLocalDateString","toUserDateFriendly","toUserLocalTimeString","toUserDateTimeFriendly","Location","getQuery","window","location","search","data","split","parts","decodeURIComponent","isNaN","parse","toLowerCase","parseFloat","parseInt","ready","cbs","on","forEach","cb","extend","version","sitePath","lcid","dateFormat","dateTimeFormat","timezone","log","console","Function","bind","call","debugger","gState","klass","debug","deattachEvents","domElement","eventName","events","allEvents","_data","currentEvent","handler","off","reattachEvents","flash","options","selector","container","type","message","hideAfter","css","alertContainer","target","after","prepend","append","alertObj","i18n","translate","setTimeout","find","click","popup","buttonTemplate","$modal","oldKeyUp","bodyHtml","modal","title","showCloseButton","modalClass","bodycss","modalSize","backdrop","keyboard","buttons","isConfirmButton","onOpen","each","elem","btn","attr","addClass","class","outerHTML","o","modalTemplate","titleHtml","document","e","stopEvent","callback","keyup","which","removeAttr","remove","alert","confirmElem","text-align","font-size","focus","kendoWindow","width","visible","actions","animation","deactivate","destroy","hasClass","close","open","center","confirm","confirmButton","cancelButton","get","event","cancelBubble","returnValue","stopPropagation","preventDefault","chain","promises","next","promise","left","def","resolve","total","args","method","always","done","fail","reject","progress","notify","Deferred","convertUTCDateToLocalDate","newDate","getTime","getTimezoneOffset","offset","hours","getHours","setHours","parseJsonDate","dateString","toUserLocalTime","dateObj","utcDate","Error","userDate","toUserNumberFriendly","number","getEnumFlags","enu","values","getEnumName","formAjaxSubmit","formSelector","form","beforeSubmit","success","error","deferred","$forms","Bootstrap","prepeareFormMVC","$form1","validator","unobtrusive","settings","submitHandler","$form","$fieldset","first","FormData","prop","ui","ajax","url","contentType","processData","removeClass","$alert","ajaxFailed","xhr","responseText","statusText","status","keepAlive","id","interval","iframe","setInterval","renewSts","forceLogin","addSpacesToSentence","preserveAcronyms","isUpper","character","newText","round","precision","multiplier","pow","_regExMac","_regExIsoDate","convert","millimetersToInchs","millimeters","inchsToMillimeters","feet","metersToFeet","meters","feetToMeters","kilometersToMiles","kilometers","milesToKilometers","miles","kilogramsToPounds","kilograms","poundsToKilograms","pounds","kmhToKnots","kilometersPerHour","knotsToKmh","knots","mpsToKnots","milesPerHour","knotsToMps","celsiusToFahrenheit","celsius","fahrenheitToCelsius","fahrenheit","HexToRGB","hex","alpha","r","g","b64toBlob","b64Data","sliceSize","byteCharacters","atob","byteArrays","let","byteNumbers","charCodeAt","byteArray","Uint8Array","Blob","getAntiForgeryToken","hidden","val","name","keepBrowserActive","lockResolver","mode","navigator","locks","request","Promise","res","isMobileDevice","userAgent","opera","logging","save","lastErrorEvent","params","key","filename","lineno","colno","timeStamp","lastXhr","stack","reason","origin","fullmessage","global","beforeSend","xmlHttpRequest","token","setRequestHeader","complete","logLastXhr","jqXHR","logJavascriptErrors","removeEventListener","addEventListener","lcid_default","init","translation","SP","Res","translations","t","_translateRegex","RegExp","_getByString","s","n","k","getByLCID","_key","arg","match","regex","translated","exec","numDecSep","calendar","d","setDefaults","ignore","highlight","el","errorClass","validClass","$el","closest","parent","children","unhighlight","beenSubmitted","submit","addMethod","element","optional","methods","range","param","globalizedValue","min","max","culture","Kendo","Grid","getErrorMessage","grid","lastRequestType","cancelChanges","genericError","errors","htmlEncode","prepare","opt","persistState","enabled","persistStateCacheKey","gridSelector","hidePagingWhenOnlyHaveOnePage","pageName","timeout","overrideColumns","defaultFilter","scope","setPeristState","state","setState","dataSource","time","page","pageSize","filter","group","sessionStorage","setItem","persistStateKey","JSON","stringify","_onDataSourceReady","callbacks","loaded","sender","action","unbind","onDataSourceReady","disableAutoBind","autoBind","colDataSources","columns","col","overrideColumnValues","overrideCols","updateCols","filters","field","addDefaultFilter","logic","operator","configure","isBounded","totalPages","pager","hide","show","gridName","query","hasQuery","dataLoaded","eventsToBind","gridPersistState","removeItem","savedState","getItem","read","ColumnTemplates","userRoles","role","join","boolean","languages","lcids","lang","language","FlagName","Name","DisplayName","redirectToDetails","self","dataItem","currentTarget","decodeURI","Id","iconFont","useSvg","numGroupSep","firstDay","G","T","numberFormat","percent","currency","patterns","dateUtcToLocal","dateTimeUtcToLocal","renderPlotBand","color","valueSlot","getAxis","slot","categoryAxis","lastCategoryIndex","minCategorySlot","maxCategorySlot","line","drawing","Path","stroke","moveTo","x","y","lineTo","surface","draw","fileSizeFriendly","bytes","si","thresh","abs","units","toFixed","Editor","convertToUserDate","picker","valueInput","textbox","decimals","signalR","build","path","signalRLogLevel","LogLevel","automaticReconnect","statefulReconnect","retryConnectSeconds","showFlashMessages","messages","reconnecting","closed","connectionFailed","onStart","onConnecting","onConnected","onReconnecting","onReconnected","onClose","onError","retryTimeoutId","retryConnectAttempt","flashError","flashReconnecting","connection","hubStart","forcedDisconnect","builder","HubConnectionBuilder","configureLogging","withUrl","withAutomaticReconnect","withStatefulReconnect","onreconnecting","onreconnected","connectionId","onclose","HubConnectionState","Disconnected","connect","start","then","catch","err","disconnect","stop","clearInterval","invoke","postJSON","successResponse","failedResponse","response","textStatus","errorThrown","fn","nefImageGallery","selectors","href","nefMaxHeight","excluded","margin","forceHeight","maxHeight","height","outerHeight","heightCss","$excluded","resize","nefSideMenu","extraHeight","panels","closeIfClickedOutside","is","has","panelSelector","panel","nefLoaded","returnUrl","pathname","post","supportForm","Success","Message","nefPopup","extras","top","toolbar","directories","scrollbars","resizable","nefAppMenu","key_data","userId","appHideCss","appSearchThreshold","key_time","key_failed","renderHtml","Data","button","hostname","isMobile","searchEnabled","cssContainer","node","cssParent","rel","cssIcon","styles","Link","Color","IconUrl","pop","OpenInNewTab","fromCharCode","Icon","Title","apps","app","mouseup","trigger","dataType","hasFailed","nefSiteNav","pinned","lnkToggler","lnkPinner","pnlActions","pnlSiteNav","keyState","togglerHideTitle","toggerShowTitle","pnlNavs","classShow","classHide","classUnpinned","saveState","localStorage","loadState","pin","toogle","pinnedString","blur","toggle","info"],"mappings":"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","file":"common.min.js","sourcesContent":["/* globals $, kendo, Location */\r\n/*!\r\n Global.js\r\n Copyright 2024 Nefab\r\n Created 2017-06-20 Douglas Nordfeldt\r\n Updated 2024-12-06 Douglas Nordfeldt\r\n - From v3.0.0 requires Nef.Base.Mvc.UI v3.0.0\r\n*/\r\n'use strict';\r\n\r\nif (typeof String.prototype.trim !== 'function') {\r\n String.prototype.trim = function () {\r\n if (this === '') {\r\n return this;\r\n }\r\n return this.replace(/^\\s+|\\s+$/g, '');\r\n };\r\n}\r\nif (typeof String.prototype.truncate !== 'function') {\r\n String.prototype.truncate = function (length) {\r\n if (this === '') {\r\n return this;\r\n }\r\n\r\n if (this.length <= length) {\r\n return this;\r\n }\r\n\r\n var value = this.substring(0, length) + '...';\r\n return value;\r\n };\r\n}\r\nif (typeof String.prototype.replaceAll !== 'function') {\r\n String.prototype.replaceAll = function (pattern, replace) {\r\n if (this === '') {\r\n return this;\r\n }\r\n var text = this;\r\n while (text.indexOf(pattern) > -1) {\r\n text = text.replace(pattern, replace);\r\n }\r\n return text;\r\n };\r\n}\r\nif (typeof String.prototype.capitalizeFirstLetter !== 'function') {\r\n String.prototype.capitalizeFirstLetter = function () {\r\n if (this === '') {\r\n return this;\r\n }\r\n return this.charAt(0).toUpperCase() + this.slice(1);\r\n };\r\n}\r\nif (typeof String.prototype.startsWith !== 'function') {\r\n String.prototype.startsWith = function (pattern) {\r\n if (this === '') {\r\n return false;\r\n }\r\n return this.slice(0, pattern.length) === pattern;\r\n };\r\n}\r\nif (typeof String.prototype.endsWith !== 'function') {\r\n String.prototype.endsWith = function (pattern) {\r\n if (this === '') {\r\n return false;\r\n }\r\n return this.slice(-pattern.length) === pattern;\r\n };\r\n}\r\nif (typeof String.prototype.isValidIsoDate !== 'function') {\r\n String.prototype.isValidIsoDate = function () {\r\n return nef.validate.isIsoDate(this);\r\n };\r\n}\r\nif (typeof String.prototype.isValidNorwegianDate !== 'function') {\r\n String.prototype.isValidNorwegianDate = function () {\r\n //dd.MM.yyyy\r\n return /[0-3]{1}[\\d]{1}.[0-1]{1}[\\d]{1}.[1-2]{1}[\\d]{3}/.test(this);\r\n };\r\n}\r\nif (typeof String.prototype.isValidMacAddress !== 'function') {\r\n String.prototype.isMacAddress = function () {\r\n return nef.validate.isMacAddress(this);\r\n };\r\n}\r\nif (typeof String.prototype.removeHtml !== 'function') {\r\n String.prototype.removeHtml = function () {\r\n if (this === '') {\r\n return this;\r\n }\r\n var result = $('
').html(this).text();\r\n return result;\r\n };\r\n}\r\nif (typeof Array.prototype.sortBy !== 'function') {\r\n Object.defineProperty(Array.prototype, 'sortBy', {\r\n enumerable: false,\r\n writable: true,\r\n value: function () {\r\n\r\n var _dynamicSortMultiple = function () {\r\n /* save the arguments object as it will be overwritten note that arguments object is an array-like object consisting of the names of the properties to sort by */\r\n var props = arguments;\r\n return function (obj1, obj2) {\r\n var i = 0, result = 0, numberOfProperties = props.length;\r\n /* try getting a different result from 0 (equal) as long as we have extra properties to compare */\r\n while (result === 0 && i < numberOfProperties) {\r\n result = _dynamicSort(props[i])(obj1, obj2);\r\n i++;\r\n }\r\n return result;\r\n };\r\n };\r\n var _dynamicSort = function (property) {\r\n var sortOrder = 1;\r\n if (property[0] === \"-\") {\r\n sortOrder = -1;\r\n property = property.substr(1);\r\n }\r\n return function (a, b) {\r\n var result = a[property] < b[property] ? -1 : a[property] > b[property] ? 1 : 0;\r\n return result * sortOrder;\r\n };\r\n };\r\n\r\n\r\n return this.sort(_dynamicSortMultiple.apply(null, arguments));\r\n }\r\n });\r\n}\r\nif (typeof Array.prototype.distinct !== 'function') {\r\n Object.defineProperty(Array.prototype, 'distinct', {\r\n enumerable: false,\r\n writable: true,\r\n value: function () {\r\n\r\n var myArray = this, u = {}, a = [];\r\n\r\n for (var i = 0, l = myArray.length; i < l; ++i) {\r\n if (u.hasOwnProperty(myArray[i])) {\r\n continue;\r\n }\r\n a.push(myArray[i]);\r\n u[myArray[i]] = 1;\r\n }\r\n return a;\r\n }\r\n });\r\n}\r\nif (typeof Array.prototype.shuffle !== 'function') {\r\n Object.defineProperty(Array.prototype, 'shuffle', {\r\n enumerable: false,\r\n writable: true,\r\n value: function () {\r\n\r\n var arra1 = this;\r\n var ctr = arra1.length, temp, index;\r\n\r\n // While there are elements in the array\r\n while (ctr > 0) {\r\n // Pick a random index\r\n index = Math.floor(Math.random() * ctr);\r\n // Decrease ctr by 1\r\n ctr--;\r\n // And swap the last element with it\r\n temp = arra1[ctr];\r\n arra1[ctr] = arra1[index];\r\n arra1[index] = temp;\r\n }\r\n return arra1;\r\n }\r\n });\r\n}\r\n\r\nif (typeof Date.prototype.addSeconds !== 'function') {\r\n Date.prototype.addSeconds = function (seconds) {\r\n var date = new Date(this.valueOf());\r\n date.setSeconds(date.getSeconds() + seconds);\r\n return date;\r\n };\r\n}\r\nif (typeof Date.prototype.addDays !== 'function') {\r\n Date.prototype.addDays = function (days) {\r\n var date = new Date(this.valueOf());\r\n date.setDate(date.getDate() + days);\r\n return date;\r\n };\r\n}\r\nif (typeof Date.prototype.diff !== 'function') {\r\n Date.prototype.diff = function (dateToCompare) {\r\n var ms = (dateToCompare || new Date()) - this;\r\n var seconds = ms / 1000;\r\n return Math.floor(seconds);\r\n };\r\n}\r\nif (typeof Date.prototype.format !== 'function' && typeof kendo !== 'undefined' && kendo.toString) {\r\n Date.prototype.format = function (format) {\r\n var result = kendo.toString(this, format);\r\n return result;\r\n };\r\n}\r\nif (typeof Date.prototype.toUserLocalDateString !== 'function' && typeof kendo !== 'undefined' && kendo.toString) {\r\n Date.prototype.toUserLocalDateString = function (format) {\r\n var result = nef.toUserDateFriendly(this, format);\r\n return result;\r\n };\r\n}\r\nif (typeof Date.prototype.toUserLocalTimeString !== 'function' && typeof kendo !== 'undefined' && kendo.toString) {\r\n Date.prototype.toUserLocalTimeString = function (format) {\r\n var result = nef.toUserDateTimeFriendly(this, format);\r\n return result;\r\n };\r\n}\r\nif (typeof Date.prototype.toUserDateFriendly !== 'function' && typeof kendo !== 'undefined' && kendo.toString) {\r\n Date.prototype.toUserDateFriendly = function (format) {\r\n var result = nef.toUserDateFriendly(this, format);\r\n return result;\r\n };\r\n}\r\nif (typeof Date.prototype.toUserDateTimeFriendly !== 'function' && typeof kendo !== 'undefined' && kendo.toString) {\r\n Date.prototype.toUserDateTimeFriendly = function (format) {\r\n var result = nef.toUserDateTimeFriendly(this, format);\r\n return result;\r\n };\r\n}\r\nif (typeof Location.prototype.getQuery !== 'function') {\r\n Location.prototype.getQuery = function () {\r\n if (window.location.search === '') {\r\n return [];\r\n }\r\n var data = window.location.search.substring(1).split('&');\r\n var result = {};\r\n for (var i = 0; i < data.length; i++) {\r\n var parts = data[i].split('=');\r\n var value = decodeURIComponent(parts[1]);\r\n\r\n if (value === '') {\r\n result[parts[0]] = null;\r\n }\r\n else if (!isNaN(value)) {\r\n result[parts[0]] = value.indexOf('.') > -1 ? parseFloat(value) : parseInt(value);\r\n }\r\n else if (Date.parse(value)) {\r\n result[parts[0]] = new Date(Date.parse(value));\r\n }\r\n else if (value.toLowerCase() === 'true') {\r\n result[parts[0]] = true;\r\n } else if (value.toLowerCase() === 'false') {\r\n result[parts[0]] = false;\r\n } else {\r\n result[parts[0]] = value;\r\n }\r\n }\r\n return result;\r\n };\r\n}\r\n\r\nvar nef = window.nef || {};\r\n\r\nif (!nef.ready) {\r\n nef.ready = (function () {\r\n\r\n var cbs = [];\r\n //var triggered = false;\r\n\r\n $(kendo).on('nefKendoReady', function () {\r\n $().ready(function () {\r\n //triggered = true;\r\n cbs.forEach(function (cb) {\r\n cb();\r\n });\r\n });\r\n });\r\n\r\n return function (cb) {\r\n cbs.push(cb);\r\n //if (triggered) {\r\n // cb();\r\n //} else {\r\n // cbs.push(cb);\r\n //}\r\n };\r\n })();\r\n}\r\n\r\nnef = $.extend(true, {\r\n version: '3.2.4',\r\n sitePath: '/',\r\n lcid: 1033,\r\n dateFormat: 'yyyy-MM-dd',\r\n dateTimeFormat: 'yyyy-MM-dd HH:mm',\r\n timezone: 0,\r\n log: function () {\r\n if (window.console && console.log) {\r\n return Function.prototype.bind.call(console.log, console);\r\n } else {\r\n return function () { };\r\n }\r\n }(),\r\n debugger: function (gState, klass) {\r\n\r\n this.debug = {};\r\n\r\n if (window.console && console.log) {\r\n this.debug.log = console.log.bind(window.console);\r\n } else {\r\n this.debug.log = function () { };\r\n }\r\n\r\n //if (gState && klass.isDebug) {\r\n // for (var m in console)\r\n // if (typeof console[m] == 'function')\r\n // this.debug[m] = console[m].bind(window.console, klass.toString() + \": \")\r\n //} else {\r\n // for (var m in console)\r\n // if (typeof console[m] == 'function')\r\n // this.debug[m] = function () { }\r\n //}\r\n return this.debug;\r\n },\r\n deattachEvents: function (domElement, eventName) {\r\n\r\n var events = [];\r\n var allEvents = $._data(domElement, 'events');\r\n var currentEvent = allEvents != null ? allEvents[eventName] : null;\r\n\r\n if (currentEvent) {\r\n for (var i = 0; i < currentEvent.length; i++) {\r\n events.push(currentEvent[i].handler);\r\n }\r\n }\r\n\r\n $(domElement).off(eventName);\r\n\r\n return events;\r\n },\r\n reattachEvents: function (domElement, eventName, events) {\r\n $(domElement).off(eventName);\r\n if (events) {\r\n for (var i = 0; i < events.length; i++) {\r\n $(domElement).on(eventName, events[i]);\r\n }\r\n }\r\n },\r\n flash: function (options) {\r\n\r\n options = $.extend({\r\n selector: '#nef_flash_wrapper',\r\n container: '
',\r\n type: 'danger',\r\n message: '',\r\n hideAfter: null,\r\n css: null\r\n }, options);\r\n\r\n options.container = options.container.replace('SELECTOR', options.selector.replace('#', ''));\r\n\r\n var alertContainer = $(options.selector);\r\n if (!alertContainer[0]) {\r\n var target = $('body .breadcrumb');\r\n if (target[0]) {\r\n target.after(options.container);\r\n } else {\r\n target = $('body .nef-content');\r\n if (target[0]) {\r\n target.prepend(options.container);\r\n } else {\r\n $('body').append(options.container);\r\n }\r\n }\r\n alertContainer = $(options.selector);\r\n }\r\n\r\n var css = 'alert alert-' + options.type + ' alert-dismissible show fade';\r\n\r\n if (options.css && options.css !== '') {\r\n css += ' ' + options.css;\r\n }\r\n\r\n var alertObj = $('
' + nef.i18n.translate(options.message) + '
');\r\n alertContainer.append(alertObj);\r\n\r\n if (options.hideAfter && options.hideAfter > 0) {\r\n window.setTimeout(function () {\r\n alertObj.find('.btn-close').click();\r\n }, options.hideAfter);\r\n }\r\n\r\n return alertObj;\r\n },\r\n popup: function (options) {\r\n var bootstrap_enabled = typeof $().modal === 'function';\r\n if (bootstrap_enabled) {\r\n\r\n options = $.extend({\r\n html: '',\r\n title: '',\r\n showCloseButton: false,\r\n modalClass: null,\r\n bodycss: null,\r\n modalSize: '',\r\n backdrop: 'static',\r\n keyboard: false,\r\n buttons: [{ text: '{t(Common.Ok)}', isConfirmButton: true }],\r\n onOpen: null\r\n }, options);\r\n\r\n var buttonTemplate = '';\r\n $.each(options.buttons, function (i, elem) {\r\n var btn = $('');\r\n\r\n var $modal = $(o.modalTemplate);\r\n\r\n if (options.title !== '') {\r\n var titleHtml = '
';\r\n titleHtml += '

' + options.title + '

';\r\n if (options.showCloseButton) {\r\n titleHtml += '';\r\n }\r\n titleHtml += '
';\r\n $modal.find('.modal-content').prepend(nef.i18n.translate(titleHtml));\r\n }\r\n\r\n if (buttonTemplate && buttonTemplate !== '') {\r\n $modal.find('.modal-content').append('
' + nef.i18n.translate(buttonTemplate) + '
');\r\n }\r\n\r\n var oldKeyUp = nef.deattachEvents(document, 'keyup');\r\n\r\n $.each(options.buttons, function (i, elem) {\r\n $modal.find('.modal-footer .btn' + i.toString()).click(function (e) {\r\n nef.stopEvent(e);\r\n nef.reattachEvents(document, 'keyup', oldKeyUp);\r\n if (elem.callback && typeof elem.callback === 'function') {\r\n elem.callback($modal);\r\n }\r\n else {\r\n $modal.modal('hide');\r\n }\r\n });\r\n });\r\n\r\n\r\n $(document).keyup(function (e) {\r\n if (e.which === 13) {\r\n $modal.find('.modal-footer .btn-confirm').click();\r\n }\r\n });\r\n\r\n if (options.bodycss && typeof options.bodycss === 'object') {\r\n $modal.find('.modal-body').css(options.bodycss);\r\n }\r\n else {\r\n $modal.find('.modal-body').removeAttr('style');\r\n }\r\n\r\n $modal.modal({\r\n backdrop: options.backdrop,\r\n keyboard: options.keyboard\r\n });\r\n\r\n if (options.onOpen && typeof options.onOpen === 'function') {\r\n $modal.on('shown.bs.modal', function (e) {\r\n options.onOpen($(this));\r\n $(this).modal('handleUpdate');\r\n });\r\n }\r\n\r\n $modal.on('hidden.bs.modal', function (e) {\r\n $(this).modal('dispose').remove();\r\n });\r\n\r\n var bodyHtml = typeof options.html === 'string' ? nef.i18n.translate(options.html) : options.html;\r\n $modal.find('.modal-body').html(bodyHtml);\r\n $modal.modal('show');\r\n return $modal;\r\n }\r\n else {\r\n console.log('nef.popup was called but the bootstrap modal component is not loaded');\r\n }\r\n },\r\n alert: function (message, callback) {\r\n\r\n message = nef.i18n.translate(message);\r\n\r\n var bootstrap_enabled = typeof $().modal === 'function';\r\n if (bootstrap_enabled) {\r\n message = message.replaceAll('\\r\\n', '
').replaceAll('\\n', '
');\r\n var $modal = this.popup({\r\n html: message,\r\n bodycss: { 'text-align': 'center', 'font-size': '20px' },\r\n onOpen: function (modal) {\r\n $(modal).find('.modal-footer .btn-confirm').focus();\r\n }\r\n });\r\n return $modal;\r\n } else if (!window.kendo) {\r\n window.alert(message);\r\n callback && typeof callback === 'function' && callback();\r\n }\r\n else {\r\n message = message.replaceAll('\\r\\n', '
').replaceAll('\\n', '
');\r\n var html = nef.i18n.translate('

' + message + '

');\r\n var confirmElem = $('
');\r\n confirmElem.html(html);\r\n confirmElem.kendoWindow({\r\n width: 1000,\r\n //title: nef.i18n.get('Common.Confirm'),\r\n visible: false,\r\n actions: ['Close'],\r\n animation: false,\r\n deactivate: function () { this.destroy(); }\r\n });\r\n\r\n confirmElem.on('click', 'button', function (e) {\r\n if ($(this).hasClass('btnOk')) {\r\n callback && typeof callback === 'function' && callback();\r\n }\r\n\r\n confirmElem.data('kendoWindow').close();\r\n return false;\r\n });\r\n\r\n confirmElem.data('kendoWindow').open().center();\r\n }\r\n },\r\n confirm: function (message, callback, confirmButton, cancelButton) {\r\n if (!callback)\r\n return;\r\n\r\n confirmButton = confirmButton || '{t(Common.Confirm)}';\r\n cancelButton = cancelButton || '{t(Common.Cancel)}';\r\n message = nef.i18n.translate(message);\r\n\r\n var bootstrap_enabled = typeof $().modal === 'function';\r\n if (bootstrap_enabled) {\r\n message = message.replaceAll('\\r\\n', '
').replaceAll('\\n', '
');\r\n var $modal = this.popup({\r\n html: message,\r\n bodycss: { 'text-align': 'center', 'font-size': '20px' },\r\n onOpen: function (modal) {\r\n $(modal).find('.modal-footer .btn-confirm').focus();\r\n },\r\n buttons: [{\r\n text: cancelButton\r\n },\r\n {\r\n text: confirmButton,\r\n callback: function (modal) {\r\n $(modal).modal('hide');\r\n callback();\r\n },\r\n isConfirmButton: true\r\n }]\r\n });\r\n return $modal;\r\n } else if (!window.kendo) {\r\n if (window.confirm(message)) {\r\n callback();\r\n }\r\n }\r\n else {\r\n var html = nef.i18n.translate('

' + message + '

 
');\r\n var confirmElem = $('
');\r\n confirmElem.html(html);\r\n confirmElem.kendoWindow({\r\n width: 1000,\r\n title: nef.i18n.get('Common.Confirm'),\r\n visible: false,\r\n actions: ['Close'],\r\n animation: false,\r\n deactivate: function () { this.destroy(); }\r\n });\r\n\r\n confirmElem.on('click', 'button', function (e) {\r\n if ($(this).hasClass('lnkSave')) {\r\n callback();\r\n }\r\n\r\n confirmElem.data('kendoWindow').close();\r\n return false;\r\n });\r\n\r\n confirmElem.data('kendoWindow').open().center();\r\n }\r\n },\r\n stopEvent: function (e) {\r\n if (!e) { e = window.event; }\r\n\r\n //e.cancelBubble is supported by IE - this will kill the bubbling process.\r\n e.cancelBubble = true;\r\n e.returnValue = false;\r\n\r\n //e.stopPropagation works only in Firefox.\r\n if (e.stopPropagation) {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n }\r\n return false;\r\n },\r\n chain: function (promises) {\r\n var def = $.Deferred();\r\n var total = promises ? promises.length : 0;\r\n var left = total;\r\n\r\n var next = function (result) {\r\n if (left <= 0) {\r\n def.resolve(result);\r\n return;\r\n }\r\n var index = total - left;\r\n var promise = promises[index];\r\n if (result) {\r\n promise.args = promise.args || [];\r\n promise.args.push(result);\r\n }\r\n promise.method.apply(this, promise.args)\r\n .always(function () {\r\n left--;\r\n }).done(function (result) {\r\n next(result);\r\n }).fail(function (result) {\r\n def.reject(result);\r\n }).progress(function (result) {\r\n def.notify(result);\r\n });\r\n };\r\n next(null);\r\n return def.promise();\r\n },\r\n convertUTCDateToLocalDate: function (date) {\r\n var newDate = new Date(date.getTime() + date.getTimezoneOffset() * 60 * 1000);\r\n var offset = date.getTimezoneOffset() / 60;\r\n var hours = date.getHours();\r\n newDate.setHours(hours - offset);\r\n return newDate;\r\n },\r\n parseJsonDate: function (dateString) {\r\n var value = dateString.replace('/Date(', '').replace(')/', '');\r\n var date = new Date(parseInt(value, 10));\r\n return date;\r\n },\r\n toUserLocalTime: function (date) {\r\n if (!date) {\r\n throw new Error('date cannot be NULL!');\r\n }\r\n var dateObj = typeof date === 'string' ? new Date(date) : date;\r\n\r\n // First set it back to UTC:\r\n var offset = dateObj.getTimezoneOffset() * 60;\r\n var utcDate = dateObj.addSeconds(offset);\r\n\r\n // Second add user timezone:\r\n var seconds = nef.timezone * 60 * 60;\r\n utcDate = utcDate.addSeconds(seconds);\r\n\r\n return utcDate;\r\n },\r\n toUserDateFriendly: function (date, format) {\r\n if (!date) {\r\n return '';\r\n }\r\n\r\n var dateObj = typeof date === 'string' ? new Date(date) : date;\r\n var userDate = nef.toUserLocalTime(dateObj);\r\n\r\n format = format || nef.dateFormat;\r\n\r\n var result = userDate.format(format);\r\n return result;\r\n },\r\n toUserDateTimeFriendly: function (date, format) {\r\n return nef.toUserDateFriendly(date, format || nef.dateTimeFormat);\r\n },\r\n toUserLocalTimeString: function (date, format) {\r\n if (!date) {\r\n return '';\r\n }\r\n var dateObj = typeof date === 'string' ? new Date(date) : date;\r\n\r\n var userDate = nef.toUserLocalTime(dateObj);\r\n var offset = userDate.getTimezoneOffset() * 60;\r\n var utcDate = dateObj.addSeconds(offset);\r\n\r\n format = format || nef.dateTimeFormat;\r\n var result = '' + userDate.format(format) + '';\r\n return result;\r\n },\r\n toUserLocalDateString: function (date, format) {\r\n if (!date) {\r\n return '';\r\n }\r\n var dateObj = typeof date === 'string' ? new Date(date) : date;\r\n\r\n var userDate = nef.toUserLocalTime(dateObj);\r\n var offset = userDate.getTimezoneOffset() * 60;\r\n var utcDate = dateObj.addSeconds(offset);\r\n\r\n format = format || nef.dateFormat;\r\n var result = '' + userDate.format(format) + '';\r\n\r\n return result;\r\n },\r\n toUserNumberFriendly: function (number, format) {\r\n\r\n if (number === null) {\r\n return '';\r\n }\r\n\r\n var isDecimalNumber = number % 1 != 0;\r\n format = format || (isDecimalNumber ? 'n' : 'n0');\r\n\r\n var result = kendo.toString(number, format);\r\n if (result && result !== '' && result.indexOf(' ') > -1) {\r\n return '' + result + '';\r\n }\r\n\r\n return result;\r\n },\r\n getEnumFlags: function (enu, value) {\r\n var values = [];\r\n for (var i in enu) {\r\n if (enu[i] > 0 && (value & enu[i]) === enu[i]) {\r\n values.push(i);\r\n }\r\n }\r\n if (values.length === 0) {\r\n values.push('None');\r\n }\r\n return values;\r\n },\r\n getEnumName: function (enu, value) {\r\n for (var i in enu) {\r\n if (enu[i] === value) {\r\n return i;\r\n }\r\n }\r\n return 'None';\r\n },\r\n formAjaxSubmit: function (options) {\r\n\r\n options = $.extend({\r\n debug: false,\r\n formSelector: '.nef-content form',\r\n form: null,\r\n modal: null,\r\n beforeSubmit: null,\r\n success: null,\r\n error: null\r\n }, options);\r\n\r\n var log = function () {\r\n if (options.debug) {\r\n return Function.prototype.bind.call(console.log, nef, 'nef.formAjaxSubmit:');\r\n } else {\r\n return function () { };\r\n }\r\n }();\r\n\r\n var deferred = $.Deferred();\r\n\r\n var $forms = options.form ? $(options.form) : $(options.formSelector);\r\n if (!$forms[0]) {\r\n nef.log('nef.formAjaxSubmit:', 'Cannot find the form \"' + options.formSelector + '\"!');\r\n return false;\r\n }\r\n\r\n nef.Bootstrap.prepeareFormMVC({\r\n formSelector: $forms\r\n });\r\n\r\n $forms.each(function () {\r\n\r\n var $form1 = $(this);\r\n\r\n //Very important that this run before .validate()!!\r\n $.validator.unobtrusive.parse($form1);\r\n var validator = $form1.validate();\r\n\r\n validator.settings.submitHandler = function (form) {\r\n log('form submitHandler');\r\n\r\n var $form = $(form);\r\n var $fieldset = $form.find('fieldset').first();\r\n var data = new FormData(form);\r\n\r\n $fieldset.prop('disabled', true);\r\n kendo.ui.progress($form, true);\r\n\r\n if (typeof options.beforeSubmit === 'function') {\r\n options.beforeSubmit(data, form);\r\n }\r\n\r\n $.ajax({\r\n url: $form.attr('action'),\r\n type: $form.attr('method'),\r\n data: data,\r\n contentType: false,\r\n processData: false,\r\n success: function (result) {\r\n log('success!', result);\r\n $fieldset.prop('disabled', false);\r\n kendo.ui.progress($form, false);\r\n\r\n if (options.modal) {\r\n if (result.success) {\r\n options.modal.modal('hide');\r\n nef.flash({\r\n message: result.message,\r\n type: 'success'\r\n });\r\n } else {\r\n $form.find('.alert').html(result.message).removeClass('validation-summary-valid').addClass('validation-summary-errors');\r\n }\r\n }\r\n\r\n if (typeof options.success === 'function') {\r\n options.success(result, form);\r\n }\r\n\r\n deferred.resolve(result, form);\r\n },\r\n error: function (result) {\r\n console.log('nef.formAjaxSubmit:', 'Error submitting the form!!!', result);\r\n $fieldset.prop('disabled', false);\r\n kendo.ui.progress($form, false);\r\n\r\n if (options.modal) {\r\n var error = result.message || result;\r\n var $alert = $form.find('.alert');\r\n if ($alert[0]) {\r\n $alert.html(error).removeClass('validation-summary-valid').addClass('validation-summary-errors');\r\n }\r\n else {\r\n nef.alert(error);\r\n }\r\n }\r\n\r\n if (typeof options.error === 'function') {\r\n options.error(result, form);\r\n }\r\n\r\n deferred.reject(result, form);\r\n }\r\n });\r\n\r\n return false;\r\n };\r\n\r\n });\r\n\r\n return deferred.promise();\r\n },\r\n ajaxFailed: function (xhr) {\r\n console.log('AJAX ERROR!', xhr, this);\r\n var message = xhr.responseText && xhr.responseText !== '' ? xhr.responseText : xhr.statusText;\r\n nef.alert(nef.i18n.get('Common.GenericError') + '

' + xhr.status + ' ' + message);\r\n },\r\n keepAlive: function (options) {\r\n\r\n options = $.extend({\r\n id: '',\r\n url: '',\r\n keepAlive: false,\r\n interval: 1000 * 60 * 10\r\n }, options);\r\n\r\n var iframe = $('');\r\n\r\n $('body').append(iframe);\r\n iframe.attr('src', options.url);\r\n\r\n if (options.keepAlive) {\r\n window.setInterval(function () {\r\n //console.log('nef.keepAlive: Pinging \"' + options.id + '\" at \"' + options.url + '\"...');\r\n iframe.attr('src', options.url);\r\n }, options.interval);\r\n }\r\n },\r\n renewSts: function (keepAlive) {\r\n var options = {\r\n id: 'nef-sts-renewStsSession',\r\n url: '/login/alive',\r\n keepAlive: keepAlive,\r\n };\r\n nef.keepAlive(options);\r\n },\r\n forceLogin: function (keepAlive) {\r\n\r\n //http://www.cloudidentity.com/blog/2016/07/25/controlling-a-web-apps-session-duration-2/\r\n var options = {\r\n id: 'nef-sts-forceLogin',\r\n url: nef.sitePath + 'Base/Account/ForcedSignIn',\r\n keepAlive: keepAlive,\r\n };\r\n nef.keepAlive(options);\r\n },\r\n addSpacesToSentence: function (text, preserveAcronyms) {\r\n if (!text || text === '')\r\n return text;\r\n\r\n var isUpper = function (character) {\r\n if (!isNaN(character))\r\n return true;\r\n\r\n return character == character.toUpperCase();\r\n };\r\n\r\n var newText = text[0];\r\n\r\n for (var i = 1; i < text.length; i++) {\r\n if (isUpper(text[i])) {\r\n\r\n if (\r\n (text[i - 1] != ' ' && !isUpper(text[i - 1]))\r\n ||\r\n (preserveAcronyms && isUpper(text[i - 1]) && i < text.length - 1 && !isUpper(text[i + 1]))\r\n ) {\r\n newText += ' ';\r\n }\r\n\r\n }\r\n newText += text[i];\r\n\r\n }\r\n return newText;\r\n },\r\n round: function (value, precision) {\r\n var multiplier = Math.pow(10, precision || 0);\r\n return Math.round(value * multiplier) / multiplier;\r\n },\r\n validate: {\r\n _regExMac: /^[0-9a-f]{1,2}([\\.:-])(?:[0-9a-f]{1,2}\\1){4}[0-9a-f]{1,2}$/i,\r\n isMacAddress: function (value) {\r\n if (!value || value === '') {\r\n return false;\r\n }\r\n var result = this._regExMac.test(value);\r\n return result;\r\n },\r\n _regExIsoDate: /^[1-2]{1}[\\d]{3}-[0-1]{1}[\\d]{1}-[0-3]{1}[\\d]{1}$/,\r\n isIsoDate: function (value) {\r\n if (!value || value === '') {\r\n return false;\r\n }\r\n var result = this._regExIsoDate.test(value);\r\n return result;\r\n }\r\n },\r\n convert: {\r\n millimetersToInchs: function (millimeters) {\r\n return millimeters / 25.4;\r\n },\r\n inchsToMillimeters: function (feet) {\r\n return feet * 25.4;\r\n },\r\n metersToFeet: function (meters) {\r\n return meters / 0.3048;\r\n },\r\n feetToMeters: function (feet) {\r\n return feet * 0.3048;\r\n },\r\n kilometersToMiles: function (kilometers) {\r\n return kilometers / 1.609344;\r\n },\r\n milesToKilometers: function (miles) {\r\n return miles * 1.609344;\r\n },\r\n kilogramsToPounds: function (kilograms) {\r\n return kilograms / 0.45359237;\r\n },\r\n poundsToKilograms: function (pounds) {\r\n return pounds * 0.45359237;\r\n },\r\n kmhToKnots: function (kilometersPerHour) {\r\n return kilometersPerHour / 1.852;\r\n },\r\n knotsToKmh: function (knots) {\r\n return knots * 1.852;\r\n },\r\n mpsToKnots: function (milesPerHour) {\r\n return milesPerHour / 1.150779448;\r\n },\r\n knotsToMps: function (knots) {\r\n return knots * 1.150779448;\r\n },\r\n celsiusToFahrenheit: function (celsius) {\r\n var fahrenheit = (celsius * 9) / 5 + 32;\r\n return fahrenheit;\r\n },\r\n fahrenheitToCelsius: function (fahrenheit) {\r\n var celsius = (fahrenheit - 32) * 5 / 9;\r\n return celsius;\r\n },\r\n HexToRGB: function (hex, alpha) {\r\n hex = hex.replace('#', '');\r\n var r = parseInt(hex.substring(0, 2), 16);\r\n var g = parseInt(hex.substring(2, 4), 16);\r\n var b = parseInt(hex.substring(4, 6), 16);\r\n\r\n var result = '';\r\n if (alpha) {\r\n result = 'rgba(' + r + ',' + g + ',' + b + ',' + alpha + ')';\r\n } else {\r\n result = 'rgb(' + r + ',' + g + ',' + b + ')';\r\n }\r\n return result;\r\n },\r\n b64toBlob: function (b64Data, contentType = '', sliceSize = 512) {\r\n const byteCharacters = atob(b64Data);\r\n const byteArrays = [];\r\n\r\n for (let offset = 0; offset < byteCharacters.length; offset += sliceSize) {\r\n const slice = byteCharacters.slice(offset, offset + sliceSize);\r\n\r\n const byteNumbers = new Array(slice.length);\r\n for (let i = 0; i < slice.length; i++) {\r\n byteNumbers[i] = slice.charCodeAt(i);\r\n }\r\n\r\n const byteArray = new Uint8Array(byteNumbers);\r\n byteArrays.push(byteArray);\r\n }\r\n\r\n const blob = new Blob(byteArrays, { type: contentType });\r\n return blob;\r\n },\r\n },\r\n getAntiForgeryToken: function () {\r\n var hidden = $('#nef-AntiForgeryToken input:hidden');\r\n if (hidden) {\r\n return {\r\n value: hidden.val(),\r\n name: hidden.attr('name')\r\n };\r\n }\r\n return null;\r\n },\r\n keepBrowserActive: function (options) {\r\n\r\n options = $.extend({\r\n name: 'nef.keepBrowserActiveLock',\r\n mode: 'shared',\r\n }, options);\r\n\r\n var lockResolver;\r\n if (navigator && navigator.locks && navigator.locks.request) {\r\n\r\n const promise = new Promise((res) => {\r\n lockResolver = res;\r\n });\r\n\r\n navigator.locks.request(options.name, { mode: options.mode }, () => {\r\n return promise;\r\n });\r\n }\r\n return lockResolver;\r\n },\r\n isMobileDevice: function () {\r\n var userAgent = navigator.userAgent || window.opera;\r\n var isMobile = !userAgent || userAgent.indexOf('Mobi') > -1;\r\n return isMobile;\r\n },\r\n logging: {\r\n save: function (event) {\r\n\r\n nef.logging.lastErrorEvent = event;\r\n\r\n const data = {\r\n url: location.toString(),\r\n filename: event.filename && event.filename !== '' ? event.filename : 'inline',\r\n lineno: event.lineno,\r\n colno: event.colno,\r\n type: event.type,\r\n timeStamp: event.timeStamp ? nef.round(event.timeStamp) : -1,\r\n name: event.name,\r\n //triggeredBy: event.isTrusted ? 'browser' : 'script',\r\n //message: event.message,\r\n //stack: event.stack,\r\n };\r\n\r\n const lastXhr = nef.logging.lastXhr;\r\n if (lastXhr) {\r\n const params = lastXhr.data && lastXhr.data !== '' ? lastXhr.data.truncate(200) : '';\r\n const timeStamp = lastXhr.timeStamp ? `${nef.round(new Date().getTime() - lastXhr.timeStamp)}ms ago to` : 'to';\r\n data.lastXhr = `${lastXhr.type} ${timeStamp} '${lastXhr.url}' data=${params}`;\r\n }\r\n\r\n data.message = event.message;\r\n data.stack = event.stack;\r\n\r\n const error = event.error;\r\n if (error) {\r\n data.name = error.name;\r\n data.message = error.message;\r\n data.stack = error.stack;\r\n }\r\n\r\n const reason = event.reason;\r\n if (reason) {\r\n data.name = reason.name;\r\n data.message = reason.message;\r\n data.stack = reason.stack;\r\n }\r\n\r\n /*\r\n Getting a lot of errors like this that we cannot do anything about:\r\n stack: TypeError: Cannot read properties of null (reading 'type')\r\n at Ln. (chrome-extension://egjidjbpglichdcondbcbdnbeeppgdph/inpage.js:247:166515)\r\n at Generator.next ()\r\n at ae (chrome-extension://egjidjbpglichdcondbcbdnbeeppgdph/inpage.js:247:165403)\r\n\r\n */\r\n if (data.stack && data.stack !== '' && data.stack.indexOf('chrome-extension://') > -1){\r\n return;\r\n }\r\n\r\n const path = data.url.replace(location.origin, '').replace(nef.sitePath, '');\r\n const message = path + ': ' + data.message;\r\n\r\n let fullmessage = '';\r\n for (let key in data) {\r\n fullmessage += `${key}: ${data[key]}\\r\\n`;\r\n }\r\n\r\n //console.warn('nef[' + data.type + ']: ' + data.message, event, fullmessage);\r\n\r\n $(document).ready(function () {\r\n $.ajax({\r\n url: nef.sitePath + 'Base/Errors/JsError',\r\n method: 'POST',\r\n data: {\r\n message: message,\r\n data: fullmessage\r\n },\r\n global: false,\r\n beforeSend: function (xmlHttpRequest) {\r\n const token = nef.getAntiForgeryToken();\r\n if (token) {\r\n xmlHttpRequest.setRequestHeader(token.name.replace('__', ''), token.value);\r\n }\r\n },\r\n complete: function () { }\r\n });\r\n });\r\n },\r\n logLastXhr: function (event, jqXHR, settings) {\r\n nef.logging.lastXhr = {\r\n url: settings.url,\r\n type: settings.type,\r\n data: settings.data,\r\n timeStamp: event.timeStamp\r\n };\r\n },\r\n logJavascriptErrors: function () {\r\n\r\n $(document)\r\n .off('ajaxSend', nef.logging.logLastXhr)\r\n .on('ajaxSend', nef.logging.logLastXhr)\r\n ;\r\n\r\n window.removeEventListener('error', nef.logging.save);\r\n window.removeEventListener('unhandledrejection', nef.logging.save);\r\n\r\n window.addEventListener('error', nef.logging.save);\r\n window.addEventListener('unhandledrejection', nef.logging.save);\r\n }\r\n }\r\n}, nef);\r\n\r\nnef.logging.logJavascriptErrors();\r\n\r\n\r\n\r\nnef.i18n = $.extend(true, {\r\n debug: false,\r\n lcid_default: 1033,\r\n init: function (lcid) {\r\n\r\n var log = function () {\r\n if (nef.i18n.debug) {\r\n return Function.prototype.bind.call(nef.log, nef, 'nef.i18n.init:');\r\n } else {\r\n return function () { };\r\n }\r\n }();\r\n\r\n log('setting language to \"' + lcid + '\"...');\r\n\r\n if (!lcid) {\r\n if (window.SP && window.SP.Res && window.SP.Res.lcid) {\r\n lcid = parseInt(window.SP.Res.lcid, 10);\r\n } else {\r\n lcid = nef.lcid || this.lcid_default;\r\n }\r\n }\r\n else if (typeof lcid === 'string') {\r\n switch (lcid) {\r\n case 'sv-SE':\r\n lcid = 1053;\r\n break;\r\n //case 'en-US':\r\n default:\r\n lcid = 1033;\r\n break;\r\n }\r\n\r\n log('correct LCID value is ' + lcid);\r\n }\r\n\r\n if (this.translations[lcid]) {\r\n //var translation = this.lcid_default !== lcid ? nef.copyMerge(this.translations[this.lcid_default], this.translations[lcid], true) : this.translations[lcid];\r\n var translation = this.translations[lcid];\r\n //Douglas [2019-03-12]: I this really needed?\r\n //if (this.lcid_default !== lcid) {\r\n // $.extend(true, translation, this.translations[this.lcid_default], this.translations[lcid]);\r\n //}\r\n log('changed language to ' + lcid + '!');\r\n nef.lcid = lcid;\r\n nef.t = translation;\r\n }\r\n },\r\n _translateRegex: RegExp(/\\{t\\(([\\w\\.]+)\\)([a-z]{0,1})\\}/),\r\n _getByString: function (o, s) {\r\n s = s.replace(/\\[(\\w+)\\]/g, '.$1'); // convert indexes to properties\r\n s = s.replace(/^\\./, ''); // strip a leading dot\r\n var a = s.split('.');\r\n for (var i = 0, n = a.length; i < n; ++i) {\r\n var k = a[i];\r\n if (k in o) {\r\n o = o[k];\r\n } else {\r\n return;\r\n }\r\n }\r\n return o;\r\n },\r\n get: function (key, params) {\r\n return this.getByLCID(nef.lcid, key, params);\r\n },\r\n getByLCID: function (lcid, key, params) {\r\n /*\r\n console.log('Test1: ' + nef.translate('common.save'));\r\n // Test1: Spara\r\n console.log('Test2: ' + nef.translate('common.complex', ['Douglas', 'winner']));\r\n // Test2: Douglas är en winner!\r\n console.log('Test3: ' + nef.translate('common.complex', ['Douglas', '||common.winner']));\r\n // Test3: Douglas är en Vinnare!\r\n */\r\n var log = function () {\r\n if (nef.i18n.debug) {\r\n return Function.prototype.bind.call(nef.log, nef, 'nef.i18n.getByLCID [' + lcid + ']:');\r\n } else {\r\n return function () { };\r\n }\r\n }();\r\n\r\n if (!this.translations[lcid]) {\r\n log('LCID \"' + lcid + '\" is not translated! Using \"' + this.lcid_default + '\" instead.');\r\n lcid = this.lcid_default;\r\n }\r\n\r\n var _key = lcid + '.' + key;\r\n\r\n var value = this.translations[lcid][key];\r\n if (!value && lcid !== this.lcid_default) {\r\n log('Not found \"' + _key + '\", trying with default LCID \"' + this.lcid_default + '\" instead.');\r\n value = this._getByString(this.translations, this.lcid_default + '.' + key);\r\n }\r\n\r\n if (!value) {\r\n log('Not found \"' + _key + '\"!');\r\n value = _key;\r\n } else {\r\n if (params && params.length > 0) {\r\n var i = 0, arg;\r\n for (i = 0; i < params.length; i++) {\r\n arg = params[i];\r\n if (typeof arg === 'string' && arg.startsWith('||')) {\r\n arg = this.getByLCID(lcid, arg.replace('||', ''));\r\n }\r\n value = value.replaceAll('{' + i + '}', arg);\r\n }\r\n }\r\n }\r\n\r\n return value;\r\n },\r\n translate: function (text) {\r\n /* \r\n var text = 'detta är min text {t(common.save)} som ska {t(common.ok)} översättas';\r\n */\r\n\r\n if (!text || text === '')\r\n return '';\r\n\r\n var log = function () {\r\n if (nef.i18n.debug) {\r\n return Function.prototype.bind.call(nef.log, nef, 'nef.translate:');\r\n } else {\r\n return function () { };\r\n }\r\n }();\r\n\r\n log('Translating: ' + text);\r\n var regex = this._translateRegex;\r\n var match, translated = '', index = 0;\r\n while (index < 9999 && (match = regex.exec(text))) {\r\n log('Found ' + match[0], match);\r\n translated = this.get(match[1]);\r\n if (match[2]) {\r\n if (match[2] === 'l') {\r\n translated = translated.toLowerCase();\r\n } else if (match[2] === 'u') {\r\n translated = translated.toUpperCase();\r\n }\r\n }\r\n text = text.replaceAll(match[0], translated);\r\n index++;\r\n }\r\n log(index, text);\r\n return text;\r\n },\r\n translations: null\r\n}, nef.i18n);\r\n\r\nnef.i18n.init();\r\n\r\n\r\n\r\nnef.validator = $.extend(true, {\r\n init: function (options) {\r\n\r\n options = $.extend({\r\n numDecSep: null,\r\n calendar: {\r\n d: null,\r\n }\r\n }, options);\r\n\r\n // Override the default ignore setting after including jquery.validate.unobtrusive.min.js to enable validation of hidden elements.For instance, widgets like the Kendo UI DropDownList and NumericTextBox have a hidden input to keep the value.\r\n /*$.validator.setDefaults({ ignore: '' });*/\r\n\r\n $.validator.setDefaults({\r\n // Override the default ignore setting after including jquery.validate.unobtrusive.min.js to enable validation of hidden elements.For instance, widgets like the Kendo UI DropDownList and NumericTextBox have a hidden input to keep the value.\r\n ignore: '',\r\n //errorContainer: '.validation-summary-valid',\r\n //errorContainer: '',\r\n highlight: function (el, errorClass, validClass) {\r\n //console.log(el.id, errorClass, validClass, el);\r\n var $el = $(el);\r\n $el.addClass('border-danger').removeClass('border-success');\r\n $el.closest('.form-group').addClass('has-error');\r\n\r\n if ($el.hasClass('k-input-inner')) {\r\n $el.parent().addClass('border-danger').removeClass('border-success');\r\n } else {\r\n var parent = $el.parent();\r\n if (parent.hasClass('k-widget')) {\r\n parent.children(':first').addClass('border-danger').removeClass('border-success');\r\n }\r\n else if (parent.hasClass('k-picker')) {\r\n parent.addClass('border-danger').removeClass('border-success');\r\n }\r\n }\r\n },\r\n unhighlight: function (el, errorClass, validClass) {\r\n var $el = $(el);\r\n $el.removeClass('border-danger').addClass('border-success');\r\n $el.closest('.form-group').removeClass('has-error');\r\n\r\n if ($el.hasClass('k-input-inner')) {\r\n $el.parent().removeClass('border-danger').addClass('border-success');\r\n } else {\r\n var parent = $el.parent();\r\n if (parent.hasClass('k-widget')) {\r\n parent.children(':first').removeClass('border-danger').addClass('border-success');\r\n } else if (parent.hasClass('k-picker')) {\r\n parent.removeClass('border-danger').addClass('border-success');\r\n }\r\n }\r\n },\r\n submitHandler: function (form) {\r\n var $form = $(form);\r\n $form.find('input[type=\"submit\"], button[type=\"submit\"]').prop('disabled', true);\r\n kendo.ui.progress($form, true);\r\n\r\n // Prevent double submission\r\n if (!this.beenSubmitted) {\r\n this.beenSubmitted = true;\r\n form.submit();\r\n }\r\n }\r\n //invalidHandler: function (event, validator) {\r\n // // Code to run when form is invalid\r\n // // You can display a custom message or take other actions\r\n // console.log('invalidHandler', event, validator);\r\n //}\r\n });\r\n\r\n if (options.calendar && options.calendar.d && options.calendar.d !== '') {\r\n\r\n var dateFormat = options.calendar.d;\r\n\r\n if (dateFormat === 'yyyy-MM-dd') {\r\n $.validator.addMethod('date', function (value, element, params) {\r\n if (this.optional(element)) {\r\n return true;\r\n }\r\n return value.isValidIsoDate();\r\n }, '');\r\n }\r\n else if (dateFormat === 'dd.MM.yyyy') {\r\n $.validator.addMethod('date', function (value, element, params) {\r\n if (this.optional(element)) {\r\n return true;\r\n }\r\n return value.isValidNorwegianDate();\r\n }, '');\r\n }\r\n }\r\n\r\n if (options.numDecSep && options.numDecSep !== '') {\r\n\r\n var isCommaDecSep = options.numDecSep === ',';\r\n\r\n if (isCommaDecSep) {\r\n //http://blog.rebuildall.net/2011/03/02/jQuery_validate_and_the_comma_decimal_separator\r\n $.validator.methods.range = function (value, element, param) {\r\n var globalizedValue = value.replace(',', '.');\r\n return this.optional(element) || (globalizedValue >= param[0] && globalizedValue <= param[1]);\r\n };\r\n $.validator.methods.min = function (value, element, param) {\r\n var globalizedValue = value.replace(',', '.');\r\n return this.optional(element) || globalizedValue >= param;\r\n };\r\n $.validator.methods.max = function (value, element, param) {\r\n var globalizedValue = value.replace(',', '.');\r\n return this.optional(element) || globalizedValue <= param;\r\n };\r\n $.validator.methods.number = function (value, element) {\r\n return this.optional(element) || /^-?(?:\\d+|\\d{1,3}(?:[\\s\\.,]\\d{3})+)(?:[\\.,]\\d+)?$/.test(value);\r\n };\r\n }\r\n }\r\n },\r\n}, nef.validator);\r\n\r\nnef.validator.init(nef.culture);\r\n\r\n\r\n\r\nnef.Kendo = $.extend(true, {\r\n Grid: {\r\n getErrorMessage: function (grid, e) {\r\n console.error('Kendo.UI.Grid: dataSource.Error', e.status, e.statusText, e);\r\n\r\n //let grid = e.sender;\r\n if (grid && grid.nef && grid.nef.lastRequestType && grid.nef.lastRequestType === 'destroy') {\r\n grid.cancelChanges();\r\n }\r\n\r\n const genericError = nef.i18n.get('Common.GenericError');\r\n let message = '';\r\n\r\n if (e.errors) {\r\n $.each(e.errors, function (key, value) {\r\n if (value.errors) {\r\n if (typeof value.errors === 'string') {\r\n message += kendo.htmlEncode(value.errors) + '

';\r\n }\r\n else {\r\n $.each(value.errors, function () {\r\n message += kendo.htmlEncode(this) + '

';\r\n });\r\n }\r\n }\r\n\r\n //if ('errors' in value) {\r\n // $.each(value.errors, function () {\r\n // message += this + '

';\r\n // });\r\n //}\r\n });\r\n }\r\n else if (e.xhr && e.xhr.responseText && e.xhr.responseText !== '') {\r\n\r\n if (e.xhr.responseText.startsWith('' + kendo.htmlEncode(e.xhr.status) + ' ' + kendo.htmlEncode(e.xhr.statusText.truncate(200));\r\n }\r\n\r\n if (message !== genericError) {\r\n message = genericError + '

' + message;\r\n }\r\n\r\n return message;\r\n },\r\n prepare: function (opt) {\r\n\r\n\r\n if (opt && typeof opt.persistState === 'boolean') {\r\n opt.persistState = {\r\n enabled: opt.persistState,\r\n };\r\n }\r\n if (opt && typeof opt.persistStateCacheKey === 'string') {\r\n opt.persistState = opt.persistState || {};\r\n opt.persistState.key = opt.persistStateCacheKey;\r\n delete opt.persistStateCacheKey;\r\n }\r\n\r\n const options = $.extend(true, {\r\n gridSelector: '.k-grid',\r\n hidePagingWhenOnlyHaveOnePage: false,\r\n persistState: {\r\n enabled: true,\r\n key: 'nef.grid-' + nef.pageName,\r\n timeout: 1200,\r\n overrideColumns: null,\r\n defaultFilter: null,\r\n }\r\n }, opt);\r\n\r\n if (!options.persistState) {\r\n options.persistState = {\r\n enabled: false\r\n };\r\n }\r\n\r\n //console.log('prepareGrid', options);\r\n\r\n var scope = {\r\n setPeristState: function (grid) {\r\n\r\n if (options.persistState.enabled && grid.nef && grid.nef.setState) {\r\n\r\n grid.nef.setState = false;\r\n\r\n var dataSource = grid.dataSource;\r\n var state = {\r\n time: new Date(),\r\n page: dataSource.page(),\r\n pageSize: dataSource.pageSize(),\r\n sort: dataSource.sort(),\r\n filter: dataSource.filter(),\r\n group: dataSource.group()\r\n };\r\n\r\n sessionStorage.setItem(grid.nef.persistStateKey, JSON.stringify(state));\r\n }\r\n },\r\n _onDataSourceReady: {\r\n callbacks: [],\r\n loaded: false,\r\n handler: function (e) {\r\n //console.log('onDataSourceReady.dataBinding ' + scope._onDataSourceReady.callbacks.length, e);\r\n\r\n let grid = e.sender;\r\n //grid.nef.isBounded = true;\r\n grid.nef.lastRequestType = e.action;\r\n\r\n grid.unbind('dataBinding', scope._onDataSourceReady.handler);\r\n\r\n var callbacks = scope._onDataSourceReady.callbacks;\r\n for (var i = 0; i < callbacks.length; i++) {\r\n callbacks[i](grid.dataSource);\r\n }\r\n },\r\n },\r\n onDataSourceReady: function (grid, disableAutoBind, callback) {\r\n\r\n if (grid.dataSource) {\r\n\r\n if (disableAutoBind) {\r\n grid.options.autoBind = false;\r\n }\r\n\r\n callback(grid.dataSource);\r\n }\r\n else {\r\n\r\n scope._onDataSourceReady.callbacks.push(callback);\r\n\r\n if (!scope._onDataSourceReady.loaded) {\r\n\r\n scope._onDataSourceReady.loaded = true;\r\n\r\n\r\n var colDataSources = [];\r\n\r\n for (let i = 0; i < grid.columns.length; i++) {\r\n const col = grid.columns[i];\r\n if (col.dataSource) {\r\n colDataSources.push(col.dataSource);\r\n }\r\n }\r\n\r\n if (disableAutoBind && colDataSources.length === 0) {\r\n // Set to false to prevent uneeded load in case we should load the state...\r\n // If Grid has ForeignKey columns that will fetch data, then this will break this code and Grid will not load...\r\n grid.options.autoBind = false;\r\n }\r\n\r\n grid.bind('dataBinding', scope._onDataSourceReady.handler);\r\n }\r\n }\r\n },\r\n overrideColumnValues: function (overrideCols, state) {\r\n\r\n const updateCols = function (col, filters) {\r\n\r\n if (!filters || filters.length === 0) {\r\n return;\r\n }\r\n\r\n for (let i = 0; i < filters.length; i++) {\r\n const filter = filters[i];\r\n if (filter.field) {\r\n\r\n if (filter.field === col.field) {\r\n //console.log('overrideColumnValues ' + col.field, col, state)\r\n filter.value = col.value;\r\n }\r\n }\r\n else {\r\n updateCols(col, filter.filters);\r\n }\r\n }\r\n\r\n };\r\n\r\n if (overrideCols && overrideCols.length > 0 && state.filter && state.filter.filters) {\r\n for (let i = 0; i < overrideCols.length; i++) {\r\n updateCols(overrideCols[i], state.filter.filters);\r\n }\r\n }\r\n },\r\n addDefaultFilter: function (overrideCols, state) {\r\n const updateCols = function (col, filters) {\r\n\r\n if (!filters || filters.length === 0) {\r\n return false;\r\n }\r\n\r\n for (let i = 0; i < filters.length; i++) {\r\n const filter = filters[i];\r\n if (filter.field) {\r\n if (filter.field === col.field) {\r\n return true;\r\n }\r\n\r\n }\r\n else {\r\n var found = updateCols(col, filter.filters);\r\n if (found) {\r\n return true;\r\n }\r\n }\r\n }\r\n\r\n return false;\r\n };\r\n\r\n if (overrideCols && overrideCols.length > 0) {\r\n\r\n if (!state.filter) {\r\n state.filter = { logic: 'and', filters: [] };\r\n }\r\n if (!state.filter.filters) {\r\n state.filter.filters = [];\r\n }\r\n\r\n for (let i = 0; i < overrideCols.length; i++) {\r\n var col = overrideCols[i];\r\n\r\n var found = updateCols(col, state.filter.filters);\r\n if (!found) {\r\n\r\n //console.log('addDefaultFilter ' + col.field, col, state)\r\n\r\n state.filter.filters.push({\r\n field: col.field,\r\n value: col.value,\r\n operator: col.operator || 'eq'\r\n });\r\n }\r\n }\r\n }\r\n\r\n\r\n },\r\n configure: function (grid) {\r\n\r\n grid.nef = {\r\n lastRequestType: null,\r\n isBounded: false\r\n };\r\n\r\n //console.log('prepare grid!', typeof grid.dataSource, grid.options.autoBind);\r\n\r\n //scope.onDataSourceReady(grid, false, function (dataSource) {\r\n // console.log('onDataSourceReady test1');\r\n //});\r\n //scope.onDataSourceReady(grid, false, function (dataSource) {\r\n // console.log('onDataSourceReady test2');\r\n //});\r\n\r\n // If autobind = false then dataSource is null and this is the firts time we can bind to it!\r\n scope.onDataSourceReady(grid, false, function (dataSource) {\r\n\r\n dataSource.bind('requestStart', function (e) {\r\n //console.log('requestStart', e);\r\n grid.nef.lastRequestType = e.type;\r\n });\r\n dataSource.bind('error', function (e) {\r\n\r\n let message = nef.Kendo.Grid.getErrorMessage(grid, e);\r\n\r\n //console.error('Kendo.UI.Grid: dataSource.Error: ', e.status, e.statusText, e);\r\n ////let grid = e.sender;\r\n\r\n //if (grid.nef.lastRequestType && grid.nef.lastRequestType === 'destroy') {\r\n // grid.cancelChanges();\r\n //}\r\n\r\n //let message = nef.i18n.get('Common.GenericError') + '

';\r\n\r\n //if (e.errors) {\r\n // $.each(e.errors, function (key, value) {\r\n // if (value.errors) {\r\n // if (typeof value.errors === 'string') {\r\n // message += kendo.htmlEncode(value.errors) + '

';\r\n // }\r\n // else {\r\n // $.each(value.errors, function () {\r\n // message += kendo.htmlEncode(this) + '

';\r\n // });\r\n // }\r\n // }\r\n\r\n // //if ('errors' in value) {\r\n // // $.each(value.errors, function () {\r\n // // message += this + '

';\r\n // // });\r\n // //}\r\n // });\r\n //}\r\n //else if (e.xhr.responseText && e.xhr.responseText !== '') {\r\n // message += kendo.htmlEncode(e.xhr.responseText.truncate(200));\r\n //}\r\n //else if (e.xhr.status !== 500 && e.xhr.statusText && e.xhr.statusText !== '') {\r\n // message += '' + kendo.htmlEncode(e.xhr.status) + ' ' + kendo.htmlEncode(e.xhr.statusText.truncate(200));\r\n //}\r\n\r\n nef.alert(message);\r\n });\r\n });\r\n\r\n if (options.hidePagingWhenOnlyHaveOnePage || options.persistState.enabled) {\r\n\r\n grid.bind('dataBound', function (e) {\r\n\r\n let grid = e.sender;\r\n\r\n if (options.hidePagingWhenOnlyHaveOnePage) {\r\n if (grid.dataSource.totalPages() === 1) {\r\n grid.pager.element.hide();\r\n } else {\r\n grid.pager.element.show();\r\n }\r\n }\r\n\r\n if (options.persistState.enabled) {\r\n scope.setPeristState(grid);\r\n }\r\n });\r\n }\r\n\r\n\r\n // If autobind = false then dataSource is null!\r\n //if (options.persistState && grid.dataSource) {\r\n if (options.persistState.enabled) {\r\n\r\n const gridName = grid.element.attr('id');\r\n const query = window.location.getQuery();\r\n const hasQuery = window.location.search.indexOf('?' + gridName + '-') > -1 || window.location.search.indexOf('&' + gridName + '-') > -1;\r\n\r\n let dataLoaded = grid.options.autoBind;\r\n\r\n //grid.nef.persistStateKey = options.persistState.key && options.persistState.key !== '' ? options.persistState.key : 'nef.grid-' + nef.pageName;\r\n grid.nef.persistStateKey = options.persistState.key + '-' + gridName;\r\n //grid.nef.persistStateKey += '-' + gridName;\r\n grid.nef.setState = false;\r\n\r\n const eventsToBind = ['page', 'sort', 'filter', 'group', 'groupExpand', 'groupCollapse'];\r\n for (let i = 0; i < eventsToBind.length; i++) {\r\n grid.bind(eventsToBind[i], function (e) {\r\n e.sender.nef.setState = true;\r\n });\r\n }\r\n\r\n if (query.gridPersistState === 'clear' || hasQuery) {\r\n sessionStorage.removeItem(grid.nef.persistStateKey);\r\n }\r\n else {\r\n\r\n const savedState = sessionStorage.getItem(grid.nef.persistStateKey);\r\n\r\n if (savedState) {\r\n\r\n const state = JSON.parse(savedState);\r\n const stateDate = new Date(state.time);\r\n\r\n if (stateDate.diff() < options.persistState.timeout) {\r\n\r\n scope.overrideColumnValues(options.persistState.overrideColumns, state);\r\n scope.addDefaultFilter(options.persistState.defaultFilter, state);\r\n state.time = new Date();\r\n sessionStorage.setItem(grid.nef.persistStateKey, JSON.stringify(state));\r\n\r\n scope.onDataSourceReady(grid, true, function (dataSource) {\r\n\r\n dataSource.query({\r\n page: state.page,\r\n pageSize: state.pageSize,\r\n sort: state.sort,\r\n filter: state.filter,\r\n group: state.group\r\n });\r\n });\r\n\r\n dataLoaded = true;\r\n }\r\n }\r\n }\r\n\r\n if (!dataLoaded) {\r\n scope.onDataSourceReady(grid, false, function (dataSource) {\r\n dataSource.read();\r\n });\r\n }\r\n }\r\n }\r\n };\r\n\r\n $(document).ready(function () {\r\n $(options.gridSelector).each(function () {\r\n let grid = $(this).data('kendoGrid');\r\n if (grid) {\r\n scope.configure(grid);\r\n }\r\n });\r\n });\r\n\r\n },\r\n hidePagingWhenOnlyHaveOnePage: function () {\r\n if (this.dataSource.totalPages() === 1) {\r\n this.pager.element.hide();\r\n } else {\r\n this.pager.element.show();\r\n }\r\n },\r\n ColumnTemplates: {\r\n userRoles: function (role) {\r\n var flags = nef.getEnumFlags(nef.userRoles, role);\r\n return flags.join(', ');\r\n },\r\n boolean: function (value) {\r\n if (value) {\r\n return '
' + nef.i18n.get('Common.Yes') + '
';\r\n }\r\n return '
' + nef.i18n.get('Common.No') + '
';\r\n },\r\n languages: function (lcids) {\r\n if (!lcids) {\r\n return '';\r\n }\r\n var html = '', lang = '';\r\n for (var i = 0; i < lcids.length; i++) {\r\n lang = nef.Kendo.Grid.ColumnTemplates.language(lcids[i]);\r\n if (lang !== '') {\r\n if (html !== '') {\r\n html += ', ';\r\n }\r\n html += lang;\r\n }\r\n }\r\n\r\n return html;\r\n },\r\n language: function (lcid) {\r\n if (!lcid) {\r\n return '';\r\n }\r\n var language = nef.languages[lcid];\r\n if (language) {\r\n return ' ' + language.DisplayName;\r\n }\r\n return '';\r\n }\r\n },\r\n redirectToDetails: function (self, e, url) {\r\n nef.stopEvent(e);\r\n var dataItem = self.dataItem($(e.currentTarget).closest('tr'));\r\n url = decodeURI(url);\r\n url = url.replace('ITEMID', dataItem.Id);\r\n window.location = url;\r\n }\r\n },\r\n init: function (options) {\r\n\r\n options = $.extend({\r\n useSvg: false,\r\n name: null,\r\n numGroupSep: null,\r\n numDecSep: null,\r\n //percGroupSep: null,\r\n //percDecSep: null,\r\n //currGroupSep: null,\r\n //currDecSep: null,\r\n calendar: {\r\n firstDay: 1,\r\n G: null,\r\n g: null,\r\n d: null,\r\n T: null,\r\n t: null,\r\n }\r\n }, options);\r\n\r\n var iconFont = options.useSvg ? 'svg' : 'font';\r\n kendo.setDefaults('iconType', iconFont);\r\n\r\n //kendo.culture(options.name);\r\n\r\n var culture = kendo.culture();\r\n culture.numberFormat[','] = options.numGroupSep;\r\n culture.numberFormat['.'] = options.numDecSep;\r\n culture.numberFormat.percent[','] = options.numGroupSep;\r\n culture.numberFormat.percent['.'] = options.numDecSep;\r\n culture.numberFormat.currency[','] = options.numGroupSep;\r\n culture.numberFormat.currency['.'] = options.numDecSep;\r\n\r\n culture.calendar.firstDay = 1;\r\n\r\n // general date/time pattern (long time) (\"M/d/yyyy h:mm:ss tt\" for en-US)\r\n culture.calendar.patterns.G = options.calendar.G;\r\n // general date/time pattern (short time) (\"M/d/yyyy h:mm tt\" for en-US)\r\n culture.calendar.patterns.g = options.calendar.g;\r\n\r\n // short date pattern (\"M/d/yyyy\" for en-US)\r\n culture.calendar.patterns.d = options.calendar.d;\r\n\r\n // long time pattern (\"h:mm:ss tt\" for en-US)\r\n culture.calendar.patterns.T = options.calendar.T;\r\n // short time pattern (\"h:mm tt\" for en-US)\r\n culture.calendar.patterns.t = options.calendar.t;\r\n },\r\n dateUtcToLocal: function (date, format) {\r\n if (date) {\r\n format = format || nef.dateFormat;\r\n var result = kendo.toString(date, format);\r\n //var result = '';\r\n //if (format) {\r\n // result = kendo.toString(date, format);\r\n //} else {\r\n // result = date.toLocaleString();\r\n // result = result.substr(result, result.lastIndexOf(':'));\r\n //}\r\n return result;\r\n }\r\n return '';\r\n },\r\n dateTimeUtcToLocal: function (date, format) {\r\n if (date) {\r\n var dateObj = typeof date === 'string' ? new Date(date) : date;\r\n format = format || nef.dateTimeFormat;\r\n var result = kendo.toString(dateObj, format);\r\n return result;\r\n }\r\n return '';\r\n },\r\n renderPlotBand: function (e, value, width, color) {\r\n var valueAxis = e.sender.getAxis(\"valueAxis\");\r\n var valueSlot = valueAxis.slot(value);\r\n\r\n var categoryAxis = e.sender.getAxis(\"categoryAxis\");\r\n var lastCategoryIndex = Math.max(1, categoryAxis.range().max);\r\n var minCategorySlot = categoryAxis.slot(0);\r\n var maxCategorySlot = categoryAxis.slot(lastCategoryIndex);\r\n\r\n var line = new kendo.drawing.Path({\r\n stroke: {\r\n color: color || '#FF0000',\r\n width: width || 2\r\n }\r\n });\r\n line.moveTo([minCategorySlot.origin.x, valueSlot.origin.y]).lineTo([maxCategorySlot.origin.x, valueSlot.origin.y]);\r\n\r\n e.sender.surface.draw(line);\r\n },\r\n fileSizeFriendly: function (bytes, si) {\r\n var thresh = si ? 1000 : 1024;\r\n if (Math.abs(bytes) < thresh) {\r\n return bytes + 'B';\r\n }\r\n var units = si\r\n ? ['KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB']\r\n : ['KiB', 'MiB', 'GiB', 'TiB', 'PiB', 'EiB', 'ZiB', 'YiB'];\r\n var u = -1;\r\n do {\r\n bytes /= thresh;\r\n ++u;\r\n } while (Math.abs(bytes) >= thresh && u < units.length - 1);\r\n return bytes.toFixed(1) + '' + units[u];\r\n },\r\n Editor: {\r\n //$(document).ready(function () {\r\n // var turndownService = new TurndownService();\r\n // $(\"#CtoNotes\").kendoEditor({\r\n // serialization: {\r\n // custom: function (html) {\r\n // console.log('serialization: markdown raw', html)\r\n\r\n // var markdown = turndownService.turndown(html);\r\n // return markdown;\r\n // }\r\n // },\r\n // deserialization: {\r\n // custom: function (markdown) {\r\n // console.log('deserialization: html deserialize', markdown)\r\n // markdown = kendo.htmlEncode(markdown);\r\n // var html = marked.parse(markdown)\r\n // console.log('deserialization: markdown', html)\r\n // return html;\r\n // }\r\n // }\r\n // });\r\n //});\r\n }\r\n}, nef.Kendo);\r\nif (nef.culture) {\r\n nef.Kendo.init(nef.culture);\r\n}\r\n\r\n\r\n\r\nnef.Bootstrap = $.extend(true, {\r\n prepeareFormMVC: function (options) {\r\n\r\n options = $.extend({\r\n debug: false,\r\n formSelector: '.nef-content form',\r\n form: null\r\n }, options);\r\n\r\n var scope = {\r\n seconds: nef.timezone * 60 * 60,\r\n convertToUserDate: function (picker) {\r\n if (!picker) {\r\n return;\r\n }\r\n var utcDate = picker.value();\r\n if (utcDate) {\r\n var userDate = utcDate.addSeconds(scope.seconds);\r\n picker.value(userDate);\r\n }\r\n },\r\n form: $(options.formSelector)\r\n };\r\n\r\n scope.form.find('.input-validation-error').each(function (index, el) {\r\n $(el).addClass('border-danger');\r\n $(el).closest('.form-group').addClass('has-error');\r\n });\r\n\r\n $(document).ready(function () {\r\n scope.form.find('.k-datetimepicker [data-role]').each(function () {\r\n var picker = $(this).data('kendoDateTimePicker');\r\n scope.convertToUserDate(picker);\r\n });\r\n scope.form.find('.k-datepicker [data-role]').each(function () {\r\n var picker = $(this).data('kendoDatePicker');\r\n scope.convertToUserDate(picker);\r\n });\r\n scope.form.find('.k-timepicker [data-role]').each(function () {\r\n var picker = $(this).data('kendoTimePicker');\r\n scope.convertToUserDate(picker);\r\n });\r\n\r\n\r\n //Nefab Douglas[2024-01-03]: Kendo seems to have an issue with group separator as . (dot).\r\n //Nefab Douglas[2024-01-03]: Issued the error to Kendo: https://www.telerik.com/forums/numerictextboxfor-showing-incorrect-value-when-using-culture-pt-br\r\n var culture = kendo.culture();\r\n var isDotGroupSeparator = culture.numberFormat[','] === '.';\r\n if (isDotGroupSeparator) {\r\n\r\n scope.form.find('.k-numerictextbox [data-role]').each(function () {\r\n\r\n var textbox = $(this).data('kendoNumericTextBox');\r\n if (\r\n (textbox.options.decimals && textbox.options.decimals > 0) //Doubles, Decimals and Floats...\r\n ||\r\n (textbox.options.format.indexOf('p') === 0) //Percentages...\r\n ) {\r\n var valueInput = textbox.element.attr('value');\r\n if (valueInput && valueInput !== '') {\r\n /*console.log('value', valueInput, typeof valueInput, textbox, this);*/\r\n textbox.value(parseFloat(valueInput));\r\n }\r\n }\r\n });\r\n }\r\n });\r\n }\r\n}, nef.Bootstrap);\r\n\r\n\r\n\r\nnef.signalR = $.extend(true, {\r\n build: function (options) {\r\n\r\n options = $.extend({\r\n debug: false,\r\n name: '',\r\n path: '',\r\n signalRLogLevel: signalR.LogLevel.Error,\r\n automaticReconnect: true,\r\n statefulReconnect: true,\r\n retryConnectSeconds: 60,\r\n showFlashMessages: false,\r\n\r\n messages: {\r\n reconnecting: 'SignalR is trying to reconnect...',\r\n closed: 'SignalR connection is closed!',\r\n connectionFailed: 'SignalR connection failed! '\r\n },\r\n\r\n onStart: null,\r\n onConnecting: null,\r\n onConnected: null,\r\n onReconnecting: null,\r\n onReconnected: null,\r\n onClose: null,\r\n onError: null,\r\n\r\n }, options);\r\n\r\n\r\n if (!options.name || options.name === '') {\r\n console.error('nef.signalR: Missing name!');\r\n }\r\n if (!options.path || options.path === '') {\r\n console.error('nef.signalR: Missing path!');\r\n }\r\n\r\n var log = function () {\r\n if (options.debug) {\r\n return Function.prototype.bind.call(nef.log, nef, options.name + ':');\r\n } else {\r\n return function () { };\r\n }\r\n }();\r\n\r\n var scope = {\r\n retryTimeoutId: null,\r\n retryConnectAttempt: 0,\r\n\r\n flashError: null,\r\n flashReconnecting: null,\r\n\r\n connection: null,\r\n hubStart: null,\r\n forcedDisconnect: false,\r\n\r\n\r\n init: function () {\r\n\r\n if (options.debug) {\r\n log('init...');\r\n }\r\n var builder = new signalR.HubConnectionBuilder();\r\n\r\n if (options.signalRLogLevel) {\r\n builder.configureLogging(options.signalRLogLevel);\r\n }\r\n\r\n builder.withUrl(options.path);\r\n\r\n if (options.automaticReconnect) {\r\n builder.withAutomaticReconnect();\r\n }\r\n if (options.statefulReconnect) {\r\n builder.withStatefulReconnect();\r\n }\r\n\r\n scope.connection = builder.build();\r\n scope.connection.onreconnecting(function (error) {\r\n log('Reconnecting...', error);\r\n\r\n if (scope.flashError) {\r\n scope.flashError.remove();\r\n }\r\n if (options.showFlashMessages) {\r\n scope.flashReconnecting = nef.flash({ message: options.messages.reconnecting, type: 'warning' });\r\n }\r\n if (options.onReconnecting) {\r\n options.onReconnecting(error);\r\n }\r\n });\r\n scope.connection.onreconnected(function (connectionId) {\r\n log('Reconnected!', connectionId);\r\n if (options.onReconnected) {\r\n options.onReconnected(connectionId);\r\n }\r\n scope.onConnected(connectionId);\r\n });\r\n scope.connection.onclose(function () {\r\n log('Connection is closed!');\r\n\r\n if (!scope.forcedDisconnect) {\r\n if (options.retryConnectSeconds > 0) {\r\n scope.retryTimeoutId = window.setInterval(function () {\r\n log('Connection is closed (' + scope.connection.state + ') but waitied ' + scope.retryConnectSeconds + ' seconds so lets try again now!');\r\n if (scope.connection.state === signalR.HubConnectionState.Disconnected) {\r\n scope.connect();\r\n }\r\n }, 1000 * options.retryConnectSeconds);\r\n }\r\n }\r\n\r\n if (scope.flashError) {\r\n scope.flashError.remove();\r\n }\r\n if (options.showFlashMessages) {\r\n scope.flashError = nef.flash({ message: options.messages.closed });\r\n }\r\n if (options.onClose) {\r\n options.onClose(scope.forcedDisconnect);\r\n }\r\n });\r\n\r\n if (options.onStart) {\r\n options.onStart(scope.connection);\r\n }\r\n\r\n },\r\n connect: function () {\r\n\r\n var deferred = $.Deferred();\r\n\r\n scope.forcedDisconnect = false;\r\n\r\n if (!scope.connection) {\r\n scope.init();\r\n }\r\n\r\n if (scope.connection.state === signalR.HubConnectionState.Disconnected) {\r\n\r\n log('Connecting...');\r\n\r\n if (options.onConnecting) {\r\n options.onConnecting();\r\n }\r\n\r\n scope.hubStart = scope.connection.start()\r\n .then(function () {\r\n var connectionId = scope.connection.connectionId;\r\n log('Connected!', connectionId);\r\n scope.onConnected(connectionId);\r\n deferred.resolve(connectionId);\r\n\r\n }).catch(function (err) {\r\n console.error('nef.signalR.connect: Connection failed!', err);\r\n log('Connection failed!', err);\r\n\r\n if (scope.flashError) {\r\n scope.flashError.remove();\r\n }\r\n if (options.showFlashMessages) {\r\n scope.flashError = nef.flash({ message: options.messages.connectionFailed + ' ' + err.toString() });\r\n }\r\n if (options.onError) {\r\n options.onError(err);\r\n }\r\n\r\n deferred.reject(err);\r\n });\r\n }\r\n else {\r\n log(`Already Connected! (State: ${scope.connection.state})`);\r\n deferred.resolve(scope.connection.connectionId);\r\n }\r\n\r\n return deferred.promise();\r\n },\r\n disconnect: function () {\r\n if (!scope.connection) {\r\n return;\r\n }\r\n\r\n scope.forcedDisconnect = true;\r\n scope.connection.stop();\r\n },\r\n onConnected: function (connectionId) {\r\n\r\n\r\n\r\n if (scope.retryTimeoutId) {\r\n window.clearInterval(scope.retryTimeoutId);\r\n scope.retryTimeoutId = null;\r\n }\r\n\r\n scope.retryConnectAttempt = 0;\r\n\r\n if (scope.flashError) {\r\n scope.flashError.remove();\r\n }\r\n if (scope.flashReconnecting) {\r\n scope.flashReconnecting.remove();\r\n }\r\n\r\n if (options.onConnected) {\r\n options.onConnected(connectionId);\r\n }\r\n },\r\n invoke: function (name, data) {\r\n\r\n var deferred = $.Deferred();\r\n\r\n scope.connect().done(function () {\r\n\r\n log('Invoking ' + name + '...', data);\r\n\r\n scope.connection.invoke(name, data)\r\n .then(function () {\r\n\r\n log('Invoked ' + name + '!', data);\r\n\r\n deferred.resolve();\r\n\r\n }).catch(function (err) {\r\n log('Invoke error for ' + name, err.toString(), err);\r\n if (options.onError) {\r\n options.onError(err);\r\n }\r\n deferred.reject(err);\r\n });\r\n\r\n\r\n }).fail(function (err) {\r\n deferred.reject(err);\r\n });\r\n\r\n return deferred.promise();\r\n\r\n }\r\n };\r\n\r\n\r\n\r\n return scope;\r\n }\r\n}, nef.signalR);\r\n\r\n\r\n\r\n//nef.analytics = $.extend(true, {\r\n// enabled: true,\r\n// url: null,\r\n// //containerId: 'fdsfdsfds',\r\n// appName: null,\r\n// _props: [],\r\n// _defaultUrl: 'https://matomo-nefabgroup.msappproxy.net/',\r\n// addDimension: function (name, value) {\r\n// if (value && value !== '') {\r\n// this._props.push([name, value]);\r\n// } else {\r\n// this._props.push([name]);\r\n// }\r\n// },\r\n// init: function () {\r\n\r\n// if (!this.enabled) {\r\n// return;\r\n// }\r\n\r\n// var url = this.url;\r\n// if (!url ||url === '') {\r\n// url = this._defaultUrl;\r\n// }\r\n\r\n// var _paq = window._paq = window._paq || [];\r\n// var props = this._props;\r\n// /* tracker methods like 'setCustomDimension' should be called before 'trackPageView' */\r\n// _paq.push(['trackPageView']);\r\n// _paq.push(['enableLinkTracking']);\r\n\r\n// _paq.push(['setTrackerUrl', url + 'matomo.php']);\r\n// _paq.push(['setSiteId', '1']);\r\n// _paq.push(['setCustomDimensionAppName', this.appName]);\r\n\r\n// if (props && props.length > 0) {\r\n// for (var i = 0; i < props.length; i++) {\r\n// var prop = props[i];\r\n// _paq.push(prop[0], prop[1]);\r\n// }\r\n// }\r\n\r\n// console.log('nef.analytics.init: ' + url);\r\n// console.log('nef.analytics.init: _props', props);\r\n// console.log('nef.analytics.init: _paq', _paq);\r\n\r\n// //(function () {\r\n// // var d = document, g = d.createElement('script'), s = d.getElementsByTagName('script')[0];\r\n// // g.type = 'text/javascript'; g.async = true; g.defer = true; g.src = u + 'matomo.js'; s.parentNode.insertBefore(g, s);\r\n// //})();\r\n// }\r\n//}, nef.analytics);\r\n\r\n\r\nif (window.$ && !$.postJSON) {\r\n $.postJSON = function (url, data, successResponse, failedResponse) {\r\n return $.ajax({\r\n url: url,\r\n type: 'POST',\r\n contentType: 'application/json',\r\n data: data ? JSON.stringify(data) : null,\r\n success: function (response, textStatus, jqXHR) {\r\n if (successResponse) {\r\n successResponse(response, textStatus, jqXHR);\r\n }\r\n },\r\n error: function (response, textStatus, errorThrown) {\r\n if (failedResponse) {\r\n failedResponse(response, textStatus, errorThrown);\r\n }\r\n }\r\n });\r\n };\r\n}\r\n\r\n\r\n\r\n$.fn.extend({\r\n nefImageGallery: function (o) {\r\n\r\n o = $.extend(true, {\r\n debug: false,\r\n selectors: {\r\n modal: '#e-modal-gallery'\r\n },\r\n modalTemplate: '
' +\r\n '
' +\r\n '
' +\r\n '
' +\r\n '

' +\r\n ' ' +\r\n '
' +\r\n '
' +\r\n '
' +\r\n '
' +\r\n '
'\r\n }, o);\r\n\r\n var s = {\r\n $modal: $(o.selectors.modal)\r\n };\r\n\r\n return this.click(function (e) {\r\n var isImage = $(this).data('image');\r\n if (isImage) {\r\n nef.stopEvent(e);\r\n\r\n if (!s.$modal[0]) {\r\n s.$modal = $('body').append(o.modalTemplate).find(o.selectors.modal);\r\n }\r\n\r\n var href = $(this).attr('href');\r\n s.$modal.find('.modal-title').text($(this).data('title'));\r\n s.$modal.find('.modal-body').html('\"\"');\r\n s.$modal.modal('show');\r\n\r\n return false;\r\n }\r\n });\r\n },\r\n nefMaxHeight: function (o) {\r\n\r\n o = $.extend(true, {\r\n debug: false,\r\n selectors: {\r\n excluded: '.header, .navbar, footer'\r\n },\r\n css: {\r\n margin: 0\r\n },\r\n forceHeight: true,\r\n callback: null,\r\n }, o);\r\n\r\n var s = {\r\n $el: $(this),\r\n $excluded: $(o.selectors.excluded)\r\n };\r\n\r\n var maxHeight = function () {\r\n var height = $(window).outerHeight(true);\r\n s.$excluded.each(function () {\r\n height -= $(this).outerHeight(true);\r\n });\r\n var heightCss = o.forceHeight ? { height: height } : { maxHeight: height };\r\n var css = $.extend(o.css, heightCss);\r\n s.$el.css(css);\r\n if (o.callback && typeof o.callback === 'function') {\r\n o.callback(this);\r\n }\r\n };\r\n\r\n $(document).ready(function () {\r\n maxHeight();\r\n });\r\n $(window).resize(function () {\r\n maxHeight();\r\n });\r\n },\r\n nefSideMenu: function (options) {\r\n\r\n options = $.extend(true, {\r\n debug: false,\r\n extraHeight: -51\r\n }, options);\r\n\r\n var scope = {\r\n panels: $('.nef-sidemenu'),\r\n buttons: $(this)\r\n };\r\n\r\n var maxHeight = function () {\r\n var height = $(document).outerHeight(true);\r\n height += options.extraHeight;\r\n scope.panels.css({ height: height, maxHeight: height });\r\n };\r\n\r\n maxHeight();\r\n\r\n $(window).resize(function () {\r\n maxHeight();\r\n });\r\n\r\n var closeIfClickedOutside = function (e) {\r\n\r\n if ($(e.target).hasClass('k-list-scroller')) {\r\n return;\r\n }\r\n\r\n if (scope.buttons.is(e.target) || scope.buttons.has(e.target).length > 0) {\r\n return;\r\n }\r\n\r\n if (!scope.panels.is(e.target) && scope.panels.has(e.target).length === 0) {\r\n scope.panels.hide().data('open', false);\r\n scope.buttons.removeClass('open');\r\n $(document).off('mouseup', closeIfClickedOutside);\r\n }\r\n };\r\n\r\n\r\n return $(this).each(function () {\r\n //var panelSelector = $(this).data('sidemenu');\r\n var panelSelector = $(this).data('bsTarget');\r\n\r\n //console.log(this, $(this).data());\r\n\r\n var panel = $(panelSelector);\r\n panel.data('open', false);\r\n\r\n $(this).click(function (e) {\r\n nef.stopEvent(e);\r\n\r\n if (!panel.nefLoaded) {\r\n\r\n var data;\r\n var panelId = panel.attr('id');\r\n\r\n switch (panelId) {\r\n case 'nef-account':\r\n\r\n kendo.ui.progress(panel, true);\r\n\r\n data = {\r\n returnUrl: window.location.pathname + window.location.search\r\n };\r\n\r\n $.post(nef.sitePath + 'Base/Account/DetailsAjax', data, function (result) {\r\n\r\n kendo.ui.progress(panel, false);\r\n panel.nefLoaded = true;\r\n panel.html(result);\r\n\r\n panel.find('.close').click(function (e) {\r\n nef.stopEvent(e);\r\n panel.hide();\r\n panel.data('open', false);\r\n $(document).off('mouseup', closeIfClickedOutside);\r\n });\r\n });\r\n\r\n\r\n break;\r\n case 'nef-helpPage':\r\n\r\n kendo.ui.progress(panel, true);\r\n\r\n data = {\r\n pageName: panel.data('pagename')\r\n };\r\n\r\n $.post(nef.sitePath + 'Base/Pages/HelpPageAjax', data, function (result) {\r\n\r\n kendo.ui.progress(panel, false);\r\n panel.nefLoaded = true;\r\n panel.html(result);\r\n\r\n panel.find('.close').click(function (e) {\r\n nef.stopEvent(e);\r\n panel.hide();\r\n panel.data('open', false);\r\n $(document).off('mouseup', closeIfClickedOutside);\r\n });\r\n\r\n var supportForm = panel.find('#nef-helpPage-support');\r\n\r\n nef.formAjaxSubmit({\r\n form: supportForm.find('form'),\r\n success: function (result) {\r\n if (result && result.Success) {\r\n supportForm.html('
' + result.Message + '
');\r\n panel.find('#nef-helpPage-support-btn').remove();\r\n } else {\r\n supportForm.append('
' + result.Message + '
');\r\n }\r\n }\r\n });\r\n });\r\n\r\n break;\r\n }\r\n }\r\n\r\n panel.show();\r\n //var open = panel.data('open');\r\n //scope.panels.hide().data('open', false);\r\n //scope.buttons.removeClass('open');\r\n\r\n //if (!open) {\r\n // $(this).addClass('open');\r\n // panel.show();\r\n // $(document).on('mouseup', closeIfClickedOutside);\r\n //}\r\n //panel.data('open', !open);\r\n });\r\n\r\n //panel.find('.close').click(function (e) {\r\n // nef.stopEvent(e);\r\n // panel.hide();\r\n // panel.data('open', false);\r\n // $(document).off('mouseup', closeIfClickedOutside);\r\n //});\r\n });\r\n },\r\n nefPopup: function (options) {\r\n options = $.extend(true, {\r\n debug: false,\r\n name: '_blank',\r\n height: 900,\r\n width: 600,\r\n top: 10,\r\n left: 10,\r\n toolbar: 'no',\r\n location: 'no',\r\n directories: 'no',\r\n scrollbars: 'yes',\r\n resizable: 'yes'\r\n }, options);\r\n\r\n var extras = 'toolbar=' + options.toolbar + ',location=' + options.location + ',directories=' + options.directories + ',height=' + options.height + ',width=' + options.width + ',top=' + options.top + ',left=' + options.left + ',scrollbars=' + options.scrollbars + ',resizable=' + options.resizable;\r\n\r\n return $(this).click(function (e) {\r\n nef.stopEvent(e);\r\n window.open($(this).attr('href'), options.name, extras);\r\n });\r\n },\r\n nefAppMenu: function (options) {\r\n\r\n options = $.extend(true, {\r\n debug: false,\r\n userId: '',\r\n url: nef.sitePath + 'Base/Account/GetAppMenu',\r\n timeout: 600,\r\n appHideCss: 'nef-hide',\r\n appSearchThreshold: 10\r\n }, options);\r\n\r\n var scope = {\r\n key_data: 'nef.AppMenu.Data_' + options.userId,\r\n key_time: 'nef.AppMenu.Time_' + options.userId,\r\n key_failed: 'nef.AppMenu.Failed_' + options.userId\r\n };\r\n\r\n var renderHtml = function (self, result) {\r\n\r\n if (self && result && result.Success && result.Data && result.Data.length > 0) {\r\n\r\n //var squares = '';\r\n //for (var i = 0; i < 9; i++) {\r\n // squares += '
';\r\n //}\r\n //var button = $('');\r\n\r\n var button = $('');\r\n self.html(button);\r\n\r\n var hostname = window.location.hostname;\r\n if (hostname === 'localhost') {\r\n hostname = 'my.nefab.com';\r\n }\r\n\r\n var length = result.Data.length;\r\n var isMobile = nef.isMobileDevice();\r\n var searchEnabled = length > options.appSearchThreshold;\r\n var cssContainer = 'nef-appmenu-container';\r\n\r\n if (isMobile) {\r\n cssContainer += ' nef-isMobile';\r\n }\r\n var html = '
';\r\n\r\n\r\n if (searchEnabled) {\r\n html += '';\r\n }\r\n\r\n html += '
';\r\n\r\n var node, rel = '', cssParent = '', cssIcon = '', styles = '', extension = '';\r\n\r\n for (var i = 0; i < length; i++) {\r\n node = result.Data[i];\r\n\r\n if (node.Link && node.Link !== '') {\r\n rel = '';\r\n if (node.Link.toLowerCase().indexOf(hostname) === -1) {\r\n rel = ' rel=\"noopener noreferrer\"';\r\n }\r\n\r\n cssParent = 'nef-appmenu-app nef-appmenu-app_' + node.Id;\r\n cssIcon = 'nef-appmenu-app-icon';\r\n styles = '--nef-appmenu-app-color:' + node.Color + ';';\r\n\r\n if (node.IconUrl && node.IconUrl !== '') {\r\n cssIcon += ' nef-iconUrl';\r\n styles += '--nef-appmenu-app-iconUrl:url(' + node.IconUrl + ');';\r\n\r\n if (node.IconUrl.indexOf('.') > -1) {\r\n extension = node.IconUrl.split('.').pop().split(/\\#|\\?/)[0];\r\n cssIcon += ' nef-iconUrl-' + extension.toLowerCase();\r\n }\r\n }\r\n else {\r\n cssIcon += ' nef-mynefabregular';\r\n }\r\n\r\n html += '';\r\n html += '' + String.fromCharCode(node.Icon) + '';\r\n html += '' + node.Title + '';\r\n html += '';\r\n }\r\n }\r\n html += '
';\r\n\r\n var container = $(html);\r\n\r\n if (searchEnabled) {\r\n container.find('.nef-appmenu-search .form-control').on('keyup', function (e) {\r\n\r\n var apps = container.find('.nef-appmenu-apps .nef-appmenu-app');\r\n var value = $(e.target).val().toLowerCase();\r\n\r\n if (value === '') {\r\n apps.each(function (i, el) {\r\n var app = $(this);\r\n app.removeClass(options.appHideCss);\r\n app.attr('tabindex', 11 + i);\r\n });\r\n }\r\n else {\r\n apps.each(function (i, el) {\r\n var app = $(this);\r\n var name = app.find('.nef-appmenu-app-title').text().toLowerCase();\r\n if (name.indexOf(value) > -1) {\r\n app.removeClass(options.appHideCss);\r\n app.attr('tabindex', 11 + i);\r\n\r\n } else {\r\n app.addClass(options.appHideCss);\r\n app.attr('tabindex', 10000 + i);\r\n }\r\n });\r\n }\r\n\r\n });\r\n }\r\n\r\n self.append(container);\r\n\r\n var open = false;\r\n button.click(function (e) {\r\n nef.stopEvent(e);\r\n if (!open) {\r\n container.show();\r\n\r\n if (searchEnabled && !isMobile) {\r\n container.find('.nef-appmenu-search .form-control').focus();\r\n }\r\n\r\n } else {\r\n container.hide();\r\n }\r\n open = !open;\r\n });\r\n\r\n $(document).mouseup(function (e) {\r\n if (!button.is(e.target) && !container.is(e.target) && container.has(e.target).length === 0) {\r\n open = false;\r\n container.hide();\r\n }\r\n });\r\n }\r\n else {\r\n //window.location = window.location;\r\n //nef.flash({\r\n // message: 'Failed to load app menu! Please reload the page.'\r\n //});\r\n //getData();\r\n }\r\n };\r\n var getData = function () {\r\n\r\n $.ajax({\r\n url: options.url,\r\n type: 'POST',\r\n dataType: 'json',\r\n success: function (result) {\r\n sessionStorage.setItem(scope.key_data, JSON.stringify(result));\r\n sessionStorage.setItem(scope.key_time, new Date());\r\n renderHtml(self, result);\r\n sessionStorage.removeItem(scope.key_failed);\r\n $(document).trigger('nefAppMenu_ready');\r\n },\r\n error: function (xhr) {\r\n console.error('$.fn.nefAppMenu: request failed: ' + (xhr ? xhr.status : 'N/A'), xhr ? xhr.statusText : '', xhr);\r\n\r\n // Check if failed before...\r\n var hasFailed = sessionStorage.getItem(scope.key_failed);\r\n // Mark as failed...\r\n sessionStorage.setItem(scope.key_failed, 'true');\r\n\r\n if (xhr.status === 401 && !hasFailed) {\r\n window.location = window.location;\r\n }\r\n }\r\n });\r\n };\r\n\r\n var self = $(this);\r\n var data = sessionStorage.getItem(scope.key_data);\r\n var time = sessionStorage.getItem(scope.key_time);\r\n\r\n if (data && time && new Date(time).diff() < options.timeout) {\r\n renderHtml(self, JSON.parse(data));\r\n $(document).trigger('nefAppMenu_ready');\r\n } else {\r\n getData();\r\n }\r\n },\r\n nefSiteNav: function (options) {\r\n\r\n options = $.extend(true, {\r\n debug: false,\r\n pinned: true,\r\n lnkToggler: '#nef-nav-btn-toggle',\r\n lnkPinner: '.nef-nav-item-pin .nav-link',\r\n pnlActions: '.nef-header-btns',\r\n pnlSiteNav: '.nef-nav-collapse',\r\n keyState: 'nef.SiteNav_pinned',\r\n messages: {\r\n togglerHideTitle: 'Unpin menu',\r\n toggerShowTitle: 'Pin menu',\r\n }\r\n }, options);\r\n\r\n var scope = {\r\n parent: $(this),\r\n pnlNavs: $(options.pnlSiteNav),\r\n lnkToggler: $(options.lnkToggler),\r\n lnkPinner: $(this).find(options.lnkPinner),\r\n classShow: 'nef-show',\r\n classHide: 'nef-hide',\r\n classUnpinned: 'nef-unpinned',\r\n show: $(this).hasClass('show'),\r\n saveState: function (pinned) {\r\n localStorage.setItem(options.keyState, pinned);\r\n },\r\n loadState: function () {\r\n const pinnedString = localStorage.getItem(options.keyState);\r\n return pinnedString;\r\n },\r\n pin: function (pin) {\r\n if (pin) {\r\n scope.parent.removeClass(scope.classUnpinned);\r\n scope.lnkPinner.attr('title', options.messages.togglerHideTitle);\r\n } else {\r\n scope.parent.addClass(scope.classUnpinned);\r\n scope.lnkPinner.attr('title', options.messages.toggerShowTitle);\r\n }\r\n },\r\n toogle: function (show) {\r\n if (show) {\r\n scope.lnkToggler.removeClass(scope.classHide);\r\n scope.pnlNavs.removeClass(scope.classHide);\r\n\r\n scope.lnkToggler.addClass(scope.classShow);\r\n scope.pnlNavs.addClass(scope.classShow);\r\n\r\n scope.lnkToggler.addClass('nef-show-clicked');\r\n\r\n } else {\r\n scope.lnkToggler.removeClass(scope.classShow);\r\n scope.pnlNavs.removeClass(scope.classShow);\r\n\r\n scope.lnkToggler.addClass(scope.classHide);\r\n scope.pnlNavs.addClass(scope.classHide);\r\n\r\n scope.lnkToggler.removeClass('nef-show-clicked');\r\n }\r\n },\r\n };\r\n\r\n scope.lnkPinner.click(function (e) {\r\n nef.stopEvent(e);\r\n const pinned = scope.parent.hasClass(scope.classUnpinned);\r\n console.log('pinned', pinned);\r\n scope.saveState(pinned);\r\n scope.pin(pinned);\r\n this.blur();\r\n });\r\n\r\n scope.lnkToggler.click(function (e) {\r\n nef.stopEvent(e);\r\n const width = scope.parent.width();\r\n const height = scope.parent.height();\r\n var visible = width * height;\r\n //console.log('visible', visible, [width, height]);\r\n scope.toogle(visible === 0);\r\n });\r\n\r\n const pinnedString = scope.loadState();\r\n if (pinnedString) {\r\n // User has done a choice...\r\n const pinned = pinnedString === 'true';\r\n scope.pin(pinned);\r\n }\r\n else {\r\n scope.pin(options.pinned);\r\n }\r\n\r\n\r\n nef.pin = scope.pin;\r\n nef.toggle = scope.toogle;\r\n }\r\n});\r\n\r\n//if ($.validator) {\r\n// $.validator.setDefaults({\r\n// //errorContainer: '.validation-summary-valid',\r\n// //errorContainer: '',\r\n// highlight: function (el, errorClass, validClass) {\r\n// //console.log(el.id, errorClass, validClass, el);\r\n// var $el = $(el);\r\n// $el.addClass('border-danger').removeClass('border-success');\r\n// $el.closest('.form-group').addClass('has-error');\r\n\r\n// if ($el.hasClass('k-input-inner')) {\r\n// $el.parent().addClass('border-danger').removeClass('border-success');\r\n// } else {\r\n// var parent = $el.parent();\r\n// if (parent.hasClass('k-widget')) {\r\n// parent.children(':first').addClass('border-danger').removeClass('border-success');\r\n// }\r\n// else if (parent.hasClass('k-picker')) {\r\n// parent.addClass('border-danger').removeClass('border-success');\r\n// }\r\n// }\r\n// },\r\n// unhighlight: function (el, errorClass, validClass) {\r\n// var $el = $(el);\r\n// $el.removeClass('border-danger').addClass('border-success');\r\n// $el.closest('.form-group').removeClass('has-error');\r\n\r\n// if ($el.hasClass('k-input-inner')) {\r\n// $el.parent().removeClass('border-danger').addClass('border-success');\r\n// } else {\r\n// var parent = $el.parent();\r\n// if (parent.hasClass('k-widget')) {\r\n// parent.children(':first').removeClass('border-danger').addClass('border-success');\r\n// } else if (parent.hasClass('k-picker')) {\r\n// parent.removeClass('border-danger').addClass('border-success');\r\n// }\r\n// }\r\n// }\r\n// });\r\n//}\r\n\r\n/*kendo.culture().calendar.firstDay = 1;*/\r\n\r\n//Primary: #405369\r\n//Secondary: #F47721\r\n\r\n//console.info(\r\n// '%c nef.base %c v' + nef.version + ''\r\n// , 'color: #FFFFFF; background: #144E8C; font-weight: 700; font-size: 16px; padding:10px 5px 10px 25px;border:2px solid #FFF;border-right:0;'\r\n// , 'color: #F47721; background: #F3F3F3; font-weight: 700; font-size: 16px; padding:10px 50px 10px 5px;border:2px solid #FFF;border-left:0;'\r\n//);\r\n\r\n//console.info(\r\n// '%c NEFAB \\n %c nef.base %c v' + nef.version + ''\r\n// , 'color: #FFFFFF; background: #144E8C; font-weight: 700; font-size: 1rem; padding:10px 80px;border:0px solid #FFF;border-right:0;display:block;'\r\n// , 'color: #FFFFFF; background: #144E8C; font-weight: 700; font-size: 1rem; padding:5px 5px 5px 25px;border:0px solid #FFF;border-right:0;'\r\n// , 'color: #F47721; background: #F3F3F3; font-weight: 700; font-size: 1rem; padding:5px 50px 5px 5px;border:0px solid #FFF;border-left:0;'\r\n//);\r\n\r\nconsole.info(\r\n '%c NEFAB %cnef.base %cv' + nef.version + ''\r\n , 'display:inline-block;color:#FFFFFF;background:#144E8C;font-weight:700;font-size:.7rem;padding:.1rem 3rem;border:.2rem solid #144E8C;border-right:0;'\r\n , 'display:inline-block;color:#405369;background:#f3f3f3;font-weight:700;font-size:.7rem;padding:.1rem .1rem .1rem 1rem;border:.2rem solid #144E8C;border-right:0;'\r\n , 'display:inline-block;color:#F47721;background:#f3f3f3;font-weight:700;font-size:.7rem;padding:.1rem 1rem .1rem .1rem;border:.2rem solid #144E8C;border-left:0;'\r\n);\r\n//console.info(\r\n// '%cDANGER ZONE'\r\n// , 'display:inline-block;color: #dc3545; background: #000000; font-weight: 700; font-size: 1rem; padding:1rem 6rem;border:3px solid #dc3545;'\r\n//);\r\n"]}