/usr/share/opsiconfd/static/AngularExample
├ index.html
├ angular.js
├ swinv.js
└ swinv.css
======= index.html =======
Where all other is loaded from..
Name Version Lizenz Installationsgrund
{{swp.name}}
{{swp.version}}
{{sw.reason(swp.name)}}
{{sw.reason(swp.name)}} {{sw.opsiProdId(swp.name)}}
OpsiProduct
{{inst}}
productInfo productId ...............................................
{{prod.productId}}
{{prod.name}}
======= swinv.js =======
The AngularJS mimic..
(function(){
var app = angular.module('opsi-swinv', []);
app.controller('swinvController',function($http,$filter){
this.showallprods=0;
this.showopsiinstalled=0;
baseurl='/rpc';
logonurl='https://testerMemberOfGroupopsireader:unGuessablePassword@'+window.location.host+'/rpc';
this.clientId="defaultclient.domain.local";
this.auditParams={'id':'jsonrpc','method':'auditSoftwareOnClient_getObjects','params':[]};
this.auditParams.params.push([]);
this.auditParams.params.push({"clientId":"defaultclient.domain.local"});
me=this;
me['installed']=[];
me['productinfos']=[];
this.jsonParmDns=function(){
this.search=window.location.search;
if (this.search.match(/dns/)){ // we believe in barcode like {"dns":""}
var qsearch=decodeURIComponent(this.search).match(/{.+dns.+:.+}/);
var jsonsearch=decodeURIComponent(qsearch); // get the json
return angular.fromJson(jsonsearch).dns;
// return JSON.parse(jsonsearch).dns;
}
return null;
};
this.opsicall=function(field,method,arg){
Params={'id':'1','method':method,'params':[]};
if(arg)Params.params[0]=arg;
$http.post(baseurl,Params)
.success(function(response,stat,head,conf){
// alert("success: "+$filter('json')(response));
me.opsires="success: "+method;
me.opsiconf=conf;
if(response.error)
alert(response.error.message);
else
me[field]=response.result;
})
.error(function(err,stat,head,conf){
me.opsires="error";
alert("err: "+(err)+stat+head+$filter('json')(conf));
me.opsistat=stat;
me.opsihead=head;
me.opsiconf=conf;
});
};
this.logon=function(){
$http.post(logonurl,this.logonParams)
.success(function(response){
// alert("success: "+$filter('json')(response));
// call after logon success
me.getproductinfos();
me.refresh(me.clientId);
})
.error(function(response){
alert("err: "+(response));
});
};
this.getprods=function(id){
this.opsires="calling.. "+id;
if(id)this.auditParams.params[1].clientId=id;
$http.post(baseurl,this.auditParams)
.success(function(response,stat,head,conf){
// alert("success: "+response);
if(response.error)alert(response.error.message);
me.products=response.result;
me.opsistat=stat;
me.opsihead=head;
me.opsiconf=conf;
})
.error(function(err,stat,head,conf){
me.opsires="error";
alert("err: "+(err)+stat+head+$filter('json')(conf));
me.opsistat=stat;
me.opsihead=head;
me.opsiconf=conf;
});
};
// get products on Client with id
this.getinstalled=function(id){
this.opsicall('installed','getInstalledLocalBootProductIds_list',id);
};
// get all available OPSi products
this.getproductinfos=function(){
this.opsicall('productinfos','getProducts_listOfHashes');
};
this.logon();
this.clientId=this.jsonParmDns();
// this.getproductinfos();
this.refresh=function(id){
if(null != id){
this.getprods(id);
this.getinstalled(id);
}
};
this.nonMS=function(name){
// return true;
if(name.match(/AddressBook/)) return false;
if(name.match(/^Connection Manager/)) return false;
if(name.match(/^DirectDrawEx/)) return false;
if(name.match(/^DXM_Runtime/)) return false;
if(name.match(/^Fontcore/)) return false;
if(name.match(/KB[0-9]+/)) return false;
if(name.match(/Microsoft/)) return false;
if(name.match(/^MPlayer2/)) return false;
if(name.match(/^Outlook/)) return false;
if(name.match(/^[iI][Ee]/)) return false;
if(name.match(/^Windows/)) return false;
if(name.match(/^MobileOptionPack/)) return false;
if(name.match(/^SchedulingAgent/)) return false;
if(name.match(/^WIC/)) return false;
return true;
}
this.pattern=swpattern;
this.reason=function(name){
for(p in this.pattern){
if(name.match(p))
return this.pattern[p];
}
};
// guess the corresponding OPSI productId from the Windows Product name
this.opsiProdId=function(name){
for(i=0; i
======= swinv.css =======
some tweaking of the appearance - anything goes..
body {
font-family: "Comic Sans M$", Arial, Helvetica, sans-serif;
}
table{
width: 100%;
border-collapse: collapse;
}
td, th {
font-size: 1em;
border: 1px solid #aa0093;
padding: 3px 7px 2px 7px;
}
th {
font-size: 1.1em;
text-align: left;
padding-top: 5px;
padding-bottom: 4px;
background-color: #d30c6b;
color: #ffffff;
}
label{
background-color: #d30c6b;
color: #ffffff;
}
td.warn {
/* enhance unlicensed products*/
color: #000000;
background-color: yellow;
}
.ng-binding{
// background-color: blue;
font-family: Courier;
}