UNPKG

mcs-ng-material

Version:

MCS NG-Meterial is based on mcs-web.

165 lines (149 loc) 3.68 kB
define(['app'],function(app){ //op: name, path, id var me=function ELEMENT(cfg, op){ this.app=app; this.config=cfg||{}; this.op=op||{} this.cmpName=this.toDirectiveName(this.op.id); this.items=[]; this.links=[]; this.prepare(); if (this.asComponent!==false){ this.defineComponent(); if (op.lazyLoad) this.genStates(); } } app.reg("ELEMENT",me); var C=me.prototype; C.defineComponent=function(){ var cmp={ template: this.template() } var ctrl=this.controller(); if (ctrl) cmp.controller=ctrl; if (this.controllerAs) cmp.controllerAs=this.controllerAs; else cmp.controllerAs="ctrl" var resolve=this.resolve(); if (resolve) cmp.resolve=resolve; if (this.bindings) cmp.bindings=this.bindings; app.component(this.op.id,cmp); console.info('defined name=%o comp=%o cfg=%o',this.cmpName,cmp,this.config); } C.prepare=function(){ } C.genItems=function(items,opt){//opt={tag,defCls,...} var mm=[],id=this.op.id,tag=tag||'',opt=opt||{}; if (items) for (var i=0;i<items.length;i++){ var it=items[i]; var type=it.$type||opt.defCls; var cls=app.modules[type]; var op={id:id+opt.tag+i}; Object.assign(op,opt); var m=new cls(it,op); mm.push(m) this.items.push(m); } return mm; } C.genTemplateList=function(items, opt){ if (!items) return '' var mm=this.genItems(items, opt); var temp=''; for (var i=0;i<mm.length;i++){ var m=mm[i]; temp+=m.template(); } return temp; } C.filterItems=function(op){ var ss=[],args=arguments; for (var k=1;k<args.length;k++){ var items=args[k]; if (!items) continue; for (var i=0;i<items.length;i++){ var it=items[i]; if (op.attr){ if (op.val){ if (it[op.attr]==op.val) ss.push(it); } else if (op.isNull){ if (!it[op.attr]) ss.push(it); } else if (op.isNotNull){ if (it[op.attr]) ss.push(it); } } } } return ss; } C.template=function(){ return '<p></p>'; } C.controller=function(){ var fn=function($scope){ var me=this.constructor.me; $scope.log=console.log; console.info('CTRL init for '+me.op.id); $scope.openMenu = function($mdMenu, ev) { console.info('OOOPPPEEENNN ev=%o',ev); $mdMenu.open(ev); } } fn.me=this; return fn; } C.resolve=function(){ return false; } C.toDirectiveName=function(st){ var tar=""; for (var i=0;i<st.length;i++){ var ch=st[i]; if (ch=='/') ch='-'; if (ch>='A' && ch<='Z' && tar.length>0) tar+='-'; tar+=ch.toLowerCase(); } return tar; } C.genStates=function(){ var name=this.op.id,path=this.op.path,root=this.op.root; name=name.replace('/','_'); if (!path.endsWith("/")) path+="/"; var states=[]; //root state var state={ name:root+'.'+name, path:path+name, template:`<${this.cmpName}></${this.cmpName}>` } states.push(state); var target=root+'.'+name; var links=this.links; if (links.length>0){ for (var i=0;i<links.length;i++){ var it=links[i],module=it.module,furture=module.replace('/','_'); var linkOp={ name:root+"."+name+"."+future, path:path+"/"+name+"/"+future, id: it.module } var linkState={ name:linkOp.name, path:linkOp.path, template:'<div ui-view/>', resolve:{ lazyLoad: app.getLazyLoad(it.module,linkOp), }, controller: app.getLazyCtrl() } states.push(linkState); } } this.target=target; this.states=states; } return me; })