PortaleOrdiniGruppo/PortalStudio/visualweb/eventemitter_edit.html
2025-03-24 15:28:26 +01:00

352 lines
11 KiB
HTML
Raw Blame History

<!DOCTYPE html>
<html>
<head>
<SCRIPT src="../Base.js" type='text/javascript'></SCRIPT>
<SCRIPT src="../stdFunctions.js" type='text/javascript'></SCRIPT>
<SCRIPT src="../controls.js" type='text/javascript'></SCRIPT>
<SCRIPT src="../zdnd_commons.js" type='text/javascript'></SCRIPT>
<SCRIPT src="EditableGridCtrl.js" type='text/javascript'></SCRIPT>
<link rel="stylesheet" type="text/css" media="screen" title="default" href="../filewindow.css"></link>
<script>
//function initialiseGetData(){
var GET_DATA=(function(){
var res={};
var getDataString=new String(window.location);
var questionMarkLocation=getDataString.search(/\?/);
if (questionMarkLocation!=-1){
getDataString=getDataString.substr(questionMarkLocation+1);
var getDataArray=getDataString.split(/&/g);
for (var i=0;i<getDataArray.length;i++){
var nameValuePair=getDataArray[i].split(/=/);
res[unescape(nameValuePair[0])]=unescape(nameValuePair[1]);
}
}
return res;
})();
//}
var parameters={
id: 'parameters',
titles: [ 'Name' , 'Type' , 'Object'],
options:[ {type:'textbox'}, {type:'combobox',values:['var','dataobj','func','const']}, {type:'combobox',values:['articoli_sql','cod_art','this.Trim(this.cod_art.Value())','...other']}],
blank: [ '' , '' , '']
};
var events={
id: 'events',
titles: [ 'Object' , 'Event'],
options:[ {type:'combobox',values:['TODO:Object list']}, {type:'combobox',values:['TODO:Related events list']}],
blank: ['' , '']
};
Z.Dict=function(){
var newkey=function(){
var res="";
for(var i=0; i++<9; res+=String.fromCharCode(Math.floor(Math.random()*26+97)));
return res;
}
var keys={};
this.Add=function(data){
var k=newkey();
while(k in this){
k=this.newkey();
}
this[k]=data;
keys[k]=null;
return k;
}
this.Remove=function(key){
return delete this[key] && delete keys[key];
}
this.Keys=function(){
return Z.Merge({}, keys);
}
}
Z.ParametrsGrid = Z.EditableGrid.extend({
constructor:function(configuration, data){
this.inherit(configuration, data);
},
inputizeCell:function(srcElem){
var res=this.inherit(srcElem);
switch(""+srcElem.getAttribute('dataoptions')){
case '1': //colonna Type
res.onchange=this.typeChanged.closure(this);
break;
case '2': //colonna Object
var cell = srcElem;
var row = srcElem.parentNode;
var txtOld = this.data.rows[row.getAttribute('datarow')][2];
/*
var ele=cell;
while(ele.firstChild){
ele=ele.firstChild;
if(ele.tagName=='INPUT' || ele.tagName=='SELECT'){break;}
}
ele.parentNode.removeChild(res);*/
cell.firstChild.removeChild(res);
switch(row.cells[1].firstChild.lastChild.value){
case 'dataobj':
res = this.inputizeObjectCellAsCombo(this.data.options[2].values.dataobjs, txtOld);
break;
case 'var':
res = this.inputizeObjectCellAsCombo(this.data.options[2].values.vars, txtOld);
break;
default: //toglie combo e crea textbox per input utente
res=document.createElement ("INPUT");
res.setAttribute("type", "TEXT");
res.setAttribute("value" , txtOld);
break;
}
LibJavascript.Events.addEvent(res, 'keydown', this.checkForEnterEsc.closure(this));
res.style.width = "100%";
res.style.boxSizing='border-box';
res.style.MozBoxSizing='border-box';
res.style.webkitBoxSizing='border-box';
cell.firstChild.appendChild(res);
break;
}
return res;
},
inputizeObjectCellAsCombo: function(opts, initValue){
var combo=document.createElement('SELECT');
var selIdx=0;
for(var i=0, opt, l=opts.length; i<l; i++){
opt=opts[i];
if(opt==initValue)
selIdx=combo.options.length;
combo.options[i] = new Option(opt, opt);
}
combo.selectedIndex=selIdx;
return combo;
},
typeChanged: function(){
var objcell=this.objRowSelected.cells[2];//cella di colonna 'Object'
this.inputizeCell(objcell);
}
});
Z.EventsGrid = Z.EditableGrid.extend({
constructor:function(configuration, data){
this.inherit(configuration, data);
},
inputizeCell:function(srcElem){
var res=this.inherit(srcElem);
switch(''+srcElem.getAttribute('dataoptions')){
case '0': //colonna Object
res.onchange=this.typeChanged.closure(this);
break;
case '1': //colonna Event
var cell = srcElem;
var row = srcElem.parentNode;
var txtOld = this.data.rows[row.getAttribute('datarow')][1];
/*
var ele=cell;
while(ele.firstChild){
ele=ele.firstChild;
if(ele.tagName=='INPUT' || ele.tagName=='SELECT'){break;}
}
ele.parentNode.removeChild(res);
*/
cell.firstChild.removeChild(res);
res = this.inputizeObjectCellAsCombo(this.data.options[1].values[row.cells[0].firstChild.lastChild.value], txtOld);
LibJavascript.Events.addEvent(res, 'keypress', this.checkForEnterEsc.closure(this));
res.style.width = "100%";
cell.firstChild.appendChild(res);
break;
}
return res;
},
inputizeObjectCellAsCombo: function(opts, initValue){
var combo=document.createElement('SELECT');
var selIdx=-1;
opts=opts||[];
for(var i=0, opt, l=opts.length; i<l; i++){
opt = IsA(opts[i],'O') ? opts[i][0] : opts[i];
if(opt==initValue)
selIdx=combo.options.length;
combo.options[i] = new Option(opt, opt);
}
if(selIdx!=-1){
combo.selectedIndex=selIdx;
}
return combo;
},
typeChanged: function(){
var objcell=this.objRowSelected.cells[1];//cella di colonna 'Event'
this.inputizeCell(objcell);
}
});
</script>
<title>Event emitter properties</title>
</head>
<body bgcolor="#E4E4E4" topmargin="0" leftmargin="0" marginwidth="0" marginheight="0" scroll="yes" style="border:0px;overflow:auto;margin:0pt">
<div id='maindiv'>
<table valign='top' class='contenuto' style='width:100%;'>
<tr class='titoli' style='width:100%;'>
<td align='center' class='titoli' style='width:50%;'><b>Parameters</b></td>
</tr>
<tr style='width:100%;'>
<td valign='top' id='parametersDiv'>
</td>
</tr>
<tr style='width:100%;'>
<td valign='top' class='footer'>
<INPUT class='bottoni' value='+' id="btn_addParameters" title="Add" type="button" onclick="javascript:onBtnAdd(parametersCtrl);">
<INPUT class='bottoni' value='-' id="btn_deleteParameters" title="Remove selection" type="button" onclick="javascript:parametersCtrl.deleteRow();">
</td>
</tr>
</table>
<table valign='top' class='contenuto' style='width:100%;'>
<tr class='titoli' style='width:100%;'>
<td align='center' class='titoli' style='width:50%;'><b>Events</b></td>
</tr>
<tr style='width:100%;'>
<td valign='top' id='eventsDiv'>
</td>
</tr>
<tr style='width:100%;'>
<td valign='top' class='footer'>
<INPUT class='bottoni' value='+' id="btn_addEvents" title="Add" type="button" onclick="javascript:onBtnAdd(eventsCtrl);">
<INPUT class='bottoni' value='-' id="btn_deleteEvents" title="Remove selection" type="button" onclick="javascript:eventsCtrl.deleteRow();">
</td>
</tr>
</table>
<table style='width:100%;'>
<tr><td valign="middle" align="right" nowrap>
<button onclick="javascript:onOk();" accesskey="o" class="bottoni" style="width:40px;"><u>O</u>k</button>&nbsp;&nbsp;
<button onclick="javascript:onCancel();" accesskey="c" class="bottoni"><u>C</u>ancel</button>
</td></tr>
</table>
</div>
<script>
function onBtnAdd(obj){
obj.addRow();
obj.selectLastRow();
obj.editSelectedRow();
}
var emitterObj=GetOpener().itemsHTML[GET_DATA.objIdx];
parameters.options[2].values=(function(){
var res={vars:[], dataobjs:[]};
for(var i=0, items=GetOpener().itemsHTML, l=items.length, itm; i<l;i++){
itm=items[i];
if(itm!=emitterObj){
switch(itm.type){
case 'Textbox': case 'Variable': case 'Combobox': case 'Checkbox': case 'Radio':
res.vars.push(itm.name);
break;
case 'SQLDataobj': case 'XMLDataobj':
if(Trim(itm.query)!=''){
var fields=GetOpener().GetQueryFields(itm.query)[0];
for(var ii=0, ll=fields.length; ii<ll; res.dataobjs.push(itm.name+'.'+fields[ii++]));
}
break;
}
}
}
return res
})();
parameters.rows=(function(){
var res=new Z.Dict();
var names=emitterObj.parmsNames.split(','), types=emitterObj.parmsTypes.split(','), values=emitterObj.parmsValues.split(',');
for(var i=0, name,value,type, l=names.length; i<l; i++){
name=Trim(names[i]);
value=Trim(values[i]);
type=Trim(types[i]);
if(!(name=='' && value=='' && type==''))
res.Add([name, type ? type : '', value ? Strtran(value,'|',',') : '']);
}
return res;
})();
events.rows=(function(){
var res=new Z.Dict();
var names=emitterObj.eventsNames.split(','), objs=emitterObj.eventsObjs.split(',');
for(var i=0, name,obj, l=names.length; i<l; i++){
obj=Trim(objs[i]);
name=Trim(names[i]);
if(!(name=='' && obj==''))
res.Add([obj, name ? Strtran(name,'|',',') : '']);
}
return res;
})();
events.options=(function(){
var res=[{type:'combobox', values:[]}, {type:'combobox', values:{}} ];
for(var i=0, items=GetOpener().itemsHTML, l=items.length, itm; i<l;i++){
itm=items[i];
if(itm!=emitterObj){
if(itm.objClass.events){
res[0].values.push(itm.name);
res[1].values[itm.name]=itm.objClass.events;
/*switch(itm.type){ //solo finch<63> il sistema degli eventi non sara' adeguato
case 'SQLDataobj': case 'XMLDataobj': case 'Button': case 'Label': case 'Image': //solo finch<63> il sistema degli eventi non sara' adeguato
res[0].values.push(itm.name);
res[1].values[itm.name]=itm.objClass.events;
break; //solo finch<63> il sistema degli eventi non sara' adeguato
} //solo finch<63> il sistema degli eventi non sara' adeguato
*/
}
}
}
return res
})();
var configuration={ blnPointToSelect: false };
var parametersCtrl=new Z.ParametrsGrid(configuration, parameters);
Ctrl('parametersDiv').insertBefore(parametersCtrl.buildTable(), Ctrl('parametersDiv').firstChild);
parametersCtrl.init();
var eventsCtrl=new Z.EventsGrid(configuration, events);
Ctrl('eventsDiv').insertBefore(eventsCtrl.buildTable(), Ctrl('eventsDiv').firstChild);
eventsCtrl.init();
function onOk(){
//salva eventuali righe
if(parametersCtrl.objRowSelected)
parametersCtrl.saveRow(parametersCtrl.objRowSelected, true);
if(eventsCtrl.objRowSelected)
eventsCtrl.saveRow(eventsCtrl.objRowSelected, true);
//assegna i parametri
var parms={names:[], values:[], types:[]};
var row, rows=parametersCtrl.data.rows;
for(var k_row in rows.Keys()){
row = rows[k_row];
parms.names.push(row[0]);
parms.types.push(row[1]);
parms.values.push(Strtran(row[2], ',', '|'));
}
emitterObj.parmsNames = parms.names.join(',');
emitterObj.parmsValues = parms.values.join(',');
emitterObj.parmsTypes = parms.types.join(',');
//assegna gli eventi
var events={objs:[], types:[]};
var row, rows=eventsCtrl.data.rows;
for(var k_row in rows.Keys()){
row = rows[k_row];
events.objs.push(row[0]);
events.types.push(Strtran( row[1] , ',' , '|' ));
}
emitterObj.eventsObjs = events.objs.join(',');
emitterObj.eventsNames = events.types.join(',');
GetOpener().Properties();
GetOpener().writeHTML();
window.close();
}
function onCancel(){
//check for changes: to do
window.close();
}
</script>
</body>
</html>