{"version":3,"file":"Serenity.CoreLib.js","sources":["../Q/Arrays.ts","../Q/Strings.ts","../Q/LocalText.ts","../Q/System.ts","../Q/Notify.ts","../Q/Config.ts","../Q/Html.ts","../Q/Dialogs.ts","../Q/ErrorHandling.ts","../Q/BlockUI.ts","../Q/Services.ts","../Q/Formatting.ts","../Q/ScriptData.ts","../Q/Authorization.ts","../Q/Debounce.ts","../Q/LayoutTimer.ts","../Q/Lookup.ts","../Q/Validation.ts","../Q/ValidateOptions.ts","../Q/Router.ts","../UI/Helpers/LazyLoadHelper.ts","../Q/Layout.ts","../Decorators/index.ts","../Interfaces/IBooleanValue.ts","../Interfaces/IDoubleValue.ts","../Interfaces/IDialog.ts","../Interfaces/IEditDialog.ts","../Interfaces/IGetEditValue.ts","../Interfaces/IReadOnly.ts","../Interfaces/ISetEditValue.ts","../Interfaces/IStringValue.ts","../Interfaces/IValidateRequired.ts","../Services/Criteria.ts","../Types/ReflectionUtils.ts","../Types/DialogTypeRegistry.ts","../Types/EditorTypeRegistry.ts","../Types/EnumTypeRegistry.ts","../UI/Widgets/PrefixedContext.ts","../UI/Widgets/Widget.ts","../UI/Widgets/TemplatedWidget.ts","../UI/Helpers/SubDialogHelper.ts","../UI/Helpers/UploadHelper.ts","../UI/Widgets/Toolbar.ts","../UI/Editors/EditorUtils.ts","../UI/Editors/CascadedWidgetLink.ts","../UI/Helpers/ValidationHelper.ts","../UI/Widgets/TemplatedPanel.ts","../UI/Helpers/TabsExtensions.ts","../UI/Widgets/ReflectionOptionsSetter.ts","../UI/Widgets/PropertyGrid.ts","../UI/Widgets/PropertyPanel.ts","../UI/Editors/StringEditor.ts","../UI/Editors/PasswordEditor.ts","../UI/Editors/TextAreaEditor.ts","../UI/Editors/BooleanEditor.ts","../UI/Editors/DecimalEditor.ts","../UI/Editors/IntegerEditor.ts","../UI/Editors/DateEditor.ts","../UI/Editors/DateTimeEditor.ts","../UI/Editors/TimeEditor.ts","../UI/Editors/EmailEditor.ts","../UI/Editors/EmailAddressEditor.ts","../UI/Editors/URLEditor.ts","../UI/Editors/RadioButtonEditor.ts","../UI/Editors/Select2Editor.ts","../UI/Editors/SelectEditor.ts","../UI/Editors/DateYearEditor.ts","../UI/Editors/EnumEditor.ts","../UI/Editors/LookupEditor.ts","../UI/Editors/ServiceLookupEditor.ts","../UI/Editors/HtmlContentEditor.ts","../UI/Editors/MaskedEditor.ts","../UI/Editors/Recaptcha.ts","../UI/Editors/UploadEditors.ts","../UI/DataGrid/QuickFilterBar.ts","../UI/DataGrid/QuickSearchInput.ts","../UI/Widgets/Flexify.ts","../UI/Dialogs/DialogExtensions.ts","../UI/Dialogs/TemplatedDialog.ts","../UI/Dialogs/PropertyDialog.ts","../UI/Dialogs/EntityDialog.ts","../UI/Filtering/FilterOperator.ts","../UI/Filtering/FilterStore.ts","../UI/Filtering/Filtering.ts","../UI/Filtering/FilterWidgetBase.ts","../UI/Filtering/FilterPanel.ts","../UI/Filtering/FilterDialog.ts","../UI/Filtering/FilterDisplayBar.ts","../UI/DataGrid/SlickPager.ts","../UI/Formatters/Formatters.ts","../UI/Helpers/SlickHelpers.ts","../Slick/RemoteView.ts","../UI/DataGrid/DataGrid.ts","../UI/DataGrid/ColumnPickerDialog.ts","../UI/DataGrid/EntityGrid.ts","../UI/DataGrid/TreeGridMixin.ts","../UI/Editors/CheckTreeEditor.ts","../UI/Widgets/Reporting.ts","../UI/Editors/AsyncLookupEditor.ts","../UI/Widgets/ScriptContext.ts","../Interfaces/IAsyncInit.ts","../UI/Widgets/WX.ts","../UI/Widgets/GoogleMap.ts","../UI/Editors/Select2AjaxEditor.ts","../Slick/Aggregators.ts","../Patch/jQueryPatch.ts","../Patch/PromisePatch.ts","../Patch/VuePatch.ts","../CoreLib.ts"],"sourcesContent":["export type Grouping = { [key: string]: TItem[] };\r\n\r\n/**\r\n * Tests if any of array elements matches given predicate\r\n */\r\nexport function any(array: TItem[], predicate: (x: TItem) => boolean): boolean {\r\n for (let x of array)\r\n if (predicate(x))\r\n return true;\r\n\r\n return false;\r\n}\r\n\r\n/**\r\n * Counts number of array elements that matches a given predicate\r\n */\r\nexport function count(array: TItem[], predicate: (x: TItem) => boolean): number {\r\n let count = 0;\r\n for (let x of array)\r\n if (predicate(x))\r\n count++;\r\n\r\n return count;\r\n}\r\n\r\n/**\r\n * Gets first element in an array that matches given predicate.\r\n * Throws an error if no match is found.\r\n */\r\nexport function first(array: TItem[], predicate: (x: TItem) => boolean): TItem {\r\n for (let x of array)\r\n if (predicate(x))\r\n return x;\r\n\r\n throw new Error(\"first:No element satisfies the condition.!\");\r\n}\r\n\r\n/**\r\n * Gets index of first element in an array that matches given predicate\r\n */\r\nexport function indexOf(array: TItem[], predicate: (x: TItem) => boolean): number {\r\n for (var i = 0; i < array.length; i++)\r\n if (predicate(array[i]))\r\n return i;\r\n\r\n return -1;\r\n}\r\n\r\n/**\r\n * Inserts an item to the array at specified index\r\n */\r\nexport function insert(obj: any, index: number, item: any): void {\r\n if (obj.insert)\r\n obj.insert(index, item);\r\n else if (Object.prototype.toString.call(obj) === '[object Array]')\r\n obj.splice(index, 0, item);\r\n else\r\n throw new Error(\"Object does not support insert!\");\r\n}\r\n\r\n/**\r\n * Determines if the object is an array\r\n */\r\nexport function isArray(obj: any): boolean {\r\n return Object.prototype.toString.call(obj) === '[object Array]';\r\n}\r\n\r\n/**\r\n* Gets first element in an array that matches given predicate.\r\n* Throws an error if no matches is found, or there are multiple matches.\r\n*/\r\nexport function single(array: TItem[], predicate: (x: TItem) => boolean): TItem {\r\n let match: any;\r\n let found = false;\r\n for (let x of array)\r\n if (predicate(x)) {\r\n if (found)\r\n throw new Error(\"single:sequence contains more than one element.\");\r\n\r\n found = true;\r\n match = x;\r\n }\r\n\r\n if (!found)\r\n throw new Error(\"single:No element satisfies the condition.\");\r\n\r\n return match;\r\n}\r\n\r\n/**\r\n * Maps an array into a dictionary with keys determined by specified getKey() callback,\r\n * and values that are arrays containing elements for a particular key.\r\n */\r\nexport function toGrouping(items: TItem[], getKey: (x: TItem) => any): Grouping {\r\n let lookup: Grouping = {};\r\n for (let x of items) {\r\n let key = getKey(x) || \"\";\r\n let d = lookup[key];\r\n if (!d) {\r\n d = lookup[key] = [];\r\n }\r\n\r\n d.push(x);\r\n }\r\n return lookup;\r\n}\r\n\r\n\r\nexport type Group = {\r\n order: number;\r\n key: string;\r\n items: TItem[];\r\n start: number;\r\n}\r\n\r\nexport type Groups = {\r\n byKey: { [key: string]: Group };\r\n inOrder: Group[];\r\n};\r\n\r\n/**\r\n * Groups an array with keys determined by specified getKey() callback.\r\n * Resulting object contains group objects in order and a dictionary to access by key.\r\n */\r\nexport function groupBy(items: TItem[], getKey: (x: TItem) => any): Groups {\r\n let result: Groups = {\r\n byKey: Object.create(null),\r\n inOrder: []\r\n };\r\n\r\n for (var index = 0; index < items.length; index++) {\r\n var item = items[index];\r\n let key = getKey(item) ?? \"\";\r\n var group = result.byKey[key];\r\n if (group === undefined) {\r\n group = {\r\n order: result.inOrder.length,\r\n key: key,\r\n items: [item],\r\n start: index\r\n }\r\n result.byKey[key] = group;\r\n result.inOrder.push(group);\r\n }\r\n else {\r\n group.items.push(item);\r\n }\r\n }\r\n\r\n return result;\r\n}\r\n\r\n/**\r\n * Gets first element in an array that matches given predicate.\r\n * Returns null if no match is found.\r\n */\r\nexport function tryFirst(array: TItem[], predicate: (x: TItem) => boolean): TItem {\r\n for (let x of array)\r\n if (predicate(x))\r\n return x;\r\n}","export function endsWith(s: string, suffix: string): boolean {\r\n if (String.prototype.endsWith)\r\n return s.endsWith(suffix);\r\n\r\n if (suffix == null)\r\n return false;\r\n \r\n if (!suffix.length)\r\n return true;\r\n if (suffix.length > s.length)\r\n return false;\r\n return (s.substr(s.length - suffix.length) == suffix);\r\n}\r\n\r\nexport function isEmptyOrNull(s: string) {\r\n return s == null || s.length === 0;\r\n}\r\n\r\nexport function isTrimmedEmpty(s: string) {\r\n return trimToNull(s) == null;\r\n}\r\n\r\nexport function padLeft(s: string | number, len: number, ch: string = ' ') {\r\n if ((s as any).padStart)\r\n return (s as any).padStart(len, ch);\r\n s = s.toString();\r\n while (s.length < len)\r\n s = ch + s;\r\n return s;\r\n}\r\n\r\nexport function startsWith(s: string, prefix: string): boolean {\r\n if (String.prototype.startsWith)\r\n return s.startsWith(prefix);\r\n\r\n if (prefix == null)\r\n return false;\r\n\r\n if (!prefix.length)\r\n return true;\r\n if (prefix.length > s.length)\r\n return false;\r\n return (s.substr(0, prefix.length) === prefix);\r\n}\r\n\r\nexport function toSingleLine(str: string) {\r\n return replaceAll(replaceAll(trimToEmpty(str), '\\r\\n', ' '), '\\n', ' ').trim();\r\n}\r\n\r\nexport var trimEnd = function(s: string) {\r\n return s.replace(/\\s*$/, '');\r\n};\r\n\r\nexport var trimStart = function(s: string) {\r\n return s.replace(/^\\s*/, '');\r\n};\r\n\r\nexport function trim(s: string) {\r\n if (s == null)\r\n return '';\r\n return s.replace(new RegExp('^\\\\s+|\\\\s+$', 'g'), '');\r\n}\r\n\r\nexport function trimToEmpty(s: string) {\r\n if (s == null || s.length === 0)\r\n return '';\r\n\r\n return trim(s);\r\n}\r\n\r\nexport function trimToNull(s: string) {\r\n s = trim(s);\r\n if (s.length === 0)\r\n return null;\r\n return s;\r\n}\r\n\r\nexport function replaceAll(s: string, f: string, r: string): string {\r\n s = s || '';\r\n return s.split(f).join(r);\r\n}\r\n\r\nexport function zeroPad(n: number, digits: number): string {\r\n let s = n.toString();\r\n while (s.length < digits)\r\n s = \"0\" + s;\r\n return s;\r\n}","import { isEmptyOrNull, startsWith } from \"./Strings\";\r\n\r\nexport function text(key: string): string {\r\n let t = LT.$table[key];\r\n if (t == null) {\r\n t = key || '';\r\n }\r\n return t;\r\n}\r\n\r\nexport function dbText(prefix: string): ((key: string) => string) {\r\n return function (key: string) {\r\n return text(\"Db.\" + prefix + \".\" + key);\r\n }\r\n}\r\n\r\nexport function prefixedText(prefix: string) {\r\n\r\n return function (text: string, key: string | ((p?: string) => string)) {\r\n\r\n if (text != null && !startsWith(text, '`')) {\r\n var local = tryGetText(text);\r\n if (local != null) {\r\n return local;\r\n }\r\n }\r\n\r\n if (text != null && startsWith(text, '`')) {\r\n text = text.substr(1);\r\n }\r\n\r\n if (!isEmptyOrNull(prefix)) {\r\n var textKey = typeof (key) == \"function\" ? key(prefix) : (prefix + key);\r\n var localText = tryGetText(textKey);\r\n if (localText != null) {\r\n return localText;\r\n }\r\n }\r\n\r\n return text;\r\n }\r\n}\r\n\r\nexport function tryGetText(key: string): string {\r\n return LT.$table[key];\r\n}\r\n\r\nexport function dbTryText(prefix: string): ((key: string) => string) {\r\n return function (key: string) {\r\n return text(\"Db.\" + prefix + \".\" + key);\r\n }\r\n}\r\n\r\nexport function proxyTexts(o: Object, p: string, t: Object): Object {\r\n if (typeof window != 'undefined' && window['Proxy']) {\r\n return new window['Proxy'](o, {\r\n get: (x: Object, y: string) => {\r\n var tv = t[y];\r\n if (tv == null)\r\n return;\r\n if (typeof tv == 'number')\r\n return text(p + y);\r\n else {\r\n var z = o[y];\r\n if (z != null)\r\n return z;\r\n o[y] = z = proxyTexts({}, p + y + '.', tv);\r\n return z;\r\n }\r\n },\r\n ownKeys: (x: Object) => Object.keys(t)\r\n });\r\n }\r\n else {\r\n for (var k of Object.keys(t)) {\r\n if (typeof t[k] == 'number')\r\n Object.defineProperty(o, k, {\r\n get: () => text(p + k)\r\n });\r\n else\r\n o[k] = proxyTexts({}, p + k + '.', t[k]);\r\n }\r\n return o;\r\n }\r\n}\r\n\r\nexport class LT {\r\n static $table: { [key: string]: string } = {};\r\n static empty: LT = new LT('');\r\n\r\n constructor(private key: string) {\r\n }\r\n\r\n static add(obj: any, pre?: string) {\r\n if (!obj) {\r\n return;\r\n }\r\n pre = pre || '';\r\n for (let k of Object.keys(obj)) {\r\n let actual = pre + k;\r\n let o = obj[k];\r\n if (typeof (o) === 'object') {\r\n LT.add(o, actual + '.');\r\n }\r\n else {\r\n LT.$table[actual] = o;\r\n }\r\n }\r\n }\r\n\r\n get() {\r\n var t = LT.$table[this.key];\r\n if (t == null) {\r\n t = this.key || '';\r\n }\r\n return t;\r\n }\r\n\r\n toString() {\r\n var t = LT.$table[this.key];\r\n if (t == null) {\r\n t = this.key || '';\r\n }\r\n return t;\r\n }\r\n\r\n static initializeTextClass = function (type: any, prefix: string) {\r\n var $t1 = Object.keys(type).slice();\r\n for (var $t2 = 0; $t2 < $t1.length; $t2++) {\r\n var member = $t1[$t2];\r\n var value = type[member];\r\n if (value instanceof LT) {\r\n var lt = value;\r\n var key = prefix + member;\r\n LT.$table[key] = lt.key;\r\n type[member] = new LT(key);\r\n }\r\n }\r\n }\r\n\r\n static getDefault = function (key: string, defaultText: string) {\r\n var t = LT.$table[key];\r\n if (t == null) {\r\n t = defaultText;\r\n if (t == null) {\r\n t = key || '';\r\n }\r\n }\r\n return t;\r\n }\r\n}","export type Dictionary = { [key: string]: TItem };\r\n\r\nexport function coalesce(a: any, b: any): any {\r\n return a != null ? a : b;\r\n}\r\n\r\nexport function isValue(a: any): boolean {\r\n return a != null;\r\n}\r\n\r\nexport let today = (): Date => {\r\n var d = new Date();\r\n return new Date(d.getFullYear(), d.getMonth(), d.getDate());\r\n}\r\n\r\nexport function extend(a: T, b: T): T {\r\n for (var key in b)\r\n if (Object.prototype.hasOwnProperty.call(b, key))\r\n a[key] = b[key];\r\n return a;\r\n}\r\n\r\nexport function deepClone(a: T, a2?: any, a3?: any): T {\r\n // for backward compatibility\r\n if (a2 != null || a3 != null) {\r\n return extend(extend(deepClone(a || {}), deepClone(a2 || {})), deepClone(a3 || {}));\r\n }\r\n\r\n if (!a)\r\n return a;\r\n \r\n let v: any;\r\n let b: T = Array.isArray(a) ? [] : {} as any;\r\n for (const k in a) {\r\n v = a[k];\r\n b[k] = (typeof v === \"object\") ? deepClone(v) : v;\r\n }\r\n \r\n return b;\r\n}\r\n\r\n// @ts-ignore check for global\r\nlet globalObj: any = typeof (global) !== \"undefined\" ? global : (typeof (window) !== \"undefined\" ? window : (typeof (self) !== \"undefined\" ? self : null));\r\n\r\ninterface TypeExt {\r\n __interface?: boolean;\r\n __interfaces?: any[];\r\n __isAssignableFrom?: (from: any) => boolean;\r\n __isInstanceOfType?: (instance: any) => boolean;\r\n __metadata?: TypeMetadata;\r\n __metadata$?: TypeMetadata;\r\n __typeName?: string;\r\n __typeName$?: string;\r\n}\r\n\r\ninterface TypeMetadata {\r\n enumFlags?: boolean;\r\n attr?: any[];\r\n members?: TypeMember[];\r\n}\r\n\r\nexport type Type = Function | Object;\r\n\r\nexport interface TypeMember {\r\n name: string;\r\n type: MemberType;\r\n attr?: any[];\r\n getter?: string;\r\n setter?: string;\r\n}\r\n\r\nlet types: { [key: string]: Type } = {};\r\n\r\nexport function getNested(from: any, name: string) {\r\n var a = name.split('.');\r\n for (var i = 0; i < a.length; i++) {\r\n from = from[a[i]];\r\n if (from == null)\r\n return null;\r\n }\r\n return from;\r\n}\r\n\r\nexport function getType(name: string, target?: any): Type {\r\n var type: any;\r\n if (target == null) {\r\n type = types[name];\r\n if (type != null || globalObj == null || name === \"Object\")\r\n return type;\r\n\r\n target = globalObj;\r\n }\r\n\r\n type = getNested(target, name)\r\n if (typeof type !== 'function')\r\n return null;\r\n\r\n return type;\r\n}\r\n\r\nexport function getTypeFullName(type: Type): string {\r\n return (type as TypeExt).__typeName || (type as any).name ||\r\n (type.toString().match(/^\\s*function\\s*([^\\s(]+)/) || [])[1] || 'Object';\r\n};\r\n\r\nexport function getTypeName(type: Type): string {\r\n var fullName = getTypeFullName(type);\r\n var bIndex = fullName.indexOf('[');\r\n var nsIndex = fullName.lastIndexOf('.', bIndex >= 0 ? bIndex : fullName.length);\r\n return nsIndex > 0 ? fullName.substr(nsIndex + 1) : fullName;\r\n};\r\n\r\nexport function getInstanceType(instance: any): any {\r\n if (instance == null)\r\n throw new NullReferenceException('Cannot get type of null');\r\n\r\n // Have to catch as constructor cannot be looked up on native COM objects\r\n try {\r\n return instance.constructor;\r\n }\r\n catch (ex) {\r\n return Object;\r\n }\r\n};\r\n\r\nexport function isAssignableFrom(target: any, type: Type) {\r\n if (target === type || (type as any).prototype instanceof target)\r\n return true;\r\n\r\n if (typeof (target as TypeExt).__isAssignableFrom === 'function')\r\n return (target as TypeExt).__isAssignableFrom(type);\r\n\r\n return false;\r\n};\r\n\r\nexport function isInstanceOfType(instance: any, type: Type) {\r\n if (instance == null)\r\n return false;\r\n\r\n if (typeof (type as TypeExt).__isInstanceOfType === 'function')\r\n return (type as TypeExt).__isInstanceOfType(instance);\r\n\r\n return isAssignableFrom(type, getInstanceType(instance));\r\n};\r\n\r\nexport function safeCast(instance: any, type: Type) {\r\n return isInstanceOfType(instance, type) ? instance : null;\r\n};\r\n\r\nexport function cast(instance: any, type: Type) {\r\n if (instance == null)\r\n return instance;\r\n else if (isInstanceOfType(instance, type))\r\n return instance;\r\n throw new InvalidCastException('Cannot cast object to type ' + getTypeFullName(type));\r\n}\r\n\r\nexport function getBaseType(type: any) {\r\n if (type === Object ||\r\n !type.prototype ||\r\n (type as TypeExt).__interface === true) {\r\n return null;\r\n }\r\n else if (Object.getPrototypeOf) {\r\n return Object.getPrototypeOf(type.prototype).constructor;\r\n }\r\n else {\r\n var p = type.prototype;\r\n if (Object.prototype.hasOwnProperty.call(p, 'constructor')) {\r\n try {\r\n var ownValue = p.constructor;\r\n delete p.constructor;\r\n return p.constructor;\r\n }\r\n finally {\r\n p.constructor = ownValue;\r\n }\r\n }\r\n return p.constructor;\r\n }\r\n};\r\n\r\nexport function getAttributes(type: any, attrType: any, inherit?: boolean) {\r\n var result = [];\r\n if (inherit) {\r\n var b = getBaseType(type);\r\n if (b) {\r\n var a: any = getAttributes(b, attrType, true);\r\n for (var i = 0; i < a.length; i++) {\r\n var t = getInstanceType(a[i]);\r\n result.push(a[i]);\r\n }\r\n }\r\n }\r\n var attr = (type as TypeExt).__metadata?.attr;\r\n if (attr != null) {\r\n for (var i = 0; i < attr.length; i++) {\r\n var a: any = attr[i];\r\n if (attrType == null || isInstanceOfType(a, attrType)) {\r\n var t = getInstanceType(a);\r\n for (var j = result.length - 1; j >= 0; j--) {\r\n if (isInstanceOfType(result[j], t))\r\n result.splice(j, 1);\r\n }\r\n result.push(a);\r\n }\r\n }\r\n }\r\n return result;\r\n};\r\n\r\nexport const enum MemberType {\r\n field = 4,\r\n property = 16\r\n}\r\n\r\nexport function getMembers(type: any, memberTypes: MemberType): TypeMember[] {\r\n var result: TypeMember[] = [];\r\n var b = getBaseType(type);\r\n if (b)\r\n result = getMembers(b, memberTypes & ~1);\r\n\r\n var members = (type as TypeExt).__metadata?.members;\r\n if (members != null) {\r\n for (var m of members) {\r\n if (memberTypes & m.type)\r\n result.push(m);\r\n }\r\n }\r\n\r\n return result;\r\n};\r\n\r\nexport function addTypeMember(type: any, member: TypeMember): TypeMember {\r\n\r\n var name = member.name;\r\n var md = ensureMetadata(type);\r\n md.members = md.members || [];\r\n\r\n let existing: TypeMember;\r\n for (var m of md.members) {\r\n if (m.name == name) {\r\n existing = m;\r\n break;\r\n }\r\n }\r\n\r\n if (existing) {\r\n if (member.type != null)\r\n existing.type = member.type;\r\n if (member.attr != null)\r\n existing.attr = merge(existing.attr, member.attr);\r\n if (member.getter != null)\r\n existing.getter = member.getter;\r\n if (member.setter != null)\r\n existing.setter = member.setter;\r\n return existing;\r\n }\r\n else {\r\n md.members.push(member);\r\n return member;\r\n }\r\n}\r\n\r\nexport function getTypes(from?: any): any[] {\r\n var result = [];\r\n if (!from) {\r\n for (var t in types) {\r\n if (Object.prototype.hasOwnProperty.call(types, t))\r\n result.push(types[t]);\r\n }\r\n }\r\n else {\r\n var traverse = function (s: any, n: string) {\r\n for (var c in s) {\r\n if (Object.prototype.hasOwnProperty.call(s, c))\r\n traverse(s[c], c);\r\n }\r\n if (typeof (s) === 'function' &&\r\n n.charAt(0).toUpperCase() === n.charAt(0) &&\r\n n.charAt(0).toLowerCase() !== n.charAt(0))\r\n result.push(s);\r\n };\r\n traverse(from, '');\r\n }\r\n return result;\r\n};\r\n\r\nexport function clearKeys(d: any) {\r\n for (var n in d) {\r\n if (Object.prototype.hasOwnProperty.call(d, n))\r\n delete d[n];\r\n }\r\n}\r\n\r\nexport function delegateCombine(delegate1: any, delegate2: any) {\r\n if (!delegate1) {\r\n if (!delegate2._targets) {\r\n return delegate2;\r\n }\r\n return delegate2;\r\n }\r\n if (!delegate2) {\r\n if (!delegate1._targets) {\r\n return delegate1;\r\n }\r\n return delegate1;\r\n }\r\n\r\n var targets1 = delegate1._targets ? delegate1._targets : [null, delegate1];\r\n var targets2 = delegate2._targets ? delegate2._targets : [null, delegate2];\r\n\r\n return _mkdel(targets1.concat(targets2));\r\n};\r\n\r\nexport namespace Enum {\r\n export let toString = (enumType: any, value: number): string => {\r\n var values = enumType;\r\n if (value === 0 || !((enumType as TypeExt).__metadata?.enumFlags)) {\r\n for (var i in values) {\r\n if (values[i] === value) {\r\n return i;\r\n }\r\n }\r\n return value == null ? \"\" : value.toString();\r\n }\r\n else {\r\n var parts: string[] = [];\r\n for (var i in values) {\r\n if (values[i] & value) {\r\n parts.push(i);\r\n }\r\n else\r\n parts.push(value == null ? \"\" : value.toString());\r\n }\r\n return parts.join(' | ');\r\n }\r\n };\r\n\r\n export let getValues = (enumType: any) => {\r\n var parts = [];\r\n var values = enumType;\r\n for (var i in values) {\r\n if (Object.prototype.hasOwnProperty.call(values, i) &&\r\n typeof values[i] === \"number\")\r\n parts.push(values[i]);\r\n }\r\n return parts;\r\n };\r\n}\r\n\r\nfunction delegateContains(targets: any[], object: any, method: any) {\r\n for (var i = 0; i < targets.length; i += 2) {\r\n if (targets[i] === object && targets[i + 1] === method) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n};\r\n\r\n\r\nlet _mkdel = (targets: any[]): any => {\r\n var delegate: any = function () {\r\n if (targets.length === 2) {\r\n return targets[1].apply(targets[0], arguments);\r\n }\r\n else {\r\n var clone = targets.slice();\r\n for (var i = 0; i < clone.length; i += 2) {\r\n if (delegateContains(targets, clone[i], clone[i + 1])) {\r\n clone[i + 1].apply(clone[i], arguments);\r\n }\r\n }\r\n return null;\r\n }\r\n };\r\n delegate._targets = targets;\r\n\r\n return delegate;\r\n};\r\n\r\nexport let delegateRemove = (delegate1: any, delegate2: any) => {\r\n if (!delegate1 || (delegate1 === delegate2)) {\r\n return null;\r\n }\r\n if (!delegate2) {\r\n return delegate1;\r\n }\r\n\r\n var targets = delegate1._targets;\r\n var object = null;\r\n var method;\r\n if (delegate2._targets) {\r\n object = delegate2._targets[0];\r\n method = delegate2._targets[1];\r\n }\r\n else {\r\n method = delegate2;\r\n }\r\n\r\n for (var i = 0; i < targets.length; i += 2) {\r\n if ((targets[i] === object) && (targets[i + 1] === method)) {\r\n if (targets.length === 2) {\r\n return null;\r\n }\r\n var t = targets.slice();\r\n t.splice(i, 2);\r\n return _mkdel(t);\r\n }\r\n }\r\n\r\n return delegate1;\r\n};\r\n\r\nexport let isEnum = (type: any) => {\r\n return typeof type !== \"function\" &&\r\n (type as TypeExt).__interface === null;\r\n};\r\n\r\nexport function initFormType(typ: Function, nameWidgetPairs: any[]) {\r\n for (var i = 0; i < nameWidgetPairs.length - 1; i += 2) {\r\n (function (name: string, widget: any) {\r\n Object.defineProperty(typ.prototype, name, {\r\n get: function () {\r\n return this.w(name, widget);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n })(nameWidgetPairs[i], nameWidgetPairs[i + 1]);\r\n }\r\n}\r\n\r\nexport function prop(type: any, name: string, getter?: string, setter?: string) {\r\n getter = getter || \"get_\" + name;\r\n setter = setter || \"set_\" + name;\r\n\r\n Object.defineProperty(type.prototype, name, {\r\n get: function () {\r\n return this[getter]();\r\n },\r\n set: function (value) {\r\n return this[setter](value);\r\n },\r\n configurable: true,\r\n enumerable: true\r\n });\r\n}\r\n\r\nfunction ensureMetadata(target: Type): TypeMetadata {\r\n\r\n if (!Object.hasOwnProperty.call(target, '__metadata')) {\r\n Object.defineProperty(target, '__metadata', {\r\n get: function () { return Object.prototype.hasOwnProperty.call(this, '__metadata$') ? (this as TypeExt).__metadata$ : void 0; },\r\n set: function (v) { (this as TypeExt).__metadata$ = v; }\r\n });\r\n }\r\n if (!(target as TypeExt).__metadata) {\r\n (target as TypeExt).__metadata = Object.create(null);\r\n }\r\n\r\n return (target as TypeExt).__metadata;\r\n}\r\n\r\nfunction distinct(arr: any[]) {\r\n return arr.filter((item, pos) => arr.indexOf(item) === pos);\r\n}\r\n\r\nfunction merge(arr1: any[], arr2: any[]) {\r\n if (!arr1 || !arr2)\r\n return (arr1 || arr2 || []).slice();\r\n\r\n return distinct(arr1.concat(arr2));\r\n}\r\n\r\nfunction interfaceIsAssignableFrom(from: any) {\r\n return from != null && (from as TypeExt).__interfaces != null && (from as TypeExt).__interfaces.indexOf(this) >= 0;\r\n}\r\n\r\nfunction registerType(type: any, name: string, intf: any[]) {\r\n if (name && name.length) {\r\n setTypeName(type, name);\r\n types[name] = type;\r\n }\r\n else if ((type as TypeExt).__typeName && (type as TypeExt).__typeName.length)\r\n types[(type as TypeExt).__typeName] = type;\r\n\r\n if (intf != null && intf.length)\r\n (type as TypeExt).__interfaces = merge((type as TypeExt).__interfaces, intf);\r\n}\r\n\r\nexport function registerClass(type: any, name: string, intf?: any[]) {\r\n registerType(type, name, intf);\r\n (type as TypeExt).__interface = false;\r\n}\r\n\r\nexport function registerEnum(type: any, name: string) {\r\n registerType(type, name, undefined);\r\n (type as TypeExt).__interface = null; // mark as enum\r\n}\r\n\r\nexport function registerInterface(type: any, name: string, intf?: any[]) {\r\n registerType(type, name, intf);\r\n (type as TypeExt).__interface = true;\r\n (type as TypeExt).__isAssignableFrom = interfaceIsAssignableFrom;\r\n}\r\n\r\nexport function addAttribute(type: any, attr: any) {\r\n var md = ensureMetadata(type);\r\n md.attr = md.attr || [];\r\n md.attr.push(attr);\r\n}\r\n\r\nexport function setTypeName(target: Type, value: string) {\r\n if (!Object.hasOwnProperty.call(target, '__typeName')) {\r\n Object.defineProperty(target, '__typeName', {\r\n get: function() { return Object.prototype.hasOwnProperty.call(this, '__typeName$') ? (this as TypeExt).__typeName$ : void 0; },\r\n set: function(v) { (this as TypeExt).__typeName$ = v; }\r\n });\r\n }\r\n (target as TypeExt).__typeName = value;\r\n}\r\n\r\nexport class ISlickFormatter {\r\n}\r\n\r\nregisterInterface(ISlickFormatter, 'Serenity.ISlickFormatter');\r\n\r\nexport function initializeTypes(root: any, pre: string, limit: number) {\r\n\r\n if (!root)\r\n return;\r\n\r\n for (var k of Object.keys(root)) {\r\n if (k.charAt(0) < 'A' || k.charAt(0) > 'Z')\r\n continue;\r\n\r\n if (k.indexOf('$') >= 0)\r\n continue;\r\n\r\n if (k === \"prototype\")\r\n continue;\r\n\r\n if (!Object.prototype.hasOwnProperty.call(root, k))\r\n continue;\r\n\r\n var obj = root[k];\r\n\r\n if ($.isArray(obj) ||\r\n root instanceof Date)\r\n continue;\r\n\r\n var t = typeof (obj);\r\n if (t === \"string\" || t === \"number\")\r\n continue;\r\n\r\n if (!(obj as TypeExt).__typeName &&\r\n ((typeof obj === \"function\" && obj.nodeType !== \"number\") || \r\n ((obj as TypeExt).__interface !== undefined))) {\r\n \r\n if (!obj.__interfaces &&\r\n obj.prototype &&\r\n obj.prototype.format &&\r\n k.substr(-9) === \"Formatter\") {\r\n if ((obj as TypeExt).__interface === undefined)\r\n (obj as TypeExt).__interface = false;\r\n (obj as TypeExt).__interfaces = [ISlickFormatter]\r\n }\r\n\r\n if ((obj as TypeExt).__interface === undefined) {\r\n var baseType = getBaseType(obj);\r\n if (baseType && (baseType as TypeExt).__interface === false) {\r\n (obj as TypeExt).__interface = false;\r\n }\r\n }\r\n\r\n if ((obj as TypeExt).__interface !== undefined) {\r\n setTypeName(obj, pre + k);\r\n types[pre + k] = obj;\r\n }\r\n }\r\n \r\n if (limit > 0) \r\n initializeTypes(obj, pre + k + \".\", limit - 1);\r\n }\r\n}\r\n\r\nexport class Exception extends Error {\r\n constructor(message: string) {\r\n super(message);\r\n this.name = \"Exception\";\r\n }\r\n}\r\n\r\nexport class NullReferenceException extends Exception {\r\n constructor(message?: string) {\r\n super(message || 'Object is null.');\r\n this.name = \"NullReferenceException\";\r\n }\r\n}\r\n\r\nexport class ArgumentNullException extends Exception {\r\n constructor(paramName: string, message?: string) {\r\n super((message || 'Value cannot be null.') + '\\nParameter name: ' + paramName);\r\n this.name = \"ArgumentNullException\";\r\n }\r\n}\r\n\r\nexport class ArgumentOutOfRangeException extends Exception {\r\n constructor(paramName: string, message?: string) {\r\n super((message ?? 'Value is out of range.') +\r\n (paramName ? ('\\nParameter name: ' + paramName) : \"\"));\r\n this.name = \"ArgumentNullException\";\r\n }\r\n}\r\n\r\nexport class InvalidCastException extends Exception {\r\n constructor(message: string) {\r\n super(message);\r\n this.name = \"InvalidCastException\";\r\n }\r\n}\r\n\r\nexport {}","import { extend } from \"./System\";\r\n\r\nexport let defaultNotifyOptions: ToastrOptions = {\r\n timeOut: 3000,\r\n showDuration: 250,\r\n hideDuration: 500,\r\n extendedTimeOut: 500,\r\n positionClass: 'position-toast toast-top-full-width'\r\n}\r\n\r\nfunction getToastrOptions(options: ToastrOptions) {\r\n options = extend(extend({}, defaultNotifyOptions), options);\r\n positionToastContainer(true, options);\r\n return options;\r\n}\r\n\r\nexport function notifyWarning(message: string, title?: string, options?: ToastrOptions): void {\r\n toastr.warning(message, title, getToastrOptions(options));\r\n}\r\n\r\nexport function notifySuccess(message: string, title?: string, options?: ToastrOptions): void {\r\n toastr.success(message, title, getToastrOptions(options));\r\n}\r\n\r\nexport function notifyInfo(message: string, title?: string, options?: ToastrOptions): void {\r\n toastr.info(message, title, getToastrOptions(options));\r\n}\r\n\r\nexport function notifyError(message: string, title?: string, options?: ToastrOptions): void {\r\n toastr.error(message, title, getToastrOptions(options));\r\n}\r\n\r\nexport function positionToastContainer(create: boolean, options?: ToastrOptions) {\r\n if (typeof toastr === 'undefined') {\r\n return;\r\n }\r\n\r\n var container = toastr.getContainer(options, create);\r\n if (!container.length || !container.hasClass('position-toast'))\r\n return;\r\n\r\n var dialog = $(window.document.body).children('.ui-dialog:visible, .modal.in, .modal.show').last();\r\n if (dialog.length > 0) {\r\n var position = dialog.position();\r\n container.addClass('positioned-toast');\r\n container.css({ position: 'absolute', top: position.top + 28 + 'px', left: position.left + 6 + 'px', width: dialog.width() - 12 + 'px' });\r\n }\r\n else {\r\n if (container.hasClass('positioned-toast')) {\r\n container.removeClass('positioned-toast');\r\n container.css({ position: '', top: '', left: '', width: '' });\r\n }\r\n }\r\n}","var Config = {\r\n /**\r\n * This is the root path of your application. If your application resides under http://localhost/mysite/,\r\n * your root path is \"mysite/\". This variable is automatically initialized by reading from a element\r\n * with ID \"ApplicationPath\" from current page, which is usually located in your _LayoutHead.cshtml file\r\n */\r\n applicationPath: '/',\r\n\r\n /**\r\n * Email validation by default only allows ASCII characters. Set this to true if you want to allow unicode.\r\n */\r\n emailAllowOnlyAscii: true,\r\n\r\n /**\r\n * Set this to true, to enable responsive dialogs by default, without having to add Decorators.responsive()\"\r\n * on dialog classes manually. It's false by default for backward compatibility.\r\n */\r\n responsiveDialogs: false,\r\n\r\n /**\r\n * Set this to true, to prefer bootstrap dialogs over jQuery UI dialogs by default for message dialogs\r\n */\r\n bootstrapMessages: false,\r\n\r\n /**\r\n * This is the list of root namespaces that may be searched for types. For example, if you specify an editor type\r\n * of \"MyEditor\", first a class with name \"MyEditor\" will be searched, if not found, search will be followed by\r\n * \"Serenity.MyEditor\" and \"MyApp.MyEditor\" if you added \"MyApp\" to the list of root namespaces.\r\n *\r\n * You should usually add your application root namespace to this list in ScriptInitialization.ts file.\r\n */\r\n rootNamespaces: ['Serenity'],\r\n\r\n /**\r\n * This is an optional method for handling when user is not logged in. If a users session is expired \r\n * and when a NotAuthorized response is received from a service call, Serenity will call this handler, so\r\n * you may intercept it and notify user about this situation and ask if she wants to login again...\r\n */\r\n notLoggedInHandler: null\r\n}\r\n\r\nif (typeof document !== 'undefined') {\r\n var pathLink = document.querySelector('link#ApplicationPath') as HTMLLinkElement;\r\n if (pathLink != null) {\r\n Config.applicationPath = pathLink.getAttribute('href');\r\n }\r\n}\r\n\r\nexport { Config };","import { Exception } from \"./System\";\r\nimport { text } from \"./LocalText\";\r\nimport { isEmptyOrNull } from \"./Strings\";\r\n\r\nexport function addOption(select: JQuery, key: string, text: string) {\r\n $('