jsdk-offical
Version:
JSDK is the most comprehensive TypeScript framework, like JDK.
3 lines (2 loc) • 28.1 kB
JavaScript
//JSDK 2.7.0 MIT
var JS;(function(JS){let ioc;(function(ioc){function compo(className){return Annotations.define({name:"compo",handler:(anno,values,obj)=>{let className=values[0];Class.reflect(obj,className);ioc.Compos.add(Class.forName(className).name)}},arguments)}ioc.compo=compo;function inject(){return Annotations.define({name:"inject",target:AnnotationTarget.FIELD})}ioc.inject=inject})(ioc=JS.ioc||(JS.ioc={}))})(JS||(JS={}));var compo=JS.ioc.compo;var inject=JS.ioc.inject;var JS;(function(JS){let ioc;(function(ioc){class Compos{static get(cmpt){let cmp;if(Types.isString(cmpt)){cmp=this._cmps[cmpt]}if(!cmp)cmp=this.add(cmpt);return cmp}static add(cmpt){let cmp,clazz=Class.forName(cmpt);if(!clazz)return undefined;if(this._cmps.hasOwnProperty(clazz.name)){return this._cmps[clazz.name]}else{cmp=clazz.newInstance();this._injectFields(clazz,cmp);this._cmps[clazz.name]=cmp;if(cmp.initialize)cmp.initialize()}return cmp}static remove(cmpt){let clazz=Class.forName(cmpt);if(!clazz)return;let cmp=this._cmps[clazz.name];if(cmp){if(cmp.destroy)cmp.destroy();delete this._cmps[clazz.name]}}static clear(){Jsons.forEach(this._cmps,cmp=>{if(cmp.destroy)cmp.destroy()});this._cmps={}}static _injectFields(clazz,cmp){let fields=clazz.fieldsMap(cmp,ioc.inject);Jsons.forEach(fields,(v,k)=>{let f=Annotations.getPropertyType(cmp,k);if(!f||!Types.equalKlass(f))throw new TypeError("The type of Field["+k+"] is invalid!");let cls=f.class;cmp[k]=this.get(cls.name)})}}Compos._cmps={};ioc.Compos=Compos})(ioc=JS.ioc||(JS.ioc={}))})(JS||(JS={}));var Compos=JS.ioc.Compos;var __decorate=this&&this.__decorate||function(decorators,target,key,desc){var c=arguments.length,r=c<3?target:desc===null?desc=Object.getOwnPropertyDescriptor(target,key):desc,d;if(typeof Reflect==="object"&&typeof Reflect.decorate==="function")r=Reflect.decorate(decorators,target,key,desc);else for(var i=decorators.length-1;i>=0;i--)if(d=decorators[i])r=(c<3?d(r):c>3?d(target,key,r):d(target,key))||r;return c>3&&r&&Object.defineProperty(target,key,r),r};var JS;(function(JS){let model;(function(model){let AjaxProxy=class AjaxProxy{};AjaxProxy=__decorate([klass("JS.model.AjaxProxy")],AjaxProxy);model.AjaxProxy=AjaxProxy})(model=JS.model||(JS.model={}))})(JS||(JS={}));var AjaxProxy=JS.model.AjaxProxy;var JS;(function(JS){let model;(function(model){class Field{constructor(config){this._cfg=Jsons.union({isId:false,nullable:true,defaultValue:null},config)}config(cfg){let T=this;if(cfg==void 0)return T._cfg;T._cfg=Jsons.union(T._cfg,cfg);return T}name(){return this._cfg.name}alias(){let mp=this._cfg.nameMapping;if(!mp)return this.name();return Types.isString(mp)?mp:mp.call(this)}isId(){return this._cfg.isId}defaultValue(){return this._cfg.defaultValue}nullable(){return this._cfg.nullable}set(val){let T=this;if(!T.nullable()&&val==void 0)throw new TypeError(`This Field<${T.name()}> must be not null`);let fn=T._cfg.setter,v=fn?fn.apply(T,[val]):val;return v===undefined?T._cfg.defaultValue:v}validate(value,errors){let cfg=this._cfg,vts=cfg.validators,rst,ret="";if(!vts)return true;for(let i=0,len=vts.length;i<len;++i){const vSpec=vts[i];rst=Validator.create(vSpec.name,vSpec).validate(value);if(rst!==true){if(errors)errors.addError(cfg.name,rst===false?"":rst);ret+=ret?"|"+rst:rst}}return ret||true}}model.Field=Field})(model=JS.model||(JS.model={}))})(JS||(JS={}));var ModelField=JS.model.Field;var __metadata=this&&this.__metadata||function(k,v){if(typeof Reflect==="object"&&typeof Reflect.metadata==="function")return Reflect.metadata(k,v)};var JS;(function(JS){let model;(function(model){let JsonProxy=class JsonProxy extends model.AjaxProxy{constructor(){super()}execute(query){var req=Jsons.union({method:"GET"},Http.toRequest(query),{async:true,responseType:"json"});return new Promise(function(resolve,reject){Http.send(req).always(res=>{let result=model.ResultSet.parseJSON(res.data);result&&result.success()?resolve(result):reject(res)})})}};JsonProxy=__decorate([klass("JS.model.JsonProxy"),__metadata("design:paramtypes",[])],JsonProxy);model.JsonProxy=JsonProxy})(model=JS.model||(JS.model={}))})(JS||(JS={}));var JsonProxy=JS.model.JsonProxy;var JS;(function(JS){let model;(function(model_1){let J=Jsons;class ListModelConfig{constructor(){this.autoLoad=false}}model_1.ListModelConfig=ListModelConfig;let ListModel=class ListModel{constructor(cfg){this._data=[];this._eventBus=new EventBus(this);this._isD=false;this._modelKlass=null;this._config=this._initConfig(cfg);let listeners=this._config.listeners;if(listeners)J.forEach(listeners,(v,key)=>{this.on(key,v)});if(this._config.iniData)this.setData(this._config.iniData);if(this._config.autoLoad)this.reload()}_initConfig(cfg){return J.union(new ListModelConfig,cfg)}_check(){if(this.isDestroyed())throw new RefusedError("The model was destroyed!")}addSorter(field,dir){this._check();let newSorter={field,dir:dir?dir:"asc"},has=false,sorters=this._config.sorters;if(!sorters)sorters=[];sorters.some(sorter=>{if(newSorter.field==sorter.field){has=true;if(newSorter.sort)sorter.sort=newSorter.sort;sorter.dir=newSorter.dir;return true}return false});if(!has)sorters.push(newSorter);this._config.sorters=sorters}removeSorter(field){this._check();let sorters=this._config.sorters;if(!sorters)return;sorters.remove(item=>{return item.field==field})}clearSorters(){this._check();this._config.sorters=[]}sort(field,dir){this._check();this.addSorter(field,dir);return this.reload()}getSorterBy(fieldName){let sorters=this._config.sorters;if(!sorters)return null;let sorter=null;sorters.some(srt=>{let is=srt.field===fieldName;if(is)sorter=srt;return is});return sorter}_sortParams(){let sorters=this._config.sorters;if(!sorters)return null;let s="";sorters.forEach(sorter=>{s+=`${sorter.field} ${sorter.dir?sorter.dir:"asc"},`});s=s.slice(0,s.length-1);return{sorters:s}}reload(){return this.load(this._config.dataQuery)}modelKlass(klass){if(arguments.length==0)return this._modelKlass;this._modelKlass=klass;return this}load(quy,silent){this._check();let me=this,query=J.union(Http.toRequest(this._config.dataQuery),Http.toRequest(quy));query.data=J.union(query.data,this._sortParams());this._fire("loading",[query]);this._config.dataQuery=query;return(new model_1.JsonProxy).execute(query).then(function(result){if(result.success()){me.setData(result.data(),silent);me._fire("loadsuccess",[result])}else{me._fire("loadfailure",[result])}return Promise.resolve(result)}).catch(function(err){if(Types.ofKlass(err,Error))JSLogger.error("["+err.name+"]"+err.message);me._fire("loaderror",[err])})}getData(){return this.isEmpty()?null:this._data}setData(data,silent){this._check();let newData=data,oldData=J.clone(this._data);if(!silent)this._fire("dataupdating",[newData,oldData]);this._data=data||[];if(!silent)this._fire("dataupdated",[newData,oldData]);return this}iniData(d){let cfg=this._config;if(arguments.length==0)return cfg.iniData;cfg.iniData=d;return this}reset(){return this.setData(this.iniData())}add(records,silent){return this.insert(this._data.length,records,silent)}insert(index,records,silent){if(!records)return this;this._check();this._data=this._data||[];let models=Arrays.toArray(records);this._data.add(models,index);if(!silent)this._fire("rowadded",[models,index]);return this}getRowModel(index,klass){if(index<0||index>=this.size())return null;let d=this._data[index];if(!d)return null;let k=klass||this._modelKlass;if(!k)throw new NotFoundError("The model klass not found!");return Class.newInstance(k).setData(d,true)}getModels(klass){if(this.size()==0)return null;let k=klass||this._modelKlass;if(!k)throw new NotFoundError("The model klass not found!");let mds=[];this._data.forEach((d,i)=>{mds[i]=Class.newInstance(k).setData(d,true)});return mds}getRowById(id){return this.getRow(this.indexOfId(id))}getRow(index){if(index<0||index>=this.size())return null;return this._data[index]||null}indexOfId(id){if(!id||this.size()==0)return-1;let idName="id";if(this._modelKlass&&Types.subklassOf(this._modelKlass,model_1.Model)){let model=Class.newInstance(this._modelKlass),field=model.getIdField();if(field)idName=field.alias()}let index=-1;this._data.some((obj,i)=>{let ret=obj[idName]==id;if(ret)index=i;return ret});return index}removeAt(index,silent){this._check();if(this.size()==0)return this;const obj=this._data[index];if(obj){this._data.remove(index);if(!silent)this._fire("rowremoved",[obj,index])}return this}clear(silent){return this.setData(null,silent)}validate(){if(this.size()==0)return true;let rst=new ValidateResult,str="";this._data.forEach(m=>{let ret=m.validate(rst);if(ret!==true)str+=(str?"|":"")+ret});this._fire("validated",[this._data,rst]);return str||true}validateRow(index){let row=this.getRow(index);if(!row)return null;let rst=row.validate();this._fire("rowvalidated",[rst,row,index]);return rst}size(){return!this._data?0:this._data.length}isEmpty(){return this.size()==0}clone(){let model=Class.newInstance(this.className,J.clone(this._config));model.setData(this.getData());return model}_fire(type,args){this._eventBus.fire(type,args)}on(type,fn,once){this._check();this._eventBus.on(type,fn,once);return this}off(type){this._check();this._eventBus.off(type);return this}destroy(){if(this._isD)return;this._eventBus.destroy();this._eventBus=null;this._data=null;this._isD=true}isDestroyed(){return this._isD}};ListModel=__decorate([klass("JS.model.ListModel"),__metadata("design:paramtypes",[ListModelConfig])],ListModel);model_1.ListModel=ListModel})(model=JS.model||(JS.model={}))})(JS||(JS={}));var ListModel=JS.model.ListModel;var ListModelConfig=JS.model.ListModelConfig;var JS;(function(JS){let model;(function(model_2){let E=Check.isEmpty,J=Jsons;class ModelConfig{constructor(){this.idProperty="id";this.iniData=null}}model_2.ModelConfig=ModelConfig;let Model=class Model{constructor(cfg){this._fields={};this._eventBus=new EventBus(this);this._data={};this._isD=false;cfg=J.union(new ModelConfig,cfg);let defaultFields=this.getClass().getKlass().DEFAULT_FIELDS;this._config=Types.isDefined(defaultFields)?J.union(cfg,{fields:defaultFields}):cfg;this._addFields(this._config.fields);let listeners=this._config.listeners;if(listeners)J.forEach(listeners,(v,key)=>{this.on(key,v)})}_check(){if(this.isDestroyed())throw new RefusedError("The model was destroyed!")}_newField(cfg){let tField=null;if(cfg.name in this._fields){tField=this._fields[cfg.name];tField.config(cfg)}else{cfg.isId=cfg.isId||this._config.idProperty===cfg.name;tField=new model_2.Field(cfg)}this._fields[tField.name()]=tField;if(tField.isId())this._config.idProperty=cfg.name}_addFields(fields){if(!fields)return;for(let i=0,len=fields.length;i<len;i++){const fieldCfg=fields[i];this._newField(Types.isString(fieldCfg)?{name:fieldCfg}:fieldCfg)}}addFields(fields){this._check();this._addFields(fields);return this}addField(field){this.addFields([field]);return this}isIdField(name){return name==this._config.idProperty}removeFields(names){this._check();names.forEach(name=>{this.removeField(name)});return this}removeField(name){this._check();if(this.isIdField(name))throw new JSError("Can't remove the ID field!");if(this._fields.hasOwnProperty(name))delete this._fields[name];return this}updateField(field){this._check();let name=Types.isString(field)?field:field.name;if(this.isIdField(name))throw new JSError("Can't update the ID field!");if(!this._fields.hasOwnProperty(name))return;delete this._fields[name];this.addFields([field]);return this}updateFields(fields){fields.forEach(field=>{this.updateField(field)});return this}clone(){let model=Class.newInstance(this.className,J.clone(this._config));model.setData(this.getData());return model}reload(){return this.load(this._config.dataQuery)}load(quy,silent){this._check();let me=this,query=J.union(Http.toRequest(this._config.dataQuery),Http.toRequest(quy));this._fire("loading",[query]);this._config.dataQuery=query;return(new model_2.JsonProxy).execute(query).then(function(result){if(result){let records=result.data();if(!records)me._fire("loadfailure",[result]);me.setData(Types.isArray(records)?records[0].getData():records,silent);me._fire("loadsuccess",[result])}return Promise.resolve(result)}).catch(function(err){if(Types.ofKlass(err,Error))JSLogger.error("["+err.name+"]"+err.message);me._fire("loaderror",[err])})}setData(data,silent){this._check();let oldData=J.clone(this._data),newData=data;if(!silent)this._fire("dataupdating",[newData,oldData]);this._data={};if(newData){if(E(this._fields)){J.forEach(newData,(v,k)=>{this._newField({name:k});this.set(k,v,true)})}else{J.forEach(this._fields,(f,name)=>{this.set(name,newData[f.alias()],true)})}}if(!silent)this._fire("dataupdated",[newData,oldData]);return this}hasField(name){return this._fields.hasOwnProperty(name)}get(fieldName){let field=this.getField(fieldName);if(!field)return undefined;let v=this._data[field.alias()];return v==void 0?null:v}set(key,value,equal){this._check();let field=this.getField(key);if(!field)return;let alias=field.alias(),oldVal=this._data[alias],newVal=field.set(value);this._data[alias]=newVal;let eq=equal==void 0?false:Types.isFunction(equal)?equal.apply(this,[newVal,oldVal]):equal;if(!eq)this._fire("fieldchanged",[newVal,oldVal,field.name()]);return this}iniData(d){let cfg=this._config;if(arguments.length==0)return cfg.iniData;cfg.iniData=d;return this}getData(){return this._data}getId(){return this.get(this._config.idProperty)}setId(id){this._check();this.set(this._config.idProperty,id);return this}isEmpty(){return E(this._data)}destroy(){if(this._isD)return;this._eventBus.destroy();this._eventBus=null;this._data=null;this._isD=true}isDestroyed(){return this._isD}getField(name){return this._fields[name]}getFields(){return this._fields}getIdField(){if(!this._fields)return null;let f=null;J.some(this._fields,field=>{let is=field.isId();if(is)f=field;return is});return f}reset(){return this.setData(this.iniData())}clear(){return this.setData(null)}validate(result){let vdata=this._data;if(E(vdata))return true;let rst=result||new ValidateResult,str="";J.forEach(vdata,(v,k)=>{let field=this.getField(k);if(field){let ret=this.validateField(field.name(),v,rst);if(ret!==true)str+=(str?"|":"")+ret}});this._fire("validated",[rst,vdata]);return str||true}validateField(fieldName,value,result){if(!result)result=new ValidateResult;let field=this.getField(fieldName);if(!field)return true;let rst=result||new ValidateResult,val=arguments.length>1?value:this.get(fieldName);let vdt=field.validate(val,rst);this._fire("fieldvalidated",[rst,val,fieldName]);return Types.isBoolean(vdt)?vdt:`[${fieldName}]=`+vdt}_fire(type,args){this._eventBus.fire(type,args)}on(type,fn,once){this._check();this._eventBus.on(type,fn,once);return this}off(type){this._check();this._eventBus.off(type);return this}};Model.DEFAULT_FIELDS=[];Model=__decorate([klass("JS.model.Model"),__metadata("design:paramtypes",[ModelConfig])],Model);model_2.Model=Model})(model=JS.model||(JS.model={}))})(JS||(JS={}));var Model=JS.model.Model;var ModelConfig=JS.model.ModelConfig;var JS;(function(JS){let model;(function(model){class PageModelConfig extends model.ListModelConfig{constructor(){super(...arguments);this.dataQuery={url:"",pageSize:Infinity,page:1};this.parametersMapping={totalField:"total",pageField:"page",pageSizeField:"pageSize",sortersField:"sorters"}}}model.PageModelConfig=PageModelConfig;let PageModel=class PageModel extends model.ListModel{constructor(cfg){super(cfg);this._cacheTotal=null}_initConfig(cfg){return Jsons.union(new PageModelConfig,cfg)}_newParams(query){let json={},cfg=this._config,mapping=cfg.parametersMapping;json[mapping.pageSizeField]=!query.pageSize||query.pageSize==Infinity?"":query.pageSize;json[mapping.pageField]=query.page||1;json[mapping.totalField]=this._cacheTotal==null?"":this._cacheTotal;let sorters=this._config.sorters,s="";if(sorters){sorters.forEach(sorter=>{s+=`${sorter.field} ${sorter.dir?sorter.dir:"asc"},`});json[mapping.sortersField]=s.slice(0,s.length-1)}return URI.toQueryString(json)+"&"+(Types.isString(query.data)?query.data:URI.toQueryString(query.data))}load(quy,silent){this._check();let me=this,query=Jsons.union(Http.toRequest(this._config.dataQuery),Http.toRequest(quy));this._fire("loading",[query]);me._config.dataQuery=query;return(new model.JsonProxy).execute({method:query.method,url:query.url,data:me._newParams(query)}).then(function(result){if(result.success()){me.total(result.total());me.setData(result.data(),silent);me._fire("loadsuccess",[result]);let oldPage=me.getCurrentPage(),newPage=query.page;if(oldPage!=newPage)me._fire("pagechanged",[newPage,oldPage])}else{me._fire("loadfailure",[result])}return Promise.resolve(result)}).catch(function(err){me._fire("loaderror",[err])})}reload(){return this.load(null)}loadPage(page,isForce){if(!isForce&&this.getCurrentPage()==page)return;return this.load({page})}total(total){if(arguments.length==0)return this._cacheTotal||this.size();this._cacheTotal=total==void 0?null:total;return this}pageSize(size){let cfg=this._config,query=cfg.dataQuery;if(arguments.length==0)return query.pageSize;query.pageSize=size==void 0?Infinity:size;return this}getCurrentPage(){let cfg=this._config;return cfg.dataQuery.page}getPrevPage(){let page=this.getCurrentPage();return page<=1?1:page-1}getNextPage(){let currentPage=this.getCurrentPage(),totalPages=this.getLastPage();return currentPage+1>totalPages?totalPages:currentPage+1}getFirstPage(){return 1}getLastPage(){let total=this.total(),pageSize=this.pageSize();if(total==0||!isFinite(pageSize))return 1;let max=Math.ceil(total/pageSize);return max==0?1:max}loadPrevPage(){return this.loadPage(this.getPrevPage())}loadNextPage(){return this.loadPage(this.getNextPage())}loadFirstPage(){return this.loadPage(1)}loadLastPage(){return this.loadPage(this.getLastPage())}};PageModel=__decorate([klass("JS.model.PageModel"),__metadata("design:paramtypes",[PageModelConfig])],PageModel);model.PageModel=PageModel})(model=JS.model||(JS.model={}))})(JS||(JS={}));var PageModel=JS.model.PageModel;var PageModelConfig=JS.model.PageModelConfig;var JS;(function(JS){let model;(function(model){let F=Jsons.find;class ResultSet{constructor(){this._data=null;this._page=1;this._pageSize=Infinity}rawObject(response){if(arguments.length==0)return this._rawObject;this._rawObject=response;return this}data(data){if(arguments.length==0)return this._data;this._data=data;return this}count(){return this._data==void 0?0:this._data["length"]||0}total(total){if(arguments.length==0)return this._total;this._total=total;return this}page(page){if(arguments.length==0)return this._page;this._page=page;return this}pageSize(pageSize){if(arguments.length==0)return this._pageSize;this._pageSize=pageSize;return this}version(v){if(arguments.length==0)return this._version;this._version=v;return this}lang(lang){if(arguments.length==0)return this._lang;this._lang=lang;return this}message(msg){if(arguments.length==0)return this._msg;this._msg=msg;return this}success(success){if(arguments.length==0)return this._success;this._success=success;return this}static parseJSON(raw,format){if(!raw)return null;const fmt=format||this.DEFAULT_FORMAT,root=F(raw,fmt.rootProperty);let result=new ResultSet;result.lang(F(root,fmt.langProperty));result.message(F(root,fmt.messageProperty));result.version(F(root,fmt.versionProperty));result.success(fmt.isSuccess?fmt.isSuccess(root):root[fmt.successProperty]===(fmt.successCode||true));result.data(F(root,fmt.dataProperty));result.rawObject(root);result.page(F(root,fmt.pageProperty));result.pageSize(F(root,fmt.pageSizeProperty));result.total(F(root,fmt.totalProperty));return result}}ResultSet.DEFAULT_FORMAT={rootProperty:undefined,dataProperty:"data",totalProperty:"paging.total",pageProperty:"paging.page",pageSizeProperty:"paging.pageSize",messageProperty:"msg",versionProperty:"version",langProperty:"lang",successProperty:"code",successCode:"success"};model.ResultSet=ResultSet})(model=JS.model||(JS.model={}))})(JS||(JS={}));var ResultSet=JS.model.ResultSet;var JS;(function(JS){let model;(function(model){let validator;(function(validator){let E=Check.isEmpty,J=Jsons;class ValidatorConfig{}validator.ValidatorConfig=ValidatorConfig;class Validator{constructor(cfg){this._cfg=cfg}static create(type,cfg){return Class.newInstance({required:RequiredValidator,custom:CustomValidator,range:RangeValidator,format:FormatValidator,length:LengthValidator}[type],cfg)}}validator.Validator=Validator;class ValidateResult{constructor(){this._errors=[]}addError(field,msg){this._errors.push({field,message:msg})}length(){return this._errors.length}hasError(field){if(!field)return this.length()>0;return this.getErrors(field).length==0}clear(){this._errors=[]}getErrors(field){let errs=this._errors;if(errs.length<1)return[];if(!field)return errs;let fields=[];errs.forEach(e=>{if(e.field==field)fields.push(e)});return fields}}validator.ValidateResult=ValidateResult;class CustomValidatorConfig extends ValidatorConfig{constructor(){super(...arguments);this.allowEmpty=true}}validator.CustomValidatorConfig=CustomValidatorConfig;class CustomValidator extends Validator{constructor(cfg){super(J.union(new CustomValidatorConfig,cfg))}validate(val){let cfg=this._cfg;if(E(val)&&!cfg.allowEmpty||!cfg.validate(val))return cfg.message||false;return true}}validator.CustomValidator=CustomValidator;class RequiredValidatorConfig extends ValidatorConfig{}validator.RequiredValidatorConfig=RequiredValidatorConfig;class RequiredValidator extends Validator{constructor(cfg){super(cfg)}validate(val){if(val==void 0||E(String(val).trim()))return this._cfg.message||false;return true}}validator.RequiredValidator=RequiredValidator;class RangeValidatorConfig extends ValidatorConfig{constructor(){super(...arguments);this.allowEmpty=true}}validator.RangeValidatorConfig=RangeValidatorConfig;class RangeValidator extends Validator{constructor(cfg){super(J.union(new RangeValidatorConfig,cfg))}validate(val){let cfg=this._cfg;if(E(val)&&!cfg.allowEmpty||!Types.isNumeric(val))return cfg.nanMessage;let min=cfg.min,max=cfg.max;val=Number(val==void 0?0:val);if(min!=void 0&&val<min)return cfg.tooMinMessage;if(max!=void 0&&val>max)return cfg.tooMaxMessage;return true}}validator.RangeValidator=RangeValidator;class LengthValidatorConfig extends ValidatorConfig{constructor(){super(...arguments);this.allowEmpty=true}}validator.LengthValidatorConfig=LengthValidatorConfig;class LengthValidator extends Validator{constructor(cfg){super(J.union(new LengthValidatorConfig,cfg))}validate(val){let cfg=this._cfg;if(E(val)){return!cfg.allowEmpty?cfg.invalidTypeMessage||false:true}if(!Types.isString(val)&&!Types.isArray(val))return cfg.invalidTypeMessage||false;let short=cfg.short,long=cfg.long,len=val?val.length:0;if(short!=void 0&&len<short)return cfg.tooShortMessage||false;if(long!=void 0&&len>long)return cfg.tooLongMessage||false;return true}}validator.LengthValidator=LengthValidator;class FormatValidatorConfig extends ValidatorConfig{constructor(){super(...arguments);this.allowEmpty=true}}validator.FormatValidatorConfig=FormatValidatorConfig;class FormatValidator extends Validator{constructor(cfg){super(J.union(new FormatValidatorConfig,cfg))}validate(val){let cfg=this._cfg;return E(val)&&!cfg.allowEmpty||!cfg.matcher.test(val)?cfg.message||false:true}}validator.FormatValidator=FormatValidator})(validator=model.validator||(model.validator={}))})(model=JS.model||(JS.model={}))})(JS||(JS={}));var ValidateResult=JS.model.validator.ValidateResult;var Validator=JS.model.validator.Validator;var CustomValidator=JS.model.validator.CustomValidator;var RequiredValidator=JS.model.validator.RequiredValidator;var RangeValidator=JS.model.validator.RangeValidator;var LengthValidator=JS.model.validator.LengthValidator;var FormatValidator=JS.model.validator.FormatValidator;var JS;(function(JS){let view;(function(view){class View{constructor(){this._widgets={};this._eventBus=new EventBus(this)}initialize(){}destroy(){if(this._widgets){Jsons.forEach(this._widgets,w=>{w.destroy()})}}config(){return this._config}_fire(e,args){return this._eventBus.fire(e,args)}render(){Bom.ready(()=>{this._fire("rendering");this._render();this._fire("rendered")})}getModel(){return this._model}getWidget(id){return this._widgets[id]}getWidgets(){return this._widgets}addWidget(wgt){if(wgt)this._widgets[wgt.id]=wgt;return this}removeWidget(id){delete this._widgets[id];return this}destroyWidget(id){let w=this._widgets[id];if(!w)return this;w.destroy();delete this._widgets.id;return this}on(type,handler){this._eventBus.on(type,handler)}off(type){this._eventBus.off(type)}eachWidget(fn){Jsons.forEach(this._widgets,w=>{fn.apply(this,[w])})}_newWidget(id,cfg,defaults){if(!id){JSLogger.error("The widget's id was empty when be inited!");return null}let vconfig=cfg,newConfig=Jsons.union(defaults,vconfig,{id}),klass=newConfig.klass||$1("#"+id).attr(View.WIDGET_ATTRIBUTE);if(!klass){JSLogger.error(`The widget<${id}> was not configured for its klass type!`);return null}this._fire("widgetiniting",[klass,newConfig]);let wgt=Class.aliasInstance(klass,newConfig);this._fire("widgetinited",[wgt]);return wgt}}View.WIDGET_ATTRIBUTE="js-wgt";view.View=View})(view=JS.view||(JS.view={}))})(JS||(JS={}));var View=JS.view.View;var JS;(function(JS){let view;(function(view){let J=Jsons;class FormView extends view.View{reset(){this.eachWidget(w=>{if(w.reset)w.reset()});return this}clear(){this.eachWidget(w=>{if(w.clear)w.clear()});return this}iniValues(values,render){let T=this;if(arguments.length==0){let vals={};T.eachWidget(w=>{if(w.iniValue)vals[w.id]=w.iniValue()});return vals}else{if(values){J.forEach(values,(val,id)=>{let w=T._widgets[id];if(w&&w.iniValue)w.iniValue(val,render)})}else{T.eachWidget(w=>{if(w.iniValue)w.iniValue(null,render)})}}return T}validate(id){let T=this,wgts=T._widgets;if(Check.isEmpty(wgts))return true;if(!id){let ok=true;J.forEach(wgts,wgt=>{if(T._validateWidget(wgt)!==true)ok=false});return ok}return T._validateWidget(T._widgets[id])}_validateWidget(wgt){if(!wgt||!wgt.validate)return true;return wgt.validate()===true}getModel(){return this._model}values(values){if(arguments.length==1){this._model.setData(values);return this}else{let d={};this.eachWidget(w=>{if(w.value&&w.isEnabled()){d[w.name()]=w.isCrud&&w.isCrud()?w.crudValue():w.value()}});return d}}_render(){let T=this;if(T._config){let cfg=T._config;J.forEach(cfg.widgetConfigs,(config,id)=>{config["valueModel"]=T._model||T._config.valueModel;let wgt=T._newWidget(id,config,cfg.defaultConfig);if(wgt&&wgt.valueModel&&!T._model)T._model=wgt.valueModel();T.addWidget(wgt)});if(T._model){T._model.on("validated",(e,result,data)=>{T._fire("validated",[result,data])});T._model.on("dataupdated",(e,newData,oldData)=>{T._fire("dataupdated",[newData,oldData])})}}}}view.FormView=FormView})(view=JS.view||(JS.view={}))})(JS||(JS={}));var FormView=JS.view.FormView;var JS;(function(JS){let view;(function(view){class SimpleView extends view.View{_render(){if(this._config){let cfg=this._config;Jsons.forEach(cfg.widgetConfigs,(config,id)=>{this.addWidget(this._newWidget(id,config,cfg.defaultConfig))})}}}view.SimpleView=SimpleView})(view=JS.view||(JS.view={}))})(JS||(JS={}));var SimpleView=JS.view.SimpleView;var JS;(function(JS){let view;(function(view){class TemplateView extends view.View{constructor(){super(...arguments);this._model=new ListModel}initialize(){this._engine=new Templator;let me=this;this._model.on("dataupdated",function(e,newData,oldData){me._config.data=this.getData();me.render();me._fire("dataupdated",[newData,oldData])})}data(data){this._model.setData(data)}load(api){return this._model.load(api)}_render(){let cfg=this._config;if(cfg&&cfg.data&&cfg.container&&cfg.tpl){let html=this._engine.compile(cfg.tpl)(cfg.data),ctr=$1(cfg.container);ctr.off().innerHTML=html;let wConfigs=cfg.widgetConfigs;if(!Check.isEmpty(wConfigs))ctr.findAll(`[${view.View.WIDGET_ATTRIBUTE}]`).forEach(el=>{let realId=$1(el).attr("id"),prefixId=realId.replace(/(\d)*/g,"");this.addWidget(this._newWidget(realId,wConfigs[prefixId],cfg.defaultConfig))})}}}view.TemplateView=TemplateView})(view=JS.view||(JS.view={}))})(JS||(JS={}));var TemplateView=JS.view.TemplateView;