{"version":3,"file":"Serenity.CoreLib.js","sources":["../corelib/q/arrays.ts","../corelib/q/system.ts","../corelib/q/strings.ts","../corelib/q/localtext.ts","../corelib/q/notify.ts","../corelib/q/config.ts","../corelib/q/html.ts","../corelib/q/dialogs.ts","../corelib/q/errorhandling.ts","../corelib/q/blockui.ts","../corelib/q/services.ts","../corelib/q/formatting.ts","../corelib/q/scriptdata.ts","../corelib/q/authorization.ts","../corelib/q/debounce.ts","../corelib/q/layouttimer.ts","../corelib/q/router.ts","../corelib/q/layout.ts","../corelib/q/lookup.ts","../corelib/q/propertyitem.ts","../corelib/q/servicetypes.ts","../corelib/q/validation.ts","../corelib/q/validateoptions.ts","../corelib/q/criteria.ts","../corelib/decorators/index.ts","../corelib/interfaces/ibooleanvalue.ts","../corelib/interfaces/idoublevalue.ts","../corelib/interfaces/idialog.ts","../corelib/interfaces/ieditdialog.ts","../corelib/interfaces/igeteditvalue.ts","../corelib/interfaces/ireadonly.ts","../corelib/interfaces/iseteditvalue.ts","../corelib/interfaces/istringvalue.ts","../corelib/interfaces/ivalidaterequired.ts","../corelib/types/captureoperationtype.ts","../corelib/types/reflectionutils.ts","../corelib/types/commontyperegistry.ts","../corelib/types/dialogtyperegistry.ts","../corelib/patch/jquerypatch.ts","../corelib/ui/widgets/widget.ts","../corelib/types/editortyperegistry.ts","../corelib/types/enumtyperegistry.ts","../corelib/ui/helpers/lazyloadhelper.ts","../corelib/ui/widgets/prefixedcontext.ts","../corelib/ui/widgets/toolbar.ts","../corelib/ui/widgets/templatedwidget.ts","../corelib/ui/widgets/flexify.ts","../corelib/ui/dialogs/dialogextensions.ts","../corelib/ui/dialogs/templateddialog.ts","../corelib/ui/widgets/templatedpanel.ts","../corelib/ui/helpers/validationhelper.ts","../corelib/ui/editors/cascadedwidgetlink.ts","../corelib/ui/helpers/tabsextensions.ts","../corelib/ui/widgets/reflectionoptionssetter.ts","../corelib/ui/editors/editorutils.ts","../corelib/ui/widgets/propertygrid.ts","../corelib/ui/widgets/propertypanel.ts","../corelib/ui/helpers/subdialoghelper.ts","../corelib/ui/dialogs/propertydialog.ts","../corelib/ui/editors/stringeditor.ts","../corelib/ui/editors/passwordeditor.ts","../corelib/ui/editors/textareaeditor.ts","../corelib/ui/editors/booleaneditor.ts","../corelib/ui/editors/decimaleditor.ts","../corelib/ui/editors/integereditor.ts","../corelib/ui/editors/dateeditor.ts","../corelib/ui/editors/datetimeeditor.ts","../corelib/ui/editors/timeeditor.ts","../corelib/ui/editors/emaileditor.ts","../corelib/ui/editors/emailaddresseditor.ts","../corelib/ui/editors/urleditor.ts","../corelib/ui/editors/radiobuttoneditor.ts","../corelib/ui/editors/select2editor.ts","../corelib/ui/editors/selecteditor.ts","../corelib/ui/editors/dateyeareditor.ts","../corelib/ui/editors/enumeditor.ts","../corelib/ui/editors/lookupeditor.ts","../corelib/ui/editors/servicelookupeditor.ts","../corelib/ui/editors/htmlcontenteditor.ts","../corelib/ui/editors/maskededitor.ts","../corelib/ui/editors/recaptcha.ts","../corelib/ui/helpers/uploadhelper.ts","../corelib/ui/editors/uploadeditors.ts","../corelib/ui/datagrid/quickfilterbar.ts","../corelib/ui/datagrid/quicksearchinput.ts","../corelib/ui/filtering/filteroperator.ts","../corelib/ui/filtering/filterstore.ts","../corelib/ui/filtering/filtering.ts","../corelib/ui/filtering/filterwidgetbase.ts","../corelib/ui/filtering/filterpanel.ts","../corelib/ui/filtering/filterdialog.ts","../corelib/ui/filtering/filterdisplaybar.ts","../corelib/ui/datagrid/slickpager.ts","../corelib/ui/formatters/formatters.ts","../corelib/types/formattertyperegistry.ts","../corelib/ui/helpers/slickhelpers.ts","../corelib/slick/aggregators.ts","../corelib/slick/remoteview.ts","../corelib/ui/datagrid/datagrid.ts","../corelib/ui/datagrid/columnpickerdialog.ts","../corelib/ui/datagrid/treegridmixin.ts","../corelib/ui/editors/checktreeeditor.ts","../corelib/ui/datagrid/entitygrid.ts","../corelib/ui/dialogs/entitydialog.ts","../corelib/ui/widgets/reporting.ts","../corelib/ui/widgets/scriptcontext.ts","../corelib/interfaces/iasyncinit.ts","../corelib/ui/widgets/wx.ts","../corelib/ui/widgets/googlemap.ts","../corelib/ui/editors/select2ajaxeditor.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 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 // https://github.com/angus-c/just/blob/master/packages/collection-clone/index.js\r\n var result = a;\r\n var type = {}.toString.call(a).slice(8, -1);\r\n if (type == 'Set') {\r\n return new Set([...(a as any)].map(value => deepClone(value))) as any;\r\n }\r\n if (type == 'Map') {\r\n return new Map([...(a as any)].map(kv => [deepClone(kv[0]), deepClone(kv[1])])) as any;\r\n }\r\n if (type == 'Date') {\r\n return new Date((a as any).getTime()) as any;\r\n }\r\n if (type == 'RegExp') {\r\n return RegExp((a as any).source, getRegExpFlags(a as any)) as any;\r\n }\r\n if (type == 'Array' || type == 'Object') {\r\n result = (Array.isArray(a) ? [] : {}) as any;\r\n for (var key in a) {\r\n // include prototype properties\r\n result[key] = deepClone(a[key]);\r\n }\r\n }\r\n // primitives and non-supported objects (e.g. functions) land here\r\n return result;\r\n}\r\n\r\nfunction getRegExpFlags(regExp: RegExp) {\r\n if (typeof (regExp.source as any).flags == 'string') {\r\n return (regExp.source as any).flags;\r\n } else {\r\n var flags = [];\r\n regExp.global && flags.push('g');\r\n regExp.ignoreCase && flags.push('i');\r\n regExp.multiline && flags.push('m');\r\n regExp.sticky && flags.push('y');\r\n regExp.unicode && flags.push('u');\r\n return flags.join('');\r\n }\r\n}\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 __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\nfunction getTypeStore() {\r\n return getStateStore(\"__types\");\r\n}\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\nconst globalObj: any = \r\n (typeof globalThis !== \"undefined\" && globalThis) || \r\n (typeof window !== \"undefined\" && window) || \r\n (typeof self !== \"undefined\" && self) ||\r\n // @ts-ignore check for global\r\n (typeof global !== \"undefined\" && global) ||\r\n (function () { return this; })() || Function('return this')();\r\n\r\nexport function getGlobalThis(): any {\r\n return globalObj;\r\n}\r\n\r\nexport function getType(name: string, target?: any): Type {\r\n var type: any;\r\n const types = getTypeStore();\r\n if (target == null) {\r\n type = types[name];\r\n if (type != null || globalObj == void 0 || 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 getTypeNameProp(type: Type): string {\r\n return (Object.prototype.hasOwnProperty.call(type, \"__typeName\") && (type as TypeExt).__typeName) || void 0;\r\n}\r\n\r\nexport function setTypeNameProp(type: Type, value: string) {\r\n Object.defineProperty(type, \"__typeName\", { value, configurable: true });\r\n}\r\n\r\nexport function getTypeFullName(type: Type): string {\r\n return getTypeNameProp(type) || (type as any).name ||\r\n (type.toString().match(/^\\s*function\\s*([^\\s(]+)/) || [])[1] || 'Object';\r\n};\r\n\r\nexport function getTypeShortName(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 ArgumentNullException(\"instance\", \"Can't get instance type of null or undefined!\");\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 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 const types = getTypeStore();\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\nconst fallbackStore: any = {};\r\n\r\n\r\nexport function getStateStore(key?: string): any {\r\n\r\n let store: any;\r\n if (globalObj) {\r\n if (!globalObj.Q)\r\n globalObj.Q = {};\r\n\r\n store = globalObj.Q.__stateStore;\r\n if (!store)\r\n globalObj.Q.__stateStore = store = Object.create(null);\r\n }\r\n else\r\n store = fallbackStore;\r\n\r\n if (key == null)\r\n return store;\r\n\r\n var s = store[key];\r\n if (s == null)\r\n store[key] = s = Object.create(null);\r\n return s;\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.prototype.hasOwnProperty.call(target, '__metadata') ||\r\n !(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\nconst _fieldsProxy = new Proxy({}, { get: (_, p) => p }) as any;\r\n\r\nexport function fieldsProxy(): Readonly> {\r\n return _fieldsProxy\r\n}\r\n\r\nexport function keyOf(prop: keyof T) {\r\n return prop;\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 && \r\n Array.isArray((from as TypeExt).__interfaces) && \r\n (from as TypeExt).__interfaces.some(x => \r\n x === this ||\r\n (getTypeNameProp(this)?.length && \r\n x.__interface &&\r\n getTypeNameProp(x) === this.__typeName));\r\n}\r\n\r\nfunction registerType(type: any, name: string, intf: any[]) {\r\n const types = getTypeStore();\r\n if (name && name.length) {\r\n setTypeNameProp(type, name);\r\n types[name] = type;\r\n }\r\n else if (getTypeNameProp(type as TypeExt)?.length)\r\n types[(type as TypeExt).__typeName] = type;\r\n\r\n if (intf != null && intf.length)\r\n Object.defineProperty(type, \"__interfaces\", {\r\n value: merge((type as TypeExt).__interfaces, intf),\r\n configurable: true\r\n });\r\n}\r\n\r\nexport function registerClass(type: any, name: string, intf?: any[]) {\r\n registerType(type, name, intf);\r\n Object.defineProperty(type, \"__interface\", { value: false, configurable: true });\r\n}\r\n\r\nexport function registerEditor(type: any, name: string, intf?: any[]) {\r\n registerClass(type, name, intf);\r\n addAttribute(type, new EditorAttribute());\r\n}\r\n\r\nexport function registerEnum(type: any, name: string, enumKey?: string) {\r\n registerType(type, name, undefined);\r\n if (enumKey && enumKey != name) {\r\n const types = getTypeStore();\r\n if (!types[enumKey])\r\n types[enumKey] = type;\r\n }\r\n Object.defineProperty(type, \"__interface\", { value: null, configurable: true });\r\n}\r\n\r\nexport function registerInterface(type: any, name: string, intf?: any[]) {\r\n registerType(type, name, intf);\r\n Object.defineProperty(type, \"__interface\", { value: true, configurable: true });\r\n Object.defineProperty(type, \"__isAssignableFrom\", { value: interfaceIsAssignableFrom, configurable: true });\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 class ISlickFormatter {\r\n}\r\n\r\nregisterInterface(ISlickFormatter, 'Serenity.ISlickFormatter');\r\n\r\nexport class EditorAttribute {\r\n}\r\n\r\nregisterClass(EditorAttribute, 'Serenity.EditorAttribute');\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 const types = getTypeStore();\r\n\r\n for (var k of Object.keys(root)) {\r\n if (k.charAt(0) < 'A' || \r\n k.charAt(0) > 'Z' || \r\n k.indexOf('$') >= 0 || \r\n !Object.prototype.hasOwnProperty.call(root, k))\r\n continue;\r\n\r\n var obj = root[k];\r\n\r\n if (obj == void 0 ||\r\n Array.isArray(obj) ||\r\n obj instanceof Date ||\r\n (typeof obj != \"function\" &&\r\n typeof obj != \"object\"))\r\n continue;\r\n\r\n // no explict __typeName, e.g. not registered with a name,\r\n // a function but not an html element, or registered without name\r\n if (!getTypeNameProp(obj) && \r\n ((typeof obj === \"function\" && typeof obj.nodeType !== \"number\") || \r\n (Object.prototype.hasOwnProperty.call(obj, \"__interface\") &&\r\n (obj as TypeExt).__interface !== undefined))) {\r\n \r\n // legacy formatter with registerClass\r\n if (typeof obj == \"function\" && \r\n !obj.__interfaces && \r\n obj.prototype?.format &&\r\n k.substr(-9) === \"Formatter\") {\r\n if ((obj as TypeExt).__interface === undefined)\r\n Object.defineProperty(obj, \"__interface\", { value: false, configurable: true });\r\n (obj as TypeExt).__interfaces = [ISlickFormatter]\r\n }\r\n\r\n // only register types that should\r\n if ((obj as TypeExt).__interface !== undefined) {\r\n setTypeNameProp(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 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 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 {}","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 { getStateStore } from \"./system\";\r\nimport { isEmptyOrNull, startsWith } from \"./strings\";\r\n\r\nexport function localText(key: string): string {\r\n let t: string = getTable()[key];\r\n if (t == null) {\r\n t = key ?? '';\r\n }\r\n return t;\r\n}\r\n\r\n/** @obsolete prefer localText for better discoverability */\r\nexport const text = localText;\r\n\r\nexport function dbText(prefix: string): ((key: string) => string) {\r\n return function (key: string) {\r\n return localText(\"Db.\" + prefix + \".\" + key);\r\n }\r\n}\r\n\r\nfunction getTable(): { [key: string]: string } {\r\n return getStateStore(\"__localText\");\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 var value = getTable()[key];\r\n return value;\r\n}\r\n\r\nexport function dbTryText(prefix: string): ((key: string) => string) {\r\n return function (key: string) {\r\n return localText(\"Db.\" + prefix + \".\" + key);\r\n }\r\n}\r\n\r\nexport function proxyTexts(o: Record, p: string, t: Record): 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 localText(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: () => localText(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 empty: LT = new LT('');\r\n\r\n constructor(private key: string) {\r\n }\r\n\r\n static add(key: string, value: string): void;\r\n static add(obj: any, pre?: string) {\r\n if (!obj) {\r\n return;\r\n }\r\n \r\n let table = getTable();\r\n\r\n if (typeof obj === \"string\") {\r\n table[obj] = pre;\r\n return;\r\n }\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 table[actual] = o;\r\n }\r\n }\r\n }\r\n\r\n get() {\r\n var t = getTable()[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 = getTable()[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 var table = getTable();\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 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 = getTable()[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}\r\n\r\nif (typeof globalThis !== \"undefined\") {\r\n const Q = (globalThis as any).Q || ((globalThis as any).Q = {});\r\n if (Q.LT == null)\r\n Q.LT = LT;\r\n}","import { extend } from \"./system\";\r\n\r\n// set default for toastr itself, possible security issue\r\nif (typeof toastr !== \"undefined\" && toastr.options)\r\n toastr.options.escapeHtml = true;\r\n\r\nexport let defaultNotifyOptions: ToastrOptions = {\r\n timeOut: 3000,\r\n showDuration: 250,\r\n hideDuration: 500,\r\n escapeHtml: true,\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 * @Obsolete defaulted to false before for backward compatibility, now its true by default\r\n */\r\n responsiveDialogs: true,\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 { localText } from \"./localtext\";\r\nimport { isEmptyOrNull } from \"./strings\";\r\n\r\nexport function addOption(select: JQuery, key: string, text: string) {\r\n $('