{"version":3,"file":"app-afad2130.47e839c4edc29ae0ca22.bundle.js","mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AACA;AACA;AAEA;AACA;AAEA;AAEA;AACA;AAEA;;;;;;AACA;AAEA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAGA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;;AAAA;;;;;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAEA;;;;;;AACA;AACA;AAEA;AACA;AACA;;;AAAA;AACA;;AAAA;AACA;;;AAFA;;AAIA;;;;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;;;;;;AACA;AACA;AACA;AAEA;AAEA;;;AAAA;AACA;AACA;AACA;;AAAA;;;AAHA;;AAQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;;;;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;AC9LA;AACA;AACA;AAGA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAIA;AAAA;AAAA;AAFA;AAIA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AA3CA;AADA;AAKA;AAJA;AA4CA;AAAA;AA5CA","sources":["webpack://client-app/./src/validation.ts","webpack://client-app/./src/viewPort.ts"],"sourcesContent":["import { validate as innerValidate, ValidationError } from \"class-validator\";\r\nimport { Binding, AccessScope, BindingBehavior, Expression, AccessMember } from \"aurelia-binding\";\r\nimport { ValidationTriggers } from \"resources/behaviour/bindValidationResult\";\r\n\r\nexport * from \"class-validator\";\r\nexport * from \"resources/behaviour/validators\";\r\n\r\nexport function validateBinding(binding: Binding): Promise {\r\n // autoValidation\r\n return validateInternal(binding['source'].bindingContext, [binding], ValidationTriggers.AutoValidation);\r\n}\r\n\r\nexport async function addBindingValidation(binding: Binding) {\r\n let vm: any = binding.source.bindingContext;\r\n //let vm:any = scope.controller.viewModel;\r\n vm.__validationerrorbindings_expressions__ = vm.__validationerrorbindings_expressions__ || [];\r\n vm.__validationerrorbindings_expressions__.push(binding);\r\n\r\n // also add binding to parent vm so validation can be triggered by the parent later\r\n let parent = (binding.source as any).container.parent;\r\n while (parent) {\r\n if (parent.viewModel && parent.viewModel.__validationerrorbindings_expressions__) {\r\n if (binding.source.bindingContext.validationMessages === undefined\r\n && !parent.viewModel.__validationerrorbindings_expressions__.some((x: any) => x.target.inputCounter === (binding as any).target.inputCounter)) {\r\n parent.viewModel.__validationerrorbindings_expressions__.push(binding);\r\n }\r\n }\r\n\r\n parent = parent.parent;\r\n }\r\n\r\n\r\n binding['target'].__validationerrorbindings_targetbinding__ = binding['target'].__validationerrorbindings_targetbinding__ || [];\r\n binding['target'].__validationerrorbindings_targetbinding__.push(binding);\r\n\r\n binding['__ValidateBindingBehavior'] = binding.updateSource;\r\n binding.updateSource = function (v) {\r\n binding['__ValidateBindingBehavior'].apply(this, [v]);\r\n\r\n if (binding && binding.sourceExpression instanceof BindingBehavior) {\r\n validateBinding(binding);\r\n }\r\n }\r\n\r\n await validateInternal(vm, [], ValidationTriggers.AutoValidation);\r\n}\r\n\r\nexport function removeBindingValidation(binding: Binding) {\r\n let vm: any = binding.source.bindingContext;\r\n vm.__validationerrorbindings_expressions__ = vm.__validationerrorbindings_expressions__ || [];\r\n vm.__validationerrorbindings_expressions__ = vm.__validationerrorbindings_expressions__.filter(x => x != binding);\r\n\r\n binding['target'].__validationerrorbindings_targetbinding__ = binding['target'].__validationerrorbindings_targetbinding__ || [];\r\n binding['target'].__validationerrorbindings_targetbinding__ = binding['target'].__validationerrorbindings_targetbinding__.filter(x => x != binding);\r\n\r\n binding.updateSource = binding['__ValidateBindingBehavior'];\r\n delete binding['__ValidateBindingBehavior'];\r\n}\r\n\r\nexport async function validateBoundType(model: Object): Promise {\r\n var vm = model as any;\r\n vm.__validationerrorbindings_targetbinding__ = vm.__validationerrorbindings_targetbinding__ || [];\r\n\r\n let bindings: Binding[] = vm.__validationerrorbindings_targetbinding__;\r\n var results = [];\r\n for (var i = 0; i < bindings.length; i++) {\r\n var r = await validateBinding(bindings[i]);\r\n results = [...results, ...r];\r\n }\r\n return results;\r\n}\r\n\r\nfunction debounceValidation(model: Object): Promise {\r\n return new Promise((resolve, reject) => {\r\n model['__validationerrorbindings__validate_resolves__'] = model['__validationerrorbindings__validate_resolves__'] || [];\r\n model['__validationerrorbindings__validate_resolves__'].push({ resolve, reject });\r\n\r\n if (model['__validationerrorbindings_timeout__']) {\r\n clearTimeout(model['__validationerrorbindings_timeout__']);\r\n }\r\n\r\n model['__validationerrorbindings_timeout__'] = setTimeout(() => {\r\n innerValidate(model).then(r => {\r\n var callbacks = model['__validationerrorbindings__validate_resolves__'];\r\n model['__validationerrorbindings__validate_resolves__'] = [];\r\n callbacks.forEach(cb => {\r\n cb.resolve(r);\r\n });\r\n }).catch(e=>{\r\n var callbacks = model['__validationerrorbindings__validate_resolves__'];\r\n model['__validationerrorbindings__validate_resolves__'] = [];\r\n callbacks.forEach(cb => {\r\n cb.reject(e);\r\n });\r\n })\r\n }, 10);\r\n });\r\n}\r\n\r\nasync function validateInternal(model: Object, bindings: Binding[], trigger: ValidationTriggers): Promise {\r\n let vm = model as any;\r\n vm.__validationerrorbindings_expressions__ = vm.__validationerrorbindings_expressions__ || [];\r\n let allBindings: Binding[] = vm.__validationerrorbindings_expressions__;\r\n\r\n if (trigger === ValidationTriggers.ManualValidation) {\r\n // also trigger validation of other bindings to show validation messages\r\n for (let i = 0; i < allBindings.length; i++) {\r\n const binding: any = allBindings[i];\r\n if (binding.target.__validationerrorbindings_expressions__) {\r\n await validate(binding.target);\r\n }\r\n }\r\n }\r\n\r\n return debounceValidation(model).then((e) => {\r\n allBindings.forEach(binding => {\r\n if (binding && binding.sourceExpression instanceof BindingBehavior) {\r\n if (binding['target'] && binding['target']['__validationerrorbindings__']) {\r\n var result = extractErrors(e, binding.sourceExpression.expression);\r\n (binding['target']['__validationerrorbindings__'] as Array).forEach(b => {\r\n binding['target'][b] = result;\r\n })\r\n }\r\n }\r\n });\r\n\r\n if (vm['__validationerrorbindings__']) {\r\n (vm['__validationerrorbindings__'] as Array).forEach(b => {\r\n vm[b] = e;\r\n })\r\n }\r\n\r\n bindings.forEach(binding => {\r\n if (binding && binding.sourceExpression instanceof BindingBehavior) {\r\n if (binding['target'] && binding['target']['__validationerrorbindings_fired__']) {\r\n (binding['target']['__validationerrorbindings_fired__'] as Array<{ prop: string, trigger: ValidationTriggers }>).forEach(b => {\r\n if (trigger == b.trigger) {\r\n binding['target'][b.prop] = true;\r\n }\r\n })\r\n }\r\n }\r\n });\r\n\r\n if (vm['__validationerrorbindings_fired__']) {\r\n (vm['__validationerrorbindings_fired__'] as Array<{ prop: string, trigger: ValidationTriggers }>).forEach(b => {\r\n if (trigger == b.trigger) {\r\n vm[b.prop] = true;\r\n }\r\n })\r\n }\r\n\r\n return e;\r\n });\r\n}\r\n\r\nexport function validate(model: Object): Promise {\r\n // manual validation\r\n let vm = model as any;\r\n vm.__validationerrorbindings_expressions__ = vm.__validationerrorbindings_expressions__ || [];\r\n let bindings: Binding[] = vm.__validationerrorbindings_expressions__;\r\n return validateInternal(model, bindings, ValidationTriggers.ManualValidation);\r\n}\r\n\r\nfunction extractErrors(errors: ValidationError[], expression: Expression): ValidationError {\r\n if (expression instanceof AccessMember) {\r\n var error = extractErrors(errors, expression.object)\r\n if (error) return error.children.find(x => x.property === expression.name);\r\n } else if (expression instanceof AccessScope) {\r\n return errors.find(x => x.property === expression.name) || null;\r\n }\r\n return null;\r\n}\r\n\r\nfunction extractModel(scope: any, expression: Expression): { scope: any, property: () => any, propertyName: string } {\r\n if (expression instanceof AccessMember) {\r\n var member = extractModel(scope, expression.object)\r\n return {\r\n scope: member.property(),\r\n property: () => member.property[expression.name],\r\n propertyName: expression.name\r\n };\r\n } else if (expression instanceof AccessScope) {\r\n return {\r\n scope,\r\n property: () => scope[expression.name],\r\n propertyName: expression.name\r\n }\r\n }\r\n return null;\r\n}","import { autoinject, PLATFORM } from \"aurelia-framework\";\r\nimport { EventAggregator } from \"aurelia-event-aggregator\";\r\nrequire('./style/view-port.scss')\r\n\r\n\r\nexport enum ViewPorts {\r\n desktop = 5,\r\n laptop = 4,\r\n tablet = 3,\r\n phablet = 2,\r\n mobile = 1,\r\n}\r\n@autoinject\r\nexport class ViewPort {\r\n\r\n public deviceSize: ViewPorts = ViewPorts.mobile;\r\n\r\n constructor(private eventService: EventAggregator) {\r\n\r\n window.addEventListener(\"resize\", ev => {\r\n this.deviceSize = this.computDeviceSize();\r\n });\r\n this.deviceSize = this.computDeviceSize();\r\n }\r\n\r\n private computDeviceSize(): ViewPorts {\r\n var elm = window.document.createElement(\"div\");\r\n try {\r\n elm.id = \"viewport-tester\";\r\n window.document.body.appendChild(elm);\r\n\r\n elm.className = \"desktop\";\r\n if (elm.offsetParent !== null) {\r\n return ViewPorts.desktop;\r\n }\r\n\r\n elm.className = \"laptop\";\r\n if (elm.offsetParent !== null) {\r\n return ViewPorts.laptop;\r\n }\r\n\r\n elm.className = \"tablet\";\r\n if (elm.offsetParent !== null) {\r\n return ViewPorts.tablet;\r\n }\r\n elm.className = \"phablet\";\r\n if (elm.offsetParent !== null) {\r\n return ViewPorts.phablet;\r\n }\r\n return ViewPorts.mobile;\r\n\r\n } catch (ex) {\r\n } finally {\r\n window.document.body.removeChild(elm);\r\n }\r\n return ViewPorts.mobile;\r\n }\r\n}\r\n\r\n\r\n"],"names":[],"sourceRoot":""}