pine-admin.js 10.2 KB
Newer Older
nabil el mahiri committed
1
!function(){"use strict";angular.module("pine-admin",["oc.lazyLoad","ui.router","ui.bootstrap","pine","pine.admin","ui.ace"]).config(["$ocLazyLoadProvider",function(a){a.config({asyncLoader:$script})}]).run(["$rootScope",function(a){a.pineCommands={}}]),angular.module("pine.admin",[]),angular.module("pine.admin").controller("ProviderEditCtrl",["$scope","$rootScope","$http","$log",function(a,b,c,d){function e(){var b=JSON.parse(a.copyAsString);c.put("/"+a.spec.name,b).then(function(){},function(){a.error="Could not save settings"})}d.debug("ProviderEditCtrl spec",a.spec),angular.extend(a,{copy:angular.copy(a.spec),commands:{save:{label:"Enregistrer",run:e}}}),a.copyAsString=JSON.stringify(a.spec,void 0,2)}]),angular.module("pine.admin").controller("ProviderInstanceCtrl",["$scope","$rootScope","$http","spec","$log",function(a,b,c,d,e){e.debug("ProviderInstanceCtrl spec",d);var f=d.label||[d.name,d.instance];b.crumbs=[{label:"Admin",href:"#/"},{label:f[0],href:"#/"+d.name,active:!0}],a.spec=d}]),angular.module("pine.admin").controller("ProvidersListCtrl",["$rootScope","$scope","$http","$q","settings",function(a,b,c,d,e){function f(a){var c=a.providers.data,d=a.groups.data.reduce(function(a,b){return b.providers=[],a[b.id]=b,a},{});angular.forEach(c,function(a){if(a.admin){var b=a.admin.group||"other";d[b]||(d[b]={id:b,name:b,providers:[]}),d[b].providers.push(a)}}),b.providersGroups=d}a.crumbs=[{label:"Home",href:"#/"}];var g={groups:c.get("/providers-groups"),providers:c.get(e.links.providers)};d.all(g).then(f)}]),angular.module("pine.admin").controller("ResourceDeleteConfirmCtrl",["$scope","$http","$modalInstance","spec","item",function(a,b,c,d,e){function f(){return b["delete"](d.links.index+"/"+e)}a.item=e,a.confirm=function(){f().then(function(){c.close(!0)},function(){a.cannotDelete=!0})},a.cancel=function(){c.dismiss(!1)}}]),angular.module("pine.admin").controller("ResourceInstanceEditCtrl",["$scope","$rootScope","$log","$state","$stateParams","$http","spec","pineResource","copy","options",function(a,b,c,d,e,f,g,h,i,j){function k(){a.$broadcast(g.instance+" save",i);if(i.isNew)delete i.isNew,f.post(g.links.index,i).then(l);else{var b=i[g.idField];delete i[g.idField],f.put(g.links.index+"/"+b,i).then(l)}}function l(){d.go("resource.list")}c.debug("ResourceInstanceEditCtrl\n======================="),angular.extend(a,{copy:i,options:j,title:function(b){a.title=b},commands:{save:{label:"Enregistrer",run:k}}}),a.run=function(b){b.run(a)},angular.extend(a.commands,b.pineCommands),a.$on("$destroy",function(){delete a.commands.save})}]),angular.module("pine.admin").controller("ResourceInstanceCtrl",["$scope","$state","$stateParams","$http","spec","pineResource","copy",function(a,b,c,d,e,f,g){console.log("ResourceInstanceCtrl"),e.labels=e.labels||[],angular.extend(a,{copy:g,view:{title:e.admin.instanceTitle||e.labels[1]||e.instance}}),a.tasks=(e.admin.tasks||[]).slice().map(function(a){return a.sref="resource.instance.task({task:'"+a.id+"'})",a}),a.tasks.unshift({id:"edit",label:"Edit",sref:"resource.instance.edit"}),e.admin.view&&a.tasks.unshift({id:"view",label:"View",sref:"resource.instance.view"})}]).controller("ResourceInstanceViewCtrl",["$scope","$state","$stateParams","$http","spec","pineResource","copy",function(a,b,c,d,e,f,g){console.log("ResourceInstanceViewCtrl"),angular.extend(a,{copy:g,title:function(b){a.title=b}}),a.view={title:e.admin.instanceTitle||e.labels[0]},a.commands={save:{label:"Retour",run:function(){b.go("resource.list")}}},a.$on("$destroy",function(){delete a.commands.save})}]),angular.module("pine.admin").controller("ResourceListCtrl",["$scope","$state","$stateParams","$http","$modal",function(a,b,c,d,e){function f(a,b){for(var c=0;c<b.length;c++)if(b[c].field===a)return b[c]}function g(){var b=q.admin.list.filters,c=q.links.index;if("user-groups"===q.name)c+="?qt=search&term="+b[0].value;else if("hermes-keys"===q.name)c+="/"+b[0].value;else if("att-orders"===q.name)c+="/"+b[0].value;else if("users"===q.name){var e=f("email",b),g=f("groups",b);c+="?qt=byEmail&term="+e.value+"&groups="+g.value}return d.get(c,{headers:{accept:"application/json"}}).then(function(b){if(200==b.status){var c=b.data||[];c=angular.isArray(c)?c:[c],a[q.name]=a.__entries=c,r.hasPrevious=a.query.skip>0,r.hasNext=c.length===a.query.limit}else a.error="not found",a[q.name]=a.__entries=[]})["catch"](function(){console.log("catche data")})["finally"](function(){})}function h(a){var b=a.sort||0,c=b+1;c>1&&(c=-1),s.sort[a.field]=a.sort=c,l(s).then(i)}function i(b){if(b){var c=b.headers("Access-Control-Allow-Methods").split(", ");c.indexOf("POST")>-1&&!a.commands.add&&(a.commands.add=t.add),c.indexOf("PUT")>-1&&!a.commands.settings&&(a.commands.edit=t.edit)}}function j(){s.skip+=s.limit,l(s)}function k(){s.skip=Math.max(s.skip-s.limit,0),l(s)}function l(b){var c=angular.copy(b),e=[];return angular.forEach(c.sort,function(a,b){0!==a&&e.push(b+":"+a)}),0===e.length?delete c.sort:c.sort=e.join(","),a.itemActions={view:void 0!==q.admin.view,edit:void 0!==q.admin.edit,remove:o},a.loading=!0,console.log("spec.links.index",q.links.index),d.get(q.links.index,{headers:{accept:"application/json"},params:c}).then(function(c){console.log("queryProvider... ",c.data.length,s.limit);var d=c.data||[];a[q.name]=a.__entries=d,r.hasPrevious=b.skip>0,r.hasNext=d.length===s.limit,i(c)})["catch"](function(){a.error="Could not load items"})["finally"](function(){a.loading=!1})}function m(){console.log("add"),b.go("resource.instance.edit",{id:"new"})}function n(){console.log("add"),b.go("resource.instance.view")}function o(a){var b=e.open({templateUrl:"delete-modal",controller:"ResourceDeleteConfirmCtrl",resolve:{item:function(){return a},spec:function(){return q}}});b.result.then(function(a){a&&l(s)})}function p(){b.go("resource.settings")}var q=a.spec,r={pages:[],hasNext:!1,hasPrevious:!1},s={sort:{},skip:0,limit:q.admin.list.pageSize||10};q.admin.list.fields&&(s.f=q.admin.list.fields.join(",")),q.links.edit="",q.links.add="";var t={edit:{label:"Settings",run:p},add:{label:"Nouveau...",run:m}};a.commands={},a.itemActions={view:n,remove:o},l(s),angular.extend(a,{nextPage:j,previousPage:k,pagination:r,queryProvider:l,sort:h,query:s,applyFilter:g})}]),angular.module("pine.admin").factory("aspects",function(){return{http:{tpl:""},audit:{tpl:""},access:{tpl:""}}}),angular.module("pine.admin").factory("header",function(){function a(b){return b.Link?b.Link.split(", ").map(function(b){var c=a.match('^<([^>]+)>s*;s*rel="([^"]+)"$',"$1 $2");return{href:c.group(1),rel:c.group(2)}}).reduce(function(a,b){return a[b.rel]={href:b.href},a},{}):{}}function b(a){var b=a.headers("Access-Control-Allow-Methods");return b?b.split(", "):[]}return{links:a,allowedMethods:b}}),angular.module("pine",[]).factory("util",function(){return{responseData:function(a){return a.data}}}).factory("pineResource",["settings","$http",function(a,b){function c(a){return a.data}function d(a){return a}function e(a){this.spec=a,this.base=a.links.index}var f={},g={accept:"application/json"};return angular.extend(e.prototype,{resourceId:function(a){return a[this.spec.idField]||a._id},href:function(a){return a?this.base+"/"+encodeURIComponent(a):this.base},add:function(a){return b.post(this.href(),a,{headers:g}).then(c,d)},query:function(a){return a.skip=0,a.limit=1e3,b.get(this.href(),{headers:g,params:a}).then(c)},get:function(a){return b.get(this.href(a),{headers:g}).then(c)},lock:function(a){return null},update:function(a){var d=this.resourcId(a);return delete a.id,b.put(this.href(d),a,{headers:g}).then(c)}}),function(a){return a?(f[a.name]||(f[a.name]=new e(a)),f._last=a.name,f[a.name]):f[f._last]}}]).factory("resolveOptions",["settings","util","$http","$q",function(a,b,c,d){a.links.base;return function(a){console.log("resolving",a);var e={};for(var f in a)a[f].href&&(console.log("getting options "+a[f].href),e[f]=c.get(a[f].href,{params:{skip:0,limit:1e3}}).then(b.responseData));return d.all(e).then(function(b){console.log("o",b);for(var c in a)b.hasOwnProperty(c)||(b[c]=a[c]);return console.log("o",b),b})}}]),angular.module("pine.admin").factory("subtasks",function(){var a={};return{set:function(b,c){a[b]=c},get:function(b){return console.log(b),a[b]||{}}}}),angular.module("pine-admin").constant("settings",{links:{base:"/",providers:"/providers"}}),angular.module("pine.admin").config(["$stateProvider","$urlRouterProvider","settings",function(a,b,c){b.otherwise("/"),a.state("providers",{url:"/",templateUrl:"providers-list",controller:"ProvidersListCtrl",resolve:{aspects:["$ocLazyLoad","$http",function(a,b){return null}]}}).state("resource",{url:"/:provider",template:"<div ui-view></div>",controller:"ProviderInstanceCtrl","abstract":!0,resolve:{spec:["$ocLazyLoad","$http","$stateParams","settings",function(a,b,c,d){return b.get(d.links.providers+"/"+c.provider).then(function(b){var c=b.data;if(c.links={index:d.links.base+b.data.name},!c.admin)return c.admin={list:{tpl:"resource-list"}},b.data;c.admin.list.tpl||(c.admin.list.tpl="resource-list");var e=c.admin.deps||c.admin.require;return e?a.load(e).then(function(){return c},function(a){return console.error("load: error",arguments),console.error(a),null}):c})}]}}).state("resource.settings",{url:"/provider-edit",templateUrl:"provider-edit",controller:"ProviderEditCtrl"}).state("resource.list",{url:"",templateUrl:"resource-list-wrapper",controller:"ResourceListCtrl"}).state("resource.instance",{url:"/:id",templateUrl:"resource",controller:"ResourceInstanceCtrl",resolve:{copy:["spec","pineResource","$stateParams",function(a,b,c){return console.log("ResourceInstanceCtrl resolve copy"),"new"===c.id?{isNew:!0}:b(a).get(c.id)}],spec:["spec",function(a){return a}]},"abstract":!0}).state("resource.instance.view",{url:"",template:'<div ng-include="spec.admin.view.tpl"></div>'}).state("resource.instance.edit",{url:"/edit",templateUrl:"resource-edit-wrapper",controller:"ResourceInstanceEditCtrl",resolve:{copy:["spec","pineResource","$stateParams",function(a,b,c){return console.log("resource id ",c.id),"new"===c.id?{isNew:!0}:b(a).get(c.id)}],options:["spec","resolveOptions",function(a,b){return b(a.admin.edit.options)}]}}).state("resource.instance.task",{url:"/:task",resolve:{spec:["spec",function(a){return a}]},template:'<div ng-include="taskTemplate"></div>',controllerProvider:["subtasks","$stateParams",function(a,b){return console.log(a.get(b.task).controller),a.get(b.task).controller}]})}])}();