function print(config,msg){ config.document.getElementById(config.debugId).value+="\n"+msg; } function drawForm(par){ populateSourceTable(par); //populateSourceTableData let tableId="entryTable"; generateTable(par,"formDiv",tableId); generateRow(par,tableId,"User");//generateTableRow } function generateQConfig(listName){ let qConfig=new Object(); qConfig.containerPath="TECANT/Data"; qConfig.schemaName="lists"; qConfig.queryName=listName; return qConfig; } function sourceVar(crfEntryName,elementId,sourceName){ let f=new Object(); f.masterSelectVarName=crfEntryName; f.selectId=elementId; f.inputType="innerHTML"; f.sourceSelectVarName=sourceName; return f; } function getField(config, data, varName){ let debug=false; if (debug) print(config, "getField"); let fields=data.metaData.fields; for (f in fields){ if (debug) print(config,"Checking "+f+": name "+fields[f].name+"/"+varName); if (fields[f].name!=varName) continue; return fields[f]; } return null; } function generateHead(config, headDivName,divName,title){ print(config,"generateHead"); let tb=config.document.createElement('table'); tb.className='t2'; let row=tb.insertRow(); let cell=config.document.createElement('th'); row.appendChild(cell); cell.setAttribute("colspan","4"); cell.style.fontSize="20px"; cell.style.textAlign="center"; let cellData=config.document.createTextNode(title); cell.appendChild(cellData); cell=row.insertCell(); cell.style.fontSize="20px"; let input=config.document.createElement("input"); input.type="button"; input.value="Show"; input.id="toggle"+divName+"VisbilityButton"; input.onclick=function(){toggleVisibility(config,divName,input.id)}; cell.appendChild(input); config.document.getElementById(headDivName).appendChild(tb); print(config,"generateHead: Done"); } function toggleVisibility(config,divName,buttonName){ let x = config.document.getElementById(divName); if (x.style.display === "none") { x.style.display = "block"; config.document.getElementById(buttonName).value="Hide"; } else { x.style.display = "none"; config.document.getElementById(buttonName).value="Show"; } } function selectRowsSuccess(config,data){ print(config,"Select rows on "+data.queryName+" got "+data.rows.length+" rows."); } function populateSourceTable(par){ let debug=true; if (debug){ print(par.config,"populateSourceTable: Starting"); } let config=generateQConfig(par.source.queryName); config.schemaName=par.source.schemaName; if (!("source" in par)) return; if (debug){ print(par.config,"populateSourceTable ["+par.source.queryName+"]"); } config.success=function(data){populateSourceTableData(data,par)}; //config.success=function(data){selectRowsSuccess(par.config,data)}; config.failure=function(errorTxt){print(par.config,"populateSourceData:fail"+errorTxt.exception)}; LABKEY.Query.selectRows(config); } function populateSourceTableData(data,par){ let debug=true; if (debug){ print(par.config, "populateSourceTableData: nrow: "+data.rows.length); } let entry=data.rows[0]; for (let i=0;i < par.source.vars.length;i++){ let srcVarName=par.source.vars[i]; if (debug){ print(par.config, "populateSourceTable ["+srcVarName+"]"); } let row=par.vars[srcVarName]; let el=par.config.document.getElementById(row.selectId); if (debug){ print(par.config, "Element: "+el); } el.innerHTML=entry[row.sourceSelectVarName]; } } function generateTable(par,divName,elementId){ let debug=true; if (debug) print(par.config,"generateTable"); let tb=par.config.document.createElement('table'); tb.className="t2"; tb.id=elementId; par.config.document.getElementById(divName).appendChild(tb); if (debug) print(par.config,"generateTable: Done"); } function generateRow(parameters, tableId, rowId){ let debug=true; if (debug) print(parameters.config,"generateRow: Start"); let config=generateQConfig(parameters.masterQuery); config.success=function(data){generateTableRow(data, parameters, tableId, rowId)}; LABKEY.Query.selectRows(config); if (debug) print(parameters.config,"generateRow: End"); return; } function generateTableRow(data, parameters, tableId, rowId){ let tb=parameters.config.document.getElementById(tableId); let row=parameters.vars[rowId]; let field=getField(parameters.config,data,row.masterSelectVarName); let trow=tb.insertRow(); let cell=parameters.config.document.createElement('th'); trow.appendChild(cell); let text = parameters.config.document.createTextNode(field.shortCaption); cell.appendChild(text); cell=trow.insertCell(); let input = parameters.config.document.createElement("select"); input.id = row.selectId; input.onchange=function(){row.callback(parameters,rowId)}; cell.appendChild(input); } function generateListAndPopulateDaughterSelect(parameters,rowId){;} function generateList(parameters,rowId){;}