{"version":3,"file":"399.2a111f65f07c7c1c4db6.js","mappings":"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","sources":["webpack://konfigurewebclient/./src/areas/main/config.ts","webpack://konfigurewebclient/./src/components/dialog/modal.ts","webpack://konfigurewebclient/./src/components/dialog/onFrameDOMContentLoaded.ts","webpack://konfigurewebclient/./src/components/dialog/popup.ts","webpack://konfigurewebclient/./src/components/notify/icon.png","webpack://konfigurewebclient/./src/components/notify/index.ts","webpack://konfigurewebclient/./src/util/appUrl.ts","webpack://konfigurewebclient/./src/util/cookie.ts","webpack://konfigurewebclient/./src/util/fn.ts","webpack://konfigurewebclient/./src/util/format.ts","webpack://konfigurewebclient/./src/util/parse.ts"],"sourcesContent":["import { parseIso8601Date, parseJson } from '../../util/parse';\r\n\r\ntype serverSettings = Readonly<{\r\n\tapplicationPath: string;\r\n\tserverTimestamp: string;\r\n\tmaximumUploadSizeInBytes: number;\r\n\tmaximumListPageSize: number;\r\n\tminimumPasswordLength: number;\r\n\texportPageSize: number;\r\n\tcurrentCulture: Readonly<{\r\n\t\tname: string;\r\n\t\tnumberDecimalSeparator: string;\r\n\t\tnumberGroupSeparator: string\r\n\t}>;\r\n\ticonPrefix: string;\r\n\tcurrentUser: Readonly>;\r\n\tclientIPLog: string;\r\n\tcustomizeMode: boolean;\r\n\tcookieNames: Readonly<{\r\n\t\terpDefaultWhatIfGroup: string;\r\n\t\tmenuActiveExpand: string;\r\n\t\tmenuRecentItems: string;\r\n\t\tmenuIsExpanded: string;\r\n\t\tmenuLocation: string;\r\n\t\ttopMenuActiveId: string;\r\n\t\tworkflowMessage: string;\r\n\t}>;\r\n\tshowMenu: boolean;\r\n\tmonacoPath: string,\r\n\tundefinedString: string,\r\n\tsession: Readonly>;\r\n\tstrings: Readonly<{\r\n\t\tactiveFormError: string;\r\n\t\taddItem: string;\r\n\t\taMomentAgo: string;\r\n\t\tarchive: string;\r\n\t\tanotherFilterItemUsesThisScriptName: string;\r\n\t\tcomment: string;\r\n\t\tconfirmArchive: string;\r\n\t\tconfirmDiscardDraft: string;\r\n\t\tconfirmRemoveFieldGroup: string;\r\n\t\tconfirmRemoveList: string;\r\n\t\tconfirmClearUserFilter: string;\r\n\t\tcreateItem: string;\r\n\t\tdaysAgo: string;\r\n\t\teditExpression: string;\r\n\t\teditScript: string;\r\n\t\tend: string;\r\n\t\terror: string;\r\n\t\terrorSavingItem: string;\r\n\t\texpressionError: string;\r\n\t\tfieldMustHaveAValueBetween: string;\r\n\t\tfieldMustNotStartWithUnderscore: string;\r\n\t\tfieldMustStartWithUnderscore: string;\r\n\t\tfileIsStillUploadingWarning: string;\r\n\t\tfileSizeExceeded: string;\r\n\t\tfileUploadFailed: string;\r\n\t\tfilterLabelPrompt: string;\r\n\t\tfilterScriptNamePrompt: string;\r\n\t\thoursAgo: string;\r\n\t\tinvalidField: string;\r\n\t\tlayoutChangedWarning: string;\r\n\t\tlistExportLimited: string;\r\n\t\tlistHasChanges: string;\r\n\t\tlistItemsNotValid: string;\r\n\t\tlistSelectionLimited: string;\r\n\t\tloadingMessage: string;\r\n\t\tmarkAllAsRead: string;\r\n\t\tmaximumMustBeGreaterOrEqualToMinimum: string;\r\n\t\tminutesAgo: string;\r\n\t\tmonthsAgo: string;\r\n\t\tno: string;\r\n\t\tnullText: string;\r\n\t\tobjectCannotHaveIndexes: string;\r\n\t\tpasswordIsTooShort: string;\r\n\t\tpasswordMustDiffer: string;\r\n\t\tpasswordsDoNotMatch: string;\r\n\t\trecordIsAlreadyArchived: string;\r\n\t\trequiredFieldMessage: string;\r\n\t\tsaving: string;\r\n\t\tsearch: string;\r\n\t\tselect: string;\r\n\t\tselectionsAreNotValid: string;\r\n\t\tstart: string;\r\n\t\tsuccessfullyAdded: string;\r\n\t\tsuccessfullyRemoved: string;\r\n\t\tsuccessfullyUpdated: string;\r\n\t\tunsavedChangesWarning: string;\r\n\t\tupdating: string;\r\n\t\tvalueCannotBeZero: string;\r\n\t\tyearsAgo: string;\r\n\t\tyes: string;\r\n\t\tpasteRowsPrompt: string;\r\n\t\tpasteRowsNoClipboardData: string;\r\n\t\tpasteRowsSummary: string;\r\n\t\tpasteRowsDiscardSummary: string;\r\n\t\ttreeLoadError: string;\r\n\t\tnoData: string;\r\n\t\tuniqueFieldMessage: string;\r\n\t\tuserFilterSaved: string;\r\n\t\tuserFilterSaveError: string;\r\n\t\tuserFilterCleared: string;\r\n\t\tuserFilterClearError: string;\r\n\t}>;\r\n}>;\r\n\r\ntype clientSettings = {\r\n\tclientTimeOffset: number;\r\n\tinputSearchDelay: number;\r\n}\r\n\r\ntype exportSettings = serverSettings & clientSettings;\r\n\r\nexport let settings: exportSettings;\r\n\r\nexport async function loadConfig(data: string) {\r\n\tsettings = parseJson(data);\r\n\tsettings.clientTimeOffset = getClientTimeOffset(parseIso8601Date(settings.serverTimestamp));\r\n\tsettings.inputSearchDelay = 400;\r\n\r\n\tconst culture = settings.currentCulture.name;\r\n\r\n\tawait loadCulture(culture);\r\n}\r\n\r\nasync function loadCulture(culture: string) {\r\n\tswitch (culture) {\r\n\t\tcase 'tr':\r\n\t\t\tawait import('@progress/kendo-ui/js/cultures/kendo.culture.tr.js');\r\n\t\t\tbreak;\r\n\r\n\t\tcase 'tr-TR':\r\n\t\t\tawait Promise.all([\r\n\t\t\t\timport('@progress/kendo-ui/js/cultures/kendo.culture.tr-TR.js'),\r\n\t\t\t\timport('@progress/kendo-ui/js/messages/kendo.messages.tr-TR.js')\r\n\t\t\t]);\r\n\t\t\tbreak;\r\n\r\n\t\tcase 'en-GB':\r\n\t\t\tawait Promise.all([\r\n\t\t\t\timport('@progress/kendo-ui/js/cultures/kendo.culture.en-GB.js'),\r\n\t\t\t\timport('@progress/kendo-ui/js/messages/kendo.messages.en-GB.js')\r\n\t\t\t]);\r\n\t\t\tbreak;\r\n\r\n\t\tcase 'en-IE':\r\n\t\t\tawait import('@progress/kendo-ui/js/cultures/kendo.culture.en-IE.js');\r\n\t\t\tbreak;\r\n\r\n\t\tdefault:\r\n\t\t\tculture = 'en-US';\r\n\t\t\tbreak;\r\n\t}\r\n\r\n\tif (kendo.culture().name !== culture) {\r\n\t\tkendo.culture(culture);\r\n\t}\r\n\r\n\tkendo.culture().numberFormat.currency.symbol = \"\";\r\n}\r\n\r\nfunction getClientTimeOffset(date: Date): number {\r\n\tif (date != null) {\r\n\t\tconst minute = 60 * 1000;\r\n\r\n\t\treturn Math.round((new Date().getTime() - date.getTime()) / minute) * minute;\r\n\t}\r\n\r\n\treturn 0;\r\n}\r\n","import $ from 'jquery';\r\nimport appUrl from '../../util/appUrl';\r\nimport onFrameDOMContentLoaded from './onFrameDOMContentLoaded';\r\nimport { Popup, popupKey, stack as popupStack } from './popup';\r\n\r\nexport const showModalPageKey = 'konfig_showModalPage';\r\nconst zIndexStartsAt = 1050;\r\n\r\nexport interface ModalDialogOptions {\r\n\tcallback?: Function;\r\n\thideCloseButton?: boolean;\r\n\tmaxHeight?: number;\r\n\tmaxWidth?: number;\r\n}\r\n\r\nexport interface ModalPageOptions extends ModalDialogOptions {\r\n\turl: string;\r\n\ttitle?: string;\r\n};\r\n\r\nexport function showModalPage(options: ModalPageOptions): Popup {\r\n\tif (window.self !== window.top) {\r\n\t\tlet f = window.top[showModalPageKey] as Function;\r\n\t\treturn f.call(window.top, options);\r\n\t}\r\n\r\n\tvar url = options && options.url;\r\n\tvar title = options && options.title || null;\r\n\tvar withTitle = title === null ? '' : 'with-title';\r\n\r\n\t$(\".has-popover\").popover(\"hide\");\r\n\r\n\tlet $frame = $(\"\");\r\n\tlet frameElement = $frame[0] as HTMLIFrameElement;\r\n\r\n\t/* this behaviour is bound twice (and should be tolerant of multiple execution):\r\n\t*\r\n\t* - the DOMContentLoaded event is bound on the loading document to try set up the modal\r\n\t* styling as early as possible and avoid any flashes of incorrectly styled layout\r\n\t*\r\n\t* - the iframe load event is bound to handle any navigation that occurs inside the\r\n\t* frame (and apply modal styling to the subsequent document). Since popup navigation\r\n\t* is pretty rare, and there are no easy workarounds, the flash of unstyled content\r\n\t* is acceptable after navigation.\r\n\t*/\r\n\tfunction setModalBodyClass(this: HTMLDocument) {\r\n\t\tlet classes = this.body.classList;\r\n\r\n\t\tclasses.add('modal-frame');\r\n\r\n\t\tif (withTitle) {\r\n\t\t\tclasses.add(withTitle);\r\n\t\t}\r\n\t}\r\n\r\n\tonFrameDOMContentLoaded(frameElement, setModalBodyClass);\r\n\r\n\tframeElement.addEventListener('load', function () {\r\n\t\tsetModalBodyClass.call(this.contentDocument)\r\n\t});\r\n\r\n\tif (url.toLowerCase().indexOf(\"chrome=\") < 0) {\r\n\t\turl = url + (url.indexOf(\"?\") < 0 ? \"?\" : \"&\") + \"chrome=false\";\r\n\t}\r\n\r\n\t$frame.attr(\"src\", appUrl(url));\r\n\r\n\tvar element = $($('#modal-window-template').text())\r\n\t\t.addClass(withTitle)\r\n\t\t.prependTo(\"body\");\r\n\r\n\tvar contentSection = element.find('.modal-content > section');\r\n\r\n\t$frame.appendTo(contentSection);\r\n\r\n\tif (title !== null) {\r\n\t\t$(`
`).insertBefore(contentSection);\r\n\t}\r\n\r\n\treturn showElement(element, options);\r\n}\r\n\r\nexport function dismissModal() {\r\n\tlet currentPopup = popupStack.peek();\r\n\r\n\tif (currentPopup) {\r\n\t\tcurrentPopup.close();\r\n\t}\r\n}\r\n\r\nfunction showElement(element: any, options: ModalDialogOptions): Popup {\r\n\tvar popup = new Popup();\r\n\tpopup.callbackHandler = options.callback;\r\n\tpopup.element = element\r\n\r\n\tpopupStack.push(popup);\r\n\r\n\tlet iframe = element.find(\"iframe\");\r\n\r\n\tif (iframe.length) {\r\n\t\t//attach the popup to the iframe if there is one\r\n\t\tiframe[0][popupKey] = popup;\r\n\t}\r\n\r\n\telement\r\n\t\t.modal({\r\n\t\t\tkeyboard: !options.hideCloseButton,\r\n\t\t\tbackdrop: false,\r\n\t\t\tanimate: false,\r\n\t\t\tshow: false\r\n\t\t})\r\n\t\t.on('show.bs.modal', function () {\r\n\t\t\tif (options.hideCloseButton) {\r\n\t\t\t\telement.find(\".modal-footer\").hide();\r\n\t\t\t}\r\n\r\n\t\t\tif (options.maxHeight) {\r\n\t\t\t\telement.find('.modal-dialog').css('max-height', options.maxHeight);\r\n\t\t\t}\r\n\r\n\t\t\tif (options.maxWidth) {\r\n\t\t\t\telement.find('.modal-dialog').css('max-width', options.maxWidth);\r\n\t\t\t}\r\n\t\t})\r\n\t\t.on('shown.bs.modal', function () {\r\n\t\t\tvar depth = $(\".modal.in\").length - 1;\r\n\r\n\t\t\t//nudge the position of nested popup windows to make\r\n\t\t\t//their overlap clearer, like the 'cascade' layout in\r\n\t\t\t//desktop window managers; to avoid cascading off the\r\n\t\t\t//page, reset the offset regularly\r\n\t\t\telement.addClass(`offset-${depth % 5}`);\r\n\r\n\t\t\telement.css({\r\n\t\t\t\t\"z-index\": zIndexStartsAt + depth * 10,\r\n\t\t\t\t\"padding-right\": 0\r\n\t\t\t});\r\n\r\n\t\t\tiframe.focus();\r\n\t\t})\r\n\t\t.on('hidden.bs.modal', function () {\r\n\t\t\tpopup.callback();\r\n\t\t\t$(this).data('modal', null).remove();\r\n\t\t\tpopupStack.pop();\r\n\t\t})\r\n\t\t.modal('show');\r\n\r\n\treturn popup;\r\n}\r\n","export default function onFrameDOMContentLoaded(iFrame: HTMLIFrameElement, handler: (this: HTMLDocument) => void) {\r\n\t//based on this SO answer: https://stackoverflow.com/a/24603642/182328\r\n\tlet timer: number;\r\n\tlet fired = false;\r\n\r\n\tfunction onReady(this: HTMLDocument) {\r\n\t\tif (!fired) {\r\n\t\t\tfired = true;\r\n\t\t\tclearTimeout(timer);\r\n\t\t\thandler.call(this);\r\n\t\t}\r\n\t}\r\n\r\n\tfunction checkLoaded() {\r\n\t\tlet document = iFrame.contentDocument;\r\n\r\n\t\t//the unwanted initial document for iframes will have a URL that starts\r\n\t\t//with 'about:', if it does, wait for a while and try again..\r\n\t\tif (document && document.URL.indexOf(\"about:\") !== 0) {\r\n\t\t\tif (document.readyState === \"complete\") {\r\n\t\t\t\tonReady.call(document);\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tdocument.addEventListener(\"DOMContentLoaded\", onReady);\r\n\t\t\t}\r\n\t\t}\r\n\t\telse {\r\n\t\t\ttimer = window.setTimeout(checkLoaded, 1);\r\n\t\t}\r\n\t}\r\n\r\n\tcheckLoaded();\r\n}\r\n","export const popupKey = 'konfig_Popup';\r\n\r\nexport class Popup {\r\n\tcallbackHandler: Function;\r\n\tcallbackContext;\r\n\tcallbackArgument;\r\n\r\n\telement: JQuery;\r\n\towner: Window;\r\n\r\n\tclose() {\r\n\t\tif (this.element) {\r\n\t\t\tthis.element.modal(\"hide\");\r\n\t\t}\r\n\t}\r\n\r\n\tcallback(): any {\r\n\t\tif (this.callbackHandler) {\r\n\t\t\treturn this.callbackHandler(this.callbackArgument, this.callbackContext);\r\n\t\t}\r\n\t}\r\n}\r\n\r\nexport function findFramePopup(frameWindow: Window): Popup {\r\n\tlet frame = frameWindow.frameElement\r\n\tif (frame) {\r\n\t\tif (frame[popupKey]) {\r\n\t\t\treturn frame[popupKey];\r\n\t\t}\r\n\t}\r\n}\r\n\r\nexport function findPopup(owner: Window): Popup {\r\n\tlet windowPopup = stack.find(owner);\r\n\r\n\tif (windowPopup) {\r\n\t\treturn windowPopup;\r\n\t}\r\n\r\n\treturn findFramePopup(owner);\r\n}\r\n\r\nexport function getCurrentPopup(): Popup {\r\n\treturn stack.peek();\r\n}\r\n\r\nexport function getInputArgument(): any {\r\n\tvar p = findPopup(window.self);\r\n\tif (!p) {\r\n\t\treturn null;\r\n\t}\r\n\r\n\tp.callbackArgument = null;\r\n\treturn p.callback();\r\n}\r\n\r\nexport function closePopupOrSelf() {\r\n\tvar p = findPopup(window);\r\n\tif (p) {\r\n\t\tp.close();\r\n\t}\r\n\telse {\r\n\t\tself.close();\r\n\t}\r\n}\r\n\r\nexport namespace stack {\r\n\tconst key = 'konfig_popupStack';\r\n\r\n\texport function peek(): Popup | null {\r\n\t\tlet stack = requireStack();\r\n\t\treturn stack.length > 0 ? stack[stack.length - 1] : null;\r\n\t}\r\n\r\n\texport function pop(): Popup | null {\r\n\t\tlet stack = requireStack();\r\n\t\treturn stack.length > 0 ? stack.pop() : null;\r\n\t}\r\n\r\n\texport function push(value: Popup) {\r\n\t\tvalue.owner = window.self;\r\n\t\trequireStack().push(value);\r\n\t}\r\n\r\n\texport function find(owner: Window): Popup | null {\r\n\t\tfor (let x of requireStack()) {\r\n\t\t\tif (x.owner === owner) {\r\n\t\t\t\treturn x;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn null;\r\n\t}\r\n\r\n\tfunction requireStack() {\r\n\t\tlet result = window.top[key] as Popup[];\r\n\r\n\t\tif (!result) {\r\n\t\t\tresult = [];\r\n\t\t\twindow.top[key] = result;\r\n\t\t}\r\n\r\n\t\treturn result;\r\n\t}\r\n}\r\n","export default __webpack_public_path__ + \"b8651aef2cd6dadc17df84e4a1ceb146.png\";","import appUrl from '../../util/appUrl';\r\nimport iconUrl from './icon.png';\r\nimport { settings } from '../../areas/main/config';\r\nimport './style.less';\r\nimport 'noty/lib/noty.css';\r\n\r\nconst theme: Noty.Theme = 'bootstrap-v3';\r\nconst defaultType: Noty.Type = 'info';\r\nconst defaultTimeout = 4000;\r\n\r\nexport default function notify(message: string, title?: string, link?: string, tag?: any) {\r\n\tif (!('Notification' in window) || Notification['permission'] === 'denied') {\r\n\t\tshowNoty(message, title, link);\r\n\t}\r\n\telse if (Notification['permission'] === 'granted') {\r\n\t\tshowNotification(message, title, link, tag);\r\n\t}\r\n\telse {\r\n\t\tNotification.requestPermission(function (permission) {\r\n\t\t\tif (permission === 'granted') {\r\n\t\t\t\tshowNotification(message, title, link, tag);\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tshowNoty(message, title, link, defaultType, false);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n}\r\n\r\nexport function info(message: string, title?: string) {\r\n\treturn showNoty(message, title, null, 'info');\r\n}\r\n\r\nexport function warning(message: string, title?: string) {\r\n\treturn showNoty(message, title, null, 'warning');\r\n}\r\n\r\nexport function success(message: string, title?: string) {\r\n\treturn showNoty(message, title, null, 'success');\r\n}\r\n\r\nexport function error(message: string, title?: string) {\r\n\treturn showNoty(message, title, null, 'error', false);\r\n}\r\n\r\nexport async function confirm(prompt: string, yesLabel?: string, noLabel?: string): Promise {\r\n\tconst { default: Noty } = await import('noty');\r\n\r\n\treturn new Promise(resolve => {\r\n\t\tconst n = new Noty({\r\n\t\t\ttext: prompt,\r\n\t\t\tlayout: 'center',\r\n\t\t\tmodal: true,\r\n\t\t\ttype: 'alert',\r\n\t\t\tcloseWith: [],\r\n\t\t\ttheme: theme,\r\n\t\t\tanimation: {\r\n\t\t\t\topen: null,\r\n\t\t\t\tclose: null\r\n\t\t\t},\r\n\t\t\tbuttons: [\r\n\t\t\t\tNoty.button(yesLabel || settings.strings.yes, 'btn btn-success yes', () => {\r\n\t\t\t\t\tn.close();\r\n\t\t\t\t\tresolve(true);\r\n\t\t\t\t}),\r\n\t\t\t\tNoty.button(noLabel || settings.strings.no, 'btn btn-default no', () => {\r\n\t\t\t\t\tn.close();\r\n\t\t\t\t\tresolve(false);\r\n\t\t\t\t})\r\n\t\t\t]\r\n\t\t});\r\n\r\n\t\tn.show();\r\n\t});\r\n}\r\n\r\nfunction showNotification(message: string, title?: string, link?: string, tag?: any) {\r\n\tvar options = {\r\n\t\tbody: message,\r\n\t\ttag: tag,\r\n\t\ticon: appUrl(iconUrl)\r\n\t}\r\n\r\n\tvar notification = new Notification(title, options);\r\n\r\n\tif (link) {\r\n\t\tnotification.onclick = function (event) {\r\n\t\t\tevent.preventDefault();\r\n\t\t\twindow.open(link, '_blank');\r\n\t\t}\r\n\t}\r\n}\r\n\r\nasync function showNoty(message: string, title: string, href: string, type: Noty.Type = defaultType, timeout: number | false = defaultTimeout) {\r\n\tconst { default: Noty } = await import('noty');\r\n\r\n\tconst link = (text: string) => href\r\n\t\t? `${text}`\r\n\t\t: text;\r\n\r\n\tconst html = title\r\n\t\t? `${title}${link(message)}`\r\n\t\t: link(message);\r\n\r\n\tconst n = new Noty({\r\n\t\tlayout: 'topCenter',\r\n\t\ttype: type,\r\n\t\ttheme: theme,\r\n\t\ttext: html,\r\n\t\ttimeout: timeout,\r\n\t\tprogressBar: false\r\n\t});\r\n\r\n\tn.show();\r\n}\r\n","import { settings } from '../areas/main/config';\r\n\r\nexport default function appUrl(url: string): string {\r\n\tvar appPath = settings.applicationPath;\r\n\tif (!appPath) return url;\r\n\treturn url.replace(\"~/\", appPath);\r\n}\r\n","import Cookie, { CookieAttributes } from 'js-cookie';\r\n\r\nexport function get(name: string): string | undefined {\r\n\treturn Cookie.get(name);\r\n}\r\n\r\nexport function set(name: string, value: string, options?: CookieAttributes): void {\r\n\tCookie.set(name, value, requireStrict(options));\r\n}\r\n\r\nexport function remove(name: string, options?: CookieAttributes): void {\r\n\tCookie.remove(name, requireStrict(options));\r\n}\r\n\r\nfunction requireStrict(options?: CookieAttributes): CookieAttributes {\r\n\toptions = options || {};\r\n\toptions.sameSite = 'strict';\r\n\r\n\treturn options;\r\n}\r\n","import { format as formatUtil, toString as toStringUtil } from './format';\r\nimport { settings } from '../areas/main/config';\r\n\r\nconst minute = 60 * 1000;\r\nconst hour = 60 * minute;\r\nconst day = 24 * hour;\r\n\r\nexport function tier() {\r\n\treturn 'client';\r\n}\r\n\r\nexport function log(...args: any[]) {\r\n\tconsole.log(...args);\r\n}\r\n\r\nexport function now(offset?: number) {\r\n\tlet date = serverDate();\r\n\r\n\tif (offset) {\r\n\t\toffsetTime(date, offset * day);\r\n\t}\r\n\r\n\treturn date;\r\n}\r\n\r\nexport function today(offset?: number) {\r\n\tlet date = now(offset);\r\n\r\n\tdate.setHours(0, 0, 0, 0);\r\n\r\n\treturn date;\r\n}\r\n\r\nexport function weekStart(offset?: number) {\r\n\tlet date = today();\r\n\r\n\toffsetTime(date, -(date.getDay() * day));\r\n\r\n\tif (offset) {\r\n\t\toffsetTime(date, offset * 7 * day);\r\n\t}\r\n\r\n\treturn date;\r\n}\r\n\r\nexport function weekEnd(offset?: number) {\r\n\tlet date = weekStart(offset);\r\n\r\n\tdate.setDate(date.getDate() + 6);\r\n\r\n\treturn date;\r\n}\r\n\r\nexport function monthStart(offset?: number) {\r\n\tlet date = today();\r\n\r\n\tif (offset) {\r\n\t\tdate.setMonth(date.getMonth() + offset);\r\n\t}\r\n\r\n\treturn new Date(date.getFullYear(), date.getMonth(), 1);\r\n}\r\n\r\nexport function monthEnd(offset?: number) {\r\n\toffset = (offset || 0) + 1;\r\n\tlet date = monthStart(offset);\r\n\r\n\tdate.setDate(date.getDate() - 1);\r\n\r\n\treturn date;\r\n}\r\n\r\nexport function yearStart(offset?: number) {\r\n\tlet date = new Date(today().getFullYear(), 0, 1);\r\n\r\n\tif (offset) {\r\n\t\tdate.setFullYear(date.getFullYear() + offset);\r\n\t}\r\n\r\n\treturn date;\r\n}\r\n\r\nexport function yearEnd(offset?: number) {\r\n\toffset = (offset || 0) + 1;\r\n\tlet date = yearStart(offset);\r\n\r\n\tdate.setDate(date.getDate() - 1);\r\n\r\n\treturn date;\r\n}\r\n\r\nexport function currentUser() {\r\n\treturn settings.currentUser;\r\n}\r\n\r\nexport function session() {\r\n\treturn settings.session;\r\n}\r\n\r\nexport function clientIPLog() {\r\n\treturn settings.clientIPLog;\r\n}\r\n\r\nexport function format(format: string, ...args: any[]) {\r\n\treturn formatUtil(format, ...args);\r\n}\r\n\r\nexport function toString(value: any, format: string) {\r\n\treturn toStringUtil(value, format);\r\n}\r\n\r\nexport function repeat(value: any, count: number) {\r\n\treturn ('' + value).repeat(count);\r\n}\r\n\r\nfunction serverDate() {\r\n\tlet date = new Date();\r\n\r\n\tif (settings.clientTimeOffset !== 0) {\r\n\t\toffsetTime(date, settings.clientTimeOffset * -1);\r\n\t}\r\n\r\n\treturn date;\r\n}\r\n\r\nfunction offsetTime(date: Date, offset: number) {\r\n\tlet timezoneOffset = date.getTimezoneOffset();\r\n\r\n\tdate.setTime(date.getTime() + offset);\r\n\r\n\t//if the timezone offset has changed after adjusting the time,\r\n\t//then the time needs to be adjusted by the difference\r\n\tlet timezoneChange = timezoneOffset - date.getTimezoneOffset();\r\n\r\n\tif (timezoneChange !== 0) {\r\n\t\tdate.setTime(date.getTime() - (timezoneChange * minute));\r\n\t}\r\n}\r\n","import _ from 'lodash';\r\nimport { settings } from '../areas/main/config';\r\nimport * as fn from './fn';\r\nimport { parseBoolean } from './parse';\r\n\r\nexport function toString(value, format: string) {\r\n\treturn kendo.toString(value, format);\r\n}\r\n\r\nexport function isEmptyWhenZeroFormat(format: string): boolean {\r\n\treturn /^#[#,.]*$/.test(format);\r\n}\r\n\r\nexport function format(format: string, ...args: any[]) : string {\r\n\tfunction getArg(index: number) {\r\n\t\tif (index >= args.length) throw \"There is no argument at position \" + index;\r\n\t\telse return args[index];\r\n\t}\r\n\r\n\tif (_.isString(format)) {\r\n\t\treturn format.replace(/\\{\\{|\\}\\}|\\{(\\d+)(?::([^}]+?))?\\}/g, function (match, index, formatArg) {\r\n\t\t\tif (match == \"{{\") return \"{\";\r\n\t\t\tif (match == \"}}\") return \"}\";\r\n\r\n\t\t\tvar arg = getArg(parseInt(index));\r\n\r\n\t\t\tif (formatArg) {\r\n\t\t\t\treturn toString(arg, formatArg);\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\treturn arg;\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\telse {\r\n\t\treturn \"\";\r\n\t}\r\n}\r\n\r\nexport function formatYesNo(value: any): any {\r\n\tvar v = parseBoolean(value);\r\n\tif (v) {\r\n\t\treturn settings.strings.yes;\r\n\t}\r\n\telse if (v === false) {\r\n\t\treturn settings.strings.no;\r\n\t}\r\n\r\n\treturn '';\r\n}\r\n\r\nexport function timeSince(date: Date) {\r\n\tvar seconds = Math.floor((+fn.now() - +date) / 1000);\r\n\r\n\tvar interval = Math.floor(seconds / 31536000);\r\n\tif (interval > 1) {\r\n\t\treturn format(settings.strings.yearsAgo, interval);\r\n\t}\r\n\r\n\tinterval = Math.floor(seconds / 2592000);\r\n\tif (interval > 1) {\r\n\t\treturn format(settings.strings.monthsAgo, interval);\r\n\t}\r\n\r\n\tinterval = Math.floor(seconds / 86400);\r\n\tif (interval > 1) {\r\n\t\treturn format(settings.strings.daysAgo, interval);\r\n\t}\r\n\r\n\tinterval = Math.floor(seconds / 3600);\r\n\tif (interval > 1) {\r\n\t\treturn format(settings.strings.hoursAgo, interval);\r\n\t}\r\n\r\n\tinterval = Math.floor(seconds / 60);\r\n\tif (interval > 1) {\r\n\t\treturn format(settings.strings.minutesAgo, interval);\r\n\t}\r\n\r\n\treturn settings.strings.aMomentAgo;\r\n}\r\n","import jQuery from 'jquery';\r\nimport _ from 'lodash';\r\n\r\nexport function parseJson(value: string): T {\r\n\tif (!value) return null;\r\n\telse return jQuery.parseJSON(value);\r\n}\r\n\r\nexport function parseClientModel(element: JQuery) {\r\n\tvar content = element.html();\r\n\r\n\tif (content) {\r\n\t\treturn parseJson(content.replace(/<\\/\\//g, '