svogv
Version:
A decorator based approach for model driven forms, including an advanced DataGrid and a TreeView component.
17 lines (15 loc) • 42.9 kB
JavaScript
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("@angular/core"),require("@angular/forms"),require("@angular/common"),require("@angular/router")):"function"==typeof define&&define.amd?define("svogv",["exports","@angular/core","@angular/forms","@angular/common","@angular/router"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).svogv={},e.ng.core,e.ng.forms,e.ng.common,e.ng.router)}(this,(function(e,t,n,o,r){"use strict";function a(e,t,n){return void 0===t&&(t=0),function(o,r){!function(o,r){t=parseInt(t.toString(),10),Object.defineProperty(o,"__displayName__"+r,{value:e,enumerable:!1,configurable:!1}),Object.defineProperty(o,"__displayOrder__"+r,{value:t,enumerable:!1,configurable:!1}),Object.defineProperty(o,"__displayDesc__"+r,{value:n,enumerable:!1,configurable:!1})}(o,r.toString())}}a.Name=function(e,t,n){return e["__displayName__"+t]||n},a.Order=function(e,t,n){return e["__displayOrder__"+t]||n},a.Desc=function(e,t,n){return e["__displayDesc__"+t]||n};function i(e){return function(t,n){!function(t,n){Object.defineProperty(t,"__uiHint__"+n,{value:e,enumerable:!1,configurable:!1})}(t,n.toString())}}i.HintRule=function(e,t,n){return e["__uiHint__"+t]||n};function s(e){return void 0===e&&(e=!0),function(t,n){!function(e,t,n){Object.defineProperty(e,"__isHidden__"+t,{value:n,enumerable:!1,configurable:!1})}(t,n.toString(),e)}}s.IsHidden=function(e,t,n){return void 0===n&&(n=!1),e["__isHidden__"+t]||n};function l(e,t){return function(n,o){!function(n,o){Object.defineProperty(n,"__isSortable__"+o,{value:e,enumerable:!1,configurable:!1}),Object.defineProperty(n,"__sortCallback__"+o,{value:t,enumerable:!1,configurable:!1})}(n,o.toString())}}function c(e,t){return function(n){if((Number(e)||Number(t))&&Number(n.value)){var o=Number(e),r=Number(t),a=Number(n.value);return(!o||a>=o)&&(!r||a<=r)?null:{range:{valid:!1}}}if((Date.parse(e.toString())||Date.parse(t.toString()))&&Date.parse(n.value)){o=Date.parse(e.toString()),r=Date.parse(t.toString()),a=Date.parse(n.value);return(!o||a>=o)&&(!r||a<=r)?null:{range:{valid:!1}}}}}function u(e){var t=!1;return function(n){var o=n.root;if(o&&o.controls&&!t&&(o.controls[e].valueChanges.subscribe((function(){n.updateValueAndValidity()})),t=!0),n.value)return n.value&&n.value!==n.root.controls[e].value?{compare:{valid:!1}}:null}}l.IsSortable=function(e,t,n){return e["__isSortable__"+t]||n},l.SortCallback=function(e,t,n){return e["__sortCallback__"+t]||n};var p=function(){function e(e){this.fb=e}return e.prototype.build=function(e){var t,o,r={},a={};if(e)try{o=new e}catch(e){console.error("Invalid viewmodel for FormValidatorService")}if(o){for(var i in o){var s=new Array,l=new Object;if("__isRequired__"+i in e.prototype&&(l.required=e.prototype["__errRequired__"+i],s.push(n.Validators.required)),"__hasMaxLength__"+i in e.prototype){l.maxlength=e.prototype["__errMaxLength__"+i];var p=parseInt(e.prototype["__hasMaxLength__"+i],10);s.push(n.Validators.maxLength(p))}if("__hasMinLength__"+i in e.prototype){l.minlength=e.prototype["__errMinLength__"+i];var d=parseInt(e.prototype["__hasMinLength__"+i],10);s.push(n.Validators.minLength(d))}if("__hasPattern__"+i in e.prototype){l.pattern=e.prototype["__errPattern__"+i];var h=new RegExp(e.prototype["__hasPattern__"+i]);s.push(n.Validators.pattern(h))}var f="__hasRangeFrom__"+i in e.prototype,m="__hasRangeTo__"+i in e.prototype;if(f||m){l.range=e.prototype["__errRange__"+i];var g=Number(e.prototype["__hasRangeFrom__"+i]),b=Number(e.prototype["__hasRangeTo__"+i]);g||b||(g=Date.parse(g.toString()),b=Date.parse(b.toString())),s.push(c(g,b))}if("__hasCompareProperty__"+i in e.prototype){l.compare=e.prototype["__errCompareProperty__"+i];var _=e.prototype["__withCompare__"+i];s.push(u(_))}0===s.length&&(r[i]=[e[i]]),1===s.length&&(r[i]=[e[i]||"",s[0]]),s.length>=1&&(r[i]=[e[i]||"",n.Validators.compose(s)]),a[i]=l}for(var i in(t=this.fb.group(r)).__editorModel__=o,a){t.controls[i]&&(t.controls[i].messages=a[i])}}return t},e}();p.decorators=[{type:t.Injectable}],p.ctorParameters=function(){return[{type:n.FormBuilder,decorators:[{type:t.Inject,args:[n.FormBuilder]}]}]};var d=function(){function e(){this.pageNumberChanged=new t.EventEmitter,this.currentPageNumber=1}return e.prototype.ngOnInit=function(){this.setCurrentPage(1)},e.prototype.ngOnChanges=function(e){var t=this;if(e.maxPageIndex){var n=e.maxPageIndex;this.currentPageNumber>n.currentValue&&setTimeout((function(){return t.setCurrentPage(1)}),1)}},e.prototype.setCurrentPage=function(e,t){t&&t.preventDefault(),0===e||e>this.maxPageIndex||e===this.currentPageNumber||(this.pageNumberChanged.emit(e),this.currentPageNumber=e)},e.prototype.range=function(e,t){for(var n=new Array,o=e;o<=t;o++)n.push(o);return n},Object.defineProperty(e.prototype,"pageStartNumber",{get:function(){var e=this.currentPageNumber<=4?1:this.currentPageNumber>=this.maxPageIndex-3?this.maxPageIndex-6:this.currentPageNumber-3;return e<1?1:e},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"pageEndNumber",{get:function(){var e=this.pageStartNumber+6;return e>this.maxPageIndex?this.maxPageIndex:e},enumerable:!1,configurable:!0}),e}();d.decorators=[{type:t.Component,args:[{selector:"ac-datagrid-pagination",template:'<div>\n <ul class="pagination float-right" [ngClass]="{ \'pagination-sm\': size == \'sm\', \'pagination-lg\': size == \'lg\' }">\n <li [class.disabled]="currentPageNumber === 1 || !maxPageIndex" class="page-item">\n <a href (click)="setCurrentPage(1, $event)" aria-label="Previous" class="page-link">\n <span aria-hidden="true">«</span>\n </a>\n </li>\n <li [class.disabled]="currentPageNumber === 1 || !maxPageIndex" class="page-item">\n <a\n href\n aria-label="Previous"\n (click)="setCurrentPage(currentPageNumber - 1, $event)"\n class="page-link">\n <span aria-hidden="true">‹</span>\n </a>\n </li>\n <li\n *ngFor="let index of range(pageStartNumber, pageEndNumber)"\n [class.active]="currentPageNumber === index"\n class="page-item">\n <a href (click)="setCurrentPage(index, $event)" class="page-link">\n <span aria-hidden="true">{{ index }}</span>\n </a>\n </li>\n <li [class.disabled]="currentPageNumber === maxPageIndex || !maxPageIndex">\n <a class="page-link"\n href\n (click)="setCurrentPage(currentPageNumber + 1, $event)"\n aria-label="Last"\n >\n <span aria-hidden="true">›</span>\n </a>\n </li>\n <li [class.disabled]="currentPageNumber === maxPageIndex || !maxPageIndex" class="page-item">\n <a href (click)="setCurrentPage(maxPageIndex, $event)" aria-label="Last" class="page-link">\n <span aria-hidden="true">»</span>\n </a>\n </li>\n </ul>\n</div>\n',styles:[""]}]}],d.propDecorators={maxPageIndex:[{type:t.Input}],pageNumberChanged:[{type:t.Output}],size:[{type:t.Input}]},Object.same=function(e,t){if(e===t)return!0;if(!(e instanceof Object&&t instanceof Object))return!1;for(var n in e)if(e.hasOwnProperty(n)&&void 0!==e[n]&&null!==e[n]&&""!==e[n]&&!("object"==typeof e[n]&&Object.same(e[n],t[n])||"string"==typeof e[n]&&t[n].startsWith(e[n])||e[n]===t[n]))return!1;return!0},Object.equals=function(e,t){if(e===t)return!0;if(!(e instanceof Object&&t instanceof Object))return!1;if(e.constructor!==t.constructor)return!1;for(var n in e)if(e.hasOwnProperty(n)){if(!t.hasOwnProperty(n))return!1;if(e[n]!==t[n]){if("object"!=typeof e[n])return!1;if(!Object.equals(e[n],t[n]))return!1}}for(var n in t)if(t.hasOwnProperty(n)&&!e.hasOwnProperty(n))return!1;return!0};var h,f=function(e,t,n,o){void 0===o&&(o=!1),this.text=e,this.desc=t,this.prop=n,this.hidden=o,this.isSortable=!0,this.templateHint="text"};(h=e.Direction||(e.Direction={}))[h.Ascending=0]="Ascending",h[h.Descending=1]="Descending";var m=function(){function n(e,n,o){void 0===o&&(o=10),this.searchValue={},this.currentPageIndex=1,this.onEdit=new t.EventEmitter,this.onDelete=new t.EventEmitter,this.sortDirection={},this._items=e,this.pageSize=o;var r=new n;r&&this.createHeadersForType(r)}return Object.defineProperty(n.prototype,"totalRows",{get:function(){return this._items.length},enumerable:!1,configurable:!0}),Object.defineProperty(n.prototype,"totalFilteredRows",{get:function(){return this.itemsFiltered?this.itemsFiltered.length:0},enumerable:!1,configurable:!0}),Object.defineProperty(n.prototype,"currentRowStart",{get:function(){return this.totalRows>this.pageSize?this.startRow+1:0===this.totalRows?0:1},enumerable:!1,configurable:!0}),Object.defineProperty(n.prototype,"currentRowEnd",{get:function(){return this.startRow+this.pageSize<this.totalRows?this.startRow+this.pageSize:this.totalRows},enumerable:!1,configurable:!0}),Object.defineProperty(n.prototype,"startRow",{get:function(){return 0===this.currentPageIndex?0:(this.currentPageIndex-1)*this.pageSize},enumerable:!1,configurable:!0}),Object.defineProperty(n.prototype,"maxPageIndex",{get:function(){return Math.ceil(this.totalFilteredRows/this.pageSize)},enumerable:!1,configurable:!0}),Object.defineProperty(n.prototype,"items",{get:function(){return this._items},set:function(e){this._items=e},enumerable:!1,configurable:!0}),Object.defineProperty(n.prototype,"itemsFiltered",{get:function(){var e=this;return!this.searchValue||0===Object.keys(this.searchValue).length&&this.searchValue.constructor===Object?this.items:this.items.filter((function(t){for(var n in e.searchValue){if(new RegExp(e.searchValue[n]).test(t[n]))return!0}return!1}))},enumerable:!1,configurable:!0}),Object.defineProperty(n.prototype,"itemsOnCurrentPage",{get:function(){return this.itemsFiltered.slice(this.startRow,this.startRow+this.pageSize)},enumerable:!1,configurable:!0}),Object.defineProperty(n.prototype,"headers",{get:function(){return this._headers.filter((function(e){return!e.hidden}))},enumerable:!1,configurable:!0}),Object.defineProperty(n.prototype,"headersNotVisible",{get:function(){return this._headers.filter((function(e){return e.hidden}))},enumerable:!1,configurable:!0}),n.prototype.sortColumn=function(t,n,o){n||(n=this.sortDirection[t]===e.Direction.Ascending?e.Direction.Descending:e.Direction.Ascending),this.sortDirection[t]=n,o?this.items.sort(o):this.items.sort((function(o,r){return n===e.Direction.Descending?o[t]>r[t]?1:-1:o[t]>r[t]?-1:1}))},n.prototype.removeColumn=function(e){var t=this._headers.find((function(t){return t.prop===e}));t&&(t.hidden=!0)},n.prototype.addColumn=function(e){var t=this._headers.find((function(t){return t.prop===e}));t&&(t.hidden=!1)},n.prototype.editItem=function(e){this.onEdit.emit(e)},n.prototype.deleteItem=function(e){this.onDelete.emit(e)},n.prototype.createHeadersForType=function(e){for(var t in this._headers=new Array,e)if(e.hasOwnProperty(t)){var n=a.Name(e,t,t),o=a.Desc(e,t,t),r=s.IsHidden(e,t,!1),l=new f(n,o,t,r);l.isSortable=void 0===e["__isSortable__"+t]||!!e["__isSortable__"+t],l.sortCallback=e["__sortCallback__"+t]||void 0,l.templateHint=e["__templatehint__"+t]||typeof e[t],l.templateHintParams=e["__templatehintParams__"+t],l.pipe=e["__uipipe__"+t],l.pipeParams=e["__pipeparams__"+t],l.uiHint=i.HintRule(e,t,{}),this._headers.push(l)}},n}(),g=function(){function n(){this.directionEnumHelper=e.Direction,this.externals={},this.showActions=!0,this.textDeleteButton="Delete",this.textEditButton="Edit",this.textButtonsHeader="Actions",this.textNoItems="There are no items to show",this.editItem=new t.EventEmitter,this.deleteItem=new t.EventEmitter,this.warnProp={}}return Object.defineProperty(n.prototype,"filter",{set:function(e){this.model&&(this.model.searchValue=e)},enumerable:!1,configurable:!0}),n.prototype.ngAfterViewInit=function(){var e=this;this.model&&(this.model.onEdit.subscribe((function(t){return e.editItem.emit(t)})),this.model.onDelete.subscribe((function(t){return e.deleteItem.emit(t)})))},n.prototype.ngOnDestroy=function(){this.model&&(this.model.onEdit.unsubscribe(),this.model.onDelete.unsubscribe())},n.prototype.getActiveTemplate=function(e,t){return this[e]?this[e]:this.externals[e]?this.externals[e]:this[e+"Fallback"]?this[e+"Fallback"]:(this.warnProp[t]!==e&&(console.warn("Property "+t+" requested the template "+e+', but it wasn\'t provided. Falling back to "string".'),this.warnProp[t]=e),this.stringFallback)},n}();g.decorators=[{type:t.Component,args:[{selector:"ac-datagrid",template:'<div class="row" *ngIf="model && model.headers">\n <div class="col-md-12">\n <table class="table table-condensed">\n <colgroup class="colborders" [ngStyle]="columnStyle ? columnStyle.group : null">\n <col class="first" [ngStyle]="columnStyle ? columnStyle.first : null" />\n <col class="middle" [ngStyle]="columnStyle ? columnStyle.middle : null" />\n <col class="middle" [ngStyle]="columnStyle ? columnStyle.middle : null" />\n <col class="middle" [ngStyle]="columnStyle ? columnStyle.middle : null" />\n <col class="last" [ngStyle]="columnStyle ? columnStyle.last : null" />\n </colgroup>\n <thead>\n <tr [ngStyle]="columnStyle ? columnStyle.header : null" >\n <th *ngFor="let header of model.headers"\n [ngClass]="{ \'sortableHeader\': header.isSortable }"\n [ngStyle]="header.uiHint || {}"\n [title]="header.desc"\n (click)="header.isSortable ? model.sortColumn(header.prop, null, header.sortCallback) : null">\n <span class="headerText">{{ header.text }}</span>\n <span class="sort" [ngStyle]="columnStyle ? columnStyle.headerButton : null" *ngIf="header.isSortable">\n <button (click)="model.sortColumn(header.prop, directionEnumHelper.Ascending, header.sortCallback)"\n class="up"\n [hidden]="model.sortDirection[header.prop] === directionEnumHelper.Descending"\n [ngStyle]="columnStyle ? columnStyle.headerSortButton : null">\n <i class="fa fa-sort-asc"></i>\n </button>\n <button (click)="model.sortColumn(header.prop, directionEnumHelper.Descending, header.sortCallback)"\n class="down"\n [hidden]="model.sortDirection[header.prop] === directionEnumHelper.Ascending"\n [ngStyle]="columnStyle ? columnStyle.headerSortButton : null">\n <i class="fa fa-sort-desc"></i>\n </button>\n </span>\n </th>\n <th *ngIf="showActions">\n {{ textButtonsHeader }}\n </th>\n </tr>\n </thead>\n <tbody>\n <tr *ngIf="!model.totalFilteredRows">\n <td [attr.colspan]="model.headers.length" class="text-center">\n <div class="alert alert-warning">\n <span #warningNoItems>\n <ng-content select="[data-warning-noitems]"></ng-content>\n </span>\n <ng-container *ngIf="!warningNoItems.innerHTML.trim()">{{ textNoItems }}</ng-container>\n </div>\n </td>\n </tr>\n <tr *ngFor="let item of model.itemsOnCurrentPage">\n <td *ngFor="let header of model.headers">\n <ng-container\n [ngTemplateOutlet]="getActiveTemplate(header.templateHint, header.prop)"\n [ngTemplateOutletContext]="{ $implicit: item[header.prop], pipe: header.pipe, params: header.pipeParams }"\n ></ng-container>\n </td>\n <td *ngIf="showActions" [ngStyle]="columnStyle ? columnStyle.actionCell : null" >\n <button class="btn btn-primary btn-sm" type="button" (click)="model.editItem(item)">\n {{ textEditButton }}\n </button>\n <button class="btn btn-danger btn-sm" type="button" (click)="model.deleteItem(item)">\n {{ textDeleteButton }}\n </button>\n </td>\n </tr>\n </tbody>\n <tfoot>\n <tr [ngStyle]="columnStyle ? columnStyle.footer : null" >\n <td [attr.colspan]="model.headers.length + (showActions ? 1 : 0)">\n <div #footerRef>\n <ng-content select="[data-footer]"></ng-content>\n </div>\n <ng-container *ngIf="!footerRef.innerHTML.trim()">©</ng-container>\n </td>\n </tr>\n </tfoot>\n </table>\n </div>\n</div>\n<ng-template #string let-data let-modelpipe="pipe" let-params="params">\n {{ data | formatData: modelpipe: params }}\n</ng-template>\n<ng-template #boolean let-data>\n <input type="checkbox" disabled [checked]="data" />\n</ng-template>\n<ng-template #date let-data let-modelpipe="pipe" let-params="params">\n {{ data | formatData: modelpipe: params }}\n</ng-template>\n<ng-template #enum let-data>\n {{ data }}\n</ng-template>\n<ng-template #number let-data let-modelpipe="pipe" let-params="params">\n {{ data | formatData: modelpipe: params }}\n</ng-template>\n',styles:[".colborders col{border-right:1px solid azure}col.last{border-right:none!important}col.first{background-color:#eee}th{background:none}th.sortableHeader{cursor:pointer}.headerText{display:inline-block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.sort{float:right}.sort button{background-color:transparent!important;border:0;border-radius:0;cursor:pointer;height:16px;padding:1px;width:16px}.sort button.up{left:0}.sort button.down{left:-16px}.rearrange{background-color:transparent;border:none;float:right;height:16px;margin:2px;width:16px}"]}]}],g.propDecorators={stringFallback:[{type:t.ViewChild,args:["string",{static:!0}]}],string:[{type:t.ContentChild,args:["string",{static:!0}]}],booleanFallback:[{type:t.ViewChild,args:["boolean",{static:!0}]}],boolean:[{type:t.ContentChild,args:["boolean",{static:!0}]}],dateFallback:[{type:t.ViewChild,args:["date",{static:!0}]}],date:[{type:t.ContentChild,args:["date",{static:!0}]}],enumFallback:[{type:t.ViewChild,args:["enum",{static:!0}]}],enum:[{type:t.ContentChild,args:["enum",{static:!0}]}],numberFallback:[{type:t.ViewChild,args:["number",{static:!0}]}],number:[{type:t.ContentChild,args:["number",{static:!0}]}],externals:[{type:t.Input}],columnStyle:[{type:t.Input}],model:[{type:t.Input}],showDeleteButton:[{type:t.Input}],showEditButton:[{type:t.Input}],showActions:[{type:t.Input}],textDeleteButton:[{type:t.Input}],textEditButton:[{type:t.Input}],textButtonsHeader:[{type:t.Input}],textNoItems:[{type:t.Input}],filter:[{type:t.Input}],reArrangeColumns:[{type:t.Input}],editItem:[{type:t.Output}],deleteItem:[{type:t.Output}]};
/*! *****************************************************************************
Copyright (c) Microsoft Corporation.
Permission to use, copy, modify, and/or distribute this software for any
purpose with or without fee is hereby granted.
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
PERFORMANCE OF THIS SOFTWARE.
***************************************************************************** */
var b=function(e,t){return(b=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])})(e,t)};function _(e,t){function n(){this.constructor=e}b(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}Object.create;function y(e,t){var n="function"==typeof Symbol&&e[Symbol.iterator];if(!n)return e;var o,r,a=n.call(e),i=[];try{for(;(void 0===t||t-- >0)&&!(o=a.next()).done;)i.push(o.value)}catch(e){r={error:e}}finally{try{o&&!o.done&&(n=a.return)&&n.call(a)}finally{if(r)throw r.error}}return i}function v(){for(var e=[],t=0;t<arguments.length;t++)e=e.concat(y(arguments[t]));return e}Object.create;var C=function(){function e(e){this.injector=e}return e.prototype.transform=function(e,t,n){if(t){console.log("FormatDataPipe:PipeToken:",t);var o=this.injector.get(t);return o.transform.apply(o,v([e],n||[]))}return console.log("FormatDataPipe:NoPipeToken"),e},e}();C.decorators=[{type:t.Pipe,args:[{name:"formatData"}]}],C.ctorParameters=function(){return[{type:t.Injector}]};var P=function(){function e(){this.type="text",this.labelDivider=": ",this.inline=!0,this.fromValue=0,this.toValue=100,this.waterMark="",this.readonly=!1,this.params=new Array}return e.prototype.getParams=function(e){return this.first(this.params.filter((function(t){return t.key===e})),0)},e.prototype.first=function(e,t){if(null!=e)return null==t?e[0]:t<0?[]:e.slice(0,t)},e.prototype.ngOnInit=function(){var e=this;this.formGroup.valueChanges.subscribe((function(t){return e.onValueChanged(t)}));var t=this.formGroup.__editorModel__;t&&("string"==typeof t[this.name]&&(this.type="text"),"boolean"==typeof t[this.name]&&(this.type="boolean"),"number"==typeof t[this.name]&&(this.type="number"),t[this.name]instanceof Date&&(this.type="calendar"),this.label=t["__displayName__"+this.name]||this.label||this.name,this.tooltip=t["__displayDesc__"+this.name]||this.tooltip||this.name,t["__hasRangeFrom__"+this.name]&&Number(t["__hasRangeFrom__"+this.name])&&(this.fromValue=t["__hasRangeFrom__"+this.name],this.type="range"),t["__hasRangeTo__"+this.name]&&Number(t["__hasRangeTo__"+this.name])&&(this.toValue=t["__hasRangeTo__"+this.name],this.type="range"),t["__hasWatermark__"+this.name]&&(this.waterMark=t["__watermark__"+this.name]),t["__hasTemplateHint__"+this.name]&&(this.type=t["__templatehint__"+this.name].toLowerCase(),t["__templatehintParams__"+this.name]&&(this.params=t["__templatehintParams__"+this.name])),t["__isHidden__"+this.name]&&(this.type="hidden"),t["__isReadonly__"+this.name]&&(this.readonly=!!t["__isReadonly__"+this.name]))},e.prototype.onValueChanged=function(e){for(var t in this.errors=new Array,this.formGroup.controls[this.name].errors)this.errors.push(t)},e}();P.decorators=[{type:t.Component,args:[{selector:"ac-editor",template:'<div class="form-group row"\n [formGroup]="formGroup"\n *ngIf="type != \'hidden\' && formGroup"\n [ngClass]="{ \'has-danger\': !formGroup.controls[name].valid && formGroup.controls[name].touched }">\n <label class="col-form-label col-md-3 col-sm-10"\n [attr.for]="name"\n [attr.title]="tooltip" >{{ label }}{{ labelDivider }} </label>\n <div [ngClass]="{ \'col-md-7 col-sm-10\': inline }">\n <textarea *ngIf="type == \'textarea\'"\n class="form-control"\n [id]="name"\n [readOnly]=\'readonly\'\n [formControlName]="name"\n [attr.rows]="getParams(\'rows\')"\n [attr.cols]="getParams(\'cols\')">\n </textarea>\n <select *ngIf="type == \'enum\' && enumValues" class="form-control" [id]="name"\n [formControlName]="name" [disabled]=\'readonly\'>\n <option *ngFor="let option of enumValues" [value]="option.key">{{option.val}}</option>\n </select>\n <select *ngIf="type == \'list\' && listValues" class="form-control" [id]="name"\n [formControlName]="name" [disabled]=\'readonly\'>\n <option *ngFor="let option of listValues" [value]="option.key">{{option.val}}</option>\n </select>\n <input *ngIf="type == \'range\'" type="range"\n class="form-control"\n [placeholder]="waterMark"\n [attr.minvalue]="fromValue"\n [attr.maxvalue]="toValue"\n [attr.min]="fromValue"\n [attr.max]="toValue"\n [id]="name"\n [formControlName]="name"\n [title]="tooltip" />\n <input *ngIf="type == \'calendar\'" type="date"\n class="form-control"\n [placeholder]="waterMark"\n [readOnly]=\'readonly\'\n [id]="name"\n [formControlName]="name"\n [title]="tooltip" />\n <input *ngIf="type == \'number\'" type="number"\n class="form-control"\n [placeholder]="waterMark"\n [readOnly]=\'readonly\'\n [id]="name"\n [formControlName]="name"\n [title]="tooltip" />\n <input *ngIf="type == \'boolean\'" type="checkbox"\n class="form-control"\n [readOnly]=\'readonly\'\n [id]="name"\n [formControlName]="name"\n [title]="tooltip" />\n <label *ngIf="type == \'boolean\'" [attr.for]="name"></label>\n <input *ngIf="type == \'text\' || type == \'\'" [placeholder]="waterMark"\n [readOnly]=\'readonly\'\n type="text" class="form-control" [id]="name" [formControlName]="name" />\n <ng-container *ngIf="type == \'template\'">\n <ng-content></ng-content>\n </ng-container>\n <span class="fa fa-warning text-danger form-control-feedback"\n [hidden]="formGroup.controls[name].valid || formGroup.controls[name].pristine"></span>\n <small class="text-danger"\n [hidden]="formGroup.controls[name].valid || formGroup.controls[name].pristine">\n <span *ngFor="let error of errors">{{ formGroup.controls[name][\'messages\'][error] }}</span>\n </small>\n </div>\n</div>\n<div>\n <input *ngIf="type == \'hidden\'" [id]="name" [formControlName]="name" type="hidden" />\n</div>\n',styles:['input[type="checkbox"] { display: none; }','input[type="checkbox"] + label:before { font-family: FontAwesome; }','input[type="checkbox"] + label:before { content: "\\f096"; }','input[type="checkbox"]:checked + label:before { content: "\\f046"; }',"\n input[type='checkbox'] + label {\n display: inline-block;\n width: 15px;\n height: 20px;\n margin: -1px 4px 0 0;\n vertical-align: middle;\n cursor: pointer;\n }\n "]}]}],P.ctorParameters=function(){return[]},P.propDecorators={name:[{type:t.Input}],type:[{type:t.Input}],labelDivider:[{type:t.Input}],label:[{type:t.Input}],tooltip:[{type:t.Input}],formGroup:[{type:t.Input}],inline:[{type:t.Input}],enumValues:[{type:t.Input}],listValues:[{type:t.Input}],fromValue:[{type:t.Input}],toValue:[{type:t.Input}],waterMark:[{type:t.Input}],readonly:[{type:t.Input}],value:[{type:t.Output},{type:t.Input}]};var x=function(){function e(){this.ungroupedAfter=!0,this.editors=new Array,this.groups=new Array}return e.prototype.ngOnInit=function(){var e=this.formGroup.__editorModel__,t=function(t){if(!n.formGroup.controls.hasOwnProperty(t))return"continue";var o,r=0,a=0,i=void 0,s=!1;(e&&(r=n.formGroup.__editorModel__["__displayOrder__"+t],(s=!!n.formGroup.__editorModel__["__isGrouped__"+t])&&(o=n.formGroup.__editorModel__["__groupName__"+t],a=n.formGroup.__editorModel__["__groupOrder__"+t],i=n.formGroup.__editorModel__["__groupDesc__"+t])),s)?(1===n.groups.filter((function(e){return e.name===o})).length||n.groups.push({key:a,name:o,desc:i,editors:new Array}),n.groups.filter((function(e){return e.name===o}))[0].editors.push({key:r,editor:t})):n.editors.push({key:r,editor:t})},n=this;for(var o in this.formGroup.controls)t(o);this.editors.sort((function(e,t){return e.key-t.key})),this.groups.sort((function(e,t){return e.key-t.key}))},e.prototype.grouped=function(){return this.groups&&this.groups.length>0},e}();x.decorators=[{type:t.Component,args:[{selector:"ac-autoform",template:'<ng-content></ng-content>\n<ng-container *ngIf="!ungroupedAfter">\n <ac-editor *ngFor="let editor of editors" [name]="editor.editor" [formGroup]="formGroup"></ac-editor>\n</ng-container>\n<ng-container *ngIf="grouped()">\n <fieldset *ngFor="let group of groups">\n <legend [attr.title]="group.desc" *ngIf="group.name">{{ group.name }}</legend>\n <ac-editor *ngFor="let editor of group.editors" [name]="editor.editor" [formGroup]="formGroup"></ac-editor>\n </fieldset>\n</ng-container>\n<ng-container *ngIf="ungroupedAfter">\n <ac-editor *ngFor="let editor of editors" [name]="editor.editor" [formGroup]="formGroup"></ac-editor>\n</ng-container>\n',styles:["fieldset { border-top: 1px silver solid; padding: 10px; }","legend { width: auto; padding-left: 10px; padding-right: 10px; font-size: 1em;}"]}]}],x.ctorParameters=function(){return[]},x.propDecorators={formGroup:[{type:t.Input}],ungroupedAfter:[{type:t.Input}]};var k,w=function(){function e(){this.nodeClick=new t.EventEmitter,this.checkChanged=new t.EventEmitter,this.selectedChanged=new t.EventEmitter,this.collapseChanged=new t.EventEmitter}return e.prototype.onNodeClick=function(e){this.nodeClick.emit(e)},e.prototype.onCheckChanged=function(e){this.checkChanged.emit(e)},e.prototype.onSelectedChanged=function(e){this.selectedChanged.emit(e)},e.prototype.onCollapseChanged=function(e){this.collapseChanged.emit(e)},e}();w.decorators=[{type:t.Component,args:[{selector:"ac-tree",template:'<ul class="treeview">\n <ac-treenode\n [node]="nodes"\n (nodeClick)="onNodeClick($event)"\n (checkChanged)="onCheckChanged($event)"\n (selectedChanged)="onSelectedChanged($event)"\n (collapseChanged)="onCollapseChanged($event)"\n ></ac-treenode>\n</ul>\n',styles:[".treeview { list-style: none; margin-left: -25px; }"]}]}],w.ctorParameters=function(){return[]},w.propDecorators={nodes:[{type:t.Input}],nodeClick:[{type:t.Output}],checkChanged:[{type:t.Output}],selectedChanged:[{type:t.Output}],collapseChanged:[{type:t.Output}]},(k=e.TreeNodeState||(e.TreeNodeState={}))[k[void 0]=0]="undefined",k[k.checked=1]="checked",k[k.disabled=2]="disabled",k[k.expanded=4]="expanded",k[k.selected=8]="selected";var I=function(e){},S=function(){function n(n,o){this.options=n||new I,o&&o instanceof Array?this.children=o:o&&(this.children=[o]),this.stateChange=new t.EventEmitter,this.state=e.TreeNodeState.undefined}return Object.defineProperty(n.prototype,"path",{get:function(){var e=new Array;e.push(this);for(var t=this;this.parent;)t=t.parent,e.push(t);return e},enumerable:!1,configurable:!0}),n.prototype.hasDirectAncestor=function(e){return void 0!==this.parent},Object.defineProperty(n.prototype,"hasChildren",{get:function(){return void 0!==this.children&&this.children.length>0},enumerable:!1,configurable:!0}),n.prototype.add=function(e){var t;e&&e instanceof Array?(t=this.children).push.apply(t,v(e)):this.children.push(e)},n.prototype.remove=function(e){var t=this.children.indexOf(e);return t>-1&&(this.children.splice(t,1),!0)},Object.defineProperty(n.prototype,"state",{get:function(){return this._state},set:function(t){this._state=t,(this.hasChildren||(this.state&e.TreeNodeState.expanded)!==e.TreeNodeState.expanded)&&this.stateChange.emit(this._state)},enumerable:!1,configurable:!0}),Object.defineProperty(n.prototype,"stateIsExpandend",{get:function(){return(this.state&e.TreeNodeState.expanded)===e.TreeNodeState.expanded},enumerable:!1,configurable:!0}),Object.defineProperty(n.prototype,"stateIsDisabled",{get:function(){return(this.state&e.TreeNodeState.disabled)===e.TreeNodeState.disabled},enumerable:!1,configurable:!0}),Object.defineProperty(n.prototype,"stateIsSelected",{get:function(){return(this.state&e.TreeNodeState.selected)===e.TreeNodeState.selected},enumerable:!1,configurable:!0}),Object.defineProperty(n.prototype,"stateIsChecked",{get:function(){return(this.state&e.TreeNodeState.checked)===e.TreeNodeState.checked},enumerable:!1,configurable:!0}),n}(),O=function(e){function t(t,n,o){var r=e.call(this,n,o)||this;return r.text=t,r.name=t,r}return _(t,e),t}(S),N=function(e){function t(t,n,o){var r=e.call(this,n,o)||this;return r.component=t,r}return _(t,e),t}(S),j=function(){function n(e,n){this.el=e,this.renderer=n,this.isExpanded=!1,this.nodeClick=new t.EventEmitter,this.checkChanged=new t.EventEmitter,this.selectedChanged=new t.EventEmitter,this.collapseChanged=new t.EventEmitter}return n.prototype.ngOnInit=function(){var t=this;this.collapseClasses=new Array,this.iconClasses=new Array,this.node&&(this.node.options&&this.node.options.icon&&(0!==this.node.options.icon.indexOf(n.pfxIcon+" ")&&this.iconClasses.push("fa"),this.iconClasses.push(this.node.options.icon)),this.node.options&&this.node.options.href?this.href=this.node.options.href:this.href="",this.node.hasChildren&&(this.collapseClasses.push("ac-icon"),this.collapseClasses.push(n.pfxIcon),this.collapseClasses.push(n.opnIcon),this.node.state&=~e.TreeNodeState.checked),this.node.options&&this.node.options.color&&(this.foreColor=this.node.options.color),this.node.options&&this.node.options.backColor&&(this.backColor=this.node.options.backColor),this.node.stateChange.subscribe((function(e){t.collapseChanged.emit(t.node),t.node.stateIsExpandend?(t.collapseClasses=t.collapseClasses.filter((function(e){return e!==n.opnIcon})),t.collapseClasses.push(n.clsIcon)):(t.collapseClasses=t.collapseClasses.filter((function(e){return e!==n.clsIcon})),t.collapseClasses.push(n.opnIcon)),t.isExpanded=t.node.stateIsExpandend})))},n.prototype.onNodeClick=function(e){this.nodeClick.emit(e)},n.prototype.onCheckChanged=function(e){this.checkChanged.emit(e)},n.prototype.onSelectedChanged=function(e){this.selectedChanged.emit(e)},n.prototype.onCollapseChanged=function(e){this.node.options.collapsable&&this.node.hasChildren&&this.collapseChanged.emit(e)},n.prototype.handleCheckChange=function(){this.node.options.checkable&&!this.node.stateIsDisabled&&(this.node.state&e.TreeNodeState.checked?this.node.state&=~e.TreeNodeState.checked:this.node.state|=e.TreeNodeState.checked,this.checkChanged.emit(this.node))},n.prototype.handleClick=function(e){e.stopPropagation(),this.nodeClick.emit(this.node)},n.prototype.handleCollapse=function(){this.node.options.collapsable&&(this.node.state&&this.node.state&e.TreeNodeState.expanded?this.node.state&=~e.TreeNodeState.expanded:this.node.state|=e.TreeNodeState.expanded)},n.prototype.handlePreSelection=function(e){this.node.options.selectable&&!this.node.stateIsDisabled&&(e?(this.node.options&&this.node.options.color?this.foreColor=this.node.options.backColor:this.foreColor="#fff",this.node.options&&this.node.options.backColor?this.backColor=this.node.options.color:this.backColor="#000"):(this.node.options&&this.node.options.color?this.foreColor=this.node.options.color:this.foreColor="#000",this.node.options&&this.node.options.backColor?this.backColor=this.node.options.backColor:this.backColor="#fff"),this.preSelectState=e)},n.prototype.handleSelection=function(t){this.node.options.selectable&&!this.node.stateIsDisabled&&!0===this.preSelectState&&(this.node.state&e.TreeNodeState.selected?this.node.state&=~e.TreeNodeState.selected:this.node.state|=e.TreeNodeState.selected,this.node.stateIsSelected?(this.node.options&&this.node.options.color?this.foreColor=this.node.options.backColor:this.foreColor="#fff",this.node.options&&this.node.options.backColor?this.backColor=this.node.options.color:this.backColor="#000"):(this.node.options&&this.node.options.color?this.foreColor=this.node.options.color:this.foreColor="#000",this.node.options&&this.node.options.backColor?this.backColor=this.node.options.backColor:this.backColor="#fff"),this.selectedChanged.emit(this.node)),this.href||(t.preventDefault(),t.stopPropagation())},n}();j.pfxIcon="fa",j.opnIcon="fa-plus",j.clsIcon="fa-minus",j.decorators=[{type:t.Component,args:[{selector:"ac-treenode",template:'<li class="treeview" (click)="handleClick($event)">\n <i class="ac-collapse" [ngClass]="collapseClasses" *ngIf="node.hasChildren" (click)="handleCollapse()"></i>\n <i class="ac-collapse" *ngIf="!node.hasChildren"></i>\n <i class="ac-icon" [ngClass]="iconClasses" [style.color]="node.options.iconColor" *ngIf="!node.options.checkable"></i>\n <input type="checkbox" [id]="node.name" *ngIf="node.options.checkable" \n [checked]="node.stateIsChecked" (click)="handleCheckChange()">\n <label [attr.for]="node.name"></label>\n <a class="ac-container"\n [href]="href"\n [style.color]="foreColor" \n [style.background-color]="backColor" \n (mouseover)="handlePreSelection(true)"\n (mouseout)="handlePreSelection(false)"\n (click)="handleSelection($event)">\n {{ node.text }}\n </a>\n <ul class="treeview" *ngIf="node.hasChildren" [hidden]="!isExpanded">\n <ac-treenode *ngFor="let child of node.children" \n [node]="child"\n (nodeClick)="onNodeClick($event)" \n (checkChanged)="onCheckChanged($event)"\n (selectedChanged)="onSelectedChanged($event)"\n (collapseChanged)="onCollapseChanged($event)">\n </ac-treenode>\n </ul> \n</li>',styles:['ul.treeview{list-style:none;margin-left:-2em}li.treeview{box-sizing:border-box;margin-bottom:3px;margin-left:10px}li.treeview a.ac-container{border-radius:2px;display:inline-block;padding:3px;text-decoration:none}li.treeview input[type=checkbox]{display:none}li.treeview input[type=checkbox]+label:before{content:"\\f096";font-family:FontAwesome}li.treeview input[type=checkbox]:checked+label:before{content:"\\f046"}li.treeview input[type=checkbox]+label{cursor:pointer;display:inline-block;height:20px;margin:-1px 4px 0 0;vertical-align:middle;width:15px}li.treeview i.ac-collapse{margin-left:-1.7em}li.treeview i.ac-collapse,li.treeview i.ac-icon{cursor:pointer;display:inline-block;width:15px}li.treeview .ac-node-disabled{color:silver;cursor:not-allowed}']}]}],j.ctorParameters=function(){return[{type:t.ElementRef},{type:t.Renderer2}]},j.propDecorators={node:[{type:t.Input}],nodeClick:[{type:t.Output}],checkChanged:[{type:t.Output}],selectedChanged:[{type:t.Output}],collapseChanged:[{type:t.Output}]};var D=[g,d,w,j,P,x],T=[p],E=function(){function e(){}return e.forRoot=function(){return{ngModule:e,providers:T}},e}();E.decorators=[{type:t.NgModule,args:[{imports:[o.CommonModule,r.RouterModule,n.ReactiveFormsModule,n.FormsModule],declarations:v(D,[C]),providers:T,exports:D}]}],e.AutoFormComponent=x,e.Compare=function(e,t){return function(n,o){!function(n,o){Object.defineProperty(n,"__hasCompareProperty__"+o,{value:!0,enumerable:!1,configurable:!1}),Object.defineProperty(n,"__withCompare__"+o,{value:e,enumerable:!1,configurable:!1}),Object.defineProperty(n,"__errCompareProperty__"+o,{value:t||"The field "+o+" must have the same value as field "+e,enumerable:!1,configurable:!1})}(n,o.toString())}},e.DataGridComponent=g,e.DataGridModel=m,e.DataGridPaginationComponent=d,e.Display=a,e.DisplayGroup=function(e,t,n){return void 0===t&&(t=0),function(o,r){!function(o,r){t=parseInt(t.toString(),10),Object.defineProperty(o,"__isGrouped__"+r,{value:!0,enumerable:!1,configurable:!1}),Object.defineProperty(o,"__groupName__"+r,{value:e,enumerable:!1,configurable:!1}),Object.defineProperty(o,"__groupOrder__"+r,{value:t,enumerable:!1,configurable:!1}),Object.defineProperty(o,"__groupDesc__"+r,{value:n,enumerable:!1,configurable:!1})}(o,r.toString())}},e.EditorComponent=P,e.Email=function(e){return function(t,n){!function(t,n){Object.defineProperty(t,"__hasPattern__"+n,{value:/^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/,enumerable:!1,configurable:!1}),Object.defineProperty(t,"__errPattern__"+n,{value:e||"The field "+n+" must contain a valid e-mail address.",enumerable:!1,configurable:!1})}(t,n.toString())}},e.FormValidatorService=p,e.FormatDataPipe=C,e.FormatPipe=function(e,t){return void 0===t&&(t=null),function(n,o){!function(e,t,n,o){void 0===o&&(o=null),Object.defineProperty(e,"__uipipe__"+t,{value:n,enumerable:!1,configurable:!1}),o&&o.length&&Object.defineProperty(e,"__pipeparams__"+t,{value:o,enumerable:!1,configurable:!1})}(n,o.toString(),e,t)}},e.Hidden=s,e.MaxLength=function(e,t){return function(n,o){!function(n,o){Object.defineProperty(n,"__hasMaxLength__"+o,{value:e,enumerable:!1,configurable:!1}),Object.defineProperty(n,"__errMaxLength__"+o,{value:t||"The field "+o+" has max length of "+e+" characters",enumerable:!1,configurable:!1})}(n,o.toString())}},e.MinLength=function(e,t){return function(n,o){!function(n,o){Object.defineProperty(n,"__hasMinLength__"+o,{value:e,enumerable:!1,configurable:!1}),Object.defineProperty(n,"__errMinLength__"+o,{value:t||"The field "+o+" needs at least "+e+" characters",enumerable:!1,configurable:!1})}(n,o.toString())}},e.Pattern=function(e,t){return function(n,o){!function(n,o){Object.defineProperty(n,"__hasPattern__"+o,{value:!0,enumerable:!1,configurable:!1}),Object.defineProperty(n,"__errPattern__"+o,{value:t||"The field "+o+" must fullfill the pattern "+e,enumerable:!1,configurable:!1})}(n,o.toString())}},e.Placeholder=function(e){return function(t,n){!function(t,n){Object.defineProperty(t,"__watermark__"+n,{value:e,enumerable:!1,configurable:!1}),Object.defineProperty(t,"__hasWatermark__"+n,{value:!0,enumerable:!1,configurable:!1})}(t,n.toString())}},e.Range=function(e,t,n){return function(o,r){!function(o,r){Object.defineProperty(o,"__hasRangeFrom__"+r,{value:e,enumerable:!1,configurable:!1}),Object.defineProperty(o,"__hasRangeTo__"+r,{value:t,enumerable:!1,configurable:!1}),Object.defineProperty(o,"__errRange__"+r,{value:n||"The field "+r+" does not fall into the range from "+e+" to "+t,enumerable:!1,configurable:!1})}(o,r.toString())}},e.Readonly=function(e){return void 0===e&&(e=!0),function(t,n){!function(t,n){Object.defineProperty(t,"__isReadonly__"+n,{value:e,enumerable:!1,configurable:!1})}(t,n.toString())}},e.Required=function(e){return function(t,n){!function(t,n){Object.defineProperty(t,"__isRequired__"+n,{get:function(){return!0},enumerable:!1,configurable:!1}),Object.defineProperty(t,"__errRequired__"+n,{value:e||"The field "+n+" is required",enumerable:!1,configurable:!1})}(t,n.toString())}},e.Sortable=l,e.StringLength=function(e,t,n){return function(o,r){!function(o,r){Object.defineProperty(o,"__hasMaxLength__"+r,{value:t,enumerable:!1,configurable:!1}),Object.defineProperty(o,"__errMaxLength__"+r,{value:n||"The field "+r+" has max length of "+t+" characters",enumerable:!1,configurable:!1}),Object.defineProperty(o,"__hasMinLength__"+r,{value:e,enumerable:!1,configurable:!1}),Object.defineProperty(o,"__errMinLength__"+r,{value:n||"The field "+r+" needs at least "+e+" characters",enumerable:!1,configurable:!1})}(o,r.toString())}},e.SvogvModule=E,e.TemplateHint=function(e,t){return function(n,o){!function(n,o){Object.defineProperty(n,"__templatehint__"+o,{value:e,enumerable:!1,configurable:!1}),t&&Object.defineProperty(n,"__templatehintParams__"+o,{value:t,enumerable:!1,configurable:!1}),Object.defineProperty(n,"__hasTemplateHint__"+o,{value:!0,enumerable:!1,configurable:!1})}(n,o)}},e.TextTreeNodeModel=O,e.TreeNodeComponentModel=N,e.TreeNodeModel=S,e.TreeNodeOptions=I,e.TreeViewComponent=w,e.TreeViewNodeComponent=j,e.UiHint=i,Object.defineProperty(e,"__esModule",{value:!0})}));
//# sourceMappingURL=svogv.umd.min.js.map